Tim Waugh b72555
diff -up cups-1.7.5/notifier/rss.c.str4461 cups-1.7.5/notifier/rss.c
Tim Waugh b72555
--- cups-1.7.5/notifier/rss.c.str4461	2013-05-29 12:51:34.000000000 +0100
Tim Waugh b72555
+++ cups-1.7.5/notifier/rss.c	2014-09-01 10:16:34.088149082 +0100
Tim Waugh b72555
@@ -1,27 +1,16 @@
Tim Waugh b72555
 /*
Tim Waugh b72555
  * "$Id: rss.c 10996 2013-05-29 11:51:34Z msweet $"
Tim Waugh b72555
  *
Tim Waugh b72555
- *   RSS notifier for CUPS.
Tim Waugh b72555
+ * RSS notifier for CUPS.
Tim Waugh b72555
  *
Tim Waugh b72555
- *   Copyright 2007-2012 by Apple Inc.
Tim Waugh b72555
- *   Copyright 2007 by Easy Software Products.
Tim Waugh b72555
+ * Copyright 2007-2014 by Apple Inc.
Tim Waugh b72555
+ * Copyright 2007 by Easy Software Products.
Tim Waugh b72555
  *
Tim Waugh b72555
- *   These coded instructions, statements, and computer programs are the
Tim Waugh b72555
- *   property of Apple Inc. and are protected by Federal copyright
Tim Waugh b72555
- *   law.  Distribution and use rights are outlined in the file "LICENSE.txt"
Tim Waugh b72555
- *   which should have been included with this file.  If this file is
Tim Waugh b72555
- *   file is missing or damaged, see the license at "http://www.cups.org/".
Tim Waugh b72555
- *
Tim Waugh b72555
- * Contents:
Tim Waugh b72555
- *
Tim Waugh b72555
- *   main()           - Main entry for the test notifier.
Tim Waugh b72555
- *   compare_rss()    - Compare two messages.
Tim Waugh b72555
- *   delete_message() - Free all memory used by a message.
Tim Waugh b72555
- *   load_rss()       - Load an existing RSS feed file.
Tim Waugh b72555
- *   new_message()    - Create a new RSS message.
Tim Waugh b72555
- *   password_cb()    - Return the cached password.
Tim Waugh b72555
- *   save_rss()       - Save messages to a RSS file.
Tim Waugh b72555
- *   xml_escape()     - Copy a string, escaping &, <, and > as needed.
Tim Waugh b72555
+ * These coded instructions, statements, and computer programs are the
Tim Waugh b72555
+ * property of Apple Inc. and are protected by Federal copyright
Tim Waugh b72555
+ * law.  Distribution and use rights are outlined in the file "LICENSE.txt"
Tim Waugh b72555
+ * which should have been included with this file.  If this file is
Tim Waugh b72555
+ * file is missing or damaged, see the license at "http://www.cups.org/".
Tim Waugh b72555
  */
Tim Waugh b72555
 
Tim Waugh b72555
 /*
Tim Waugh b72555
@@ -29,6 +18,7 @@
Tim Waugh b72555
  */
Tim Waugh b72555
 
Tim Waugh b72555
 #include <cups/cups.h>
Tim Waugh b72555
+#include <sys/stat.h>
Tim Waugh b72555
 #include <cups/language.h>
Tim Waugh b72555
 #include <cups/string-private.h>
Tim Waugh b72555
 #include <cups/array.h>
