summaryrefslogtreecommitdiffstats
path: root/openwrt/package/busybox/patches/320-httpd_address_binding.patch
blob: 2c2d517c60e841e9627d3d987e916bcf1270694d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
--- busybox-1.1.0.orig/networking/httpd.c	2006-02-06 16:02:30.000000000 +0100
+++ busybox-1.1.0/networking/httpd.c	2006-02-06 16:25:34.000000000 +0100
@@ -109,6 +109,7 @@
 #include <sys/types.h>
 #include <sys/socket.h>    /* for connect and socket*/
 #include <netinet/in.h>    /* for sockaddr_in       */
+#include <arpa/inet.h>	   /* for inet_aton	    */
 #include <sys/time.h>
 #include <sys/stat.h>
 #include <sys/wait.h>
@@ -201,8 +202,8 @@
 
 void bb_show_usage(void)
 {
-  fprintf(stderr, "Usage: %s [-p <port>] [-c configFile] [-d/-e <string>] "
-		  "[-r realm] [-u user] [-h homedir]\n", bb_applet_name);
+  fprintf(stderr, "Usage: %s [-p <port>] [-l <IP address>] [-c configFile]"
+		  "[-d/-e <string>] [-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 *address;	   /* server initial address */
   union HTTPD_FOUND {
 	const char *found_mime_type;
 	const char *found_moved_temporarily;
@@ -942,7 +944,10 @@
   /* 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->address, &(lsocket.sin_addr)) == 1) {
+	  if (config->address != NULL) lsocket.sin_addr.s_addr = ((struct in_addr *) ((gethostbyname(config->address))->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) {
@@ -1985,7 +1990,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:"
@@ -1999,7 +2004,8 @@
 #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_SETUID      (1<<(4+OPT_INC_1+OPT_INC_2+OPT_INC_3))    /* u */
+#define OPT_ADDRESS	(1<<(4+OPT_INC_1+OPT_INC_2+OPT_INC_3))	  /* l */
+#define OPT_SETUID      (1<<(5+OPT_INC_1+OPT_INC_2+OPT_INC_3))    /* u */
 
 
 #ifdef HTTPD_STANDALONE
@@ -2016,6 +2022,7 @@
 #endif
 #ifndef CONFIG_FEATURE_HTTPD_USAGE_FROM_INETD_ONLY
   const char *s_port;
+  const char *s_addr;
   int server;
 #endif
 
@@ -2035,6 +2042,7 @@
 
 #ifndef CONFIG_FEATURE_HTTPD_USAGE_FROM_INETD_ONLY
   config->port = 80;
+  config->address = "";
 #endif
 
   config->ContentLength = -1;
@@ -2052,6 +2060,7 @@
 #endif
 #ifndef CONFIG_FEATURE_HTTPD_USAGE_FROM_INETD_ONLY
 			, &s_port
+			, &s_addr
 #endif
 #ifdef CONFIG_FEATURE_HTTPD_SETUID
 			, &s_uid
@@ -2077,6 +2086,8 @@
 #ifndef CONFIG_FEATURE_HTTPD_USAGE_FROM_INETD_ONLY
     if(opt & OPT_PORT)
 	config->port = bb_xgetlarg(s_port, 10, 1, 0xffff);
+    if (opt & OPT_ADDRESS)
+	if (s_addr) config->address = (char *) s_addr;
 #ifdef CONFIG_FEATURE_HTTPD_SETUID
     if(opt & OPT_SETUID) {
 	char *e;