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_passwd.c

    r414 r745  
    5252        uint8_t old_lm_hash[16], new_lm_hash[16];
    5353        struct samr_DomInfo1 *dominfo = NULL;
    54         struct samr_ChangeReject *reject = NULL;
     54        struct userPwdChangeFailureInformation *reject = NULL;
    5555
    5656        ZERO_STRUCT(c);
     
    102102
    103103        /* 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                }
    106109                if (!NT_STATUS_IS_OK(status)) {
    107110                        r->samr.out.error_string = talloc_asprintf(mem_ctx,
     
    110113                        r->samr.out.error_string = talloc_asprintf(mem_ctx,
    111114                                                                   "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,
    113116                                                                   nt_errstr(status));
    114117                }
    115118                goto disconnect;
    116         } 
     119        }
    117120
    118121        /* prepare samr_ChangePasswordUser2 */
     
    134137
    135138        /* 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                }
    138144                if (!NT_STATUS_IS_OK(status)) {
    139145                        r->samr.out.error_string = talloc_asprintf(mem_ctx,
     
    160166
    161167        /* 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                }
    164173                if (!NT_STATUS_IS_OK(oe2.out.result)) {
    165174                        r->samr.out.error_string = talloc_asprintf(mem_ctx,
     
    194203
    195204        /* 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);
    197206        if (!NT_STATUS_IS_OK(status)) {
    198207                r->samr.out.error_string = talloc_asprintf(mem_ctx,
     
    217226disconnect:
    218227        /* close connection */
    219         talloc_free(c.out.dcerpc_pipe);
     228        talloc_unlink(ctx, c.out.dcerpc_pipe);
    220229
    221230        return status;
     
    300309       
    301310        /* 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);
    303312        /* 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        }
    304316        if (!NT_STATUS_IS_OK(status)) {
    305317                r->samr_handle.out.error_string
     
    354366
    355367        /* 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        }
    357372        if (!NT_STATUS_IS_OK(status)) {
    358373                r->samr_handle.out.error_string
     
    395410
    396411        /* 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        }
    398416        if (!NT_STATUS_IS_OK(status)) {
    399417                r->samr_handle.out.error_string
     
    438456
    439457        /* 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        }
    441462        if (!NT_STATUS_IS_OK(status)) {
    442463                r->samr_handle.out.error_string
     
    464485                LIBNET_SET_PASSWORD_SAMR_HANDLE_23,
    465486        };
    466         int i;
     487        unsigned int i;
    467488
    468489        for (i=0; i < ARRAY_SIZE(levels); i++) {
     
    471492                if (NT_STATUS_EQUAL(status, NT_STATUS_INVALID_INFO_CLASS)
    472493                    || 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)) {
    474495                        /* Try another password set mechanism */
    475496                        continue;
     
    530551
    531552        /* 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        }
    533557        if (!NT_STATUS_IS_OK(status)) {
    534558                r->samr.out.error_string = talloc_asprintf(mem_ctx,
     
    545569
    546570        /* 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        }
    548575        if (!NT_STATUS_IS_OK(status)) {
    549576                r->samr.out.error_string = talloc_asprintf(mem_ctx,
     
    561588
    562589        /* 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        }
    564594        if (!NT_STATUS_IS_OK(status)) {
    565595                r->samr.out.error_string = talloc_asprintf(mem_ctx,
     
    582612
    583613        /* 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        }
    585618        if (!NT_STATUS_IS_OK(status)) {
    586619                r->samr.out.error_string = talloc_asprintf(mem_ctx,
     
    607640
    608641        /* 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        }
    610646        if (!NT_STATUS_IS_OK(status)) {
    611647                r->samr.out.error_string = talloc_asprintf(mem_ctx,
     
    628664disconnect:
    629665        /* close connection */
    630         talloc_free(c.out.dcerpc_pipe);
     666        talloc_unlink(ctx, c.out.dcerpc_pipe);
    631667
    632668        return status;
Note: See TracChangeset for help on using the changeset viewer.