]> arthur.barton.de Git - netatalk.git/blobdiff - etc/uams/uams_krb4/uams_krb4.c
Remove bdb env on exit
[netatalk.git] / etc / uams / uams_krb4 / uams_krb4.c
index e1e8184160331abe700eded467d4aeee746133b5..ff7c2c0a4767e9ac7af0eee3394b59173fc08603 100644 (file)
@@ -1,13 +1,13 @@
 /*
- * $Id: uams_krb4.c,v 1.4 2001-06-25 20:13:45 rufustfirefly Exp $
+ * $Id: uams_krb4.c,v 1.10 2009-10-15 11:39:48 didg Exp $
  *
  * Copyright (c) 1990,1993 Regents of The University of Michigan.
  * All Rights Reserved.  See COPYRIGHT.
  */
 
-#if defined(HAVE_CONFIG_H)
+#ifdef HAVE_CONFIG_H
 #include "config.h"
-#endif
+#endif /* HAVE_CONFIG_H */
 
 #if defined( KRB ) || defined( UAM_AFSKRB )
 #ifdef HAVE_UNISTD_H
 #include <sys/stat.h>
 #include <sys/socket.h>
 #include <limits.h>
+
+/* STDC check */
+#if STDC_HEADERS
 #include <string.h>
+#else /* STDC_HEADERS */
+#ifndef HAVE_STRCHR
+#define strchr index
+#define strrchr index
+#endif /* HAVE_STRCHR */
+char *strchr (), *strrchr ();
+#ifndef HAVE_MEMCPY
+#define memcpy(d,s,n) bcopy ((s), (d), (n))
+#define memmove(d,s,n) bcopy ((s), (d), (n))
+#endif /* ! HAVE_MEMCPY */
+#endif /* STDC_HEADERS */
+
 #include <ctype.h>
 #include <pwd.h>
-#include <syslog.h>
+#include <atalk/logger.h>
 #include <netinet/in.h>
 #include <des.h>
 #include <krb.h>
