From: Richard Levitte Date: Wed, 10 Feb 2016 21:33:44 +0000 (+0100) Subject: Rework BIO_ADDRINFO_protocol() to return correct values X-Git-Tag: OpenSSL_1_1_0-pre3~103 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=c72fb77ff2644cf7edc9821a431c2faf123d4daf;p=oweals%2Fopenssl.git Rework BIO_ADDRINFO_protocol() to return correct values As noted already, some platforms don't fill in ai_protocol as expected. To circumvent that, we have BIO_ADDRINFO_protocol() to compute a sensible answer in that case. Reviewed-by: Kurt Roeckx --- diff --git a/crypto/bio/b_addr.c b/crypto/bio/b_addr.c index 9131dcdd16..459443b3d9 100644 --- a/crypto/bio/b_addr.c +++ b/crypto/bio/b_addr.c @@ -379,8 +379,24 @@ int BIO_ADDRINFO_socktype(const BIO_ADDRINFO *bai) int BIO_ADDRINFO_protocol(const BIO_ADDRINFO *bai) { - if (bai != NULL) - return bai->bai_protocol; + if (bai != NULL) { + if (bai->bai_protocol != 0) + return bai->bai_protocol; + +#ifdef AF_UNIX + if (bai->bai_family == AF_UNIX) + return 0; +#endif + + switch (bai->bai_socktype) { + case SOCK_STREAM: + return IPPROTO_TCP; + case SOCK_DGRAM: + return IPPROTO_UDP; + default: + break; + } + } return 0; }