summaryrefslogtreecommitdiffstats
path: root/crypto/bio/b_addr.c
diff options
context:
space:
mode:
authorRichard Levitte <levitte@openssl.org>2016-03-30 18:18:24 +0200
committerRichard Levitte <levitte@openssl.org>2016-03-30 18:45:33 +0200
commit622c7e99a9e9c4632b483895cf2dc5edaa2e52bd (patch)
treeaa8c8d371795e3fa7bb8a486378ea31ec6ffb454 /crypto/bio/b_addr.c
parent3eefcea116b8143e99fbd9681ef8e364113c2d23 (diff)
Rearrange the use of 'proto' in BIO_lookup
'proto' wasn't properly used as a fallback in all appropriate cases. Reviewed-by: Rich Salz <rsalz@openssl.org>
Diffstat (limited to 'crypto/bio/b_addr.c')
-rw-r--r--crypto/bio/b_addr.c21
1 files changed, 11 insertions, 10 deletions
diff --git a/crypto/bio/b_addr.c b/crypto/bio/b_addr.c
index 0a6c5e9713..663ec2ee07 100644
--- a/crypto/bio/b_addr.c
+++ b/crypto/bio/b_addr.c
@@ -742,7 +742,6 @@ int BIO_lookup(const char *host, const char *service,
#else
struct servent se_fallback = { NULL, NULL, 0, NULL };
#endif
- char *proto = NULL;
CRYPTO_THREAD_run_once(&bio_lookup_init, do_bio_lookup_init);
@@ -778,11 +777,21 @@ int BIO_lookup(const char *host, const char *service,
if (service == NULL) {
se_fallback.s_port = 0;
- se_fallback.s_proto = proto;
+ se_fallback.s_proto = NULL;
se = &se_fallback;
} else {
char *endp = NULL;
long portnum = strtol(service, &endp, 10);
+ char *proto = NULL;
+
+ switch (socktype) {
+ case SOCK_STREAM:
+ proto = "tcp";
+ break;
+ case SOCK_DGRAM:
+ proto = "udp";
+ break;
+ }
if (endp != service && *endp == '\0'
&& portnum > 0 && portnum < 65536) {
@@ -790,14 +799,6 @@ int BIO_lookup(const char *host, const char *service,
se_fallback.s_proto = proto;
se = &se_fallback;
} else if (endp == service) {
- switch (socktype) {
- case SOCK_STREAM:
- proto = "tcp";
- break;
- case SOCK_DGRAM:
- proto = "udp";
- break;
- }
se = getservbyname(service, proto);
if (se == NULL) {