From b03040c5a903e24a8216b9245f2925eb2205cd67 Mon Sep 17 00:00:00 2001 From: Matthias Dieter Wallnöfer Date: Mon, 5 Jul 2010 17:42:40 +0200 Subject: s4:SAMR rpc server - "SetUserInfo" - fix the implementation of the expire flag It has to consider the "password_expires" flag to known if the "pwdLastSet" has to be updated or to be resetted. --- source4/rpc_server/samr/dcesrv_samr.c | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/source4/rpc_server/samr/dcesrv_samr.c b/source4/rpc_server/samr/dcesrv_samr.c index 1361b681f1..cca828aa17 100644 --- a/source4/rpc_server/samr/dcesrv_samr.c +++ b/source4/rpc_server/samr/dcesrv_samr.c @@ -3281,9 +3281,16 @@ static NTSTATUS dcesrv_samr_SetUserInfo(struct dcesrv_call_state *dce_call, TALL } } + IFSET(SAMR_FIELD_EXPIRED_FLAG) { + NTTIME t = 0; struct ldb_message_element *set_el; - if (samdb_msg_add_uint64(sam_ctx, mem_ctx, msg, "pwdLastSet", 0) != LDB_SUCCESS) { + if (r->in.info->info21.password_expired + == PASS_DONT_CHANGE_AT_NEXT_LOGON) { + unix_to_nt_time(&t, time(NULL)); + } + if (samdb_msg_add_uint64(sam_ctx, mem_ctx, msg, + "pwdLastSet", t) != LDB_SUCCESS) { return NT_STATUS_NO_MEMORY; } set_el = ldb_msg_find_element(msg, "pwdLastSet"); @@ -3363,8 +3370,14 @@ static NTSTATUS dcesrv_samr_SetUserInfo(struct dcesrv_call_state *dce_call, TALL } IFSET(SAMR_FIELD_EXPIRED_FLAG) { + NTTIME t = 0; struct ldb_message_element *set_el; - if (samdb_msg_add_uint64(sam_ctx, mem_ctx, msg, "pwdLastSet", 0) != LDB_SUCCESS) { + if (r->in.info->info23.info.password_expired + == PASS_DONT_CHANGE_AT_NEXT_LOGON) { + unix_to_nt_time(&t, time(NULL)); + } + if (samdb_msg_add_uint64(sam_ctx, mem_ctx, msg, + "pwdLastSet", t) != LDB_SUCCESS) { return NT_STATUS_NO_MEMORY; } set_el = ldb_msg_find_element(msg, "pwdLastSet"); @@ -3465,8 +3478,14 @@ static NTSTATUS dcesrv_samr_SetUserInfo(struct dcesrv_call_state *dce_call, TALL } IFSET(SAMR_FIELD_EXPIRED_FLAG) { + NTTIME t = 0; struct ldb_message_element *set_el; - if (samdb_msg_add_uint64(sam_ctx, mem_ctx, msg, "pwdLastSet", 0) != LDB_SUCCESS) { + if (r->in.info->info25.info.password_expired + == PASS_DONT_CHANGE_AT_NEXT_LOGON) { + unix_to_nt_time(&t, time(NULL)); + } + if (samdb_msg_add_uint64(sam_ctx, mem_ctx, msg, + "pwdLastSet", t) != LDB_SUCCESS) { return NT_STATUS_NO_MEMORY; } set_el = ldb_msg_find_element(msg, "pwdLastSet"); -- cgit