33 #define RATE_LOG_LEVEL 12 39 #define GET_RESOLVE_COEF(resolve, coef) \ 53 case RESOLVE_FORGED: \ 56 case RESOLVE_TEMPFAIL: \ 86 static pthread_mutex_t
mutex = PTHREAD_MUTEX_INITIALIZER;
89 char *reply = NULL, *why = NULL;
134 reply =
STRNULL(reply,
"DNS address resolution error");
135 why =
STRNULL(why,
"DNS IP address resolution error");
137 snprintf(s,
sizeof (s),
"%s : %d", why, nb);
181 "%-12s ConnRate : %-20s %4d ip_class=[%02X - %s]",
196 if (vmax > 0 && n > vmax)
203 snprintf(s,
sizeof (s),
"%s : %d [%02X - %s]",
242 "%-12s MsgsRate : %-20s %4d ip_class=[%02X - %s]",
257 if (vmax > 0 && n > vmax)
263 snprintf(s,
sizeof (s),
"%s : %d [%02X - %s]",
276 bool addrPlusEmail =
FALSE;
279 if ((sEnv = getenv(
"FROMRATEFULL")) != NULL) {
281 addrPlusEmail =
TRUE;
296 "%-12s MsgsRateFrom : %-20s %4d %s ip_class=[%02X - %s]",
305 memset(fBuf, 0,
sizeof (fBuf));
307 if (strlen(fBuf) == 0)
308 strlcpy(fBuf,
"nullsender",
sizeof (fBuf));
314 if (vmax > 0 && fromRate > vmax)
320 snprintf(s,
sizeof (s),
"%s : %d [%02X - %s]",
337 "%-12s MsgsRateAuth : %-20s %4d %s ip_class=[%02X - %s]",
346 memset(fBuf, 0,
sizeof (fBuf));
348 if (strlen(fBuf) == 0)
349 strlcpy(fBuf,
"nullsender",
sizeof (fBuf));
355 if (vmax > 0 && authRate > vmax)
361 snprintf(s,
sizeof (s),
"%s : %d [%02X - %s]",
396 "%-12s MsgCount : %-20s %4d ip_class=[%02X - %s]",
411 if (vmax > 0 && nb_from > vmax)
418 snprintf(s,
sizeof (s),
"%s : %s : %d [%02X - %s]",
465 "%-12s RcptRate : %-20s %4d ip_class=[%02X - %s]",
480 if (vmax > 0 && rate > vmax)
487 snprintf(s,
sizeof (s),
"%s : %s : %d [%02X - %s]",
504 bool addrPlusEmail =
FALSE;
507 if ((sEnv = getenv(
"FROMRATEFULL")) != NULL) {
509 addrPlusEmail =
TRUE;
525 "%-12s RcptRateFrom : %-20s %4d %s ip_class=[%02X - %s]",
534 memset(fBuf, 0,
sizeof (fBuf));
536 if (strlen(fBuf) == 0)
537 strlcpy(fBuf,
"nullsender",
sizeof (fBuf));
543 if (vmax > 0 && rate > vmax)
550 snprintf(s,
sizeof (s),
"%s : %s : %d [%02X - %s]",
573 "%-12s RcptRateAuth : %-20s %4d %s ip_class=[%02X - %s]",
582 memset(fBuf, 0,
sizeof (fBuf));
584 if (strlen(fBuf) == 0)
585 strlcpy(fBuf,
"nullsender",
sizeof (fBuf));
591 if (vmax > 0 && rate > vmax)
598 snprintf(s,
sizeof (s),
"%s : %s : %d [%02X - %s]",
638 "%-12s RcptCount : %-20s %4d ip_class=[%02X - %s]",
653 if (vmax > 0 && (nb_rcpt * COEF) > vmax)
659 snprintf(s,
sizeof (s),
"%s : %s : %d [%02X - %s]",
677 memset(fBuf, 0,
sizeof (fBuf));
679 if (strlen(fBuf) == 0)
680 strlcpy(fBuf,
"nullsender",
sizeof (fBuf));
686 if (vmax > 0 && nb_rcpt > vmax)
692 snprintf(s,
sizeof (s),
"%s : %s : %d [%02X - %s]",
736 "%-12s Open Connections : %-20s %4d ip_class=[%02X - %s]",
741 "%-12s Open Connections : %-20s %4d ip_class=[%02X - %s]",
760 if (vmax > 0 && nb > vmax)
770 snprintf(s,
sizeof (s),
"%s : %s : %d [%02X - %s]",
811 "%-12s Empty Connections : %-20s %4d ip_class=[%02X - %s]",
816 "%-12s Empty Connections : %-20s %4d ip_class=[%02X - %s]",
869 "%-12s Bad Recipients : %-20s %4d ip_class=[%02X - %s]",
874 "%-12s Bad Recipients : %-20s %4d ip_class=[%02X - %s]",
934 "%-12s Bad Recipients : %-20s %4d ip_class=[%02X - %s]",
939 "%-12s Bad Recipients : %-20s %4d ip_class=[%02X - %s]",
952 snprintf(s,
sizeof (s),
"%s : %s : %d [%02X - %s]",
977 char *why =
"bad behaviour in previous MAIL command";
1023 "%-12s Bad Recipients : %-20s %4d ip_class=[%02X - %s]",
1035 snprintf(s,
sizeof (s),
"%s : %s [%s]",
1056 if (ctx == NULL || priv == NULL)
#define MSG_SHORT_SINGLE_MESSAGE
#define MSG_TOO_MUCH_OPEN
#define CF_CHECK_RESOLVE_FAIL
#define GET_RESOLVE_COEF(resolve, coef)
#define CF_CHECK_EMPTY_CONNECTIONS
sfsistat check_nb_badrcpts(SMFICTX *ctx)
#define CF_CHECK_SPAMTRAP_HISTORY
void stats_inc(int, long)
#define MSG_TOO_MUCH_EMPTY
bool PolicyLookupEmailAddr(char *prefix, char *key, char *buf, size_t size)
#define STAT_SINGLE_MESSAGE
int jsmfi_setreply(SMFICTX *, char *, char *, char *)
bool check_host_policy(char *prefix, char *addr, char *name, char *class, char *buf, size_t size, bool cdef)
#define CF_MAX_EMPTY_CONN
#define MUTEX_UNLOCK(mutex)
#define CF_CHECK_RCPT_RATE
#define MSG_SINGLE_MESSAGE
#define MUTEX_LOCK(mutex)
#define CF_CHECK_CONN_RATE
#define MSG_SHORT_TOO_MUCH_BADRCPT
bool zeStrRegex(char *, char *, long *, long *, bool)
char * extract_email_address(char *, char *, size_t)
#define MSG_TOO_MUCH_RCPT
sfsistat check_empty_connections(SMFICTX *ctx)
sfsistat check_spamtrap(SMFICTX *ctx)
#define CF_MAX_BAD_RESOLVE
#define CF_MAX_FROM_RCPT_RATE
sfsistat check_connrate(SMFICTX *ctx)
#define MSG_SHORT_RESOLVE_FORGED
#define MSG_SHORT_MSG_RATE
#define MSG_TOO_MUCH_MSGS
sfsistat check_msgrate(SMFICTX *ctx)
long zeStr2long(char *s, int *error, long dval)
#define MSG_TOO_MUCH_BADRCPT
#define CF_MAX_FROM_MSG_RATE
#define MSG_SHORT_RESOLVE_FAIL
#define IS_UNKNOWN(class)
#define MSG_SHORT_RCPT_RATE
#define ZE_MessageInfo(level,...)
sfsistat check_rcptrate(SMFICTX *ctx)
#define STAT_RESOLVE_FAIL
sfsistat check_msgcount(SMFICTX *ctx)
#define MSG_SHORT_TOO_MUCH_EMPTY
sfsistat validate_connection(SMFICTX *ctx)
#define MSG_SHORT_CONN_RATE
#define CF_CHECK_OPEN_CONNECTIONS
#define CTX_NETCLASS_LABEL(priv)
int smtprate_check(int, char *, time_t)
int connopen_check_host(char *, char *, int)
#define CF_CHECK_BADRCPTS
#define CONNID_STR(connid)
sfsistat check_dns_resolve(SMFICTX *ctx)
#define MSG_RESOLVE_FORGED
sfsistat check_single_message(SMFICTX *ctx)
int update_nb_badrcpts(SMFICTX *)
int livehistory_check_host(char *, time_t, int)
int livehistory_add_entry(char *, time_t, int, int)
#define MSG_SHORT_TOO_MUCH_OPEN
void log_msg_context(SMFICTX *ctx, char *why)
#define CF_CHECK_MSG_RATE
sfsistat check_open_connections(SMFICTX *ctx)
#define CF_CHECK_RESOLVE_FORGED
#define STAT_RESOLVE_FORGED
sfsistat check_rcptcount(SMFICTX *ctx)