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