diff options
Diffstat (limited to 'canohost.c')
-rw-r--r-- | canohost.c | 24 |
1 files changed, 16 insertions, 8 deletions
diff --git a/canohost.c b/canohost.c index 7138f48d0..22b19bb9f 100644 --- a/canohost.c +++ b/canohost.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: canohost.c,v 1.64 2009/02/12 03:00:56 djm Exp $ */ | 1 | /* $OpenBSD: canohost.c,v 1.65 2009/05/27 06:31:25 andreas Exp $ */ |
2 | /* | 2 | /* |
3 | * Author: Tatu Ylonen <ylo@cs.hut.fi> | 3 | * Author: Tatu Ylonen <ylo@cs.hut.fi> |
4 | * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland | 4 | * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland |
@@ -35,6 +35,8 @@ | |||
35 | #include "misc.h" | 35 | #include "misc.h" |
36 | 36 | ||
37 | static void check_ip_options(int, char *); | 37 | static void check_ip_options(int, char *); |
38 | static char *canonical_host_ip = NULL; | ||
39 | static int cached_port = -1; | ||
38 | 40 | ||
39 | /* | 41 | /* |
40 | * Return the canonical name of the host at the other end of the socket. The | 42 | * Return the canonical name of the host at the other end of the socket. The |
@@ -304,6 +306,16 @@ get_local_name(int sock) | |||
304 | return get_socket_address(sock, 0, NI_NAMEREQD); | 306 | return get_socket_address(sock, 0, NI_NAMEREQD); |
305 | } | 307 | } |
306 | 308 | ||
309 | void | ||
310 | clear_cached_addr(void) | ||
311 | { | ||
312 | if (canonical_host_ip != NULL) { | ||
313 | xfree(canonical_host_ip); | ||
314 | canonical_host_ip = NULL; | ||
315 | } | ||
316 | cached_port = -1; | ||
317 | } | ||
318 | |||
307 | /* | 319 | /* |
308 | * Returns the IP-address of the remote host as a string. The returned | 320 | * Returns the IP-address of the remote host as a string. The returned |
309 | * string must not be freed. | 321 | * string must not be freed. |
@@ -312,8 +324,6 @@ get_local_name(int sock) | |||
312 | const char * | 324 | const char * |
313 | get_remote_ipaddr(void) | 325 | get_remote_ipaddr(void) |
314 | { | 326 | { |
315 | static char *canonical_host_ip = NULL; | ||
316 | |||
317 | /* Check whether we have cached the ipaddr. */ | 327 | /* Check whether we have cached the ipaddr. */ |
318 | if (canonical_host_ip == NULL) { | 328 | if (canonical_host_ip == NULL) { |
319 | if (packet_connection_is_on_socket()) { | 329 | if (packet_connection_is_on_socket()) { |
@@ -402,13 +412,11 @@ get_peer_port(int sock) | |||
402 | int | 412 | int |
403 | get_remote_port(void) | 413 | get_remote_port(void) |
404 | { | 414 | { |
405 | static int port = -1; | ||
406 | |||
407 | /* Cache to avoid getpeername() on a dead connection */ | 415 | /* Cache to avoid getpeername() on a dead connection */ |
408 | if (port == -1) | 416 | if (cached_port == -1) |
409 | port = get_port(0); | 417 | cached_port = get_port(0); |
410 | 418 | ||
411 | return port; | 419 | return cached_port; |
412 | } | 420 | } |
413 | 421 | ||
414 | int | 422 | int |