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)
This commit is contained in:
Konstantin Belousov 2011-09-13 20:16:11 +00:00
parent 31f301d021
commit e50e74d8aa

View File

@ -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 *mtpoint)
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,