From: michael Date: Fri, 26 Dec 2014 18:52:10 +0000 (+0000) Subject: - Replaced all occurrences of inet_pton() with getaddrinfo() X-Git-Tag: 1.1.0beta1~266 X-Git-Url: http://git.serene-ircd.net/?a=commitdiff_plain;h=35f2ade372dc977626e76a9cedc1dfde30df3b89;p=hopm.git - Replaced all occurrences of inet_pton() with getaddrinfo() git-svn-id: svn://svn.ircd-hybrid.org/svnroot/hopm/trunk@5164 82007160-df01-0410-b94d-b575c5fd34c7 --- diff --git a/src/firedns.c b/src/firedns.c index 880f2d7..620516e 100644 --- a/src/firedns.c +++ b/src/firedns.c @@ -26,6 +26,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #include #include #include +#include #include #include #include @@ -213,11 +214,19 @@ void firedns_init(void) #endif if (i4 < FDNS_MAX) { - if (inet_aton(&buf[i], &addr4)) - { - memcpy(&servers4[i4++],&addr4,sizeof(struct in_addr)); - } - } + struct addrinfo hints, *res; + + memset(&hints, 0, sizeof(hints)); + hints.ai_family = AF_INET; + hints.ai_socktype = SOCK_STREAM; + hints.ai_flags = AI_PASSIVE | AI_NUMERICHOST; + + if (!getaddrinfo(&buf[i], NULL, &hints, &res)) + { + memcpy(&servers4[i4++], &((struct sockaddr_in *)res->ai_addr)->sin_addr, sizeof(struct in_addr)); + freeaddrinfo(res); + } + } } } } @@ -239,8 +248,18 @@ void firedns_init(void) #endif if (i4 < FDNS_MAX) { - if (inet_pton(AF_INET, buf, (char *)&addr4)) - memcpy(&servers4[i4++],&addr4,sizeof(struct in_addr)); + struct addrinfo hints, *res; + + memset(&hints, 0, sizeof(hints)); + hints.ai_family = AF_INET; + hints.ai_socktype = SOCK_STREAM; + hints.ai_flags = AI_PASSIVE | AI_NUMERICHOST; + + if (!getaddrinfo(&buf[i], NULL, &hints, &res)) + { + memcpy(&servers4[i4++], &((struct sockaddr_in *)res->ai_addr)->sin_addr, sizeof(struct in_addr)); + freeaddrinfo(res); + } } } } diff --git a/src/irc.c b/src/irc.c index 1fa6af7..3085148 100644 --- a/src/irc.c +++ b/src/irc.c @@ -39,6 +39,7 @@ #include #include #include +#include #ifdef TIME_WITH_SYS_TIME # include @@ -258,14 +259,23 @@ irc_init(void) /* Bind */ if (!EmptyString(IRCItem->vhost)) { + struct addrinfo hints, *res; int bindret = 0; - if (!inet_pton(AF_INET, IRCItem->vhost, &(IRC_LOCAL.in4.s_addr))) + memset(&hints, 0, sizeof(hints)); + hints.ai_family = AF_INET; + hints.ai_socktype = SOCK_STREAM; + hints.ai_flags = AI_PASSIVE | AI_NUMERICHOST; + + if (getaddrinfo(IRCItem->vhost, NULL, &hints, &res)) { log_printf("IRC -> bind(): %s is an invalid address", IRCItem->vhost); exit(EXIT_FAILURE); } + memcpy(&IRC_LOCAL.in4.s_addr, &((struct sockaddr_in *)res->ai_addr)->sin_addr, res->ai_addrlen); + freeaddrinfo(res); + bsaddr.sa4.sin_addr.s_addr = IRC_LOCAL.in4.s_addr; bsaddr.sa4.sin_family = AF_INET; bsaddr.sa4.sin_port = htons(0); diff --git a/src/libopm/src/config.c b/src/libopm/src/config.c index cc3188a..f68c3e8 100644 --- a/src/libopm/src/config.c +++ b/src/libopm/src/config.c @@ -195,10 +195,21 @@ OPM_ERR_T libopm_config_set(OPM_CONFIG_T *config, int key, const void *value) break; case OPM_TYPE_ADDRESS: - if( inet_pton(AF_INET, value, &( ((opm_sockaddr *)config->vars[key])->sa4.sin_addr)) - <= 0) - return OPM_ERR_BADVALUE; /* return appropriate err code */ - break; + { + struct addrinfo hints, *res; + + memset(&hints, 0, sizeof(hints)); + hints.ai_family = AF_INET; + hints.ai_socktype = SOCK_STREAM; + hints.ai_flags = AI_PASSIVE | AI_NUMERICHOST; + + if (getaddrinfo(value, NULL, &hints, &res)) + return OPM_ERR_BADVALUE; /* return appropriate err code */ + + memcpy(&(((opm_sockaddr *)config->vars[key])->sa4.sin_addr), &((struct sockaddr_in *)res->ai_addr)->sin_addr, sizeof(struct in_addr)); + freeaddrinfo(res); + break; + } case OPM_TYPE_STRINGLIST: node = libopm_node_create(libopm_xstrdup(value)); diff --git a/src/negcache.c b/src/negcache.c index 8ce19c1..9f8dd91 100644 --- a/src/negcache.c +++ b/src/negcache.c @@ -45,6 +45,7 @@ along with this program; if not, write to: #ifdef STDC_HEADERS #include #endif +#include #ifdef TIME_WITH_SYS_TIME #include @@ -57,6 +58,10 @@ along with this program; if not, write to: # endif #endif +#include +#include +#include + #include "inet.h" #include "irc.h" #include "negcache.h" @@ -210,13 +215,22 @@ void negcache_insert(const char *ipstr) { struct bopm_sockaddr ip; struct cnode *n; + struct addrinfo hints, *res; + + memset(&hints, 0, sizeof(hints)); + hints.ai_family = AF_INET; + hints.ai_socktype = SOCK_STREAM; + hints.ai_flags = AI_PASSIVE | AI_NUMERICHOST; - if (!inet_pton(AF_INET, ipstr, &(ip.sa4.sin_addr))) + if (getaddrinfo(ipstr, NULL, &hints, &res)) { log_printf("NEGCACHE -> Invalid IPv4 address '%s'", ipstr); return; } + memcpy(&ip.sa4.sin_addr, &((struct sockaddr_in *)res->ai_addr)->sin_addr, res->ai_addrlen); + freeaddrinfo(res); + n = nc_insert(nc_head, ip.sa4.sin_addr.s_addr); if (n) diff --git a/src/scan.c b/src/scan.c index 2839ceb..452cfbf 100644 --- a/src/scan.c +++ b/src/scan.c @@ -46,6 +46,10 @@ #include #include +#include +#include +#include + #ifdef HAVE_SYS_POLL_H # include #endif @@ -341,13 +345,23 @@ scan_connect(char **user, char *msg) /* Check negcache before anything */ if (OptionsItem->negcache > 0) { - if (!inet_pton(AF_INET, user[3], &(ip.sa4.sin_addr))) + struct addrinfo hints, *res; + + memset(&hints, 0, sizeof(hints)); + hints.ai_family = AF_INET; + hints.ai_socktype = SOCK_STREAM; + hints.ai_flags = AI_PASSIVE | AI_NUMERICHOST; + + if (getaddrinfo(user[3], NULL, &hints, &res)) { log_printf("SCAN -> Invalid IPv4 address '%s'!", user[3]); return; } else { + memcpy(&ip.sa4.sin_addr, &((struct sockaddr_in *)res->ai_addr)->sin_addr, res->ai_addrlen); + freeaddrinfo(res); + if (check_neg_cache(ip.sa4.sin_addr.s_addr)) { if (OPT_DEBUG)