svn commit: samba r13908 - in branches/SAMBA_4_0/source: librpc/idl torture/rpc

abartlet at samba.org abartlet at samba.org
Tue Mar 7 03:24:29 GMT 2006


Author: abartlet
Date: 2006-03-07 03:24:29 +0000 (Tue, 07 Mar 2006)
New Revision: 13908

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=13908

Log:
Improve the RPC-SAMSYNC test to cross-check some attributes I wasn't
sure about.

This finds a new ACB_PW_EXPIRED attribute.  

Andrew Bartlett

Modified:
   branches/SAMBA_4_0/source/librpc/idl/samr.idl
   branches/SAMBA_4_0/source/torture/rpc/samr.c
   branches/SAMBA_4_0/source/torture/rpc/samsync.c


Changeset:
Modified: branches/SAMBA_4_0/source/librpc/idl/samr.idl
===================================================================
--- branches/SAMBA_4_0/source/librpc/idl/samr.idl	2006-03-07 03:17:44 UTC (rev 13907)
+++ branches/SAMBA_4_0/source/librpc/idl/samr.idl	2006-03-07 03:24:29 UTC (rev 13908)
@@ -36,7 +36,8 @@
 		ACB_TRUSTED_FOR_DELEGATION	= 0x00002000,  /* 1 = Trusted for Delegation */
 		ACB_NOT_DELEGATED		= 0x00004000,  /* 1 = Not delegated */
 		ACB_USE_DES_KEY_ONLY		= 0x00008000,  /* 1 = Use DES key only */
-		ACB_DONT_REQUIRE_PREAUTH	= 0x00010000   /* 1 = Preauth not required */
+		ACB_DONT_REQUIRE_PREAUTH	= 0x00010000,  /* 1 = Preauth not required */
+		ACB_PW_EXPIRED                  = 0x00020000   /* 1 = Password Expired */
 	} samr_AcctFlags;
 
 	/******************/

Modified: branches/SAMBA_4_0/source/torture/rpc/samr.c
===================================================================
--- branches/SAMBA_4_0/source/torture/rpc/samr.c	2006-03-07 03:17:44 UTC (rev 13907)
+++ branches/SAMBA_4_0/source/torture/rpc/samr.c	2006-03-07 03:24:29 UTC (rev 13908)
@@ -178,8 +178,8 @@
 
 	uint32_t user_extra_flags = 0;
 	if (base_acct_flags == ACB_NORMAL) {
-		/* Don't know what this is, but it is always here for users - you can't get rid of it */
-		user_extra_flags = 0x20000;
+		/* When created, accounts are expired by default */
+		user_extra_flags = ACB_PW_EXPIRED;
 	}
 
 	s.in.user_handle = handle;
@@ -359,7 +359,7 @@
 			  (base_acct_flags  | ACB_DISABLED | user_extra_flags), 
 			  0);
 	
-	/* Setting PWNOEXP clears the magic 0x20000 flag */
+	/* Setting PWNOEXP clears the magic ACB_PW_EXPIRED flag */
 	TEST_USERINFO_INT_EXP(16, acct_flags, 5, acct_flags, 
 			  (base_acct_flags  | ACB_DISABLED | ACB_PWNOEXP), 
 			  (base_acct_flags  | ACB_DISABLED | ACB_PWNOEXP), 

Modified: branches/SAMBA_4_0/source/torture/rpc/samsync.c
===================================================================
--- branches/SAMBA_4_0/source/torture/rpc/samsync.c	2006-03-07 03:17:44 UTC (rev 13907)
+++ branches/SAMBA_4_0/source/torture/rpc/samsync.c	2006-03-07 03:24:29 UTC (rev 13908)
@@ -221,8 +221,8 @@
 } while (0)
 #define TEST_INT_EQUAL(i1, i2) do {\
 	if (i1 != i2) {\
-	      printf("%s: integer mismatch: " #i1 ":%d != " #i2 ": %d\n", \
-		     __location__, i1, i2);\
+	      printf("%s: integer mismatch: " #i1 ": 0x%08x (%d) != " #i2 ": 0x%08x (%d)\n", \
+		     __location__, i1, i1, i2, i2);			\
 	      ret = False;\
 	} \
 } while (0)
