kickoff updates based on 2.2.1

Toomas Soome tsoome at ut.ee
Wed Jul 11 11:57:59 GMT 2001



hi!

in attachment are diffs to implement/fix time values support.

at first, there seems to be typo on lib/time.c, 0x7fffffff should be
used for nt->high, not 0xffffffff

other changes will implement kickoff_time check and support for other
times as well. works for me - and usrmgr seems to be satisfied as well:)

only problem I can see, is that KOT-FFFFFFFF will set account expiration
at end of 01/18/38 and not to never. but this may be problem in my
passdb/nispass.c, have to check...

toomas
-- 
What makes us so bitter against people who outwit us
is that they think themselves cleverer than we are.
-------------- next part --------------
Index: lib/time.c
===================================================================
RCS file: /cvsroot/samba/source/lib/time.c,v
retrieving revision 1.31.4.1
diff -u -r1.31.4.1 time.c
--- lib/time.c	14 Dec 2000 23:40:01 -0000	1.31.4.1
+++ lib/time.c	11 Jul 2001 11:35:04 -0000
@@ -307,7 +307,7 @@
 	if (t == -1)
 	{
 		nt->low = 0xffffffff;
-		nt->high = 0xffffffff;
+		nt->high = 0x7fffffff;
 		return;
 	}		
 
Index: rpc_server/srv_netlog_nt.c
===================================================================
RCS file: /cvsroot/samba/source/rpc_server/srv_netlog_nt.c,v
retrieving revision 1.1.2.17
diff -u -r1.1.2.17 srv_netlog_nt.c
--- rpc_server/srv_netlog_nt.c	20 Jun 2001 19:44:27 -0000	1.1.2.17
+++ rpc_server/srv_netlog_nt.c	11 Jul 2001 11:35:04 -0000
@@ -584,6 +584,14 @@
 	else if (smb_pass->acct_ctrl & ACB_DISABLED)
 		return NT_STATUS_ACCOUNT_DISABLED;
     
+	/* Test account expire time. */
+	if ( time(NULL) > sam_pass->kickoff_time )
+	  return NT_STATUS_ACCOUNT_EXPIRED;
+
+	/* Test logon hours? */
+
+	/* Test must change password? */
+
 	/* Validate password - if required. */
     
 	if (smb_pass->acct_ctrl & ACB_PWNOTREQ) {
@@ -631,7 +639,12 @@
 	{
 		DOM_GID *gids = NULL;
 		int num_gids = 0;
-		NTTIME dummy_time;
+		NTTIME logon_time;
+		NTTIME logoff_time;
+		NTTIME kickoff_time;
+		NTTIME pass_last_set_time;
+		NTTIME pass_can_change_time;
+		NTTIME pass_must_change_time;
 		pstring my_name;
 		pstring my_workgroup;
 		pstring domain_groups;
@@ -641,8 +654,13 @@
 		/* set up pointer indicating user/password failed to be found */
 		usr_info->ptr_user_info = 0;
         
-		dummy_time.low  = 0xffffffff;
-		dummy_time.high = 0x7fffffff;
+		/* should we set new logon time there? */
+		unix_to_nt_time(&logon_time, sam_pass->logon_time);
+		unix_to_nt_time(&logoff_time, sam_pass->logoff_time);
+		unix_to_nt_time(&kickoff_time, sam_pass->kickoff_time);
+		unix_to_nt_time(&pass_last_set_time, sam_pass->pass_last_set_time);
+		unix_to_nt_time(&pass_can_change_time, sam_pass->pass_can_change_time);
+		unix_to_nt_time(&pass_must_change_time, sam_pass->pass_must_change_time);
 
 		pstrcpy(my_workgroup, lp_workgroup());
         
@@ -668,12 +686,12 @@
 		if (pdb_name_to_rid(nt_username, &r_uid, &r_gid))
 		{
 			init_net_user_info3(p->mem_ctx, usr_info,
-					&dummy_time, /* logon_time */
-					&dummy_time, /* logoff_time */
-					&dummy_time, /* kickoff_time */
-					&dummy_time, /* pass_last_set_time */
-					&dummy_time, /* pass_can_change_time */
-					&dummy_time, /* pass_must_change_time */
+					&logon_time,
+					&logoff_time,
+					&kickoff_time,
+					&pass_last_set_time,
+					&pass_can_change_time,
+					&pass_must_change_time,
                                 
 					nt_username , /* user_name */
 					sam_pass->full_name,	/* full_name */
Index: rpc_server/srv_samr_nt.c
===================================================================
RCS file: /cvsroot/samba/source/rpc_server/srv_samr_nt.c,v
retrieving revision 1.1.2.42
diff -u -r1.1.2.42 srv_samr_nt.c
--- rpc_server/srv_samr_nt.c	9 Jul 2001 17:59:54 -0000	1.1.2.42
+++ rpc_server/srv_samr_nt.c	11 Jul 2001 11:35:05 -0000
@@ -1524,7 +1524,12 @@
 
 static BOOL get_user_info_21(SAM_USER_INFO_21 *id21, uint32 user_rid)
 {
-    NTTIME dummy_time;
+    NTTIME logon_time;
+    NTTIME logoff_time;
+    NTTIME kickoff_time;
+    NTTIME pass_last_set_time;
+    NTTIME pass_can_change_time;
+    NTTIME pass_must_change_time;
     struct sam_passwd *sam_pass;
     LOGON_HRS hrs;
     int i;
@@ -1547,10 +1552,12 @@
 
     DEBUG(3,("User:[%s]\n", sam_pass->smb_name));
 
-    dummy_time.low  = 0xffffffff;
-    dummy_time.high = 0x7fffffff;
-
-    DEBUG(5,("get_user_info_21 - TODO: convert unix times to NTTIMEs\n"));
+    unix_to_nt_time(&logon_time, sam_pass->logon_time);
+    unix_to_nt_time(&logoff_time, sam_pass->logoff_time);
+    unix_to_nt_time(&kickoff_time, sam_pass->kickoff_time);
+    unix_to_nt_time(&pass_last_set_time, sam_pass->pass_last_set_time);
+    unix_to_nt_time(&pass_can_change_time, sam_pass->pass_can_change_time);
+    unix_to_nt_time(&pass_must_change_time, sam_pass->pass_must_change_time);
 
     /* create a LOGON_HRS structure */
     hrs.len = sam_pass->hours_len;
@@ -1560,12 +1567,12 @@
 
     init_sam_user_info21A(id21,
 
-               &dummy_time, /* logon_time */
-               &dummy_time, /* logoff_time */
-               &dummy_time, /* kickoff_time */
-               &dummy_time, /* pass_last_set_time */
-               &dummy_time, /* pass_can_change_time */
-               &dummy_time, /* pass_must_change_time */
+               &logon_time, /* logon_time */
+               &logoff_time, /* logoff_time */
+               &kickoff_time, /* kickoff_time */
+               &pass_last_set_time, /* pass_last_set_time */
+               &pass_can_change_time, /* pass_can_change_time */
+               &pass_must_change_time, /* pass_must_change_time */
 
                sam_pass->smb_name, /* user_name */
                sam_pass->full_name, /* full_name */


More information about the samba-technical mailing list