s3-samr: refactor _samr_SetDomainInfo().
authorGünther Deschner <gd@samba.org>
Thu, 25 Jun 2009 00:06:21 +0000 (02:06 +0200)
committerGünther Deschner <gd@samba.org>
Thu, 25 Jun 2009 09:02:35 +0000 (11:02 +0200)
Guenther

source3/rpc_server/srv_samr_nt.c

index 9319c14757e670be20b2adf34c491ab2c8525b86..8560ee97c61d5cc6254e40228f48ad19c04fcd60 100644 (file)
@@ -6351,6 +6351,67 @@ NTSTATUS _samr_QueryDomainInfo2(pipes_struct *p,
        return _samr_QueryDomainInfo(p, &q);
 }
 
+/*******************************************************************
+ ********************************************************************/
+
+static NTSTATUS set_dom_info_1(TALLOC_CTX *mem_ctx,
+                              struct samr_DomInfo1 *r)
+{
+       time_t u_expire, u_min_age;
+
+       u_expire = nt_time_to_unix_abs((NTTIME *)&r->max_password_age);
+       u_min_age = nt_time_to_unix_abs((NTTIME *)&r->min_password_age);
+
+       pdb_set_account_policy(AP_MIN_PASSWORD_LEN,
+                              (uint32_t)r->min_password_length);
+       pdb_set_account_policy(AP_PASSWORD_HISTORY,
+                              (uint32_t)r->password_history_length);
+       pdb_set_account_policy(AP_USER_MUST_LOGON_TO_CHG_PASS,
+                              (uint32_t)r->password_properties);
+       pdb_set_account_policy(AP_MAX_PASSWORD_AGE, (int)u_expire);
+       pdb_set_account_policy(AP_MIN_PASSWORD_AGE, (int)u_min_age);
+
+       return NT_STATUS_OK;
+}
+
+/*******************************************************************
+ ********************************************************************/
+
+static NTSTATUS set_dom_info_3(TALLOC_CTX *mem_ctx,
+                              struct samr_DomInfo3 *r)
+{
+       time_t u_logout;
+
+       u_logout = nt_time_to_unix_abs((NTTIME *)&r->force_logoff_time);
+
+       pdb_set_account_policy(AP_TIME_TO_LOGOUT, (int)u_logout);
+
+       return NT_STATUS_OK;
+}
+
+/*******************************************************************
+ ********************************************************************/
+
+static NTSTATUS set_dom_info_12(TALLOC_CTX *mem_ctx,
+                               struct samr_DomInfo12 *r)
+{
+       time_t u_lock_duration, u_reset_time;
+
+       u_lock_duration = nt_time_to_unix_abs((NTTIME *)&r->lockout_duration);
+       if (u_lock_duration != -1) {
+               u_lock_duration /= 60;
+       }
+
+       u_reset_time = nt_time_to_unix_abs((NTTIME *)&r->lockout_window)/60;
+
+       pdb_set_account_policy(AP_LOCK_ACCOUNT_DURATION, (int)u_lock_duration);
+       pdb_set_account_policy(AP_RESET_COUNT_TIME, (int)u_reset_time);
+       pdb_set_account_policy(AP_BAD_ATTEMPT_LOCKOUT,
+                              (uint32_t)r->lockout_threshold);
+
+       return NT_STATUS_OK;
+}
+
 /*******************************************************************
  _samr_SetDomainInfo
  ********************************************************************/
@@ -6359,10 +6420,7 @@ NTSTATUS _samr_SetDomainInfo(pipes_struct *p,
                             struct samr_SetDomainInfo *r)
 {
        struct samr_domain_info *dinfo;
-       time_t u_expire, u_min_age;
-       time_t u_logout;
-       time_t u_lock_duration, u_reset_time;
-       NTSTATUS result;
+       NTSTATUS status;
        uint32_t acc_required = 0;
 
        DEBUG(5,("_samr_SetDomainInfo: %d\n", __LINE__));
@@ -6390,26 +6448,19 @@ NTSTATUS _samr_SetDomainInfo(pipes_struct *p,
 
        dinfo = policy_handle_find(p, r->in.domain_handle,
                                   acc_required, NULL,
-                                  struct samr_domain_info, &result);
-       if (!NT_STATUS_IS_OK(result)) {
-               return result;
+                                  struct samr_domain_info, &status);
+       if (!NT_STATUS_IS_OK(status)) {
+               return status;
        }
 
        DEBUG(5,("_samr_SetDomainInfo: level: %d\n", r->in.level));
 
        switch (r->in.level) {
                case 1:
-                       u_expire=nt_time_to_unix_abs((NTTIME *)&r->in.info->info1.max_password_age);
-                       u_min_age=nt_time_to_unix_abs((NTTIME *)&r->in.info->info1.min_password_age);
-                       pdb_set_account_policy(AP_MIN_PASSWORD_LEN, (uint32)r->in.info->info1.min_password_length);
-                       pdb_set_account_policy(AP_PASSWORD_HISTORY, (uint32)r->in.info->info1.password_history_length);
-                       pdb_set_account_policy(AP_USER_MUST_LOGON_TO_CHG_PASS, (uint32)r->in.info->info1.password_properties);
-                       pdb_set_account_policy(AP_MAX_PASSWORD_AGE, (int)u_expire);
-                       pdb_set_account_policy(AP_MIN_PASSWORD_AGE, (int)u_min_age);
+                       status = set_dom_info_1(p->mem_ctx, &r->in.info->info1);
                        break;
                case 3:
-                       u_logout=nt_time_to_unix_abs((NTTIME *)&r->in.info->info3.force_logoff_time);
-                       pdb_set_account_policy(AP_TIME_TO_LOGOUT, (int)u_logout);
+                       status = set_dom_info_3(p->mem_ctx, &r->in.info->info3);
                        break;
                case 4:
                        break;
@@ -6420,20 +6471,16 @@ NTSTATUS _samr_SetDomainInfo(pipes_struct *p,
                case 9:
                        break;
                case 12:
-                       u_lock_duration=nt_time_to_unix_abs((NTTIME *)&r->in.info->info12.lockout_duration);
-                       if (u_lock_duration != -1)
-                               u_lock_duration /= 60;
-
-                       u_reset_time=nt_time_to_unix_abs((NTTIME *)&r->in.info->info12.lockout_window)/60;
-
-                       pdb_set_account_policy(AP_LOCK_ACCOUNT_DURATION, (int)u_lock_duration);
-                       pdb_set_account_policy(AP_RESET_COUNT_TIME, (int)u_reset_time);
-                       pdb_set_account_policy(AP_BAD_ATTEMPT_LOCKOUT, (uint32)r->in.info->info12.lockout_threshold);
+                       status = set_dom_info_12(p->mem_ctx, &r->in.info->info12);
                        break;
                default:
                        return NT_STATUS_INVALID_INFO_CLASS;
        }
 
+       if (!NT_STATUS_IS_OK(status)) {
+               return status;
+       }
+
        DEBUG(5,("_samr_SetDomainInfo: %d\n", __LINE__));
 
        return NT_STATUS_OK;