int main(int argc, char **argv) { VSTRING *buffer = vstring_alloc(100); MAPS *path; const char *result; char *extent; /* * Parse JCL. */ if (argc != 2) msg_fatal("usage: %s database", argv[0]); msg_verbose = 1; /* * Initialize. */ mail_conf_read(); path = maps_create(argv[0], argv[1], DICT_FLAG_LOCK | DICT_FLAG_FOLD_FIX); while (vstring_fgets_nonl(buffer, VSTREAM_IN)) { extent = 0; result = mail_addr_find(path, STR(buffer), &extent); vstream_printf("%s -> %s (%s)\n", STR(buffer), result ? result : path->error ? "(try again)" : "(not found)", extent ? extent : "null extension"); vstream_fflush(VSTREAM_OUT); if (extent) myfree(extent); } vstring_free(buffer); maps_free(path); return (0); }
int main(int unused_argc, char **unused_argv) { VSTRING *in_buf = vstring_alloc(10); VSTRING *parse_buf = vstring_alloc(10); char *host; char *port; const char *err; while (vstring_fgets_nonl(in_buf, VSTREAM_IN)) { vstream_printf(">> %s\n", STR(in_buf)); vstream_fflush(VSTREAM_OUT); if (*STR(in_buf) == '#') continue; vstring_strcpy(parse_buf, STR(in_buf)); if ((err = host_port(STR(parse_buf), &host, (char *) 0, &port, "default-service")) != 0) { msg_warn("%s in %s", err, STR(in_buf)); } else { vstream_printf("host %s port %s\n", host, port); vstream_fflush(VSTREAM_OUT); } } vstring_free(in_buf); vstring_free(parse_buf); return (0); }
int main(int argc, char **argv) { VSTRING *inbuf = vstring_alloc(1); int have_tty = isatty(0); if (argc > 1) { while (--argc > 0 && *++argv) parse_sample(*argv); } else { for (;;) { if (have_tty) { vstream_printf("> "); vstream_fflush(VSTREAM_OUT); } if (vstring_fgets_nonl(inbuf, VSTREAM_IN) <= 0) break; if (have_tty == 0) vstream_printf("> %s\n", STR(inbuf)); if (*STR(inbuf) == 0 || *STR(inbuf) == '#') continue; parse_sample(STR(inbuf)); } } vstring_free(inbuf); return (0); }
int main(int argc, char **argv) { VSTRING *buf = vstring_alloc(100); MAPS *maps; const char *result; if (argc != 2) msg_fatal("usage: %s maps", argv[0]); msg_verbose = 2; maps = maps_create("whatever", argv[1], DICT_FLAG_LOCK); while (vstring_fgets_nonl(buf, VSTREAM_IN)) { if ((result = maps_find(maps, vstring_str(buf), 0)) != 0) { vstream_printf("%s\n", result); } else if (dict_errno != 0) { msg_fatal("lookup error: %m"); } else { vstream_printf("not found\n"); } vstream_fflush(VSTREAM_OUT); } maps_free(maps); vstring_free(buf); return (0); }
int main(int unused_argc, char **unused_argv) { VSTRING *buf = vstring_alloc(1); while (vstring_fgets_nonl(buf, VSTREAM_IN)) { mac_parse(vstring_str(buf), mac_parse_print, (char *) 0); vstream_fflush(VSTREAM_OUT); } vstring_free(buf); return (0); }
int main(int unused_argc, char **unused_argv) { VSTRING *in = vstring_alloc(10); VSTRING *out = vstring_alloc(10); while (vstring_fgets_nonl(in, VSTREAM_IN)) { unescape(out, vstring_str(in)); vstream_fwrite(VSTREAM_OUT, vstring_str(out), VSTRING_LEN(out)); } vstream_fflush(VSTREAM_OUT); exit(0); }
int main(void) { VSTRING *src = vstring_alloc(100); VSTRING *dst = vstring_alloc(100); while (vstring_fgets_nonl(src, VSTREAM_IN)) { vstream_fprintf(VSTREAM_OUT, "%s\n", vstring_str(quote_821_local(dst, vstring_str(src)))); vstream_fflush(VSTREAM_OUT); } exit(0); }
int main(int unused_argc, char **argv) { VSTRING *buffer = vstring_alloc(1); msg_vstream_init(argv[0], VSTREAM_ERR); msg_verbose = 1; while (vstring_fgets_nonl(buffer, VSTREAM_IN)) { msg_info("testing: \"%s\"", vstring_str(buffer)); valid_hostname(vstring_str(buffer), DO_GRIPE); valid_hostaddr(vstring_str(buffer), DO_GRIPE); } exit(0); }
int main(int unused_argc, char **unused_argv) { VSTRING *buf = vstring_alloc(100); off_t offset; while (vstring_fgets_nonl(buf, VSTREAM_IN)) { if ((offset = off_cvt_string(STR(buf))) < 0) { msg_warn("bad input %s", STR(buf)); } else { vstream_printf("%s\n", STR(off_cvt_number(buf, offset))); } vstream_fflush(VSTREAM_OUT); } vstring_free(buf); return (0); }
int main(int argc, char **argv) { VSTRING *reply; int ch; char *rule; char *addr; msg_vstream_init(argv[0], VSTREAM_ERR); mail_conf_read(); msg_info("using config files in %s", var_config_dir); if (chdir(var_queue_dir) < 0) msg_fatal("chdir %s: %m", var_queue_dir); while ((ch = GETOPT(argc, argv, "v")) > 0) { switch (ch) { case 'v': msg_verbose++; break; default: usage(argv[0]); } } reply = vstring_alloc(1); if (argc > optind) { for (;;) { if ((rule = argv[optind++]) == 0) break; if ((addr = argv[optind++]) == 0) usage(argv[0]); rewrite(rule, addr, reply); } } else { VSTRING *buffer = vstring_alloc(1); while (vstring_fgets_nonl(buffer, VSTREAM_IN)) { if ((addr = split_at(STR(buffer), ' ')) == 0 || *(rule = STR(buffer)) == 0) usage(argv[0]); rewrite(rule, addr, reply); } vstring_free(buffer); } vstring_free(reply); exit(0); }
int main(int unused_argc, char **unused_argv) { VSTRING *raw = vstring_alloc(100); VSTRING *quoted = vstring_alloc(100); VSTRING *unquoted = vstring_alloc(100); while (vstring_fgets_nonl(raw, VSTREAM_IN)) { quote_822_local(quoted, STR(raw)); vstream_printf("quoted: %s\n", STR(quoted)); unquote_822_local(unquoted, STR(quoted)); vstream_printf("unquoted: %s\n", STR(unquoted)); vstream_fflush(VSTREAM_OUT); } vstring_free(unquoted); vstring_free(quoted); vstring_free(raw); return (0); }
int main(int argc, char **argv) { VSTRING *buffer = vstring_alloc(1); char *cp; int ch; char *command; signal(SIGPIPE, SIG_IGN); msg_vstream_init(argv[0], VSTREAM_ERR); mail_conf_read(); msg_info("using config files in %s", var_config_dir); if (chdir(var_queue_dir) < 0) msg_fatal("chdir %s: %m", var_queue_dir); while ((ch = GETOPT(argc, argv, "v")) > 0) { switch (ch) { case 'v': msg_verbose++; break; default: usage(argv[0]); } } if (argc - optind > 1) usage(argv[0]); while (vstring_fgets_nonl(buffer, VSTREAM_IN)) { cp = STR(buffer); if ((command = mystrtok(&cp, " \t\r\n")) == 0) continue; if (strcmp(command, "query") == 0) query(cp, buffer); else if (strcmp(command, "update") == 0) update(cp); else msg_warn("unrecognized command: %s", command); } vstring_free(buffer); return (0); }
int main(int argc, char **argv) { VSTRING *buffer = vstring_alloc(100); MAPS *path; ARGV *result; /* * Parse JCL. */ if (argc != 2) msg_fatal("usage: %s database", argv[0]); /* * Initialize. */ #define UPDATE(dst, src) { myfree(dst); dst = mystrdup(src); } mail_conf_read(); msg_verbose = 1; if (chdir(var_queue_dir) < 0) msg_fatal("chdir %s: %m", var_queue_dir); path = maps_create(argv[0], argv[1], DICT_FLAG_LOCK | DICT_FLAG_FOLD_FIX); while (vstring_fgets_nonl(buffer, VSTREAM_IN)) { msg_info("=== Address extension on, extension propagation on ==="); UPDATE(var_rcpt_delim, "+"); if ((result = mail_addr_map(path, STR(buffer), 1)) != 0) argv_free(result); msg_info("=== Address extension on, extension propagation off ==="); if ((result = mail_addr_map(path, STR(buffer), 0)) != 0) argv_free(result); msg_info("=== Address extension off ==="); UPDATE(var_rcpt_delim, ""); if ((result = mail_addr_map(path, STR(buffer), 1)) != 0) argv_free(result); } vstring_free(buffer); maps_free(path); return (0); }
int main(int argc, char **argv) { VSTRING *in = vstring_alloc(10); VSTRING *out = vstring_alloc(10); int un_escape = 1; if (argc > 2 || (argc > 1 && (un_escape = strcmp(argv[1], "-e"))) != 0) msg_fatal("usage: %s [-e (escape)]", argv[0]); if (un_escape) { while (vstring_fgets_nonl(in, VSTREAM_IN)) { unescape(out, vstring_str(in)); vstream_fwrite(VSTREAM_OUT, vstring_str(out), VSTRING_LEN(out)); } } else { while (vstring_fgets(in, VSTREAM_IN)) { escape(out, vstring_str(in), VSTRING_LEN(in)); vstream_fwrite(VSTREAM_OUT, vstring_str(out), VSTRING_LEN(out)); } } vstream_fflush(VSTREAM_OUT); exit(0); }
int main(int unused_ac, char **av) { VSTRING *inbuf = vstring_alloc(10); int status; ARGV *argv = 0; msg_vstream_init(av[0], VSTREAM_ERR); msg_verbose = 3; mail_conf_read(); msg_info("using config files in %s", var_config_dir); if (chdir(var_queue_dir) < 0) msg_fatal("chdir %s: %m", var_queue_dir); while (vstring_fgets_nonl(inbuf, VSTREAM_IN)) { argv = argv_split(STR(inbuf), " \t\r\n"); if (argv->argc == 0) { argv_free(argv); continue; } #define COMMAND(argv, str, len) \ (strcasecmp(argv->argv[0], str) == 0 && argv->argc == len) if (COMMAND(argv, "policy", 2)) { int cachable; int timeout; status = tls_mgr_policy(argv->argv[1], &cachable, &timeout); vstream_printf("status=%d cachable=%d timeout=%d\n", status, cachable, timeout); } else if (COMMAND(argv, "seed", 2)) { VSTRING *buf = vstring_alloc(10); VSTRING *hex = vstring_alloc(10); int len = atoi(argv->argv[1]); status = tls_mgr_seed(buf, len); hex_encode(hex, STR(buf), LEN(buf)); vstream_printf("status=%d seed=%s\n", status, STR(hex)); vstring_free(hex); vstring_free(buf); } else if (COMMAND(argv, "lookup", 3)) { VSTRING *buf = vstring_alloc(10); status = tls_mgr_lookup(argv->argv[1], argv->argv[2], buf); vstream_printf("status=%d session=%.*s\n", status, LEN(buf), STR(buf)); vstring_free(buf); } else if (COMMAND(argv, "update", 4)) { status = tls_mgr_update(argv->argv[1], argv->argv[2], argv->argv[3], strlen(argv->argv[3])); vstream_printf("status=%d\n", status); } else if (COMMAND(argv, "delete", 3)) { status = tls_mgr_delete(argv->argv[1], argv->argv[2]); vstream_printf("status=%d\n", status); } else { vstream_printf("usage:\n" "seed byte_count\n" "policy smtpd|smtp|lmtp\n" "lookup smtpd|smtp|lmtp cache_id\n" "update smtpd|smtp|lmtp cache_id session\n" "delete smtpd|smtp|lmtp cache_id\n"); } vstream_fflush(VSTREAM_OUT); argv_free(argv); } vstring_free(inbuf); return (0); }
void dict_test(int argc, char **argv) { VSTRING *keybuf = vstring_alloc(1); VSTRING *inbuf = vstring_alloc(1); DICT *dict; char *dict_name; int open_flags; char *bufp; char *cmd; const char *key; const char *value; int ch; int dict_flags = 0; int n; int rc; #define USAGE "verbose|del key|get key|put key=value|first|next|masks|flags" signal(SIGPIPE, SIG_IGN); msg_vstream_init(argv[0], VSTREAM_ERR); while ((ch = GETOPT(argc, argv, "v")) > 0) { switch (ch) { default: usage(argv[0]); case 'v': msg_verbose++; break; } } optind = OPTIND; if (argc - optind < 2) usage(argv[0]); if (strcasecmp(argv[optind + 1], "create") == 0) open_flags = O_CREAT | O_RDWR | O_TRUNC; else if (strcasecmp(argv[optind + 1], "write") == 0) open_flags = O_RDWR; else if (strcasecmp(argv[optind + 1], "read") == 0) open_flags = O_RDONLY; else msg_fatal("unknown access mode: %s", argv[2]); for (n = 2; argv[optind + n]; n++) dict_flags |= dict_flags_mask(argv[optind + 2]); if ((dict_flags & DICT_FLAG_OPEN_LOCK) == 0) dict_flags |= DICT_FLAG_LOCK; if ((dict_flags & (DICT_FLAG_DUP_WARN | DICT_FLAG_DUP_IGNORE)) == 0) dict_flags |= DICT_FLAG_DUP_REPLACE; vstream_fflush(VSTREAM_OUT); dict_name = argv[optind]; dict_allow_surrogate = 1; dict = dict_open(dict_name, open_flags, dict_flags); dict_register(dict_name, dict); while (vstring_fgets_nonl(inbuf, VSTREAM_IN)) { bufp = vstring_str(inbuf); if (!isatty(0)) { vstream_printf("> %s\n", bufp); vstream_fflush(VSTREAM_OUT); } if (*bufp == '#') continue; if ((cmd = mystrtok(&bufp, " ")) == 0) { vstream_printf("usage: %s\n", USAGE); vstream_fflush(VSTREAM_OUT); continue; } if (dict_changed_name()) msg_warn("dictionary has changed"); key = *bufp ? vstring_str(unescape(keybuf, mystrtok(&bufp, " ="))) : 0; value = mystrtok(&bufp, " ="); if (strcmp(cmd, "verbose") == 0 && !key) { msg_verbose++; } else if (strcmp(cmd, "del") == 0 && key && !value) { if ((rc = dict_del(dict, key)) > 0) vstream_printf("%s: not found\n", key); else if (rc < 0) vstream_printf("%s: error\n", key); else vstream_printf("%s: deleted\n", key); } else if (strcmp(cmd, "get") == 0 && key && !value) { if ((value = dict_get(dict, key)) == 0) { vstream_printf("%s: %s\n", key, dict->error ? "error" : "not found"); } else { vstream_printf("%s=%s\n", key, value); } } else if (strcmp(cmd, "put") == 0 && key && value) { if (dict_put(dict, key, value) != 0) vstream_printf("%s: %s\n", key, dict->error ? "error" : "not updated"); else vstream_printf("%s=%s\n", key, value); } else if (strcmp(cmd, "first") == 0 && !key && !value) { if (dict_seq(dict, DICT_SEQ_FUN_FIRST, &key, &value) == 0) vstream_printf("%s=%s\n", key, value); else vstream_printf("%s\n", dict->error ? "error" : "not found"); } else if (strcmp(cmd, "next") == 0 && !key && !value) { if (dict_seq(dict, DICT_SEQ_FUN_NEXT, &key, &value) == 0) vstream_printf("%s=%s\n", key, value); else vstream_printf("%s\n", dict->error ? "error" : "not found"); } else if (strcmp(cmd, "flags") == 0 && !key && !value) { vstream_printf("dict flags %s\n", dict_flags_str(dict->flags)); } else if (strcmp(cmd, "masks") == 0 && !key && !value) { vstream_printf("DICT_FLAG_IMPL_MASK %s\n", dict_flags_str(DICT_FLAG_IMPL_MASK)); vstream_printf("DICT_FLAG_PARANOID %s\n", dict_flags_str(DICT_FLAG_PARANOID)); vstream_printf("DICT_FLAG_RQST_MASK %s\n", dict_flags_str(DICT_FLAG_RQST_MASK)); vstream_printf("DICT_FLAG_INST_MASK %s\n", dict_flags_str(DICT_FLAG_INST_MASK)); } else { vstream_printf("usage: %s\n", USAGE); } vstream_fflush(VSTREAM_OUT); } vstring_free(keybuf); vstring_free(inbuf); dict_close(dict); }
int main(int argc, char **argv) { MILTERS *milters = 0; char *conn_macros, *helo_macros, *mail_macros, *rcpt_macros; char *data_macros, *eoh_macros, *eod_macros, *unk_macros; VSTRING *inbuf = vstring_alloc(100); char *bufp; char *cmd; int ch; int istty = isatty(vstream_fileno(VSTREAM_IN)); conn_macros = helo_macros = mail_macros = rcpt_macros = data_macros = eoh_macros = eod_macros = unk_macros = ""; msg_vstream_init(argv[0], VSTREAM_ERR); while ((ch = GETOPT(argc, argv, "V:v")) > 0) { switch (ch) { default: msg_fatal("usage: %s [-a action] [-p protocol] [-v]", argv[0]); case 'a': var_milt_def_action = optarg; break; case 'p': var_milt_protocol = optarg; break; case 'v': msg_verbose++; break; } } optind = OPTIND; for (;;) { const char *resp = 0; ARGV *argv; char **args; if (istty) { vstream_printf("- "); vstream_fflush(VSTREAM_OUT); } if (vstring_fgets_nonl(inbuf, VSTREAM_IN) <= 0) break; bufp = vstring_str(inbuf); if (!istty) { vstream_printf("> %s\n", bufp); vstream_fflush(VSTREAM_OUT); } if (*bufp == '#') continue; cmd = mystrtok(&bufp, " "); if (cmd == 0) { usage(); continue; } argv = argv_split(bufp, " "); args = argv->argv; if (strcmp(cmd, "create") == 0 && argv->argc == 1) { if (milters != 0) { msg_warn("deleting existing milters"); milter_free(milters); } milters = milter_create(args[0], var_milt_conn_time, var_milt_cmd_time, var_milt_msg_time, var_milt_protocol, var_milt_def_action, conn_macros, helo_macros, mail_macros, rcpt_macros, data_macros, eoh_macros, eod_macros, unk_macros); } else if (strcmp(cmd, "free") == 0 && argv->argc == 0) { if (milters == 0) { msg_warn("no milters"); continue; } milter_free(milters); milters = 0; } else if (strcmp(cmd, "connect") == 0 && argv->argc == 4) { if (milters == 0) { msg_warn("no milters"); continue; } resp = milter_conn_event(milters, args[0], args[1], args[2], strcmp(args[3], "AF_INET") == 0 ? AF_INET : strcmp(args[3], "AF_INET6") == 0 ? AF_INET6 : strcmp(args[3], "AF_UNIX") == 0 ? AF_UNIX : AF_UNSPEC); } else if (strcmp(cmd, "helo") == 0 && argv->argc == 1) { if (milters == 0) { msg_warn("no milters"); continue; } resp = milter_helo_event(milters, args[0], 0); } else if (strcmp(cmd, "ehlo") == 0 && argv->argc == 1) { if (milters == 0) { msg_warn("no milters"); continue; } resp = milter_helo_event(milters, args[0], 1); } else if (strcmp(cmd, "mail") == 0 && argv->argc > 0) { if (milters == 0) { msg_warn("no milters"); continue; } resp = milter_mail_event(milters, (const char **) args); } else if (strcmp(cmd, "rcpt") == 0 && argv->argc > 0) { if (milters == 0) { msg_warn("no milters"); continue; } resp = milter_rcpt_event(milters, 0, (const char **) args); } else if (strcmp(cmd, "unknown") == 0 && argv->argc > 0) { if (milters == 0) { msg_warn("no milters"); continue; } resp = milter_unknown_event(milters, args[0]); } else if (strcmp(cmd, "data") == 0 && argv->argc == 0) { if (milters == 0) { msg_warn("no milters"); continue; } resp = milter_data_event(milters); } else if (strcmp(cmd, "disconnect") == 0 && argv->argc == 0) { if (milters == 0) { msg_warn("no milters"); continue; } milter_disc_event(milters); } else { usage(); } if (resp != 0) msg_info("%s", resp); argv_free(argv); } if (milters != 0) milter_free(milters); vstring_free(inbuf); return (0); }
int main(int argc, char **argv) { VSTRING *keybuf = vstring_alloc(1); VSTRING *inbuf = vstring_alloc(1); DICT *dict; char *dict_name; int open_flags; char *bufp; char *cmd; const char *key; const char *value; int ch; int dict_flags = DICT_FLAG_LOCK | DICT_FLAG_DUP_REPLACE; int n; signal(SIGPIPE, SIG_IGN); msg_vstream_init(argv[0], VSTREAM_ERR); while ((ch = GETOPT(argc, argv, "v")) > 0) { switch (ch) { default: usage(argv[0]); case 'v': msg_verbose++; break; } } optind = OPTIND; if (argc - optind < 2) usage(argv[0]); if (strcasecmp(argv[optind + 1], "create") == 0) open_flags = O_CREAT | O_RDWR | O_TRUNC; else if (strcasecmp(argv[optind + 1], "write") == 0) open_flags = O_RDWR; else if (strcasecmp(argv[optind + 1], "read") == 0) open_flags = O_RDONLY; else msg_fatal("unknown access mode: %s", argv[2]); for (n = 2; argv[optind + n]; n++) { if (strcasecmp(argv[optind + 2], "fold") == 0) dict_flags |= DICT_FLAG_FOLD_ANY; else if (strcasecmp(argv[optind + 2], "sync") == 0) dict_flags |= DICT_FLAG_SYNC_UPDATE; else usage(argv[0]); } dict_name = argv[optind]; dict = dict_open(dict_name, open_flags, dict_flags); dict_register(dict_name, dict); while (vstring_fgets_nonl(inbuf, VSTREAM_IN)) { bufp = vstring_str(inbuf); if (!isatty(0)) { vstream_printf("> %s\n", bufp); vstream_fflush(VSTREAM_OUT); } if (*bufp == '#') continue; if ((cmd = mystrtok(&bufp, " ")) == 0) { vstream_printf("usage: del key|get key|put key=value|first|next\n"); vstream_fflush(VSTREAM_OUT); continue; } if (dict_changed_name()) msg_warn("dictionary has changed"); key = *bufp ? vstring_str(unescape(keybuf, mystrtok(&bufp, " ="))) : 0; value = mystrtok(&bufp, " ="); if (strcmp(cmd, "del") == 0 && key && !value) { if (dict_del(dict, key)) vstream_printf("%s: not found\n", key); else vstream_printf("%s: deleted\n", key); } else if (strcmp(cmd, "get") == 0 && key && !value) { if ((value = dict_get(dict, key)) == 0) { vstream_printf("%s: %s\n", key, dict_errno == DICT_ERR_RETRY ? "soft error" : "not found"); } else { vstream_printf("%s=%s\n", key, value); } } else if (strcmp(cmd, "put") == 0 && key && value) { dict_put(dict, key, value); vstream_printf("%s=%s\n", key, value); } else if (strcmp(cmd, "first") == 0 && !key && !value) { if (dict_seq(dict, DICT_SEQ_FUN_FIRST, &key, &value) == 0) vstream_printf("%s=%s\n", key, value); else vstream_printf("%s\n", dict_errno == DICT_ERR_RETRY ? "soft error" : "not found"); } else if (strcmp(cmd, "next") == 0 && !key && !value) { if (dict_seq(dict, DICT_SEQ_FUN_NEXT, &key, &value) == 0) vstream_printf("%s=%s\n", key, value); else vstream_printf("%s\n", dict_errno == DICT_ERR_RETRY ? "soft error" : "not found"); } else { vstream_printf("usage: del key|get key|put key=value|first|next\n"); } vstream_fflush(VSTREAM_OUT); } vstring_free(keybuf); vstring_free(inbuf); dict_close(dict); return (0); }
int main(int argc, char **argv) { DICT_CACHE_TEST *test_job; VSTRING *inbuf = vstring_alloc(100); char *bufp; ARGV *args; DICT_CACHE *cache = 0; int stdin_is_tty; msg_vstream_init(argv[0], VSTREAM_ERR); if (argc != 1) usage(argv[0]); test_job = create_requests(DICT_CACHE_SREQ_LIMIT); stdin_is_tty = isatty(0); for (;;) { if (stdin_is_tty) { vstream_printf("> "); vstream_fflush(VSTREAM_OUT); } if (vstring_fgets_nonl(inbuf, VSTREAM_IN) == 0) break; bufp = vstring_str(inbuf); if (!stdin_is_tty) { vstream_printf("> %s\n", bufp); vstream_fflush(VSTREAM_OUT); } if (*bufp == '#') continue; args = argv_split(bufp, DELIMS); if (argc == 0) { vstream_printf("usage: %s\n", USAGE); vstream_fflush(VSTREAM_OUT); continue; } if (strcmp(args->argv[0], "verbose") == 0 && args->argc == 2) { msg_verbose = atoi(args->argv[1]); } else if (strcmp(args->argv[0], "elapsed") == 0 && args->argc == 2) { show_elapsed = atoi(args->argv[1]); #ifdef HAS_LMDB } else if (strcmp(args->argv[0], "lmdb_map_size") == 0 && args->argc == 2) { dict_lmdb_map_size = atol(args->argv[1]); #endif } else if (strcmp(args->argv[0], "cache") == 0 && args->argc == 2) { if (cache) dict_cache_close(cache); cache = dict_cache_open(args->argv[1], O_CREAT | O_RDWR, DICT_CACHE_OPEN_FLAGS); } else if (strcmp(args->argv[0], "reset") == 0 && args->argc == 1) { reset_requests(test_job); } else if (strcmp(args->argv[0], "run") == 0 && args->argc == 1) { run_requests(test_job, cache, inbuf); } else if (strcmp(args->argv[0], "status") == 0 && args->argc == 1) { show_status(test_job, cache); } else { add_request(test_job, args); } vstream_fflush(VSTREAM_OUT); argv_free(args); } vstring_free(inbuf); free_requests(test_job); if (cache) dict_cache_close(cache); return (0); }
int main(int unused_argc, char **argv) { VSTRING *inbuf = vstring_alloc(1); char *bufp; char *cmd; ssize_t cmd_len; char *service; char *addr; int count; int rate; int msgs; int rcpts; int newtls; int auths; ANVIL_CLNT *anvil; msg_vstream_init(argv[0], VSTREAM_ERR); mail_conf_read(); msg_info("using config files in %s", var_config_dir); if (chdir(var_queue_dir) < 0) msg_fatal("chdir %s: %m", var_queue_dir); msg_verbose++; anvil = anvil_clnt_create(); while (vstring_fgets_nonl(inbuf, VSTREAM_IN)) { bufp = vstring_str(inbuf); if ((cmd = mystrtok(&bufp, " ")) == 0 || *bufp == 0 || (service = mystrtok(&bufp, " ")) == 0 || *service == 0 || (addr = mystrtok(&bufp, " ")) == 0 || *addr == 0 || mystrtok(&bufp, " ") != 0) { vstream_printf("bad command syntax\n"); usage(); vstream_fflush(VSTREAM_OUT); continue; } cmd_len = strlen(cmd); if (strncmp(cmd, ANVIL_REQ_CONN, cmd_len) == 0) { if (anvil_clnt_connect(anvil, service, addr, &count, &rate) != ANVIL_STAT_OK) msg_warn("error!"); else vstream_printf("count=%d, rate=%d\n", count, rate); } else if (strncmp(cmd, ANVIL_REQ_MAIL, cmd_len) == 0) { if (anvil_clnt_mail(anvil, service, addr, &msgs) != ANVIL_STAT_OK) msg_warn("error!"); else vstream_printf("rate=%d\n", msgs); } else if (strncmp(cmd, ANVIL_REQ_RCPT, cmd_len) == 0) { if (anvil_clnt_rcpt(anvil, service, addr, &rcpts) != ANVIL_STAT_OK) msg_warn("error!"); else vstream_printf("rate=%d\n", rcpts); } else if (strncmp(cmd, ANVIL_REQ_NTLS, cmd_len) == 0) { if (anvil_clnt_newtls(anvil, service, addr, &newtls) != ANVIL_STAT_OK) msg_warn("error!"); else vstream_printf("rate=%d\n", newtls); } else if (strncmp(cmd, ANVIL_REQ_AUTH, cmd_len) == 0) { if (anvil_clnt_auth(anvil, service, addr, &auths) != ANVIL_STAT_OK) msg_warn("error!"); else vstream_printf("rate=%d\n", auths); } else if (strncmp(cmd, ANVIL_REQ_NTLS_STAT, cmd_len) == 0) { if (anvil_clnt_newtls_stat(anvil, service, addr, &newtls) != ANVIL_STAT_OK) msg_warn("error!"); else vstream_printf("rate=%d\n", newtls); } else if (strncmp(cmd, ANVIL_REQ_DISC, cmd_len) == 0) { if (anvil_clnt_disconnect(anvil, service, addr) != ANVIL_STAT_OK) msg_warn("error!"); else vstream_printf("OK\n"); } else if (strncmp(cmd, ANVIL_REQ_LOOKUP, cmd_len) == 0) { if (anvil_clnt_lookup(anvil, service, addr, &count, &rate, &msgs, &rcpts, &newtls, &auths) != ANVIL_STAT_OK) msg_warn("error!"); else vstream_printf("count=%d, rate=%d msgs=%d rcpts=%d newtls=%d " "auths=%d\n", count, rate, msgs, rcpts, newtls, auths); } else { vstream_printf("bad command: \"%s\"\n", cmd); usage(); } vstream_fflush(VSTREAM_OUT); } vstring_free(inbuf); anvil_clnt_free(anvil); return (0); }
int main(int argc, char **argv) { VSTRING *line_buffer = vstring_alloc(1); VSTRING *fold_buffer = vstring_alloc(1); ARGV *cmd; char **args; msg_vstream_init(argv[0], VSTREAM_ERR); util_utf8_enable = 1; while (vstring_fgets_nonl(line_buffer, VSTREAM_IN)) { vstream_printf("> %s\n", STR(line_buffer)); cmd = argv_split(STR(line_buffer), CHARS_SPACE); if (cmd->argc == 0 || cmd->argv[0][0] == '#') { argv_free(cmd); continue; } args = cmd->argv; /* * Fold the host. */ if (strcmp(args[0], "host") == 0 && cmd->argc == 2) { vstream_printf("\"%s\" -> \"%s\"\n", args[1], fold_addr(fold_buffer, args[1], FOLD_ADDR_HOST)); } /* * Fold the user. */ else if (strcmp(args[0], "user") == 0 && cmd->argc == 2) { vstream_printf("\"%s\" -> \"%s\"\n", args[1], fold_addr(fold_buffer, args[1], FOLD_ADDR_USER)); } /* * Fold user and host. */ else if (strcmp(args[0], "all") == 0 && cmd->argc == 2) { vstream_printf("\"%s\" -> \"%s\"\n", args[1], fold_addr(fold_buffer, args[1], FOLD_ADDR_ALL)); } /* * Fold none. */ else if (strcmp(args[0], "none") == 0 && cmd->argc == 2) { vstream_printf("\"%s\" -> \"%s\"\n", args[1], fold_addr(fold_buffer, args[1], 0)); } /* * Usage. */ else { vstream_printf("Usage: %s host <addr> | user <addr> | all <addr>\n", argv[0]); } vstream_fflush(VSTREAM_OUT); argv_free(cmd); } vstring_free(line_buffer); vstring_free(fold_buffer); exit(0); }
int main(int argc, char **argv) { VSTRING *buffer = vstring_alloc(100); char *bp; MAPS *path = 0; const char *result; char *extent; char *cmd; char *in_field; char *query_field; char *out_field; char *strategy_field; char *key_field; char *expect_res; char *expect_ext; int in_form; int query_form; int out_form; int strategy_flags; int ch; int errs = 0; /* * Parse JCL. */ while ((ch = GETOPT(argc, argv, "v")) > 0) { switch (ch) { case 'v': msg_verbose++; break; default: usage(argv[0]); } } if (argc != optind) usage(argv[0]); /* * Initialize. */ #define UPDATE(var, val) do { myfree(var); var = mystrdup(val); } while (0) mail_params_init(); /* * TODO: move these assignments into the read/eval loop. */ UPDATE(var_rcpt_delim, "+"); UPDATE(var_mydomain, "localdomain"); UPDATE(var_myorigin, "localdomain"); UPDATE(var_mydest, "localhost.localdomain"); while (vstring_fgets_nonl(buffer, VSTREAM_IN)) { bp = STR(buffer); if (msg_verbose) msg_info("> %s", bp); if ((cmd = mystrtok(&bp, CHARS_SPACE)) == 0 || *cmd == '#') continue; while (ISSPACE(*bp)) bp++; /* * Visible comment. */ if (strcmp(cmd, "echo") == 0) { vstream_printf("%s\n", bp); } /* * Open maps. */ else if (strcmp(cmd, "maps") == 0) { if (path) maps_free(path); path = maps_create(argv[0], bp, DICT_FLAG_LOCK | DICT_FLAG_FOLD_FIX | DICT_FLAG_UTF8_REQUEST); vstream_printf("%s\n", bp); continue; } /* * Lookup and verify. */ else if (path && strcmp(cmd, "test") == 0) { /* * Parse the input and expectations. */ /* internal, external. */ if ((in_field = mystrtok(&bp, ":")) == 0) msg_fatal("no input form"); if ((in_form = mail_addr_form_from_string(in_field)) < 0) msg_fatal("bad input form: '%s'", in_field); if ((query_field = mystrtok(&bp, ":")) == 0) msg_fatal("no query form"); /* internal, external, external-first. */ if ((query_form = mail_addr_form_from_string(query_field)) < 0) msg_fatal("bad query form: '%s'", query_field); if ((out_field = mystrtok(&bp, ":")) == 0) msg_fatal("no output form"); /* internal, external. */ if ((out_form = mail_addr_form_from_string(out_field)) < 0) msg_fatal("bad output form: '%s'", out_field); if ((strategy_field = mystrtok(&bp, ":")) == 0) msg_fatal("no strategy field"); if ((strategy_flags = strategy_from_string(strategy_field)) < 0) msg_fatal("bad strategy field: '%s'", strategy_field); if ((key_field = mystrtok(&bp, ":")) == 0) msg_fatal("no search key"); expect_res = mystrtok(&bp, ":"); expect_ext = mystrtok(&bp, ":"); if (mystrtok(&bp, ":") != 0) msg_fatal("garbage after extension field"); /* * Lookups. */ extent = 0; result = mail_addr_find_opt(path, key_field, &extent, in_form, query_form, out_form, strategy_flags); vstream_printf("%s:%s -%s-> %s:%s (%s)\n", in_field, key_field, query_field, out_field, result ? result : path->error ? "(try again)" : "(not found)", extent ? extent : "null extension"); vstream_fflush(VSTREAM_OUT); /* * Enforce expectations. */ if (expect_res && result) { if (strcmp(expect_res, result) != 0) { msg_warn("expect result '%s' but got '%s'", expect_res, result); errs = 1; if (expect_ext && extent) { if (strcmp(expect_ext, extent) != 0) msg_warn("expect extension '%s' but got '%s'", expect_ext, extent); errs = 1; } else if (expect_ext && !extent) { msg_warn("expect extension '%s' but got none", expect_ext); errs = 1; } else if (!expect_ext && extent) { msg_warn("expect no extension but got '%s'", extent); errs = 1; } } } else if (expect_res && !result) { msg_warn("expect result '%s' but got none", expect_res); errs = 1; } else if (!expect_res && result) { msg_warn("expected no result but got '%s'", result); errs = 1; } vstream_fflush(VSTREAM_OUT); if (extent) myfree(extent); } /* * Unknown request. */ else { msg_warn("bad request: %s", cmd); } } vstring_free(buffer); maps_free(path); return (errs != 0); }