r4351: Vampire Logon-Hours. Update Logon-Hours only when they have changed.
authorGünther Deschner <gd@samba.org>
Fri, 24 Dec 2004 00:08:15 +0000 (00:08 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 15:53:45 +0000 (10:53 -0500)
Guenther

source/rpc_server/srv_samr_util.c
source/utils/net_rpc_samsync.c

index 8cc44074abec64d4c141d1d9b5f1bd81f62ea62f..c1faede9477ee55e91d4652635f2f3f3d2efa2f6 100644 (file)
@@ -262,8 +262,12 @@ void copy_id21_to_sam_passwd(SAM_ACCOUNT *to, SAM_USER_INFO_21 *from)
                }
 
                DEBUG(15,("INFO_21 LOGON_HRS.HOURS: %s -> %s\n",pdb_get_hours(to),from->logon_hrs.hours));
-               /* Fix me: only update if it changes --metze */
-               pdb_set_hours(to, from->logon_hrs.hours, PDB_CHANGED);
+               pstring old, new;
+               pdb_sethexhours(old, pdb_get_hours(to));
+               pdb_sethexhours(new, (const char *)from->logon_hrs.hours);
+               if (!strequal(old, new)) {
+                       pdb_set_hours(to, from->logon_hrs.hours, PDB_CHANGED);
+               }
 
                /* This is max logon hours */
                DEBUG(10,("INFO_21 UNKNOWN_6: %08X -> %08X\n",pdb_get_unknown_6(to),from->unknown_6));
index e8a110d083e5edfc15c8b619cc08528c3472b848..688944cf0bcba600414ffb0a21799e5a72549016 100644 (file)
@@ -408,10 +408,29 @@ sam_account_from_delta(SAM_ACCOUNT *account, SAM_ACCOUNT_INFO *delta)
                        pdb_set_logoff_time(account, unix_time,PDB_CHANGED);
        }
 
+       /* Logon Divs */
        if (pdb_get_logon_divs(account) != delta->logon_divs)
                pdb_set_logon_divs(account, delta->logon_divs, PDB_CHANGED);
 
-       /* TODO: logon hours */
+       /* Max Logon Hours */
+       if (delta->unknown1 != pdb_get_unknown_6(account)) {
+               pdb_set_unknown_6(account, delta->unknown1, PDB_CHANGED);
+       }
+
+       /* Logon Hours Len */
+       if (delta->buf_logon_hrs.buf_len != pdb_get_hours_len(account)) {
+               pdb_set_hours_len(account, delta->buf_logon_hrs.buf_len, PDB_CHANGED);
+       }
+
+       /* Logon Hours */
+       if (delta->buf_logon_hrs.buffer) {
+               pstring old, new;
+               pdb_sethexhours(old, pdb_get_hours(account));
+               pdb_sethexhours(new, (const char *)delta->buf_logon_hrs.buffer);
+               if (!strequal(old, new))
+                       pdb_set_hours(account, (const char *)delta->buf_logon_hrs.buffer, PDB_CHANGED);
+       }
+
        if (pdb_get_bad_password_count(account) != delta->bad_pwd_count)
                pdb_set_bad_password_count(account, delta->bad_pwd_count, PDB_CHANGED);