Author: asomers
Date: Tue Nov 28 17:30:25 2017
New Revision: 326327
URL: https://svnweb.freebsd.org/changeset/base/326327

Log:
  MFC r323193:
  
  Honor all options of "zfs mount -o"
  
  The existing code in zmount incorrectly parses the comma-delimited option
  string. The result is that nmount only honors the last option. AFAICT the
  parsing has been broken ever since ZFS's initial import in change 168404.
  
  PR:           222078
  Reviewed by:  avg
  Sponsored by: Spectra Logic Corp
  Differential Revision:        https://reviews.freebsd.org/D12232

Modified:
  stable/10/cddl/compat/opensolaris/misc/zmount.c
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/cddl/compat/opensolaris/misc/zmount.c
==============================================================================
--- stable/10/cddl/compat/opensolaris/misc/zmount.c     Tue Nov 28 17:27:00 
2017        (r326326)
+++ stable/10/cddl/compat/opensolaris/misc/zmount.c     Tue Nov 28 17:30:25 
2017        (r326327)
@@ -74,7 +74,7 @@ zmount(const char *spec, const char *dir, int mflag, c
     char *dataptr, int datalen, char *optptr, int optlen)
 {
        struct iovec *iov;
-       char *optstr, *os, *p;
+       char *optstr, *os, *p, *tofree;
        int iovlen, rv;
 
        assert(spec != NULL);
@@ -87,7 +87,7 @@ zmount(const char *spec, const char *dir, int mflag, c
        assert(optptr != NULL);
        assert(optlen > 0);
 
-       optstr = strdup(optptr);
+       tofree = optstr = strdup(optptr);
        assert(optstr != NULL);
 
        iov = NULL;
@@ -98,11 +98,9 @@ zmount(const char *spec, const char *dir, int mflag, c
        build_iovec(&iov, &iovlen, "fspath", __DECONST(char *, dir),
            (size_t)-1);
        build_iovec(&iov, &iovlen, "from", __DECONST(char *, spec), (size_t)-1);
-       for (p = optstr; p != NULL; strsep(&p, ",/ ")) {
-               if (*p != '\0')
-                       build_iovec(&iov, &iovlen, p, NULL, (size_t)-1);
-       }
+       while ((p = strsep(&optstr, ",/")) != NULL)
+               build_iovec(&iov, &iovlen, p, NULL, (size_t)-1);
        rv = nmount(iov, iovlen, 0);
-       free(optstr);
+       free(tofree);
        return (rv);
 }
_______________________________________________
svn-src-stable-10@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-stable-10
To unsubscribe, send any mail to "svn-src-stable-10-unsubscr...@freebsd.org"

Reply via email to