diff options
Diffstat (limited to 'src/lib/libssl/ssl_lib.c')
-rw-r--r-- | src/lib/libssl/ssl_lib.c | 30 |
1 files changed, 12 insertions, 18 deletions
diff --git a/src/lib/libssl/ssl_lib.c b/src/lib/libssl/ssl_lib.c index 8e89911f48..a3c9309488 100644 --- a/src/lib/libssl/ssl_lib.c +++ b/src/lib/libssl/ssl_lib.c | |||
@@ -1054,9 +1054,6 @@ long SSL_ctrl(SSL *s,int cmd,long larg,void *parg) | |||
1054 | s->max_cert_list=larg; | 1054 | s->max_cert_list=larg; |
1055 | return(l); | 1055 | return(l); |
1056 | case SSL_CTRL_SET_MTU: | 1056 | case SSL_CTRL_SET_MTU: |
1057 | if (larg < (long)dtls1_min_mtu()) | ||
1058 | return 0; | ||
1059 | |||
1060 | if (SSL_version(s) == DTLS1_VERSION || | 1057 | if (SSL_version(s) == DTLS1_VERSION || |
1061 | SSL_version(s) == DTLS1_BAD_VER) | 1058 | SSL_version(s) == DTLS1_BAD_VER) |
1062 | { | 1059 | { |
@@ -1309,36 +1306,33 @@ int SSL_set_cipher_list(SSL *s,const char *str) | |||
1309 | /* works well for SSLv2, not so good for SSLv3 */ | 1306 | /* works well for SSLv2, not so good for SSLv3 */ |
1310 | char *SSL_get_shared_ciphers(const SSL *s,char *buf,int len) | 1307 | char *SSL_get_shared_ciphers(const SSL *s,char *buf,int len) |
1311 | { | 1308 | { |
1312 | char *p; | 1309 | char *end; |
1313 | STACK_OF(SSL_CIPHER) *sk; | 1310 | STACK_OF(SSL_CIPHER) *sk; |
1314 | SSL_CIPHER *c; | 1311 | SSL_CIPHER *c; |
1312 | size_t curlen = 0; | ||
1315 | int i; | 1313 | int i; |
1316 | 1314 | ||
1317 | if ((s->session == NULL) || (s->session->ciphers == NULL) || | 1315 | if ((s->session == NULL) || (s->session->ciphers == NULL) || |
1318 | (len < 2)) | 1316 | (len < 2)) |
1319 | return(NULL); | 1317 | return(NULL); |
1320 | 1318 | ||
1321 | p=buf; | ||
1322 | sk=s->session->ciphers; | 1319 | sk=s->session->ciphers; |
1320 | buf[0] = '\0'; | ||
1323 | for (i=0; i<sk_SSL_CIPHER_num(sk); i++) | 1321 | for (i=0; i<sk_SSL_CIPHER_num(sk); i++) |
1324 | { | 1322 | { |
1325 | int n; | ||
1326 | |||
1327 | c=sk_SSL_CIPHER_value(sk,i); | 1323 | c=sk_SSL_CIPHER_value(sk,i); |
1328 | n=strlen(c->name); | 1324 | end = buf + curlen; |
1329 | if (n+1 > len) | 1325 | if (strlcat(buf, c->name, len) >= len || |
1326 | (curlen = strlcat(buf, ":", len)) >= len) | ||
1330 | { | 1327 | { |
1331 | if (p != buf) | 1328 | /* remove truncated cipher from list */ |
1332 | --p; | 1329 | *end = '\0'; |
1333 | *p='\0'; | 1330 | break; |
1334 | return buf; | ||
1335 | } | 1331 | } |
1336 | strcpy(p,c->name); | ||
1337 | p+=n; | ||
1338 | *(p++)=':'; | ||
1339 | len-=n+1; | ||
1340 | } | 1332 | } |
1341 | p[-1]='\0'; | 1333 | /* remove trailing colon */ |
1334 | if ((end = strrchr(buf, ':')) != NULL) | ||
1335 | *end = '\0'; | ||
1342 | return(buf); | 1336 | return(buf); |
1343 | } | 1337 | } |
1344 | 1338 | ||