From: Art Cancro Date: Sat, 6 Jan 2024 00:01:38 +0000 (-0500) Subject: The damn thing finished. Let's see what it did. X-Git-Tag: v997~23 X-Git-Url: https://code.citadel.org/?p=citadel.git;a=commitdiff_plain;h=753a8e81fba0a7b2ec9a0454ddaf3b8e0035070f The damn thing finished. Let's see what it did. --- diff --git a/citadel/server/locate_host.c b/citadel/server/locate_host.c index 635862f41..5ed4c3ea1 100644 --- a/citadel/server/locate_host.c +++ b/citadel/server/locate_host.c @@ -1,6 +1,6 @@ // Functions which handle hostname/address lookups and resolution // -// Copyright (c) 1987-2023 by the citadel.org team +// Copyright (c) 1987-2024 by the citadel.org team // // This program is open source software. Use, duplication, or disclosure // is subject to the terms of the GNU General Public License, version 3. @@ -28,7 +28,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 @@ -42,15 +42,12 @@ #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. - * (IPv4 and IPv6 compatible) - */ -void locate_host(char *tbuf, size_t n, char *abuf, size_t na, int client_socket) -{ +// Given an open client socket, return the host name and IP address at the other end. +// (IPv4 and IPv6 compatible) +void locate_host(char *tbuf, size_t n, char *abuf, size_t na, int client_socket) { struct sockaddr_in6 clientaddr; unsigned int addrlen = sizeof(clientaddr); @@ -61,11 +58,10 @@ void locate_host(char *tbuf, size_t n, char *abuf, size_t na, int client_socket) getnameinfo((struct sockaddr *)&clientaddr, addrlen, tbuf, n, NULL, 0, 0); getnameinfo((struct sockaddr *)&clientaddr, addrlen, abuf, na, NULL, 0, NI_NUMERICHOST); - /* Convert IPv6-mapped IPv4 addresses back to traditional dotted quad. - * - * Other code here, such as the RBL check, will expect IPv4 addresses to be represented - * as dotted-quad, even if they come in over a hybrid IPv6/IPv4 socket. - */ + // Convert IPv6-mapped IPv4 addresses back to traditional dotted quad. + // + // Other code here, such as the RBL check, will expect IPv4 addresses to be represented + // as dotted-quad, even if they come in over a hybrid IPv6/IPv4 socket. if ( (strlen(abuf) > 7) && (!strncasecmp(abuf, "::ffff:", 7)) ) { if (!strcmp(abuf, tbuf)) strcpy(tbuf, &tbuf[7]); strcpy(abuf, &abuf[7]); @@ -73,10 +69,8 @@ void locate_host(char *tbuf, size_t n, char *abuf, size_t na, int client_socket) } -/* - * RBL check written by Edward S. Marshall [http://rblcheck.sourceforge.net] - */ -#define RESULT_SIZE 4096 /* What is the longest result text we support? */ +// RBL check written by Edward S. Marshall [http://rblcheck.sourceforge.net] +#define RESULT_SIZE 4096 // What is the longest result text we support? int rblcheck_backend(char *domain, char *txtbuf, int txtbufsize) { int a, b, c; char *result = NULL; @@ -91,12 +85,12 @@ int rblcheck_backend(char *domain, char *txtbuf, int txtbufsize) { char *p = NULL; static int res_initted = 0; - if (!res_initted) { /* only have to do this once */ + if (!res_initted) { // only have to do this once res_init(); res_initted = 1; } - /* Make our DNS query. */ + // Make our DNS query. answer = fixedans; if (server_shutting_down) { if (txtbuf != NULL) { @@ -106,7 +100,7 @@ int rblcheck_backend(char *domain, char *txtbuf, int txtbufsize) { } len = res_query(domain, C_IN, T_A, answer, PACKETSZ); - /* Was there a problem? If so, the domain doesn't exist. */ + // Was there a problem? If so, the domain doesn't exist. if (len == -1) { if (txtbuf != NULL) { strcpy(txtbuf, ""); @@ -137,10 +131,9 @@ int rblcheck_backend(char *domain, char *txtbuf, int txtbufsize) { result = (char *) malloc(RESULT_SIZE); result[0] = '\0'; - /* Make another DNS query for textual data; this shouldn't - * be a performance hit, since it'll now be cached at the - * nameserver we're using. - */ + // Make another DNS query for textual data; this shouldn't + // be a performance hit, since it'll now be cached at the + // nameserver we're using. len = res_query(domain, C_IN, T_TXT, answer, PACKETSZ); if (server_shutting_down) { if (txtbuf != NULL) { @@ -151,7 +144,7 @@ int rblcheck_backend(char *domain, char *txtbuf, int txtbufsize) { return (1); } - /* Just in case there's no TXT record... */ + // Just in case there's no TXT record... if (len ==(-1)) { if (txtbuf != NULL) { snprintf(txtbuf, txtbufsize, "Message rejected due to known spammer source IP address"); @@ -161,7 +154,7 @@ int rblcheck_backend(char *domain, char *txtbuf, int txtbufsize) { return(1); } - /* Skip the header and the address we queried. */ + // Skip the header and the address we queried. cp = answer + sizeof( HEADER ); while( *cp != '\0' ) { a = *cp++; @@ -169,24 +162,22 @@ int rblcheck_backend(char *domain, char *txtbuf, int txtbufsize) { cp++; } - /* This seems to be a bit of magic data that we need to - * skip. I wish there were good online documentation - * for programming for libresolv, so I'd know what I'm - * skipping here. Anyone reading this, feel free to - * enlighten me. - */ + // This seems to be a bit of magic data that we need to + // skip. I wish there were good online documentation + // for programming for libresolv, so I'd know what I'm + // skipping here. Anyone reading this, feel free to + // enlighten me. cp += 1 + NS_INT16SZ + NS_INT32SZ; - /* Skip the type, class and ttl. */ + // Skip the type, class and ttl. cp += (NS_INT16SZ * 2) + NS_INT32SZ; - /* Get the length and end of the buffer. */ + // Get the length and end of the buffer. NS_GET16(c, cp); cend = cp + c; - /* Iterate over any multiple answers we might have. In - * this context, it's unlikely, but anyway. - */ + // Iterate over any multiple answers we might have. In + // this context, it's unlikely, but anyway. rp = (u_char *) result; rend = (u_char *) result + RESULT_SIZE - 1; while (cp < cend && rp < rend) { @@ -205,7 +196,7 @@ int rblcheck_backend(char *domain, char *txtbuf, int txtbufsize) { long len; len = snprintf(txtbuf, txtbufsize, "%s", result); - /* Remove nonprintable characters */ + // Remove nonprintable characters for (p = txtbuf; *p != '\0'; p++) { if (!isprint(*p)) { memmove (p, @@ -220,12 +211,9 @@ 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 *cs_addr, char *message_to_spammer) -{ +// 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 *cs_addr, char *message_to_spammer) { char tbuf[256] = ""; int suffix_pos = 0; int rbl; @@ -238,7 +226,7 @@ int rbl_check(char *cs_addr, char *message_to_spammer) rc = 0; strcpy(message_to_spammer, "ok"); - gettimeofday(&tx_start, NULL); /* start a stopwatch for performance timing */ + gettimeofday(&tx_start, NULL); // start a stopwatch for performance timing if ((strchr(cs_addr, '.')) && (!strchr(cs_addr, ':'))) { int a1, a2, a3, a4; @@ -253,17 +241,17 @@ int rbl_check(char *cs_addr, char *message_to_spammer) char workbuf[sizeof tbuf]; char *ptr; - /* tedious code to expand and reverse an IPv6 address */ + // tedious code to expand and reverse an IPv6 address safestrncpy(tbuf, cs_addr, sizeof tbuf); num_colons = haschar(tbuf, ':'); if ((num_colons < 2) || (num_colons > 7)) - goto finish_rbl; /* badly formed address */ + goto finish_rbl; // badly formed address - /* expand the "::" shorthand */ + // expand the "::" shorthand while (num_colons < 7) { ptr = strstr(tbuf, "::"); if (!ptr) - goto finish_rbl; /* badly formed address */ + goto finish_rbl; // badly formed address ++ptr; strcpy(workbuf, ptr); @@ -272,7 +260,7 @@ int rbl_check(char *cs_addr, char *message_to_spammer) ++num_colons; } - /* expand to 32 hex characters with no colons */ + // expand to 32 hex characters with no colons strcpy(workbuf, tbuf); strcpy(tbuf, "00000000000000000000000000000000"); for (i=0; i<8; ++i) { @@ -284,7 +272,7 @@ int rbl_check(char *cs_addr, char *message_to_spammer) goto finish_rbl; } - /* now reverse it and add dots */ + // now reverse it and add dots strcpy(workbuf, tbuf); for (i=0; i<32; ++i) { tbuf[i*2] = workbuf[31-i]; @@ -294,17 +282,17 @@ int rbl_check(char *cs_addr, char *message_to_spammer) suffix_pos = 64; } else { - goto finish_rbl; /* unknown address format */ + goto finish_rbl; // unknown address format } - /* See if we have any RBL domains configured */ + // See if we have any RBL domains configured num_rbl = get_hosts(rbl_domains, "rbl"); if (num_rbl < 1) { goto finish_rbl; } - /* Try all configured RBL's */ + // Try all configured RBL's for (rbl=0; rbl