56 #define MX_OK(x) (strcasecmp(x, "OK") == 0) 63 #define MSG_BAD_MX(a,b) \ 65 ZE_MessageInfo(9, "%s BAD MXs for domain %s : %s (%s)", \ 66 CONNID_STR(priv->id), a, b, priv->peer_addr); \ 84 if (mail_host == NULL || strlen(mail_host) == 0)
95 if ((env = getenv(
"MXCHECKLEVEL")) != NULL) {
99 if (errno == 0 && i < 100)
110 #if _FFR_USE_MX_CACHE 117 if (res_cache_check(
"mx", mail_host, buf,
sizeof (buf))) {
147 memset(&mx, 0,
sizeof (mx));
154 for (i = 0; i < mx.
count; i++) {
163 memset(buf, 0,
sizeof (buf));
203 memset(&mx, 0,
sizeof (mx));
206 for (i = 0; i < mx.
count; i++) {
215 memset(buf, 0,
sizeof (buf));
247 if (reply == NULL || strlen(reply) == 0)
248 reply =
"ERROR:421:4.5.1:DNS problems... Try later !";
250 strlcpy(buf, reply,
sizeof (buf));
268 if (ti != 0 && tf > ti) {
269 static pthread_mutex_t
mutex = PTHREAD_MUTEX_INITIALIZER;
277 dt = (double) (tf - ti);
281 if ((++ns % 1000) == 0) {
283 "MX CHECK delay : nb=%d min=%5.3f mean=%5.3f max=%5.3f stddev=%5.3f ",
293 #if _FFR_USE_MX_CACHE 297 res_cache_add(
"mx", mail_host,
"xxx");
309 snprintf(logbuf,
sizeof (logbuf),
"%s %s",
"BAD MX -> ", mail_host);
void dns_free_hostarr(DNS_HOSTARR_T *mx)
void stats_inc(int, long)
bool check_policy(char *prefix, char *key, char *buf, size_t size, bool cdef)
int jsmfi_setreply(SMFICTX *, char *, char *, char *)
#define MUTEX_UNLOCK(mutex)
int dns_get_mx(char *domain, DNS_HOSTARR_T *mx)
#define MUTEX_LOCK(mutex)
void zeKStatsReset(kstats_T *)
double zeKMin(kstats_T *s)
#define CF_DEFAULT_BAD_MX_REPLY
long zeStr2long(char *s, int *error, long dval)
void zeKStatsUpdate(kstats_T *, double)
#define IS_UNKNOWN(class)
DNS_HOST_T host[MAX_HOST]
#define ZE_MessageInfo(level,...)
#define KSTATS_INITIALIZER
char * cf_get_str(int id)
int dns_get_a(char *domain, DNS_HOSTARR_T *a)
#define CONNID_STR(connid)
double zeKMean(kstats_T *s)
int check_sender_mx(SMFICTX *ctx, char *mail_host)
double zeKMax(kstats_T *s)
double zeKStdDev(kstats_T *s)
void log_msg_context(SMFICTX *ctx, char *why)
int jc_string2reply(smtp_reply_T *, char *)