Esempio n. 1
0
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;
}
Esempio n. 2
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);
}
Esempio n. 3
0
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;
}
Esempio n. 4
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;
		}
	}
}
Esempio n. 5
0
static void
setconfig(char *dev)
{
	if (dev != nil && !testconfig(dev))
		nvrsetconfig(dev);	/* if it fails, it will complain */
}