Fix s_server DTLSv1_listen issues

Use sockaddr_storage not sockaddr for the client IP address to allow for
IPv6.
Also fixed a section of code which was conditional on OPENSSL_NO_DTLS1
which should not have been.

Reviewed-by: Andy Polyakov <appro@openssl.org>
This commit is contained in:
Matt Caswell 2015-09-23 10:02:18 +01:00
parent ca7256fbd9
commit d8249e99b9

View File

@ -261,8 +261,8 @@ static int enable_timeouts = 0;
static long socket_mtu; static long socket_mtu;
#ifndef OPENSSL_NO_DTLS1 #ifndef OPENSSL_NO_DTLS1
static int cert_chain = 0; static int cert_chain = 0;
static int dtlslisten = 0;
#endif #endif
static int dtlslisten = 0;
static BIO *serverinfo_in = NULL; static BIO *serverinfo_in = NULL;
static const char *s_serverinfo_file = NULL; static const char *s_serverinfo_file = NULL;
@ -2395,7 +2395,7 @@ static int init_ssl_connection(SSL *con)
unsigned next_proto_neg_len; unsigned next_proto_neg_len;
#endif #endif
unsigned char *exportedkeymat; unsigned char *exportedkeymat;
struct sockaddr client; struct sockaddr_storage client;
#ifndef OPENSSL_NO_DTLS1 #ifndef OPENSSL_NO_DTLS1
if(dtlslisten) { if(dtlslisten) {
@ -2409,7 +2409,8 @@ static int init_ssl_connection(SSL *con)
BIO_get_fd(wbio, &fd); BIO_get_fd(wbio, &fd);
} }
if(!wbio || connect(fd, &client, sizeof(struct sockaddr))) { if(!wbio || connect(fd, (struct sockaddr *)&client,
sizeof(struct sockaddr_storage))) {
BIO_printf(bio_err, "ERROR - unable to connect\n"); BIO_printf(bio_err, "ERROR - unable to connect\n");
return 0; return 0;
} }
@ -2447,13 +2448,11 @@ static int init_ssl_connection(SSL *con)
#endif #endif
if (i <= 0) { if (i <= 0) {
#ifndef OPENSSL_NO_DTLS1
if ((dtlslisten && i == 0) if ((dtlslisten && i == 0)
|| (!dtlslisten && BIO_sock_should_retry(i))) { || (!dtlslisten && BIO_sock_should_retry(i))) {
BIO_printf(bio_s_out, "DELAY\n"); BIO_printf(bio_s_out, "DELAY\n");
return (1); return (1);
} }
#endif
BIO_printf(bio_err, "ERROR\n"); BIO_printf(bio_err, "ERROR\n");