Orthodontic adjustments (moved some braces around)
[citadel.git] / citadel / locate_host.c
index 26c844024515bd2c354a4d46ff358c1c54fad74a..64879eefbb797115d5037b89572205a702977611 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Functions which handle hostname/address lookups and resolution
  *
- * Copyright (c) 1987-2011 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 <netdb.h>
 #include <netinet/in.h>
 #include <arpa/inet.h>
-
 #include <libcitadel.h>
 
-
 #include "context.h"
 #ifdef HAVE_RESOLV_H
 #include <arpa/nameser.h>
@@ -36,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
@@ -50,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.
@@ -106,8 +104,7 @@ int rblcheck_backend(char *domain, char *txtbuf, int txtbufsize) {
 
        /* Make our DNS query. */
        answer = fixedans;
-       if (server_shutting_down)
-       {
+       if (server_shutting_down) {
                if (txtbuf != NULL) {
                        snprintf(txtbuf, txtbufsize, "System shutting down");
                }
@@ -123,39 +120,35 @@ int rblcheck_backend(char *domain, char *txtbuf, int txtbufsize) {
                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);
                if( len == -1 ) {
                        if (txtbuf != NULL) {
-                               snprintf(txtbuf, txtbufsize,
-                                        "Message rejected due to known spammer source IP address");
+                               snprintf(txtbuf, txtbufsize, "Message rejected due to known spammer source IP address");
                        }
                        if (need_to_free_answer) free(answer);
                        return(1);
                }
        }
-       if (server_shutting_down)
-       {
-               if (txtbuf != NULL)
+       if (server_shutting_down) {
+               if (txtbuf != NULL) {
                        snprintf(txtbuf, txtbufsize, "System shutting down");
+               }
                if (need_to_free_answer) free(answer);
                return (1);
        }
 
        result = (char *) malloc(RESULT_SIZE);
-       result[ 0 ] = '\0';
-
+       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.
         */
        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");
                }
@@ -165,11 +158,9 @@ int rblcheck_backend(char *domain, char *txtbuf, int txtbufsize) {
        }
 
        /* 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");
+                       snprintf(txtbuf, txtbufsize, "Message rejected due to known spammer source IP address");
                }
                if (need_to_free_answer) free(answer);
                free(result);
@@ -178,8 +169,7 @@ int rblcheck_backend(char *domain, char *txtbuf, int txtbufsize) {
 
        /* Skip the header and the address we queried. */
        cp = answer + sizeof( HEADER );
-       while( *cp != '\0' )
-       {
+       while( *cp != '\0' ) {
                a = *cp++;
                while( a-- )
                        cp++;
@@ -205,18 +195,16 @@ int rblcheck_backend(char *domain, char *txtbuf, int txtbufsize) {
         */
        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) {
@@ -242,7 +230,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;
@@ -258,21 +246,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 */
@@ -296,11 +284,11 @@ int rbl_check(char *message_to_spammer)
                for (i=0; i<8; ++i) {
                        char tokbuf[5];
                        extract_token(tokbuf, workbuf, i, ':', sizeof tokbuf);
-
                        memcpy(&tbuf[ (i*4) + (4-strlen(tokbuf)) ], tokbuf, strlen(tokbuf) );
                }
-               if (strlen(tbuf) != 32)
+               if (strlen(tbuf) != 32) {
                        goto finish_rbl;
+               }
 
                /* now reverse it and add dots */
                strcpy(workbuf, tbuf);
@@ -328,7 +316,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;
                }
        }
@@ -336,10 +324,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;
 }