Ignore:
Timestamp:
Nov 14, 2012, 12:59:34 PM (12 years ago)
Author:
Silvan Scherrer
Message:

Samba Server: update vendor to 3.6.0

File:
1 edited

Legend:

Unmodified
Added
Removed
  • TabularUnified vendor/current/source4/libnet/userman.c

    r414 r740  
    3333struct useradd_state {
    3434        struct dcerpc_pipe       *pipe;
    35         struct rpc_request       *req;
    3635        struct policy_handle     domain_handle;
    3736        struct samr_CreateUser   createuser;
     
    4443
    4544
    46 static void continue_useradd_create(struct rpc_request *req);
     45static void continue_useradd_create(struct tevent_req *subreq);
    4746
    4847
     
    5049 * Stage 1 (and the only one for now): Create user account.
    5150 */
    52 static void continue_useradd_create(struct rpc_request *req)
     51static void continue_useradd_create(struct tevent_req *subreq)
    5352{
    5453        struct composite_context *c;
    5554        struct useradd_state *s;
    5655
    57         c = talloc_get_type(req->async.private_data, struct composite_context);
     56        c = tevent_req_callback_data(subreq, struct composite_context);
    5857        s = talloc_get_type(c->private_data, struct useradd_state);
    5958
    6059        /* check rpc layer status code */
    61         c->status = dcerpc_ndr_request_recv(s->req);
     60        c->status = dcerpc_samr_CreateUser_r_recv(subreq, s);
     61        TALLOC_FREE(subreq);
    6262        if (!composite_is_ok(c)) return;
    6363
     
    101101        struct composite_context *c;
    102102        struct useradd_state *s;
     103        struct tevent_req *subreq;
    103104
    104105        if (!p || !io) return NULL;
     
    131132
    132133        /* send the request */
    133         s->req = dcerpc_samr_CreateUser_send(p, c, &s->createuser);
    134         if (composite_nomem(s->req, c)) return c;
    135 
    136         composite_continue_rpc(c, s->req, continue_useradd_create, c);
     134        subreq = dcerpc_samr_CreateUser_r_send(s, c->event_ctx,
     135                                               p->binding_handle,
     136                                               &s->createuser);
     137        if (composite_nomem(subreq, c)) return c;
     138
     139        tevent_req_set_callback(subreq, continue_useradd_create, c);
    137140        return c;
    138141}
     
    204207
    205208
    206 static void continue_userdel_name_found(struct rpc_request *req);
    207 static void continue_userdel_user_opened(struct rpc_request* req);
    208 static void continue_userdel_deleted(struct rpc_request *req);
     209static void continue_userdel_name_found(struct tevent_req *subreq);
     210static void continue_userdel_user_opened(struct tevent_req *subreq);
     211static void continue_userdel_deleted(struct tevent_req *subreq);
    209212
    210213
     
    212215 * Stage 1: Lookup the user name and resolve it to rid
    213216 */
    214 static void continue_userdel_name_found(struct rpc_request *req)
     217static void continue_userdel_name_found(struct tevent_req *subreq)
    215218{
    216219        struct composite_context *c;
    217220        struct userdel_state *s;
    218         struct rpc_request *openuser_req;
    219221        struct monitor_msg msg;
    220222
    221         c = talloc_get_type(req->async.private_data, struct composite_context);
     223        c = tevent_req_callback_data(subreq, struct composite_context);
    222224        s = talloc_get_type(c->private_data, struct userdel_state);
    223225
    224226        /* receive samr_LookupNames result */
    225         c->status = dcerpc_ndr_request_recv(req);
     227        c->status = dcerpc_samr_LookupNames_r_recv(subreq, s);
     228        TALLOC_FREE(subreq);
    226229        if (!composite_is_ok(c)) return;
    227230
     
    265268
    266269        /* send rpc request */
    267         openuser_req = dcerpc_samr_OpenUser_send(s->pipe, c, &s->openuser);
    268         if (composite_nomem(openuser_req, c)) return;
    269 
    270         composite_continue_rpc(c, openuser_req, continue_userdel_user_opened, c);
     270        subreq = dcerpc_samr_OpenUser_r_send(s, c->event_ctx,
     271                                             s->pipe->binding_handle,
     272                                             &s->openuser);
     273        if (composite_nomem(subreq, c)) return;
     274
     275        tevent_req_set_callback(subreq, continue_userdel_user_opened, c);
    271276}
    272277
     
    275280 * Stage 2: Open user account.
    276281 */
    277 static void continue_userdel_user_opened(struct rpc_request* req)
     282static void continue_userdel_user_opened(struct tevent_req *subreq)
    278283{
    279284        struct composite_context *c;
    280285        struct userdel_state *s;
    281         struct rpc_request *deluser_req;
    282286        struct monitor_msg msg;
    283287
    284         c = talloc_get_type(req->async.private_data, struct composite_context);
     288        c = tevent_req_callback_data(subreq, struct composite_context);
    285289        s = talloc_get_type(c->private_data, struct userdel_state);
    286290
    287291        /* receive samr_OpenUser result */
    288         c->status = dcerpc_ndr_request_recv(req);
     292        c->status = dcerpc_samr_OpenUser_r_recv(subreq, s);
     293        TALLOC_FREE(subreq);
    289294        if (!composite_is_ok(c)) return;
    290295
     
    313318       
    314319        /* send rpc request */
    315         deluser_req = dcerpc_samr_DeleteUser_send(s->pipe, c, &s->deleteuser);
    316         if (composite_nomem(deluser_req, c)) return;
     320        subreq = dcerpc_samr_DeleteUser_r_send(s, c->event_ctx,
     321                                               s->pipe->binding_handle,
     322                                               &s->deleteuser);
     323        if (composite_nomem(subreq, c)) return;
    317324
    318325        /* callback handler setup */
    319         composite_continue_rpc(c, deluser_req, continue_userdel_deleted, c);
     326        tevent_req_set_callback(subreq, continue_userdel_deleted, c);
    320327}
    321328
     
    324331 * Stage 3: Delete user account
    325332 */
    326 static void continue_userdel_deleted(struct rpc_request *req)
     333static void continue_userdel_deleted(struct tevent_req *subreq)
    327334{
    328335        struct composite_context *c;
     
    330337        struct monitor_msg msg;
    331338
    332         c = talloc_get_type(req->async.private_data, struct composite_context);
     339        c = tevent_req_callback_data(subreq, struct composite_context);
    333340        s = talloc_get_type(c->private_data, struct userdel_state);
    334341
    335342        /* receive samr_DeleteUser result */
    336         c->status = dcerpc_ndr_request_recv(req);
     343        c->status = dcerpc_samr_DeleteUser_r_recv(subreq, s);
     344        TALLOC_FREE(subreq);
    337345        if (!composite_is_ok(c)) return;
    338346
     
    370378        struct composite_context *c;
    371379        struct userdel_state *s;
    372         struct rpc_request *lookup_req;
     380        struct tevent_req *subreq;
    373381
    374382        /* composite context allocation and setup */
     
    397405
    398406        /* send the request */
    399         lookup_req = dcerpc_samr_LookupNames_send(p, c, &s->lookupname);
    400         if (composite_nomem(lookup_req, c)) return c;
     407        subreq = dcerpc_samr_LookupNames_r_send(s, c->event_ctx,
     408                                                p->binding_handle,
     409                                                &s->lookupname);
     410        if (composite_nomem(subreq, c)) return c;
    401411
    402412        /* set the next stage */
    403         composite_continue_rpc(c, lookup_req, continue_userdel_name_found, c);
     413        tevent_req_set_callback(subreq, continue_userdel_name_found, c);
    404414        return c;
    405415}
     
    455465 */
    456466
    457 static void continue_usermod_name_found(struct rpc_request *req);
    458 static void continue_usermod_user_opened(struct rpc_request *req);
    459 static void continue_usermod_user_queried(struct rpc_request *req);
    460 static void continue_usermod_user_changed(struct rpc_request *req);
     467static void continue_usermod_name_found(struct tevent_req *subreq);
     468static void continue_usermod_user_opened(struct tevent_req *subreq);
     469static void continue_usermod_user_queried(struct tevent_req *subreq);
     470static void continue_usermod_user_changed(struct tevent_req *subreq);
    461471
    462472
     
    480490 * Step 1: Lookup user name
    481491 */
    482 static void continue_usermod_name_found(struct rpc_request *req)
     492static void continue_usermod_name_found(struct tevent_req *subreq)
    483493{
    484494        struct composite_context *c;
    485495        struct usermod_state *s;
    486         struct rpc_request *openuser_req;
    487496        struct monitor_msg msg;
    488497
    489         c = talloc_get_type(req->async.private_data, struct composite_context);
     498        c = tevent_req_callback_data(subreq, struct composite_context);
    490499        s = talloc_get_type(c->private_data, struct usermod_state);
    491500
    492501        /* receive samr_LookupNames result */
    493         c->status = dcerpc_ndr_request_recv(req);
     502        c->status = dcerpc_samr_LookupNames_r_recv(subreq, s);
     503        TALLOC_FREE(subreq);
    494504        if (!composite_is_ok(c)) return;
    495505
     
    533543
    534544        /* send the rpc request */
    535         openuser_req = dcerpc_samr_OpenUser_send(s->pipe, c, &s->openuser);
    536         if (composite_nomem(openuser_req, c)) return;
    537 
    538         composite_continue_rpc(c, openuser_req, continue_usermod_user_opened, c);
     545        subreq = dcerpc_samr_OpenUser_r_send(s, c->event_ctx,
     546                                             s->pipe->binding_handle,
     547                                             &s->openuser);
     548        if (composite_nomem(subreq, c)) return;
     549
     550        tevent_req_set_callback(subreq, continue_usermod_user_opened, c);
    539551}
    540552
     
    656668                               struct usermod_state *s)
    657669{
    658         struct rpc_request *query_req, *setuser_req;
    659670        bool do_set;
    660671        union samr_UserInfo *i = &s->info;
     672        struct tevent_req *subreq;
    661673
    662674        /* set the level to invalid value, so that unless setfields routine
     
    687699                /* send query user info request to retrieve complete data of
    688700                   a particular info level */
    689                 query_req = dcerpc_samr_QueryUserInfo_send(s->pipe, c, &s->queryuser);
    690                 composite_continue_rpc(c, query_req, continue_usermod_user_queried, c);
     701                subreq = dcerpc_samr_QueryUserInfo_r_send(s, c->event_ctx,
     702                                                          s->pipe->binding_handle,
     703                                                          &s->queryuser);
     704                if (composite_nomem(subreq, c)) return NT_STATUS_NO_MEMORY;
     705                tevent_req_set_callback(subreq, continue_usermod_user_queried, c);
    691706
    692707        } else {
     
    696711
    697712                /* send set user info request after making required change */
    698                 setuser_req = dcerpc_samr_SetUserInfo_send(s->pipe, c, &s->setuser);
    699                 composite_continue_rpc(c, setuser_req, continue_usermod_user_changed, c);
     713                subreq = dcerpc_samr_SetUserInfo_r_send(s, c->event_ctx,
     714                                                        s->pipe->binding_handle,
     715                                                        &s->setuser);
     716                if (composite_nomem(subreq, c)) return NT_STATUS_NO_MEMORY;
     717                tevent_req_set_callback(subreq, continue_usermod_user_changed, c);
    700718        }
    701719       
     
    707725 * Stage 2: Open user account
    708726 */
    709 static void continue_usermod_user_opened(struct rpc_request *req)
     727static void continue_usermod_user_opened(struct tevent_req *subreq)
    710728{
    711729        struct composite_context *c;
    712730        struct usermod_state *s;
    713731
    714         c = talloc_get_type(req->async.private_data, struct composite_context);
     732        c = tevent_req_callback_data(subreq, struct composite_context);
    715733        s = talloc_get_type(c->private_data, struct usermod_state);
    716734
    717         c->status = dcerpc_ndr_request_recv(req);
     735        c->status = dcerpc_samr_OpenUser_r_recv(subreq, s);
     736        TALLOC_FREE(subreq);
    718737        if (!composite_is_ok(c)) return;
    719738
     
    731750 * Stage 2a (optional): Query the user information
    732751 */
    733 static void continue_usermod_user_queried(struct rpc_request *req)
     752static void continue_usermod_user_queried(struct tevent_req *subreq)
    734753{
    735754        struct composite_context *c;
     
    737756        union samr_UserInfo *i;
    738757        uint16_t level;
    739         struct rpc_request *setuser_req;
    740        
    741         c = talloc_get_type(req->async.private_data, struct composite_context);
     758       
     759        c = tevent_req_callback_data(subreq, struct composite_context);
    742760        s = talloc_get_type(c->private_data, struct usermod_state);
    743761
     
    745763
    746764        /* receive samr_QueryUserInfo result */
    747         c->status = dcerpc_ndr_request_recv(req);
     765        c->status = dcerpc_samr_QueryUserInfo_r_recv(subreq, s);
     766        TALLOC_FREE(subreq);
    748767        if (!composite_is_ok(c)) return;
    749768
     
    766785
    767786        /* send the rpc request */
    768         setuser_req = dcerpc_samr_SetUserInfo_send(s->pipe, c, &s->setuser);
    769         composite_continue_rpc(c, setuser_req, continue_usermod_user_changed, c);
     787        subreq = dcerpc_samr_SetUserInfo_r_send(s, c->event_ctx,
     788                                                s->pipe->binding_handle,
     789                                                &s->setuser);
     790        if (composite_nomem(subreq, c)) return;
     791        tevent_req_set_callback(subreq, continue_usermod_user_changed, c);
    770792}
    771793
     
    774796 * Stage 3: Set new user account data
    775797 */
    776 static void continue_usermod_user_changed(struct rpc_request *req)
     798static void continue_usermod_user_changed(struct tevent_req *subreq)
    777799{
    778800        struct composite_context *c;
    779801        struct usermod_state *s;
    780802       
    781         c = talloc_get_type(req->async.private_data, struct composite_context);
     803        c = tevent_req_callback_data(subreq, struct composite_context);
    782804        s = talloc_get_type(c->private_data, struct usermod_state);
    783805
    784806        /* receive samr_SetUserInfo result */
    785         c->status = dcerpc_ndr_request_recv(req);
     807        c->status = dcerpc_samr_SetUserInfo_r_recv(subreq, s);
     808        TALLOC_FREE(subreq);
    786809        if (!composite_is_ok(c)) return;
    787810
     
    818841        struct composite_context *c;
    819842        struct usermod_state *s;
    820         struct rpc_request *lookup_req;
     843        struct tevent_req *subreq;
    821844
    822845        /* composite context allocation and setup */
     
    845868
    846869        /* send the rpc request */
    847         lookup_req = dcerpc_samr_LookupNames_send(p, c, &s->lookupname);
    848         if (composite_nomem(lookup_req, c)) return c;
     870        subreq = dcerpc_samr_LookupNames_r_send(s, c->event_ctx,
     871                                                p->binding_handle,
     872                                                &s->lookupname);
     873        if (composite_nomem(subreq, c)) return c;
    849874       
    850875        /* callback handler setup */
    851         composite_continue_rpc(c, lookup_req, continue_usermod_name_found, c);
     876        tevent_req_set_callback(subreq, continue_usermod_name_found, c);
    852877        return c;
    853878}
Note: See TracChangeset for help on using the changeset viewer.