Add cert callback retry test.
authorDr. Stephen Henson <steve@openssl.org>
Sun, 26 Jan 2014 00:51:09 +0000 (00:51 +0000)
committerDr. Stephen Henson <steve@openssl.org>
Sun, 26 Jan 2014 16:29:50 +0000 (16:29 +0000)
apps/s_cb.c
apps/s_server.c

index 083956916c790580b84b4d8106a2026902506900..dcc9da309c2cfe3d6b71e64f833dffb31884dfc0 100644 (file)
@@ -1272,6 +1272,16 @@ static int set_cert_cb(SSL *ssl, void *arg)
        {
        int i, rv;
        SSL_EXCERT *exc = arg;
+#ifdef CERT_CB_TEST_RETRY
+       static int retry_cnt;
+       if (retry_cnt < 5)
+               {
+               retry_cnt++;
+               fprintf(stderr, "Certificate callback retry test: count %d\n",
+                                                               retry_cnt);
+               return -1;
+               }
+#endif
        SSL_certs_clear(ssl);
 
        if (!exc)
index 1bac3b438f310c114bf23ccb78280f69c3fc3461..cb68b2cc84e298de7f2857cee6f7679f2f8758a1 100644 (file)
@@ -2668,6 +2668,15 @@ static int init_ssl_connection(SSL *con)
 
 
        i=SSL_accept(con);
+#ifdef CERT_CB_TEST_RETRY
+       {
+       while (i <= 0 && SSL_get_error(con,i) == SSL_ERROR_WANT_X509_LOOKUP && SSL_state(con) == SSL3_ST_SR_CLNT_HELLO_C) 
+               {
+               fprintf(stderr, "LOOKUP from certificate callback during accept\n");
+               i=SSL_accept(con);
+               }
+       }
+#endif
 #ifndef OPENSSL_NO_SRP
        while (i <= 0 &&  SSL_get_error(con,i) == SSL_ERROR_WANT_X509_LOOKUP) 
                {