mirror of
https://repo.or.cz/socat.git
synced 2025-07-14 23:33:23 +00:00
Removed dependency on gethostbyname()
This commit is contained in:
parent
2bd582713d
commit
a3c688210f
6 changed files with 35 additions and 33 deletions
30
xio-ip4.c
30
xio-ip4.c
|
@ -15,12 +15,14 @@
|
|||
|
||||
|
||||
int xioparsenetwork_ip4(const char *rangename, struct xiorange *range) {
|
||||
struct hostent *maskaddr;
|
||||
struct in_addr *netaddr_in = &range->netaddr.ip4.sin_addr;
|
||||
struct in_addr *netmask_in = &range->netmask.ip4.sin_addr;
|
||||
char *rangename1; /* a copy of rangename with writing allowed */
|
||||
char *delimpos; /* absolute address of delimiter */
|
||||
unsigned int bits; /* netmask bits */
|
||||
union sockaddr_union sau;
|
||||
socklen_t socklen = sizeof(sau);
|
||||
int rc;
|
||||
|
||||
if ((rangename1 = strdup(rangename)) == NULL) {
|
||||
Error1("strdup(\"%s\"): out of memory", rangename);
|
||||
|
@ -43,31 +45,25 @@ int xioparsenetwork_ip4(const char *rangename, struct xiorange *range) {
|
|||
netmask_in->s_addr = htonl((0xffffffff << (32-bits)));
|
||||
}
|
||||
} else if (delimpos = strchr(rangename1, ':')) {
|
||||
if ((maskaddr = Gethostbyname(delimpos+1)) == NULL) {
|
||||
/* note: cast is req on AIX: */
|
||||
Error2("gethostbyname(\"%s\"): %s", delimpos+1,
|
||||
h_errno == NETDB_INTERNAL ? strerror(errno) :
|
||||
(char *)hstrerror(h_errno));
|
||||
return STAT_NORETRY;
|
||||
if ((rc = xiogetaddrinfo(delimpos+1, NULL, PF_UNSPEC, 0, 0,
|
||||
&sau, &socklen, 0, 0))
|
||||
!= STAT_OK) {
|
||||
return rc;
|
||||
}
|
||||
netmask_in->s_addr = *(uint32_t *)maskaddr->h_addr_list[0];
|
||||
netmask_in->s_addr = sau.ip4.sin_addr.s_addr;
|
||||
} else {
|
||||
Error1("xioparsenetwork_ip4(\"%s\",,): missing netmask delimiter", rangename);
|
||||
free(rangename1);
|
||||
return STAT_NORETRY;
|
||||
}
|
||||
{
|
||||
struct hostent *nameaddr;
|
||||
*delimpos = 0;
|
||||
if ((nameaddr = Gethostbyname(rangename1)) == NULL) {
|
||||
/* note: cast is req on AIX: */
|
||||
Error2("gethostbyname(\"%s\"): %s", rangename1,
|
||||
h_errno == NETDB_INTERNAL ? strerror(errno) :
|
||||
(char *)hstrerror(h_errno));
|
||||
free(rangename1);
|
||||
return STAT_NORETRY;
|
||||
if ((rc = xiogetaddrinfo(rangename1, NULL, PF_UNSPEC, 0, 0,
|
||||
&sau, &socklen, 0, 0))
|
||||
!= STAT_OK) {
|
||||
return rc;
|
||||
}
|
||||
netaddr_in->s_addr = *(uint32_t *)nameaddr->h_addr_list[0];
|
||||
netaddr_in->s_addr = sau.ip4.sin_addr.s_addr;
|
||||
}
|
||||
free(rangename1);
|
||||
return STAT_OK;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue