mirror of
https://github.com/samba-team/samba.git
synced 2024-12-23 17:34:34 +03:00
r17448: Define macros to set fields in api function modifying user account.
rafal
This commit is contained in:
parent
8fa1cd62ec
commit
8d9330c490
@ -543,41 +543,38 @@ static NTSTATUS set_user_changes(TALLOC_CTX *mem_ctx, struct usermod_change *mod
|
||||
user = &info->out.info.info21;
|
||||
mod->fields = 0; /* reset flag field before setting individual flags */
|
||||
|
||||
/*
|
||||
* account name change
|
||||
*/
|
||||
if (r->in.account_name != NULL &&
|
||||
!strequal_w(user->account_name.string, r->in.account_name)) {
|
||||
/* account name change */
|
||||
SET_FIELD_LSA_STRING(r->in, user, mod, account_name, USERMOD_FIELD_ACCOUNT_NAME);
|
||||
|
||||
mod->account_name = talloc_strdup(mem_ctx, r->in.account_name);
|
||||
if (mod->account_name == NULL) return NT_STATUS_NO_MEMORY;
|
||||
/* full name change */
|
||||
SET_FIELD_LSA_STRING(r->in, user, mod, full_name, USERMOD_FIELD_FULL_NAME);
|
||||
|
||||
mod->fields |= USERMOD_FIELD_ACCOUNT_NAME;
|
||||
}
|
||||
/* description change */
|
||||
SET_FIELD_LSA_STRING(r->in, user, mod, comment, USERMOD_FIELD_DESCRIPTION);
|
||||
|
||||
/*
|
||||
* full name change
|
||||
*/
|
||||
if (r->in.full_name != NULL &&
|
||||
!strequal_w(user->full_name.string, r->in.full_name)) {
|
||||
/* comment change */
|
||||
SET_FIELD_LSA_STRING(r->in, user, mod, comment, USERMOD_FIELD_COMMENT);
|
||||
|
||||
mod->full_name = talloc_strdup(mem_ctx, r->in.full_name);
|
||||
if (mod->full_name == NULL) return NT_STATUS_NO_MEMORY;
|
||||
/* home directory change */
|
||||
SET_FIELD_LSA_STRING(r->in, user, mod, home_directory, USERMOD_FIELD_HOME_DIRECTORY);
|
||||
|
||||
mod->fields |= USERMOD_FIELD_FULL_NAME;
|
||||
}
|
||||
/* home drive change */
|
||||
SET_FIELD_LSA_STRING(r->in, user, mod, home_drive, USERMOD_FIELD_HOME_DRIVE);
|
||||
|
||||
/*
|
||||
* description change
|
||||
*/
|
||||
if (r->in.description != NULL &&
|
||||
!strequal_w(user->description.string, r->in.description)) {
|
||||
/* logon script change */
|
||||
SET_FIELD_LSA_STRING(r->in, user, mod, logon_script, USERMOD_FIELD_LOGON_SCRIPT);
|
||||
|
||||
mod->description = talloc_strdup(mem_ctx, r->in.description);
|
||||
if (mod->description == NULL) return NT_STATUS_NO_MEMORY;
|
||||
/* profile path change */
|
||||
SET_FIELD_LSA_STRING(r->in, user, mod, profile_path, USERMOD_FIELD_PROFILE_PATH);
|
||||
|
||||
mod->fields |= USERMOD_FIELD_DESCRIPTION;
|
||||
}
|
||||
/* allow password change time */
|
||||
SET_FIELD_NTTIME(r->in, user, mod, allow_password_change, USERMOD_FIELD_ALLOW_PASS_CHG);
|
||||
|
||||
/* force password change time */
|
||||
SET_FIELD_NTTIME(r->in, user, mod, force_password_change, USERMOD_FIELD_FORCE_PASS_CHG);
|
||||
|
||||
/* account expiry change */
|
||||
SET_FIELD_NTTIME(r->in, user, mod, acct_expiry, USERMOD_FIELD_ACCT_EXPIRY);
|
||||
|
||||
return NT_STATUS_OK;
|
||||
}
|
||||
|
@ -49,15 +49,40 @@ struct libnet_ModifyUser {
|
||||
const char *account_name;
|
||||
const char *full_name;
|
||||
const char *description;
|
||||
const char *home_directory;
|
||||
const char *home_drive;
|
||||
const char *comment;
|
||||
const char *logon_script;
|
||||
const char *profile_path;
|
||||
struct timeval *acct_expiry;
|
||||
struct timeval *allow_password_change;
|
||||
struct timeval *force_password_change;
|
||||
struct timeval *last_logon;
|
||||
struct timeval *last_logoff;
|
||||
struct timeval *last_password_change;
|
||||
uint32_t acct_flags;
|
||||
} in;
|
||||
struct {
|
||||
const char *error_string;
|
||||
} out;
|
||||
};
|
||||
|
||||
|
||||
#define SET_FIELD_LSA_STRING(new, current, mod, field, flag) \
|
||||
if (new.field != NULL && \
|
||||
!strequal_w(current->field.string, new.field)) { \
|
||||
\
|
||||
mod->field = talloc_strdup(mem_ctx, new.field); \
|
||||
if (mod->field == NULL) return NT_STATUS_NO_MEMORY; \
|
||||
\
|
||||
mod->fields |= flag; \
|
||||
}
|
||||
|
||||
#define SET_FIELD_NTTIME(new, current, mod, field, flag) \
|
||||
if (new.field != 0) { \
|
||||
NTTIME newval = timeval_to_nttime(new.field); \
|
||||
if (newval != current->field) { \
|
||||
mod->field = talloc_memdup(mem_ctx, new.field, sizeof(*new.field)); \
|
||||
mod->fields |= flag; \
|
||||
} \
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user