Author: brooks
Date: Wed Dec 21 22:53:10 2016
New Revision: 310377
URL: https://svnweb.freebsd.org/changeset/base/310377
Log:
  MFC r310088, r310090, r310095
  
  r310088:
  Put the undocumented df feature of mounting filesystems from device
  nodes
  under an ifdef.  Leave enabled.
  
  Reviewed by:  cem
  Sponsored by: DARPA, AFRL
  Differential Revision:        https://reviews.freebsd.org/D8513
  
  r310090:
  Mount filesystems without executable permissions since they should never
  be used.
  
  Reviewed by:  cem
  Sponsored by: DARPA, AFRL
  Differential Revision:        https://reviews.freebsd.org/D8513
  
  r310095:
  Use nmount(2) rather than the obsolete mount(2).
  
  Reviewed by:  cem
  Sponsored by: DARPA, AFRL
  Differential Revision:        https://reviews.freebsd.org/D8513

Modified:
  stable/11/bin/df/Makefile
  stable/11/bin/df/df.c
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/bin/df/Makefile
==============================================================================
--- stable/11/bin/df/Makefile   Wed Dec 21 22:47:10 2016        (r310376)
+++ stable/11/bin/df/Makefile   Wed Dec 21 22:53:10 2016        (r310377)
@@ -10,6 +10,9 @@ SRCS= df.c vfslist.c
 
 CFLAGS+= -I${MOUNT}
 
+CFLAGS+= -DMOUNT_CHAR_DEVS
+SRCS+= getmntopts.c
+
 LIBADD=        xo util
 
 .include <bsd.prog.mk>

Modified: stable/11/bin/df/df.c
==============================================================================
--- stable/11/bin/df/df.c       Wed Dec 21 22:47:10 2016        (r310376)
+++ stable/11/bin/df/df.c       Wed Dec 21 22:53:10 2016        (r310377)
@@ -50,10 +50,15 @@ __FBSDID("$FreeBSD$");
 #include <sys/stat.h>
 #include <sys/mount.h>
 #include <sys/sysctl.h>
+#ifdef MOUNT_CHAR_DEVS
 #include <ufs/ufs/ufsmount.h>
+#endif
 #include <err.h>
 #include <libutil.h>
 #include <locale.h>
+#ifdef MOUNT_CHAR_DEVS
+#include <mntopts.h>
+#endif
 #include <stdint.h>
 #include <stdio.h>
 #include <stdlib.h>
@@ -98,7 +103,9 @@ imax(int a, int b)
 
 static int     aflag = 0, cflag, hflag, iflag, kflag, lflag = 0, nflag, Tflag;
 static int     thousands;
+#ifdef MOUNT_CHAR_DEVS
 static struct  ufs_args mdev;
+#endif
 
 int
 main(int argc, char *argv[])
@@ -107,11 +114,21 @@ main(int argc, char *argv[])
        struct statfs statfsbuf, totalbuf;
        struct maxwidths maxwidths;
        struct statfs *mntbuf;
+#ifdef MOUNT_CHAR_DEVS
+       struct iovec *iov = NULL;
+#endif
        const char *fstype;
-       char *mntpath, *mntpt;
+#ifdef MOUNT_CHAR_DEVS
+       char *mntpath;
+       char errmsg[255] = {0};
+#endif
+       char *mntpt;
        const char **vfslist;
        int i, mntsize;
        int ch, rv;
+#ifdef MOUNT_CHAR_DEVS
+       int iovlen = 0;
+#endif
 
        fstype = "ufs";
        (void)setlocale(LC_ALL, "");
@@ -224,6 +241,7 @@ main(int argc, char *argv[])
                                rv = 1;
                                continue;
                        }
+#ifdef MOUNT_CHAR_DEVS
                } else if (S_ISCHR(stbuf.st_mode)) {
                        if ((mntpt = getmntpt(*argv)) == NULL) {
                                mdev.fspec = *argv;
@@ -240,9 +258,23 @@ main(int argc, char *argv[])
                                        free(mntpath);
                                        continue;
                                }
-                               if (mount(fstype, mntpt, MNT_RDONLY,
-                                   &mdev) != 0) {
-                                       xo_warn("%s", *argv);
+                               if (iov != NULL)
+                                       free_iovec(&iov, &iovlen);
+                               build_iovec_argf(&iov, &iovlen, "fstype", "%s",
+                                   fstype);
+                               build_iovec_argf(&iov, &iovlen, "fspath", "%s",
+                                   mntpath);
+                               build_iovec_argf(&iov, &iovlen, "from", "%s",
+                                   *argv);
+                               build_iovec(&iov, &iovlen, "errmsg", errmsg,
+                                   sizeof(errmsg));
+                               if (nmount(iov, iovlen,
+                                   MNT_RDONLY|MNT_NOEXEC) < 0) {
+                                       if (errmsg[0])
+                                               xo_warn("%s: %s", *argv,
+                                                   errmsg);
+                                       else
+                                               xo_warn("%s", *argv);
                                        rv = 1;
                                        (void)rmdir(mntpt);
                                        free(mntpath);
@@ -261,6 +293,7 @@ main(int argc, char *argv[])
                                free(mntpath);
                                continue;
                        }
+#endif
                } else
                        mntpt = *argv;
 
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to