@@ -71,7 +86,7 @@ struct ClearToken {
 
 #ifdef KRB
 
-static __inline__ void lcase( p )
+static void lcase( p )
     char       *p;
 {
     for (; *p; p++ ) {
@@ -82,7 +97,7 @@ static __inline__ void lcase( p )
     return;
 }
 
-static __inline__ void ucase( p )
+static void ucase( p )
     char       *p;
 {
     for (; *p; p++ ) {
@@ -106,8 +121,8 @@ static __inline__ void ucase( p )
 #define KRB4CMD_SKIP   11
 
 static int krb4_login(void *obj, struct passwd **uam_pwd,
-                     char *ibuf, int ibuflen,
-                     char *rbuf, int *rbuflen )
+                     char *ibuf, size_t ibuflen,
+                     char *rbuf, size_t *rbuflen )
 {
     char               *p;
     char               *username;
@@ -115,7 +130,8 @@ static int krb4_login(void *obj, struct passwd **uam_pwd,
     u_int16_t          len;
     KTEXT_ST           tkt;
     static AUTH_DAT    ad;
-    int                        rc, ulen, proto;
+    int                        rc, proto;
+    size_t             ulen;
     char               inst[ 40 ], princ[ 40 ];
 
     if (uam_afpserver_option(obj, UAM_OPTION_USERNAME, &username, &ulen) < 0)
@@ -126,7 +142,7 @@ static int krb4_login(void *obj, struct passwd **uam_pwd,
 
     switch( *ibuf ) {
        case KRB4CMD_SESS:
-           syslog( LOG_INFO, "krb4_login: KRB4CMD_SESS" );
+           LOG(log_info, logtype_default, "krb4_login: KRB4CMD_SESS" );
            ++ibuf;
            p = ibuf;
            memcpy( &len, p, sizeof( u_int16_t ));
@@ -135,7 +151,7 @@ static int krb4_login(void *obj, struct passwd **uam_pwd,
 
            if ( tkt.length <= 0 || tkt.length > MAX_KTXT_LEN ) {
                *rbuflen = 0;
-               syslog( LOG_INFO, "krb4_login: tkt.length = %d", tkt.length );
+               LOG(log_info, logtype_default, "krb4_login: tkt.length = %d", tkt.length );
                return( AFPERR_BADUAM );
            }
 
@@ -155,13 +171,13 @@ static int krb4_login(void *obj, struct passwd **uam_pwd,
 
            if( (rc = krb_rd_req( &tkt, princ, inst, 0, &ad, "" )) 
                != RD_AP_OK ) {
-               syslog( LOG_ERR
+               LOG(log_error, logtype_default
                        "krb4_login: krb_rd_req(): %s", krb_err_txt[ rc ] );
                *rbuflen = 0;
                return( AFPERR_BADUAM );
            }
 
-           syslog( LOG_INFO, "krb4_login: %s.%s@%s", ad.pname, ad.pinst, 
+           LOG(log_info, logtype_default, "krb4_login: %s.%s@%s", ad.pname, ad.pinst, 
                ad.prealm );
            strcpy( realm, ad.prealm );
            memcpy( seskey, ad.session, sizeof( C_Block ) );
@@ -175,7 +191,7 @@ static int krb4_login(void *obj, struct passwd **uam_pwd,
            *p = KRB4RPL_DONE;  /* XXX */
            *rbuflen = 1;
 
-           if (( pwd = uam_getname( ad.pname, strlen(ad.pname) )) == NULL ) {
+           if (( pwd = uam_getname( obj, ad.pname, strlen(ad.pname) )) == NULL ) {
                return AFPERR_PARAM;
            }
 /*
@@ -198,7 +214,7 @@ static int krb4_login(void *obj, struct passwd **uam_pwd,
        case KRB4CMD_HELO:
            p = rbuf;
            if (krb_get_lrealm( realm, 1 ) != KSUCCESS ) {
-               syslog( LOG_ERR, "krb4_login: can't get local realm!" );
+               LOG(log_error, logtype_default, "krb4_login: can't get local realm!" );
                return( AFPERR_NOTAUTH );
            }
            *p++ = KRB4RPL_REALM;
@@ -211,14 +227,14 @@ static int krb4_login(void *obj, struct passwd **uam_pwd,
 
        default:
            *rbuflen = 0;
-           syslog( LOG_INFO, "krb4_login: bad command %d", *ibuf );
+           LOG(log_info, logtype_default, "krb4_login: bad command %d", *ibuf );
            return( AFPERR_NOTAUTH );
     }
 
 #ifdef AFS
     if ( setpag() < 0 ) {
        *rbuflen = 0;
-       syslog( LOG_ERR, "krb_login: setpag: %m" );
+       LOG(log_error, logtype_default, "krb_login: setpag: %s", strerror(errno) );
        return( AFPERR_BADUAM );
     }
 #endif /*AFS*/
@@ -237,8 +253,8 @@ static int krb4_action( void *v1, void *v2, const int i )
    with non-16bit short's and non-32bit int's
 */
 static int krb4_logincont(void *obj, struct passwd **uam_pwd,
-                         char *ibuf, int ibuflen,
-                         char *rbuf, int *rbuflen)
+                         char *ibuf, size_t ibuflen,
+                         char *rbuf, size_t *rbuflen)
 {
     static struct passwd       *pwd;
     KTEXT_ST           tkt;
@@ -282,7 +298,7 @@ static int krb4_logincont(void *obj, struct passwd **uam_pwd,
            len = ntohs( len );
 
            if ( len != sizeof( struct ClearToken ) ) {
-               syslog( LOG_ERR, "krb4_logincont: token too short" );
+               LOG(log_error, logtype_default, "krb4_logincont: token too short" );
                *rbuflen = 0;
                return( AFPERR_BADUAM );
            }
@@ -311,7 +327,7 @@ static int krb4_logincont(void *obj, struct passwd **uam_pwd,
            vi.out_size = sizeof( buf );
 
            if ( pioctl( 0, VIOCSETTOK, &vi, 0 ) < 0 ) {
-               syslog( LOG_ERR, "krb4_logincont: pioctl: %m" );
+               LOG(log_error, logtype_default, "krb4_logincont: pioctl: %s", strerror(errno) );
                *rbuflen = 0;
                return( AFPERR_BADUAM );
            }
@@ -322,7 +338,7 @@ static int krb4_logincont(void *obj, struct passwd **uam_pwd,
            *p = KRB4RPL_DONE;  /* XXX */
            *rbuflen = 1;
 
-           if (( pwd = uam_getname( username, strlen(username) ) ) == NULL ) {
+           if (( pwd = uam_getname( obj, username, strlen(username) ) ) == NULL ) {
                return( AFPERR_NOTAUTH );
            }
 /*
@@ -353,11 +369,11 @@ static int krb4_logincont(void *obj, struct passwd **uam_pwd,
 
                    if (( rc = krb_rd_req( &tkt, "afpserver", servername, 
                        0, &ad, "" )) != RD_AP_OK ) {
-                       syslog( LOG_ERR, "krb4_logincont: krb_rd_req(): %s", krb_err_txt[ rc ] );
+                       LOG(log_error, logtype_default, "krb4_logincont: krb_rd_req(): %s", krb_err_txt[ rc ] );
                        return( AFPERR_BADUAM );
                    }
 
-                   syslog( LOG_INFO, "krb4_login: %s.%s@%s", ad.pname, 
+                   LOG(log_info, logtype_default, "krb4_login: %s.%s@%s", ad.pname, 
                        ad.pinst, ad.prealm );
                    memcpy(realm, ad.prealm, sizeof(realm));
                    memcpy(seskey, ad.session, sizeof( C_Block ));
@@ -370,7 +386,7 @@ static int krb4_logincont(void *obj, struct passwd **uam_pwd,
                    *p = KRB4RPL_DONE;  /* XXX */
                    *rbuflen = 1;
 
-                   if (( pwd = uam_getname( ad.pname, strlen(ad.pname) )) 
+                   if (( pwd = uam_getname( obj, ad.pname, strlen(ad.pname) )) 
                        == NULL ) {
                        return( AFPERR_PARAM );
                    }
@@ -429,7 +445,7 @@ static int krb4_logincont(void *obj, struct passwd **uam_pwd,
                    vi.out = buf;
                    vi.out_size = sizeof( buf );
                    if ( pioctl( 0, VIOCSETTOK, &vi, 0 ) < 0 ) {
-                       syslog( LOG_ERR, "krb4_logincont: pioctl: %m" );
+                       LOG(log_error, logtype_default, "krb4_logincont: pioctl: %s", strerror(errno) );
                        return( AFPERR_BADUAM );
                    }
                    /* FALL THROUGH */
@@ -439,7 +455,7 @@ static int krb4_logincont(void *obj, struct passwd **uam_pwd,
                    *p = KRB4RPL_DONE;  /* XXX */
                    *rbuflen = 1;
 
-                   if (( pwd = uam_getname( ad.pname, strlen(ad.pname) )) 
+                   if (( pwd = uam_getname( obj, ad.pname, strlen(ad.pname) )) 
                        == NULL ) {
                        return( AFPERR_PARAM );
                    }
@@ -448,7 +464,7 @@ static int krb4_logincont(void *obj, struct passwd **uam_pwd,
 #endif /*AFS*/
 
                default:
-                   syslog( LOG_INFO, "krb4_logincont: bad command %d", rc );
+                   LOG(log_info, logtype_default, "krb4_logincont: bad command %d", rc );
                    *rbuflen = 0;
                    return( AFPERR_NOTAUTH );
                    break;
@@ -552,8 +568,8 @@ static void authenticate(cells,name,passwd)
 
 #if defined( UAM_AFSKRB ) && defined( AFS )
 static int afskrb_login(void *obj, struct passwd *uam_pwd,
-                       char *ibuf, int ibuflen, 
-                       char *rbuf, int *rbuflen )
+                       char *ibuf, size_t ibuflen, 
+                       char *rbuf, size_t *rbuflen )
 {
     KTEXT_ST   authent, rpkt;
     CREDENTIALS        cr;
@@ -594,13 +610,13 @@ static int afskrb_login(void *obj, struct passwd *uam_pwd,
     p = rbuf;
     if ( validseskey == 0 ) {
        if ( setpag() < 0 ) {
-           syslog( LOG_ERR, "krb_login: setpag: %m" );
+           LOG(log_error, logtype_default, "krb_login: setpag: %s", strerror(errno) );
            return AFPERR_BADUAM;
        }
        krb_set_tkt_string(( tktfile = mktemp( _PATH_AFPTKT )));
        if (( rc =  krb_get_svc_in_tkt( "afpserver", servername, realm,
                TICKET_GRANTING_TICKET, realm, 255, KEYFILE )) != INTK_OK ) {
-           syslog( LOG_ERR, "krb_login: can't get ticket-granting-ticket" );
+           LOG(log_error, logtype_default, "krb_login: can't get ticket-granting-ticket" );
            return (( whoserealm ) ? AFPERR_BADUAM : AFPERR_PARAM );
        }
        if ( krb_mk_req( &authent, name, instance, realm, 0 ) != KSUCCESS ) {
@@ -611,7 +627,7 @@ static int afskrb_login(void *obj, struct passwd *uam_pwd,
        }
 
        if ( unlink( tktfile ) < 0 ) {
-           syslog( LOG_ERR, "krb_login: unlink %s: %m", tktfile );
+           LOG(log_error, logtype_default, "krb_login: unlink %s: %s", tktfile, strerror(errno) );
            return ( AFPERR_BADUAM );
        }
 
@@ -656,8 +672,8 @@ static int afskrb_login(void *obj, struct passwd *uam_pwd,
 }
 
 static int afskrb_logincont(void *obj, struct passwd *uam_pwd,
-                           char *ibuf, int ibuflen, 
-                           char *rbuf, int *rbuflen )
+                           char *ibuf, size_t ibuflen, 
+                           char *rbuf, size_t *rbuflen )
 {
     CREDENTIALS                cr;
     struct ViceIoctl   vi;
@@ -722,26 +738,26 @@ static int afskrb_logincont(void *obj, struct passwd *uam_pwd,
     vi.out = buf;
     vi.out_size = sizeof( buf );
     if ( pioctl( 0, VIOCSETTOK, &vi, 0 ) < 0 ) {
-       syslog( LOG_ERR, "krb_logincont: pioctl: %m" );
+       LOG(log_error, logtype_default, "krb_logincont: pioctl: %s", strerror(errno) );
        return ( AFPERR_BADUAM );
     }
 
     if ( unlink( tktfile ) < 0 ) {
-       syslog( LOG_ERR, "krb_logincont: %s: %m", tktfile );
+       LOG(log_error, logtype_default, "krb_logincont: %s: %s", tktfile, strerror(errno) );
        return ( AFPERR_BADUAM );
     }
 
-    if (( pwd = uam_getname( username )) == NULL ) {
+    if (( pwd = uam_getname( obj, username, strlen(username) )) == NULL ) {
        return ( AFPERR_PARAM );
     }
 
     if ( logged == 0 ) {
        logged = 1;
-       syslog( LOG_INFO, "authenticated %s.%s@%s", name, instance, realm );
+       LOG(log_info, logtype_default, "authenticated %s.%s@%s", name, instance, realm );
        *uam_pwd = pwd;
        return AFP_OK;
     }
-    syslog( LOG_INFO, "re-authenticated %s.%s@%s", name, instance, realm );
+    LOG(log_info, logtype_default, "re-authenticated %s.%s@%s", name, instance, realm );
     return( AFP_OK );
 }
 #endif /* UAM_AFSKRB AFS */