Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 13 Sep 2011 20:16:11 +0000 (UTC)
From:      Konstantin Belousov <kib@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r225534 - head/sbin/mdmfs
Message-ID:  <201109132016.p8DKGB2T094849@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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,



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201109132016.p8DKGB2T094849>