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:
parent
31f301d021
commit
e50e74d8aa
@ -35,6 +35,7 @@ __FBSDID("$FreeBSD$");
|
|||||||
|
|
||||||
#include <sys/param.h>
|
#include <sys/param.h>
|
||||||
#include <sys/mdioctl.h>
|
#include <sys/mdioctl.h>
|
||||||
|
#include <sys/mount.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <sys/wait.h>
|
#include <sys/wait.h>
|
||||||
|
|
||||||
@ -60,6 +61,7 @@ struct mtpt_info {
|
|||||||
bool mi_have_gid;
|
bool mi_have_gid;
|
||||||
mode_t mi_mode;
|
mode_t mi_mode;
|
||||||
bool mi_have_mode;
|
bool mi_have_mode;
|
||||||
|
bool mi_forced_pw;
|
||||||
};
|
};
|
||||||
|
|
||||||
static bool debug; /* Emit debugging information? */
|
static bool debug; /* Emit debugging information? */
|
||||||
@ -204,6 +206,7 @@ main(int argc, char **argv)
|
|||||||
usage();
|
usage();
|
||||||
mi.mi_mode = getmode(set, S_IRWXU | S_IRWXG | S_IRWXO);
|
mi.mi_mode = getmode(set, S_IRWXU | S_IRWXG | S_IRWXO);
|
||||||
mi.mi_have_mode = true;
|
mi.mi_have_mode = true;
|
||||||
|
mi.mi_forced_pw = true;
|
||||||
free(set);
|
free(set);
|
||||||
break;
|
break;
|
||||||
case 'S':
|
case 'S':
|
||||||
@ -223,6 +226,7 @@ main(int argc, char **argv)
|
|||||||
break;
|
break;
|
||||||
case 'w':
|
case 'w':
|
||||||
extract_ugid(optarg, &mi);
|
extract_ugid(optarg, &mi);
|
||||||
|
mi.mi_forced_pw = true;
|
||||||
break;
|
break;
|
||||||
case 'X':
|
case 'X':
|
||||||
debug = true;
|
debug = true;
|
||||||
@ -443,6 +447,29 @@ do_mount(const char *args, const char *mtpoint)
|
|||||||
static void
|
static void
|
||||||
do_mtptsetup(const char *mtpoint, struct mtpt_info *mip)
|
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) {
|
if (mip->mi_have_mode) {
|
||||||
debugprintf("changing mode of %s to %o.", mtpoint,
|
debugprintf("changing mode of %s to %o.", mtpoint,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user