[SCM] Samba Shared Repository - branch master updated - release-4-0-0alpha8-58-gaab9e55

Günther Deschner gd at samba.org
Thu Jun 25 09:03:37 GMT 2009


The branch, master has been updated
       via  aab9e5509ca17c76a625d9da50b498567aaaf338 (commit)
       via  28d74f96fb9bbe0cf59df2f33d8d555ec0de4eb0 (commit)
      from  e129384d7c1df664e447186673dd107e190e2894 (commit)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit aab9e5509ca17c76a625d9da50b498567aaaf338
Author: Günther Deschner <gd at samba.org>
Date:   Thu Jun 25 02:06:21 2009 +0200

    s3-samr: refactor _samr_SetDomainInfo().
    
    Guenther

commit 28d74f96fb9bbe0cf59df2f33d8d555ec0de4eb0
Author: Günther Deschner <gd at samba.org>
Date:   Thu Jun 25 01:52:06 2009 +0200

    s3-samr: refactor _samr_QueryDomainInfo().
    
    Guenther

-----------------------------------------------------------------------

Summary of changes:
 source3/rpc_server/srv_samr_nt.c |  632 ++++++++++++++++++++++++--------------
 1 files changed, 394 insertions(+), 238 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/rpc_server/srv_samr_nt.c b/source3/rpc_server/srv_samr_nt.c
index da649f9..8560ee9 100644
--- a/source3/rpc_server/srv_samr_nt.c
+++ b/source3/rpc_server/srv_samr_nt.c
@@ -3275,309 +3275,418 @@ NTSTATUS _samr_GetGroupsForUser(pipes_struct *p,
 }
 
 /*******************************************************************
- _samr_QueryDomainInfo
  ********************************************************************/
 
