diff options
author | bcook <> | 2014-07-10 09:33:45 +0000 |
---|---|---|
committer | bcook <> | 2014-07-10 09:33:45 +0000 |
commit | 4011d14a361cbf02683ee6a3c4029eaa2669d81b (patch) | |
tree | 5d9d67cc7d9f924b93a5b0bebd8202f2f5d6a92f /src | |
parent | d911e94b7f58a5d8e2d21f13e20bbe04b9707e86 (diff) | |
download | openbsd-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.c | 17 | ||||
-rw-r--r-- | src/lib/libssl/src/crypto/bio/b_sock.c | 17 |
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: | |||
117 | int | 117 | int |
118 | BIO_get_port(const char *str, unsigned short *port_ptr) | 118 | BIO_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 | ||
170 | done: | 173 | done: |
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: | |||
117 | int | 117 | int |
118 | BIO_get_port(const char *str, unsigned short *port_ptr) | 118 | BIO_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 | ||
170 | done: | 173 | done: |
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 | } |