Changeset 41

Show
Ignore:
Timestamp:
05/05/08 11:12:03 (7 months ago)
Author:
ludovic.rousseau
Message:

- Use pam_syslog() instead of syslog() if available
- Do not call openlog()/closelog()

Correct Debian bug #472986.

Patch adapted from the one provided by Eric Dorland because
security/pam_ext.h is not available in "old" versions of libpam0g-dev
http://www.opensc-project.org/pipermail/opensc-devel/2008-April/011109.html

Location:
trunk
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • trunk/configure.ac

    r39 r41  
    2121# Checks for header files. 
    2222AC_HEADER_STDC 
    23 AC_CHECK_HEADERS([string.h syslog.h fcntl.h unistd.h]) 
     23AC_CHECK_HEADERS([string.h syslog.h fcntl.h unistd.h security/pam_ext.h]) 
    2424 
    2525# Checks for typedefs, structures, and compiler characteristics. 
  • trunk/src/pam_p11.c

    r34 r41  
    3232#include <security/pam_appl.h> 
    3333#include <security/pam_modules.h> 
     34#ifdef HAVE_SECURITY_PAM_EXT_H 
     35#include <security/pam_ext.h> 
     36#else 
     37#define pam_syslog(handle, level, msg...) syslog(level, ## msg) 
     38#endif 
    3439 
    3540#ifndef PAM_EXTERN 
     
    8893        unsigned siglen; 
    8994 
    90         /* open log */ 
    91         openlog(LOGNAME, LOG_CONS | LOG_PID, LOG_AUTHPRIV); 
    92  
    9395        /* check parameters */ 
    9496        if (argc != 1) { 
    95                 syslog(LOG_ERR, "need pkcs11 module as argument"); 
     97                pam_syslog(pamh, LOG_ERR, "need pkcs11 module as argument"); 
    9698                return PAM_ABORT; 
    9799        } 
     
    106108        rv = pam_get_user(pamh, &user, NULL); 
    107109        if (rv != PAM_SUCCESS) { 
    108                 syslog(LOG_ERR, "pam_get_user() failed %s", 
     110                pam_syslog(pamh, LOG_ERR, "pam_get_user() failed %s", 
    109111                       pam_strerror(pamh, rv)); 
    110112                return PAM_USER_UNKNOWN; 
     
    114116        rv = PKCS11_CTX_load(ctx, argv[0]); 
    115117        if (rv) { 
    116                 syslog(LOG_ERR, "loading pkcs11 engine failed"); 
     118                pam_syslog(pamh, LOG_ERR, "loading pkcs11 engine failed"); 
    117119                return PAM_AUTHINFO_UNAVAIL; 
    118120        } 
     
    121123        rv = PKCS11_enumerate_slots(ctx, &slots, &nslots); 
    122124        if (rv) { 
    123                 syslog(LOG_ERR, "listing slots failed"); 
     125                pam_syslog(pamh, LOG_ERR, "listing slots failed"); 
    124126                return PAM_AUTHINFO_UNAVAIL; 
    125127        } 
     
    128130        slot = PKCS11_find_token(ctx, slots, nslots); 
    129131        if (!slot || !slot->token) { 
    130                 syslog(LOG_ERR, "no token available"); 
     132                pam_syslog(pamh, LOG_ERR, "no token available"); 
    131133                rv = PAM_AUTHINFO_UNAVAIL; 
    132134                goto out; 
     
    136138        rv = PKCS11_enumerate_certs(slot->token, &certs, &ncerts); 
    137139        if (rv) { 
    138                 syslog(LOG_ERR, "PKCS11_enumerate_certs failed"); 
     140                pam_syslog(pamh, LOG_ERR, "PKCS11_enumerate_certs failed"); 
    139141                rv = PAM_AUTHINFO_UNAVAIL; 
    140142                goto out; 
    141143        } 
    142144        if (ncerts <= 0) { 
    143                 syslog(LOG_ERR, "no certificates found"); 
     145                pam_syslog(pamh, LOG_ERR, "no certificates found"); 
    144146                rv = PAM_AUTHINFO_UNAVAIL; 
    145147                goto out; 
     
    153155                        rv = match_user(authcert->x509, user); 
    154156                        if (rv < 0) { 
    155                                 syslog(LOG_ERR, "match_user() failed"); 
     157                                pam_syslog(pamh, LOG_ERR, "match_user() failed"); 
    156158                                rv = PAM_AUTHINFO_UNAVAIL; 
    157159                                goto out; 
     
    166168 
    167169        if (!authcert) { 
    168                 syslog(LOG_ERR, "not matching certificate found"); 
     170                pam_syslog(pamh, LOG_ERR, "not matching certificate found"); 
    169171                rv = PAM_AUTHINFO_UNAVAIL; 
    170172                goto out; 
     
    219221        free(password); 
    220222        if (rv != 0) { 
    221                 syslog(LOG_ERR, "PKCS11_login failed"); 
     223                pam_syslog(pamh, LOG_ERR, "PKCS11_login failed"); 
    222224                rv = PAM_AUTHINFO_UNAVAIL; 
    223225                goto out; 
     
    228230        fd = open(RANDOM_SOURCE, O_RDONLY); 
    229231        if (fd < 0) { 
    230                 syslog(LOG_ERR, "fatal: cannot open RANDOM_SOURCE: "); 
     232                pam_syslog(pamh, LOG_ERR, "fatal: cannot open RANDOM_SOURCE: "); 
    231233                rv = PAM_AUTHINFO_UNAVAIL; 
    232234                goto out; 
     
    235237        rv = read(fd, rand_bytes, RANDOM_SIZE); 
    236238        if (rv < 0) { 
    237                 syslog(LOG_ERR, "fatal: read from random source failed: "); 
     239                pam_syslog(pamh, LOG_ERR, "fatal: read from random source failed: "); 
    238240                close(fd); 
    239241                rv = PAM_AUTHINFO_UNAVAIL; 
     
    242244 
    243245        if (rv < RANDOM_SIZE) { 
    244                 syslog(LOG_ERR, "fatal: read returned less than %d<%d bytes\n", 
     246                pam_syslog(pamh, LOG_ERR, "fatal: read returned less than %d<%d bytes\n", 
    245247                       rv, RANDOM_SIZE); 
    246248                close(fd); 
     
    253255        authkey = PKCS11_find_key(authcert); 
    254256        if (!authkey) { 
    255                 syslog(LOG_ERR, "no key matching certificate available"); 
     257                pam_syslog(pamh, LOG_ERR, "no key matching certificate available"); 
    256258                rv = PAM_AUTHINFO_UNAVAIL; 
    257259                goto out; 
     
    263265                         authkey); 
    264266        if (rv != 1) { 
    265                 syslog(LOG_ERR, "fatal: pkcs11_sign failed\n"); 
     267                pam_syslog(pamh, LOG_ERR, "fatal: pkcs11_sign failed\n"); 
    266268                rv = PAM_AUTHINFO_UNAVAIL; 
    267269                goto out; 
     
    271273        pubkey = X509_get_pubkey(authcert->x509); 
    272274        if (pubkey == NULL) { 
    273                 syslog(LOG_ERR, "could not extract public key"); 
     275                pam_syslog(pamh, LOG_ERR, "could not extract public key"); 
    274276                rv = PAM_AUTHINFO_UNAVAIL; 
    275277                goto out; 
     
    280282                        signature, siglen, pubkey->pkey.rsa); 
    281283        if (rv != 1) { 
    282                 syslog(LOG_ERR, "fatal: RSA_verify failed\n"); 
     284                pam_syslog(pamh, LOG_ERR, "fatal: RSA_verify failed\n"); 
    283285                rv = PAM_AUTHINFO_UNAVAIL; 
    284286                goto out; 
     
    304306                                const char **argv) 
    305307{ 
    306         openlog(LOGNAME, LOG_CONS | LOG_PID, LOG_AUTHPRIV); 
    307         syslog(LOG_WARNING, 
     308        pam_syslog(pamh, LOG_WARNING, 
    308309               "Function pam_sm_acct_mgmt() is not implemented in this module"); 
    309         closelog(); 
    310310        return PAM_SERVICE_ERR; 
    311311} 
     
    314314                                   const char **argv) 
    315315{ 
    316         openlog(LOGNAME, LOG_CONS | LOG_PID, LOG_AUTHPRIV); 
    317         syslog(LOG_WARNING, 
     316        pam_syslog(pamh, LOG_WARNING, 
    318317               "Function pam_sm_open_session() is not implemented in this module"); 
    319         closelog(); 
    320318        return PAM_SERVICE_ERR; 
    321319} 
     
    324322                                    const char **argv) 
    325323{ 
    326         openlog(LOGNAME, LOG_CONS | LOG_PID, LOG_AUTHPRIV); 
    327         syslog(LOG_WARNING, 
     324        pam_syslog(pamh, LOG_WARNING, 
    328325               "Function pam_sm_close_session() is not implemented in this module"); 
    329         closelog(); 
    330326        return PAM_SERVICE_ERR; 
    331327} 
     
    334330                                const char **argv) 
    335331{ 
    336         openlog(LOGNAME, LOG_CONS | LOG_PID, LOG_AUTHPRIV); 
    337         syslog(LOG_WARNING, 
     332        pam_syslog(pamh, LOG_WARNING, 
    338333               "Function pam_sm_chauthtok() is not implemented in this module"); 
    339         closelog(); 
    340334        return PAM_SERVICE_ERR; 
    341335}