I had been wondering for a while whether the use of random addresses
authorsimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Thu, 4 Jun 2009 17:37:38 +0000 (17:37 +0000)
committersimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Thu, 4 Jun 2009 17:37:38 +0000 (17:37 +0000)
in the localhost space was too clever for its own good, and finding
a reader comment posted on the recent Linux Magazine agedu article
which has misconstrued those addresses as implying that the data is
shipped to some outside server machine has caused me to decide that
in fact it was. Removed (by default, though re-enableable by ifdef).

git-svn-id: svn://svn.tartarus.org/sgt/agedu@8589 cda61777-01e9-0310-a592-d414129be87e

httpd.c

diff --git a/httpd.c b/httpd.c
index fcdd68e..62c1ceb 100644 (file)
--- a/httpd.c
+++ b/httpd.c
@@ -414,7 +414,6 @@ void run_httpd(const void *t, int authmask, const struct httpd_config *dcfg,
     int fd, ret;
     int authtype;
     char *authstring = NULL;
-    unsigned long ipaddr;
     struct fd *f;
     struct sockaddr_in addr;
     socklen_t addrlen;
@@ -433,20 +432,25 @@ void run_httpd(const void *t, int authmask, const struct httpd_config *dcfg,
     }
     addr.sin_family = AF_INET;
     if (!dcfg->address) {
+#ifdef RANDOM_LOCALHOST
+       unsigned long ipaddr;
        srand(0L);
        ipaddr = 0x7f000000;
        ipaddr += (1 + rand() % 255) << 16;
        ipaddr += (1 + rand() % 255) << 8;
        ipaddr += (1 + rand() % 255);
        addr.sin_addr.s_addr = htonl(ipaddr);
+#else
+       addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
+#endif
        addr.sin_port = htons(0);
-       
     } else {
        addr.sin_addr.s_addr = inet_addr(dcfg->address);
        addr.sin_port = dcfg->port ? htons(dcfg->port) : 0;
     }
     addrlen = sizeof(addr);
     ret = bind(fd, (const struct sockaddr *)&addr, addrlen);
+#ifdef RANDOM_LOCALHOST
     if (ret < 0 && errno == EADDRNOTAVAIL && !dcfg->address) {
        /*
         * Some systems don't like us binding to random weird
@@ -457,6 +461,7 @@ void run_httpd(const void *t, int authmask, const struct httpd_config *dcfg,
        addr.sin_port = htons(0);
        ret = bind(fd, (const struct sockaddr *)&addr, addrlen);
     }
+#endif
     if (ret < 0) {
        fprintf(stderr, "bind: %s\n", strerror(errno));
        exit(1);