| 344 | } |
| 345 | |
| 346 | static char *ssl_var_lookup_ssl(apr_pool_t *p, SSLConnRec *sslconn, |
| 347 | request_rec *r, char *var) |
| 348 | { |
| 349 | char *result; |
| 350 | X509 *xs; |
| 351 | STACK_OF(X509) *sk; |
| 352 | SSL *ssl; |
| 353 | |
| 354 | result = NULL; |
| 355 | |
| 356 | ssl = sslconn->ssl; |
| 357 | if (strlen(var) > 8 && strcEQn(var, "VERSION_", 8)) { |
| 358 | result = ssl_var_lookup_ssl_version(p, var+8); |
| 359 | } |
| 360 | else if (ssl != NULL && strcEQ(var, "PROTOCOL")) { |
| 361 | result = (char *)SSL_get_version(ssl); |
| 362 | } |
| 363 | else if (ssl != NULL && strcEQ(var, "SESSION_ID")) { |
| 364 | char buf[MODSSL_SESSION_ID_STRING_LEN]; |
| 365 | SSL_SESSION *pSession = SSL_get_session(ssl); |
| 366 | if (pSession) { |
| 367 | IDCONST unsigned char *id; |
| 368 | unsigned int idlen; |
| 369 | |
| 370 | #ifdef OPENSSL_NO_SSL_INTERN |
| 371 | id = (unsigned char *)SSL_SESSION_get_id(pSession, &idlen); |
| 372 | #else |
| 373 | id = pSession->session_id; |
| 374 | idlen = pSession->session_id_length; |
| 375 | #endif |
| 376 | |
| 377 | result = apr_pstrdup(p, modssl_SSL_SESSION_id2sz(id, idlen, |
| 378 | buf, sizeof(buf))); |
| 379 | } |
| 380 | } |
| 381 | else if(ssl != NULL && strcEQ(var, "SESSION_RESUMED")) { |
| 382 | if (SSL_session_reused(ssl) == 1) |
| 383 | result = "Resumed"; |
| 384 | else |
| 385 | result = "Initial"; |
| 386 | } |
| 387 | else if (ssl != NULL && strlen(var) >= 6 && strcEQn(var, "CIPHER", 6)) { |
| 388 | result = ssl_var_lookup_ssl_cipher(p, sslconn, var+6); |
| 389 | } |
| 390 | else if (ssl != NULL && strlen(var) > 18 && strcEQn(var, "CLIENT_CERT_CHAIN_", 18)) { |
| 391 | sk = SSL_get_peer_cert_chain(ssl); |
| 392 | result = ssl_var_lookup_ssl_cert_chain(p, sk, var+18); |
| 393 | } |
| 394 | else if (ssl != NULL && strcEQ(var, "CLIENT_CERT_RFC4523_CEA")) { |
| 395 | result = ssl_var_lookup_ssl_cert_rfc4523_cea(p, ssl); |
| 396 | } |
| 397 | else if (ssl != NULL && strcEQ(var, "CLIENT_VERIFY")) { |
| 398 | result = ssl_var_lookup_ssl_cert_verify(p, sslconn); |
| 399 | } |
| 400 | else if (ssl != NULL && strlen(var) > 7 && strcEQn(var, "CLIENT_", 7)) { |
| 401 | if ((xs = SSL_get_peer_certificate(ssl)) != NULL) { |
| 402 | result = ssl_var_lookup_ssl_cert(p, r, xs, var+7); |
| 403 | X509_free(xs); |
no test coverage detected