]> git.decadent.org.uk Git - nfs-utils.git/blobdiff - support/nfs/exports.c
Support "acl" and "no_acl" export options.
[nfs-utils.git] / support / nfs / exports.c
index dfb241e6fb498f459ea5d7b7e31e576a2dd41fd5..43e68b147b9a7d6a3b97d2f87453953de5c70c6c 100644 (file)
@@ -91,6 +91,7 @@ getexportent(int fromkernel, int fromexports)
        ee.e_anongid = -2;
        ee.e_squids = NULL;
        ee.e_sqgids = NULL;
+       ee.e_mountpoint = NULL;
        ee.e_nsquids = 0;
        ee.e_nsqgids = 0;
 
@@ -172,7 +173,7 @@ putexportent(struct exportent *ep)
                                "" : "no_");
        fprintf(fp, "%shide,", (ep->e_flags & NFSEXP_NOHIDE)?
                                "no" : "");
-       fprintf(fp, "%scrossmnt,", (ep->e_flags & NFSEXP_CROSSMNT)?
+       fprintf(fp, "%scrossmnt,", (ep->e_flags & NFSEXP_CROSSMOUNT)?
                                "" : "no");
        fprintf(fp, "%ssecure,", (ep->e_flags & NFSEXP_INSECURE_PORT)?
                                "in" : "");
@@ -184,9 +185,15 @@ putexportent(struct exportent *ep)
                "no_" : "");
        fprintf(fp, "%ssecure_locks,", (ep->e_flags & NFSEXP_NOAUTHNLM)?
                "in" : "");
+       fprintf(fp, "%sacl,", (ep->e_flags & NFSEXP_NOACL)?
+               "no_" : "");
        if (ep->e_flags & NFSEXP_FSID) {
                fprintf(fp, "fsid=%d,", ep->e_fsid);
        }
+       if (ep->e_mountpoint)
+               fprintf(fp, "mountpoint%s%s,",
+                       ep->e_mountpoint[0]?"=":"", ep->e_mountpoint);
+
        fprintf(fp, "mapping=");
        switch (ep->e_maptype) {
        case CLE_MAP_IDENT:
@@ -247,6 +254,8 @@ dupexportent(struct exportent *dst, struct exportent *src)
                dst->e_sqgids = (int *) xmalloc(n * sizeof(int));
                memcpy(dst->e_sqgids, src->e_sqgids, n * sizeof(int));
        }
+       if (src->e_mountpoint)
+               dst->e_mountpoint = strdup(src->e_mountpoint);
 }
 
 struct exportent *
@@ -260,6 +269,7 @@ mkexportent(char *hname, char *path, char *options)
        ee.e_anongid = -2;
        ee.e_squids = NULL;
        ee.e_sqgids = NULL;
+       ee.e_mountpoint = NULL;
        ee.e_nsquids = 0;
        ee.e_nsqgids = 0;
 
@@ -339,9 +349,9 @@ parseopts(char *cp, struct exportent *ep, int warn)
                else if (!strcmp(opt, "hide"))
                        ep->e_flags &= ~NFSEXP_NOHIDE;
                else if (!strcmp(opt, "crossmnt"))
-                       ep->e_flags |= NFSEXP_CROSSMNT;
+                       ep->e_flags |= NFSEXP_CROSSMOUNT;
                else if (!strcmp(opt, "nocrossmnt"))
-                       ep->e_flags &= ~NFSEXP_CROSSMNT;
+                       ep->e_flags &= ~NFSEXP_CROSSMOUNT;
                else if (!strcmp(opt, "wdelay"))
                        ep->e_flags |= NFSEXP_GATHERED_WRITES;
                else if (!strcmp(opt, "no_wdelay"))
@@ -366,6 +376,10 @@ parseopts(char *cp, struct exportent *ep, int warn)
                        ep->e_flags &= ~NFSEXP_NOAUTHNLM;
                else if (strcmp(opt, "insecure_locks") == 0)
                        ep->e_flags |= NFSEXP_NOAUTHNLM;
+               else if (strcmp(opt, "acl") == 0)
+                       ep->e_flags &= ~NFSEXP_NOACL;
+               else if (strcmp(opt, "no_acl") == 0)
+                       ep->e_flags |= NFSEXP_NOACL;
                else if (strncmp(opt, "mapping=", 8) == 0)
                        ep->e_maptype = parsemaptype(opt+8);
                else if (strcmp(opt, "map_identity") == 0)      /* old style */
@@ -408,6 +422,15 @@ bad_option:
                                goto bad_option;
                        }
                        ep->e_flags |= NFSEXP_FSID;
+               } else if (strcmp(opt, "mountpoint")==0 ||
+                          strcmp(opt, "mp") == 0 ||
+                          strncmp(opt, "mountpoint=", 11)==0 ||
+                          strncmp(opt, "mp=", 3) == 0) {
+                       char * mp = strchr(opt, '=');
+                       if (mp)
+                               ep->e_mountpoint = strdup(mp+1);
+                       else
+                               ep->e_mountpoint = strdup("");
                } else {
                        xlog(L_ERROR, "%s:%d: unknown keyword \"%s\"\n",
                                        flname, flline, opt);