ChangeID fixe from APPLIANCE_HEAD
authorGerald Carter <jerry@samba.org>
Fri, 14 Dec 2001 20:38:04 +0000 (20:38 +0000)
committerGerald Carter <jerry@samba.org>
Fri, 14 Dec 2001 20:38:04 +0000 (20:38 +0000)
(This used to be commit 096d06a961e3a3e6f6952754875b83558448f449)

source3/printing/nt_printing.c
source3/rpc_server/srv_spoolss_nt.c

index 481f61528d77dbd94de499e9e43cdd2a0f28e2f0..c2cd1d6eeb5faff1e67142e751012bbc752193f8 100644 (file)
@@ -2643,7 +2643,39 @@ WERROR mod_a_printer(NT_PRINTER_INFO_LEVEL printer, uint32 level)
        {
                case 2:
                {
-                       printer.info_2->c_setprinter++;
+                       /*
+                        * Update the changestamp.  Emperical tests show that the
+                        * ChangeID is always updated,but c_setprinter is only 
+                        * incremented on a SetPrinter() call.
+                        */
+
+                       time_t time_unix = time(NULL);
+
+                       /* ChangeID **must** be increasing over the lifetime
+                          of client's spoolss service in order for the 
+                          client's cache to show updates */
+
+                       printer.info_2->changeid = time_unix * 100;
+
+                       /*
+                        * Because one day someone will ask:
+                        * NT->NT       An admin connection to a remote
+                        *              printer show changes imeediately in
+                        *              the properities dialog
+                        *      
+                        *              A non-admin connection will only show the
+                        *              changes after viewing the properites page
+                        *              2 times.  Seems to be related to a
+                        *              race condition in the client between the spooler
+                        *              updating the local cache and the Explorer.exe GUI
+                        *              actually displaying the properties.
+                        *
+                        *              This is fixed in Win2k.  admin/non-admin
+                        *              connections both display changes immediately.
+                        *
+                        * 14/12/01     --jerry
+                        */
+
                        result=update_a_printer_2(printer.info_2);
                        break;
                }
@@ -2671,17 +2703,13 @@ WERROR add_a_printer(NT_PRINTER_INFO_LEVEL printer, uint32 level)
                case 2:
                {
                        /*
-                        * Update the changestamp.
-                        * Note we must *not* do this in mod_a_printer().
+                        * Update the changestamp.  See comments in mod_a_printer()
+                        * --jerry
                         */
-                       NTTIME time_nt;
+
                        time_t time_unix = time(NULL);
-                       unix_to_nt_time(&time_nt, time_unix);
-                       if (printer.info_2->changeid==time_nt.low)
-                               printer.info_2->changeid++;
-                       else
-                               printer.info_2->changeid=time_nt.low;
 
+                       printer.info_2->changeid = time_unix * 100;
                        printer.info_2->c_setprinter++;
 
                        result=update_a_printer_2(printer.info_2);
index 87d076ae8c9121d0997e0710c76fbf7fabb81a39..5794f1de048f0c7f84233a2dbb543e6e4b72d4cd 100644 (file)
@@ -6288,6 +6288,11 @@ WERROR _spoolss_addform( pipes_struct *p, SPOOL_Q_ADDFORM *q_u, SPOOL_R_ADDFORM
                return WERR_BADFID;
        }
 
+       /* 
+        * FIXME!!  Feels like there should be an access check here, but haven't
+        * had time to verify.  --jerry
+        */
+
        /* can't add if builtin */
        if (get_a_builtin_ntform(&form->name,&tmpForm)) {
                return WERR_INVALID_PARAM;