]> git.decadent.org.uk Git - nfs-utils.git/blobdiff - support/nfs/exports.c
exports: minor parse_opts cleanup
[nfs-utils.git] / support / nfs / exports.c
index 334c08e1642051210c10f35a1137b9ae5999e8fd..f1ca6329af5769241f363ed84a366737b9495c06 100644 (file)
@@ -127,8 +127,6 @@ getexportent(int fromkernel, int fromexports)
                if (ok <= 0)
                        return NULL;
 
-               strncpy (def_ee.m_path, def_ee.e_path, sizeof (def_ee.m_path) - 1);
-               def_ee.m_path [sizeof (def_ee.m_path) - 1] = '\0';
                ok = getexport(exp, sizeof(exp));
        }
        if (ok < 0) {
@@ -187,8 +185,6 @@ getexportent(int fromkernel, int fromexports)
                rpath[sizeof (rpath) - 1] = '\0';
                strncpy(ee.e_path, rpath, sizeof (ee.e_path) - 1);
                ee.e_path[sizeof (ee.e_path) - 1] = '\0';
-               strncpy (ee.m_path, ee.e_path, sizeof (ee.m_path) - 1);
-               ee.m_path [sizeof (ee.m_path) - 1] = '\0';
        }
 
        return &ee;
@@ -360,8 +356,6 @@ mkexportent(char *hname, char *path, char *options)
        }
        strncpy(ee.e_path, path, sizeof (ee.e_path));
        ee.e_path[sizeof (ee.e_path) - 1] = '\0';
-       strncpy (ee.m_path, ee.e_path, sizeof (ee.m_path) - 1);
-       ee.m_path [sizeof (ee.m_path) - 1] = '\0';
        if (parseopts(options, &ee, 0, NULL) < 0)
                return NULL;
        return &ee;
@@ -476,6 +470,18 @@ static void clearflags(int mask, unsigned int active, struct exportent *ep)
 /* options that can vary per flavor: */
 #define NFSEXP_SECINFO_FLAGS (NFSEXP_READONLY | NFSEXP_ROOTSQUASH \
                                        | NFSEXP_ALLSQUASH)
+/*
+ * For those flags which are not allowed to vary by pseudoflavor,
+ * ensure that the export flags agree with the flags on each
+ * pseudoflavor:
+ */
+static void fix_pseudoflavor_flags(struct exportent *ep)
+{
+       struct sec_entry *p;
+
+       for (p = ep->e_secinfo; p->flav; p++)
+               p->flags |= ep->e_flags & ~NFSEXP_SECINFO_FLAGS;
+}
 
 /*
  * Parse option string pointed to by cp and set mount options accordingly.
@@ -483,7 +489,6 @@ static void clearflags(int mask, unsigned int active, struct exportent *ep)
 static int
 parseopts(char *cp, struct exportent *ep, int warn, int *had_subtree_opt_ptr)
 {
-       struct sec_entry *p;
        int     had_subtree_opt = 0;
        char    *flname = efname?efname:"command line";
        int     flline = efp?efp->x_line:0;
@@ -647,9 +652,7 @@ bad_option:
         */
        if (ep->e_fslocdata)
                ep->e_flags |= NFSEXP_NOHIDE;
-
-       for (p = ep->e_secinfo; p->flav; p++)
-               p->flags |= ep->e_flags & ~NFSEXP_SECINFO_FLAGS;
+       fix_pseudoflavor_flags(ep);
        ep->e_squids = squids;
        ep->e_sqgids = sqgids;
        ep->e_nsquids = nsquids;
@@ -766,4 +769,3 @@ syntaxerr(char *msg)
        xlog(L_ERROR, "%s:%d: syntax error: %s",
                        efname, efp?efp->x_line:0, msg);
 }
-