]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Add a new flag to check_private_dir to make it _not_ change permissions
authorNick Mathewson <nickm@torproject.org>
Fri, 13 May 2011 19:40:03 +0000 (15:40 -0400)
committerNick Mathewson <nickm@torproject.org>
Mon, 16 May 2011 00:20:29 +0000 (20:20 -0400)
We'll need this for checking permissions on the directories that hold
control sockets: if somebody says "ControlSocket ~/foo", it would be
pretty rude to do a chmod 700 on their homedir.

src/common/util.c
src/common/util.h

index 3f8187433149f44dd7ef55300c1255d9d064c501..d84ed9c00e5ab998637592160b1d69de31420e5b 100644 (file)
@@ -1670,6 +1670,8 @@ file_status(const char *fname)
  * check&CPD_CHECK, and we think we can create it, return 0.  Else
  * return -1.  If CPD_GROUP_OK is set, then it's okay if the directory
  * is group-readable, but in all cases we create the directory mode 0700.
+ * If CPD_CHECK_MODE_ONLY is set, then we don't alter the directory permissions
+ * if they are too permissive: we just return -1.
  */
 int
 check_private_dir(const char *dirname, cpd_check_t check)
@@ -1741,6 +1743,11 @@ check_private_dir(const char *dirname, cpd_check_t check)
   }
   if (st.st_mode & mask) {
     unsigned new_mode;
+    if (check & CPD_CHECK_MODE_ONLY) {
+      log_warn(LD_FS, "Permissions on directory %s are too permissive.",
+               dirname);
+      return -1;
+    }
     log_warn(LD_FS, "Fixing permissions on directory %s", dirname);
     new_mode = st.st_mode;
     new_mode |= 0700; /* Owner should have rwx */
index f75953226be9ae884b3c768cab4777102b29d74b..f32709accdb47e4fc7c240761d86134974262c85 100644 (file)
@@ -291,6 +291,7 @@ typedef unsigned int cpd_check_t;
 #define CPD_CREATE 1
 #define CPD_CHECK 2
 #define CPD_GROUP_OK 4
+#define CPD_CHECK_MODE_ONLY 8
 int check_private_dir(const char *dirname, cpd_check_t check);
 #define OPEN_FLAGS_REPLACE (O_WRONLY|O_CREAT|O_TRUNC)
 #define OPEN_FLAGS_APPEND (O_WRONLY|O_CREAT|O_APPEND)