aboutsummaryrefslogtreecommitdiff
path: root/libbb/xconnect.c
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/xconnect.c
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/xconnect.c')
-rw-r--r--libbb/xconnect.c21
1 files changed, 16 insertions, 5 deletions
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 };)