| 809 | } |
| 810 | |
| 811 | static char *ssl_var_lookup_ssl_cert_verify(apr_pool_t *p, SSLConnRec *sslconn) |
| 812 | { |
| 813 | char *result; |
| 814 | long vrc; |
| 815 | const char *verr; |
| 816 | const char *vinfo; |
| 817 | SSL *ssl; |
| 818 | X509 *xs; |
| 819 | |
| 820 | result = NULL; |
| 821 | ssl = sslconn->ssl; |
| 822 | verr = sslconn->verify_error; |
| 823 | vinfo = sslconn->verify_info; |
| 824 | vrc = SSL_get_verify_result(ssl); |
| 825 | xs = SSL_get_peer_certificate(ssl); |
| 826 | |
| 827 | if (vrc == X509_V_OK && verr == NULL && xs == NULL) |
| 828 | /* no client verification done at all */ |
| 829 | result = "NONE"; |
| 830 | else if (vrc == X509_V_OK && verr == NULL && vinfo == NULL && xs != NULL) |
| 831 | /* client verification done successful */ |
| 832 | result = "SUCCESS"; |
| 833 | else if (vrc == X509_V_OK && vinfo != NULL && strEQ(vinfo, "GENEROUS")) |
| 834 | /* client verification done in generous way */ |
| 835 | result = "GENEROUS"; |
| 836 | else |
| 837 | /* client verification failed */ |
| 838 | result = apr_psprintf(p, "FAILED:%s", |
| 839 | verr ? verr : X509_verify_cert_error_string(vrc)); |
| 840 | |
| 841 | if (xs) |
| 842 | X509_free(xs); |
| 843 | return result; |
| 844 | } |
| 845 | |
| 846 | static char *ssl_var_lookup_ssl_cipher(apr_pool_t *p, SSLConnRec *sslconn, char *var) |
| 847 | { |
no outgoing calls
no test coverage detected