mirror of
https://github.com/sheumann/hush.git
synced 2024-12-21 23:29:34 +00:00
udhcp: use improved gethostbyname replacement from IPv6 code
This commit is contained in:
parent
1094452423
commit
e991303406
@ -11,7 +11,8 @@
|
|||||||
|
|
||||||
#include "busybox.h"
|
#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 {
|
struct {
|
||||||
char fn;
|
char fn;
|
||||||
|
@ -319,13 +319,15 @@ int xconnect_stream(const len_and_sockaddr *lsa);
|
|||||||
* UNIX socket address being returned, IPX sockaddr etc...
|
* UNIX socket address being returned, IPX sockaddr etc...
|
||||||
* On error does bb_error_msg and returns NULL */
|
* On error does bb_error_msg and returns NULL */
|
||||||
len_and_sockaddr* host2sockaddr(const char *host, int port);
|
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);
|
len_and_sockaddr* xhost2sockaddr(const char *host, int port);
|
||||||
#if ENABLE_FEATURE_IPV6
|
#if ENABLE_FEATURE_IPV6
|
||||||
/* Same, useful if you want to force family (e.g. 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);
|
len_and_sockaddr* xhost_and_af2sockaddr(const char *host, int port, sa_family_t af);
|
||||||
#else
|
#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)))
|
#define xhost_and_af2sockaddr(host, port, af) ((void)(af), xhost2sockaddr((host), (port)))
|
||||||
#endif
|
#endif
|
||||||
/* Assign sin[6]_port member if the socket is of corresponding type,
|
/* 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
|
// "old" (ipv4 only) API
|
||||||
// users: traceroute.c hostname.c
|
// users: traceroute.c hostname.c
|
||||||
struct hostent *xgethostbyname(const char *name);
|
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);
|
extern char *xstrdup(const char *s);
|
||||||
|
@ -182,6 +182,11 @@ USE_FEATURE_IPV6(sa_family_t af,)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if ENABLE_FEATURE_IPV6
|
#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)
|
len_and_sockaddr* xhost_and_af2sockaddr(const char *host, int port, sa_family_t af)
|
||||||
{
|
{
|
||||||
return str2sockaddr(host, port, af, DIE_ON_ERROR);
|
return str2sockaddr(host, port, af, DIE_ON_ERROR);
|
||||||
|
@ -21,15 +21,14 @@
|
|||||||
/* on these functions, make sure you datatype matches */
|
/* on these functions, make sure you datatype matches */
|
||||||
static int read_ip(const char *line, void *arg)
|
static int read_ip(const char *line, void *arg)
|
||||||
{
|
{
|
||||||
struct in_addr *addr = arg;
|
len_and_sockaddr *lsa;
|
||||||
struct hostent *host;
|
int retval = 0;
|
||||||
int retval = 1;
|
|
||||||
|
|
||||||
if (!inet_aton(line, addr)) {
|
lsa = host_and_af2sockaddr(line, 0, AF_INET);
|
||||||
host = gethostbyname(line);
|
if (lsa) {
|
||||||
if (host)
|
*(struct in_addr*)arg = lsa->sin.sin_addr;
|
||||||
addr->s_addr = *((unsigned long *) host->h_addr_list[0]);
|
free(lsa);
|
||||||
else retval = 0;
|
retval = 1;
|
||||||
}
|
}
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user