From: simon Date: Thu, 4 Jun 2009 17:37:38 +0000 (+0000) Subject: I had been wondering for a while whether the use of random addresses X-Git-Url: https://git.distorted.org.uk/~mdw/sgt/agedu/commitdiff_plain/14557c012b37d65790a693213a684f3f87097e6a I had been wondering for a while whether the use of random addresses 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 --- diff --git a/httpd.c b/httpd.c index fcdd68e..62c1ceb 100644 --- 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);