diff -ur busybox-1.1.0/networking/httpd.c busybox-1.1.0-owrt/networking/httpd.c --- busybox-1.1.0/networking/httpd.c 2006-01-11 06:43:51.000000000 +0100 +++ busybox-1.1.0-owrt/networking/httpd.c 2006-01-14 17:56:53.000000000 +0100 @@ -150,6 +150,7 @@ /* You can use this server as standalone, require libbb.a for linking */ //#define HTTPD_STANDALONE +static const char address[16] = "127.0.0.1"; /* Config options, disable this for do very small module */ //#define CONFIG_FEATURE_HTTPD_CGI @@ -202,7 +203,7 @@ void bb_show_usage(void) { fprintf(stderr, "Usage: %s [-p ] [-c configFile] [-d/-e ] " - "[-r realm] [-u user] [-h homedir]\n", bb_applet_name); + "[-l IP address] [-r realm] [-u user] [-h homedir]\n", bb_applet_name); exit(1); } #endif @@ -256,6 +257,7 @@ #endif unsigned port; /* server initial port and for set env REMOTE_PORT */ + char addr[16]; /* server initial IP address */ union HTTPD_FOUND { const char *found_mime_type; const char *found_moved_temporarily; @@ -858,6 +860,13 @@ sprintf(buf, "%u", config->port); addEnv(port_name, "PORT", buf); } +static void addEnvAddr(const char *addr_name) +{ + char buf[16]; + + sprintf(buf, "%s", config->addr); + addEnv(addr_name, "ADDR", buf); +} #endif #endif /* CONFIG_FEATURE_HTTPD_CGI */ @@ -942,7 +951,14 @@ /* inet_addr() returns a value that is already in network order */ memset(&lsocket, 0, sizeof(lsocket)); lsocket.sin_family = AF_INET; - lsocket.sin_addr.s_addr = INADDR_ANY; + if (inet_aton(config->addr, & (lsocket.sin_addr)) == 0) { + if ((gethostbyname(config->addr)) == NULL) return -1; + lsocket.sin_addr.s_addr = ((struct in_addr *) ((gethostbyname(config->addr))->h_addr))->s_addr; + } + else + { + lsocket.sin_addr.s_addr = htons(INADDR_ANY); + } lsocket.sin_port = htons(config->port) ; fd = socket(AF_INET, SOCK_STREAM, 0); if (fd >= 0) { @@ -1971,7 +1987,7 @@ #define OPT_INC_3 ENABLE_FEATURE_HTTPD_AUTH_MD5 #ifndef CONFIG_FEATURE_HTTPD_USAGE_FROM_INETD_ONLY - "p:" + "p:l" #endif #ifdef CONFIG_FEATURE_HTTPD_SETUID "u:" @@ -1985,6 +2001,7 @@ #define OPT_REALM (1<<(2+OPT_INC_1+OPT_INC_2)) /* r */ #define OPT_MD5 (1<<(2+OPT_INC_1+OPT_INC_2+OPT_INC_3)) /* m */ #define OPT_PORT (1<<(3+OPT_INC_1+OPT_INC_2+OPT_INC_3)) /* p */ +#define OPT_ADDR (1<<(4+OPT_INC_1+OPT_INC_2+OPT_INC_3)) /* l */ #define OPT_SETUID (1<<(4+OPT_INC_1+OPT_INC_2+OPT_INC_3)) /* u */ @@ -2038,6 +2055,7 @@ #endif #ifndef CONFIG_FEATURE_HTTPD_USAGE_FROM_INETD_ONLY , &s_port + , &(config->addr) #endif #ifdef CONFIG_FEATURE_HTTPD_SETUID , &s_uid Only in busybox-1.1.0-owrt/networking: httpd.c.orig Only in busybox-1.1.0-owrt/networking: httpd.c.rej