]> git.decadent.org.uk Git - nfs-utils.git/blobdiff - utils/mountd/mountd.c
Assorted fixes
[nfs-utils.git] / utils / mountd / mountd.c
index b1bce1dfc9c45846a25d237e3af552104fb323d7..ae5daa12fff4fc491c6707f74f6ed402f14fc595 100644 (file)
@@ -282,6 +282,13 @@ get_rootfh(struct svc_req *rqstp, dirpath *path, int *error, int v3)
                xlog(L_WARNING, "request to export directory %s below nearest filesystem %s",
                     p, exp->m_export.e_path);
                *error = NFSERR_ACCES;
+       } else if (exp->m_export.e_mountpoint &&
+                  !is_mountpoint(exp->m_export.e_mountpoint[0]?
+                                 exp->m_export.e_mountpoint:
+                                 exp->m_export.e_path)) {
+               xlog(L_WARNING, "request to export an unmounted filesystem: %s",
+                    p);
+               *error = NFSERR_NOENT;
        } else if (new_cache) {
                /* This will be a static private nfs_export with just one
                 * address.  We feed it to kernel then extract the filehandle,
@@ -431,7 +438,7 @@ main(int argc, char **argv)
 
        /* Parse the command line options and arguments. */
        opterr = 0;
-       while ((c = getopt_long(argc, argv, "on:Fd:f:p:P:hN:V:v", longopts, NULL)) != EOF)
+       while ((c = getopt_long(argc, argv, "o:n:Fd:f:p:P:hN:V:v", longopts, NULL)) != EOF)
                switch (c) {
                case 'o':
                        descriptors = atoi(optarg);
@@ -513,6 +520,7 @@ main(int argc, char **argv)
        sigaction(SIGHUP, &sa, NULL);
        sigaction(SIGINT, &sa, NULL);
        sigaction(SIGTERM, &sa, NULL);
+       sigaction(SIGPIPE, &sa, NULL);
        /* WARNING: the following works on Linux and SysV, but not BSD! */
        sigaction(SIGCHLD, &sa, NULL);