int main(void) { /* Sanity check cases that don't need to ignore parameters. */ fail_unless(testconfig("parameter=5")); fail_unless(testconfig("parameter=5\n" "section mysection {\n" "\tsection_parameter=1\n" "}")); /* Ignore each type (no lists) */ fail_unless(testconfig("unknown_int=1")); fail_unless(testconfig("unknown_string=\"hello\"")); fail_unless(testconfig("unknown_float=1.1")); fail_unless(testconfig("unknown_bool=true")); /* Ignore multiple parameters */ fail_unless(testconfig("unknown_one=1\n" "unknown_two=2\n" "unknown_three=3\n")); /* Test ignore parameters in a section */ fail_unless(testconfig("section mysection {\n" "\tunknown_section_parameter=1\n" "}")); return 0; }
static void mapinit(char *mapfile) { int nf; char *ln; char *fields[2]; Biobuf *bp; Map *map; if (mapfile == nil) return; bp = Bopen(mapfile, OREAD); if (bp == nil) sysfatal("can't read %s", mapfile); devmap = nil; while ((ln = Brdline(bp, '\n')) != nil) { ln[Blinelen(bp)-1] = '\0'; if (*ln == '\0' || *ln == '#') continue; nf = tokenize(ln, fields, nelem(fields)); if (nf != 2) continue; if(testconfig(fields[0]) != 0) { print("bad `from' device %s in %s\n", fields[0], mapfile); continue; } map = malloc(sizeof *map); map->from = strdup(fields[0]); map->to = strdup(fields[1]); map->fdev = iconfig(fields[0]); map->tdev = nil; if (access(map->to, AEXIST) < 0) { /* * map->to isn't an existing file, so it had better be * a config string for a device. */ if(testconfig(fields[1]) == 0) map->tdev = iconfig(fields[1]); } /* else map->to is the replacement file name */ map->next = devmap; devmap = map; } Bterm(bp); }
int main(void) { #if defined(HAVE_SETENV) && defined(HAVE_UNSETENV) fail_unless(setenv("MYVAR", "testing", 1) == 0); fail_unless(unsetenv("MYUNSETVAR") == 0); #elif defined(HAVE__PUTENV) fail_unless(_putenv("MYVAR=testing") == 0); fail_unless(_putenv("MYUNSETVAR=") == 0); #else #error "Not sure how to set environment variables." #endif /* Check basic string parsing */ fail_unless(testconfig("parameter=\"abc\\ndef\"", "abc\ndef")); fail_unless(testconfig("parameter=\"abc\\adef\"", "abc\adef")); fail_unless(testconfig("parameter=\"abc\\040def\"", "abc def")); fail_unless(testconfig("parameter=\"abc\\x20def\"", "abc def")); fail_unless(testconfig("parameter=\"${}\"", "")); /* Check unquoted environment variable handling */ fail_unless(testconfig("parameter=${MYVAR}", "testing")); fail_unless(testconfig("parameter=${MYVAR:-default}", "testing")); fail_unless(testconfig("parameter=${MYUNSETVAR}", "")); fail_unless(testconfig("parameter=${MYUNSETVAR:-default}", "default")); /* Check quoted environment variable handling */ fail_unless(testconfig("parameter=\"${MYVAR}\"", "testing")); fail_unless(testconfig("parameter=\"${MYVAR:-default}\"", "testing")); fail_unless(testconfig("parameter=\"${MYUNSETVAR}\"", "")); fail_unless(testconfig("parameter=\"${MYUNSETVAR:-default}\"", "default")); /* Check quoted environment variable handling in the middle of strings */ fail_unless(testconfig("parameter=\"text_${MYVAR}\"", "text_testing")); fail_unless(testconfig("parameter=\"${MYVAR}_text\"", "testing_text")); fail_unless(testconfig("parameter=\"start_${MYVAR}_end\"", "start_testing_end")); /* Check single quoted environment variable handling */ fail_unless(testconfig("parameter='${MYVAR}'", "${MYVAR}")); return 0; }
void arginit(void) { int verb; char *line; char word[Maxword+1], *cp; Filsys *fs; if(nvrcheck() == 0) { setconfig(conf.confdev); if (!conf.configfirst) return; } /* nvr was bad or invoker requested configuration step */ setconfig(conf.confdev); for (;;) { print("config: "); if ((line = Brdline(&bin, '\n')) == nil) return; line[Blinelen(&bin)-1] = '\0'; cp = getwrd(word, line); if (word[0] == '\0' || word[0] == '#') continue; if(strcmp(word, "end") == 0) return; if(strcmp(word, "halt") == 0) exit(); if(strcmp(word, "queryjuke") == 0) { getwrd(word, cp); if(testconfig(word) == 0) querychanger(iconfig(word)); continue; } if(strcmp(word, "allow") == 0) { wstatallow = 1; writeallow = 1; continue; } if(strcmp(word, "copyworm") == 0) { copyworm = 1; continue; } if(strcmp(word, "copydev") == 0) { cp = getwrd(word, cp); if(testconfig(word)) continue; src = strdup(word); getwrd(word, cp); if(testconfig(word)) continue; dest = strdup(word); copydev = 1; continue; } if(strcmp(word, "noauth") == 0) { noauth = !noauth; continue; } if(strcmp(word, "noattach") == 0) { noattach = !noattach; continue; } if(strcmp(word, "readonly") == 0) { readonly = 1; continue; } if(strcmp(word, "ream") == 0) { verb = FREAM; goto gfsname; } if(strcmp(word, "recover") == 0) { verb = FRECOVER; goto gfsname; } if(strcmp(word, "filsys") == 0) { verb = FEDIT; goto gfsname; } if(strcmp(word, "nvram") == 0) { getwrd(word, cp); if(testconfig(word)) continue; /* if it fails, it will complain */ nvrsetconfig(word); continue; } if(strcmp(word, "config") == 0) { getwrd(word, cp); if(!testconfig(word) && nvrsetconfig(word) == 0) f.newconf = 1; continue; } if(strcmp(word, "service") == 0) { getwrd(word, cp); strncpy(service, word, sizeof service); f.modconf = 1; continue; } if (strcmp(word, "resetparams") == 0) { resetparams++; continue; } /* * continue to parse obsolete keywords so that old * configurations can still work. */ if (strcmp(word, "ipauth") != 0 && astrcmp(word, "ip") != 0 && astrcmp(word, "ipgw") != 0 && astrcmp(word, "ipmask") != 0 && astrcmp(word, "ipsntp") != 0) { print("unknown config command\n"); print("\ttype end to get out\n"); continue; } getwrd(word, cp); f.modconf = 1; continue; gfsname: cp = getwrd(word, cp); for(fs=filsys; fs->name; fs++) if(strcmp(word, fs->name) == 0) break; if (fs->name == nil) { memset(fs, 0, sizeof *fs); fs->name = strdup(word); } switch(verb) { case FREAM: if(strcmp(fs->name, "main") == 0) wstatallow = 1; /* only set, never reset */ /* fallthrough */ case FRECOVER: fs->flags |= verb; break; case FEDIT: f.modconf = 1; getwrd(word, cp); fs->flags |= verb; if(word[0] == 0) fs->conf = nil; else if(!testconfig(word)) fs->conf = strdup(word); break; } } }
static void setconfig(char *dev) { if (dev != nil && !testconfig(dev)) nvrsetconfig(dev); /* if it fails, it will complain */ }