Author: kib
Date: Tue Sep 13 20:16:11 2011
New Revision: 225534
URL: http://svn.freebsd.org/changeset/base/225534

Log:
  Do not try to change the mode or ownership of the root of the mountpoint
  when newly established mdmfs mount is readonly.
  
  PR:   bin/128427
  Tested and reviewed by:       jchandra
  MFC after:    1 week
  Approved by:  re (bz)

Modified:
  head/sbin/mdmfs/mdmfs.c

Modified: head/sbin/mdmfs/mdmfs.c
==============================================================================
--- head/sbin/mdmfs/mdmfs.c     Tue Sep 13 15:57:29 2011        (r225533)
+++ head/sbin/mdmfs/mdmfs.c     Tue Sep 13 20:16:11 2011        (r225534)
@@ -35,6 +35,7 @@ __FBSDID("$FreeBSD$");
 
 #include <sys/param.h>
 #include <sys/mdioctl.h>
+#include <sys/mount.h>
 #include <sys/stat.h>
 #include <sys/wait.h>
 
@@ -60,6 +61,7 @@ struct mtpt_info {
        bool             mi_have_gid;
        mode_t           mi_mode;
        bool             mi_have_mode;
+       bool             mi_forced_pw;
 };
 
 static bool debug;             /* Emit debugging information? */
@@ -204,6 +206,7 @@ main(int argc, char **argv)
                                usage();
                        mi.mi_mode = getmode(set, S_IRWXU | S_IRWXG | S_IRWXO);
                        mi.mi_have_mode = true;
+                       mi.mi_forced_pw = true;
                        free(set);
                        break;
                case 'S':
@@ -223,6 +226,7 @@ main(int argc, char **argv)
                        break;
                case 'w':
                        extract_ugid(optarg, &mi);
+                       mi.mi_forced_pw = true;
                        break;
                case 'X':
                        debug = true;
@@ -443,6 +447,29 @@ do_mount(const char *args, const char *m
 static void
 do_mtptsetup(const char *mtpoint, struct mtpt_info *mip)
 {
+       struct statfs sfs;
+
+       if (!mip->mi_have_mode && !mip->mi_have_uid && !mip->mi_have_gid)
+               return;
+
+       if (!norun) {
+               if (statfs(mtpoint, &sfs) == -1) {
+                       warn("statfs: %s", mtpoint);
+                       return;
+               }
+               if ((sfs.f_flags & MNT_RDONLY) != 0) {
+                       if (mip->mi_forced_pw) {
+                               warnx(
+       "Not changing mode/owner of %s since it is read-only",
+                                   mtpoint);
+                       } else {
+                               debugprintf(
+       "Not changing mode/owner of %s since it is read-only",
+                                   mtpoint);
+                       }
+                       return;
+               }
+       }
 
        if (mip->mi_have_mode) {
                debugprintf("changing mode of %s to %o.", mtpoint,
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to