summaryrefslogtreecommitdiffstats
path: root/sbin
diff options
context:
space:
mode:
authorgrog <grog@FreeBSD.org>2003-05-01 01:39:49 +0000
committergrog <grog@FreeBSD.org>2003-05-01 01:39:49 +0000
commitf8a75224c1b5773eeb8a61006f1c7c53faf42bdf (patch)
tree131399a175e1699981abd9a748462580a7bd9f36 /sbin
parenta2e7e1d3dd76ebf20914b6425424ed9b58bd826a (diff)
downloadFreeBSD-src-f8a75224c1b5773eeb8a61006f1c7c53faf42bdf.zip
FreeBSD-src-f8a75224c1b5773eeb8a61006f1c7c53faf42bdf.tar.gz
Move most #includes to vext.h.
Change name of history file to History to avoid name conflicts. Don't try to make devices unless devfs has been removed. Don't accept resetconfig command from a file. Abused by: Jens Schweikhardt <schweikh@schweikhardt.net> Remove dead code (#if 0) vinum_mirror: Don't try to create mirrors with 0 drives. Found by: mismatch between enum kw in two different files.
Diffstat (limited to 'sbin')
-rw-r--r--sbin/vinum/commands.c95
1 files changed, 38 insertions, 57 deletions
diff --git a/sbin/vinum/commands.c b/sbin/vinum/commands.c
index 8510870..68f8f79 100644
--- a/sbin/vinum/commands.c
+++ b/sbin/vinum/commands.c
@@ -36,31 +36,11 @@
* otherwise) arising in any way out of the use of this software, even if
* advised of the possibility of such damage.
*
- * $Id: commands.c,v 1.15 2001/05/22 08:40:21 grog Exp grog $
+ * $Id: commands.c,v 1.22 2003/04/28 06:19:06 grog Exp $
* $FreeBSD$
*/
-#include <ctype.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <sys/mman.h>
-#include <netdb.h>
-#include <paths.h>
-#include <setjmp.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <syslog.h>
-#include <unistd.h>
-#include <sys/ioctl.h>
#include "vext.h"
-#include <sys/types.h>
-#include <sys/linker.h>
-#include <sys/module.h>
-#include <sys/resource.h>
-#include <sys/wait.h>
-#include <readline/history.h>
-#include <readline/readline.h>
#include <devstat.h>
static void dorename(struct vinum_rename_msg *msg, const char *oldname, const char *name, int maxlen);
@@ -122,8 +102,8 @@ vinum_create(int argc, char *argv[], char *arg0[])
char *configline;
configline = fgets(buffer, BUFSIZE, dfd);
- if (history)
- fprintf(history, "%s", buffer);
+ if (History)
+ fprintf(History, "%s", buffer);
if (configline == NULL) {
if (ferror(dfd))
@@ -268,6 +248,9 @@ vinum_rm(int argc, char *argv[], char *arg0[])
}
}
checkupdates(); /* make sure we're updating */
+ /* Arguably we should be cleverer about this. */
+ if (no_devfs)
+ make_devices();
}
}
@@ -277,28 +260,31 @@ vinum_resetconfig(int argc, char *argv[], char *arg0[])
char reply[32];
int error;
- printf(" WARNING! This command will completely wipe out your vinum configuration.\n"
- " All data will be lost. If you really want to do this, enter the text\n\n"
- " NO FUTURE\n"
- " Enter text -> ");
- fgets(reply, sizeof(reply), stdin);
- if (strcmp(reply, "NO FUTURE\n")) /* changed his mind */
- printf("\n No change\n");
- else {
- error = ioctl(superdev, VINUM_RESETCONFIG, NULL); /* trash config on disk */
- if (error) {
- if (errno == EBUSY)
- fprintf(stderr, "Can't reset configuration: objects are in use\n");
- else
- perror("Can't find vinum config");
- } else {
- if (no_devfs)
- make_devices(); /* recreate the /dev/vinum hierarchy */
- printf("\b Vinum configuration obliterated\n");
- start_daemon(); /* then restart the daemon */
+ if (isatty(STDIN_FILENO)) {
+ printf(" WARNING! This command will completely wipe out your vinum configuration.\n"
+ " All data will be lost. If you really want to do this, enter the text\n\n"
+ " NO FUTURE\n"
+ " Enter text -> ");
+ fgets(reply, sizeof(reply), stdin);
+ if (strcmp(reply, "NO FUTURE\n")) /* changed his mind */
+ printf("\n No change\n");
+ else {
+ error = ioctl(superdev, VINUM_RESETCONFIG, NULL); /* trash config on disk */
+ if (error) {
+ if (errno == EBUSY)
+ fprintf(stderr, "Can't reset configuration: objects are in use\n");
+ else
+ perror("Can't find vinum config");
+ } else {
+ if (no_devfs)
+ make_devices(); /* recreate the /dev/vinum hierarchy */
+ printf("\b Vinum configuration obliterated\n");
+ start_daemon(); /* then restart the daemon */
+ }
}
- }
- checkupdates(); /* make sure we're updating */
+ checkupdates(); /* make sure we're updating */
+ } else
+ fprintf(stderr, "Please enter this command from a terminal\n");
}
/* Initialize subdisks */
@@ -310,8 +296,8 @@ vinum_init(int argc, char *argv[], char *arg0[])
int objno;
enum objecttype type; /* type returned */
- if (history)
- fflush(history); /* don't let all the kids do it. */
+ if (History)
+ fflush(History); /* don't let all the kids do it. */
for (objindex = 0; objindex < argc; objindex++) {
objno = find_object(argv[objindex], &type); /* find the object */
if (objno < 0)
@@ -399,13 +385,6 @@ initplex(int plexno, char *name)
}
}
if (failed == 0) {
-#if 0
- message->index = plexno; /* pass object number */
- message->type = plex_object; /* and type of object */
- message->state = object_up;
- message->force = 1; /* insist */
- ioctl(superdev, VINUM_SETSTATE, message);
-#endif
syslog(LOG_INFO | LOG_KERN, "plex %s initialized", plex.name);
} else
syslog(LOG_ERR | LOG_KERN, "couldn't initialize plex %s, %d processes died",
@@ -545,10 +524,11 @@ vinum_start(int argc, char *argv[], char *arg0[])
for (i = 0; i < devs; i++) {
struct devstat *stat = &statinfo.dinfo->devices[i];
+ /* Submitted by Pete Carah <pete@ns.altadena.net> */
if ((((stat->device_type & DEVSTAT_TYPE_MASK) == DEVSTAT_TYPE_DIRECT) /* disk device */
- || ((stat->device_type & DEVSTAT_TYPE_MASK) == DEVSTAT_TYPE_STORARRAY)) /* storage array */
- &&((stat->device_type & DEVSTAT_TYPE_PASS) == 0) /* and not passthrough */
- &&((stat->device_name[0] != '\0'))) { /* and it has a name */
+ ||((stat->device_type & DEVSTAT_TYPE_MASK) == DEVSTAT_TYPE_STORARRAY)) /* storage array */
+ &&((stat->device_type & DEVSTAT_TYPE_PASS) == 0) /* and not passthrough */
+ &&((stat->device_name[0] != '\0'))) { /* and it has a name */
sprintf(enamelist, _PATH_DEV "%s%d", stat->device_name, stat->unit_number);
token[tokens] = enamelist; /* point to it */
tokens++; /* one more token */
@@ -2098,7 +2078,8 @@ vinum_mirror(int argc, char *argv[], char *argv0[])
/*
* First, check our drives.
*/
- if (argc & 1) {
+ if ((argc < 2)
+ || (argc & 1)) {
fprintf(stderr, "You need an even number of drives to create a mirrored volume\n");
return;
}
OpenPOWER on IntegriCloud