diff options
author | Matthias Dieter Wallnöfer <mdw@samba.org> | 2010-06-21 14:41:27 +0200 |
---|---|---|
committer | Matthias Dieter Wallnöfer <mdw@samba.org> | 2010-06-28 14:51:04 +0200 |
commit | 4c63bb312fa33f6188e543a62282012edb651bbb (patch) | |
tree | 618f605cedea56f5e48d22d3d40bd3b58449f61a /source4/rpc_server/samr | |
parent | b7050267717d7fba0ee4c6bf375e3cc9d2864717 (diff) | |
download | samba-4c63bb312fa33f6188e543a62282012edb651bbb.tar.gz samba-4c63bb312fa33f6188e543a62282012edb651bbb.tar.bz2 samba-4c63bb312fa33f6188e543a62282012edb651bbb.zip |
s4:dcesrv_samr_SetUserInfo - implement password set level 21
Diffstat (limited to 'source4/rpc_server/samr')
-rw-r--r-- | source4/rpc_server/samr/dcesrv_samr.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/source4/rpc_server/samr/dcesrv_samr.c b/source4/rpc_server/samr/dcesrv_samr.c index 0443287a45..15615e8c75 100644 --- a/source4/rpc_server/samr/dcesrv_samr.c +++ b/source4/rpc_server/samr/dcesrv_samr.c @@ -3216,6 +3216,39 @@ static NTSTATUS dcesrv_samr_SetUserInfo(struct dcesrv_call_state *dce_call, TALL SET_UINT (msg, info21.country_code, "countryCode"); IFSET(SAMR_FIELD_CODE_PAGE) SET_UINT (msg, info21.code_page, "codePage"); + + /* password change fields */ + IFSET(SAMR_FIELD_LAST_PWD_CHANGE) + return NT_STATUS_ACCESS_DENIED; + + IFSET((SAMR_FIELD_LM_PASSWORD_PRESENT + | SAMR_FIELD_NT_PASSWORD_PRESENT)) { + uint8_t *lm_pwd_hash = NULL, *nt_pwd_hash = NULL; + + if (r->in.info->info21.lm_password_set) { + if ((r->in.info->info21.lm_owf_password.length != 16) + || (r->in.info->info21.lm_owf_password.size != 16)) { + return NT_STATUS_INVALID_PARAMETER; + } + + lm_pwd_hash = (uint8_t *) r->in.info->info21.lm_owf_password.array; + } + if (r->in.info->info21.nt_password_set) { + if ((r->in.info->info21.nt_owf_password.length != 16) + || (r->in.info->info21.nt_owf_password.size != 16)) { + return NT_STATUS_INVALID_PARAMETER; + } + + nt_pwd_hash = (uint8_t *) r->in.info->info21.nt_owf_password.array; + } + status = samr_set_password_buffers(dce_call, + a_state->sam_ctx, + a_state->account_dn, + a_state->domain_state->domain_dn, + mem_ctx, + lm_pwd_hash, + nt_pwd_hash); + } #undef IFSET break; |