diff options
-rw-r--r-- | release/sysinstall/dispatch.c | 28 | ||||
-rw-r--r-- | release/sysinstall/main.c | 32 | ||||
-rw-r--r-- | release/sysinstall/variable.c | 11 | ||||
-rw-r--r-- | usr.sbin/sade/dispatch.c | 28 | ||||
-rw-r--r-- | usr.sbin/sade/main.c | 32 | ||||
-rw-r--r-- | usr.sbin/sade/variable.c | 11 | ||||
-rw-r--r-- | usr.sbin/sysinstall/dispatch.c | 28 | ||||
-rw-r--r-- | usr.sbin/sysinstall/main.c | 32 | ||||
-rw-r--r-- | usr.sbin/sysinstall/variable.c | 11 |
9 files changed, 132 insertions, 81 deletions
diff --git a/release/sysinstall/dispatch.c b/release/sysinstall/dispatch.c index a41a724..75f1a52 100644 --- a/release/sysinstall/dispatch.c +++ b/release/sysinstall/dispatch.c @@ -37,6 +37,8 @@ #include "sysinstall.h" #include <ctype.h> +static int _shutdown(dialogMenuItem *unused); + static struct _word { char *name; int (*handler)(dialogMenuItem *self); @@ -85,6 +87,7 @@ static struct _word { { "optionsEditor", optionsEditor }, { "addGroup", userAddGroup }, { "addUser", userAddUser }, + { "shutdown", _shutdown }, { NULL, NULL }, }; @@ -104,6 +107,13 @@ call_possible_resword(char *name, dialogMenuItem *value, int *status) return rval; } +/* Just convenience */ +static int _shutdown(dialogMenuItem *unused) +{ + systemShutdown(0); + return DITEM_FAILURE; +} + /* For a given string, call it or spit out an undefined command diagnostic */ int dispatchCommand(char *str) @@ -115,16 +125,22 @@ dispatchCommand(char *str) msgConfirm("Null or zero-length string passed to dispatchCommand"); return DITEM_FAILURE; } + /* If it's got a newline, trim it */ + if ((cp = index(str, '\n')) != NULL) + *cp = '\0'; + /* A command might be a pathname if it's encoded in argv[0], as we also support */ if (index(str, '=')) { variable_set(str); - return DITEM_SUCCESS; + i = DITEM_SUCCESS; } - else if ((cp = index(str, '/')) != NULL) - str = cp + 1; - if (!call_possible_resword(str, NULL, &i)) { - msgConfirm("No such command: %s", str); - return DITEM_FAILURE; + else { + if ((cp = index(str, '/')) != NULL) + str = cp + 1; + if (!call_possible_resword(str, NULL, &i)) { + msgConfirm("No such command: %s", str); + i = DITEM_FAILURE; + } } return i; } diff --git a/release/sysinstall/main.c b/release/sysinstall/main.c index 36b9a73..fcf9b52 100644 --- a/release/sysinstall/main.c +++ b/release/sysinstall/main.c @@ -116,21 +116,19 @@ main(int argc, char **argv) { FILE *fp; - Attribs *attrs; + char buf[BUFSIZ]; - attrs = alloca(sizeof(Attribs) * MAX_ATTRIBS); fp = fopen("install.cfg", "r"); if (fp) { msgNotify("Loading pre-configuration file"); - if (DITEM_STATUS(attr_parse(attrs, fp)) == DITEM_SUCCESS) { - int i; - - for (i = 0; attrs[i].name; i++) - variable_set2(attrs[i].name, attrs[i].value); + while (fgets(buf, sizeof buf, fp)) { + if (DITEM_STATUS(dispatchCommand(buf)) != DITEM_SUCCESS) { + msgDebug("Command `%s' failed - rest of script aborted.\n", buf); + break; + } } fclose(fp); } - #if defined(LOAD_CONFIG_FILE) else { /* If we have a compiled-in startup config file name on @@ -141,19 +139,15 @@ main(int argc, char **argv) distWanted = (char *)1; /* Try to open the floppy drive if we can do that first */ - if (DITEM_STATUS(mediaSetFloppy(NULL)) != DITEM_FAILURE && - mediaDevice->init(mediaDevice)) { - int fd; - + if (DITEM_STATUS(mediaSetFloppy(NULL)) != DITEM_FAILURE && mediaDevice->init(mediaDevice)) { fp = mediaDevice->get(mediaDevice, LOAD_CONFIG_FILE, TRUE); if (fp) { - msgNotify("Loading %s pre-configuration file", - LOAD_CONFIG_FILE); - if (DITEM_STATUS(attr_parse(attrs, fp)) == DITEM_SUCCESS) { - int i; - - for (i = 0; attrs[i].name; i++) - variable_set2(attrs[i].name, attrs[i].value); + msgNotify("Loading %s pre-configuration file", LOAD_CONFIG_FILE); + while (fgets(buf, sizeof buf, fp)) { + if (DITEM_STATUS(dispatchCommand(buf)) != DITEM_SUCCESS) { + msgDebug("Command `%s' failed - rest of script aborted.\n", buf); + break; + } } fclose(fp); } diff --git a/release/sysinstall/variable.c b/release/sysinstall/variable.c index 8ca79fc..824b0cb 100644 --- a/release/sysinstall/variable.c +++ b/release/sysinstall/variable.c @@ -42,6 +42,13 @@ static void make_variable(char *var, char *value) { Variable *vp; + char *cp; + + /* Trim leading and trailing whitespace */ + var = string_skipwhite(string_prune(var)); + + if (!var || !*var) + return; /* Put it in the environment in any case */ setenv(var, value, 1); @@ -80,7 +87,7 @@ variable_set(char *var) if ((cp = index(tmp, '=')) == NULL) msgFatal("Invalid variable format: %s", var); *(cp++) = '\0'; - make_variable(tmp, cp); + make_variable(tmp, string_skipwhite(cp)); } void @@ -108,7 +115,7 @@ variable_unset(char *var) unsetenv(var); if ((cp = index(var, '=')) != NULL) { sstrncpy(name, cp, cp - var); - var = name; + var = string_skipwhite(string_prune(name)); } /* Now search to see if it's in our list, if we have one.. */ diff --git a/usr.sbin/sade/dispatch.c b/usr.sbin/sade/dispatch.c index a41a724..75f1a52 100644 --- a/usr.sbin/sade/dispatch.c +++ b/usr.sbin/sade/dispatch.c @@ -37,6 +37,8 @@ #include "sysinstall.h" #include <ctype.h> +static int _shutdown(dialogMenuItem *unused); + static struct _word { char *name; int (*handler)(dialogMenuItem *self); @@ -85,6 +87,7 @@ static struct _word { { "optionsEditor", optionsEditor }, { "addGroup", userAddGroup }, { "addUser", userAddUser }, + { "shutdown", _shutdown }, { NULL, NULL }, }; @@ -104,6 +107,13 @@ call_possible_resword(char *name, dialogMenuItem *value, int *status) return rval; } +/* Just convenience */ +static int _shutdown(dialogMenuItem *unused) +{ + systemShutdown(0); + return DITEM_FAILURE; +} + /* For a given string, call it or spit out an undefined command diagnostic */ int dispatchCommand(char *str) @@ -115,16 +125,22 @@ dispatchCommand(char *str) msgConfirm("Null or zero-length string passed to dispatchCommand"); return DITEM_FAILURE; } + /* If it's got a newline, trim it */ + if ((cp = index(str, '\n')) != NULL) + *cp = '\0'; + /* A command might be a pathname if it's encoded in argv[0], as we also support */ if (index(str, '=')) { variable_set(str); - return DITEM_SUCCESS; + i = DITEM_SUCCESS; } - else if ((cp = index(str, '/')) != NULL) - str = cp + 1; - if (!call_possible_resword(str, NULL, &i)) { - msgConfirm("No such command: %s", str); - return DITEM_FAILURE; + else { + if ((cp = index(str, '/')) != NULL) + str = cp + 1; + if (!call_possible_resword(str, NULL, &i)) { + msgConfirm("No such command: %s", str); + i = DITEM_FAILURE; + } } return i; } diff --git a/usr.sbin/sade/main.c b/usr.sbin/sade/main.c index 36b9a73..fcf9b52 100644 --- a/usr.sbin/sade/main.c +++ b/usr.sbin/sade/main.c @@ -116,21 +116,19 @@ main(int argc, char **argv) { FILE *fp; - Attribs *attrs; + char buf[BUFSIZ]; - attrs = alloca(sizeof(Attribs) * MAX_ATTRIBS); fp = fopen("install.cfg", "r"); if (fp) { msgNotify("Loading pre-configuration file"); - if (DITEM_STATUS(attr_parse(attrs, fp)) == DITEM_SUCCESS) { - int i; - - for (i = 0; attrs[i].name; i++) - variable_set2(attrs[i].name, attrs[i].value); + while (fgets(buf, sizeof buf, fp)) { + if (DITEM_STATUS(dispatchCommand(buf)) != DITEM_SUCCESS) { + msgDebug("Command `%s' failed - rest of script aborted.\n", buf); + break; + } } fclose(fp); } - #if defined(LOAD_CONFIG_FILE) else { /* If we have a compiled-in startup config file name on @@ -141,19 +139,15 @@ main(int argc, char **argv) distWanted = (char *)1; /* Try to open the floppy drive if we can do that first */ - if (DITEM_STATUS(mediaSetFloppy(NULL)) != DITEM_FAILURE && - mediaDevice->init(mediaDevice)) { - int fd; - + if (DITEM_STATUS(mediaSetFloppy(NULL)) != DITEM_FAILURE && mediaDevice->init(mediaDevice)) { fp = mediaDevice->get(mediaDevice, LOAD_CONFIG_FILE, TRUE); if (fp) { - msgNotify("Loading %s pre-configuration file", - LOAD_CONFIG_FILE); - if (DITEM_STATUS(attr_parse(attrs, fp)) == DITEM_SUCCESS) { - int i; - - for (i = 0; attrs[i].name; i++) - variable_set2(attrs[i].name, attrs[i].value); + msgNotify("Loading %s pre-configuration file", LOAD_CONFIG_FILE); + while (fgets(buf, sizeof buf, fp)) { + if (DITEM_STATUS(dispatchCommand(buf)) != DITEM_SUCCESS) { + msgDebug("Command `%s' failed - rest of script aborted.\n", buf); + break; + } } fclose(fp); } diff --git a/usr.sbin/sade/variable.c b/usr.sbin/sade/variable.c index 8ca79fc..824b0cb 100644 --- a/usr.sbin/sade/variable.c +++ b/usr.sbin/sade/variable.c @@ -42,6 +42,13 @@ static void make_variable(char *var, char *value) { Variable *vp; + char *cp; + + /* Trim leading and trailing whitespace */ + var = string_skipwhite(string_prune(var)); + + if (!var || !*var) + return; /* Put it in the environment in any case */ setenv(var, value, 1); @@ -80,7 +87,7 @@ variable_set(char *var) if ((cp = index(tmp, '=')) == NULL) msgFatal("Invalid variable format: %s", var); *(cp++) = '\0'; - make_variable(tmp, cp); + make_variable(tmp, string_skipwhite(cp)); } void @@ -108,7 +115,7 @@ variable_unset(char *var) unsetenv(var); if ((cp = index(var, '=')) != NULL) { sstrncpy(name, cp, cp - var); - var = name; + var = string_skipwhite(string_prune(name)); } /* Now search to see if it's in our list, if we have one.. */ diff --git a/usr.sbin/sysinstall/dispatch.c b/usr.sbin/sysinstall/dispatch.c index a41a724..75f1a52 100644 --- a/usr.sbin/sysinstall/dispatch.c +++ b/usr.sbin/sysinstall/dispatch.c @@ -37,6 +37,8 @@ #include "sysinstall.h" #include <ctype.h> +static int _shutdown(dialogMenuItem *unused); + static struct _word { char *name; int (*handler)(dialogMenuItem *self); @@ -85,6 +87,7 @@ static struct _word { { "optionsEditor", optionsEditor }, { "addGroup", userAddGroup }, { "addUser", userAddUser }, + { "shutdown", _shutdown }, { NULL, NULL }, }; @@ -104,6 +107,13 @@ call_possible_resword(char *name, dialogMenuItem *value, int *status) return rval; } +/* Just convenience */ +static int _shutdown(dialogMenuItem *unused) +{ + systemShutdown(0); + return DITEM_FAILURE; +} + /* For a given string, call it or spit out an undefined command diagnostic */ int dispatchCommand(char *str) @@ -115,16 +125,22 @@ dispatchCommand(char *str) msgConfirm("Null or zero-length string passed to dispatchCommand"); return DITEM_FAILURE; } + /* If it's got a newline, trim it */ + if ((cp = index(str, '\n')) != NULL) + *cp = '\0'; + /* A command might be a pathname if it's encoded in argv[0], as we also support */ if (index(str, '=')) { variable_set(str); - return DITEM_SUCCESS; + i = DITEM_SUCCESS; } - else if ((cp = index(str, '/')) != NULL) - str = cp + 1; - if (!call_possible_resword(str, NULL, &i)) { - msgConfirm("No such command: %s", str); - return DITEM_FAILURE; + else { + if ((cp = index(str, '/')) != NULL) + str = cp + 1; + if (!call_possible_resword(str, NULL, &i)) { + msgConfirm("No such command: %s", str); + i = DITEM_FAILURE; + } } return i; } diff --git a/usr.sbin/sysinstall/main.c b/usr.sbin/sysinstall/main.c index 36b9a73..fcf9b52 100644 --- a/usr.sbin/sysinstall/main.c +++ b/usr.sbin/sysinstall/main.c @@ -116,21 +116,19 @@ main(int argc, char **argv) { FILE *fp; - Attribs *attrs; + char buf[BUFSIZ]; - attrs = alloca(sizeof(Attribs) * MAX_ATTRIBS); fp = fopen("install.cfg", "r"); if (fp) { msgNotify("Loading pre-configuration file"); - if (DITEM_STATUS(attr_parse(attrs, fp)) == DITEM_SUCCESS) { - int i; - - for (i = 0; attrs[i].name; i++) - variable_set2(attrs[i].name, attrs[i].value); + while (fgets(buf, sizeof buf, fp)) { + if (DITEM_STATUS(dispatchCommand(buf)) != DITEM_SUCCESS) { + msgDebug("Command `%s' failed - rest of script aborted.\n", buf); + break; + } } fclose(fp); } - #if defined(LOAD_CONFIG_FILE) else { /* If we have a compiled-in startup config file name on @@ -141,19 +139,15 @@ main(int argc, char **argv) distWanted = (char *)1; /* Try to open the floppy drive if we can do that first */ - if (DITEM_STATUS(mediaSetFloppy(NULL)) != DITEM_FAILURE && - mediaDevice->init(mediaDevice)) { - int fd; - + if (DITEM_STATUS(mediaSetFloppy(NULL)) != DITEM_FAILURE && mediaDevice->init(mediaDevice)) { fp = mediaDevice->get(mediaDevice, LOAD_CONFIG_FILE, TRUE); if (fp) { - msgNotify("Loading %s pre-configuration file", - LOAD_CONFIG_FILE); - if (DITEM_STATUS(attr_parse(attrs, fp)) == DITEM_SUCCESS) { - int i; - - for (i = 0; attrs[i].name; i++) - variable_set2(attrs[i].name, attrs[i].value); + msgNotify("Loading %s pre-configuration file", LOAD_CONFIG_FILE); + while (fgets(buf, sizeof buf, fp)) { + if (DITEM_STATUS(dispatchCommand(buf)) != DITEM_SUCCESS) { + msgDebug("Command `%s' failed - rest of script aborted.\n", buf); + break; + } } fclose(fp); } diff --git a/usr.sbin/sysinstall/variable.c b/usr.sbin/sysinstall/variable.c index 8ca79fc..824b0cb 100644 --- a/usr.sbin/sysinstall/variable.c +++ b/usr.sbin/sysinstall/variable.c @@ -42,6 +42,13 @@ static void make_variable(char *var, char *value) { Variable *vp; + char *cp; + + /* Trim leading and trailing whitespace */ + var = string_skipwhite(string_prune(var)); + + if (!var || !*var) + return; /* Put it in the environment in any case */ setenv(var, value, 1); @@ -80,7 +87,7 @@ variable_set(char *var) if ((cp = index(tmp, '=')) == NULL) msgFatal("Invalid variable format: %s", var); *(cp++) = '\0'; - make_variable(tmp, cp); + make_variable(tmp, string_skipwhite(cp)); } void @@ -108,7 +115,7 @@ variable_unset(char *var) unsetenv(var); if ((cp = index(var, '=')) != NULL) { sstrncpy(name, cp, cp - var); - var = name; + var = string_skipwhite(string_prune(name)); } /* Now search to see if it's in our list, if we have one.. */ |