svn commit: r225692 - stable/8/sbin/mdmfs

Konstantin Belousov kib at FreeBSD.org
Tue Sep 20 08:34:15 UTC 2011


Author: kib
Date: Tue Sep 20 08:34:15 2011
New Revision: 225692
URL: http://svn.freebsd.org/changeset/base/225692

Log:
  MFC r225534:
  Do not try to change the mode or ownership of the root of the mountpoint
  when newly established mdmfs mount is readonly.

Modified:
  stable/8/sbin/mdmfs/mdmfs.c
Directory Properties:
  stable/8/sbin/mdmfs/   (props changed)

Modified: stable/8/sbin/mdmfs/mdmfs.c
==============================================================================
--- stable/8/sbin/mdmfs/mdmfs.c	Tue Sep 20 08:11:07 2011	(r225691)
+++ stable/8/sbin/mdmfs/mdmfs.c	Tue Sep 20 08:34:15 2011	(r225692)
@@ -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,


More information about the svn-src-all mailing list