Ignore:
Timestamp:
Nov 27, 2012, 4:43:17 PM (13 years ago)
Author:
Silvan Scherrer
Message:

Samba Server: updated trunk to 3.6.0

Location:
trunk/server
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/server

  • trunk/server/source4/libnet/libnet_group.c

    r414 r745  
    148148        }
    149149
     150        talloc_free(c);
    150151        return status;
    151152}
     
    409410
    410411        talloc_free(c);
    411 
    412412        return status;
    413413}
     
    448448
    449449static void continue_lsa_domain_opened(struct composite_context *ctx);
    450 static void continue_domain_queried(struct rpc_request *req);
     450static void continue_domain_queried(struct tevent_req *subreq);
    451451static 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);
     452static void continue_groups_enumerated(struct tevent_req *subreq);
    454453
    455454
     
    470469        struct composite_context *c;
    471470        struct grouplist_state *s;
    472         struct rpc_request *query_req;
     471        struct tevent_req *subreq;
    473472        bool prereq_met = false;
    474473
     
    501500
    502501        /* 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);
    507508        return c;
    508509}
     
    517518        struct composite_context *c;
    518519        struct grouplist_state *s;
    519         struct rpc_request *query_req;
     520        struct tevent_req *subreq;
    520521       
    521522        c = talloc_get_type(ctx->async.private_data, struct composite_context);
     
    533534
    534535        /* 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);
    539542}
    540543
     
    544547 * provided a valid samr handle is opened
    545548 */
    546 static void continue_domain_queried(struct rpc_request *req)
     549static void continue_domain_queried(struct tevent_req *subreq)
    547550{
    548551        struct composite_context *c;
    549552        struct grouplist_state *s;
    550         struct rpc_request *enum_req;
    551553        bool prereq_met = false;
    552554       
    553         c = talloc_get_type(req->async.private_data, struct composite_context);
     555        c = tevent_req_callback_data(subreq, struct composite_context);
    554556        s = talloc_get_type(c->private_data, struct grouplist_state);
    555557
    556558        /* 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);
    558561        if (!composite_is_ok(c)) return;
    559562
     
    577580
    578581        /* 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);
    583588}
    584589
     
    592597        struct composite_context *c;
    593598        struct grouplist_state *s;
    594         struct rpc_request *enum_req;
     599        struct tevent_req *subreq;
    595600
    596601        c = talloc_get_type(ctx->async.private_data, struct composite_context);
     
    612617
    613618        /* 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);
    618625}
    619626
     
    622629 * Stage 2: receive enumerated groups and their rids
    623630 */
    624 static void continue_groups_enumerated(struct rpc_request *req)
     631static void continue_groups_enumerated(struct tevent_req *subreq)
    625632{
    626633        struct composite_context *c;
    627634        struct grouplist_state *s;
    628         int i;
    629 
    630         c = talloc_get_type(req->async.private_data, struct composite_context);
     635        uint32_t i;
     636
     637        c = tevent_req_callback_data(subreq, struct composite_context);
    631638        s = talloc_get_type(c->private_data, struct grouplist_state);
    632639
    633640        /* 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);
    635643        if (!composite_is_ok(c)) return;
    636644
     
    664672
    665673                        /* groupname */
    666                         s->groups[i].groupname = talloc_strdup(c, entry->name.string);
     674                        s->groups[i].groupname = talloc_strdup(s->groups, entry->name.string);
    667675                        if (composite_nomem(s->groups[i].groupname, c)) return;
    668676
    669677                        /* 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);
    671679                        if (composite_nomem(s->groups[i].sid, c)) return;
    672680                }
     
    697705
    698706        if (c == NULL || mem_ctx == NULL || io == NULL) {
     707                talloc_free(c);
    699708                return NT_STATUS_INVALID_PARAMETER;
    700709        }
     
    724733        }
    725734
     735        talloc_free(c);
    726736        return status;
    727737}
Note: See TracChangeset for help on using the changeset viewer.