]> git.decadent.org.uk Git - nfs-utils.git/blobdiff - utils/statd/statd.c
Assorted changes from Steve Dickson
[nfs-utils.git] / utils / statd / statd.c
index 48362c0104d332c4f4aa7db4f131b07794d48dc6..f61914d5787e4642fcfda1c55406f21c5b58816e 100644 (file)
@@ -22,6 +22,7 @@
 #include <grp.h>
 #include "statd.h"
 #include "version.h"
+#include "nfslib.h"
 
 /* Socket operations */
 #include <sys/types.h>
@@ -194,8 +195,10 @@ static void drop_privs(void)
        struct stat st;
 
        if (stat(SM_DIR, &st) == -1 &&
-           stat(DIR_BASE, &st) == -1)
+           stat(DIR_BASE, &st) == -1) {
                st.st_uid = 0;
+               st.st_gid = 0;
+       }
 
        if (st.st_uid == 0) {
                note(N_WARNING, "statd running as root. chown %s to choose different user\n",
@@ -285,6 +288,7 @@ int main (int argc, char **argv)
                        }
                        break;
                case 'n':       /* Specify local hostname */
+                       run_mode |= STATIC_HOSTNAME;
                        MY_NAME = xstrdup(optarg);
                        break;
                case 'P':
@@ -400,14 +404,12 @@ int main (int argc, char **argv)
                        }
                }
                tempfd = open("/dev/null", O_RDWR);
-               close(0); dup2(tempfd, 0);
-               close(1); dup2(tempfd, 1);
-               close(2); dup2(tempfd, 2);
-               fdmax = sysconf (_SC_OPEN_MAX);
-               for (filedes = 3; filedes < fdmax; filedes++) 
-                       if (filedes != pipefds[1])
-                               close (filedes);
-
+               dup2(tempfd, 0);
+               dup2(tempfd, 1);
+               dup2(tempfd, 2);
+               dup2(pipefds[1], 3);
+               pipefds[1] = 3;
+               closeall(4);
        }
 
        /* Child. */