r->in.info->info18.lm_pwd_active ? r->in.info->info18.lm_pwd.hash : NULL,
r->in.info->info18.nt_pwd_active ? r->in.info->info18.nt_pwd.hash : NULL);
if (!NT_STATUS_IS_OK(status)) {
- return status;
+ goto done;
}
if (r->in.info->info18.password_expired > 0) {
struct ldb_message_element *set_el;
if (samdb_msg_add_uint64(sam_ctx, mem_ctx, msg, "pwdLastSet", 0) != LDB_SUCCESS) {
- return NT_STATUS_NO_MEMORY;
+ status = NT_STATUS_NO_MEMORY;
+ goto done;
}
set_el = ldb_msg_find_element(msg, "pwdLastSet");
set_el->flags = LDB_FLAG_MOD_REPLACE;
break;
case 21:
- if (r->in.info->info21.fields_present == 0)
- return NT_STATUS_INVALID_PARAMETER;
+ if (r->in.info->info21.fields_present == 0) {
+ status = NT_STATUS_INVALID_PARAMETER;
+ goto done;
+ }
#define IFSET(bit) if (bit & r->in.info->info21.fields_present)
IFSET(SAMR_FIELD_LAST_LOGON)
SET_UINT (msg, info21.code_page, "codePage");
/* password change fields */
- IFSET(SAMR_FIELD_LAST_PWD_CHANGE)
- return NT_STATUS_ACCESS_DENIED;
+ IFSET(SAMR_FIELD_LAST_PWD_CHANGE) {
+ status = NT_STATUS_ACCESS_DENIED;
+ goto done;
+ }
IFSET((SAMR_FIELD_LM_PASSWORD_PRESENT
| SAMR_FIELD_NT_PASSWORD_PRESENT)) {
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;
+ status = NT_STATUS_INVALID_PARAMETER;
+ goto done;
}
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;
+ status = NT_STATUS_INVALID_PARAMETER;
+ goto done;
}
nt_pwd_hash = (uint8_t *) r->in.info->info21.nt_owf_password.array;
lm_pwd_hash,
nt_pwd_hash);
if (!NT_STATUS_IS_OK(status)) {
- return status;
+ goto done;
}
}
t = "-1";
}
if (ldb_msg_add_string(msg, "pwdLastSet", t) != LDB_SUCCESS) {
- return NT_STATUS_NO_MEMORY;
+ status = NT_STATUS_NO_MEMORY;
+ goto done;
}
set_el = ldb_msg_find_element(msg, "pwdLastSet");
set_el->flags = LDB_FLAG_MOD_REPLACE;
break;
case 23:
- if (r->in.info->info23.info.fields_present == 0)
- return NT_STATUS_INVALID_PARAMETER;
+ if (r->in.info->info23.info.fields_present == 0) {
+ status = NT_STATUS_INVALID_PARAMETER;
+ goto done;
+ }
#define IFSET(bit) if (bit & r->in.info->info23.info.fields_present)
IFSET(SAMR_FIELD_LAST_LOGON)
SET_UINT (msg, info23.info.code_page, "codePage");
/* password change fields */
- IFSET(SAMR_FIELD_LAST_PWD_CHANGE)
- return NT_STATUS_ACCESS_DENIED;
+ IFSET(SAMR_FIELD_LAST_PWD_CHANGE) {
+ status = NT_STATUS_ACCESS_DENIED;
+ goto done;
+ }
IFSET(SAMR_FIELD_NT_PASSWORD_PRESENT) {
status = samr_set_password(dce_call,
&r->in.info->info23.password);
}
if (!NT_STATUS_IS_OK(status)) {
- return status;
+ goto done;
}
IFSET(SAMR_FIELD_EXPIRED_FLAG) {
t = "-1";
}
if (ldb_msg_add_string(msg, "pwdLastSet", t) != LDB_SUCCESS) {
- return NT_STATUS_NO_MEMORY;
+ status = NT_STATUS_NO_MEMORY;
+ goto done;
}
set_el = ldb_msg_find_element(msg, "pwdLastSet");
set_el->flags = LDB_FLAG_MOD_REPLACE;
mem_ctx,
&r->in.info->info24.password);
if (!NT_STATUS_IS_OK(status)) {
- return status;
+ goto done;
}
if (r->in.info->info24.password_expired > 0) {
struct ldb_message_element *set_el;
if (samdb_msg_add_uint64(sam_ctx, mem_ctx, msg, "pwdLastSet", 0) != LDB_SUCCESS) {
- return NT_STATUS_NO_MEMORY;
+ status = NT_STATUS_NO_MEMORY;
+ goto done;
}
set_el = ldb_msg_find_element(msg, "pwdLastSet");
set_el->flags = LDB_FLAG_MOD_REPLACE;
break;
case 25:
- if (r->in.info->info25.info.fields_present == 0)
- return NT_STATUS_INVALID_PARAMETER;
+ if (r->in.info->info25.info.fields_present == 0) {
+ status = NT_STATUS_INVALID_PARAMETER;
+ goto done;
+ }
#define IFSET(bit) if (bit & r->in.info->info25.info.fields_present)
IFSET(SAMR_FIELD_LAST_LOGON)
SET_UINT (msg, info25.info.code_page, "codePage");
/* password change fields */
- IFSET(SAMR_FIELD_LAST_PWD_CHANGE)
- return NT_STATUS_ACCESS_DENIED;
+ IFSET(SAMR_FIELD_LAST_PWD_CHANGE) {
+ status = NT_STATUS_ACCESS_DENIED;
+ goto done;
+ }
IFSET(SAMR_FIELD_NT_PASSWORD_PRESENT) {
status = samr_set_password_ex(dce_call,
&r->in.info->info25.password);
}
if (!NT_STATUS_IS_OK(status)) {
- return status;
+ goto done;
}
IFSET(SAMR_FIELD_EXPIRED_FLAG) {
t = "-1";
}
if (ldb_msg_add_string(msg, "pwdLastSet", t) != LDB_SUCCESS) {
- return NT_STATUS_NO_MEMORY;
+ status = NT_STATUS_NO_MEMORY;
+ goto done;
}
set_el = ldb_msg_find_element(msg, "pwdLastSet");
set_el->flags = LDB_FLAG_MOD_REPLACE;
mem_ctx,
&r->in.info->info26.password);
if (!NT_STATUS_IS_OK(status)) {
- return status;
+ goto done;
}
if (r->in.info->info26.password_expired > 0) {
t = "-1";
}
if (ldb_msg_add_string(msg, "pwdLastSet", t) != LDB_SUCCESS) {
- return NT_STATUS_NO_MEMORY;
+ status = NT_STATUS_NO_MEMORY;
+ goto done;
}
set_el = ldb_msg_find_element(msg, "pwdLastSet");
set_el->flags = LDB_FLAG_MOD_REPLACE;
default:
/* many info classes are not valid for SetUserInfo */
- return NT_STATUS_INVALID_INFO_CLASS;
+ status = NT_STATUS_INVALID_INFO_CLASS;
+ goto done;
}
if (!NT_STATUS_IS_OK(status)) {
- return status;
+ goto done;
}
/* modify the samdb record */
ldb_dn_get_linearized(a_state->account_dn),
ldb_errstring(a_state->sam_ctx)));
- return dsdb_ldb_err_to_ntstatus(ret);
+ status = dsdb_ldb_err_to_ntstatus(ret);
+ goto done;
}
}
- return NT_STATUS_OK;
+ status = NT_STATUS_OK;
+done:
+ return status;
}