/* $Id: innconfval.c 5962 2002-12-08 19:52:13Z rra $ ** ** Get a config value from INN. */ #include "config.h" #include "clibrary.h" #include "inn/innconf.h" #include "inn/messages.h" #include "libinn.h" /* ** Print the INN version string with appropriate quoting. */ static void print_version(FILE *file, enum innconf_quoting quoting) { switch (quoting) { case INNCONF_QUOTE_NONE: fprintf(file, "%s\n", inn_version_string); break; case INNCONF_QUOTE_SHELL: fprintf(file, "VERSION='%s'; export VERSION\n", inn_version_string); break; case INNCONF_QUOTE_PERL: fprintf(file, "$version = '%s';\n", inn_version_string); break; case INNCONF_QUOTE_TCL: fprintf(file, "set inn_version \"%s\"\n", inn_version_string); break; } } /* ** Main routine. Most of the real work is done by the innconf library ** routines. */ int main(int argc, char *argv[]) { int option, i; char *file = NULL; enum innconf_quoting quoting = INNCONF_QUOTE_NONE; bool okay = true; bool version = false; bool checking = false; message_program_name = "innconfval"; while ((option = getopt(argc, argv, "Ci:pstv")) != EOF) switch (option) { default: die("usage error"); break; case 'C': checking = true; break; case 'i': file = optarg; break; case 'p': quoting = INNCONF_QUOTE_PERL; break; case 's': quoting = INNCONF_QUOTE_SHELL; break; case 't': quoting = INNCONF_QUOTE_TCL; break; case 'v': version = true; break; } argc -= optind; argv += optind; if (version) { print_version(stdout, quoting); exit(0); } if (checking) exit(innconf_check(file) ? 0 : 1); /* Read in the inn.conf file specified. */ if (!innconf_read(file)) exit(1); /* Perform the specified action. */ if (argv[0] == NULL) { innconf_dump(stdout, quoting); print_version(stdout, quoting); } else { for (i = 0; i < argc; i++) if (strcmp(argv[i], "version") == 0) print_version(stdout, quoting); else if (!innconf_print_value(stdout, argv[i], quoting)) okay = false; } exit(okay ? 0 : 1); }