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>
This commit is contained in:
Richard Levitte 2016-03-30 18:18:24 +02:00
parent 3eefcea116
commit 622c7e99a9

View File

@ -742,7 +742,6 @@ int BIO_lookup(const char *host, const char *service,
#else #else
struct servent se_fallback = { NULL, NULL, 0, NULL }; struct servent se_fallback = { NULL, NULL, 0, NULL };
#endif #endif
char *proto = NULL;
CRYPTO_THREAD_run_once(&bio_lookup_init, do_bio_lookup_init); CRYPTO_THREAD_run_once(&bio_lookup_init, do_bio_lookup_init);
@ -778,18 +777,13 @@ int BIO_lookup(const char *host, const char *service,
if (service == NULL) { if (service == NULL) {
se_fallback.s_port = 0; se_fallback.s_port = 0;
se_fallback.s_proto = proto; se_fallback.s_proto = NULL;
se = &se_fallback; se = &se_fallback;
} else { } else {
char *endp = NULL; char *endp = NULL;
long portnum = strtol(service, &endp, 10); long portnum = strtol(service, &endp, 10);
char *proto = NULL;
if (endp != service && *endp == '\0'
&& portnum > 0 && portnum < 65536) {
se_fallback.s_port = htons(portnum);
se_fallback.s_proto = proto;
se = &se_fallback;
} else if (endp == service) {
switch (socktype) { switch (socktype) {
case SOCK_STREAM: case SOCK_STREAM:
proto = "tcp"; proto = "tcp";
@ -798,6 +792,13 @@ int BIO_lookup(const char *host, const char *service,
proto = "udp"; proto = "udp";
break; break;
} }
if (endp != service && *endp == '\0'
&& portnum > 0 && portnum < 65536) {
se_fallback.s_port = htons(portnum);
se_fallback.s_proto = proto;
se = &se_fallback;
} else if (endp == service) {
se = getservbyname(service, proto); se = getservbyname(service, proto);
if (se == NULL) { if (se == NULL) {