diff options
author | Jeremy Allison <jra@samba.org> | 2006-06-14 21:36:49 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 11:17:26 -0500 |
commit | a1e0a0e9286fbe90ca04cda9df38e72d8d18b0c1 (patch) | |
tree | 14c15c8333572c5a2e089611ee61d03010a9d2b4 /source3/auth/auth_sam.c | |
parent | 2b99951e7511d0ec2d928c06b05fe22b7b6572d1 (diff) | |
download | samba-a1e0a0e9286fbe90ca04cda9df38e72d8d18b0c1.tar.gz |
r16230: Fix Klocwork #861 and others. localtime and asctime
can return NULL. Ensure we check all returns correctly.
Jeremy.
(This used to be commit 6c61dc8ed6d84f310ef391fb7700e93ef42c4afc)
Diffstat (limited to 'source3/auth/auth_sam.c')
-rw-r--r-- | source3/auth/auth_sam.c | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/source3/auth/auth_sam.c b/source3/auth/auth_sam.c index e8018eb13dd..ec405dd2be4 100644 --- a/source3/auth/auth_sam.c +++ b/source3/auth/auth_sam.c @@ -77,6 +77,7 @@ static BOOL logon_hours_ok(struct samu *sampass) const uint8 *hours; struct tm *utctime; time_t lasttime; + const char *asct; uint8 bitmask, bitpos; hours = pdb_get_hours(sampass); @@ -87,6 +88,11 @@ static BOOL logon_hours_ok(struct samu *sampass) lasttime = time(NULL); utctime = gmtime(&lasttime); + if (!utctime) { + DEBUG(1, ("logon_hours_ok: failed to get gmtime. Failing logon for user %s\n", + pdb_get_username(sampass) )); + return False; + } /* find the corresponding byte and bit */ bitpos = (utctime->tm_wday * 24 + utctime->tm_hour) % 168; @@ -94,15 +100,24 @@ static BOOL logon_hours_ok(struct samu *sampass) if (! (hours[bitpos/8] & bitmask)) { struct tm *t = localtime(&lasttime); + if (!t) { + asct = "INVALID TIME"; + } else { + asct = asctime(t); + if (!asct) { + asct = "INVALID TIME"; + } + } + DEBUG(1, ("logon_hours_ok: Account for user %s not allowed to " "logon at this time (%s).\n", - pdb_get_username(sampass), - t ? asctime(t) : "INVALID TIME")); + pdb_get_username(sampass), asct )); return False; } + asct = asctime(utctime); DEBUG(5,("logon_hours_ok: user %s allowed to logon at this time (%s)\n", - pdb_get_username(sampass), asctime(utctime) )); + pdb_get_username(sampass), asct ? asct : "UNKNOWN TIME" )); return True; } |