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 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 argc, char **argv) { VSTRING *buf = vstring_alloc(100); MAPS *maps; msg_vstream_init(basename(argv[0]), VSTREAM_ERR); if (argc < 3) msg_fatal("usage: %s maptype:mapname address...", argv[0]); maps = maps_create(argv[1], argv[1], DICT_FLAG_FOLD_FIX); mail_params_init(); if (chdir(var_queue_dir) < 0) msg_fatal("chdir(%s): %m", var_queue_dir); argv += 1; msg_verbose = 1; while (--argc && *++argv) { msg_info("-- start %s --", *argv); smtp_map11_external(vstring_strcpy(buf, *argv), maps, 1); msg_info("-- end %s --", *argv); } vstring_free(buf); maps_free(maps); return (0); }
void _hbc_checks_free(HBC_CHECKS *hbc, ssize_t len) { HBC_MAP_INFO *mp; for (mp = hbc->map_info; mp < hbc->map_info + len; mp++) if (mp->maps) maps_free(mp->maps); myfree((char *) hbc); }
void transport_free(TRANSPORT_INFO *tp) { if (tp->transport_path) maps_free(tp->transport_path); if (tp->wildcard_channel) vstring_free(tp->wildcard_channel); if (tp->wildcard_nexthop) vstring_free(tp->wildcard_nexthop); myfree((void *) tp); }
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 *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); }