Changeset 745 for trunk/server/source4/libnet/libnet_user.c
- Timestamp:
- Nov 27, 2012, 4:43:17 PM (13 years ago)
- Location:
- trunk/server
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/server
- Property svn:mergeinfo changed
/vendor/current merged: 581,587,591,594,597,600,615,618,740
- Property svn:mergeinfo changed
-
trunk/server/source4/libnet/libnet_user.c
r414 r745 179 179 } 180 180 181 talloc_free(c); 181 182 return status; 182 183 } … … 347 348 } 348 349 350 talloc_free(c); 349 351 return status; 350 352 } … … 573 575 { 574 576 NTSTATUS status = composite_wait(c); 577 578 talloc_free(c); 575 579 return status; 576 580 } … … 869 873 870 874 talloc_free(c); 871 872 875 return status; 873 876 } … … 910 913 911 914 static void continue_lsa_domain_opened(struct composite_context *ctx); 912 static void continue_domain_queried(struct rpc_request *req);915 static void continue_domain_queried(struct tevent_req *subreq); 913 916 static void continue_samr_domain_opened(struct composite_context *ctx); 914 static void continue_users_enumerated(struct rpc_request *req);917 static void continue_users_enumerated(struct tevent_req *subreq); 915 918 916 919 … … 931 934 struct composite_context *c; 932 935 struct userlist_state *s; 933 struct rpc_request *query_req;936 struct tevent_req *subreq; 934 937 bool prereq_met = false; 935 938 … … 962 965 963 966 /* send the request */ 964 query_req = dcerpc_lsa_QueryInfoPolicy_send(ctx->lsa.pipe, c, &s->query_domain); 965 if (composite_nomem(query_req, c)) return c; 966 967 composite_continue_rpc(c, query_req, continue_domain_queried, c); 967 subreq = dcerpc_lsa_QueryInfoPolicy_r_send(s, c->event_ctx, 968 ctx->lsa.pipe->binding_handle, 969 &s->query_domain); 970 if (composite_nomem(subreq, c)) return c; 971 972 tevent_req_set_callback(subreq, continue_domain_queried, c); 968 973 return c; 969 974 } … … 978 983 struct composite_context *c; 979 984 struct userlist_state *s; 980 struct rpc_request *query_req;985 struct tevent_req *subreq; 981 986 982 987 c = talloc_get_type(ctx->async.private_data, struct composite_context); … … 994 999 995 1000 /* send the request */ 996 query_req = dcerpc_lsa_QueryInfoPolicy_send(s->ctx->lsa.pipe, c, &s->query_domain); 997 if (composite_nomem(query_req, c)) return; 998 999 composite_continue_rpc(c, query_req, continue_domain_queried, c); 1001 subreq = dcerpc_lsa_QueryInfoPolicy_r_send(s, c->event_ctx, 1002 s->ctx->lsa.pipe->binding_handle, 1003 &s->query_domain); 1004 if (composite_nomem(subreq, c)) return; 1005 1006 tevent_req_set_callback(subreq, continue_domain_queried, c); 1000 1007 } 1001 1008 … … 1005 1012 * provided a valid samr handle is opened 1006 1013 */ 1007 static void continue_domain_queried(struct rpc_request *req)1014 static void continue_domain_queried(struct tevent_req *subreq) 1008 1015 { 1009 1016 struct composite_context *c; 1010 1017 struct userlist_state *s; 1011 struct rpc_request *enum_req;1012 1018 bool prereq_met = false; 1013 1019 1014 c = t alloc_get_type(req->async.private_data, struct composite_context);1020 c = tevent_req_callback_data(subreq, struct composite_context); 1015 1021 s = talloc_get_type(c->private_data, struct userlist_state); 1016 1022 1017 1023 /* receive result of rpc request */ 1018 c->status = dcerpc_ndr_request_recv(req); 1024 c->status = dcerpc_lsa_QueryInfoPolicy_r_recv(subreq, s); 1025 TALLOC_FREE(subreq); 1019 1026 if (!composite_is_ok(c)) return; 1020 1027 … … 1039 1046 1040 1047 /* send the request */ 1041 enum_req = dcerpc_samr_EnumDomainUsers_send(s->ctx->samr.pipe, c, &s->user_list); 1042 if (composite_nomem(enum_req, c)) return; 1043 1044 composite_continue_rpc(c, enum_req, continue_users_enumerated, c); 1048 subreq = dcerpc_samr_EnumDomainUsers_r_send(s, c->event_ctx, 1049 s->ctx->samr.pipe->binding_handle, 1050 &s->user_list); 1051 if (composite_nomem(subreq, c)) return; 1052 1053 tevent_req_set_callback(subreq, continue_users_enumerated, c); 1045 1054 } 1046 1055 … … 1054 1063 struct composite_context *c; 1055 1064 struct userlist_state *s; 1056 struct rpc_request *enum_req;1065 struct tevent_req *subreq; 1057 1066 1058 1067 c = talloc_get_type(ctx->async.private_data, struct composite_context); … … 1075 1084 1076 1085 /* send the request */ 1077 enum_req = dcerpc_samr_EnumDomainUsers_send(s->ctx->samr.pipe, c, &s->user_list); 1078 if (composite_nomem(enum_req, c)) return; 1079 1080 composite_continue_rpc(c, enum_req, continue_users_enumerated, c); 1086 subreq = dcerpc_samr_EnumDomainUsers_r_send(s, c->event_ctx, 1087 s->ctx->samr.pipe->binding_handle, 1088 &s->user_list); 1089 if (composite_nomem(subreq, c)) return; 1090 1091 tevent_req_set_callback(subreq, continue_users_enumerated, c); 1081 1092 } 1082 1093 … … 1085 1096 * Stage 2: receive enumerated users and their rids 1086 1097 */ 1087 static void continue_users_enumerated(struct rpc_request *req)1098 static void continue_users_enumerated(struct tevent_req *subreq) 1088 1099 { 1089 1100 struct composite_context *c; 1090 1101 struct userlist_state *s; 1091 int i;1092 1093 c = t alloc_get_type(req->async.private_data, struct composite_context);1102 uint32_t i; 1103 1104 c = tevent_req_callback_data(subreq, struct composite_context); 1094 1105 s = talloc_get_type(c->private_data, struct userlist_state); 1095 1106 1096 1107 /* receive result of rpc request */ 1097 c->status = dcerpc_ndr_request_recv(req); 1108 c->status = dcerpc_samr_EnumDomainUsers_r_recv(subreq, s); 1109 TALLOC_FREE(subreq); 1098 1110 if (!composite_is_ok(c)) return; 1099 1111 … … 1127 1139 1128 1140 /* username */ 1129 s->users[i].username = talloc_strdup( c, entry->name.string);1141 s->users[i].username = talloc_strdup(s->users, entry->name.string); 1130 1142 if (composite_nomem(s->users[i].username, c)) return; 1131 1143 1132 1144 /* sid string */ 1133 s->users[i].sid = dom_sid_string( c, user_sid);1145 s->users[i].sid = dom_sid_string(s->users, user_sid); 1134 1146 if (composite_nomem(s->users[i].sid, c)) return; 1135 1147 } … … 1160 1172 1161 1173 if (c == NULL || mem_ctx == NULL || r == NULL) { 1174 talloc_free(c); 1162 1175 return NT_STATUS_INVALID_PARAMETER; 1163 1176 } 1164 1177 1165 1178 status = composite_wait(c); 1166 1179 if (NT_STATUS_IS_OK(status) || … … 1187 1200 } 1188 1201 1202 talloc_free(c); 1189 1203 return status; 1190 1204 }
Note:
See TracChangeset
for help on using the changeset viewer.