summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog7
-rw-r--r--support/nfs/exports.c22
2 files changed, 22 insertions, 7 deletions
diff --git a/ChangeLog b/ChangeLog
index afe22cf..7b4c10f 100644
--- 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.
diff --git a/support/nfs/exports.c b/support/nfs/exports.c
index 702df23..078c806 100644
--- a/support/nfs/exports.c
+++ b/support/nfs/exports.c
@@ -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++;
}