38 #include <sys/socket.h>
56 static char *psc_teaser_greeting;
61 static void psc_whitelist_non_dnsbl(
PSC_STATE *state)
103 static void psc_early_event(
int event,
void *context)
105 const char *myname =
"psc_early_event";
113 msg_info(
"%s: sq=%d cq=%d event %d on smtp socket %d from [%s]:%s flags=%s",
120 psc_early_event, context);
164 #define PSC_DNSBL_FORMAT \
165 "%s 5.7.1 Service unavailable; client [%s] blocked using %s\r\n"
166 #define NO_DNSBL_SCORE INT_MAX
176 psc_whitelist_non_dnsbl(state);
183 msg_info(
"DNSBL rank %d for [%s]:%s",
206 msg_panic(
"%s: unknown dnsbl action value %d",
232 read_buf,
sizeof(read_buf) - 1, MSG_PEEK)) <= 0) {
244 read_buf[read_count] = 0;
245 escape(psc_escape_buf, read_buf, read_count);
246 msg_info(
"PREGREET %d after %s from [%s]:%s: %.100s", read_count,
270 msg_panic(
"%s: unknown pregreet action value %d",
297 static void psc_early_dnsbl_event(
int unused_event,
void *context)
299 const char *myname =
"psc_early_dnsbl_event";
312 psc_whitelist_non_dnsbl(state);
329 const char *myname =
"psc_early_tests";
341 && psc_teaser_greeting != 0
PSC_CLIENT_INFO * client_info
#define PSC_STATE_FLAG_DNSBL_TODO
char * mystrdup(const char *str)
#define PSC_STATE_FLAG_BYTINDX_PASS(tindx)
time_t expire_time[PSC_TINDX_COUNT]
#define PSC_STATE_FLAG_BYTINDX_TODO(tindx)
#define PSC_STATE_MASK_ANY_FAIL
#define PSC_FAIL_SESSION_STATE(state, bits)
NORETURN msg_panic(const char *fmt,...)
char * var_psc_pregr_banner
#define PSC_CLEAR_EVENT_REQUEST(fd, time_act, context)
#define PSC_STATE_MASK_EARLY_DONE
VSTRING * escape(VSTRING *, const char *, ssize_t)
#define PSC_STATE_FLAG_DNSBL_DONE
int var_psc_dnsbl_wthresh
#define PSC_READ_BUF_SIZE
int psc_check_queue_length
#define PSC_UNFAIL_SESSION_STATE(state, bits)
#define PSC_STATE_FLAG_BYTINDX_DONE(tindx)
void psc_early_init(void)
int psc_dnsbl_request(const char *, void(*)(int, void *), void *)
#define PSC_BEGIN_TESTS(state, name)
#define PSC_READ_EVENT_REQUEST(fd, action, context, timeout)
#define PSC_CLIENT_ADDR_PORT(state)
#define PSC_STATE_MASK_SMTPD_TODO
#define PSC_ENFORCE_SESSION_STATE(state, reply)
void psc_conclude(PSC_STATE *)
int psc_dnsbl_retrieve(const char *, const char **, int, int *)
#define PSC_STATE_FLAG_DNSBL_FAIL
VSTRING * vstring_alloc(ssize_t len)
void psc_hangup_event(PSC_STATE *)
#define PSC_STATE_MASK_PREGR_FAIL_DONE
#define PSC_STATE_FLAG_PREGR_PASS
VSTRING * vstring_sprintf(VSTRING *vp, const char *format,...)
#define PSC_STATE_FLAG_PREGR_DONE
#define PSC_DROP_SESSION_STATE(state, reply)
#define PSC_STATE_FLAG_NOFORWARD
void psc_early_tests(PSC_STATE *state)
char * psc_format_delta_time(VSTRING *, struct timeval, DELTA_TIME *)
#define PSC_STATE_FLAGS_TODO_TO_PASS(todo_flags)
void psc_smtpd_tests(PSC_STATE *)
#define PSC_STATE_MASK_EARLY_TODO
time_t event_request_timer(EVENT_NOTIFY_TIME_FN callback, void *context, int delay)
#define PSC_STATE_FLAG_PREGR_FAIL
#define PSC_PASS_SESSION_STATE(state, what, bits)
#define vstream_fileno(vp)
#define PSC_STATE_FLAG_DNSBL_PASS
const char * psc_test_name(int)
#define PSC_STATE_FLAGS_TODO_TO_DONE(todo_flags)
#define PSC_EFF_GREET_WAIT
int psc_post_queue_length
#define PSC_STATE_MASK_SMTPD_PASS
struct timeval start_time
const char * psc_print_state_flags(int, const char *)
VSTREAM * smtp_client_stream
#define PSC_STATE_FLAG_PREGR_TODO
void msg_info(const char *fmt,...)