summaryrefslogtreecommitdiffstats
path: root/src/libs/zbxcomms
diff options
context:
space:
mode:
authorsasha <sasha@97f52cf1-0a1b-0410-bd0e-c28be96e8082>2008-02-01 13:42:38 +0000
committersasha <sasha@97f52cf1-0a1b-0410-bd0e-c28be96e8082>2008-02-01 13:42:38 +0000
commit91da2b8621634e300ce35b00230ec30f9e5aadb5 (patch)
tree3f3e9442f688852ed457457bcfa81a91a8f3549e /src/libs/zbxcomms
parent91105c65fe5a42a5dc03ce11934b6555c3a842f5 (diff)
downloadzabbix-91da2b8621634e300ce35b00230ec30f9e5aadb5.tar.gz
zabbix-91da2b8621634e300ce35b00230ec30f9e5aadb5.tar.xz
zabbix-91da2b8621634e300ce35b00230ec30f9e5aadb5.zip
- [ZBX-290] Possible server crash if host dns name is unknown
[svn merge svn://svn.zabbix.com/branches/1.4 -r5297:5301] git-svn-id: svn://svn.zabbix.com/trunk@5302 97f52cf1-0a1b-0410-bd0e-c28be96e8082
Diffstat (limited to 'src/libs/zbxcomms')
-rw-r--r--src/libs/zbxcomms/comms.c32
1 files changed, 18 insertions, 14 deletions
diff --git a/src/libs/zbxcomms/comms.c b/src/libs/zbxcomms/comms.c
index dd069f5a..a5cf56e9 100644
--- a/src/libs/zbxcomms/comms.c
+++ b/src/libs/zbxcomms/comms.c
@@ -140,7 +140,8 @@ void zbx_gethost_by_ip(const char *ip, char *host, size_t hostlen)
goto out;
}
out:
- freeaddrinfo(ai);
+ if (NULL != ai)
+ freeaddrinfo(ai);
}
#else
void zbx_gethost_by_ip(const char *ip, char *host, size_t hostlen)
@@ -321,8 +322,8 @@ int zbx_tcp_connect(zbx_sock_t *s,
int timeout
)
{
- int ret=SUCCEED;
- struct addrinfo *ai, hints;
+ int ret = FAIL;
+ struct addrinfo *ai = NULL, hints;
char service[MAX_STRING_LEN];
ZBX_TCP_START();
@@ -334,15 +335,13 @@ int zbx_tcp_connect(zbx_sock_t *s,
hints.ai_family = PF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
- if (0 != getaddrinfo (ip, service, &hints, &ai)) {
+ if (0 != getaddrinfo(ip, service, &hints, &ai)) {
zbx_set_tcp_strerror("Cannot resolve [%s]", ip);
- ret=FAIL;
goto out;
}
if (ZBX_SOCK_ERROR == (s->socket = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol))) {
zbx_set_tcp_strerror("Cannot create socket [%s]:%d [%s]", ip, port ,strerror_from_system(zbx_sock_last_error()));
- ret=FAIL;
goto out;
}
@@ -363,11 +362,13 @@ int zbx_tcp_connect(zbx_sock_t *s,
if (ZBX_TCP_ERROR == connect(s->socket, ai->ai_addr, ai->ai_addrlen)) {
zbx_set_tcp_strerror("*** Cannot connect to [%s]:%d [%s]", ip, port, strerror_from_system(zbx_sock_last_error()));
zbx_tcp_close(s);
- ret=FAIL;
goto out;
}
+
+ ret = SUCCEED;
out:
- freeaddrinfo (ai);
+ if (NULL != ai)
+ freeaddrinfo(ai);
return ret;
}
#else
@@ -538,7 +539,7 @@ int zbx_tcp_listen(
{
struct addrinfo hints, *ai = NULL, *current_ai;
char port[MAX_STRING_LEN];
- int e, on;
+ int e, on, ret = FAIL;
ZBX_TCP_START();
@@ -552,7 +553,7 @@ int zbx_tcp_listen(
if(0 != (e = getaddrinfo(listen_ip, port, &hints, &ai)))
{
zbx_set_tcp_strerror("Cannot resolve address [[%s]:%u], error %d: %s", listen_ip, listen_port, e, gai_strerror(e));
- return FAIL;
+ goto out;
}
for(s->num_socks = 0, current_ai = ai; current_ai != NULL; current_ai = current_ai->ai_next)
@@ -594,13 +595,16 @@ int zbx_tcp_listen(
s->num_socks++;
}
- freeaddrinfo(ai);
if(s->num_socks == 0) {
zbx_set_tcp_strerror("zbx_tcp_listen() Fatal error: unable to serve on any address. [[%s]:%u]", listen_ip, listen_port);
- return FAIL;
+ goto out;
}
- return SUCCEED;
+ ret = SUCCEED;
+out:
+ if (NULL != ai)
+ freeaddrinfo(ai);
+ return ret;
}
#else
int zbx_tcp_listen(
@@ -1035,8 +1039,8 @@ int zbx_tcp_check_security(
}
}
}
+ freeaddrinfo(ai);
}
- freeaddrinfo(ai);
#else
if( 0 != (hp = zbx_gethost(start)))
{