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