da2c254
diff -up cups-1.4.2/cups/util.c.str3435 cups-1.4.2/cups/util.c
da2c254
--- cups-1.4.2/cups/util.c.str3435	2009-06-22 21:44:34.000000000 +0100
da2c254
+++ cups-1.4.2/cups/util.c	2009-12-08 12:11:38.647375446 +0000
da2c254
@@ -1511,12 +1511,36 @@ cupsPrintFiles2(
da2c254
       return (0);
da2c254
     }
da2c254
 
da2c254
-    status = cupsStartDocument(http, name, job_id, docname, format,
da2c254
-                               i == (num_files - 1));
da2c254
+    do
da2c254
+    {
da2c254
+      cupsFileRewind(fp);
da2c254
+
da2c254
+      status = cupsStartDocument(http, name, job_id, docname, format,
da2c254
+			         i == (num_files - 1));
da2c254
+
da2c254
+      while (status == HTTP_CONTINUE &&
da2c254
+	     (bytes = cupsFileRead(fp, buffer, sizeof(buffer))) > 0)
da2c254
+        status = cupsWriteRequestData(http, buffer, bytes);
da2c254
+
da2c254
+      if (status == HTTP_UNAUTHORIZED)
da2c254
+      {
da2c254
+        char	resource[1024];		/* Printer resource */
da2c254
 
da2c254
-    while (status == HTTP_CONTINUE &&
da2c254
-           (bytes = cupsFileRead(fp, buffer, sizeof(buffer))) > 0)
da2c254
-      status = cupsWriteRequestData(http, buffer, bytes);
da2c254
+        snprintf(resource, sizeof(resource), "/printers/%s", name);
da2c254
+
da2c254
+        if (!cupsDoAuthentication(http, "POST", resource))
da2c254
+        {
da2c254
+	  if (httpReconnect(http))
da2c254
+	  {
da2c254
+	    _cupsSetError(IPP_SERVICE_UNAVAILABLE, NULL, 0);
da2c254
+	    return (0);
da2c254
+	  }
da2c254
+        }
da2c254
+	else
da2c254
+	  status = HTTP_AUTHORIZATION_CANCELED;
da2c254
+      }
da2c254
+    }
da2c254
+    while (status == HTTP_UNAUTHORIZED);
da2c254
 
da2c254
     cupsFileClose(fp);
da2c254