Commit ed03c461 authored by Richard Levitte's avatar Richard Levitte
Browse files

Make sure getaddrinfo and getnameinfo works as intended on Windows



Both getaddrinfo() and getnameinfo() have to be preceeded with a call
to BIO_sock_init().

Also, make sure to give gai_strerror() the actual error code.

Reviewed-by: default avatarStephen Henson <steve@openssl.org>
parent b31feae6
Loading
Loading
Loading
Loading
+9 −2
Original line number Diff line number Diff line
@@ -214,6 +214,9 @@ unsigned short BIO_ADDR_rawport(const BIO_ADDR *ap)
static int addr_strings(const BIO_ADDR *ap, int numeric,
                        char **hostname, char **service)
{
    if (BIO_sock_init() != 1)
        return 0;

    if (1) {
#ifdef AI_PASSIVE
        int ret = 0;
@@ -633,7 +636,11 @@ int BIO_lookup(const char *host, const char *service,
    }
#endif

    if (BIO_sock_init() != 1)
        return 0;

    if (1) {
        int gai_ret = 0;
#ifdef AI_PASSIVE
        struct addrinfo hints;

@@ -655,7 +662,7 @@ int BIO_lookup(const char *host, const char *service,
        /* Note that |res| SHOULD be a 'struct addrinfo **' thanks to
         * macro magic in bio_lcl.h
         */
        switch (getaddrinfo(host, service, &hints, res)) {
        switch ((gai_ret = getaddrinfo(host, service, &hints, res))) {
# ifdef EAI_SYSTEM
        case EAI_SYSTEM:
            SYSerr(SYS_F_GETADDRINFO, get_last_socket_error());
@@ -667,7 +674,7 @@ int BIO_lookup(const char *host, const char *service,
            break;
        default:
            BIOerr(BIO_F_BIO_LOOKUP, ERR_R_SYS_LIB);
            ERR_add_error_data(1, gai_strerror(ret));
            ERR_add_error_data(1, gai_strerror(gai_ret));
            break;
        }
    } else {