aboutsummaryrefslogtreecommitdiff
path: root/sbin
diff options
context:
space:
mode:
authorMarius Strobl <marius@FreeBSD.org>2014-05-06 16:29:02 +0000
committerMarius Strobl <marius@FreeBSD.org>2014-05-06 16:29:02 +0000
commit7beff0890ae42eb4b8e552a4b27e356bd34b7e0b (patch)
tree5c26f6a5cbbf1cf388d143c87cedfd14ca37bce5 /sbin
parentdd581d4b74727b057f6f9f5da7f08a735f7d4d9e (diff)
downloadsrc-7beff0890ae42eb4b8e552a4b27e356bd34b7e0b.tar.gz
src-7beff0890ae42eb4b8e552a4b27e356bd34b7e0b.zip
- Allow foot shooting with the resetconfig command via the -f option.
- Fix typos preventing -f to actually work with the create command. - Initialize flags to zero rather than using stack garbage when handling the grow command. MFC after: 3 days Sponsored by: Bally Wulff Games & Entertainment GmbH
Notes
Notes: svn path=/head/; revision=265454
Diffstat (limited to 'sbin')
-rw-r--r--sbin/gvinum/gvinum.84
-rw-r--r--sbin/gvinum/gvinum.c53
2 files changed, 36 insertions, 21 deletions
diff --git a/sbin/gvinum/gvinum.8 b/sbin/gvinum/gvinum.8
index d1d10d7214dd..703a81056f70 100644
--- a/sbin/gvinum/gvinum.8
+++ b/sbin/gvinum/gvinum.8
@@ -28,7 +28,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd October 1, 2013
+.Dd May 6, 2014
.Dt GVINUM 8
.Os
.Sh NAME
@@ -168,7 +168,7 @@ the beginning of the plex if the
.Fl f
flag is specified, or otherwise at the location of the parity check pointer.
All subdisks in the plex must be up for a parity check.
-.It Ic resetconfig
+.It Ic resetconfig Oo Fl f Oc
Reset the complete
.Nm
configuration.
diff --git a/sbin/gvinum/gvinum.c b/sbin/gvinum/gvinum.c
index 7033b63bb4af..278a2681d198 100644
--- a/sbin/gvinum/gvinum.c
+++ b/sbin/gvinum/gvinum.c
@@ -71,7 +71,7 @@ void gvinum_parityop(int, char **, int);
void gvinum_printconfig(int, char **);
void gvinum_raid5(int, char **);
void gvinum_rename(int, char **);
-void gvinum_resetconfig(void);
+void gvinum_resetconfig(int, char **);
void gvinum_rm(int, char **);
void gvinum_saveconfig(void);
void gvinum_setstate(int, char **);
@@ -193,8 +193,8 @@ gvinum_create(int argc, char **argv)
flags |= GV_FLAG_F;
/* Else it must be a file. */
} else {
- if ((tmp = fopen(argv[1], "r")) == NULL) {
- warn("can't open '%s' for reading", argv[1]);
+ if ((tmp = fopen(argv[i], "r")) == NULL) {
+ warn("can't open '%s' for reading", argv[i]);
return;
}
}
@@ -723,7 +723,7 @@ gvinum_help(void)
" Change the name of the specified object.\n"
"rebuildparity plex [-f]\n"
" Rebuild the parity blocks of a RAID-5 plex.\n"
- "resetconfig\n"
+ "resetconfig [-f]\n"
" Reset the complete gvinum configuration\n"
"rm [-r] [-f] volume | plex | subdisk | drive\n"
" Remove an object.\n"
@@ -1102,26 +1102,40 @@ gvinum_rm(int argc, char **argv)
}
void
-gvinum_resetconfig(void)
+gvinum_resetconfig(int argc, char **argv)
{
struct gctl_req *req;
const char *errstr;
char reply[32];
+ int flags, i;
- if (!isatty(STDIN_FILENO)) {
- warn("Please enter this command from a tty device\n");
- return;
+ flags = 0;
+ while ((i = getopt(argc, argv, "f")) != -1) {
+ switch (i) {
+ case 'f':
+ flags |= GV_FLAG_F;
+ break;
+ default:
+ warn("invalid flag: %c", i);
+ return;
+ }
}
- printf(" WARNING! This command will completely wipe out your gvinum"
- "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")) {
- printf("\n No change\n");
- return;
+ if ((flags & GV_FLAG_F) == 0) {
+ if (!isatty(STDIN_FILENO)) {
+ warn("Please enter this command from a tty device\n");
+ return;
+ }
+ printf(" WARNING! This command will completely wipe out"
+ " your gvinum 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")) {
+ printf("\n No change\n");
+ return;
+ }
}
req = gctl_get_handle();
gctl_ro_param(req, "class", -1, "VINUM");
@@ -1262,6 +1276,7 @@ gvinum_grow(int argc, char **argv)
const char *errstr;
int drives, volumes, plexes, subdisks, flags;
+ flags = 0;
drives = volumes = plexes = subdisks = 0;
if (argc < 3) {
warnx("usage:\tgrow plex drive\n");
@@ -1372,7 +1387,7 @@ parseline(int argc, char **argv)
else if (!strcmp(argv[0], "rename"))
gvinum_rename(argc, argv);
else if (!strcmp(argv[0], "resetconfig"))
- gvinum_resetconfig();
+ gvinum_resetconfig(argc, argv);
else if (!strcmp(argv[0], "rm"))
gvinum_rm(argc, argv);
else if (!strcmp(argv[0], "saveconfig"))