X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=citadel%2Flocate_host.c;h=d964bc72e0f27972e1dca54708076ccaba031baf;hb=aa7365c86de8e26e796d3aa3fd605c85d8c26220;hp=e3840570e5dbfa1a0b9483bba929465e32922531;hpb=2113c82f75711605fc3f55fa8dba81f4dbc5bea0;p=citadel.git diff --git a/citadel/locate_host.c b/citadel/locate_host.c index e3840570e..d964bc72e 100644 --- a/citadel/locate_host.c +++ b/citadel/locate_host.c @@ -1,8 +1,15 @@ /* - * $Id$ - * * Functions which handle hostname/address lookups and resolution * + * Copyright (c) 1987-2011 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. */ #include "sysdep.h" @@ -19,6 +26,7 @@ #include #include #include +#include #include #include "citadel.h" #include "server.h" @@ -37,6 +45,22 @@ #include #endif +/** START:some missing macros on OpenBSD 3.9 */ +#ifndef NS_CMPRSFLGS +#define NS_CMPRSFLGS 0xc0 +#endif +#if !defined(NS_MAXCDNAME) && defined (MAXCDNAME) +#define NS_MAXCDNAME MAXCDNAME +#endif +#if !defined(NS_INT16SZ) && defined(INT16SZ) +#define NS_INT16SZ INT16SZ +#define NS_INT32SZ INT32SZ +#endif +#ifndef NS_GET16 +# define NS_GET16 GETSHORT +#endif + +/** END:some missing macros on OpenBSD 3.9 */ /* * Given an open client socket, return the host name and IP address at the other end. @@ -91,7 +115,7 @@ int rblcheck_backend(char *domain, char *txtbuf, int txtbufsize) { /* Make our DNS query. */ answer = fixedans; - if (CtdlThreadCheckStop()) + if (server_shutting_down) { if (txtbuf != NULL) { snprintf(txtbuf, txtbufsize, "System shutting down"); @@ -116,13 +140,13 @@ int rblcheck_backend(char *domain, char *txtbuf, int txtbufsize) { if( len == -1 ) { if (txtbuf != NULL) { snprintf(txtbuf, txtbufsize, - "Message rejected due to known spammer source IP address"); + "Message rejected due to known spammer source IP address"); } if (need_to_free_answer) free(answer); return(1); } } - if (CtdlThreadCheckStop()) + if (server_shutting_down) { if (txtbuf != NULL) snprintf(txtbuf, txtbufsize, "System shutting down"); @@ -139,7 +163,7 @@ int rblcheck_backend(char *domain, char *txtbuf, int txtbufsize) { * nameserver we're using. */ len = res_query(domain, C_IN, T_TXT, answer, PACKETSZ); - if (CtdlThreadCheckStop()) + if (server_shutting_down) { if (txtbuf != NULL) { snprintf(txtbuf, txtbufsize, "System shutting down"); @@ -154,7 +178,7 @@ int rblcheck_backend(char *domain, char *txtbuf, int txtbufsize) { { if (txtbuf != NULL) { snprintf(txtbuf, txtbufsize, - "Message rejected due to known spammer source IP address"); + "Message rejected due to known spammer source IP address"); } if (need_to_free_answer) free(answer); free(result); @@ -205,11 +229,17 @@ int rblcheck_backend(char *domain, char *txtbuf, int txtbufsize) { } *rp = '\0'; if (txtbuf != NULL) { - snprintf(txtbuf, txtbufsize, "%s", result); - } - /* Remove nonprintable characters */ - for (p=txtbuf; *p; ++p) { - if (!isprint(*p)) strcpy(p, p+1); + long len; + len = snprintf(txtbuf, txtbufsize, "%s", result); + + /* Remove nonprintable characters */ + for (p = txtbuf; *p != '\0'; p++) { + if (!isprint(*p)) { + memmove (p, + p + 1, + len - (p - txtbuf) - 1); + } + } } if (need_to_free_answer) free(answer); free(result); @@ -229,13 +259,11 @@ int rbl_check(char *message_to_spammer) int num_rbl; char rbl_domains[SIZ]; char txt_answer[1024]; - int ip_version = 4; strcpy(message_to_spammer, "ok"); if ((strchr(CC->cs_addr, '.')) && (!strchr(CC->cs_addr, ':'))) { int a1, a2, a3, a4; - ip_version = 4; sscanf(CC->cs_addr, "%d.%d.%d.%d", &a1, &a2, &a3, &a4); snprintf(tbuf, sizeof tbuf, "%d.%d.%d.%d.", a4, a3, a2, a1); @@ -247,8 +275,6 @@ int rbl_check(char *message_to_spammer) char workbuf[sizeof tbuf]; char *ptr; - ip_version = 6; - /* tedious code to expand and reverse an IPv6 address */ safestrncpy(tbuf, CC->cs_addr, sizeof tbuf); num_colons = haschar(tbuf, ':'); @@ -299,7 +325,7 @@ int rbl_check(char *message_to_spammer) if (rblcheck_backend(tbuf, txt_answer, sizeof txt_answer)) { strcpy(message_to_spammer, txt_answer); - CtdlLogPrintf(CTDL_INFO, "RBL: %s\n", txt_answer); + syslog(LOG_INFO, "RBL: %s\n", txt_answer); return(1); } }