diff options
author | Jung-uk Kim <jkim@FreeBSD.org> | 2016-05-03 18:00:27 +0000 |
---|---|---|
committer | Jung-uk Kim <jkim@FreeBSD.org> | 2016-05-03 18:00:27 +0000 |
commit | 57f1256b1a087adbdf8e5c080dd9ed7975de939a (patch) | |
tree | 2dd85c58056a364765d9ae59d6a1774d41f88523 /ssl/ssl_rsa.c | |
parent | 9aeed18ad799c20d3accf6e1535817538dc983f6 (diff) | |
download | src-test2-57f1256b1a087adbdf8e5c080dd9ed7975de939a.tar.gz src-test2-57f1256b1a087adbdf8e5c080dd9ed7975de939a.zip |
Notes
Diffstat (limited to 'ssl/ssl_rsa.c')
-rw-r--r-- | ssl/ssl_rsa.c | 28 |
1 files changed, 21 insertions, 7 deletions
diff --git a/ssl/ssl_rsa.c b/ssl/ssl_rsa.c index b0f75c913f91..82022470bfd7 100644 --- a/ssl/ssl_rsa.c +++ b/ssl/ssl_rsa.c @@ -841,7 +841,7 @@ static int serverinfo_srv_add_cb(SSL *s, unsigned int ext_type, return 0; /* No extension found, don't send extension */ return 1; /* Send extension */ } - return -1; /* No serverinfo data found, don't send + return 0; /* No serverinfo data found, don't send * extension */ } @@ -870,12 +870,26 @@ static int serverinfo_process_buffer(const unsigned char *serverinfo, /* Register callbacks for extensions */ ext_type = (serverinfo[0] << 8) + serverinfo[1]; - if (ctx && !SSL_CTX_add_server_custom_ext(ctx, ext_type, - serverinfo_srv_add_cb, - NULL, NULL, - serverinfo_srv_parse_cb, - NULL)) - return 0; + if (ctx) { + int have_ext_cbs = 0; + size_t i; + custom_ext_methods *exts = &ctx->cert->srv_ext; + custom_ext_method *meth = exts->meths; + + for (i = 0; i < exts->meths_count; i++, meth++) { + if (ext_type == meth->ext_type) { + have_ext_cbs = 1; + break; + } + } + + if (!have_ext_cbs && !SSL_CTX_add_server_custom_ext(ctx, ext_type, + serverinfo_srv_add_cb, + NULL, NULL, + serverinfo_srv_parse_cb, + NULL)) + return 0; + } serverinfo += 2; serverinfo_length -= 2; |