Changeset 745 for trunk/server/source4/libnet/libnet_rpc.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_rpc.c
r414 r745 23 23 #include "libcli/libcli.h" 24 24 #include "libcli/composite/composite.h" 25 #include "librpc/rpc/dcerpc.h"26 25 #include "librpc/rpc/dcerpc_proto.h" 27 26 #include "librpc/gen_ndr/ndr_lsa_c.h" … … 111 110 case LIBNET_RPC_CONNECT_SERVER_ADDRESS: 112 111 b->flags = r->in.dcerpc_flags; 112 } 113 114 if (DEBUGLEVEL >= 10) { 115 b->flags |= DCERPC_DEBUG_PRINT_BOTH; 113 116 } 114 117 … … 225 228 226 229 227 static void continue_lookup_dc(struct composite_context *ctx);230 static void continue_lookup_dc(struct tevent_req *req); 228 231 static void continue_rpc_connect(struct composite_context *ctx); 229 232 … … 245 248 struct composite_context *c; 246 249 struct rpc_connect_dc_state *s; 247 struct composite_context*lookup_dc_req;250 struct tevent_req *lookup_dc_req; 248 251 249 252 /* composite context allocation and setup */ … … 282 285 if (composite_nomem(lookup_dc_req, c)) return c; 283 286 284 composite_continue(c,lookup_dc_req, continue_lookup_dc, c);287 tevent_req_set_callback(lookup_dc_req, continue_lookup_dc, c); 285 288 return c; 286 289 } … … 291 294 initiate RpcConnect to it 292 295 */ 293 static void continue_lookup_dc(struct composite_context *ctx)296 static void continue_lookup_dc(struct tevent_req *req) 294 297 { 295 298 struct composite_context *c; … … 298 301 struct monitor_msg msg; 299 302 struct msg_net_lookup_dc data; 300 301 c = t alloc_get_type(ctx->async.private_data, struct composite_context);302 s = talloc_get_type (c->private_data, struct rpc_connect_dc_state);303 304 c = tevent_req_callback_data(req, struct composite_context); 305 s = talloc_get_type_abort(c->private_data, struct rpc_connect_dc_state); 303 306 304 307 /* receive result of domain controller lookup */ 305 c->status = libnet_LookupDCs_recv( ctx, c, &s->f);308 c->status = libnet_LookupDCs_recv(req, c, &s->f); 306 309 if (!composite_is_ok(c)) return; 307 310 … … 455 458 456 459 static void continue_dci_rpc_connect(struct composite_context *ctx); 457 static void continue_lsa_policy(struct rpc_request *req);458 static void continue_lsa_query_info(struct rpc_request *req);459 static void continue_lsa_query_info2(struct rpc_request *req);460 static void continue_lsa_policy(struct tevent_req *subreq); 461 static void continue_lsa_query_info(struct tevent_req *subreq); 462 static void continue_lsa_query_info2(struct tevent_req *subreq); 460 463 static void continue_epm_map_binding(struct composite_context *ctx); 461 464 static void continue_secondary_conn(struct composite_context *ctx); … … 529 532 struct composite_context *c; 530 533 struct rpc_connect_dci_state *s; 531 struct rpc_request *open_pol_req;534 struct tevent_req *subreq; 532 535 533 536 c = talloc_get_type(ctx->async.private_data, struct composite_context); … … 574 577 s->lsa_open_policy.out.handle = &s->lsa_handle; 575 578 576 open_pol_req = dcerpc_lsa_OpenPolicy2_send(s->lsa_pipe, c, &s->lsa_open_policy); 577 if (composite_nomem(open_pol_req, c)) return; 578 579 composite_continue_rpc(c, open_pol_req, continue_lsa_policy, c); 579 subreq = dcerpc_lsa_OpenPolicy2_r_send(s, c->event_ctx, 580 s->lsa_pipe->binding_handle, 581 &s->lsa_open_policy); 582 if (composite_nomem(subreq, c)) return; 583 584 tevent_req_set_callback(subreq, continue_lsa_policy, c); 580 585 } 581 586 … … 585 590 for kerberos realm (dns name) and guid. The query may fail. 586 591 */ 587 static void continue_lsa_policy(struct rpc_request *req)592 static void continue_lsa_policy(struct tevent_req *subreq) 588 593 { 589 594 struct composite_context *c; 590 595 struct rpc_connect_dci_state *s; 591 struct rpc_request *query_info_req; 592 593 c = talloc_get_type(req->async.private_data, struct composite_context); 596 597 c = tevent_req_callback_data(subreq, struct composite_context); 594 598 s = talloc_get_type(c->private_data, struct rpc_connect_dci_state); 595 599 596 c->status = dcerpc_ndr_request_recv(req); 600 c->status = dcerpc_lsa_OpenPolicy2_r_recv(subreq, s); 601 TALLOC_FREE(subreq); 597 602 if (!NT_STATUS_IS_OK(c->status)) { 598 603 composite_error(c, c->status); … … 631 636 if (composite_nomem(s->lsa_query_info2.out.info, c)) return; 632 637 633 query_info_req = dcerpc_lsa_QueryInfoPolicy2_send(s->lsa_pipe, c, &s->lsa_query_info2); 634 if (composite_nomem(query_info_req, c)) return; 635 636 composite_continue_rpc(c, query_info_req, continue_lsa_query_info2, c); 638 subreq = dcerpc_lsa_QueryInfoPolicy2_r_send(s, c->event_ctx, 639 s->lsa_pipe->binding_handle, 640 &s->lsa_query_info2); 641 if (composite_nomem(subreq, c)) return; 642 643 tevent_req_set_callback(subreq, continue_lsa_query_info2, c); 637 644 } 638 645 … … 642 649 may result in failure) and query lsa info for domain name and sid. 643 650 */ 644 static void continue_lsa_query_info2(struct rpc_request *req)651 static void continue_lsa_query_info2(struct tevent_req *subreq) 645 652 { 646 653 struct composite_context *c; 647 654 struct rpc_connect_dci_state *s; 648 struct rpc_request *query_info_req; 649 650 c = talloc_get_type(req->async.private_data, struct composite_context); 655 656 c = tevent_req_callback_data(subreq, struct composite_context); 651 657 s = talloc_get_type(c->private_data, struct rpc_connect_dci_state); 652 658 653 c->status = dcerpc_ndr_request_recv(req); 659 c->status = dcerpc_lsa_QueryInfoPolicy2_r_recv(subreq, s); 660 TALLOC_FREE(subreq); 654 661 655 662 /* In case of error just null the realm and guid and proceed … … 657 664 controller we talking to - NT-style PDC also counts */ 658 665 659 if (NT_STATUS_EQUAL(c->status, NT_STATUS_ NET_WRITE_FAULT)) {666 if (NT_STATUS_EQUAL(c->status, NT_STATUS_RPC_PROCNUM_OUT_OF_RANGE)) { 660 667 s->r.out.realm = NULL; 661 668 s->r.out.guid = NULL; … … 706 713 if (composite_nomem(s->lsa_query_info.out.info, c)) return; 707 714 708 query_info_req = dcerpc_lsa_QueryInfoPolicy_send(s->lsa_pipe, c, &s->lsa_query_info); 709 if (composite_nomem(query_info_req, c)) return; 710 711 composite_continue_rpc(c, query_info_req, continue_lsa_query_info, c); 715 subreq = dcerpc_lsa_QueryInfoPolicy_r_send(s, c->event_ctx, 716 s->lsa_pipe->binding_handle, 717 &s->lsa_query_info); 718 if (composite_nomem(subreq, c)) return; 719 720 tevent_req_set_callback(subreq, continue_lsa_query_info, c); 712 721 } 713 722 … … 716 725 Step 5 of RpcConnectDCInfo: Get domain name and sid 717 726 */ 718 static void continue_lsa_query_info(struct rpc_request *req)727 static void continue_lsa_query_info(struct tevent_req *subreq) 719 728 { 720 729 struct composite_context *c; 721 730 struct rpc_connect_dci_state *s; 722 731 723 c = t alloc_get_type(req->async.private_data, struct composite_context);732 c = tevent_req_callback_data(subreq, struct composite_context); 724 733 s = talloc_get_type(c->private_data, struct rpc_connect_dci_state); 725 734 726 c->status = dcerpc_ndr_request_recv(req); 735 c->status = dcerpc_lsa_QueryInfoPolicy_r_recv(subreq, s); 736 TALLOC_FREE(subreq); 727 737 if (!NT_STATUS_IS_OK(c->status)) { 728 738 s->r.out.error_string = talloc_asprintf(c, … … 763 773 764 774 /* prepare to get endpoint mapping for the requested interface */ 765 s->final_binding = talloc (s, struct dcerpc_binding);775 s->final_binding = talloc_zero(s, struct dcerpc_binding); 766 776 if (composite_nomem(s->final_binding, c)) return; 767 777 … … 885 895 if (r->in.dcerpc_iface == &ndr_table_samr) { 886 896 ctx->samr.pipe = talloc_reference(ctx, r->out.dcerpc_pipe); 897 ctx->samr.samr_handle = ctx->samr.pipe->binding_handle; 887 898 888 899 } else if (r->in.dcerpc_iface == &ndr_table_lsarpc) { 889 900 ctx->lsa.pipe = talloc_reference(ctx, r->out.dcerpc_pipe); 901 ctx->lsa.lsa_handle = ctx->lsa.pipe->binding_handle; 890 902 } 891 903
Note:
See TracChangeset
for help on using the changeset viewer.