Blob Blame History Raw
diff -up cups-1.4.1/scheduler/ipp.c.str3356 cups-1.4.1/scheduler/ipp.c
--- cups-1.4.1/scheduler/ipp.c.str3356	2009-10-07 17:26:27.504800579 +0100
+++ cups-1.4.1/scheduler/ipp.c	2009-10-07 17:26:31.311800539 +0100
@@ -2324,8 +2324,9 @@ add_printer(cupsd_client_t  *con,	/* I -
 		dstfile[1024];		/* Destination Script/PPD file */
   int		modify;			/* Non-zero if we are modifying */
   char		newname[IPP_MAX_NAME];	/* New printer name */
-  int		need_restart_job;	/* Need to restart job? */
-  int		set_device_uri,		/* Did we set the device URI? */
+  int		changed_driver,		/* Changed the PPD/interface script? */
+		need_restart_job,	/* Need to restart job? */
+		set_device_uri,		/* Did we set the device URI? */
 		set_port_monitor;	/* Did we set the port monitor? */
 
 
@@ -2469,6 +2470,7 @@ add_printer(cupsd_client_t  *con,	/* I -
   * Look for attributes and copy them over as needed...
   */
 
+  changed_driver   = 0;
   need_restart_job = 0;
 
   if ((attr = ippFindAttribute(con->request, "printer-location",
@@ -2731,6 +2733,7 @@ add_printer(cupsd_client_t  *con,	/* I -
   if (con->filename)
   {
     need_restart_job = 1;
+    changed_driver   = 1;
 
     strlcpy(srcfile, con->filename, sizeof(srcfile));
 
@@ -2801,18 +2804,6 @@ add_printer(cupsd_client_t  *con,	/* I -
 	cupsdLogMessage(CUPSD_LOG_DEBUG,
 			"Copied PPD file successfully!");
 	chmod(dstfile, 0644);
-
-#ifdef __APPLE__
-       /*
-        * (Re)register color profiles...
-	*/
-
-        if (!RunUser)
-	{
-	  apple_unregister_profiles(printer);
-	  apple_register_profiles(printer);
-        }
-#endif /* __APPLE__ */
       }
       else
       {
@@ -2829,6 +2820,7 @@ add_printer(cupsd_client_t  *con,	/* I -
                                     IPP_TAG_NAME)) != NULL)
   {
     need_restart_job = 1;
+    changed_driver   = 1;
 
     if (!strcmp(attr->values[0].string.text, "raw"))
     {
@@ -2866,19 +2858,33 @@ add_printer(cupsd_client_t  *con,	/* I -
       cupsdLogMessage(CUPSD_LOG_DEBUG,
 		      "Copied PPD file successfully!");
       chmod(dstfile, 0644);
+    }
+  }
+
+  if (changed_driver)
+  {
+   /*
+    * If we changed the PPD/interface script, then remove the printer's cache
+    * file...
+    */
+
+    char cache_name[1024];		/* Cache filename for printer attrs */
+
+    snprintf(cache_name, sizeof(cache_name), "%s/%s.ipp", CacheDir,
+             printer->name);
+    unlink(cache_name);
 
 #ifdef __APPLE__
-     /*
-      * (Re)register color profiles...
-      */
+   /*
+    * (Re)register color profiles...
+    */
 
-      if (!RunUser)
-      {
-	apple_unregister_profiles(printer);
-	apple_register_profiles(printer);
-      }
-#endif /* __APPLE__ */
+    if (!RunUser)
+    {
+      apple_unregister_profiles(printer);
+      apple_register_profiles(printer);
     }
+#endif /* __APPLE__ */
   }
 
  /*