Show
Ignore:
Timestamp:
09/13/09 03:46:12 (5 years ago)
Author:
Theo Schlossnagle <jesus@omniti.com>
git-committer:
Theo Schlossnagle <jesus@omniti.com> 1252813572 +0000
git-parent:

[2ea77243f4b484e20c2101cda30ec9fa0e30ea7b]

git-author:
Theo Schlossnagle <jesus@omniti.com> 1252813572 +0000
Message:

closes #173

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • src/eventer/Makefile.in

    ra504323 r72c5b0b  
    1313        @EVENTER_OBJS@ \ 
    1414        eventer_POSIX_fd_opset.o \ 
    15         eventer_SSL_fd_opset.o
     15        eventer_SSL_fd_opset.o OETS_asn1_helper.o
    1616        eventer_jobq.o 
    1717 
  • src/eventer/eventer_SSL_fd_opset.c

    r9488f45 r72c5b0b  
    3535#include "utils/noit_log.h" 
    3636#include "eventer/eventer_SSL_fd_opset.h" 
     37#include "eventer/OETS_asn1_helper.h" 
    3738 
    3839#include <sys/socket.h> 
     
    5051  char    *issuer; 
    5152  char    *subject; 
     53  time_t   start_time; 
     54  time_t   end_time; 
     55  char    *cert_error; 
    5256  eventer_ssl_verify_func_t verify_cb; 
    5357  void    *verify_cb_closure; 
     
    108112                         X509_STORE_CTX *x509ctx, void *closure) { 
    109113  time_t now; 
     114  int err; 
    110115  X509 *peer; 
     116  ASN1_TIME *t; 
    111117  if(!x509ctx) return -1; 
    112118  peer = X509_STORE_CTX_get_current_cert(x509ctx); 
    113119  time(&now); 
    114   if(X509_cmp_time(X509_get_notBefore(peer), &now) > 0) return -1; 
    115   if(X509_cmp_time(X509_get_notAfter(peer), &now) < 0) return 1; 
     120  t = X509_get_notBefore(peer); 
     121  ctx->start_time = OETS_ASN1_TIME_get(t, &err); 
     122  if(X509_cmp_time(t, &now) > 0) return -1; 
     123  t = X509_get_notAfter(peer); 
     124  ctx->end_time = OETS_ASN1_TIME_get(t, &err); 
     125  if(X509_cmp_time(t, &now) < 0) return 1; 
    116126  return 0; 
    117127} 
     
    134144    ignore_dates = "false"; 
    135145 
     146  if(options == NULL) { 
     147    /* Don't care about anything */ 
     148    opt_no_ca = "true"; 
     149    ignore_dates = "true"; 
     150  } 
    136151  ssl = X509_STORE_CTX_get_ex_data(x509ctx, 
    137152                                   SSL_get_ex_data_X509_STORE_CTX_idx()); 
     
    143158     (v_res == X509_V_ERR_CERT_UNTRUSTED) || 
    144159     (v_res == X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE)) { 
     160    ctx->cert_error = strdup(X509_verify_cert_error_string(v_res)); 
    145161    if(!strcmp(opt_no_ca, "true")) ok = 1; 
    146162    else { 
     
    176192  ctx->type = strdup(buffer); \ 
    177193} \ 
    178 char * \ 
     194const char * \ 
    179195eventer_ssl_get_peer_##type(eventer_ssl_ctx_t *ctx) { \ 
    180196  return ctx->type; \ 
     
    183199GET_SET_X509_NAME(issuer) 
    184200GET_SET_X509_NAME(subject) 
     201 
     202time_t 
     203eventer_ssl_get_peer_start_time(eventer_ssl_ctx_t *ctx) { 
     204  return ctx->start_time; 
     205} 
     206time_t 
     207eventer_ssl_get_peer_end_time(eventer_ssl_ctx_t *ctx) { 
     208  return ctx->end_time; 
     209} 
     210const char * 
     211eventer_ssl_get_peer_error(eventer_ssl_ctx_t *ctx) { 
     212  return ctx->cert_error; 
     213} 
    185214 
    186215static int 
     
    208237  if(ctx->issuer) free(ctx->issuer); 
    209238  if(ctx->subject) free(ctx->subject); 
     239  if(ctx->cert_error) free(ctx->cert_error); 
    210240  free(ctx); 
    211241} 
  • src/eventer/eventer_SSL_fd_opset.h

    r88a7178 r72c5b0b  
    9292                          X509_STORE_CTX *x509ctx, void *closure); 
    9393 
     94/* These are all helper functions to expose information 
     95 * gleaned in the cert verfication process. 
     96 */ 
    9497#define GET_SET_X509_NAME_PROTO(type) \ 
    95 API_EXPORT(char *) \ 
     98API_EXPORT(const char *) \ 
    9699  eventer_ssl_get_peer_##type(eventer_ssl_ctx_t *ctx) 
    97100GET_SET_X509_NAME_PROTO(issuer); 
    98101GET_SET_X509_NAME_PROTO(subject); 
     102GET_SET_X509_NAME_PROTO(error); 
     103API_EXPORT(time_t) 
     104  eventer_ssl_get_peer_start_time(eventer_ssl_ctx_t *ctx); 
     105API_EXPORT(time_t) 
     106  eventer_ssl_get_peer_end_time(eventer_ssl_ctx_t *ctx); 
    99107 
    100108#endif