version 1.16.2.3, 2001/03/21 19:46:23 |
version 1.16.2.4, 2001/05/07 21:09:27 |
|
|
NULL, 0, NI_NUMERICHOST) != 0) |
NULL, 0, NI_NUMERICHOST) != 0) |
fatal("get_remote_hostname: getnameinfo NI_NUMERICHOST failed"); |
fatal("get_remote_hostname: getnameinfo NI_NUMERICHOST failed"); |
|
|
debug("Trying to reverse map address %.100s.", ntop); |
debug3("Trying to reverse map address %.100s.", ntop); |
/* Map the IP address to a host name. */ |
/* Map the IP address to a host name. */ |
if (getnameinfo((struct sockaddr *)&from, fromlen, name, sizeof(name), |
if (getnameinfo((struct sockaddr *)&from, fromlen, name, sizeof(name), |
NULL, 0, NI_NAMEREQD) != 0) { |
NULL, 0, NI_NAMEREQD) != 0) { |
|
|
* Returns the remote IP-address of socket as a string. The returned |
* Returns the remote IP-address of socket as a string. The returned |
* string must be freed. |
* string must be freed. |
*/ |
*/ |
|
|
char * |
char * |
get_peer_ipaddr(int socket) |
get_socket_address(int socket, int remote, int flags) |
{ |
{ |
struct sockaddr_storage from; |
struct sockaddr_storage addr; |
socklen_t fromlen; |
socklen_t addrlen; |
char ntop[NI_MAXHOST]; |
char ntop[NI_MAXHOST]; |
|
|
/* Get IP address of client. */ |
/* Get IP address of client. */ |
fromlen = sizeof(from); |
addrlen = sizeof(addr); |
memset(&from, 0, sizeof(from)); |
memset(&addr, 0, sizeof(addr)); |
if (getpeername(socket, (struct sockaddr *) & from, &fromlen) < 0) { |
|
debug("get_peer_ipaddr: getpeername failed: %.100s", strerror(errno)); |
if (remote) { |
return NULL; |
if (getpeername(socket, (struct sockaddr *)&addr, &addrlen) |
|
< 0) { |
|
debug("get_socket_ipaddr: getpeername failed: %.100s", |
|
strerror(errno)); |
|
return NULL; |
|
} |
|
} else { |
|
if (getsockname(socket, (struct sockaddr *)&addr, &addrlen) |
|
< 0) { |
|
debug("get_socket_ipaddr: getsockname failed: %.100s", |
|
strerror(errno)); |
|
return NULL; |
|
} |
} |
} |
/* Get the IP address in ascii. */ |
/* Get the address in ascii. */ |
if (getnameinfo((struct sockaddr *)&from, fromlen, ntop, sizeof(ntop), |
if (getnameinfo((struct sockaddr *)&addr, addrlen, ntop, sizeof(ntop), |
NULL, 0, NI_NUMERICHOST) != 0) { |
NULL, 0, flags) != 0) { |
error("get_peer_ipaddr: getnameinfo NI_NUMERICHOST failed"); |
error("get_socket_ipaddr: getnameinfo %d failed", flags); |
return NULL; |
return NULL; |
} |
} |
return xstrdup(ntop); |
return xstrdup(ntop); |
} |
} |
|
|
|
char * |
|
get_peer_ipaddr(int socket) |
|
{ |
|
return get_socket_address(socket, 1, NI_NUMERICHOST); |
|
} |
|
|
|
char * |
|
get_local_ipaddr(int socket) |
|
{ |
|
return get_socket_address(socket, 0, NI_NUMERICHOST); |
|
} |
|
|
|
char * |
|
get_local_name(int socket) |
|
{ |
|
return get_socket_address(socket, 0, NI_NAMEREQD); |
|
} |
|
|
/* |
/* |
* Returns the IP-address of the remote host as a string. The returned |
* Returns the IP-address of the remote host as a string. The returned |
* string must not be freed. |
* string must not be freed. |
|
|
} |
} |
} |
} |
return canonical_host_ip; |
return canonical_host_ip; |
|
} |
|
|
|
const char * |
|
get_remote_name_or_ip(u_int utmp_len, int reverse_mapping_check) |
|
{ |
|
static const char *remote = ""; |
|
if (utmp_len > 0) |
|
remote = get_canonical_hostname(reverse_mapping_check); |
|
if (utmp_len == 0 || strlen(remote) > utmp_len) |
|
remote = get_remote_ipaddr(); |
|
return remote; |
} |
} |
|
|
/* Returns the local/remote port for the socket. */ |
/* Returns the local/remote port for the socket. */ |