diff options
author | sthen <sthen@openbsd.org> | 2020-05-19 12:48:54 +0000 |
---|---|---|
committer | sthen <sthen@openbsd.org> | 2020-05-19 12:48:54 +0000 |
commit | d9f8d601d9bbdf87fa63772e5d20cda331308c02 (patch) | |
tree | 90325c40d72124344825422084874a24beff7ef3 /sbin | |
parent | Add -groups test for s_server and s_client in appstest.sh (diff) | |
download | wireguard-openbsd-d9f8d601d9bbdf87fa63772e5d20cda331308c02.tar.xz wireguard-openbsd-d9f8d601d9bbdf87fa63772e5d20cda331308c02.zip |
Copy ownership/permissions from the mountpoint to FFS2 MFS, as already done
for FFS1 MFS. Problem reported by Mark Patruck and Andreas Kusalananda Kahari.
ok otto@
Diffstat (limited to 'sbin')
-rw-r--r-- | sbin/newfs/mkfs.c | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/sbin/newfs/mkfs.c b/sbin/newfs/mkfs.c index ed5f9c9ca87..a3fce62a384 100644 --- a/sbin/newfs/mkfs.c +++ b/sbin/newfs/mkfs.c @@ -1,4 +1,4 @@ -/* $OpenBSD: mkfs.c,v 1.98 2019/07/03 03:24:02 deraadt Exp $ */ +/* $OpenBSD: mkfs.c,v 1.99 2020/05/19 12:48:54 sthen Exp $ */ /* $NetBSD: mkfs.c,v 1.25 1995/06/18 21:35:38 cgd Exp $ */ /* @@ -134,7 +134,7 @@ static int ilog2(int); void initcg(int, time_t); void wtfs(daddr_t, int, void *); int fsinit1(time_t, mode_t, uid_t, gid_t); -int fsinit2(time_t); +int fsinit2(time_t, mode_t, uid_t, gid_t); int makedir(struct direct *, int); void iput(union dinode *, ino_t); void setblock(struct fs *, unsigned char *, int); @@ -590,7 +590,7 @@ mkfs(struct partition *pp, char *fsys, int fi, int fo, mode_t mfsmode, sblock.fs_ffs1_cstotal.cs_nifree = sblock.fs_cstotal.cs_nifree; sblock.fs_ffs1_cstotal.cs_nffree = sblock.fs_cstotal.cs_nffree; } else { - if (fsinit2(utime)) + if (fsinit2(utime, mfsmode, mfsuid, mfsgid)) errx(32, "fsinit2 failed"); } @@ -841,7 +841,7 @@ fsinit1(time_t utime, mode_t mfsmode, uid_t mfsuid, gid_t mfsgid) } int -fsinit2(time_t utime) +fsinit2(time_t utime, mode_t mfsmode, uid_t mfsuid, gid_t mfsgid) { union dinode node; @@ -856,9 +856,15 @@ fsinit2(time_t utime) /* * Create the root directory. */ - node.dp2.di_mode = IFDIR | UMASK; - node.dp2.di_uid = geteuid(); - node.dp2.di_gid = getegid(); + if (mfs) { + node.dp2.di_mode = IFDIR | mfsmode; + node.dp2.di_uid = mfsuid; + node.dp2.di_gid = mfsgid; + } else { + node.dp2.di_mode = IFDIR | UMASK; + node.dp2.di_uid = geteuid(); + node.dp2.di_gid = getegid(); + } node.dp2.di_nlink = PREDEFDIR; node.dp2.di_size = makedir(root_dir, PREDEFDIR); |