From 14557c012b37d65790a693213a684f3f87097e6a Mon Sep 17 00:00:00 2001 From: simon Date: Thu, 4 Jun 2009 17:37:38 +0000 Subject: [PATCH] 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 --- httpd.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) 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); -- 2.11.0