75 static time_t last_expire;
101 #define STR vstring_str
105 if (addr ==
STR(result))
106 msg_panic(
"rewrite_clnt: result clobbers input");
111 if (time((time_t *) 0) < last_expire
112 && strcmp(addr,
STR(last_addr)) == 0
113 && strcmp(rule,
STR(last_rule)) == 0) {
116 msg_info(
"rewrite_clnt: cached: %s: %s -> %s",
126 if (rewrite_clnt_stream == 0)
146 if (
msg_verbose || count > 1 || (errno && errno != EPIPE && errno != ENOENT))
147 msg_warn(
"problem talking to service %s: %m",
151 msg_info(
"rewrite_clnt: %s: %s -> %s",
154 if (server_flags != 0)
168 last_expire = time((time_t *) 0) + 30;
204 msg_fatal(
"usage: %s [-v] [rule address...]", myname);
207 static void rewrite(
char *rule,
char *addr,
VSTRING *reply)
216 int main(
int argc,
char **argv)
230 while ((ch =
GETOPT(argc, argv,
"v")) > 0) {
243 if ((rule = argv[optind++]) == 0)
245 if ((addr = argv[optind++]) == 0)
247 rewrite(rule, addr, reply);
254 || *(rule =
STR(buffer)) == 0)
256 rewrite(rule, addr, reply);
CLNT_STREAM * rewrite_clnt_stream
#define vstring_fgets_nonl(s, p)
VSTREAM * clnt_stream_access(CLNT_STREAM *clnt_stream)
NORETURN msg_panic(const char *fmt,...)
int main(int argc, char **argv)
VSTRING * rewrite_clnt_internal(const char *ruleset, const char *addr, VSTRING *result)
VSTRING * unquote_822_local(VSTRING *dst, const char *mbox)
#define RECV_ATTR_INT(name, val)
VSTRING * vstring_strcpy(VSTRING *vp, const char *src)
void mail_conf_read(void)
CLNT_STREAM * clnt_stream_create(const char *class, const char *service, int timeout, int ttl)
VSTREAM * vstream_printf(const char *fmt,...)
void msg_warn(const char *fmt,...)
VSTRING * vstring_alloc(ssize_t len)
char * var_rewrite_service
NORETURN msg_fatal(const char *fmt,...)
int vstream_fflush(VSTREAM *stream)
#define GETOPT(argc, argv, str)
#define quote_822_local(dst, src)
VSTRING * vstring_free(VSTRING *vp)
char * split_at(char *string, int delimiter)
void msg_vstream_init(const char *name, VSTREAM *vp)
void clnt_stream_recover(CLNT_STREAM *clnt_stream)
VSTRING * rewrite_clnt(const char *rule, const char *addr, VSTRING *result)
#define SEND_ATTR_STR(name, val)
#define MAIL_CLASS_PRIVATE
#define RECV_ATTR_STR(name, val)
void msg_info(const char *fmt,...)