@@ -498,7 +498,22 @@
 	TEST_TIME_EQUAL(q.out.info->info21.acct_expiry,
 		       user->acct_expiry);
 
-	TEST_INT_EQUAL(q.out.info->info21.acct_flags, user->acct_flags);
+	TEST_INT_EQUAL((q.out.info->info21.acct_flags & ~ACB_PW_EXPIRED), user->acct_flags);
+	if (user->acct_flags & ACB_PWNOEXP) {
+		if (q.out.info->info21.acct_flags & ACB_PW_EXPIRED) {
+			printf("ACB flags mismatch: both expired and no expiry!\n");
+			ret = False;
+		}
+		if (q.out.info->info21.force_password_change != (NTTIME)0x7FFFFFFFFFFFFFFFULL) {
+			printf("ACB flags mismatch: no password expiry, but force password change 0x%016llx (%lld) != 0x%016llx (%lld)\n",
+			       (unsigned long long)q.out.info->info21.force_password_change, 
+			       (unsigned long long)q.out.info->info21.force_password_change,
+			       (unsigned long long)0x7FFFFFFFFFFFFFFFULL, (unsigned long long)0x7FFFFFFFFFFFFFFFULL
+				);
+			ret = False;
+		}
+	}
+
 	TEST_INT_EQUAL(q.out.info->info21.nt_password_set, user->nt_password_present);
 	TEST_INT_EQUAL(q.out.info->info21.lm_password_set, user->lm_password_present);
 	TEST_INT_EQUAL(q.out.info->info21.password_expired, user->password_expired);
@@ -586,6 +601,10 @@
 		if (user->acct_flags & ACB_AUTOLOCK) {
 			return True;
 		}
+	} else if (NT_STATUS_EQUAL(nt_status, NT_STATUS_PASSWORD_EXPIRED)) {
+		if (q.out.info->info21.acct_flags & ACB_PW_EXPIRED) {
+			return True;
+		}
 	} else if (NT_STATUS_EQUAL(nt_status, NT_STATUS_WRONG_PASSWORD)) {
 		if (!lm_hash_p && !nt_hash_p) {
 			return True;
@@ -618,6 +637,7 @@
 		TEST_TIME_EQUAL(user->last_logon, info3->base.last_logon);
 		TEST_TIME_EQUAL(user->acct_expiry, info3->base.acct_expiry);
 		TEST_TIME_EQUAL(user->last_password_change, info3->base.last_password_change);
+		TEST_TIME_EQUAL(q.out.info->info21.force_password_change, info3->base.force_password_change);
 
 		/* Does the concept of a logoff time ever really
 		 * exist? (not in any sensible way, according to the
@@ -1176,21 +1196,24 @@
 						ret = False;
 					}
 					break;
+				case NETR_DELTA_GROUP_MEMBER:
+				case NETR_DELTA_ALIAS_MEMBER:
+					/* These are harder to cross-check, and we expect them */
+					break;
 				case NETR_DELTA_DELETE_GROUP:
 				case NETR_DELTA_RENAME_GROUP:
 				case NETR_DELTA_DELETE_USER:
 				case NETR_DELTA_RENAME_USER:
-				case NETR_DELTA_GROUP_MEMBER:
 				case NETR_DELTA_DELETE_ALIAS:
 				case NETR_DELTA_RENAME_ALIAS:
-				case NETR_DELTA_ALIAS_MEMBER:
 				case NETR_DELTA_DELETE_TRUST:
 				case NETR_DELTA_DELETE_ACCOUNT:
 				case NETR_DELTA_DELETE_SECRET:
 				case NETR_DELTA_DELETE_GROUP2:
 				case NETR_DELTA_DELETE_USER2:
 				case NETR_DELTA_MODIFY_COUNT:
-					printf("Unhandled delta type %d\n", r.out.delta_enum_array->delta_enum[d].delta_type);
+				default:
+					printf("Uxpected delta type %d\n", r.out.delta_enum_array->delta_enum[d].delta_type);
 					ret = False;
 					break;
 				}



More information about the samba-cvs mailing list