Changeset 745 for trunk/server/source4/libnet/libnet_passwd.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_passwd.c
r414 r745 52 52 uint8_t old_lm_hash[16], new_lm_hash[16]; 53 53 struct samr_DomInfo1 *dominfo = NULL; 54 struct samr_ChangeReject*reject = NULL;54 struct userPwdChangeFailureInformation *reject = NULL; 55 55 56 56 ZERO_STRUCT(c); … … 102 102 103 103 /* 2. try samr_ChangePasswordUser3 */ 104 status = dcerpc_samr_ChangePasswordUser3(c.out.dcerpc_pipe, mem_ctx, &pw3); 105 if (!NT_STATUS_EQUAL(status, NT_STATUS_NET_WRITE_FAULT)) { 104 status = dcerpc_samr_ChangePasswordUser3_r(c.out.dcerpc_pipe->binding_handle, mem_ctx, &pw3); 105 if (!NT_STATUS_EQUAL(status, NT_STATUS_RPC_PROCNUM_OUT_OF_RANGE)) { 106 if (NT_STATUS_IS_OK(status) && !NT_STATUS_IS_OK(pw3.out.result)) { 107 status = pw3.out.result; 108 } 106 109 if (!NT_STATUS_IS_OK(status)) { 107 110 r->samr.out.error_string = talloc_asprintf(mem_ctx, … … 110 113 r->samr.out.error_string = talloc_asprintf(mem_ctx, 111 114 "samr_ChangePasswordUser3 for '%s\\%s' failed: %s", 112 r->samr.in.domain_name, r->samr.in.account_name, 115 r->samr.in.domain_name, r->samr.in.account_name, 113 116 nt_errstr(status)); 114 117 } 115 118 goto disconnect; 116 } 119 } 117 120 118 121 /* prepare samr_ChangePasswordUser2 */ … … 134 137 135 138 /* 3. try samr_ChangePasswordUser2 */ 136 status = dcerpc_samr_ChangePasswordUser2(c.out.dcerpc_pipe, mem_ctx, &pw2); 137 if (!NT_STATUS_EQUAL(status, NT_STATUS_NET_WRITE_FAULT)) { 139 status = dcerpc_samr_ChangePasswordUser2_r(c.out.dcerpc_pipe->binding_handle, mem_ctx, &pw2); 140 if (!NT_STATUS_EQUAL(status, NT_STATUS_RPC_PROCNUM_OUT_OF_RANGE)) { 141 if (NT_STATUS_IS_OK(status) && !NT_STATUS_IS_OK(pw2.out.result)) { 142 status = pw2.out.result; 143 } 138 144 if (!NT_STATUS_IS_OK(status)) { 139 145 r->samr.out.error_string = talloc_asprintf(mem_ctx, … … 160 166 161 167 /* 4. try samr_OemChangePasswordUser2 */ 162 status = dcerpc_samr_OemChangePasswordUser2(c.out.dcerpc_pipe, mem_ctx, &oe2); 163 if (!NT_STATUS_EQUAL(status, NT_STATUS_NET_WRITE_FAULT)) { 168 status = dcerpc_samr_OemChangePasswordUser2_r(c.out.dcerpc_pipe->binding_handle, mem_ctx, &oe2); 169 if (!NT_STATUS_EQUAL(status, NT_STATUS_RPC_PROCNUM_OUT_OF_RANGE)) { 170 if (NT_STATUS_IS_OK(status) && !NT_STATUS_IS_OK(oe2.out.result)) { 171 status = oe2.out.result; 172 } 164 173 if (!NT_STATUS_IS_OK(oe2.out.result)) { 165 174 r->samr.out.error_string = talloc_asprintf(mem_ctx, … … 194 203 195 204 /* 5. try samr_ChangePasswordUser */ 196 status = dcerpc_samr_ChangePasswordUser (c.pdc.out.dcerpc_pipe, mem_ctx, &pw);205 status = dcerpc_samr_ChangePasswordUser_r(c.pdc.out.dcerpc_pipe->binding_handle, mem_ctx, &pw); 197 206 if (!NT_STATUS_IS_OK(status)) { 198 207 r->samr.out.error_string = talloc_asprintf(mem_ctx, … … 217 226 disconnect: 218 227 /* close connection */ 219 talloc_ free(c.out.dcerpc_pipe);228 talloc_unlink(ctx, c.out.dcerpc_pipe); 220 229 221 230 return status; … … 300 309 301 310 /* 7. try samr_SetUserInfo2 level 26 to set the password */ 302 status = dcerpc_samr_SetUserInfo2 (r->samr_handle.in.dcerpc_pipe, mem_ctx, &sui);311 status = dcerpc_samr_SetUserInfo2_r(r->samr_handle.in.dcerpc_pipe->binding_handle, mem_ctx, &sui); 303 312 /* check result of samr_SetUserInfo2 level 26 */ 313 if (NT_STATUS_IS_OK(status) && !NT_STATUS_IS_OK(sui.out.result)) { 314 status = sui.out.result; 315 } 304 316 if (!NT_STATUS_IS_OK(status)) { 305 317 r->samr_handle.out.error_string … … 354 366 355 367 /* 8. try samr_SetUserInfo2 level 25 to set the password */ 356 status = dcerpc_samr_SetUserInfo2(r->samr_handle.in.dcerpc_pipe, mem_ctx, &sui); 368 status = dcerpc_samr_SetUserInfo2_r(r->samr_handle.in.dcerpc_pipe->binding_handle, mem_ctx, &sui); 369 if (NT_STATUS_IS_OK(status) && !NT_STATUS_IS_OK(sui.out.result)) { 370 status = sui.out.result; 371 } 357 372 if (!NT_STATUS_IS_OK(status)) { 358 373 r->samr_handle.out.error_string … … 395 410 396 411 /* 9. try samr_SetUserInfo2 level 24 to set the password */ 397 status = dcerpc_samr_SetUserInfo2(r->samr_handle.in.dcerpc_pipe, mem_ctx, &sui); 412 status = dcerpc_samr_SetUserInfo2_r(r->samr_handle.in.dcerpc_pipe->binding_handle, mem_ctx, &sui); 413 if (NT_STATUS_IS_OK(status) && !NT_STATUS_IS_OK(sui.out.result)) { 414 status = sui.out.result; 415 } 398 416 if (!NT_STATUS_IS_OK(status)) { 399 417 r->samr_handle.out.error_string … … 438 456 439 457 /* 10. try samr_SetUserInfo2 level 23 to set the password */ 440 status = dcerpc_samr_SetUserInfo2(r->samr_handle.in.dcerpc_pipe, mem_ctx, &sui); 458 status = dcerpc_samr_SetUserInfo2_r(r->samr_handle.in.dcerpc_pipe->binding_handle, mem_ctx, &sui); 459 if (NT_STATUS_IS_OK(status) && !NT_STATUS_IS_OK(sui.out.result)) { 460 status = sui.out.result; 461 } 441 462 if (!NT_STATUS_IS_OK(status)) { 442 463 r->samr_handle.out.error_string … … 464 485 LIBNET_SET_PASSWORD_SAMR_HANDLE_23, 465 486 }; 466 int i;487 unsigned int i; 467 488 468 489 for (i=0; i < ARRAY_SIZE(levels); i++) { … … 471 492 if (NT_STATUS_EQUAL(status, NT_STATUS_INVALID_INFO_CLASS) 472 493 || NT_STATUS_EQUAL(status, NT_STATUS_INVALID_PARAMETER_MIX) 473 || NT_STATUS_EQUAL(status, NT_STATUS_ NET_WRITE_FAULT)) {494 || NT_STATUS_EQUAL(status, NT_STATUS_RPC_ENUM_VALUE_OUT_OF_RANGE)) { 474 495 /* Try another password set mechanism */ 475 496 continue; … … 530 551 531 552 /* 2. do a samr_Connect to get a policy handle */ 532 status = dcerpc_samr_Connect(c.out.dcerpc_pipe, mem_ctx, &sc); 553 status = dcerpc_samr_Connect_r(c.out.dcerpc_pipe->binding_handle, mem_ctx, &sc); 554 if (NT_STATUS_IS_OK(status) && !NT_STATUS_IS_OK(sc.out.result)) { 555 status = sc.out.result; 556 } 533 557 if (!NT_STATUS_IS_OK(status)) { 534 558 r->samr.out.error_string = talloc_asprintf(mem_ctx, … … 545 569 546 570 /* 3. do a samr_LookupDomain to get the domain sid */ 547 status = dcerpc_samr_LookupDomain(c.out.dcerpc_pipe, mem_ctx, &ld); 571 status = dcerpc_samr_LookupDomain_r(c.out.dcerpc_pipe->binding_handle, mem_ctx, &ld); 572 if (NT_STATUS_IS_OK(status) && !NT_STATUS_IS_OK(ld.out.result)) { 573 status = ld.out.result; 574 } 548 575 if (!NT_STATUS_IS_OK(status)) { 549 576 r->samr.out.error_string = talloc_asprintf(mem_ctx, … … 561 588 562 589 /* 4. do a samr_OpenDomain to get a domain handle */ 563 status = dcerpc_samr_OpenDomain(c.out.dcerpc_pipe, mem_ctx, &od); 590 status = dcerpc_samr_OpenDomain_r(c.out.dcerpc_pipe->binding_handle, mem_ctx, &od); 591 if (NT_STATUS_IS_OK(status) && !NT_STATUS_IS_OK(od.out.result)) { 592 status = od.out.result; 593 } 564 594 if (!NT_STATUS_IS_OK(status)) { 565 595 r->samr.out.error_string = talloc_asprintf(mem_ctx, … … 582 612 583 613 /* 5. do a samr_LookupNames to get the users rid */ 584 status = dcerpc_samr_LookupNames(c.out.dcerpc_pipe, mem_ctx, &ln); 614 status = dcerpc_samr_LookupNames_r(c.out.dcerpc_pipe->binding_handle, mem_ctx, &ln); 615 if (NT_STATUS_IS_OK(status) && !NT_STATUS_IS_OK(ln.out.result)) { 616 status = ln.out.result; 617 } 585 618 if (!NT_STATUS_IS_OK(status)) { 586 619 r->samr.out.error_string = talloc_asprintf(mem_ctx, … … 607 640 608 641 /* 6. do a samr_OpenUser to get a user handle */ 609 status = dcerpc_samr_OpenUser(c.out.dcerpc_pipe, mem_ctx, &ou); 642 status = dcerpc_samr_OpenUser_r(c.out.dcerpc_pipe->binding_handle, mem_ctx, &ou); 643 if (NT_STATUS_IS_OK(status) && !NT_STATUS_IS_OK(ou.out.result)) { 644 status = ou.out.result; 645 } 610 646 if (!NT_STATUS_IS_OK(status)) { 611 647 r->samr.out.error_string = talloc_asprintf(mem_ctx, … … 628 664 disconnect: 629 665 /* close connection */ 630 talloc_ free(c.out.dcerpc_pipe);666 talloc_unlink(ctx, c.out.dcerpc_pipe); 631 667 632 668 return status;
Note:
See TracChangeset
for help on using the changeset viewer.