Tim Waugh b72555
@@ -629,6 +619,8 @@ save_rss(cups_array_t *rss,		/* I - RSS
Tim Waugh b72555
     return (0);
Tim Waugh b72555
   }
Tim Waugh b72555
 
Tim Waugh b72555
+  fchmod(fileno(fp), 0644);
Tim Waugh b72555
+
Tim Waugh b72555
   fputs("\n", fp);
Tim Waugh b72555
   fputs("<rss version=\"2.0\">\n", fp);
Tim Waugh b72555
   fputs("  <channel>\n", fp);
Tim Waugh d10ba2
diff -up cups-1.7.5/scheduler/client.c.str4461 cups-1.7.5/scheduler/client.c
Tim Waugh d10ba2
--- cups-1.7.5/scheduler/client.c.str4461	2014-07-22 15:03:19.000000000 +0100
Tim Waugh b72555
+++ cups-1.7.5/scheduler/client.c	2014-09-01 10:15:51.970947105 +0100
Tim Waugh d10ba2
@@ -3263,6 +3263,7 @@ get_file(cupsd_client_t *con,		/* I  - C
Tim Waugh d10ba2
   char		*ptr;			/* Pointer info filename */
Tim Waugh d10ba2
   int		plen;			/* Remaining length after pointer */
Tim Waugh d10ba2
   char		language[7];		/* Language subdirectory, if any */
Tim Waugh d10ba2
+  int		perm_check = 1;		/* Do permissions check? */
Tim Waugh ba58bf
 
Tim Waugh d10ba2
 
Tim Waugh d10ba2
  /*
Tim Waugh d10ba2
@@ -3272,17 +3273,27 @@ get_file(cupsd_client_t *con,		/* I  - C
Tim Waugh d10ba2
   language[0] = '\0';
Tim Waugh d10ba2
 
Tim Waugh d10ba2
   if (!strncmp(con->uri, "/ppd/", 5) && !strchr(con->uri + 5, '/'))
Tim Waugh d10ba2
+  {
Tim Waugh d10ba2
     snprintf(filename, len, "%s%s", ServerRoot, con->uri);
Tim Waugh d10ba2
+
Tim Waugh d10ba2
+    perm_check = 0;
Tim Waugh d10ba2
+  }
Tim Waugh d10ba2
   else if (!strncmp(con->uri, "/icons/", 7) && !strchr(con->uri + 7, '/'))
Tim Waugh ba58bf
   {
Tim Waugh d10ba2
     snprintf(filename, len, "%s/%s", CacheDir, con->uri + 7);
Tim Waugh d10ba2
     if (access(filename, F_OK) < 0)
Tim Waugh d10ba2
       snprintf(filename, len, "%s/images/generic.png", DocumentRoot);
Tim Waugh ba58bf
+
Tim Waugh d10ba2
+    perm_check = 0;
Tim Waugh ba58bf
   }
Tim Waugh d10ba2
   else if (!strncmp(con->uri, "/rss/", 5) && !strchr(con->uri + 5, '/'))
Tim Waugh d10ba2
     snprintf(filename, len, "%s/rss/%s", CacheDir, con->uri + 5);
Tim Waugh d10ba2
-  else if (!strncmp(con->uri, "/admin/conf/", 12))
Tim Waugh d10ba2
-    snprintf(filename, len, "%s%s", ServerRoot, con->uri + 11);
Tim Waugh d10ba2
+  else if (!strcmp(con->uri, "/admin/conf/cupsd.conf"))
Tim Waugh d10ba2
+  {
Tim Waugh d10ba2
+    strlcpy(filename, ConfigurationFile, len);
Tim Waugh d10ba2
+
Tim Waugh d10ba2
+    perm_check = 0;
Tim Waugh d10ba2
+  }
Tim Waugh d10ba2
   else if (!strncmp(con->uri, "/admin/log/", 11))
Tim Waugh d10ba2
   {
Tim Waugh d10ba2
     if (!strncmp(con->uri + 11, "access_log", 10) && AccessLog[0] == '/')
Tim Waugh d10ba2
@@ -3293,6 +3304,8 @@ get_file(cupsd_client_t *con,		/* I  - C
Tim Waugh d10ba2
       strlcpy(filename, PageLog, len);
Tim Waugh d10ba2
     else
Tim Waugh d10ba2
       return (NULL);
Tim Waugh d10ba2
+
Tim Waugh d10ba2
+    perm_check = 0;
Tim Waugh d10ba2
   }
Tim Waugh d10ba2
   else if (con->language)
Tim Waugh d10ba2
   {
Tim Waugh d10ba2
@@ -3358,7 +3371,7 @@ get_file(cupsd_client_t *con,		/* I  - C
Tim Waugh d10ba2
   * not allow access...
Tim Waugh d10ba2
   */
Tim Waugh d10ba2
 
Tim Waugh d10ba2
-  if (!status && !(filestats->st_mode & S_IROTH))
Tim Waugh d10ba2
+  if (!status && perm_check && !(filestats->st_mode & S_IROTH))
Tim Waugh d10ba2
   {
Tim Waugh d10ba2
     cupsdLogMessage(CUPSD_LOG_INFO, "[Client %d] Files/directories such as \"%s\" must be world-readable.", con->http.fd, filename);
Tim Waugh d10ba2
     return (NULL);
Tim Waugh d10ba2
@@ -3466,7 +3479,7 @@ get_file(cupsd_client_t *con,		/* I  - C
Tim Waugh d10ba2
     * not allow access...
Tim Waugh d10ba2
     */
Tim Waugh d10ba2
 
Tim Waugh d10ba2
-    if (!status && !(filestats->st_mode & S_IROTH))
Tim Waugh d10ba2
+    if (!status && perm_check && !(filestats->st_mode & S_IROTH))
Tim Waugh d10ba2
     {
Tim Waugh d10ba2
       cupsdLogMessage(CUPSD_LOG_INFO, "[Client %d] Files/directories such as \"%s\" must be world-readable.", con->http.fd, filename);
Tim Waugh d10ba2
       return (NULL);
Tim Waugh b72555
diff -up cups-1.7.5/scheduler/conf.c.str4461 cups-1.7.5/scheduler/conf.c
Tim Waugh b72555
--- cups-1.7.5/scheduler/conf.c.str4461	2014-09-01 10:15:51.968947096 +0100
Tim Waugh b72555
+++ cups-1.7.5/scheduler/conf.c	2014-09-01 10:16:52.624237974 +0100
Tim Waugh b72555
@@ -1092,7 +1092,7 @@ cupsdReadConfiguration(void)
Tim Waugh b72555
 
Tim Waugh b72555
   if ((cupsdCheckPermissions(RequestRoot, NULL, 0710, RunUser,
Tim Waugh b72555
 			     Group, 1, 1) < 0 ||
Tim Waugh b72555
-       cupsdCheckPermissions(CacheDir, NULL, 0775, RunUser,
Tim Waugh b72555
+       cupsdCheckPermissions(CacheDir, NULL, 0770, RunUser,
Tim Waugh b72555
 			     Group, 1, 1) < 0 ||
Tim Waugh b72555
        cupsdCheckPermissions(temp, NULL, 0775, RunUser,
Tim Waugh b72555
 			     Group, 1, 1) < 0 ||
Tim Waugh d10ba2
diff -up cups-1.7.5/scheduler/ipp.c.str4461 cups-1.7.5/scheduler/ipp.c
Tim Waugh b72555
--- cups-1.7.5/scheduler/ipp.c.str4461	2014-09-01 10:15:51.848946520 +0100
Tim Waugh b72555
+++ cups-1.7.5/scheduler/ipp.c	2014-09-01 10:15:51.972947115 +0100
Tim Waugh d10ba2
@@ -2743,7 +2743,6 @@ add_printer(cupsd_client_t  *con,	/* I -
Tim Waugh d10ba2
 
Tim Waugh d10ba2
       cupsdLogMessage(CUPSD_LOG_DEBUG,
Tim Waugh d10ba2
 		      "Copied PPD file successfully");
Tim Waugh d10ba2
-      chmod(dstfile, 0644);
Tim Waugh d10ba2
     }
Tim Waugh d10ba2
   }
Tim Waugh d10ba2
 
Tim Waugh d10ba2
@@ -4650,7 +4649,7 @@ copy_model(cupsd_client_t *con,		/* I -
Tim Waugh d10ba2
   * Open the destination file for a copy...
Tim Waugh d10ba2
   */
Tim Waugh d10ba2
 
Tim Waugh d10ba2
-  if ((dst = cupsFileOpen(to, "wb")) == NULL)
Tim Waugh d10ba2
+  if ((dst = cupsdCreateConfFile(to, ConfigFilePerm)) == NULL)
Tim Waugh d10ba2
   {
Tim Waugh d10ba2
     cupsFreeOptions(num_defaults, defaults);
Tim Waugh d10ba2
     cupsFileClose(src);
Tim Waugh d10ba2
@@ -4705,7 +4704,7 @@ copy_model(cupsd_client_t *con,		/* I -
Tim Waugh d10ba2
 
Tim Waugh d10ba2
   unlink(tempfile);
Tim Waugh d10ba2
 
Tim Waugh d10ba2
-  return (cupsFileClose(dst));
Tim Waugh d10ba2
+  return (cupsdCloseCreatedConfFile(dst, to));
Tim Waugh d10ba2
 }
Tim Waugh d10ba2
 
Tim Waugh ba58bf
 
Tim Waugh b72555
diff -up cups-1.7.5/scheduler/Makefile.str4461 cups-1.7.5/scheduler/Makefile
Tim Waugh b72555
--- cups-1.7.5/scheduler/Makefile.str4461	2014-09-01 10:15:51.965947081 +0100
Tim Waugh b72555
+++ cups-1.7.5/scheduler/Makefile	2014-09-01 10:16:52.624237974 +0100
Tim Waugh b72555
@@ -174,7 +174,7 @@ install-data:
Tim Waugh b72555
 	echo Creating $(REQUESTS)/tmp...
Tim Waugh b72555
 	$(INSTALL_DIR) -m 1770 -g $(CUPS_GROUP) $(REQUESTS)/tmp
Tim Waugh b72555
 	echo Creating $(CACHEDIR)...
Tim Waugh b72555
-	$(INSTALL_DIR) -m 775 -g $(CUPS_GROUP) $(CACHEDIR)
Tim Waugh b72555
+	$(INSTALL_DIR) -m 770 -g $(CUPS_GROUP) $(CACHEDIR)
Tim Waugh b72555
 	if test "x$(INITDIR)" != x; then \
Tim Waugh b72555
 		echo Installing init scripts...; \
Tim Waugh b72555
 		$(INSTALL_DIR) -m 755 $(BUILDROOT)$(INITDIR)/init.d; \