Changeset 1530

Show
Ignore:
Timestamp:
01/27/2007 02:31:14 PM (21 months ago)
Author:
jan
Message:

added support for client-certs to auth against the ldap-server (taken
from #761)

Location:
trunk
Files:
3 modified

Legend:

Unmodified
Added
Removed
  • trunk/doc/authentication.txt

    r1349 r1530  
    169169  auth.backend.ldap.starttls   = "enable" 
    170170  auth.backend.ldap.ca-file   = "/etc/CAcertificate.pem" 
     171  # if server performs client certificates validation we can  
     172  # connect using user defined client certificates 
     173  auth.backend.ldap.cert      = "/etc/cert.pem" 
     174  auth.backend.ldap.key       = "/etc/req.pem" 
    171175 
    172176  ## restrictions 
  • trunk/src/http_auth.h

    r1517 r1530  
    3636        buffer *auth_ldap_filter; 
    3737        buffer *auth_ldap_cafile; 
     38        buffer *auth_ldap_cert; 
     39        buffer *auth_ldap_key; 
    3840        unsigned short auth_ldap_starttls; 
    3941        unsigned short auth_ldap_allow_empty_pw; 
  • trunk/src/mod_auth.c

    r1526 r1530  
    8080                        buffer_free(s->auth_ldap_filter); 
    8181                        buffer_free(s->auth_ldap_cafile); 
     82                        buffer_free(s->auth_ldap_cert); 
     83                        buffer_free(s->auth_ldap_key); 
    8284 
    8385#ifdef USE_LDAP 
     
    115117        PATCH_OPTION(auth_ldap_filter); 
    116118        PATCH_OPTION(auth_ldap_cafile); 
     119        PATCH_OPTION(auth_ldap_cert); 
     120        PATCH_OPTION(auth_ldap_key); 
    117121        PATCH_OPTION(auth_ldap_starttls); 
    118122        PATCH_OPTION(auth_ldap_allow_empty_pw); 
     
    162166                        } else if (buffer_is_equal_string(du->key, CONST_STR_LEN("auth.backend.ldap.ca-file"))) { 
    163167                                PATCH_OPTION(auth_ldap_cafile); 
     168                        } else if (buffer_is_equal_string(du->key, CONST_STR_LEN("auth.backend.ldap.cert"))) { 
     169                                PATCH_OPTION(auth_ldap_cert); 
     170                        } else if (buffer_is_equal_string(du->key, CONST_STR_LEN("auth.backend.ldap.key"))) { 
     171                                PATCH_OPTION(auth_ldap_key); 
    164172                        } else if (buffer_is_equal_string(du->key, CONST_STR_LEN("auth.backend.ldap.starttls"))) { 
    165173                                PATCH_OPTION(auth_ldap_starttls); 
     
    307315        config_values_t cv[] = { 
    308316                { "auth.backend",                   NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION }, /* 0 */ 
    309                 { "auth.backend.plain.groupfile",   NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION }, 
    310                 { "auth.backend.plain.userfile",    NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION }, 
    311                 { "auth.require",                   NULL, T_CONFIG_LOCAL, T_CONFIG_SCOPE_CONNECTION }, 
    312                 { "auth.backend.ldap.hostname",     NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION }, 
    313                 { "auth.backend.ldap.base-dn",      NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION }, 
    314                 { "auth.backend.ldap.filter",       NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION }, 
    315                 { "auth.backend.ldap.ca-file",      NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION }, 
    316                 { "auth.backend.ldap.starttls",     NULL, T_CONFIG_BOOLEAN, T_CONFIG_SCOPE_CONNECTION }, 
    317                 { "auth.backend.ldap.bind-dn",      NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION }, 
    318                 { "auth.backend.ldap.bind-pw",      NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION }, /* 10 */ 
    319                 { "auth.backend.ldap.allow-empty-pw",     NULL, T_CONFIG_BOOLEAN, T_CONFIG_SCOPE_CONNECTION }, 
    320                 { "auth.backend.htdigest.userfile", NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION }, 
    321                 { "auth.backend.htpasswd.userfile", NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION }, 
    322                 { "auth.debug",                     NULL, T_CONFIG_SHORT, T_CONFIG_SCOPE_CONNECTION },  /* 13 */ 
     317                { "auth.backend.plain.groupfile",   NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION }, /* 1 */ 
     318                { "auth.backend.plain.userfile",    NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION }, /* 2 */ 
     319                { "auth.require",                   NULL, T_CONFIG_LOCAL, T_CONFIG_SCOPE_CONNECTION },  /* 3 */ 
     320                { "auth.backend.ldap.hostname",     NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION }, /* 4 */ 
     321                { "auth.backend.ldap.base-dn",      NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION }, /* 5 */ 
     322                { "auth.backend.ldap.filter",       NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION }, /* 6 */ 
     323                { "auth.backend.ldap.ca-file",      NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION }, /* 7 */ 
     324                { "auth.backend.ldap.cert",         NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION }, /* 8 */ 
     325                { "auth.backend.ldap.key",          NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION }, /* 9 */ 
     326                { "auth.backend.ldap.starttls",     NULL, T_CONFIG_BOOLEAN, T_CONFIG_SCOPE_CONNECTION }, /* 10 */ 
     327                { "auth.backend.ldap.bind-dn",      NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION }, /* 11 */ 
     328                { "auth.backend.ldap.bind-pw",      NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION }, /* 12 */ 
     329                { "auth.backend.ldap.allow-empty-pw",     NULL, T_CONFIG_BOOLEAN, T_CONFIG_SCOPE_CONNECTION }, /* 13 */ 
     330                { "auth.backend.htdigest.userfile", NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION }, /* 14 */ 
     331                { "auth.backend.htpasswd.userfile", NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION }, /* 15 */ 
     332                { "auth.debug",                     NULL, T_CONFIG_SHORT, T_CONFIG_SCOPE_CONNECTION },  /* 16 */ 
    323333                { NULL,                             NULL, T_CONFIG_UNSET, T_CONFIG_SCOPE_UNSET } 
    324334        }; 
     
    345355                s->auth_ldap_filter = buffer_init(); 
    346356                s->auth_ldap_cafile = buffer_init(); 
     357                s->auth_ldap_cert   = buffer_init(); 
     358                s->auth_ldap_key    = buffer_init(); 
    347359                s->auth_ldap_starttls = 0; 
    348360                s->auth_debug = 0; 
     
    364376                cv[6].destination = s->auth_ldap_filter; 
    365377                cv[7].destination = s->auth_ldap_cafile; 
    366                 cv[8].destination = &(s->auth_ldap_starttls); 
    367                 cv[9].destination = s->auth_ldap_binddn; 
    368                 cv[10].destination = s->auth_ldap_bindpw; 
    369                 cv[11].destination = &(s->auth_ldap_allow_empty_pw); 
    370                 cv[12].destination = s->auth_htdigest_userfile; 
    371                 cv[13].destination = s->auth_htpasswd_userfile; 
    372                 cv[14].destination = &(s->auth_debug); 
     378                cv[8].destination = s->auth_ldap_cert; 
     379                cv[9].destination = s->auth_ldap_key; 
     380                cv[10].destination = &(s->auth_ldap_starttls); 
     381                cv[11].destination = s->auth_ldap_binddn; 
     382                cv[12].destination = s->auth_ldap_bindpw; 
     383                cv[13].destination = &(s->auth_ldap_allow_empty_pw); 
     384                cv[14].destination = s->auth_htdigest_userfile; 
     385                cv[15].destination = s->auth_htpasswd_userfile; 
     386                cv[16].destination = &(s->auth_debug); 
    373387 
    374388                p->config_storage[i] = s; 
     
    613627                                        } 
    614628 
     629                                        if (!buffer_is_empty(s->auth_ldap_cert)) { 
     630                                                if (LDAP_OPT_SUCCESS != (ret = ldap_set_option(NULL, LDAP_OPT_X_TLS_CERTFILE,  
     631                                                                                s->auth_ldap_cert->ptr))) { 
     632                                                        log_error_write(srv, __FILE__, __LINE__, "ss",  
     633                                                                        "Loading TLS certificate failed:", ldap_err2string(ret)); 
     634                                                 
     635                                                        return HANDLER_ERROR; 
     636                                                } 
     637                                        } 
     638                                         
     639                                        if (!buffer_is_empty(s->auth_ldap_key)) { 
     640                                                if (LDAP_OPT_SUCCESS != (ret = ldap_set_option(NULL, LDAP_OPT_X_TLS_KEYFILE,  
     641                                                                                s->auth_ldap_key->ptr))) { 
     642                                                        log_error_write(srv, __FILE__, __LINE__, "ss",  
     643                                                                        "Loading TLS key certificate failed:", ldap_err2string(ret)); 
     644                                                 
     645                                                        return HANDLER_ERROR; 
     646                                                } 
     647                                        } 
     648 
    615649                                        if (LDAP_OPT_SUCCESS != (ret = ldap_start_tls_s(s->ldap, NULL,  NULL))) { 
    616650                                                log_error_write(srv, __FILE__, __LINE__, "ss", "ldap startTLS failed:", ldap_err2string(ret));