84 #define VERIFY_BASE 31
104 #define event_time() verify_time
105 static unsigned long verify_time;
109 #define VERIFY_SENDER_ADDR_EPOCH() (event_time() / var_verify_sender_ttl)
114 #define STR(x) vstring_str(x)
115 #define LEN(x) VSTRING_LEN(x)
121 static VSTRING *verify_sender_buf;
135 msg_fatal(
"parameter %s: value \"%s\" must not start with '@'",
137 if ((my_at_domain = strchr(
var_verify_sender,
'@')) != 0 && my_at_domain[1] == 0)
138 msg_fatal(
"parameter %s: value \"%s\" must not end with '@'",
144 if (verify_sender_buf == 0) {
162 if (my_at_domain != 0)
171 if (my_at_domain != 0)
181 return (
STR(verify_sender_buf));
188 static VSTRING *time_indep_sender_buf;
190 unsigned long my_epoch;
191 unsigned long their_epoch;
193 char *their_at_domain;
200 return (*their_addr ? 0 :
"");
207 if (time_indep_sender_buf == 0) {
211 time_indep_sender_buf);
217 if ((my_at_domain = strchr(
STR(time_indep_sender_buf),
'@')) != 0)
218 base_len = my_at_domain -
STR(time_indep_sender_buf);
220 base_len =
LEN(time_indep_sender_buf);
227 if ((their_at_domain = strchr(their_addr,
'@')) == 0 && my_at_domain != 0)
229 if (their_at_domain != 0
230 && (my_at_domain == 0
239 if ((*cp !=
'@' && *cp != 0)
240 || (their_epoch == ULONG_MAX && errno == ERANGE))
243 if (their_epoch < my_epoch - 1 || their_epoch > my_epoch + 1)
251 if (their_addr[base_len] !=
'@' && their_addr[base_len] != 0)
254 return (
STR(time_indep_sender_buf));
271 int main(
int argc,
char **argv)
273 const char *verify_sender;
274 const char *valid_sender;
290 msg_fatal(
"usage: %s address_verify_sender address_verify_sender_ttl",
294 msg_fatal(
"bad time value: %s", argv[2]);
295 verify_time = time((time_t *) 0);
309 valid_sender :
"nope");
313 valid_sender :
"nope");
322 valid_sender :
"nope");
331 valid_sender :
"nope");
335 valid_sender :
"nope");
int main(int argc, char **argv)
VSTRING * rewrite_clnt_internal(const char *ruleset, const char *addr, VSTRING *result)
int conv_time(const char *strval, int *timval, int def_unit)
VSTRING * vstring_truncate(VSTRING *vp, ssize_t len)
#define MAIL_ATTR_RWR_LOCAL
#define strcasecmp_utf8(s1, s2)
int var_verify_sender_ttl
const char * valid_verify_sender_addr(const char *their_addr)
VSTRING * vstring_strcpy(VSTRING *vp, const char *src)
void mail_conf_read(void)
VSTRING * vstring_sprintf_append(VSTRING *vp, const char *format,...)
#define VERIFY_SENDER_ADDR_EPOCH()
VSTREAM * vstream_printf(const char *fmt,...)
VSTRING * vstring_alloc(ssize_t len)
unsigned long safe_strtoul(const char *start, char **end, int base)
NORETURN msg_fatal(const char *fmt,...)
int vstream_fflush(VSTREAM *stream)
const char * make_verify_sender_addr(void)
char * safe_ultostr(VSTRING *buf, unsigned long ulval, int base, int padlen, int padchar)
#define strncasecmp_utf8(s1, s2, l)
#define VAR_VERIFY_SENDER
void msg_vstream_init(const char *name, VSTREAM *vp)