diff options
-rw-r--r-- | sbin/newfs/newfs.8 | 10 | ||||
-rw-r--r-- | sbin/newfs/newfs.c | 33 | ||||
-rw-r--r-- | sbin/newfs/pathnames.h | 3 |
3 files changed, 35 insertions, 11 deletions
diff --git a/sbin/newfs/newfs.8 b/sbin/newfs/newfs.8 index 0f39fae0c5b..963c8162312 100644 --- a/sbin/newfs/newfs.8 +++ b/sbin/newfs/newfs.8 @@ -1,4 +1,4 @@ -.\" $OpenBSD: newfs.8,v 1.37 2004/06/26 18:21:36 otto Exp $ +.\" $OpenBSD: newfs.8,v 1.38 2004/07/02 15:48:35 otto Exp $ .\" $NetBSD: newfs.8,v 1.12 1995/03/18 14:58:41 cgd Exp $ .\" .\" Copyright (c) 1983, 1987, 1991, 1993, 1994 @@ -316,6 +316,14 @@ If the .Fl P Ar file option is not used, the owner and mode of the created mfs file system will be the same as the owner and mode of the mount point. +.Sh ENVIRONMENT +.Bl -tag -width TMPDIR +.It Ev TMPDIR +Directory in which to create temporary mount points for use by +.Nm mount_mfs Fl P +instead of +.Pa /tmp . +.El .Sh SEE ALSO .Xr disktab 5 , .Xr fs 5 , diff --git a/sbin/newfs/newfs.c b/sbin/newfs/newfs.c index 2994674bc24..1209d60e8e3 100644 --- a/sbin/newfs/newfs.c +++ b/sbin/newfs/newfs.c @@ -1,4 +1,4 @@ -/* $OpenBSD: newfs.c,v 1.48 2004/06/26 18:21:36 otto Exp $ */ +/* $OpenBSD: newfs.c,v 1.49 2004/07/02 15:48:36 otto Exp $ */ /* $NetBSD: newfs.c,v 1.20 1996/05/16 07:13:03 thorpej Exp $ */ /* @@ -40,7 +40,7 @@ static char copyright[] = #if 0 static char sccsid[] = "@(#)newfs.c 8.8 (Berkeley) 4/18/94"; #else -static char rcsid[] = "$OpenBSD: newfs.c,v 1.48 2004/06/26 18:21:36 otto Exp $"; +static char rcsid[] = "$OpenBSD: newfs.c,v 1.49 2004/07/02 15:48:36 otto Exp $"; #endif #endif /* not lint */ @@ -959,19 +959,34 @@ copy(char *src, char *dst) static int gettmpmnt(char *mountpoint, size_t len) { + const char *tmp; + const char *mnt = _PATH_MNT; struct statfs fs; + size_t n; - if (statfs("/tmp", &fs) != 0) - err(1, "statfs /tmp"); + tmp = getenv("TMPDIR"); + if (tmp == NULL || *tmp == '\0') + tmp = _PATH_TMP; + + if (statfs(tmp, &fs) != 0) + err(1, "statfs %s", tmp); if (fs.f_flags & MNT_RDONLY) { - if (statfs("/mnt", &fs) != 0) - err(1, "statfs /mnt"); + if (statfs(mnt, &fs) != 0) + err(1, "statfs %s", mnt); if (strcmp(fs.f_mntonname, "/") != 0) - errx(1, "temp mountpoint /mnt busy"); - strlcpy(mountpoint, "/mnt", len); + errx(1, "tmp mountpoint %s busy", mnt); + if (strlcpy(mountpoint, mnt, len) >= len) + errx(1, "tmp mountpoint %s too long", mnt); return (0); } - strlcpy(mountpoint, "/tmp/mntXXXXXXXXXXX", len); + n = strlcpy(mountpoint, tmp, len); + if (n >= len) + errx(1, "tmp mount point too long"); + if (mountpoint[n - 1] != '/') + strlcat(mountpoint, "/", len); + n = strlcat(mountpoint, "mntXXXXXXXXXX", len); + if (n >= len) + errx(1, "tmp mount point too long"); if (mkdtemp(mountpoint) == NULL) err(1, "mkdtemp %s", mountpoint); return (1); diff --git a/sbin/newfs/pathnames.h b/sbin/newfs/pathnames.h index 86ca8484504..27f99496800 100644 --- a/sbin/newfs/pathnames.h +++ b/sbin/newfs/pathnames.h @@ -1,4 +1,4 @@ -/* $OpenBSD: pathnames.h,v 1.1 1996/12/04 08:38:59 deraadt Exp $ */ +/* $OpenBSD: pathnames.h,v 1.2 2004/07/02 15:48:36 otto Exp $ */ /* $NetBSD: pathnames.h,v 1.1 1996/09/11 20:27:15 christos Exp $ */ /* @@ -32,3 +32,4 @@ #define _PATH_SBIN "/sbin" #define _PATH_USRSBIN "/usr/sbin" +#define _PATH_MNT "/mnt" |