35#define KEAMA_USAGE "Usage: keama [-4|-6] [-D] [-N]" \
36 " [-r {perform|fatal|pass}\\n" \
37 " [-l hook-library-path]" \
38 " [-i input-file] [-o output-file]\n"
41usage(
const char *sfmt,
const char *sarg) {
43 fprintf(stderr, sfmt, sarg);
44 fprintf(stderr,
"\n");
63static const char use_noarg[] =
"No argument for command: %s";
64static const char bad_resolve[] =
"Bad -r argument: %s";
67main(
int argc,
char **argv) {
76 for (i = 1; i < argc; i++) {
77 if (strcmp(argv[i],
"-4") == 0)
79 else if (strcmp(argv[i],
"-6") == 0)
81 else if (strcmp(argv[i],
"-D") == 0)
83 else if (strcmp(argv[i],
"-N") == 0)
85 else if (strcmp(argv[i],
"-T") == 0)
87 else if (strcmp(argv[i],
"-r") == 0) {
89 usage(use_noarg, argv[i - 1]);
90 if (strcmp(argv[i],
"perform") == 0)
92 else if (strcmp(argv[i],
"fatal") == 0)
94 else if (strcmp(argv[i],
"pass") == 0)
97 usage(bad_resolve, argv[i]);
98 }
else if (strcmp(argv[i],
"-l") == 0) {
100 usage(use_noarg, argv[i - 1]);
102 }
else if (strcmp(argv[i],
"-i") == 0) {
104 usage(use_noarg, argv[i - 1]);
106 }
else if (strcmp(argv[i],
"-o") == 0) {
108 usage(use_noarg, argv[i - 1]);
111 usage(
"Unknown command: %s", argv[i]);
115 usage(
"address family must be set using %s",
"-4 or -6");
129 usage(
"out of memory reading standard "
130 "input: %s", strerror(errno));
131 cc = read(fd,
inbuf + oldsize, newsize - oldsize);
133 usage(
"error reading standard input: %s",
135 if (cc + oldsize < newsize) {
136 newsize = cc + oldsize;
143 usage(
"Cannot open '%s' for reading",
input_file);
149 usage(
"Cannot open '%s' for writing",
output_file);
155 assert(cfile != NULL);
185 size_t amount = new_size *
sizeof(
struct element *);
188 if (pc->
stack == NULL)
205 snprintf(fbuf,
sizeof(fbuf),
"%s line %d: %s",
209 vsnprintf(mbuf,
sizeof(mbuf), fbuf, list);
215 if (lix <
sizeof(lexbuf) - 1)
218 for (; lix < (
sizeof lexbuf) - 1 && (lix & 7); lix++)
224 fprintf(stderr,
"%s\n%s\n", mbuf, cfile->
token_line);
226 fprintf(stderr,
"%s^\n", lexbuf);
isc_result_t end_parse(struct parse **cfile)
isc_result_t new_parse(struct parse **cfile, int file, char *inbuf, unsigned buflen, const char *name, int eolp)
void print(FILE *fp, const struct element *e, isc_boolean_t skip, unsigned indent)
struct element * json_parse(struct parse *cfile)
int main(int argc, char **argv)
isc_boolean_t use_isc_lifetimes
void parse_error(struct parse *cfile, const char *fmt,...)
void stackPush(struct parse *pc, struct element *elem)
size_t conf_file_parse(struct parse *)