]> git.decadent.org.uk Git - nfs-utils.git/blobdiff - support/nfs/exports.c
2001-09-12 NeilBrown <neilb@cse.unsw.edu.au>
[nfs-utils.git] / support / nfs / exports.c
index 71420c825520bd856753584bdee3d650bb08f7b3..eb1bf2c8db165bbd761603c4d06be5f74e569fa1 100644 (file)
@@ -98,6 +98,8 @@ getexportent(void)
        if (ok == 0)
                exp[0] = '\0';
        if ((opt = strchr(exp, '(')) != NULL) {
+               if (opt == exp) 
+                       xlog(L_WARNING, "No host name given with %s %s, suggest *%s to avoid warning", ee.e_path, exp, exp);
                *opt++ = '\0';
                if (!(sp = strchr(opt, ')')) || sp[1] != '\0') {
                        syntaxerr("bad option list");
@@ -106,6 +108,8 @@ getexportent(void)
                *sp = '\0';
                if (parseopts(opt, &ee) < 0)
                        return NULL;
+       } else {
+           xlog(L_WARNING, "No options for %s %s: suggest %s() to avoid warning", ee.e_path, exp, exp);
        }
        if (strlen(exp) >= sizeof(ee.e_hostname)) {
                syntaxerr("client name too long");
@@ -131,12 +135,19 @@ putexportent(struct exportent *ep)
 {
        FILE    *fp;
        int     *id, i;
+       char    *esc=ep->e_path;
 
        if (!efp)
                return;
 
        fp = efp->x_fp;
-       fprintf(fp, "%s\t%s(", ep->e_path, ep->e_hostname);
+       for (i=0; esc[i]; i++)
+               if (iscntrl(esc[i]) || esc[i] == '"' || esc[i] == '\\'|| isspace(esc[i]))
+                       fprintf(fp, "\\%03o", esc[i]);
+               else
+                       fprintf(fp, "%c", esc[i]);
+
+       fprintf(fp, "\t%s(", ep->e_hostname);
        fprintf(fp, "%s,", (ep->e_flags & NFSEXP_READONLY)? "ro" : "rw");
        fprintf(fp, "%ssync,", (ep->e_flags & NFSEXP_ASYNC)? "a" : "");
        fprintf(fp, "%swdelay,", (ep->e_flags & NFSEXP_GATHERED_WRITES)?
@@ -394,8 +405,8 @@ parsesquash(char *list, int **idp, int *lenp, char **ep)
                cp++;
        } while(1);
 
-       if (*cp == ',') *ep = cp+1;
-       
+       if (**ep == ',') (*ep)++;
+
        *lenp = len;
        *idp = id;
        return 1;