summaryrefslogtreecommitdiffstats
path: root/sbin
diff options
context:
space:
mode:
authorsthen <sthen@openbsd.org>2020-05-19 12:48:54 +0000
committersthen <sthen@openbsd.org>2020-05-19 12:48:54 +0000
commitd9f8d601d9bbdf87fa63772e5d20cda331308c02 (patch)
tree90325c40d72124344825422084874a24beff7ef3 /sbin
parentAdd -groups test for s_server and s_client in appstest.sh (diff)
downloadwireguard-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.c20
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);