diff options
| -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 | } |
