]> git.decadent.org.uk Git - nfs-utils.git/commitdiff
Statd should always 'chdir' to its state directory.
authorNeilBrown <neilb@suse.de>
Thu, 21 Jul 2011 18:23:00 +0000 (14:23 -0400)
committerSteve Dickson <steved@redhat.com>
Thu, 21 Jul 2011 18:26:11 +0000 (14:26 -0400)
s statd can be started by 'mount' which can sometimes be run by a
normal user, the current-working-directory could be anything.  In
partcular it could be in a mounted filesystem.  As 'statd' continues
running as a daemon it could keep prevent that filesystem from being
unmounted.

statd does currently 'chdir' to the state directory, but only if the
state directory is not owned by root.  This is wrong - it should check
for root after the chdir, not before.

So swap the two if statements around.

Signed-off-by: NeilBrown <neilb@suse.de>
Signed-off-by: Steve Dickson <steved@redhat.com>
support/nsm/file.c

index 98b47bf8bd9f0b4dae29861b446d7ab3f137d134..a12c75300eebab5bc9dd4309e84e1bb88f68a067 100644 (file)
@@ -395,18 +395,18 @@ nsm_drop_privileges(const int pidfd)
                return false;
        }
 
-       if (st.st_uid == 0) {
-               xlog_warn("Running as root.  "
-                       "chown %s to choose different user", nsm_base_dirname);
-               return true;
-       }
-
        if (chdir(nsm_base_dirname) == -1) {
                xlog(L_ERROR, "Failed to change working directory to %s: %m",
                                nsm_base_dirname);
                return false;
        }
 
+       if (st.st_uid == 0) {
+               xlog_warn("Running as root.  "
+                       "chown %s to choose different user", nsm_base_dirname);
+               return true;
+       }
+
        /*
         * If the pidfile happens to reside on NFS, dropping privileges
         * will probably cause us to lose access, even though we are