aboutsummaryrefslogtreecommitdiff
path: root/libbb
diff options
context:
space:
mode:
authorDenis Vlasenko <vda.linux@googlemail.com>2008-03-12 22:14:34 +0000
committerDenis Vlasenko <vda.linux@googlemail.com>2008-03-12 22:14:34 +0000
commit4e6d5117b839cef41cd3919966f95bf25d24d8d9 (patch)
tree277c292905fefcdf40530c8c29e87d6b8c5f7864 /libbb
parent4e6c8120a53709c4a352db42e997303844c74584 (diff)
downloadbusybox-w32-4e6d5117b839cef41cd3919966f95bf25d24d8d9.tar.gz
busybox-w32-4e6d5117b839cef41cd3919966f95bf25d24d8d9.tar.bz2
busybox-w32-4e6d5117b839cef41cd3919966f95bf25d24d8d9.zip
inetd: make it NOMMU-capable and IPv6-friendly. Lots of renames
of variable/function names Total: -2474 bytes text data bss dec hex filename 802215 661 7452 810328 c5d58 busybox_old 800120 661 7428 808209 c5511 busybox_unstripped
Diffstat (limited to 'libbb')
-rw-r--r--libbb/create_icmp6_socket.c13
-rw-r--r--libbb/create_icmp_socket.c13
-rw-r--r--libbb/xconnect.c21
3 files changed, 28 insertions, 19 deletions
diff --git a/libbb/create_icmp6_socket.c b/libbb/create_icmp6_socket.c
index 51899cdc5..a22ac5d02 100644
--- a/libbb/create_icmp6_socket.c
+++ b/libbb/create_icmp6_socket.c
@@ -2,27 +2,26 @@
2/* 2/*
3 * Utility routines. 3 * Utility routines.
4 * 4 *
5 * create raw socket for icmp (IPv6 version) protocol test permission 5 * create raw socket for icmp (IPv6 version) protocol
6 * and drop root privileges if running setuid 6 * and drop root privileges if running setuid
7 *
8 */ 7 */
9 8
10//#include <sys/types.h>
11//#include <netdb.h>
12//#include <sys/socket.h>
13#include "libbb.h" 9#include "libbb.h"
14 10
15#if ENABLE_FEATURE_IPV6 11#if ENABLE_FEATURE_IPV6
16int create_icmp6_socket(void) 12int create_icmp6_socket(void)
17{ 13{
18 struct protoent *proto;
19 int sock; 14 int sock;
20 15#if 0
16 struct protoent *proto;
21 proto = getprotobyname("ipv6-icmp"); 17 proto = getprotobyname("ipv6-icmp");
22 /* if getprotobyname failed, just silently force 18 /* if getprotobyname failed, just silently force
23 * proto->p_proto to have the correct value for "ipv6-icmp" */ 19 * proto->p_proto to have the correct value for "ipv6-icmp" */
24 sock = socket(AF_INET6, SOCK_RAW, 20 sock = socket(AF_INET6, SOCK_RAW,
25 (proto ? proto->p_proto : IPPROTO_ICMPV6)); 21 (proto ? proto->p_proto : IPPROTO_ICMPV6));
22#else
23 sock = socket(AF_INET6, SOCK_RAW, IPPROTO_ICMPV6);
24#endif
26 if (sock < 0) { 25 if (sock < 0) {
27 if (errno == EPERM) 26 if (errno == EPERM)
28 bb_error_msg_and_die(bb_msg_perm_denied_are_you_root); 27 bb_error_msg_and_die(bb_msg_perm_denied_are_you_root);
diff --git a/libbb/create_icmp_socket.c b/libbb/create_icmp_socket.c
index 3a4655885..64beba82b 100644
--- a/libbb/create_icmp_socket.c
+++ b/libbb/create_icmp_socket.c
@@ -2,26 +2,25 @@
2/* 2/*
3 * Utility routines. 3 * Utility routines.
4 * 4 *
5 * create raw socket for icmp protocol test permission 5 * create raw socket for icmp protocol
6 * and drop root privileges if running setuid 6 * and drop root privileges if running setuid
7 *
8 */ 7 */
9 8
10//#include <sys/types.h>
11//#include <netdb.h>
12//#include <sys/socket.h>
13#include "libbb.h" 9#include "libbb.h"
14 10
15int create_icmp_socket(void) 11int create_icmp_socket(void)
16{ 12{
17 struct protoent *proto;
18 int sock; 13 int sock;
19 14#if 0
15 struct protoent *proto;
20 proto = getprotobyname("icmp"); 16 proto = getprotobyname("icmp");
21 /* if getprotobyname failed, just silently force 17 /* if getprotobyname failed, just silently force
22 * proto->p_proto to have the correct value for "icmp" */ 18 * proto->p_proto to have the correct value for "icmp" */
23 sock = socket(AF_INET, SOCK_RAW, 19 sock = socket(AF_INET, SOCK_RAW,
24 (proto ? proto->p_proto : 1)); /* 1 == ICMP */ 20 (proto ? proto->p_proto : 1)); /* 1 == ICMP */
21#else
22 sock = socket(AF_INET, SOCK_RAW, 1); /* 1 == ICMP */
23#endif
25 if (sock < 0) { 24 if (sock < 0) {
26 if (errno == EPERM) 25 if (errno == EPERM)
27 bb_error_msg_and_die(bb_msg_perm_denied_are_you_root); 26 bb_error_msg_and_die(bb_msg_perm_denied_are_you_root);
diff --git a/libbb/xconnect.c b/libbb/xconnect.c
index 03ae77329..950aee826 100644
--- a/libbb/xconnect.c
+++ b/libbb/xconnect.c
@@ -132,11 +132,15 @@ USE_FEATURE_IPV6(sa_family_t af,)
132 132
133 /* Ugly parsing of host:addr */ 133 /* Ugly parsing of host:addr */
134 if (ENABLE_FEATURE_IPV6 && host[0] == '[') { 134 if (ENABLE_FEATURE_IPV6 && host[0] == '[') {
135 /* Even uglier parsing of [xx]:nn */
135 host++; 136 host++;
136 cp = strchr(host, ']'); 137 cp = strchr(host, ']');
137 if (!cp || cp[1] != ':') /* Malformed: must have [xx]:nn */ 138 if (!cp || cp[1] != ':') { /* Malformed: must have [xx]:nn */
138 bb_error_msg_and_die("bad address '%s'", org_host); 139 bb_error_msg("bad address '%s'", org_host);
139 //return r; /* return NULL */ 140 if (ai_flags & DIE_ON_ERROR)
141 xfunc_die();
142 return NULL;
143 }
140 } else { 144 } else {
141 cp = strrchr(host, ':'); 145 cp = strrchr(host, ':');
142 if (ENABLE_FEATURE_IPV6 && cp && strchr(host, ':') != cp) { 146 if (ENABLE_FEATURE_IPV6 && cp && strchr(host, ':') != cp) {
@@ -144,13 +148,19 @@ USE_FEATURE_IPV6(sa_family_t af,)
144 cp = NULL; /* it's not a port spec */ 148 cp = NULL; /* it's not a port spec */
145 } 149 }
146 } 150 }
147 if (cp) { 151 if (cp) { /* points to ":" or "]:" */
148 int sz = cp - host + 1; 152 int sz = cp - host + 1;
149 host = safe_strncpy(alloca(sz), host, sz); 153 host = safe_strncpy(alloca(sz), host, sz);
150 if (ENABLE_FEATURE_IPV6 && *cp != ':') 154 if (ENABLE_FEATURE_IPV6 && *cp != ':')
151 cp++; /* skip ']' */ 155 cp++; /* skip ']' */
152 cp++; /* skip ':' */ 156 cp++; /* skip ':' */
153 port = xatou16(cp); 157 port = bb_strtou(cp, NULL, 10);
158 if (errno || (unsigned)port > 0xffff) {
159 bb_error_msg("bad port spec '%s'", org_host);
160 if (ai_flags & DIE_ON_ERROR)
161 xfunc_die();
162 return NULL;
163 }
154 } 164 }
155 165
156 memset(&hint, 0 , sizeof(hint)); 166 memset(&hint, 0 , sizeof(hint));
@@ -221,6 +231,7 @@ len_and_sockaddr* xdotted2sockaddr(const char *host, int port)
221 return str2sockaddr(host, port, AF_UNSPEC, AI_NUMERICHOST | DIE_ON_ERROR); 231 return str2sockaddr(host, port, AF_UNSPEC, AI_NUMERICHOST | DIE_ON_ERROR);
222} 232}
223 233
234#undef xsocket_type
224int xsocket_type(len_and_sockaddr **lsap, USE_FEATURE_IPV6(int family,) int sock_type) 235int xsocket_type(len_and_sockaddr **lsap, USE_FEATURE_IPV6(int family,) int sock_type)
225{ 236{
226 SKIP_FEATURE_IPV6(enum { family = AF_INET };) 237 SKIP_FEATURE_IPV6(enum { family = AF_INET };)