]> git.decadent.org.uk Git - nfs-utils.git/commitdiff
changed parseopts to not modify the "char *cp" argument. It was
authorneilbrown <neilbrown>
Mon, 22 Nov 1999 23:17:27 +0000 (23:17 +0000)
committerneilbrown <neilbrown>
Mon, 22 Nov 1999 23:17:27 +0000 (23:17 +0000)
replacing commas with nuls so that parseopts could not be called twice
with the same string.

ChangeLog
support/nfs/exports.c

index afe22cff8db0ca633267d911a1be9cc6b8e02d82..7b4c10f8e6eee29313796300fcc1f7c867c8c6fe 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+Tue Nov 23 10:13:39 1999  Neil Brown <neilb@cse.unsw.edu.au>
+
+       * support/nfs/exports.c (parseopts): make copy of opt string before
+                       'nul'ing out commas so that
+                       exportfs -o option1,option2 hosta:/fs hostb:/fs
+                        applies both options to both exports
+
 Thu Oct 28 12:55:42 1999  H.J. Lu <hjl@lucon.org>
 
        * README: Fix a few typos.
index 702df23097046e90a94e3fe29ef5a83f5fd0236d..078c806f3c4c672c8b94d4fef49e7b30ae48a68e 100644 (file)
@@ -253,12 +253,11 @@ updateexportent(struct exportent *eep, char *options)
 }
 
 /*
- * Parse option string pointed to by s and set mount options accordingly.
+ * Parse option string pointed to by cp and set mount options accordingly.
  */
 static int
 parseopts(char *cp, struct exportent *ep)
 {
-       char    *opt;
 
        squids = ep->e_squids; nsquids = ep->e_nsquids;
        sqgids = ep->e_sqgids; nsqgids = ep->e_nsqgids;
@@ -266,11 +265,14 @@ parseopts(char *cp, struct exportent *ep)
        while (isblank(*cp))
                cp++;
        while (*cp) {
-               opt = cp;
+               char *opt = strdup(cp);
+               char *optstart = cp;
                while (*cp && *cp != ',')
                        cp++;
-               if (*cp)
-                       *cp++ = '\0';
+               if (*cp) {
+                       opt[cp-optstart] = '\0';
+                       cp++;
+               }
 
                /* process keyword */
                if (strcmp(opt, "ro") == 0)
@@ -316,18 +318,24 @@ parseopts(char *cp, struct exportent *ep)
                else if (strncmp(opt, "anongid=", 8) == 0)
                        ep->e_anongid = atoi(opt+8);
                else if (strncmp(opt, "squash_uids=", 12) == 0) {
-                       if (parsesquash(opt+12, &squids, &nsquids, &cp) < 0)
+                       if (parsesquash(opt+12, &squids, &nsquids, &cp) < 0) {
+                               free(opt);
                                return -1;
+                       }
                } else if (strncmp(opt, "squash_gids=", 12) == 0) {
-                       if (parsesquash(opt+12, &sqgids, &nsqgids, &cp) < 0)
+                       if (parsesquash(opt+12, &sqgids, &nsqgids, &cp) < 0) {
+                               free(opt);
                                return -1;
+                       }
                } else {
                        xlog(L_ERROR,
                                "Unknown keyword \"%s\" in export file\n",
                                opt);
                        ep->e_flags |= NFSEXP_ALLSQUASH | NFSEXP_READONLY;
+                       free(opt);
                        return -1;
                }
+               free(opt);
                while (isblank(*cp))
                        cp++;
        }