diff options
author | bcook <bcook@cvs.openbsd.org> | 2014-07-10 09:33:46 +0000 |
---|---|---|
committer | bcook <bcook@cvs.openbsd.org> | 2014-07-10 09:33:46 +0000 |
commit | 5bb310fbfe01cbd22bfe2d42a0e0089cde07c9a6 (patch) | |
tree | ba91821984c5ea47531d68c7d70da95009e5e7a3 | |
parent | 44a3f33f71ec399163c8d24788579119b8ae38aa (diff) |
replace getservbyname_r with getaddrinfo for portability
ok jsing@
-rw-r--r-- | lib/libssl/src/crypto/bio/b_sock.c | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/lib/libssl/src/crypto/bio/b_sock.c b/lib/libssl/src/crypto/bio/b_sock.c index 8e86383cc6f..be8b5552178 100644 --- a/lib/libssl/src/crypto/bio/b_sock.c +++ b/lib/libssl/src/crypto/bio/b_sock.c @@ -1,4 +1,4 @@ -/* $OpenBSD: b_sock.c,v 1.50 2014/07/09 23:46:14 bcook Exp $ */ +/* $OpenBSD: b_sock.c,v 1.51 2014/07/10 09:33:45 bcook Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * @@ -117,8 +117,12 @@ err: int BIO_get_port(const char *str, unsigned short *port_ptr) { - struct servent_data sd; - struct servent se; + struct addrinfo *res = NULL; + struct addrinfo hints = { + .ai_family = AF_UNSPEC, + .ai_socktype = SOCK_STREAM, + .ai_flags = AI_PASSIVE, + }; long port; char *ep; @@ -141,9 +145,8 @@ BIO_get_port(const char *str, unsigned short *port_ptr) goto done; } - memset(&sd, 0, sizeof(sd)); - if (getservbyname_r(str, "tcp", &se, &sd) == 0) { - port = ntohs((unsigned short)se.s_port); + if (getaddrinfo(NULL, str, &hints, &res) == 0) { + port = ntohs(((struct sockaddr_in *)(res->ai_addr))->sin_port); goto done; } @@ -168,6 +171,8 @@ BIO_get_port(const char *str, unsigned short *port_ptr) } done: + if (res) + freeaddrinfo(res); *port_ptr = (unsigned short)port; return (1); } |