Changeset 740 for vendor/current/source4/libnet/userman.c
- Timestamp:
- Nov 14, 2012, 12:59:34 PM (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified vendor/current/source4/libnet/userman.c ¶
r414 r740 33 33 struct useradd_state { 34 34 struct dcerpc_pipe *pipe; 35 struct rpc_request *req;36 35 struct policy_handle domain_handle; 37 36 struct samr_CreateUser createuser; … … 44 43 45 44 46 static void continue_useradd_create(struct rpc_request *req);45 static void continue_useradd_create(struct tevent_req *subreq); 47 46 48 47 … … 50 49 * Stage 1 (and the only one for now): Create user account. 51 50 */ 52 static void continue_useradd_create(struct rpc_request *req)51 static void continue_useradd_create(struct tevent_req *subreq) 53 52 { 54 53 struct composite_context *c; 55 54 struct useradd_state *s; 56 55 57 c = t alloc_get_type(req->async.private_data, struct composite_context);56 c = tevent_req_callback_data(subreq, struct composite_context); 58 57 s = talloc_get_type(c->private_data, struct useradd_state); 59 58 60 59 /* 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); 62 62 if (!composite_is_ok(c)) return; 63 63 … … 101 101 struct composite_context *c; 102 102 struct useradd_state *s; 103 struct tevent_req *subreq; 103 104 104 105 if (!p || !io) return NULL; … … 131 132 132 133 /* 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); 137 140 return c; 138 141 } … … 204 207 205 208 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);209 static void continue_userdel_name_found(struct tevent_req *subreq); 210 static void continue_userdel_user_opened(struct tevent_req *subreq); 211 static void continue_userdel_deleted(struct tevent_req *subreq); 209 212 210 213 … … 212 215 * Stage 1: Lookup the user name and resolve it to rid 213 216 */ 214 static void continue_userdel_name_found(struct rpc_request *req)217 static void continue_userdel_name_found(struct tevent_req *subreq) 215 218 { 216 219 struct composite_context *c; 217 220 struct userdel_state *s; 218 struct rpc_request *openuser_req;219 221 struct monitor_msg msg; 220 222 221 c = t alloc_get_type(req->async.private_data, struct composite_context);223 c = tevent_req_callback_data(subreq, struct composite_context); 222 224 s = talloc_get_type(c->private_data, struct userdel_state); 223 225 224 226 /* 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); 226 229 if (!composite_is_ok(c)) return; 227 230 … … 265 268 266 269 /* 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); 271 276 } 272 277 … … 275 280 * Stage 2: Open user account. 276 281 */ 277 static void continue_userdel_user_opened(struct rpc_request*req)282 static void continue_userdel_user_opened(struct tevent_req *subreq) 278 283 { 279 284 struct composite_context *c; 280 285 struct userdel_state *s; 281 struct rpc_request *deluser_req;282 286 struct monitor_msg msg; 283 287 284 c = t alloc_get_type(req->async.private_data, struct composite_context);288 c = tevent_req_callback_data(subreq, struct composite_context); 285 289 s = talloc_get_type(c->private_data, struct userdel_state); 286 290 287 291 /* 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); 289 294 if (!composite_is_ok(c)) return; 290 295 … … 313 318 314 319 /* 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; 317 324 318 325 /* callback handler setup */ 319 composite_continue_rpc(c, deluser_req, continue_userdel_deleted, c);326 tevent_req_set_callback(subreq, continue_userdel_deleted, c); 320 327 } 321 328 … … 324 331 * Stage 3: Delete user account 325 332 */ 326 static void continue_userdel_deleted(struct rpc_request *req)333 static void continue_userdel_deleted(struct tevent_req *subreq) 327 334 { 328 335 struct composite_context *c; … … 330 337 struct monitor_msg msg; 331 338 332 c = t alloc_get_type(req->async.private_data, struct composite_context);339 c = tevent_req_callback_data(subreq, struct composite_context); 333 340 s = talloc_get_type(c->private_data, struct userdel_state); 334 341 335 342 /* 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); 337 345 if (!composite_is_ok(c)) return; 338 346 … … 370 378 struct composite_context *c; 371 379 struct userdel_state *s; 372 struct rpc_request *lookup_req;380 struct tevent_req *subreq; 373 381 374 382 /* composite context allocation and setup */ … … 397 405 398 406 /* 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; 401 411 402 412 /* 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); 404 414 return c; 405 415 } … … 455 465 */ 456 466 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);467 static void continue_usermod_name_found(struct tevent_req *subreq); 468 static void continue_usermod_user_opened(struct tevent_req *subreq); 469 static void continue_usermod_user_queried(struct tevent_req *subreq); 470 static void continue_usermod_user_changed(struct tevent_req *subreq); 461 471 462 472 … … 480 490 * Step 1: Lookup user name 481 491 */ 482 static void continue_usermod_name_found(struct rpc_request *req)492 static void continue_usermod_name_found(struct tevent_req *subreq) 483 493 { 484 494 struct composite_context *c; 485 495 struct usermod_state *s; 486 struct rpc_request *openuser_req;487 496 struct monitor_msg msg; 488 497 489 c = t alloc_get_type(req->async.private_data, struct composite_context);498 c = tevent_req_callback_data(subreq, struct composite_context); 490 499 s = talloc_get_type(c->private_data, struct usermod_state); 491 500 492 501 /* 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); 494 504 if (!composite_is_ok(c)) return; 495 505 … … 533 543 534 544 /* 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); 539 551 } 540 552 … … 656 668 struct usermod_state *s) 657 669 { 658 struct rpc_request *query_req, *setuser_req;659 670 bool do_set; 660 671 union samr_UserInfo *i = &s->info; 672 struct tevent_req *subreq; 661 673 662 674 /* set the level to invalid value, so that unless setfields routine … … 687 699 /* send query user info request to retrieve complete data of 688 700 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); 691 706 692 707 } else { … … 696 711 697 712 /* 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); 700 718 } 701 719 … … 707 725 * Stage 2: Open user account 708 726 */ 709 static void continue_usermod_user_opened(struct rpc_request *req)727 static void continue_usermod_user_opened(struct tevent_req *subreq) 710 728 { 711 729 struct composite_context *c; 712 730 struct usermod_state *s; 713 731 714 c = t alloc_get_type(req->async.private_data, struct composite_context);732 c = tevent_req_callback_data(subreq, struct composite_context); 715 733 s = talloc_get_type(c->private_data, struct usermod_state); 716 734 717 c->status = dcerpc_ndr_request_recv(req); 735 c->status = dcerpc_samr_OpenUser_r_recv(subreq, s); 736 TALLOC_FREE(subreq); 718 737 if (!composite_is_ok(c)) return; 719 738 … … 731 750 * Stage 2a (optional): Query the user information 732 751 */ 733 static void continue_usermod_user_queried(struct rpc_request *req)752 static void continue_usermod_user_queried(struct tevent_req *subreq) 734 753 { 735 754 struct composite_context *c; … … 737 756 union samr_UserInfo *i; 738 757 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); 742 760 s = talloc_get_type(c->private_data, struct usermod_state); 743 761 … … 745 763 746 764 /* 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); 748 767 if (!composite_is_ok(c)) return; 749 768 … … 766 785 767 786 /* 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); 770 792 } 771 793 … … 774 796 * Stage 3: Set new user account data 775 797 */ 776 static void continue_usermod_user_changed(struct rpc_request *req)798 static void continue_usermod_user_changed(struct tevent_req *subreq) 777 799 { 778 800 struct composite_context *c; 779 801 struct usermod_state *s; 780 802 781 c = t alloc_get_type(req->async.private_data, struct composite_context);803 c = tevent_req_callback_data(subreq, struct composite_context); 782 804 s = talloc_get_type(c->private_data, struct usermod_state); 783 805 784 806 /* 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); 786 809 if (!composite_is_ok(c)) return; 787 810 … … 818 841 struct composite_context *c; 819 842 struct usermod_state *s; 820 struct rpc_request *lookup_req;843 struct tevent_req *subreq; 821 844 822 845 /* composite context allocation and setup */ … … 845 868 846 869 /* 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; 849 874 850 875 /* 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); 852 877 return c; 853 878 }
Note:
See TracChangeset
for help on using the changeset viewer.