diff options
Diffstat (limited to 'src/sh_ipvx.c')
-rw-r--r-- | src/sh_ipvx.c | 50 |
1 files changed, 31 insertions, 19 deletions
diff --git a/src/sh_ipvx.c b/src/sh_ipvx.c index 84ceec9..41f23ef 100644 --- a/src/sh_ipvx.c +++ b/src/sh_ipvx.c @@ -200,6 +200,7 @@ char * sh_ipvx_print_sockaddr (struct sockaddr * sa, int sa_family) struct sh_sockaddr ss; static char ipbuf[SH_IP_BUF]; + memset(&ss, 0, sizeof(struct sh_sockaddr)); sh_ipvx_save(&ss, sa_family, sa); sh_ipvx_ntoa (ipbuf, sizeof(ipbuf), &ss); return ipbuf; @@ -207,8 +208,6 @@ char * sh_ipvx_print_sockaddr (struct sockaddr * sa, int sa_family) void sh_ipvx_save(struct sh_sockaddr * ss, int sa_family, struct sockaddr * sa) { - /* memset(ss, '\0', sizeof(struct sh_sockaddr)); */ - switch (sa_family) { case AF_INET: @@ -250,23 +249,22 @@ int sh_ipvx_set_port(struct sh_sockaddr * ss, int port) #endif } -int sh_ipvx_get_port(struct sockaddr * sa, int sa_family) +int sh_ipvx_get_port(struct sh_sockaddr * sa) { int port = 0; #if defined(USE_IPVX) - switch (sa_family) + switch (sa->ss_family) { case AF_INET: - port = ntohs(((struct sockaddr_in *)sa)->sin_port); + port = ntohs((sa->sin).sin_port); break; case AF_INET6: - port = ntohs(((struct sockaddr_in6 *)sa)->sin6_port); + port = ntohs((sa->sin6).sin6_port); break; } #else - (void) sa_family; - port = ntohs(((struct sockaddr_in *)sa)->sin_port); + port = ntohs((sa->sin).sin_port); #endif return port; } @@ -278,7 +276,7 @@ int sh_ipvx_aton (const char * name, struct sh_sockaddr * ss) struct addrinfo hints; struct addrinfo *res; - memset(&hints, '\0', sizeof(hints)); + memset(&hints, 0, sizeof(hints)); hints.ai_family = PF_UNSPEC; hints.ai_flags = AI_NUMERICHOST; ret = getaddrinfo(name, NULL, &hints, &res); @@ -286,7 +284,7 @@ int sh_ipvx_aton (const char * name, struct sh_sockaddr * ss) if (ret) return 0; - memset(ss, '\0', sizeof(struct sh_sockaddr)); + memset(ss, 0, sizeof(struct sh_sockaddr)); switch(res->ai_family) { case AF_INET: @@ -301,6 +299,7 @@ int sh_ipvx_aton (const char * name, struct sh_sockaddr * ss) return 0; break; } + freeaddrinfo(res); return 1; #else int ret = inet_aton(name, &((ss->sin).sin_addr)); @@ -354,6 +353,8 @@ char * sh_ipvx_canonical(const char * hostname, char * numeric, size_t nlen) const char * host; char hostbuf[SH_BUFSIZE]; + SL_ENTER(_("sh_ipvx_canonical")); + numeric[0] = '\0'; sh_dummy_341_out = (void *) &out; @@ -381,6 +382,8 @@ char * sh_ipvx_canonical(const char * hostname, char * numeric, size_t nlen) err = getaddrinfo(host, NULL, &hints, &res); if (err == 0) { + struct addrinfo * res_orig = res; + #if defined(AI_CANONNAME) if (res->ai_canonname && strlen(res->ai_canonname) > 0) { @@ -412,6 +415,8 @@ char * sh_ipvx_canonical(const char * hostname, char * numeric, size_t nlen) res = res->ai_next; } + + freeaddrinfo(res_orig); } #else struct hostent *he; @@ -419,6 +424,8 @@ char * sh_ipvx_canonical(const char * hostname, char * numeric, size_t nlen) volatile int isNum = 0; struct sockaddr_in *sin; + SL_ENTER(_("sh_ipvx_canonical")); + numeric[0] = '\0'; sh_dummy_341_out = (void *) &out; @@ -454,14 +461,15 @@ char * sh_ipvx_canonical(const char * hostname, char * numeric, size_t nlen) SH_MUTEX_UNLOCK(mutex_resolv); #endif - if (flag) - return out; + if (flag) { + SL_RETURN(out, _("sh_ipvx_canonical")); + } if (out) SH_FREE(out); if (numeric[0] == '\0') sl_strlcpy (numeric, _("0.0.0.0"), nlen); - return NULL; + SL_RETURN(NULL, _("sh_ipvx_canonical")); } char * sh_ipvx_addrtoname(struct sh_sockaddr * ss) @@ -500,15 +508,17 @@ int sh_ipvx_reverse_check_ok (char * peer, int port, struct sh_sockaddr * ss) char sport[32]; struct addrinfo *p; + SL_ENTER(_("sh_ipvx_reverse_check_ok")); + sl_snprintf(sport, sizeof(sport), "%d", port); - memset(&hints, '\0', sizeof(hints)); + memset(&hints, 0, sizeof(hints)); hints.ai_socktype = SOCK_STREAM; hints.ai_flags = AI_ADDRCONFIG; if (getaddrinfo(peer, sport, &hints, &res) != 0) { - return 0; + SL_RETURN((0), _("sh_ipvx_reverse_check_ok")); } p = res; @@ -528,7 +538,7 @@ int sh_ipvx_reverse_check_ok (char * peer, int port, struct sh_sockaddr * ss) if (0 == sl_strcmp(dst1, dst2)) { - return 1; + SL_RETURN((1), _("sh_ipvx_reverse_check_ok")); } } p = p->ai_next; @@ -541,17 +551,19 @@ int sh_ipvx_reverse_check_ok (char * peer, int port, struct sh_sockaddr * ss) (void) port; + SL_ENTER(_("sh_ipvx_reverse_check_ok")); + he = sh_gethostbyname(peer); if (he != NULL) { for (p = he->h_addr_list; *p; ++p) { - if (0 == memcmp (*p, &(sin->sin_addr), sizeof(in_addr_t)) ) - return 1; + if (0 == memcmp (*p, &(sin->sin_addr), sizeof(in_addr_t)) ) { + SL_RETURN((1), _("sh_ipvx_reverse_check_ok")); } } } #endif - return 0; + SL_RETURN((0), _("sh_ipvx_reverse_check_ok")); } #ifdef SH_CUTEST |