removed unnecessary memset
[ira/wip.git] / source3 / printing / nt_printing.c
index 72e4c47f28dd7d34c0090f7ba31802c2c3660527..907c3fd8e6987f9d5bb20ded7d91fe8c1e50c14d 100644 (file)
@@ -1,5 +1,5 @@
 /*
- *  Unix SMB/Netbios implementation.
+ *  Unix SMB/CIFS implementation.
  *  RPC Pipe client / server routines
  *  Copyright (C) Andrew Tridgell              1992-2000,
  *  Copyright (C) Jean François Micouleau      1998-2000.
@@ -42,7 +42,14 @@ static TDB_CONTEXT *tdb_printers; /* used for printers files */
 
 /* Map generic permissions to printer object specific permissions */
 
-struct generic_mapping printer_generic_mapping = {
+GENERIC_MAPPING printer_generic_mapping = {
+       PRINTER_READ,
+       PRINTER_WRITE,
+       PRINTER_EXECUTE,
+       PRINTER_ALL_ACCESS
+};
+
+STANDARD_MAPPING printer_std_mapping = {
        PRINTER_READ,
        PRINTER_WRITE,
        PRINTER_EXECUTE,
@@ -2160,10 +2167,6 @@ void free_nt_printer_param(NT_PRINTER_PARAM **param_ptr)
 
 NT_DEVICEMODE *construct_nt_devicemode(const fstring default_devicename)
 {
-/*
- * should I init this ones ???
-       nt_devmode->devicename
-*/
 
        char adevice[32];
        NT_DEVICEMODE *nt_devmode = (NT_DEVICEMODE *)malloc(sizeof(NT_DEVICEMODE));
@@ -2735,8 +2738,17 @@ static uint32 rev_changeid(void)
 
        get_process_uptime(&tv);
 
+#if 1  /* JERRY */
        /* Return changeid as msec since spooler restart */
        return tv.tv_sec * 1000 + tv.tv_usec / 1000;
+#else
+       /*
+        * This setting seems to work well but is too untested
+        * to replace the above calculation.  Left in for experiementation
+        * of the reader            --jerry (Tue Mar 12 09:15:05 CST 2002)
+        */
+       return tv.tv_sec * 10 + tv.tv_usec / 100000;
+#endif
 }
 
 /*
@@ -2853,11 +2865,44 @@ static uint32 set_driver_init_2(NT_PRINTER_INFO_LEVEL_2 *info_ptr)
        ZERO_STRUCT(info.devmode->devicename);
        fstrcpy(info.devmode->devicename, info_ptr->printername);
 
+
+       /*
+        * NT/2k does not change out the entire DeviceMode of a printer
+        * when changing the driver.  Only the driverextra, private, & 
+        * driverversion fields.   --jerry  (Thu Mar 14 08:58:43 CST 2002)
+        */
+
+#if 0  /* JERRY */
+
        /* 
         *      Bind the saved DEVMODE to the new the printer.
         */
        free_nt_devicemode(&info_ptr->devmode);
        info_ptr->devmode = info.devmode;
+#else
+       /* copy the entire devmode if we currently don't have one */
+
+       if (!info_ptr->devmode) {
+               DEBUG(10,("set_driver_init_2: Current Devmode is NULL.  Copying entire Device Mode\n"));
+               info_ptr->devmode = info.devmode;
+       }
+       else {
+               /* only set the necessary fields */
+
+               DEBUG(10,("set_driver_init_2: Setting driverversion [0x%x] and private data [0x%x]\n",
+                       info.devmode->driverversion, info.devmode->driverextra));
+
+               info_ptr->devmode->driverversion = info.devmode->driverversion;
+
+               SAFE_FREE(info_ptr->devmode->private);
+               info_ptr->devmode->private = NULL;
+
+               if (info.devmode->driverversion)
+                       info_ptr->devmode->private = memdup(info.devmode->private, info.devmode->driverversion);
+
+               free_nt_devicemode(&info.devmode);
+       }
+#endif
 
        DEBUG(10,("set_driver_init_2: Set printer [%s] init DEVMODE for driver [%s]\n",
                        info_ptr->printername, info_ptr->drivername));
@@ -3166,7 +3211,7 @@ WERROR get_a_printer(NT_PRINTER_INFO_LEVEL **pp_printer, uint32 level, fstring s
                        break;
        }
        
-       DEBUG(10,("get_a_printer: [%s] level %u returning %s\n", sharename, (unsigned int)level, werror_str(result)));
+       DEBUG(10,("get_a_printer: [%s] level %u returning %s\n", sharename, (unsigned int)level, dos_errstr(result)));
 
        return result;
 }
@@ -3930,6 +3975,7 @@ BOOL print_time_access_check(int snum)
        return ok;
 }
 
+#if 0  /* JERRY - not used */
 /****************************************************************************
  Attempt to write a default device.
 *****************************************************************************/
@@ -4001,3 +4047,4 @@ WERROR printer_write_default_dev(int snum, const PRINTER_DEFAULT *printer_defaul
        free_a_printer(&printer, 2);
        return result;
 }
+#endif /* JERRY */