<p>Kevin Harwell has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.asterisk.org/c/asterisk/+/17835">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">utils.c: Remove all usages of ast_gethostbyname()<br><br>gethostbyname() and gethostbyname_r() are deprecated in favor of<br>getaddrinfo() which we use in the ast_sockaddr family of functions.<br><br>ASTERISK-29819 #close<br><br>Change-Id: Ie277c0ef768d753b169c121ef570a71665692ab7<br>---<br>M addons/ooh323c/src/ooSocket.c<br>M apps/app_festival.c<br>M channels/chan_mgcp.c<br>M channels/chan_skinny.c<br>M channels/chan_unistim.c<br>M channels/iax2/provision.c<br>M main/config.c<br>7 files changed, 85 insertions(+), 70 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.asterisk.org:29418/asterisk refs/changes/35/17835/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/addons/ooh323c/src/ooSocket.c b/addons/ooh323c/src/ooSocket.c</span><br><span>index 151c1cf..c0457c3 100644</span><br><span>--- a/addons/ooh323c/src/ooSocket.c</span><br><span>+++ b/addons/ooh323c/src/ooSocket.c</span><br><span>@@ -537,8 +537,6 @@</span><br><span> int ooGetLocalIPAddress(char * pIPAddrs)</span><br><span> {</span><br><span> int ret;</span><br><span style="color: hsl(0, 100%, 40%);">- struct hostent *hp;</span><br><span style="color: hsl(0, 100%, 40%);">- struct ast_hostent phost;</span><br><span> char hostname[100];</span><br><span> </span><br><span> if(pIPAddrs == NULL)</span><br><span>@@ -546,20 +544,11 @@</span><br><span> ret = gethostname(hostname, 100);</span><br><span> if(ret == 0)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">- if ((hp = ast_gethostbyname(hostname, &phost))) {</span><br><span style="color: hsl(0, 100%, 40%);">- if (hp->h_addrtype == AF_INET6) {</span><br><span style="color: hsl(0, 100%, 40%);">- struct in6_addr i;</span><br><span style="color: hsl(0, 100%, 40%);">- memcpy(&i, hp->h_addr, sizeof(i));</span><br><span style="color: hsl(0, 100%, 40%);">- strcpy(pIPAddrs, (inet_ntop(AF_INET6, &i,</span><br><span style="color: hsl(0, 100%, 40%);">- hostname, sizeof(hostname))) == NULL ? "::1" :</span><br><span style="color: hsl(0, 100%, 40%);">- inet_ntop(AF_INET6, &i, hostname, sizeof(hostname)));</span><br><span style="color: hsl(0, 100%, 40%);">- } else {</span><br><span style="color: hsl(0, 100%, 40%);">- struct in_addr i;</span><br><span style="color: hsl(0, 100%, 40%);">- memcpy(&i, hp->h_addr, sizeof(i));</span><br><span style="color: hsl(0, 100%, 40%);">- strcpy(pIPAddrs, (ast_inet_ntoa(i) == NULL) ? "127.0.0.1" : ast_inet_ntoa(i));</span><br><span style="color: hsl(0, 100%, 40%);">- }</span><br><span style="color: hsl(0, 100%, 40%);">- } else {</span><br><span style="color: hsl(120, 100%, 40%);">+ struct ast_sockaddr addr = { {0,} };</span><br><span style="color: hsl(120, 100%, 40%);">+ if (ast_sockaddr_resolve_first_af(&addr, hostname, PARSE_PORT_FORBID, AF_UNSPEC)) {</span><br><span> return -1;</span><br><span style="color: hsl(120, 100%, 40%);">+ } else {</span><br><span style="color: hsl(120, 100%, 40%);">+ strcpy(pIPAddrs, ast_sockaddr_stringify_addr(&addr));</span><br><span> }</span><br><span> }</span><br><span> else{</span><br><span>diff --git a/apps/app_festival.c b/apps/app_festival.c</span><br><span>index d682b1c..c18725d 100644</span><br><span>--- a/apps/app_festival.c</span><br><span>+++ b/apps/app_festival.c</span><br><span>@@ -281,8 +281,6 @@</span><br><span> int usecache;</span><br><span> int res = 0;</span><br><span> struct sockaddr_in serv_addr;</span><br><span style="color: hsl(0, 100%, 40%);">- struct hostent *serverhost;</span><br><span style="color: hsl(0, 100%, 40%);">- struct ast_hostent ahp;</span><br><span> int fd;</span><br><span> FILE *fs;</span><br><span> const char *host;</span><br><span>@@ -398,15 +396,17 @@</span><br><span> </span><br><span> if ((serv_addr.sin_addr.s_addr = inet_addr(host)) == -1) {</span><br><span> /* its a name rather than an ipnum */</span><br><span style="color: hsl(0, 100%, 40%);">- serverhost = ast_gethostbyname(host, &ahp);</span><br><span style="color: hsl(120, 100%, 40%);">+ struct ast_sockaddr addr = { {0,} };</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- if (serverhost == NULL) {</span><br><span style="color: hsl(0, 100%, 40%);">- ast_log(LOG_WARNING, "festival_client: gethostbyname failed\n");</span><br><span style="color: hsl(120, 100%, 40%);">+ if (ast_sockaddr_resolve_first_af(&addr, host, PARSE_PORT_FORBID, AF_INET)) {</span><br><span style="color: hsl(120, 100%, 40%);">+ ast_log(LOG_WARNING, "festival_client: ast_sockaddr_resolve_first_af() failed\n");</span><br><span> ast_config_destroy(cfg);</span><br><span> close(fd);</span><br><span> return -1;</span><br><span> }</span><br><span style="color: hsl(0, 100%, 40%);">- memmove(&serv_addr.sin_addr, serverhost->h_addr, serverhost->h_length);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* We'll overwrite port and family in a sec */</span><br><span style="color: hsl(120, 100%, 40%);">+ ast_sockaddr_to_sin(&addr, &serv_addr);</span><br><span> }</span><br><span> </span><br><span> serv_addr.sin_family = AF_INET;</span><br><span>diff --git a/channels/chan_mgcp.c b/channels/chan_mgcp.c</span><br><span>index 3a0c7b3..b2f1e57 100644</span><br><span>--- a/channels/chan_mgcp.c</span><br><span>+++ b/channels/chan_mgcp.c</span><br><span>@@ -1949,10 +1949,8 @@</span><br><span> int portno;</span><br><span> struct ast_format_cap *peercap;</span><br><span> int peerNonCodecCapability;</span><br><span style="color: hsl(0, 100%, 40%);">- struct sockaddr_in sin;</span><br><span style="color: hsl(0, 100%, 40%);">- struct ast_sockaddr sin_tmp;</span><br><span style="color: hsl(120, 100%, 40%);">+ struct ast_sockaddr addr = { {0,} };</span><br><span> char *codecs;</span><br><span style="color: hsl(0, 100%, 40%);">- struct ast_hostent ahp; struct hostent *hp;</span><br><span> int codec, codec_count=0;</span><br><span> int iterator;</span><br><span> struct mgcp_endpoint *p = sub->parent;</span><br><span>@@ -1972,8 +1970,7 @@</span><br><span> return -1;</span><br><span> }</span><br><span> /* XXX This could block for a long time, and block the main thread! XXX */</span><br><span style="color: hsl(0, 100%, 40%);">- hp = ast_gethostbyname(host, &ahp);</span><br><span style="color: hsl(0, 100%, 40%);">- if (!hp) {</span><br><span style="color: hsl(120, 100%, 40%);">+ if (ast_sockaddr_resolve_first_af(&addr, host, PARSE_PORT_FORBID, AF_INET)) {</span><br><span> ast_log(LOG_WARNING, "Unable to lookup host in c= line, '%s'\n", c);</span><br><span> return -1;</span><br><span> }</span><br><span>@@ -1981,12 +1978,9 @@</span><br><span> ast_log(LOG_WARNING, "Malformed media stream descriptor: %s\n", m);</span><br><span> return -1;</span><br><span> }</span><br><span style="color: hsl(0, 100%, 40%);">- sin.sin_family = AF_INET;</span><br><span style="color: hsl(0, 100%, 40%);">- memcpy(&sin.sin_addr, hp->h_addr, sizeof(sin.sin_addr));</span><br><span style="color: hsl(0, 100%, 40%);">- sin.sin_port = htons(portno);</span><br><span style="color: hsl(0, 100%, 40%);">- ast_sockaddr_from_sin(&sin_tmp, &sin);</span><br><span style="color: hsl(0, 100%, 40%);">- ast_rtp_instance_set_remote_address(sub->rtp, &sin_tmp);</span><br><span style="color: hsl(0, 100%, 40%);">- ast_debug(3, "Peer RTP is at port %s:%d\n", ast_inet_ntoa(sin.sin_addr), ntohs(sin.sin_port));</span><br><span style="color: hsl(120, 100%, 40%);">+ ast_sockaddr_set_port(&addr, portno);</span><br><span style="color: hsl(120, 100%, 40%);">+ ast_rtp_instance_set_remote_address(sub->rtp, &addr);</span><br><span style="color: hsl(120, 100%, 40%);">+ ast_debug(3, "Peer RTP is at port %s\n", ast_sockaddr_stringify(&addr));</span><br><span> /* Scan through the RTP payload types specified in a "m=" line: */</span><br><span> codecs = ast_strdupa(m + len);</span><br><span> while (!ast_strlen_zero(codecs)) {</span><br><span>@@ -4651,6 +4645,30 @@</span><br><span> return res;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/*!</span><br><span style="color: hsl(120, 100%, 40%);">+ * \brief Resolve the given hostname and save its IPv4 address.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param[in] hostname The hostname to resolve.</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param[out] sin_addr Pointer to a <tt>struct in_addr</tt> in which to</span><br><span style="color: hsl(120, 100%, 40%);">+ * store the resolved IPv4 address. \c sin_addr will</span><br><span style="color: hsl(120, 100%, 40%);">+ * not be changed if resolution fails.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * \retval 0 if successful</span><br><span style="color: hsl(120, 100%, 40%);">+ * \retval 1 on failure</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+static int resolve_first_addr(const char *hostname, struct in_addr *sin_addr)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ struct ast_sockaddr addr = { {0,} };</span><br><span style="color: hsl(120, 100%, 40%);">+ struct sockaddr_in tmp;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ if (ast_sockaddr_resolve_first_af(&addr, hostname, PARSE_PORT_FORBID, AF_INET)) {</span><br><span style="color: hsl(120, 100%, 40%);">+ return 1;</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ ast_sockaddr_to_sin(&addr, &tmp);</span><br><span style="color: hsl(120, 100%, 40%);">+ *sin_addr = tmp.sin_addr;</span><br><span style="color: hsl(120, 100%, 40%);">+ return 0;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span> </span><br><span> static int reload_config(int reload)</span><br><span> {</span><br><span>@@ -4659,8 +4677,6 @@</span><br><span> struct mgcp_gateway *g;</span><br><span> struct mgcp_endpoint *e;</span><br><span> char *cat;</span><br><span style="color: hsl(0, 100%, 40%);">- struct ast_hostent ahp;</span><br><span style="color: hsl(0, 100%, 40%);">- struct hostent *hp;</span><br><span> struct ast_flags config_flags = { reload ? CONFIG_FLAG_FILEUNCHANGED : 0 };</span><br><span> </span><br><span> if (gethostname(ourhost, sizeof(ourhost)-1)) {</span><br><span>@@ -4694,10 +4710,8 @@</span><br><span> </span><br><span> /* Create the interface list */</span><br><span> if (!strcasecmp(v->name, "bindaddr")) {</span><br><span style="color: hsl(0, 100%, 40%);">- if (!(hp = ast_gethostbyname(v->value, &ahp))) {</span><br><span style="color: hsl(120, 100%, 40%);">+ if (resolve_first_addr(v->value, &bindaddr.sin_addr)) {</span><br><span> ast_log(LOG_WARNING, "Invalid address: %s\n", v->value);</span><br><span style="color: hsl(0, 100%, 40%);">- } else {</span><br><span style="color: hsl(0, 100%, 40%);">- memcpy(&bindaddr.sin_addr, hp->h_addr, sizeof(bindaddr.sin_addr));</span><br><span> }</span><br><span> } else if (!strcasecmp(v->name, "allow")) {</span><br><span> ast_format_cap_update_by_allow_disallow(global_capability, v->value, 1);</span><br><span>@@ -4765,13 +4779,11 @@</span><br><span> if (ntohl(bindaddr.sin_addr.s_addr)) {</span><br><span> memcpy(&__ourip, &bindaddr.sin_addr, sizeof(__ourip));</span><br><span> } else {</span><br><span style="color: hsl(0, 100%, 40%);">- hp = ast_gethostbyname(ourhost, &ahp);</span><br><span style="color: hsl(0, 100%, 40%);">- if (!hp) {</span><br><span style="color: hsl(120, 100%, 40%);">+ if (resolve_first_addr(ourhost, &__ourip)) {</span><br><span> ast_log(LOG_WARNING, "Unable to get our IP address, MGCP disabled\n");</span><br><span> ast_config_destroy(cfg);</span><br><span> return 0;</span><br><span> }</span><br><span style="color: hsl(0, 100%, 40%);">- memcpy(&__ourip, hp->h_addr, sizeof(__ourip));</span><br><span> }</span><br><span> if (!ntohs(bindaddr.sin_port))</span><br><span> bindaddr.sin_port = htons(DEFAULT_MGCP_CA_PORT);</span><br><span>diff --git a/channels/chan_skinny.c b/channels/chan_skinny.c</span><br><span>index 788d3ec..e3a7021 100644</span><br><span>--- a/channels/chan_skinny.c</span><br><span>+++ b/channels/chan_skinny.c</span><br><span>@@ -1235,8 +1235,6 @@</span><br><span> static char ourhost[256];</span><br><span> static int ourport;</span><br><span> static struct in_addr __ourip;</span><br><span style="color: hsl(0, 100%, 40%);">-static struct ast_hostent ahp;</span><br><span style="color: hsl(0, 100%, 40%);">-static struct hostent *hp;</span><br><span> static int skinnysock = -1;</span><br><span> static pthread_t accept_t;</span><br><span> static int callnums = 1;</span><br><span>@@ -7759,6 +7757,31 @@</span><br><span> return tmpc;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/*!</span><br><span style="color: hsl(120, 100%, 40%);">+ * \brief Resolve the given hostname and save its IPv4 address.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param[in] hostname The hostname to resolve.</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param[out] sin_addr Pointer to a <tt>struct in_addr</tt> in which to</span><br><span style="color: hsl(120, 100%, 40%);">+ * store the resolved IPv4 address. \c sin_addr will</span><br><span style="color: hsl(120, 100%, 40%);">+ * not be changed if resolution fails.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * \retval 0 if successful</span><br><span style="color: hsl(120, 100%, 40%);">+ * \retval 1 on failure</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+static int resolve_first_addr(const char *hostname, struct in_addr *sin_addr)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ struct ast_sockaddr addr = { {0,} };</span><br><span style="color: hsl(120, 100%, 40%);">+ struct sockaddr_in tmp;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ if (ast_sockaddr_resolve_first_af(&addr, hostname, PARSE_PORT_FORBID, AF_INET)) {</span><br><span style="color: hsl(120, 100%, 40%);">+ return 1;</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ ast_sockaddr_to_sin(&addr, &tmp);</span><br><span style="color: hsl(120, 100%, 40%);">+ *sin_addr = tmp.sin_addr;</span><br><span style="color: hsl(120, 100%, 40%);">+ return 0;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> #define TYPE_GENERAL 1</span><br><span> #define TYPE_DEF_DEVICE 2</span><br><span> #define TYPE_DEF_LINE 4</span><br><span>@@ -7790,10 +7813,8 @@</span><br><span> continue;</span><br><span> }</span><br><span> if (!strcasecmp(v->name, "bindaddr")) {</span><br><span style="color: hsl(0, 100%, 40%);">- if (!(hp = ast_gethostbyname(v->value, &ahp))) {</span><br><span style="color: hsl(120, 100%, 40%);">+ if (resolve_first_addr(v->value, &bindaddr.sin_addr)) {</span><br><span> ast_log(LOG_WARNING, "Invalid address: %s\n", v->value);</span><br><span style="color: hsl(0, 100%, 40%);">- } else {</span><br><span style="color: hsl(0, 100%, 40%);">- memcpy(&bindaddr.sin_addr, hp->h_addr, sizeof(bindaddr.sin_addr));</span><br><span> }</span><br><span> continue;</span><br><span> } else if (!strcasecmp(v->name, "keepalive")) {</span><br><span>@@ -8480,13 +8501,11 @@</span><br><span> if (ntohl(bindaddr.sin_addr.s_addr)) {</span><br><span> __ourip = bindaddr.sin_addr;</span><br><span> } else {</span><br><span style="color: hsl(0, 100%, 40%);">- hp = ast_gethostbyname(ourhost, &ahp);</span><br><span style="color: hsl(0, 100%, 40%);">- if (!hp) {</span><br><span style="color: hsl(120, 100%, 40%);">+ if (resolve_first_addr(ourhost, &__ourip)) {</span><br><span> ast_log(LOG_WARNING, "Unable to get our IP address, Skinny disabled\n");</span><br><span> ast_config_destroy(cfg);</span><br><span> return 0;</span><br><span> }</span><br><span style="color: hsl(0, 100%, 40%);">- memcpy(&__ourip, hp->h_addr, sizeof(__ourip));</span><br><span> }</span><br><span> if (!ntohs(bindaddr.sin_port)) {</span><br><span> bindaddr.sin_port = htons(DEFAULT_SKINNY_PORT);</span><br><span>diff --git a/channels/chan_unistim.c b/channels/chan_unistim.c</span><br><span>index 0240509..f813e34 100644</span><br><span>--- a/channels/chan_unistim.c</span><br><span>+++ b/channels/chan_unistim.c</span><br><span>@@ -6847,8 +6847,6 @@</span><br><span> {</span><br><span> struct ast_config *cfg;</span><br><span> struct ast_variable *v;</span><br><span style="color: hsl(0, 100%, 40%);">- struct ast_hostent ahp;</span><br><span style="color: hsl(0, 100%, 40%);">- struct hostent *hp;</span><br><span> struct sockaddr_in bindaddr = { 0, };</span><br><span> char *config = "unistim.conf";</span><br><span> char *cat;</span><br><span>@@ -6916,11 +6914,11 @@</span><br><span> }</span><br><span> } else if (!strcasecmp(v->name, "public_ip")) {</span><br><span> if (!ast_strlen_zero(v->value)) {</span><br><span style="color: hsl(0, 100%, 40%);">- if (!(hp = ast_gethostbyname(v->value, &ahp))) {</span><br><span style="color: hsl(120, 100%, 40%);">+ struct ast_sockaddr addr = { {0,} };</span><br><span style="color: hsl(120, 100%, 40%);">+ if (ast_sockaddr_resolve_first_af(&addr, v->value, PARSE_PORT_FORBID, AF_INET)) {</span><br><span> ast_log(LOG_WARNING, "Invalid address: %s\n", v->value);</span><br><span> } else {</span><br><span style="color: hsl(0, 100%, 40%);">- memcpy(&public_ip.sin_addr, hp->h_addr, sizeof(public_ip.sin_addr));</span><br><span style="color: hsl(0, 100%, 40%);">- public_ip.sin_family = AF_INET;</span><br><span style="color: hsl(120, 100%, 40%);">+ ast_sockaddr_to_sin(&addr, &public_ip);</span><br><span> }</span><br><span> }</span><br><span> }</span><br><span>diff --git a/channels/iax2/provision.c b/channels/iax2/provision.c</span><br><span>index f21c4e6..d67a73f 100644</span><br><span>--- a/channels/iax2/provision.c</span><br><span>+++ b/channels/iax2/provision.c</span><br><span>@@ -285,9 +285,6 @@</span><br><span> int foundportno = 0;</span><br><span> int foundserverportno = 0;</span><br><span> int x;</span><br><span style="color: hsl(0, 100%, 40%);">- struct in_addr ia;</span><br><span style="color: hsl(0, 100%, 40%);">- struct hostent *hp;</span><br><span style="color: hsl(0, 100%, 40%);">- struct ast_hostent h;</span><br><span> struct iax_template *src, tmp;</span><br><span> const char *t;</span><br><span> if (def) {</span><br><span>@@ -335,15 +332,15 @@</span><br><span> } else</span><br><span> ast_log(LOG_WARNING, "Ignoring invalid %s '%s' for '%s' at line %d\n", v->name, v->value, s, v->lineno);</span><br><span> } else if (!strcasecmp(v->name, "server") || !strcasecmp(v->name, "altserver")) {</span><br><span style="color: hsl(0, 100%, 40%);">- hp = ast_gethostbyname(v->value, &h);</span><br><span style="color: hsl(0, 100%, 40%);">- if (hp) {</span><br><span style="color: hsl(0, 100%, 40%);">- memcpy(&ia, hp->h_addr, sizeof(ia));</span><br><span style="color: hsl(0, 100%, 40%);">- if (!strcasecmp(v->name, "server"))</span><br><span style="color: hsl(0, 100%, 40%);">- cur->server = ntohl(ia.s_addr);</span><br><span style="color: hsl(0, 100%, 40%);">- else</span><br><span style="color: hsl(0, 100%, 40%);">- cur->altserver = ntohl(ia.s_addr);</span><br><span style="color: hsl(0, 100%, 40%);">- } else</span><br><span style="color: hsl(120, 100%, 40%);">+ struct ast_sockaddr addr = { {0,} };</span><br><span style="color: hsl(120, 100%, 40%);">+ if (ast_sockaddr_resolve_first_af(&addr, v->value, PARSE_PORT_FORBID, AF_INET)) {</span><br><span> ast_log(LOG_WARNING, "Ignoring invalid %s '%s' for '%s' at line %d\n", v->name, v->value, s, v->lineno);</span><br><span style="color: hsl(120, 100%, 40%);">+ } else {</span><br><span style="color: hsl(120, 100%, 40%);">+ if (!strcasecmp(v->name, "server"))</span><br><span style="color: hsl(120, 100%, 40%);">+ cur->server = ast_sockaddr_ipv4(&addr);</span><br><span style="color: hsl(120, 100%, 40%);">+ else</span><br><span style="color: hsl(120, 100%, 40%);">+ cur->altserver = ast_sockaddr_ipv4(&addr);</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span> } else if (!strcasecmp(v->name, "codec")) {</span><br><span> struct ast_format *tmpfmt;</span><br><span> if ((tmpfmt = ast_format_cache_get(v->value))) {</span><br><span>diff --git a/main/config.c b/main/config.c</span><br><span>index 4d4f946..7b3b457 100644</span><br><span>--- a/main/config.c</span><br><span>+++ b/main/config.c</span><br><span>@@ -3863,8 +3863,7 @@</span><br><span> /* default is either the supplied value or the result itself */</span><br><span> struct sockaddr_in *def = (flags & PARSE_DEFAULT) ?</span><br><span> va_arg(ap, struct sockaddr_in *) : sa;</span><br><span style="color: hsl(0, 100%, 40%);">- struct hostent *hp;</span><br><span style="color: hsl(0, 100%, 40%);">- struct ast_hostent ahp;</span><br><span style="color: hsl(120, 100%, 40%);">+ struct ast_sockaddr addr = { {0,} };</span><br><span> </span><br><span> memset(&_sa_buf, '\0', sizeof(_sa_buf)); /* clear buffer */</span><br><span> /* duplicate the string to strip away the :port */</span><br><span>@@ -3890,12 +3889,13 @@</span><br><span> error = 1;</span><br><span> }</span><br><span> /* Now deal with host part, even if we have errors before. */</span><br><span style="color: hsl(0, 100%, 40%);">- hp = ast_gethostbyname(buf, &ahp);</span><br><span style="color: hsl(0, 100%, 40%);">- if (hp) /* resolved successfully */</span><br><span style="color: hsl(0, 100%, 40%);">- memcpy(&sa->sin_addr, hp->h_addr, sizeof(sa->sin_addr));</span><br><span style="color: hsl(0, 100%, 40%);">- else {</span><br><span style="color: hsl(120, 100%, 40%);">+ if (ast_sockaddr_resolve_first_af(&addr, buf, PARSE_PORT_FORBID, AF_INET)) {</span><br><span> error = 1;</span><br><span> sa->sin_addr = def->sin_addr;</span><br><span style="color: hsl(120, 100%, 40%);">+ } else {</span><br><span style="color: hsl(120, 100%, 40%);">+ struct sockaddr_in tmp;</span><br><span style="color: hsl(120, 100%, 40%);">+ ast_sockaddr_to_sin(&addr, &tmp);</span><br><span style="color: hsl(120, 100%, 40%);">+ sa->sin_addr = tmp.sin_addr;</span><br><span> }</span><br><span> ast_debug(3,</span><br><span> "extract inaddr from [%s] gives [%s:%d](%d)\n",</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.asterisk.org/c/asterisk/+/17835">change 17835</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.asterisk.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.asterisk.org/c/asterisk/+/17835"/><meta itemprop="name" content="View Change"/></div></div>
<div style="display:none"> Gerrit-Project: asterisk </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: Ie277c0ef768d753b169c121ef570a71665692ab7 </div>
<div style="display:none"> Gerrit-Change-Number: 17835 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Kevin Harwell <kharwell@digium.com> </div>
<div style="display:none"> Gerrit-CC: Sean Bright <sean@seanbright.com> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>