[openssl-commits] [openssl] master update

Richard Levitte levitte at openssl.org
Thu Feb 11 13:13:05 UTC 2016


The branch master has been updated
       via  d94c444bcdc12f63ed122fa7ad0d1b71fa319ce7 (commit)
       via  c72fb77ff2644cf7edc9821a431c2faf123d4daf (commit)
      from  210ac6824670b4d207f6ea7257d21adb44986ee4 (commit)


- Log -----------------------------------------------------------------
commit d94c444bcdc12f63ed122fa7ad0d1b71fa319ce7
Author: Richard Levitte <levitte at openssl.org>
Date:   Wed Feb 10 22:36:02 2016 +0100

    The protocol variable has lost its use, remove it
    
    Reviewed-by: Kurt Roeckx <kurt at openssl.org>

commit c72fb77ff2644cf7edc9821a431c2faf123d4daf
Author: Richard Levitte <levitte at openssl.org>
Date:   Wed Feb 10 22:33:44 2016 +0100

    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 <kurt at openssl.org>

-----------------------------------------------------------------------

Summary of changes:
 apps/s_socket.c     | 14 ++------------
 crypto/bio/b_addr.c | 20 ++++++++++++++++++--
 2 files changed, 20 insertions(+), 14 deletions(-)

diff --git a/apps/s_socket.c b/apps/s_socket.c
index 20c6626..6d781f4 100644
--- a/apps/s_socket.c
+++ b/apps/s_socket.c
@@ -167,11 +167,6 @@ int init_client(int *sock, const char *host, const char *port,
 
     ret = 0;
     for (ai = res; ai != NULL; ai = BIO_ADDRINFO_next(ai)) {
-        int protocol = (type == SOCK_STREAM ? IPPROTO_TCP : IPPROTO_UDP);
-# ifdef AF_UNIX
-        if (BIO_ADDRINFO_family(ai) == AF_UNIX)
-            protocol = 0;
-# endif
         /* Admitedly, these checks are quite paranoid, we should
            not get anything in the BIO_ADDRINFO chain that we haven't
            asked for */
@@ -179,7 +174,7 @@ int init_client(int *sock, const char *host, const char *port,
                        && (type == 0 || type == BIO_ADDRINFO_socktype(res)));
 
         *sock = BIO_socket(BIO_ADDRINFO_family(ai), BIO_ADDRINFO_socktype(ai),
-                           protocol, 0);
+                           BIO_ADDRINFO_protocol(res), 0);
         if (*sock == INVALID_SOCKET) {
             /* Maybe the kernel doesn't support the socket family, even if
              * BIO_lookup() added it in the returned result...
@@ -236,7 +231,6 @@ int do_server(int *accept_sock, const char *host, const char *port,
     int i;
     BIO_ADDRINFO *res = NULL;
     int ret = 0;
-    int protocol = (type == SOCK_STREAM ? IPPROTO_TCP : IPPROTO_UDP);
 
     if (!BIO_sock_init())
         return 0;
@@ -246,10 +240,6 @@ int do_server(int *accept_sock, const char *host, const char *port,
         return 0;
     }
 
-# ifdef AF_UNIX
-    if (BIO_ADDRINFO_family(res) == AF_UNIX)
-        protocol = 0;
-# endif
     /* Admitedly, these checks are quite paranoid, we should
        not get anything in the BIO_ADDRINFO chain that we haven't
        asked for */
@@ -257,7 +247,7 @@ int do_server(int *accept_sock, const char *host, const char *port,
                    && (type == 0 || type == BIO_ADDRINFO_socktype(res)));
 
     asock = BIO_socket(BIO_ADDRINFO_family(res), BIO_ADDRINFO_socktype(res),
-                       protocol, 0);
+                       BIO_ADDRINFO_protocol(res), 0);
     if (asock == INVALID_SOCKET
         || !BIO_listen(asock, BIO_ADDRINFO_address(res), BIO_SOCK_REUSEADDR)) {
         BIO_ADDRINFO_free(res);
diff --git a/crypto/bio/b_addr.c b/crypto/bio/b_addr.c
index 9131dcd..459443b 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;
 }
 


More information about the openssl-commits mailing list