Date: Sat, 13 Jan 2001 05:00:06 -0800 (PST) From: Samuel Tardieu <sam@inf.enst.fr> To: freebsd-bugs@FreeBSD.org Subject: Re: bin/24271: dumpon should check its argument more Message-ID: <200101131300.f0DD06k24413@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
The following reply was made to PR bin/24271; it has been noted by GNATS.
From: Samuel Tardieu <sam@inf.enst.fr>
To: David Malone <dwmalone@maths.tcd.ie>
Cc: Greg Lehey <grog@lemis.com>, freebsd-bugs@FreeBSD.org
Subject: Re: bin/24271: dumpon should check its argument more
Date: Sat, 13 Jan 2001 13:41:53 +0100
On 13/01, David Malone wrote:
| In tune with the Unix way (providing you with enough rope to shoot
| yourself in the foot) it probably shouldn't check even if it was
| easy to. After all, it's just as easy to accidently dump onto one
| of your filesystems, and there's no way to accidently detect that!
Sure, but even newfs makes some checks before formatting a filesystem.
The following patch adds two things:
- if the special_file indicated is not tagged as swap in /etc/fstab,
then -f must be used; this is consistent with the possibility of
using a shared swap with another system;
- as a bonus, you can now use raw names such as da0s2b instead of
fully qualified names
Documentation and startup scripts changes are also integrated in this patch.
Sam
diff -r -u /usr/src/etc/defaults/rc.conf ./etc/defaults/rc.conf
--- /usr/src/etc/defaults/rc.conf Thu Jan 11 14:00:54 2001
+++ ./etc/defaults/rc.conf Sat Jan 13 13:31:04 2001
@@ -303,6 +303,7 @@
sendmail_enable="NO" # Run the sendmail daemon (YES/NO).
sendmail_flags="-bd -q30m" # Flags to sendmail (if enabled)
dumpdev="NO" # Device name to crashdump to (or NO).
+dumpon_flags="" # Flags to pass to dumpon (if dumpdev set).
enable_quotas="NO" # turn on quotas on startup (or NO).
check_quotas="YES" # Check quotas on startup (or NO).
accounting_enable="NO" # Turn on process accounting (or NO).
diff -r -u /usr/src/etc/rc ./etc/rc
--- /usr/src/etc/rc Thu Jan 11 14:00:41 2001
+++ ./etc/rc Sat Jan 13 13:24:52 2001
@@ -440,7 +440,7 @@
;;
*)
if [ -e "${dumpdev}" -a -d /var/crash ]; then
- dumpon -v ${dumpdev}
+ dumpon ${dumpon_flags} -v ${dumpdev}
echo -n 'Checking for core dump: '
savecore /var/crash
fi
diff -r -u /usr/src/sbin/dumpon/dumpon.8 ./sbin/dumpon/dumpon.8
--- /usr/src/sbin/dumpon/dumpon.8 Thu Dec 14 12:47:12 2000
+++ ./sbin/dumpon/dumpon.8 Sat Jan 13 13:19:17 2001
@@ -40,6 +40,7 @@
.Nd "specify a device for crash dumps"
.Sh SYNOPSIS
.Nm
+.Op Fl f
.Op Fl v
.Ar special_file
.Nm
@@ -61,6 +62,13 @@
.Pp
The size of the specified dump device must be at least 64 KB greater the
size of physical memory.
+.Pp
+The
+.Fl f
+flag is needed when
+.Ar special_file
+is not declared as a swap partition in
+.Pa /etc/fstab .
.Pp
The
.Fl v
diff -r -u /usr/src/sbin/dumpon/dumpon.c ./sbin/dumpon/dumpon.c
--- /usr/src/sbin/dumpon/dumpon.c Mon May 1 21:39:36 2000
+++ ./sbin/dumpon/dumpon.c Sat Jan 13 13:15:59 2001
@@ -52,19 +52,26 @@
#include <sys/sysctl.h>
#include <sys/stat.h>
#include <sysexits.h>
+#include <paths.h>
+#include <string.h>
+#include <fstab.h>
void usage __P((void)) __dead2;
int
main(int argc, char **argv)
{
- int ch, verbose, rv;
+ int ch, verbose, force, rv;
struct stat stab;
int mib[2];
+ char special[MAXPATHLEN];
- verbose = rv = 0;
- while ((ch = getopt(argc, argv, "v")) != -1)
+ verbose = force = rv = 0;
+ while ((ch = getopt(argc, argv, "fv")) != -1)
switch((char)ch) {
+ case 'f':
+ force = 1;
+ break;
case 'v':
verbose = 1;
break;
@@ -78,15 +85,43 @@
usage();
if (strcmp(argv[0], "off")) {
- rv = stat(argv[0], &stab);
+ if (strrchr(argv[0], '/') == 0) {
+ (void)snprintf(special, MAXPATHLEN, "%s%s", _PATH_DEV, argv[0]);
+ } else {
+ strncpy(special, argv[0], MAXPATHLEN);
+ }
+ rv = stat(special, &stab);
if (rv) {
- err(EX_OSFILE, "%s", argv[0]);
+ err(EX_OSFILE, "%s", special);
}
if (!S_ISCHR(stab.st_mode)) {
errx(EX_USAGE,
"%s: must specify a character disk device",
- argv[0]);
+ special);
+ }
+ if (!force) {
+ struct fstab *fsp;
+
+ if (!setfsent ())
+ errx(EX_USAGE,
+ "%s: use -f if %s is not available",
+ special,
+ _PATH_FSTAB);
+ while ((fsp = getfsent()) != NULL) {
+ if (!strcmp(fsp->fs_spec, special)) {
+ if (!strcmp(fsp->fs_type, FSTAB_SW))
+ goto fs_ok;
+ errx(EX_USAGE,
+ "%s: -f required to use a %s partition",
+ special,
+ fsp->fs_vfstype);
+ }
+ }
+ errx(EX_USAGE,
+ "%s: -f required unless using a declared swap partition",
+ special);
+ fs_ok:
}
} else {
stab.st_rdev = NODEV;
@@ -106,7 +141,7 @@
printf("dumpon: crash dumps disabled\n");
} else {
printf("dumpon: crash dumps to %s (%lu, %lu)\n",
- argv[0],
+ special,
(unsigned long)major(stab.st_rdev),
(unsigned long)minor(stab.st_rdev));
}
@@ -119,7 +154,7 @@
usage()
{
fprintf(stderr,
- "usage: dumpon [-v] special_file\n"
+ "usage: dumpon [-f] [-v] special_file\n"
" dumpon [-v] off\n");
exit(EX_USAGE);
}
diff -r -u /usr/src/share/man/man5/rc.conf.5 ./share/man/man5/rc.conf.5
--- /usr/src/share/man/man5/rc.conf.5 Fri Dec 29 10:18:41 2000
+++ ./share/man/man5/rc.conf.5 Sat Jan 13 13:28:19 2001
@@ -1348,6 +1348,12 @@
directory by the
.Xr savecore 8
program.
+.It Ar dumpon_flags
+(str) If
+.Ar dumpdev
+is set, these are the flags to pass to the
+.Xr dumpon 8
+program.
.It Ar check_quotas
(bool) Set to
.Ar YES
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200101131300.f0DD06k24413>
