Re-add umask(0) code removed by commit 3a7c2777ee0de37d758fe81d67d6836a8354825e
authorJeremy Allison <jra@samba.org>
Tue, 18 Jun 2013 00:02:56 +0000 (17:02 -0700)
committerJeremy Allison <jra@samba.org>
Tue, 18 Jun 2013 02:31:27 +0000 (04:31 +0200)
Without the umask code the pipe permissions are affected by the
umask of the calling process. As only smbd currently sets its
umask to zero (nmbd and winbindd should do the same) this causes
the winbindd pipe to be unavailable to the nss library code unless
winbindd is run from an init process that explicitly sets umask
to zero. When testing from the command line this can be hard to
track down :-).

Signed-off-by: Jeremy Allison <jra@samba.org>
Reviewed-by: Ira Cooper <ira@samba.org>
Autobuild-User(master): Jeremy Allison <jra@samba.org>
Autobuild-Date(master): Tue Jun 18 04:31:27 CEST 2013 on sn-devel-104

source3/lib/util_sock.c

index eb38055d19a7b2eff085791950e29e74f9ad0c01..54286b3f31106e95a097783defe72cffb45eb5c4 100644 (file)
@@ -1237,14 +1237,17 @@ int create_pipe_sock(const char *socket_dir,
 #ifdef HAVE_UNIXSOCKET
        struct sockaddr_un sunaddr;
        bool ok;
-       int sock;
+       int sock = -1;
+       mode_t old_umask;
        char *path = NULL;
 
+       old_umask = umask(0);
+
        ok = directory_create_or_exist_strict(socket_dir,
                                              sec_initial_uid(),
                                              dir_perms);
        if (!ok) {
-               return -1;
+               goto out_close;
        }
 
        /* Create the socket file */
@@ -1273,6 +1276,7 @@ int create_pipe_sock(const char *socket_dir,
 
        SAFE_FREE(path);
 
+       umask(old_umask);
        return sock;
 
 out_close:
@@ -1280,6 +1284,7 @@ out_close:
        if (sock != -1)
                close(sock);
 
+       umask(old_umask);
        return -1;
 
 #else