aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--networking/httpd.c6
-rw-r--r--networking/ipcalc.c53
2 files changed, 32 insertions, 27 deletions
diff --git a/networking/httpd.c b/networking/httpd.c
index 60dbba4d6..b27437ab2 100644
--- a/networking/httpd.c
+++ b/networking/httpd.c
@@ -1990,9 +1990,6 @@ int httpd_main(int argc, char *argv[])
1990 if(uid > 0) 1990 if(uid > 0)
1991 setuid(uid); 1991 setuid(uid);
1992# endif 1992# endif
1993# ifdef CONFIG_FEATURE_HTTPD_CGI
1994 addEnvPort("SERVER");
1995# endif
1996#endif 1993#endif
1997 1994
1998#ifdef CONFIG_FEATURE_HTTPD_CGI 1995#ifdef CONFIG_FEATURE_HTTPD_CGI
@@ -2005,6 +2002,9 @@ int httpd_main(int argc, char *argv[])
2005 if(p) { 2002 if(p) {
2006 setenv("PATH", p, 0); 2003 setenv("PATH", p, 0);
2007 } 2004 }
2005# ifndef CONFIG_FEATURE_HTTPD_USAGE_FROM_INETD_ONLY
2006 addEnvPort("SERVER");
2007# endif
2008 } 2008 }
2009#endif 2009#endif
2010 2010
diff --git a/networking/ipcalc.c b/networking/ipcalc.c
index 171c49a26..2f1c02b7b 100644
--- a/networking/ipcalc.c
+++ b/networking/ipcalc.c
@@ -43,15 +43,14 @@ static unsigned long get_netmask(unsigned long ipaddr)
43#ifdef CONFIG_FEATURE_IPCALC_FANCY 43#ifdef CONFIG_FEATURE_IPCALC_FANCY
44static int get_prefix(unsigned long netmask) 44static int get_prefix(unsigned long netmask)
45{ 45{
46 unsigned long t; 46 unsigned long msk = 0x80000000;
47 int ret = 0; 47 int ret = 0;
48 48
49 for (t = 0; t < 32; t++) { 49 netmask = htonl(netmask);
50 if (htonl(netmask) & (0x80000000 >> t)) { 50 while(msk) {
51 ret ++; 51 if (netmask & msk)
52 } else { 52 ret++;
53 break; 53 msk >>= 1;
54 }
55 } 54 }
56 return ret; 55 return ret;
57} 56}
@@ -64,14 +63,16 @@ static int get_prefix(unsigned long netmask)
64#define HOSTNAME 0x10 63#define HOSTNAME 0x10
65#define SILENT 0x20 64#define SILENT 0x20
66 65
66
67int ipcalc_main(int argc, char **argv) 67int ipcalc_main(int argc, char **argv)
68{ 68{
69 unsigned long mode; 69 unsigned long mode;
70 70
71 unsigned long netmask = 0; 71 unsigned long netmask;
72 unsigned long broadcast; 72 unsigned long broadcast;
73 unsigned long network; 73 unsigned long network;
74 unsigned long ipaddr; 74 unsigned long ipaddr;
75 struct in_addr a;
75 76
76#ifdef CONFIG_FEATURE_IPCALC_FANCY 77#ifdef CONFIG_FEATURE_IPCALC_FANCY
77 unsigned long netprefix = 0; 78 unsigned long netprefix = 0;
@@ -116,20 +117,21 @@ int ipcalc_main(int argc, char **argv)
116 *prefixstr = (char)0; 117 *prefixstr = (char)0;
117 prefixstr++; 118 prefixstr++;
118 if (*prefixstr) { 119 if (*prefixstr) {
120 unsigned int msk;
121
119 netprefix = atol(prefixstr); 122 netprefix = atol(prefixstr);
120 if (netprefix > 32) { 123 if (netprefix > 32) {
121 IPCALC_MSG(bb_error_msg_and_die("bad IP prefix: %s\n", prefixstr), 124 IPCALC_MSG(bb_error_msg_and_die("bad IP prefix: %s\n", prefixstr),
122 exit(EXIT_FAILURE)); 125 exit(EXIT_FAILURE));
123 } 126 }
124 if (netprefix) { 127 netmask = 0;
125 netmask = 0x80000000; 128 msk = 0x80000000;
126 netprefix--; 129 while (netprefix > 0) {
127 while(netprefix) { 130 netmask |= msk;
128 netmask = 0x80000000 | (netmask >> 1); 131 msk >>= 1;
129 netprefix--; 132 netprefix--;
130 } 133 }
131 netmask = htonl(netmask); 134 netmask = htonl(netmask);
132 }
133 /* Even if it was 0, we will signify that we have a netmask. This allows */ 135 /* Even if it was 0, we will signify that we have a netmask. This allows */
134 /* for specification of default routes, etc which have a 0 netmask/prefix */ 136 /* for specification of default routes, etc which have a 0 netmask/prefix */
135 have_netmask = 1; 137 have_netmask = 1;
@@ -138,34 +140,37 @@ int ipcalc_main(int argc, char **argv)
138 } 140 }
139 prefixstr++; 141 prefixstr++;
140 } 142 }
141 ipaddr = inet_addr(ipstr); 143 ipaddr = inet_aton(ipstr, &a);
142#else 144#else
143 ipaddr = inet_addr(argv[optind]); 145 ipaddr = inet_aton(argv[optind], &a);
144#endif 146#endif
145 147
146 if (ipaddr == INADDR_NONE) { 148 if (ipaddr == 0) {
147 IPCALC_MSG(bb_error_msg_and_die("bad IP address: %s", argv[optind]), 149 IPCALC_MSG(bb_error_msg_and_die("bad IP address: %s", argv[optind]),
148 exit(EXIT_FAILURE)); 150 exit(EXIT_FAILURE));
149 } 151 }
152 ipaddr = a.s_addr;
150 153
151 if (argc - optind == 2) { 154 if (argc - optind == 2) {
152#ifdef CONFIG_FEATURE_IPCALC_FANCY 155#ifdef CONFIG_FEATURE_IPCALC_FANCY
153 if (have_netmask == 1) { 156 if (have_netmask) {
154 IPCALC_MSG(bb_error_msg_and_die("Both prefix and netmask were specified, use one or the other.\n"), 157 IPCALC_MSG(bb_error_msg_and_die("Both prefix and netmask were specified, use one or the other.\n"),
155 exit(EXIT_FAILURE)); 158 exit(EXIT_FAILURE));
156 } 159 }
157 have_netmask = 1;
158#endif
159 netmask = inet_addr(argv[optind + 1]);
160 }
161 160
162 if (ipaddr == INADDR_NONE) { 161#endif
162 netmask = inet_aton(argv[optind + 1], &a);
163 if (netmask == 0) {
163 IPCALC_MSG(bb_error_msg_and_die("bad netmask: %s", argv[optind + 1]), 164 IPCALC_MSG(bb_error_msg_and_die("bad netmask: %s", argv[optind + 1]),
164 exit(EXIT_FAILURE)); 165 exit(EXIT_FAILURE));
165 } 166 }
167 netmask = a.s_addr;
168 } else {
169#ifdef CONFIG_FEATURE_IPCALC_FANCY
166 170
171 if (!have_netmask)
172#endif
167 /* JHC - If the netmask wasn't provided then calculate it */ 173 /* JHC - If the netmask wasn't provided then calculate it */
168 if (!netmask) {
169 netmask = get_netmask(ipaddr); 174 netmask = get_netmask(ipaddr);
170 } 175 }
171 176