Changeset 745 for trunk/server/source4/libnet/libnet_group.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_group.c
r414 r745 148 148 } 149 149 150 talloc_free(c); 150 151 return status; 151 152 } … … 409 410 410 411 talloc_free(c); 411 412 412 return status; 413 413 } … … 448 448 449 449 static void continue_lsa_domain_opened(struct composite_context *ctx); 450 static void continue_domain_queried(struct rpc_request *req);450 static void continue_domain_queried(struct tevent_req *subreq); 451 451 static void continue_samr_domain_opened(struct composite_context *ctx); 452 static void continue_domain_queried(struct rpc_request *req); 453 static void continue_groups_enumerated(struct rpc_request *req); 452 static void continue_groups_enumerated(struct tevent_req *subreq); 454 453 455 454 … … 470 469 struct composite_context *c; 471 470 struct grouplist_state *s; 472 struct rpc_request *query_req;471 struct tevent_req *subreq; 473 472 bool prereq_met = false; 474 473 … … 501 500 502 501 /* send the request */ 503 query_req = dcerpc_lsa_QueryInfoPolicy_send(ctx->lsa.pipe, c, &s->query_domain); 504 if (composite_nomem(query_req, c)) return c; 505 506 composite_continue_rpc(c, query_req, continue_domain_queried, c); 502 subreq = dcerpc_lsa_QueryInfoPolicy_r_send(s, c->event_ctx, 503 ctx->lsa.pipe->binding_handle, 504 &s->query_domain); 505 if (composite_nomem(subreq, c)) return c; 506 507 tevent_req_set_callback(subreq, continue_domain_queried, c); 507 508 return c; 508 509 } … … 517 518 struct composite_context *c; 518 519 struct grouplist_state *s; 519 struct rpc_request *query_req;520 struct tevent_req *subreq; 520 521 521 522 c = talloc_get_type(ctx->async.private_data, struct composite_context); … … 533 534 534 535 /* send the request */ 535 query_req = dcerpc_lsa_QueryInfoPolicy_send(s->ctx->lsa.pipe, c, &s->query_domain); 536 if (composite_nomem(query_req, c)) return; 537 538 composite_continue_rpc(c, query_req, continue_domain_queried, c); 536 subreq = dcerpc_lsa_QueryInfoPolicy_r_send(s, c->event_ctx, 537 s->ctx->lsa.pipe->binding_handle, 538 &s->query_domain); 539 if (composite_nomem(subreq, c)) return; 540 541 tevent_req_set_callback(subreq, continue_domain_queried, c); 539 542 } 540 543 … … 544 547 * provided a valid samr handle is opened 545 548 */ 546 static void continue_domain_queried(struct rpc_request *req)549 static void continue_domain_queried(struct tevent_req *subreq) 547 550 { 548 551 struct composite_context *c; 549 552 struct grouplist_state *s; 550 struct rpc_request *enum_req;551 553 bool prereq_met = false; 552 554 553 c = t alloc_get_type(req->async.private_data, struct composite_context);555 c = tevent_req_callback_data(subreq, struct composite_context); 554 556 s = talloc_get_type(c->private_data, struct grouplist_state); 555 557 556 558 /* receive result of rpc request */ 557 c->status = dcerpc_ndr_request_recv(req); 559 c->status = dcerpc_lsa_QueryInfoPolicy_r_recv(subreq, s); 560 TALLOC_FREE(subreq); 558 561 if (!composite_is_ok(c)) return; 559 562 … … 577 580 578 581 /* send the request */ 579 enum_req = dcerpc_samr_EnumDomainGroups_send(s->ctx->samr.pipe, c, &s->group_list); 580 if (composite_nomem(enum_req, c)) return; 581 582 composite_continue_rpc(c, enum_req, continue_groups_enumerated, c); 582 subreq = dcerpc_samr_EnumDomainGroups_r_send(s, c->event_ctx, 583 s->ctx->samr.pipe->binding_handle, 584 &s->group_list); 585 if (composite_nomem(subreq, c)) return; 586 587 tevent_req_set_callback(subreq, continue_groups_enumerated, c); 583 588 } 584 589 … … 592 597 struct composite_context *c; 593 598 struct grouplist_state *s; 594 struct rpc_request *enum_req;599 struct tevent_req *subreq; 595 600 596 601 c = talloc_get_type(ctx->async.private_data, struct composite_context); … … 612 617 613 618 /* send the request */ 614 enum_req = dcerpc_samr_EnumDomainGroups_send(s->ctx->samr.pipe, c, &s->group_list); 615 if (composite_nomem(enum_req, c)) return; 616 617 composite_continue_rpc(c, enum_req, continue_groups_enumerated, c); 619 subreq = dcerpc_samr_EnumDomainGroups_r_send(s, c->event_ctx, 620 s->ctx->samr.pipe->binding_handle, 621 &s->group_list); 622 if (composite_nomem(subreq, c)) return; 623 624 tevent_req_set_callback(subreq, continue_groups_enumerated, c); 618 625 } 619 626 … … 622 629 * Stage 2: receive enumerated groups and their rids 623 630 */ 624 static void continue_groups_enumerated(struct rpc_request *req)631 static void continue_groups_enumerated(struct tevent_req *subreq) 625 632 { 626 633 struct composite_context *c; 627 634 struct grouplist_state *s; 628 int i;629 630 c = t alloc_get_type(req->async.private_data, struct composite_context);635 uint32_t i; 636 637 c = tevent_req_callback_data(subreq, struct composite_context); 631 638 s = talloc_get_type(c->private_data, struct grouplist_state); 632 639 633 640 /* receive result of rpc request */ 634 c->status = dcerpc_ndr_request_recv(req); 641 c->status = dcerpc_samr_EnumDomainGroups_r_recv(subreq, s); 642 TALLOC_FREE(subreq); 635 643 if (!composite_is_ok(c)) return; 636 644 … … 664 672 665 673 /* groupname */ 666 s->groups[i].groupname = talloc_strdup( c, entry->name.string);674 s->groups[i].groupname = talloc_strdup(s->groups, entry->name.string); 667 675 if (composite_nomem(s->groups[i].groupname, c)) return; 668 676 669 677 /* sid string */ 670 s->groups[i].sid = dom_sid_string( c, group_sid);678 s->groups[i].sid = dom_sid_string(s->groups, group_sid); 671 679 if (composite_nomem(s->groups[i].sid, c)) return; 672 680 } … … 697 705 698 706 if (c == NULL || mem_ctx == NULL || io == NULL) { 707 talloc_free(c); 699 708 return NT_STATUS_INVALID_PARAMETER; 700 709 } … … 724 733 } 725 734 735 talloc_free(c); 726 736 return status; 727 737 }
Note:
See TracChangeset
for help on using the changeset viewer.