diff options
author | Jordan K. Hubbard <jkh@FreeBSD.org> | 1996-05-16 11:47:46 +0000 |
---|---|---|
committer | Jordan K. Hubbard <jkh@FreeBSD.org> | 1996-05-16 11:47:46 +0000 |
commit | 16185b823ace0574c13c214d2dbf3b2870d2c443 (patch) | |
tree | ad4bc78c2672e660c67bf48d392df7569092418a /usr.sbin/sade/dispatch.c | |
parent | fe85fe95dbeadb34358976e6b9d35c6cbca2541b (diff) | |
download | src-16185b823ace0574c13c214d2dbf3b2870d2c443.tar.gz src-16185b823ace0574c13c214d2dbf3b2870d2c443.zip |
Fix some long-standing malloc bugs in the package handling code (freeing garbage
in one place, leaking memory in another).
Add a facility to invoke subsystems directly by naming them on
sysinstall's command-line when running post-install. A replacement
for pkg_manage might, for example, be `/stand/sysinstall configPackages'
Fix bogon where upgrade shell was entered with tty modes spammed.
Fix bug with release name checking in ftp_strat. Turned a bunch of
bogus exit()s into proper calls to systemShutdown().
Notes
Notes:
svn path=/head/; revision=15788
Diffstat (limited to 'usr.sbin/sade/dispatch.c')
-rw-r--r-- | usr.sbin/sade/dispatch.c | 125 |
1 files changed, 125 insertions, 0 deletions
diff --git a/usr.sbin/sade/dispatch.c b/usr.sbin/sade/dispatch.c new file mode 100644 index 000000000000..886165b8771e --- /dev/null +++ b/usr.sbin/sade/dispatch.c @@ -0,0 +1,125 @@ +/* + * The new sysinstall program. + * + * This is probably the last program in the `sysinstall' line - the next + * generation being essentially a complete rewrite. + * + * $Id$ + * + * Copyright (c) 1995 + * Jordan Hubbard. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer, + * verbatim and that no modifications are made prior to this + * point in the file. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY JORDAN HUBBARD ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL JORDAN HUBBARD OR HIS PETS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, LIFE OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + */ + +#include "sysinstall.h" +#include <ctype.h> + +static struct _word { + char *name; + int (*handler)(dialogMenuItem *self); +} resWords[] = { + { "configAnonFTP", configAnonFTP }, + { "configApache", configApache }, + { "configGated", configGated }, + { "configNFSServer", configNFSServer }, + { "configSamba", configSamba }, + { "configPackages", configPackages }, + { "diskPartitionEditor", diskPartitionEditor }, + { "diskPartitionWrite", diskPartitionWrite }, + { "diskLabelEditor", diskLabelEditor }, + { "diskLabelCommit", diskLabelCommit }, + { "distReset", distReset }, + { "distSetDeveloper", distSetDeveloper }, + { "distSetXDeveloper", distSetXDeveloper }, + { "distSetKernDeveloper", distSetKernDeveloper }, + { "distSetUser", distSetUser }, + { "distSetXUser", distSetXUser }, + { "distSetMinimum", distSetMinimum }, + { "distSetEverything", distSetEverything }, + { "distSetDES", distSetDES }, + { "distSetSrc", distSetSrc }, + { "distSetXF86", distSetXF86 }, + { "distExtractAll", distExtractAll }, + { "docBrowser", docBrowser }, + { "docShowDocument", docShowDocument }, + { "installCommit", installCommit }, + { "installExpress", installExpress }, + { "installUpgrade", installUpgrade }, + { "installFixup", installFixup }, + { "installFilesystems", installFilesystems }, + { "mediaSetCDROM", mediaSetCDROM }, + { "mediaSetFloppy", mediaSetFloppy }, + { "mediaSetDOS", mediaSetDOS }, + { "mediaSetTape", mediaSetTape }, + { "mediaSetFTP", mediaSetFTP }, + { "mediaSetFTPActive", mediaSetFTPActive }, + { "mediaSetFTPPassive", mediaSetFTPPassive }, + { "mediaSetUFS", mediaSetUFS }, + { "mediaSetNFS", mediaSetNFS }, + { "mediaSetFtpUserPass", mediaSetFtpUserPass }, + { "mediaSetCPIOVerbosity", mediaSetCPIOVerbosity }, + { "mediaGetType", mediaGetType }, + { NULL, NULL }, +}; + +static int +call_possible_resword(char *name, dialogMenuItem *value, int *status) +{ + int i, rval; + + rval = 0; + for (i = 0; resWords[i].name; i++) { + if (!strcmp(name, resWords[i].name)) { + *status = resWords[i].handler(value); + rval = 1; + break; + } + } + return rval; +} + +/* For a given string, call it or spit out an undefined command diagnostic */ +int +dispatchCommand(char *str) +{ + int i; + + if (!str || !*str) { + msgConfirm("Null or zero-length string passed to dispatchCommand"); + return DITEM_FAILURE; + } + else if (index(str, '=')) { + variable_set(str); + return DITEM_SUCCESS; + } + else if (!call_possible_resword(str, NULL, &i)) { + msgConfirm("No such command: %s", str); + return DITEM_FAILURE; + } + else if (DITEM_STATUS(i) != DITEM_SUCCESS) + msgConfirm("Command `%s' returned an error status."); + return i; +} |