diff options
| author | Denis Vlasenko <vda.linux@googlemail.com> | 2008-03-12 22:14:34 +0000 |
|---|---|---|
| committer | Denis Vlasenko <vda.linux@googlemail.com> | 2008-03-12 22:14:34 +0000 |
| commit | 4e6d5117b839cef41cd3919966f95bf25d24d8d9 (patch) | |
| tree | 277c292905fefcdf40530c8c29e87d6b8c5f7864 /libbb | |
| parent | 4e6c8120a53709c4a352db42e997303844c74584 (diff) | |
| download | busybox-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.c | 13 | ||||
| -rw-r--r-- | libbb/create_icmp_socket.c | 13 | ||||
| -rw-r--r-- | libbb/xconnect.c | 21 |
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 |
| 16 | int create_icmp6_socket(void) | 12 | int 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 | ||
| 15 | int create_icmp_socket(void) | 11 | int 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 | ||
| 224 | int xsocket_type(len_and_sockaddr **lsap, USE_FEATURE_IPV6(int family,) int sock_type) | 235 | int 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 };) |
