/*
* Functions which handle hostname/address lookups and resolution
*
- * Copyright (c) 1987-2017 by the citadel.org team
+ * Copyright (c) 1987-2019 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.
#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
#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.
/* Make our DNS query. */
answer = fixedans;
- if (server_shutting_down)
- {
+ if (server_shutting_down) {
if (txtbuf != NULL) {
snprintf(txtbuf, txtbufsize, "System shutting down");
}
return(0);
}
- if (len > PACKETSZ)
- {
+ if (len > PACKETSZ) {
answer = malloc(len);
need_to_free_answer = 1;
len = res_query(domain, C_IN, T_A, answer, len);
return(1);
}
}
- if (server_shutting_down)
- {
+ if (server_shutting_down) {
if (txtbuf != NULL) {
snprintf(txtbuf, txtbufsize, "System shutting down");
}
* nameserver we're using.
*/
len = res_query(domain, C_IN, T_TXT, answer, PACKETSZ);
- if (server_shutting_down)
- {
+ if (server_shutting_down) {
if (txtbuf != NULL) {
snprintf(txtbuf, txtbufsize, "System shutting down");
}
}
/* Just in case there's no TXT record... */
- if (len ==(-1))
- {
+ if (len ==(-1)) {
if (txtbuf != NULL) {
snprintf(txtbuf, txtbufsize, "Message rejected due to known spammer source IP address");
}
/* Skip the header and the address we queried. */
cp = answer + sizeof( HEADER );
- while( *cp != '\0' )
- {
+ while( *cp != '\0' ) {
a = *cp++;
while( a-- )
cp++;
*/
rp = (u_char *) result;
rend = (u_char *) result + RESULT_SIZE - 1;
- while (cp < cend && rp < rend)
- {
+ while (cp < cend && rp < rend) {
a = *cp++;
- if( a != 0 )
- for (b = a; b > 0 && cp < cend && rp < rend; b--)
- {
- if (*cp == '\n' || *cp == '"' || *cp == '\\')
- {
+ if (a != 0) {
+ for (b = a; b > 0 && cp < cend && rp < rend; b--) {
+ if (*cp == '\n' || *cp == '"' || *cp == '\\') {
*rp++ = '\\';
}
*rp++ = *cp++;
}
+ }
}
*rp = '\0';
if (txtbuf != NULL) {
* 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;
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 */
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;
}
}
/* 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;
}