summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorbcook <>2014-07-10 09:33:45 +0000
committerbcook <>2014-07-10 09:33:45 +0000
commit4011d14a361cbf02683ee6a3c4029eaa2669d81b (patch)
tree5d9d67cc7d9f924b93a5b0bebd8202f2f5d6a92f /src
parentd911e94b7f58a5d8e2d21f13e20bbe04b9707e86 (diff)
downloadopenbsd-4011d14a361cbf02683ee6a3c4029eaa2669d81b.tar.gz
openbsd-4011d14a361cbf02683ee6a3c4029eaa2669d81b.tar.bz2
openbsd-4011d14a361cbf02683ee6a3c4029eaa2669d81b.zip
replace getservbyname_r with getaddrinfo for portability
ok jsing@
Diffstat (limited to 'src')
-rw-r--r--src/lib/libcrypto/bio/b_sock.c17
-rw-r--r--src/lib/libssl/src/crypto/bio/b_sock.c17
2 files changed, 22 insertions, 12 deletions
diff --git a/src/lib/libcrypto/bio/b_sock.c b/src/lib/libcrypto/bio/b_sock.c
index 8e86383cc6..be8b555217 100644
--- a/src/lib/libcrypto/bio/b_sock.c
+++ b/src/lib/libcrypto/bio/b_sock.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: b_sock.c,v 1.50 2014/07/09 23:46:14 bcook Exp $ */ 1/* $OpenBSD: b_sock.c,v 1.51 2014/07/10 09:33:45 bcook Exp $ */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
@@ -117,8 +117,12 @@ err:
117int 117int
118BIO_get_port(const char *str, unsigned short *port_ptr) 118BIO_get_port(const char *str, unsigned short *port_ptr)
119{ 119{
120 struct servent_data sd; 120 struct addrinfo *res = NULL;
121 struct servent se; 121 struct addrinfo hints = {
122 .ai_family = AF_UNSPEC,
123 .ai_socktype = SOCK_STREAM,
124 .ai_flags = AI_PASSIVE,
125 };
122 long port; 126 long port;
123 char *ep; 127 char *ep;
124 128
@@ -141,9 +145,8 @@ BIO_get_port(const char *str, unsigned short *port_ptr)
141 goto done; 145 goto done;
142 } 146 }
143 147
144 memset(&sd, 0, sizeof(sd)); 148 if (getaddrinfo(NULL, str, &hints, &res) == 0) {
145 if (getservbyname_r(str, "tcp", &se, &sd) == 0) { 149 port = ntohs(((struct sockaddr_in *)(res->ai_addr))->sin_port);
146 port = ntohs((unsigned short)se.s_port);
147 goto done; 150 goto done;
148 } 151 }
149 152
@@ -168,6 +171,8 @@ BIO_get_port(const char *str, unsigned short *port_ptr)
168 } 171 }
169 172
170done: 173done:
174 if (res)
175 freeaddrinfo(res);
171 *port_ptr = (unsigned short)port; 176 *port_ptr = (unsigned short)port;
172 return (1); 177 return (1);
173} 178}
diff --git a/src/lib/libssl/src/crypto/bio/b_sock.c b/src/lib/libssl/src/crypto/bio/b_sock.c
index 8e86383cc6..be8b555217 100644
--- a/src/lib/libssl/src/crypto/bio/b_sock.c
+++ b/src/lib/libssl/src/crypto/bio/b_sock.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: b_sock.c,v 1.50 2014/07/09 23:46:14 bcook Exp $ */ 1/* $OpenBSD: b_sock.c,v 1.51 2014/07/10 09:33:45 bcook Exp $ */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
@@ -117,8 +117,12 @@ err:
117int 117int
118BIO_get_port(const char *str, unsigned short *port_ptr) 118BIO_get_port(const char *str, unsigned short *port_ptr)
119{ 119{
120 struct servent_data sd; 120 struct addrinfo *res = NULL;
121 struct servent se; 121 struct addrinfo hints = {
122 .ai_family = AF_UNSPEC,
123 .ai_socktype = SOCK_STREAM,
124 .ai_flags = AI_PASSIVE,
125 };
122 long port; 126 long port;
123 char *ep; 127 char *ep;
124 128
@@ -141,9 +145,8 @@ BIO_get_port(const char *str, unsigned short *port_ptr)
141 goto done; 145 goto done;
142 } 146 }
143 147
144 memset(&sd, 0, sizeof(sd)); 148 if (getaddrinfo(NULL, str, &hints, &res) == 0) {
145 if (getservbyname_r(str, "tcp", &se, &sd) == 0) { 149 port = ntohs(((struct sockaddr_in *)(res->ai_addr))->sin_port);
146 port = ntohs((unsigned short)se.s_port);
147 goto done; 150 goto done;
148 } 151 }
149 152
@@ -168,6 +171,8 @@ BIO_get_port(const char *str, unsigned short *port_ptr)
168 } 171 }
169 172
170done: 173done:
174 if (res)
175 freeaddrinfo(res);
171 *port_ptr = (unsigned short)port; 176 *port_ptr = (unsigned short)port;
172 return (1); 177 return (1);
173} 178}