Changeset 745 for trunk/server/source4/libnet/libnet_domain.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_domain.c
r414 r745 48 48 49 49 50 static void continue_domain_open_close(struct rpc_request *req);51 static void continue_domain_open_connect(struct rpc_request *req);52 static void continue_domain_open_lookup(struct rpc_request *req);53 static void continue_domain_open_open(struct rpc_request *req);50 static void continue_domain_open_close(struct tevent_req *subreq); 51 static void continue_domain_open_connect(struct tevent_req *subreq); 52 static void continue_domain_open_lookup(struct tevent_req *subreq); 53 static void continue_domain_open_open(struct tevent_req *subreq); 54 54 55 55 … … 61 61 struct composite_context *c; 62 62 struct domain_open_samr_state *s; 63 struct rpc_request *conn_req;63 struct tevent_req *subreq; 64 64 65 65 c = talloc_get_type(ctx->async.private_data, struct composite_context); … … 77 77 78 78 /* send request */ 79 conn_req = dcerpc_samr_Connect_send(s->pipe, c, &s->connect); 80 if (composite_nomem(conn_req, c)) return; 79 subreq = dcerpc_samr_Connect_r_send(s, c->event_ctx, 80 s->pipe->binding_handle, 81 &s->connect); 82 if (composite_nomem(subreq, c)) return; 81 83 82 84 /* callback handler */ 83 composite_continue_rpc(c, conn_req, continue_domain_open_connect, c);85 tevent_req_set_callback(subreq, continue_domain_open_connect, c); 84 86 } 85 87 … … 89 91 * handle 90 92 */ 91 static void continue_domain_open_close(struct rpc_request *req)93 static void continue_domain_open_close(struct tevent_req *subreq) 92 94 { 93 95 struct composite_context *c; 94 96 struct domain_open_samr_state *s; 95 struct rpc_request *conn_req; 96 97 c = talloc_get_type(req->async.private_data, struct composite_context); 97 98 c = tevent_req_callback_data(subreq, struct composite_context); 98 99 s = talloc_get_type(c->private_data, struct domain_open_samr_state); 99 100 100 101 /* receive samr_Close reply */ 101 c->status = dcerpc_ndr_request_recv(req); 102 c->status = dcerpc_samr_Close_r_recv(subreq, s); 103 TALLOC_FREE(subreq); 102 104 if (!composite_is_ok(c)) return; 103 105 … … 122 124 123 125 /* send request */ 124 conn_req = dcerpc_samr_Connect_send(s->pipe, c, &s->connect); 125 if (composite_nomem(conn_req, c)) return; 126 subreq = dcerpc_samr_Connect_r_send(s, c->event_ctx, 127 s->pipe->binding_handle, 128 &s->connect); 129 if (composite_nomem(subreq, c)) return; 126 130 127 131 /* callback handler */ 128 composite_continue_rpc(c, conn_req, continue_domain_open_connect, c);132 tevent_req_set_callback(subreq, continue_domain_open_connect, c); 129 133 } 130 134 … … 133 137 * Stage 1: Connect to SAM server. 134 138 */ 135 static void continue_domain_open_connect(struct rpc_request *req)139 static void continue_domain_open_connect(struct tevent_req *subreq) 136 140 { 137 141 struct composite_context *c; 138 142 struct domain_open_samr_state *s; 139 struct rpc_request *lookup_req;140 143 struct samr_LookupDomain *r; 141 144 142 c = t alloc_get_type(req->async.private_data, struct composite_context);145 c = tevent_req_callback_data(subreq, struct composite_context); 143 146 s = talloc_get_type(c->private_data, struct domain_open_samr_state); 144 147 145 148 /* receive samr_Connect reply */ 146 c->status = dcerpc_ndr_request_recv(req); 149 c->status = dcerpc_samr_Connect_r_recv(subreq, s); 150 TALLOC_FREE(subreq); 147 151 if (!composite_is_ok(c)) return; 148 152 … … 164 168 if (composite_nomem(r->out.sid, c)) return; 165 169 166 lookup_req = dcerpc_samr_LookupDomain_send(s->pipe, c, r); 167 if (composite_nomem(lookup_req, c)) return; 168 169 composite_continue_rpc(c, lookup_req, continue_domain_open_lookup, c); 170 subreq = dcerpc_samr_LookupDomain_r_send(s, c->event_ctx, 171 s->pipe->binding_handle, 172 r); 173 if (composite_nomem(subreq, c)) return; 174 175 tevent_req_set_callback(subreq, continue_domain_open_lookup, c); 170 176 } 171 177 … … 174 180 * Stage 2: Lookup domain by name. 175 181 */ 176 static void continue_domain_open_lookup(struct rpc_request *req)182 static void continue_domain_open_lookup(struct tevent_req *subreq) 177 183 { 178 184 struct composite_context *c; 179 185 struct domain_open_samr_state *s; 180 struct rpc_request *opendom_req;181 186 struct samr_OpenDomain *r; 182 187 183 c = t alloc_get_type(req->async.private_data, struct composite_context);188 c = tevent_req_callback_data(subreq, struct composite_context); 184 189 s = talloc_get_type(c->private_data, struct domain_open_samr_state); 185 190 186 191 /* receive samr_LookupDomain reply */ 187 c->status = dcerpc_ndr_request_recv(req); 192 c->status = dcerpc_samr_LookupDomain_r_recv(subreq, s); 193 TALLOC_FREE(subreq); 188 194 189 195 if (s->monitor_fn) { … … 216 222 r->out.domain_handle = &s->domain_handle; 217 223 218 opendom_req = dcerpc_samr_OpenDomain_send(s->pipe, c, r); 219 if (composite_nomem(opendom_req, c)) return; 220 221 composite_continue_rpc(c, opendom_req, continue_domain_open_open, c); 224 subreq = dcerpc_samr_OpenDomain_r_send(s, c->event_ctx, 225 s->pipe->binding_handle, 226 r); 227 if (composite_nomem(subreq, c)) return; 228 229 tevent_req_set_callback(subreq, continue_domain_open_open, c); 222 230 } 223 231 … … 226 234 * Stage 3: Open domain. 227 235 */ 228 static void continue_domain_open_open(struct rpc_request *req)236 static void continue_domain_open_open(struct tevent_req *subreq) 229 237 { 230 238 struct composite_context *c; 231 239 struct domain_open_samr_state *s; 232 240 233 c = t alloc_get_type(req->async.private_data, struct composite_context);241 c = tevent_req_callback_data(subreq, struct composite_context); 234 242 s = talloc_get_type(c->private_data, struct domain_open_samr_state); 235 243 236 244 /* receive samr_OpenDomain reply */ 237 c->status = dcerpc_ndr_request_recv(req); 245 c->status = dcerpc_samr_OpenDomain_r_recv(subreq, s); 246 TALLOC_FREE(subreq); 238 247 if (!composite_is_ok(c)) return; 239 248 … … 266 275 struct domain_open_samr_state *s; 267 276 struct composite_context *rpcconn_req; 268 struct rpc_request *close_req, *conn_req;277 struct tevent_req *subreq; 269 278 270 279 c = composite_create(ctx, ctx->event_ctx); … … 314 323 315 324 /* send request to close domain handle */ 316 close_req = dcerpc_samr_Close_send(s->pipe, c, &s->close); 317 if (composite_nomem(close_req, c)) return c; 325 subreq = dcerpc_samr_Close_r_send(s, c->event_ctx, 326 s->pipe->binding_handle, 327 &s->close); 328 if (composite_nomem(subreq, c)) return c; 318 329 319 330 /* callback handler */ 320 composite_continue_rpc(c, close_req, continue_domain_open_close, c);331 tevent_req_set_callback(subreq, continue_domain_open_close, c); 321 332 return c; 322 333 } … … 329 340 330 341 /* send request */ 331 conn_req = dcerpc_samr_Connect_send(s->pipe, c, &s->connect); 332 if (composite_nomem(conn_req, c)) return c; 342 subreq = dcerpc_samr_Connect_r_send(s, c->event_ctx, 343 s->pipe->binding_handle, 344 &s->connect); 345 if (composite_nomem(subreq, c)) return c; 333 346 334 347 /* callback handler */ 335 composite_continue_rpc(c, conn_req, continue_domain_open_connect, c);348 tevent_req_set_callback(subreq, continue_domain_open_connect, c); 336 349 return c; 337 350 } … … 390 403 391 404 static void continue_rpc_connect_lsa(struct composite_context *ctx); 392 static void continue_lsa_policy_open(struct rpc_request *req);405 static void continue_lsa_policy_open(struct tevent_req *subreq); 393 406 394 407 … … 408 421 struct domain_open_lsa_state *s; 409 422 struct composite_context *rpcconn_req; 410 struct rpc_request *openpol_req;423 struct tevent_req *subreq; 411 424 struct lsa_QosInfo *qos; 412 425 … … 460 473 461 474 /* send rpc request */ 462 openpol_req = dcerpc_lsa_OpenPolicy2_send(s->pipe, c, &s->openpol); 463 if (composite_nomem(openpol_req, c)) return c; 464 465 composite_continue_rpc(c, openpol_req, continue_lsa_policy_open, c); 475 subreq = dcerpc_lsa_OpenPolicy2_r_send(s, c->event_ctx, 476 s->pipe->binding_handle, 477 &s->openpol); 478 if (composite_nomem(subreq, c)) return c; 479 480 tevent_req_set_callback(subreq, continue_lsa_policy_open, c); 466 481 return c; 467 482 } … … 476 491 struct domain_open_lsa_state *s; 477 492 struct lsa_QosInfo *qos; 478 struct rpc_request *openpol_req;493 struct tevent_req *subreq; 479 494 480 495 c = talloc_get_type(ctx->async.private_data, struct composite_context); … … 504 519 505 520 /* send rpc request */ 506 openpol_req = dcerpc_lsa_OpenPolicy2_send(s->pipe, c, &s->openpol); 507 if (composite_nomem(openpol_req, c)) return; 508 509 composite_continue_rpc(c, openpol_req, continue_lsa_policy_open, c); 521 subreq = dcerpc_lsa_OpenPolicy2_r_send(s, c->event_ctx, 522 s->pipe->binding_handle, 523 &s->openpol); 524 if (composite_nomem(subreq, c)) return; 525 526 tevent_req_set_callback(subreq, continue_lsa_policy_open, c); 510 527 } 511 528 … … 514 531 Stage 1: Lsa policy opened - we're done, if successfully 515 532 */ 516 static void continue_lsa_policy_open(struct rpc_request *req)533 static void continue_lsa_policy_open(struct tevent_req *subreq) 517 534 { 518 535 struct composite_context *c; 519 536 struct domain_open_lsa_state *s; 520 537 521 c = t alloc_get_type(req->async.private_data, struct composite_context);538 c = tevent_req_callback_data(subreq, struct composite_context); 522 539 s = talloc_get_type(c->private_data, struct domain_open_lsa_state); 523 540 524 c->status = dcerpc_ndr_request_recv(req); 541 c->status = dcerpc_lsa_OpenPolicy2_r_recv(subreq, s); 542 TALLOC_FREE(subreq); 525 543 if (!composite_is_ok(c)) return; 526 544 … … 667 685 668 686 669 static void continue_lsa_close(struct rpc_request *req);687 static void continue_lsa_close(struct tevent_req *subreq); 670 688 671 689 … … 676 694 struct composite_context *c; 677 695 struct domain_close_lsa_state *s; 678 struct rpc_request *close_req;696 struct tevent_req *subreq; 679 697 680 698 /* composite context and state structure allocation */ … … 703 721 704 722 /* send the request */ 705 close_req = dcerpc_lsa_Close_send(s->pipe, c, &s->close); 706 if (composite_nomem(close_req, c)) return c; 707 708 composite_continue_rpc(c, close_req, continue_lsa_close, c); 723 subreq = dcerpc_lsa_Close_r_send(s, c->event_ctx, 724 s->pipe->binding_handle, 725 &s->close); 726 if (composite_nomem(subreq, c)) return c; 727 728 tevent_req_set_callback(subreq, continue_lsa_close, c); 709 729 return c; 710 730 } … … 714 734 Stage 1: Receive result of lsa close call 715 735 */ 716 static void continue_lsa_close(struct rpc_request *req)736 static void continue_lsa_close(struct tevent_req *subreq) 717 737 { 718 738 struct composite_context *c; 719 739 struct domain_close_lsa_state *s; 720 740 721 c = t alloc_get_type(req->async.private_data, struct composite_context);741 c = tevent_req_callback_data(subreq, struct composite_context); 722 742 s = talloc_get_type(c->private_data, struct domain_close_lsa_state); 723 743 724 c->status = dcerpc_ndr_request_recv(req); 744 c->status = dcerpc_lsa_Close_r_recv(subreq, s); 745 TALLOC_FREE(subreq); 725 746 if (!composite_is_ok(c)) return; 726 747 … … 771 792 772 793 773 static void continue_samr_close(struct rpc_request *req);794 static void continue_samr_close(struct tevent_req *subreq); 774 795 775 796 … … 780 801 struct composite_context *c; 781 802 struct domain_close_samr_state *s; 782 struct rpc_request *close_req;803 struct tevent_req *subreq; 783 804 784 805 /* composite context and state structure allocation */ … … 805 826 806 827 /* send the request */ 807 close_req = dcerpc_samr_Close_send(ctx->samr.pipe, ctx, &s->close); 808 if (composite_nomem(close_req, c)) return c; 809 810 composite_continue_rpc(c, close_req, continue_samr_close, c); 828 subreq = dcerpc_samr_Close_r_send(s, c->event_ctx, 829 ctx->samr.pipe->binding_handle, 830 &s->close); 831 if (composite_nomem(subreq, c)) return c; 832 833 tevent_req_set_callback(subreq, continue_samr_close, c); 811 834 return c; 812 835 } … … 816 839 Stage 1: Receive result of samr close call 817 840 */ 818 static void continue_samr_close(struct rpc_request *req)841 static void continue_samr_close(struct tevent_req *subreq) 819 842 { 820 843 struct composite_context *c; 821 844 struct domain_close_samr_state *s; 822 845 823 c = t alloc_get_type(req->async.private_data, struct composite_context);846 c = tevent_req_callback_data(subreq, struct composite_context); 824 847 s = talloc_get_type(c->private_data, struct domain_close_samr_state); 825 848 826 c->status = dcerpc_ndr_request_recv(req); 849 c->status = dcerpc_samr_Close_r_recv(subreq, s); 850 TALLOC_FREE(subreq); 827 851 if (!composite_is_ok(c)) return; 828 852 … … 941 965 942 966 static void continue_rpc_connect(struct composite_context *c); 943 static void continue_samr_connect(struct rpc_request *c);944 static void continue_samr_enum_domains(struct rpc_request *req);945 static void continue_samr_close_handle(struct rpc_request *req);967 static void continue_samr_connect(struct tevent_req *subreq); 968 static void continue_samr_enum_domains(struct tevent_req *subreq); 969 static void continue_samr_close_handle(struct tevent_req *subreq); 946 970 947 971 static struct domainlist* get_domain_list(TALLOC_CTX *mem_ctx, struct domain_list_state *s); … … 956 980 struct composite_context *c; 957 981 struct domain_list_state *s; 958 struct rpc_request *samrconn_req;982 struct tevent_req *subreq; 959 983 960 984 c = talloc_get_type(ctx->async.private_data, struct composite_context); … … 968 992 s->samrconn.out.connect_handle = &s->connect_handle; 969 993 970 samrconn_req = dcerpc_samr_Connect_send(s->ctx->samr.pipe, c, &s->samrconn); 971 if (composite_nomem(samrconn_req, c)) return; 972 973 composite_continue_rpc(c, samrconn_req, continue_samr_connect, c); 994 subreq = dcerpc_samr_Connect_r_send(s, c->event_ctx, 995 s->ctx->samr.pipe->binding_handle, 996 &s->samrconn); 997 if (composite_nomem(subreq, c)) return; 998 999 tevent_req_set_callback(subreq, continue_samr_connect, c); 974 1000 } 975 1001 … … 979 1005 a request to enumerate domain databases available 980 1006 */ 981 static void continue_samr_connect(struct rpc_request *req)1007 static void continue_samr_connect(struct tevent_req *subreq) 982 1008 { 983 1009 struct composite_context *c; 984 1010 struct domain_list_state *s; 985 struct rpc_request *enumdom_req; 986 987 c = talloc_get_type(req->async.private_data, struct composite_context); 1011 1012 c = tevent_req_callback_data(subreq, struct composite_context); 988 1013 s = talloc_get_type(c->private_data, struct domain_list_state); 989 1014 990 c->status = dcerpc_ndr_request_recv(req); 1015 c->status = dcerpc_samr_Connect_r_recv(subreq, s); 1016 TALLOC_FREE(subreq); 991 1017 if (!composite_is_ok(c)) return; 992 1018 … … 1009 1035 if (composite_nomem(s->enumdom.out.sam, c)) return; 1010 1036 1011 enumdom_req = dcerpc_samr_EnumDomains_send(s->ctx->samr.pipe, c, &s->enumdom); 1012 if (composite_nomem(enumdom_req, c)) return; 1013 1014 composite_continue_rpc(c, enumdom_req, continue_samr_enum_domains, c); 1037 subreq = dcerpc_samr_EnumDomains_r_send(s, c->event_ctx, 1038 s->ctx->samr.pipe->binding_handle, 1039 &s->enumdom); 1040 if (composite_nomem(subreq, c)) return; 1041 1042 tevent_req_set_callback(subreq, continue_samr_enum_domains, c); 1015 1043 } 1016 1044 … … 1021 1049 upon completion. 1022 1050 */ 1023 static void continue_samr_enum_domains(struct rpc_request *req)1051 static void continue_samr_enum_domains(struct tevent_req *subreq) 1024 1052 { 1025 1053 struct composite_context *c; 1026 1054 struct domain_list_state *s; 1027 struct rpc_request *enumdom_req; 1028 struct rpc_request *samrclose_req; 1029 1030 c = talloc_get_type(req->async.private_data, struct composite_context); 1055 1056 c = tevent_req_callback_data(subreq, struct composite_context); 1031 1057 s = talloc_get_type(c->private_data, struct domain_list_state); 1032 1058 1033 c->status = dcerpc_ndr_request_recv(req); 1059 c->status = dcerpc_samr_EnumDomains_r_recv(subreq, s); 1060 TALLOC_FREE(subreq); 1034 1061 if (!composite_is_ok(c)) return; 1035 1062 … … 1058 1085 1059 1086 /* send the request */ 1060 enumdom_req = dcerpc_samr_EnumDomains_send(s->ctx->samr.pipe, c, &s->enumdom); 1061 if (composite_nomem(enumdom_req, c)) return; 1062 1063 composite_continue_rpc(c, enumdom_req, continue_samr_enum_domains, c); 1087 subreq = dcerpc_samr_EnumDomains_r_send(s, c->event_ctx, 1088 s->ctx->samr.pipe->binding_handle, 1089 &s->enumdom); 1090 if (composite_nomem(subreq, c)) return; 1091 1092 tevent_req_set_callback(subreq, continue_samr_enum_domains, c); 1064 1093 1065 1094 } else { … … 1073 1102 1074 1103 /* send the request */ 1075 samrclose_req = dcerpc_samr_Close_send(s->ctx->samr.pipe, c, &s->samrclose); 1076 if (composite_nomem(samrclose_req, c)) return; 1077 1078 composite_continue_rpc(c, samrclose_req, continue_samr_close_handle, c); 1104 subreq = dcerpc_samr_Close_r_send(s, c->event_ctx, 1105 s->ctx->samr.pipe->binding_handle, 1106 &s->samrclose); 1107 if (composite_nomem(subreq, c)) return; 1108 1109 tevent_req_set_callback(subreq, continue_samr_close_handle, c); 1079 1110 } 1080 1111 … … 1083 1114 Stage 4: Receive result of closing samr connection handle. 1084 1115 */ 1085 static void continue_samr_close_handle(struct rpc_request *req)1116 static void continue_samr_close_handle(struct tevent_req *subreq) 1086 1117 { 1087 1118 struct composite_context *c; 1088 1119 struct domain_list_state *s; 1089 1120 1090 c = t alloc_get_type(req->async.private_data, struct composite_context);1121 c = tevent_req_callback_data(subreq, struct composite_context); 1091 1122 s = talloc_get_type(c->private_data, struct domain_list_state); 1092 1123 1093 c->status = dcerpc_ndr_request_recv(req); 1124 c->status = dcerpc_samr_Close_r_recv(subreq, s); 1125 TALLOC_FREE(subreq); 1094 1126 if (!composite_is_ok(c)) return; 1095 1127 … … 1117 1149 static struct domainlist* get_domain_list(TALLOC_CTX *mem_ctx, struct domain_list_state *s) 1118 1150 { 1119 int i;1151 uint32_t i; 1120 1152 if (mem_ctx == NULL || s == NULL) return NULL; 1121 1153 … … 1164 1196 struct domain_list_state *s; 1165 1197 struct composite_context *rpcconn_req; 1166 struct rpc_request *samrconn_req;1198 struct tevent_req *subreq; 1167 1199 1168 1200 /* composite context and state structure allocation */ … … 1200 1232 s->samrconn.out.connect_handle = &s->connect_handle; 1201 1233 1202 samrconn_req = dcerpc_samr_Connect_send(s->ctx->samr.pipe, c, &s->samrconn); 1203 if (composite_nomem(samrconn_req, c)) return c; 1204 1205 composite_continue_rpc(c, samrconn_req, continue_samr_connect, c); 1234 subreq = dcerpc_samr_Connect_r_send(s, c->event_ctx, 1235 s->ctx->samr.pipe->binding_handle, 1236 &s->samrconn); 1237 if (composite_nomem(subreq, c)) return c; 1238 1239 tevent_req_set_callback(subreq, continue_samr_connect, c); 1206 1240 } 1207 1241
Note:
See TracChangeset
for help on using the changeset viewer.