Fix found by Andrew to stop local/remote printers being
authorJeremy Allison <jra@samba.org>
Tue, 10 Oct 2000 19:09:48 +0000 (19:09 +0000)
committerJeremy Allison <jra@samba.org>
Tue, 10 Oct 2000 19:09:48 +0000 (19:09 +0000)
confused. check_printer_ok was causing SETPRINTER calls to fail.
Jeremy.

source/rpc_server/srv_spoolss_nt.c

index 56de5375fb103f2d791a093ea6f4bf2984559015..72c87ae819d630bb57b8cdecac9482d7f04ed173 100644 (file)
@@ -3406,8 +3406,9 @@ static BOOL check_printer_ok(NT_PRINTER_INFO_LEVEL_2 *info, int snum)
         * as this is what Samba insists upon.
         */
 
-       if (!(info->attributes & PRINTER_ATTRIBUTE_SHARED)) {
-               DEBUG(10,("check_printer_ok: SHARED check failed (%x).\n", (unsigned int)info->attributes ));
+       if (!(info->attributes & (PRINTER_ATTRIBUTE_SHARED|PRINTER_ATTRIBUTE_NETWORK))) {
+               DEBUG(10,("check_printer_ok: SHARED/NETWORK check failed (%x).\n",
+                                                       (unsigned int)info->attributes ));
                return False;
        }
 
@@ -3421,8 +3422,22 @@ static BOOL check_printer_ok(NT_PRINTER_INFO_LEVEL_2 *info, int snum)
                }
        }
 
+       /*
+        * Sometimes the NT client doesn't set the sharename, but
+        * includes the sharename in the printername. This could
+        * cause SETPRINTER to fail which causes problems with the
+        * client getting confused between local/remote printers...
+        */
+        
+       if (*info->sharename == '\0') {
+               char *p = strrchr(info->printername, '\\');
+               if (p)
+                       fstrcpy(info->sharename, p+1);
+       }
+
        if (!strequal(info->sharename, lp_servicename(snum))) {
-               DEBUG(10,("check_printer_ok: NAME check failed (%s) (%s).\n", info->sharename, lp_servicename(snum)));
+               DEBUG(10,("check_printer_ok: NAME check failed (%s) (%s).\n",
+                                       info->sharename, lp_servicename(snum)));
                return False;
        }