From a652f0438fb7047bd82591f3f619a21d6e85d2dd Mon Sep 17 00:00:00 2001 From: Art Cancro Date: Mon, 8 Jan 2018 19:00:21 -0500 Subject: [PATCH] Ended the use of the CC macro in rbl_check() , made the address to check a calling parameter --- citadel/locate_host.c | 28 +++++++++++++++------------- citadel/locate_host.h | 2 +- citadel/modules/smtp/serv_smtp.c | 6 +++--- 3 files changed, 19 insertions(+), 17 deletions(-) diff --git a/citadel/locate_host.c b/citadel/locate_host.c index 3c742c2e2..7bab2e4d0 100644 --- a/citadel/locate_host.c +++ b/citadel/locate_host.c @@ -1,7 +1,7 @@ /* * Functions which handle hostname/address lookups and resolution * - * Copyright (c) 1987-2017 by the citadel.org team + * Copyright (c) 1987-2018 by the citadel.org team * * This program is open source software; you can redistribute it and/or modify * it under the terms of the GNU General Public License, version 3. @@ -34,7 +34,7 @@ #include "domain.h" #include "locate_host.h" -/** START:some missing macros on OpenBSD 3.9 */ +/* START: some missing macros on OpenBSD 3.9 */ #ifndef NS_CMPRSFLGS #define NS_CMPRSFLGS 0xc0 #endif @@ -48,8 +48,8 @@ #ifndef NS_GET16 # define NS_GET16 GETSHORT #endif +/* END: some missing macros on OpenBSD 3.9 */ -/** END:some missing macros on OpenBSD 3.9 */ /* * Given an open client socket, return the host name and IP address at the other end. @@ -238,7 +238,7 @@ int rblcheck_backend(char *domain, char *txtbuf, int txtbufsize) { * Check to see if the client host is on some sort of spam list (RBL) * If spammer, returns nonzero and places reason in 'message_to_spammer' */ -int rbl_check(char *message_to_spammer) +int rbl_check(char *cs_addr, char *message_to_spammer) { char tbuf[256] = ""; int suffix_pos = 0; @@ -254,21 +254,21 @@ int rbl_check(char *message_to_spammer) strcpy(message_to_spammer, "ok"); gettimeofday(&tx_start, NULL); /* start a stopwatch for performance timing */ - if ((strchr(CC->cs_addr, '.')) && (!strchr(CC->cs_addr, ':'))) { + if ((strchr(cs_addr, '.')) && (!strchr(cs_addr, ':'))) { int a1, a2, a3, a4; - sscanf(CC->cs_addr, "%d.%d.%d.%d", &a1, &a2, &a3, &a4); + sscanf(cs_addr, "%d.%d.%d.%d", &a1, &a2, &a3, &a4); snprintf(tbuf, sizeof tbuf, "%d.%d.%d.%d.", a4, a3, a2, a1); suffix_pos = strlen(tbuf); } - else if ((!strchr(CC->cs_addr, '.')) && (strchr(CC->cs_addr, ':'))) { + else if ((!strchr(cs_addr, '.')) && (strchr(cs_addr, ':'))) { int num_colons = 0; int i = 0; char workbuf[sizeof tbuf]; char *ptr; /* tedious code to expand and reverse an IPv6 address */ - safestrncpy(tbuf, CC->cs_addr, sizeof tbuf); + safestrncpy(tbuf, cs_addr, sizeof tbuf); num_colons = haschar(tbuf, ':'); if ((num_colons < 2) || (num_colons > 7)) goto finish_rbl; /* badly formed address */ @@ -324,7 +324,7 @@ int rbl_check(char *message_to_spammer) if (rblcheck_backend(tbuf, txt_answer, sizeof txt_answer)) { strcpy(message_to_spammer, txt_answer); - syslog(LOG_INFO, "RBL: %s\n", txt_answer); + syslog(LOG_INFO, "RBL: %s %s", cs_addr, txt_answer); rc = 1; } } @@ -332,10 +332,12 @@ finish_rbl: /* How long did this transaction take? */ gettimeofday(&tx_finish, NULL); - syslog(LOG_WARNING, "RBL [%ld.%06ld] %s", - ((tx_finish.tv_sec*1000000 + tx_finish.tv_usec) - (tx_start.tv_sec*1000000 + tx_start.tv_usec)) / 1000000, - ((tx_finish.tv_sec*1000000 + tx_finish.tv_usec) - (tx_start.tv_sec*1000000 + tx_start.tv_usec)) % 1000000, - (rc)?"Found":"none Found"); + syslog(LOG_WARNING, "rbl: %s [%ld.%06ld] %s", + cs_addr, + ((tx_finish.tv_sec*1000000 + tx_finish.tv_usec) - (tx_start.tv_sec*1000000 + tx_start.tv_usec)) / 1000000, + ((tx_finish.tv_sec*1000000 + tx_finish.tv_usec) - (tx_start.tv_sec*1000000 + tx_start.tv_usec)) % 1000000, + (rc)?"found":"none found" + ); return rc; } diff --git a/citadel/locate_host.h b/citadel/locate_host.h index 10039b996..68f113f50 100644 --- a/citadel/locate_host.h +++ b/citadel/locate_host.h @@ -1,4 +1,4 @@ void locate_host(char *tbuf, size_t n, char *abuf, size_t na, int client_socket); -int rbl_check(char *message_to_spammer); +int rbl_check(char *cs_addr, char *message_to_spammer); int hostname_to_dotted_quad(char *addr, char *host); int rblcheck_backend(char *domain, char *txtbuf, int txtbufsize); diff --git a/citadel/modules/smtp/serv_smtp.c b/citadel/modules/smtp/serv_smtp.c index fc6814f60..62bbe941c 100644 --- a/citadel/modules/smtp/serv_smtp.c +++ b/citadel/modules/smtp/serv_smtp.c @@ -20,7 +20,7 @@ * The VRFY and EXPN commands have been removed from this implementation * because nobody uses these commands anymore, except for spammers. * - * Copyright (c) 1998-2015 by the citadel.org team + * Copyright (c) 1998-2018 by the citadel.org team * * This program is open source software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 3. @@ -159,7 +159,7 @@ void smtp_greeting(int is_msa) * addresses immediately instead of after they execute a RCPT */ if ( (CtdlGetConfigInt("c_rbl_at_greeting")) && (sSMTP->is_msa == 0) ) { - if (rbl_check(message_to_spammer)) { + if (rbl_check(CC->cs_addr, message_to_spammer)) { if (server_shutting_down) cprintf("421 %s\r\n", message_to_spammer); else @@ -739,7 +739,7 @@ void smtp_rcpt(long offset, long flags) if ( (!CCC->logged_in) /* Don't RBL authenticated users */ && (!sSMTP->is_lmtp) ) { /* Don't RBL LMTP clients */ if (CtdlGetConfigInt("c_rbl_at_greeting") == 0) { /* Don't RBL again if we already did it */ - if (rbl_check(message_to_spammer)) { + if (rbl_check(CC->cs_addr, message_to_spammer)) { if (server_shutting_down) cprintf("421 %s\r\n", message_to_spammer); else -- 2.30.2