chiark / gitweb /
server/admin.c (a_init): Restore the old umask after creating the socket.
authorMark Wooding <mdw@distorted.org.uk>
Wed, 14 Mar 2012 19:18:07 +0000 (19:18 +0000)
committerMark Wooding <mdw@distorted.org.uk>
Wed, 14 Mar 2012 21:09:26 +0000 (21:09 +0000)
server/admin.c

index 228cce1565ee906d7f5c4bf4f674055188e2321f..7aa1678d33143cb90b21d1dafc06f08e00e36330 100644 (file)
@@ -2226,6 +2226,7 @@ void a_init(const char *name, uid_t u, gid_t g)
   struct sockaddr_un sun;
   struct sigaction sa;
   size_t sz;
+  mode_t omask;
 
   /* --- Create services table --- */
 
@@ -2243,7 +2244,7 @@ void a_init(const char *name, uid_t u, gid_t g)
 
   /* --- Attempt to bind to the socket --- */
 
-  umask(0077);
+  omask = umask(0077);
 again:
   if ((fd = socket(PF_UNIX, SOCK_STREAM, 0)) < 0)
     die(EXIT_FAILURE, "couldn't create socket: %s", strerror(errno));
@@ -2280,6 +2281,7 @@ again:
             "admin: failed to give away socket: %s",
             strerror(errno)); )
   }
+  umask(omask);
   fdflags(fd, O_NONBLOCK, O_NONBLOCK, FD_CLOEXEC, FD_CLOEXEC);
   if (listen(fd, 5))
     die(EXIT_FAILURE, "couldn't listen on socket: %s", strerror(errno));