I'm doing some things towards the NamedPipes game with lckl and he has asked me
[ira/wip.git] / source3 / nsswitch / winbindd.c
index 1a9eae7afa545ed7b92c2a033bbd9f5c5b4bcdde..25b69cee6d85d986199af1e40adf086d62621bae 100644 (file)
@@ -187,92 +187,8 @@ static void sighup_handler(int signum)
 
 static int create_sock(void)
 {
-        struct sockaddr_un sunaddr;
-        struct stat st;
-        int sock;
-        mode_t old_umask;
-        pstring path;
-        
-        /* Create the socket directory or reuse the existing one */
-        
-        if (lstat(WINBINDD_SOCKET_DIR, &st) == -1) {
-                
-                if (errno == ENOENT) {
-                        
-                        /* Create directory */
-                        
-                        if (mkdir(WINBINDD_SOCKET_DIR, 0755) == -1) {
-                                DEBUG(0, ("error creating socket directory "
-                                          "%s: %s\n", WINBINDD_SOCKET_DIR, 
-                                          strerror(errno)));
-                                return -1;
-                        }
-                        
-                } else {
-                        
-                        DEBUG(0, ("lstat failed on socket directory %s: %s\n",
-                                  WINBINDD_SOCKET_DIR, strerror(errno)));
-                        return -1;
-                }
-                
-        } else {
-                
-                /* Check ownership and permission on existing directory */
-                
-                if (!S_ISDIR(st.st_mode)) {
-                        DEBUG(0, ("socket directory %s isn't a directory\n",
-                                  WINBINDD_SOCKET_DIR));
-                        return -1;
-                }
-                
-                if ((st.st_uid != sec_initial_uid()) || 
-                    ((st.st_mode & 0777) != 0755)) {
-                        DEBUG(0, ("invalid permissions on socket directory "
-                                  "%s\n", WINBINDD_SOCKET_DIR));
-                        return -1;
-                }
-        }
-        
-        /* Create the socket file */
-        
-        old_umask = umask(0);
-        
-        sock = socket(AF_UNIX, SOCK_STREAM, 0);
-        
-        if (sock == -1) {
-                perror("socket");
-                return -1;
-        }
-        
-        snprintf(path, sizeof(path), "%s/%s", 
-                 WINBINDD_SOCKET_DIR, WINBINDD_SOCKET_NAME);
-        
-        unlink(path);
-        memset(&sunaddr, 0, sizeof(sunaddr));
-        sunaddr.sun_family = AF_UNIX;
-        safe_strcpy(sunaddr.sun_path, path, sizeof(sunaddr.sun_path)-1);
-        
-        if (bind(sock, (struct sockaddr *)&sunaddr, sizeof(sunaddr)) == -1) {
-                DEBUG(0, ("bind failed on winbind socket %s: %s\n",
-                          path,
-                          strerror(errno)));
-                close(sock);
-                return -1;
-        }
-        
-        if (listen(sock, 5) == -1) {
-                DEBUG(0, ("listen failed on winbind socket %s: %s\n",
-                          path,
-                          strerror(errno)));
-                close(sock);
-                return -1;
-        }
-        
-        umask(old_umask);
-        
-        /* Success! */
-        
-        return sock;
+       return create_pipe_sock( WINBINDD_SOCKET_DIR,
+                                WINBINDD_SOCKET_NAME, 0755);
 }
 
 struct dispatch_table {