diff options
author | Andy Polyakov <appro@openssl.org> | 2010-01-06 21:22:56 +0000 |
---|---|---|
committer | Andy Polyakov <appro@openssl.org> | 2010-01-06 21:22:56 +0000 |
commit | cba9ffc32a68586ff00c1770df1a516bebf992d2 (patch) | |
tree | 3f85550c5c8fd4c945cd201d92faa6cd92e90434 /apps | |
parent | 76998a71bc3ce86d1af2bddd26c8d7f2040088df (diff) | |
download | openssl-cba9ffc32a68586ff00c1770df1a516bebf992d2.zip openssl-cba9ffc32a68586ff00c1770df1a516bebf992d2.tar.gz openssl-cba9ffc32a68586ff00c1770df1a516bebf992d2.tar.bz2 |
Fix compilation on older Linux. Linux didn't always have sockaddr_storage,
not to mention that first sockaddr_storage had __ss_family, not ss_family.
In other words it makes more sense to avoid sockaddr_storage...
Diffstat (limited to 'apps')
-rw-r--r-- | apps/s_cb.c | 56 |
1 files changed, 20 insertions, 36 deletions
diff --git a/apps/s_cb.c b/apps/s_cb.c index 90a3cb8..c4f5512 100644 --- a/apps/s_cb.c +++ b/apps/s_cb.c @@ -696,15 +696,13 @@ int MS_CALLBACK generate_cookie_callback(SSL *ssl, unsigned char *cookie, unsign { unsigned char *buffer, result[EVP_MAX_MD_SIZE]; unsigned int length, resultlength; -#if OPENSSL_USE_IPV6 union { - struct sockaddr_storage ss; - struct sockaddr_in6 s6; + struct sockaddr sa; struct sockaddr_in s4; - } peer; -#else - struct sockaddr_in peer; +#if OPENSSL_USE_IPV6 + struct sockaddr_in6 s6; #endif + } peer; /* Initialize a random secret */ if (!cookie_initialized) @@ -721,26 +719,23 @@ int MS_CALLBACK generate_cookie_callback(SSL *ssl, unsigned char *cookie, unsign (void)BIO_dgram_get_peer(SSL_get_rbio(ssl), &peer); /* Create buffer with peer's address and port */ -#if OPENSSL_USE_IPV6 length = 0; - switch (peer.ss.ss_family) + switch (peer.sa.sa_family) { case AF_INET: length += sizeof(struct in_addr); length += sizeof(peer.s4.sin_port); break; +#if OPENSSL_USE_IPV6 case AF_INET6: length += sizeof(struct in6_addr); length += sizeof(peer.s6.sin6_port); break; +#endif default: OPENSSL_assert(0); break; } -#else - length = sizeof(peer.sin_addr); - length += sizeof(peer.sin_port); -#endif buffer = OPENSSL_malloc(length); if (buffer == NULL) @@ -749,8 +744,7 @@ int MS_CALLBACK generate_cookie_callback(SSL *ssl, unsigned char *cookie, unsign return 0; } -#if OPENSSL_USE_IPV6 - switch (peer.ss.ss_family) + switch (peer.sa.sa_family) { case AF_INET: memcpy(buffer, @@ -760,6 +754,7 @@ int MS_CALLBACK generate_cookie_callback(SSL *ssl, unsigned char *cookie, unsign &peer.s4.sin_addr, sizeof(struct in_addr)); break; +#if OPENSSL_USE_IPV6 case AF_INET6: memcpy(buffer, &peer.s6.sin6_port, @@ -768,14 +763,11 @@ int MS_CALLBACK generate_cookie_callback(SSL *ssl, unsigned char *cookie, unsign &peer.s6.sin6_addr, sizeof(struct in6_addr)); break; +#endif default: OPENSSL_assert(0); break; } -#else - memcpy(buffer, &peer.sin_port, sizeof(peer.sin_port)); - memcpy(buffer + sizeof(peer.sin_port), &peer.sin_addr, sizeof(peer.sin_addr)); -#endif /* Calculate HMAC of buffer using the secret */ HMAC(EVP_sha1(), cookie_secret, COOKIE_SECRET_LENGTH, @@ -792,15 +784,13 @@ int MS_CALLBACK verify_cookie_callback(SSL *ssl, unsigned char *cookie, unsigned { unsigned char *buffer, result[EVP_MAX_MD_SIZE]; unsigned int length, resultlength; -#if OPENSSL_USE_IPV6 union { - struct sockaddr_storage ss; - struct sockaddr_in6 s6; + struct sockaddr sa; struct sockaddr_in s4; - } peer; -#else - struct sockaddr_in peer; +#if OPENSSL_USE_IPV6 + struct sockaddr_in6 s6; #endif + } peer; /* If secret isn't initialized yet, the cookie can't be valid */ if (!cookie_initialized) @@ -810,26 +800,23 @@ int MS_CALLBACK verify_cookie_callback(SSL *ssl, unsigned char *cookie, unsigned (void)BIO_dgram_get_peer(SSL_get_rbio(ssl), &peer); /* Create buffer with peer's address and port */ -#if OPENSSL_USE_IPV6 length = 0; - switch (peer.ss.ss_family) + switch (peer.sa.sa_family) { case AF_INET: length += sizeof(struct in_addr); length += sizeof(peer.s4.sin_port); break; +#if OPENSSL_USE_IPV6 case AF_INET6: length += sizeof(struct in6_addr); length += sizeof(peer.s6.sin6_port); break; +#endif default: OPENSSL_assert(0); break; } -#else - length = sizeof(peer.sin_addr); - length += sizeof(peer.sin_port); -#endif buffer = OPENSSL_malloc(length); if (buffer == NULL) @@ -838,8 +825,7 @@ int MS_CALLBACK verify_cookie_callback(SSL *ssl, unsigned char *cookie, unsigned return 0; } -#if OPENSSL_USE_IPV6 - switch (peer.ss.ss_family) + switch (peer.sa.sa_family) { case AF_INET: memcpy(buffer, @@ -849,6 +835,7 @@ int MS_CALLBACK verify_cookie_callback(SSL *ssl, unsigned char *cookie, unsigned &peer.s4.sin_addr, sizeof(struct in_addr)); break; +#if OPENSSL_USE_IPV6 case AF_INET6: memcpy(buffer, &peer.s6.sin6_port, @@ -857,14 +844,11 @@ int MS_CALLBACK verify_cookie_callback(SSL *ssl, unsigned char *cookie, unsigned &peer.s6.sin6_addr, sizeof(struct in6_addr)); break; +#endif default: OPENSSL_assert(0); break; } -#else - memcpy(buffer, &peer.sin_port, sizeof(peer.sin_port)); - memcpy(buffer + sizeof(peer.sin_port), &peer.sin_addr, sizeof(peer.sin_addr)); -#endif /* Calculate HMAC of buffer using the secret */ HMAC(EVP_sha1(), cookie_secret, COOKIE_SECRET_LENGTH, |