-NTSTATUS _samr_QueryDomainInfo(pipes_struct *p,
-			       struct samr_QueryDomainInfo *r)
+static uint32_t samr_get_server_role(void)
 {
-	NTSTATUS status = NT_STATUS_OK;
-	struct samr_domain_info *dinfo;
-	union samr_DomainInfo *dom_info;
+	uint32_t role = ROLE_DOMAIN_PDC;
+
+	if (lp_server_role() == ROLE_DOMAIN_BDC) {
+		role = ROLE_DOMAIN_BDC;
+	}
+
+	return role;
+}
+
+/*******************************************************************
+ ********************************************************************/
+
+static NTSTATUS query_dom_info_1(TALLOC_CTX *mem_ctx,
+				 struct samr_DomInfo1 *r)
+{
+	uint32_t account_policy_temp;
 	time_t u_expire, u_min_age;
 
-	time_t u_lock_duration, u_reset_time;
-	uint32_t u_logout;
+	become_root();
 
-	uint32 account_policy_temp;
+	/* AS ROOT !!! */
 
-	time_t seq_num;
-	uint32 server_role;
-	uint32_t acc_required;
+	pdb_get_account_policy(AP_MIN_PASSWORD_LEN, &account_policy_temp);
+	r->min_password_length = account_policy_temp;
 
-	DEBUG(5,("_samr_QueryDomainInfo: %d\n", __LINE__));
+	pdb_get_account_policy(AP_PASSWORD_HISTORY, &account_policy_temp);
+	r->password_history_length = account_policy_temp;
 
-	switch (r->in.level) {
-	case 1: /* DomainPasswordInformation */
-	case 12: /* DomainLockoutInformation */
-		/* DOMAIN_READ_PASSWORD_PARAMETERS */
-		acc_required = SAMR_DOMAIN_ACCESS_LOOKUP_INFO_1;
-		break;
-	case 11: /* DomainGeneralInformation2 */
-		/* DOMAIN_READ_PASSWORD_PARAMETERS |
-		 * DOMAIN_READ_OTHER_PARAMETERS */
-		acc_required = SAMR_DOMAIN_ACCESS_LOOKUP_INFO_1 |
-			       SAMR_DOMAIN_ACCESS_LOOKUP_INFO_2;
-		break;
-	case 2: /* DomainGeneralInformation */
-	case 3: /* DomainLogoffInformation */
-	case 4: /* DomainOemInformation */
-	case 5: /* DomainReplicationInformation */
-	case 6: /* DomainReplicationInformation */
-	case 7: /* DomainServerRoleInformation */
-	case 8: /* DomainModifiedInformation */
-	case 9: /* DomainStateInformation */
-	case 10: /* DomainUasInformation */
-	case 13: /* DomainModifiedInformation2 */
-		/* DOMAIN_READ_OTHER_PARAMETERS */
-		acc_required = SAMR_DOMAIN_ACCESS_LOOKUP_INFO_2;
-		break;
-	default:
-		return NT_STATUS_INVALID_INFO_CLASS;
-	}
+	pdb_get_account_policy(AP_USER_MUST_LOGON_TO_CHG_PASS,
+			       &r->password_properties);
 
-	dinfo = policy_handle_find(p, r->in.domain_handle,
-				   acc_required, NULL,
-				   struct samr_domain_info, &status);
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
+	pdb_get_account_policy(AP_MAX_PASSWORD_AGE, &account_policy_temp);
+	u_expire = account_policy_temp;
+
+	pdb_get_account_policy(AP_MIN_PASSWORD_AGE, &account_policy_temp);
+	u_min_age = account_policy_temp;
+
+	/* !AS ROOT */
+
+	unbecome_root();
+
+	unix_to_nt_time_abs((NTTIME *)&r->max_password_age, u_expire);
+	unix_to_nt_time_abs((NTTIME *)&r->min_password_age, u_min_age);
+
+	if (lp_check_password_script() && *lp_check_password_script()) {
+		r->password_properties |= DOMAIN_PASSWORD_COMPLEX;
 	}
 
-	dom_info = TALLOC_ZERO_P(p->mem_ctx, union samr_DomainInfo);
-	if (!dom_info) {
-		return NT_STATUS_NO_MEMORY;
+	return NT_STATUS_OK;
+}
+
+/*******************************************************************
+ ********************************************************************/
+
+static NTSTATUS query_dom_info_2(TALLOC_CTX *mem_ctx,
+				 struct samr_DomGeneralInformation *r,
+				 struct samr_domain_info *dinfo)
+{
+	uint32_t u_logout;
+	time_t seq_num;
+
+	become_root();
+
+	/* AS ROOT !!! */
+
+	r->num_users	= count_sam_users(dinfo->disp_info, ACB_NORMAL);
+	r->num_groups	= count_sam_groups(dinfo->disp_info);
+	r->num_aliases	= count_sam_aliases(dinfo->disp_info);
+
+	pdb_get_account_policy(AP_TIME_TO_LOGOUT, &u_logout);
+
+	unix_to_nt_time_abs(&r->force_logoff_time, u_logout);
+
+	if (!pdb_get_seq_num(&seq_num)) {
+		seq_num = time(NULL);
 	}
 
-	switch (r->in.level) {
-		case 1:
+	/* !AS ROOT */
 
-			become_root();
+	unbecome_root();
 
-			/* AS ROOT !!! */
+	r->oem_information.string	= lp_serverstring();
+	r->domain_name.string		= lp_workgroup();
+	r->primary.string		= global_myname();
+	r->sequence_num			= seq_num;
+	r->domain_server_state		= DOMAIN_SERVER_ENABLED;
+	r->role				= samr_get_server_role();
+	r->unknown3			= 1;
 
-			pdb_get_account_policy(AP_MIN_PASSWORD_LEN,
-					       &account_policy_temp);
-			dom_info->info1.min_password_length = account_policy_temp;
+	return NT_STATUS_OK;
+}
 
-			pdb_get_account_policy(AP_PASSWORD_HISTORY, &account_policy_temp);
-			dom_info->info1.password_history_length = account_policy_temp;
+/*******************************************************************
+ ********************************************************************/
 
-			pdb_get_account_policy(AP_USER_MUST_LOGON_TO_CHG_PASS,
-				&dom_info->info1.password_properties);
+static NTSTATUS query_dom_info_3(TALLOC_CTX *mem_ctx,
+				 struct samr_DomInfo3 *r)
+{
+	uint32_t u_logout;
 
-			pdb_get_account_policy(AP_MAX_PASSWORD_AGE, &account_policy_temp);
-			u_expire = account_policy_temp;
+	become_root();
 
-			pdb_get_account_policy(AP_MIN_PASSWORD_AGE, &account_policy_temp);
-			u_min_age = account_policy_temp;
+	/* AS ROOT !!! */
 
-			/* !AS ROOT */
+	{
+		uint32_t ul;
+		pdb_get_account_policy(AP_TIME_TO_LOGOUT, &ul);
+		u_logout = (time_t)ul;
+	}
 
-			unbecome_root();
+	/* !AS ROOT */
 
-			unix_to_nt_time_abs((NTTIME *)&dom_info->info1.max_password_age, u_expire);
-			unix_to_nt_time_abs((NTTIME *)&dom_info->info1.min_password_age, u_min_age);
+	unbecome_root();
 
-			if (lp_check_password_script() && *lp_check_password_script()) {
-				dom_info->info1.password_properties |= DOMAIN_PASSWORD_COMPLEX;
-			}
+	unix_to_nt_time_abs(&r->force_logoff_time, u_logout);
 
-			break;
-		case 2:
+	return NT_STATUS_OK;
+}
 
-			become_root();
+/*******************************************************************
+ ********************************************************************/
 
-			/* AS ROOT !!! */
+static NTSTATUS query_dom_info_4(TALLOC_CTX *mem_ctx,
+				 struct samr_DomOEMInformation *r)
+{
+	r->oem_information.string = lp_serverstring();
 
-			dom_info->general.num_users	= count_sam_users(
-				dinfo->disp_info, ACB_NORMAL);
-			dom_info->general.num_groups	= count_sam_groups(
-				dinfo->disp_info);
-			dom_info->general.num_aliases	= count_sam_aliases(
-				dinfo->disp_info);
+	return NT_STATUS_OK;
+}
 
-			pdb_get_account_policy(AP_TIME_TO_LOGOUT, &u_logout);
+/*******************************************************************
+ ********************************************************************/
 
-			unix_to_nt_time_abs(&dom_info->general.force_logoff_time, u_logout);
+static NTSTATUS query_dom_info_5(TALLOC_CTX *mem_ctx,
+				 struct samr_DomInfo5 *r)
+{
+	r->domain_name.string = get_global_sam_name();
 
-			if (!pdb_get_seq_num(&seq_num))
-				seq_num = time(NULL);
+	return NT_STATUS_OK;
+}
 
-			/* !AS ROOT */
+/*******************************************************************
+ ********************************************************************/
 
-			unbecome_root();
+static NTSTATUS query_dom_info_6(TALLOC_CTX *mem_ctx,
+				 struct samr_DomInfo6 *r)
+{
+	/* NT returns its own name when a PDC. win2k and later
+	 * only the name of the PDC if itself is a BDC (samba4
+	 * idl) */
+	r->primary.string = global_myname();
 
-			server_role = ROLE_DOMAIN_PDC;
-			if (lp_server_role() == ROLE_DOMAIN_BDC)
-				server_role = ROLE_DOMAIN_BDC;
+	return NT_STATUS_OK;
+}
 
-			dom_info->general.oem_information.string	= lp_serverstring();
-			dom_info->general.domain_name.string		= lp_workgroup();
-			dom_info->general.primary.string		= global_myname();
-			dom_info->general.sequence_num			= seq_num;
-			dom_info->general.domain_server_state		= DOMAIN_SERVER_ENABLED;
-			dom_info->general.role				= server_role;
-			dom_info->general.unknown3			= 1;
+/*******************************************************************
+ ********************************************************************/
 
-			break;
-		case 3:
+static NTSTATUS query_dom_info_7(TALLOC_CTX *mem_ctx,
+				 struct samr_DomInfo7 *r)
+{
+	r->role = samr_get_server_role();
 
-			become_root();
+	return NT_STATUS_OK;
+}
 
-			/* AS ROOT !!! */
+/*******************************************************************
+ ********************************************************************/
 
-			{
-				uint32 ul;
-				pdb_get_account_policy(AP_TIME_TO_LOGOUT, &ul);
-				u_logout = (time_t)ul;
-			}
+static NTSTATUS query_dom_info_8(TALLOC_CTX *mem_ctx,
+				 struct samr_DomInfo8 *r)
+{
+	time_t seq_num;
 
-			/* !AS ROOT */
+	become_root();
 
-			unbecome_root();
+	/* AS ROOT !!! */
 
-			unix_to_nt_time_abs(&dom_info->info3.force_logoff_time, u_logout);
+	if (!pdb_get_seq_num(&seq_num)) {
+		seq_num = time(NULL);
+	}
 
-			break;
-		case 4:
-			dom_info->oem.oem_information.string = lp_serverstring();
-			break;
-		case 5:
-			dom_info->info5.domain_name.string = get_global_sam_name();
-			break;
-		case 6:
-			/* NT returns its own name when a PDC. win2k and later
-			 * only the name of the PDC if itself is a BDC (samba4
-			 * idl) */
-			dom_info->info6.primary.string = global_myname();
-			break;
-		case 7:
-			server_role = ROLE_DOMAIN_PDC;
-			if (lp_server_role() == ROLE_DOMAIN_BDC)
-				server_role = ROLE_DOMAIN_BDC;
+	/* !AS ROOT */
 
-			dom_info->info7.role = server_role;
-			break;
-		case 8:
+	unbecome_root();
 
-			become_root();
+	r->sequence_num = seq_num;
+	r->domain_create_time = 0;
 
-			/* AS ROOT !!! */
+	return NT_STATUS_OK;
+}
 
-			if (!pdb_get_seq_num(&seq_num)) {
-				seq_num = time(NULL);
-			}
+/*******************************************************************
+ ********************************************************************/
 
-			/* !AS ROOT */
+static NTSTATUS query_dom_info_9(TALLOC_CTX *mem_ctx,
+				 struct samr_DomInfo9 *r)
+{
+	r->domain_server_state = DOMAIN_SERVER_ENABLED;
 
-			unbecome_root();
+	return NT_STATUS_OK;
+}
 
-			dom_info->info8.sequence_num = seq_num;
-			dom_info->info8.domain_create_time = 0;
+/*******************************************************************
+ ********************************************************************/
 
-			break;
-		case 9:
+static NTSTATUS query_dom_info_11(TALLOC_CTX *mem_ctx,
+				  struct samr_DomGeneralInformation2 *r,
+				  struct samr_domain_info *dinfo)
+{
+	NTSTATUS status;
+	uint32_t account_policy_temp;
+	time_t u_lock_duration, u_reset_time;
 
-			dom_info->info9.domain_server_state		= DOMAIN_SERVER_ENABLED;
+	status = query_dom_info_2(mem_ctx, &r->general, dinfo);
+	if (!NT_STATUS_IS_OK(status)) {
+		return status;
+	}
 
-			break;
-		case 11:
+	/* AS ROOT !!! */
 
-			/* AS ROOT !!! */
+	become_root();
 
-			become_root();
+	pdb_get_account_policy(AP_LOCK_ACCOUNT_DURATION, &account_policy_temp);
+	u_lock_duration = account_policy_temp;
+	if (u_lock_duration != -1) {
+		u_lock_duration *= 60;
+	}
 
-			dom_info->general2.general.num_users	= count_sam_users(
-				dinfo->disp_info, ACB_NORMAL);
-			dom_info->general2.general.num_groups	= count_sam_groups(
-				dinfo->disp_info);
-			dom_info->general2.general.num_aliases	= count_sam_aliases(
-				dinfo->disp_info);
+	pdb_get_account_policy(AP_RESET_COUNT_TIME, &account_policy_temp);
+	u_reset_time = account_policy_temp * 60;
 
-			pdb_get_account_policy(AP_TIME_TO_LOGOUT, &u_logout);
+	pdb_get_account_policy(AP_BAD_ATTEMPT_LOCKOUT, &account_policy_temp);
+	r->lockout_threshold = account_policy_temp;
 
-			unix_to_nt_time_abs(&dom_info->general2.general.force_logoff_time, u_logout);
+	/* !AS ROOT */
 
-			if (!pdb_get_seq_num(&seq_num))
-				seq_num = time(NULL);
+	unbecome_root();
 
-			pdb_get_account_policy(AP_LOCK_ACCOUNT_DURATION, &account_policy_temp);
-			u_lock_duration = account_policy_temp;
-			if (u_lock_duration != -1) {
-				u_lock_duration *= 60;
-			}
+	unix_to_nt_time_abs(&r->lockout_duration, u_lock_duration);
+	unix_to_nt_time_abs(&r->lockout_window, u_reset_time);
 
-			pdb_get_account_policy(AP_RESET_COUNT_TIME, &account_policy_temp);
-			u_reset_time = account_policy_temp * 60;
+	return NT_STATUS_OK;
+}
 
-			pdb_get_account_policy(AP_BAD_ATTEMPT_LOCKOUT,
-					       &account_policy_temp);
-			dom_info->general2.lockout_threshold = account_policy_temp;
+/*******************************************************************
+ ********************************************************************/
 
-			/* !AS ROOT */
+static NTSTATUS query_dom_info_12(TALLOC_CTX *mem_ctx,
+				  struct samr_DomInfo12 *r)
+{
+	uint32_t account_policy_temp;
+	time_t u_lock_duration, u_reset_time;
 
-			unbecome_root();
+	become_root();
 
-			server_role = ROLE_DOMAIN_PDC;
-			if (lp_server_role() == ROLE_DOMAIN_BDC)
-				server_role = ROLE_DOMAIN_BDC;
+	/* AS ROOT !!! */
 
-			dom_info->general2.general.oem_information.string	= lp_serverstring();
-			dom_info->general2.general.domain_name.string		= lp_workgroup();
-			dom_info->general2.general.primary.string		= global_myname();
-			dom_info->general2.general.sequence_num			= seq_num;
-			dom_info->general2.general.domain_server_state		= DOMAIN_SERVER_ENABLED;
-			dom_info->general2.general.role				= server_role;
-			dom_info->general2.general.unknown3			= 1;
+	pdb_get_account_policy(AP_LOCK_ACCOUNT_DURATION, &account_policy_temp);
+	u_lock_duration = account_policy_temp;
+	if (u_lock_duration != -1) {
+		u_lock_duration *= 60;
+	}
 
-			unix_to_nt_time_abs(&dom_info->general2.lockout_duration,
-					    u_lock_duration);
-			unix_to_nt_time_abs(&dom_info->general2.lockout_window,
-					    u_reset_time);
+	pdb_get_account_policy(AP_RESET_COUNT_TIME, &account_policy_temp);
+	u_reset_time = account_policy_temp * 60;
 
-			break;
-		case 12:
+	pdb_get_account_policy(AP_BAD_ATTEMPT_LOCKOUT, &account_policy_temp);
+	r->lockout_threshold = account_policy_temp;
 
-			become_root();
+	/* !AS ROOT */
 
-			/* AS ROOT !!! */
+	unbecome_root();
 
-			pdb_get_account_policy(AP_LOCK_ACCOUNT_DURATION, &account_policy_temp);
-			u_lock_duration = account_policy_temp;
-			if (u_lock_duration != -1) {
-				u_lock_duration *= 60;
-			}
+	unix_to_nt_time_abs(&r->lockout_duration, u_lock_duration);
+	unix_to_nt_time_abs(&r->lockout_window, u_reset_time);
 
-			pdb_get_account_policy(AP_RESET_COUNT_TIME, &account_policy_temp);
-			u_reset_time = account_policy_temp * 60;
+	return NT_STATUS_OK;
+}
 
-			pdb_get_account_policy(AP_BAD_ATTEMPT_LOCKOUT,
-					       &account_policy_temp);
-			dom_info->info12.lockout_threshold = account_policy_temp;
+/*******************************************************************
+ ********************************************************************/
 
-			/* !AS ROOT */
+static NTSTATUS query_dom_info_13(TALLOC_CTX *mem_ctx,
+				  struct samr_DomInfo13 *r)
+{
+	time_t seq_num;
 
-			unbecome_root();
+	become_root();
 
-			unix_to_nt_time_abs(&dom_info->info12.lockout_duration,


-- 
Samba Shared Repository


More information about the samba-cvs mailing list