diff options
author | grog <grog@FreeBSD.org> | 2004-02-17 04:51:06 +0000 |
---|---|---|
committer | grog <grog@FreeBSD.org> | 2004-02-17 04:51:06 +0000 |
commit | 431761e4b895aa32a61980529ad520375dda9797 (patch) | |
tree | acad02cfc84ef8b791bdad06ff1ad7eccf925a7c /sbin | |
parent | d40150894d91f0c9853f4b78a9bc5be0aa8a10c0 (diff) | |
download | FreeBSD-src-431761e4b895aa32a61980529ad520375dda9797.zip FreeBSD-src-431761e4b895aa32a61980529ad520375dda9797.tar.gz |
Recognize if the user supplies the full pathname to /dev/console and friends,
and DTRT.
Explain if he supplies a pathname that is not in /dev.
Diffstat (limited to 'sbin')
-rw-r--r-- | sbin/conscontrol/conscontrol.c | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/sbin/conscontrol/conscontrol.c b/sbin/conscontrol/conscontrol.c index 329a54b..4f4f865 100644 --- a/sbin/conscontrol/conscontrol.c +++ b/sbin/conscontrol/conscontrol.c @@ -37,6 +37,8 @@ __FBSDID("$FreeBSD$"); #include <string.h> #include <unistd.h> +#define DEVDIR "/dev/" + static void __dead2 usage(void) { @@ -96,22 +98,46 @@ consmute(const char *onoff) err(1, "could not change console muting"); } +/* + * The name we supply to the sysctls should be an entry in /dev. If + * the user has specified the full pathname in /dev, DTRT. If he + * specifies a name in some other directory, it's an error. + */ + +static char* +stripdev(char *devnam) +{ + if (memcmp (devnam, DEVDIR, strlen(DEVDIR)) == 0) + return (&devnam[strlen(DEVDIR)]); /* remove /dev */ + else if (strchr (devnam, '/')) { + fprintf(stderr, "Not a device in /dev: %s\n", devnam); + return (NULL); /* end of string */ + } else + return (devnam); /* passed */ +} + static void consadd(char *devnam) { size_t len; + devnam = stripdev(devnam); + if (devnam == NULL) + return; len = strlen(devnam); if (sysctlbyname("kern.console", NULL, NULL, devnam, len) == -1) err(1, "could not add %s as a console", devnam); } static void -consdel(const char *devnam) +consdel(char *devnam) { char *buf; size_t len; + devnam = stripdev(devnam); + if (devnam == NULL) + return; len = strlen(devnam) + sizeof("-"); if ((buf = malloc(len)) == NULL) errx(1, "malloc failed"); |