udhcp: use improved gethostbyname replacement from IPv6 code
authorDenis Vlasenko <vda.linux@googlemail.com>
Sun, 4 Feb 2007 02:41:57 +0000 (02:41 -0000)
committerDenis Vlasenko <vda.linux@googlemail.com>
Sun, 4 Feb 2007 02:41:57 +0000 (02:41 -0000)
console-tools/setlogcons.c
include/libbb.h
libbb/xconnect.c
networking/udhcp/files.c

index ae15b9b..7b5addc 100644 (file)
@@ -11,7 +11,8 @@
 
 #include "busybox.h"
 
-extern int setlogcons_main(int argc, char **argv)
+int setlogcons_main(int argc, char **argv);
+int setlogcons_main(int argc, char **argv)
 {
        struct {
                char fn;
index d22efe0..7342f89 100644 (file)
@@ -319,13 +319,15 @@ int xconnect_stream(const len_and_sockaddr *lsa);
  * UNIX socket address being returned, IPX sockaddr etc...
  * On error does bb_error_msg and returns NULL */
 len_and_sockaddr* host2sockaddr(const char *host, int port);
-/* Versions which die on error */
+/* Version which dies on error */
 len_and_sockaddr* xhost2sockaddr(const char *host, int port);
 #if ENABLE_FEATURE_IPV6
 /* Same, useful if you want to force family (e.g. IPv6) */
+len_and_sockaddr* host_and_af2sockaddr(const char *host, int port, sa_family_t af);
 len_and_sockaddr* xhost_and_af2sockaddr(const char *host, int port, sa_family_t af);
 #else
-/* [we evaluate af: think about "xhost_and_af2sockaddr(..., af++)"] */
+/* [we evaluate af: think about "host_and_af2sockaddr(..., af++)"] */
+#define host_and_af2sockaddr(host, port, af) ((void)(af), host2sockaddr((host), (port)))
 #define xhost_and_af2sockaddr(host, port, af) ((void)(af), xhost2sockaddr((host), (port)))
 #endif
 /* Assign sin[6]_port member if the socket is of corresponding type,
@@ -346,6 +348,8 @@ char* xmalloc_sockaddr2dotted_noport(const struct sockaddr *sa, socklen_t salen)
 // "old" (ipv4 only) API
 // users: traceroute.c hostname.c
 struct hostent *xgethostbyname(const char *name);
+// Also inetd.c and inetd.c are using gethostbyname(),
+// + inet_common.c has additional IPv4-only stuff
 
 
 extern char *xstrdup(const char *s);
index c3ccc47..22f98dc 100644 (file)
@@ -182,6 +182,11 @@ USE_FEATURE_IPV6(sa_family_t af,)
 #endif
 
 #if ENABLE_FEATURE_IPV6
+len_and_sockaddr* host_and_af2sockaddr(const char *host, int port, sa_family_t af)
+{
+       return str2sockaddr(host, port, af, 0);
+}
+
 len_and_sockaddr* xhost_and_af2sockaddr(const char *host, int port, sa_family_t af)
 {
        return str2sockaddr(host, port, af, DIE_ON_ERROR);
index c3ab17d..e35f50a 100644 (file)
 /* on these functions, make sure you datatype matches */
 static int read_ip(const char *line, void *arg)
 {
-       struct in_addr *addr = arg;
-       struct hostent *host;
-       int retval = 1;
-
-       if (!inet_aton(line, addr)) {
-               host = gethostbyname(line);
-               if (host)
-                       addr->s_addr = *((unsigned long *) host->h_addr_list[0]);
-               else retval = 0;
+       len_and_sockaddr *lsa;
+       int retval = 0;
+
+       lsa = host_and_af2sockaddr(line, 0, AF_INET);
+       if (lsa) {
+               *(struct in_addr*)arg = lsa->sin.sin_addr;
+               free(lsa);
+               retval = 1;
        }
        return retval;
 }