Hi,

There's no need to add an additional argument to this module; there are
perfectly usable options within pam to support token refreshing.
Xscreensaver already calls setcred w/ PAM_REINITIALIZE_CRED.  Instead,
the patch should probably be as attached.

Note that there are still some issues with this; this assumes
libpam-krb5 has generated valid krb5 tokens (I have a libpam-krb5 module
that regenerates the credentials cache upon setcred REINIT/REFRESH).
For some reason, pam_getenv() doesn't see KRB5CCNAME; for the moment,
I'm calling getenv().  I intend to fix that, if possible.  Finally, for
some reason aklog does different things when called from pam.

When calling kinit/aklog from my shell, I end up with:



[EMAIL PROTECTED]:~/src/libpam-openafs-session-1.0 $ kinit -f && aklog
-setpag
Password for [EMAIL PROTECTED]:
[EMAIL PROTECTED]:~/src/libpam-openafs-session-1.0 $ klist
Ticket cache: FILE:/tmp/krb5cc_1010_Iv9XPn
Default principal: [EMAIL PROTECTED]

Valid starting     Expires            Service principal
08/25/05 15:25:48  08/26/05 01:25:48
krbtgt/[EMAIL PROTECTED]
08/25/05 15:25:49  08/26/05 01:25:48
afs/[EMAIL PROTECTED]


Kerberos 4 ticket cache: /tmp/tkt1010
klist: You have no tickets cached
[EMAIL PROTECTED]:~/src/libpam-openafs-session-1.0 $ tokens

Tokens held by the Cache Manager:

User's (AFS ID 1010) tokens for [EMAIL PROTECTED] [Expires Aug 26
01:25]
   --End of list--




However, when libpam-krb5 generates credentials, and
libpam-openafs-session generates afs tokens, I end up w/:



[EMAIL PROTECTED]:~/src/libpam-openafs-session-1.0 $ klist
Ticket cache: FILE:/tmp/krb5cc_1010_Iv9XPn
Default principal: [EMAIL PROTECTED]

Valid starting     Expires            Service principal
08/25/05 15:26:57  08/26/05 01:26:57
krbtgt/[EMAIL PROTECTED]
08/25/05 15:26:57  08/26/05 01:26:57
afs/[EMAIL PROTECTED]


Kerberos 4 ticket cache: /tmp/tkt1010
klist: You have no tickets cached
[EMAIL PROTECTED]:~/src/libpam-openafs-session-1.0 $ tokens

Tokens held by the Cache Manager:

   --End of list--


I'm not sure why they're different; Russ/Sam, any ideas? 

diff -purN l/libpam-openafs-session-1.0/pam_openafs-krb5_sess.c t/libpam-openafs-session-1.0/pam_openafs-krb5_sess.c
--- l/libpam-openafs-session-1.0/pam_openafs-krb5_sess.c	2005-08-25 15:19:24.331999306 -0400
+++ t/libpam-openafs-session-1.0/pam_openafs-krb5_sess.c	2005-08-25 15:18:49.063848410 -0400
@@ -78,7 +78,7 @@ pam_sm_open_session(pam_handle_t *pamh, 
     ELOG("getpwnam","Unable to get the user UID");
     return PAM_SERVICE_ERR;
   }
-  filecache=pam_getenv(pamh,namecache);    
+  filecache=getenv(namecache);    
   if (!filecache) {
     DLOG ("open_session", "Could not find Kerberos tickets; not running aklog");
     return PAM_SUCCESS;
@@ -165,7 +165,7 @@ pam_sm_close_session(pam_handle_t *pamh,
     exit(-1);
   }
   
-  filecache=pam_getenv(pamh,namecache);    
+  filecache=getenv(namecache);    
   snprintf(buf,MAXBUF-1,"%s=%s",namecache,filecache);
   envi[0]=buf;
   DLOG("ENVIRONNEMENT", envi[0]);
@@ -192,7 +192,7 @@ int
 pam_sm_setcred(pam_handle_t *pamh, int flags, int argc,
 	       const char **argv)
 {
-  if (flags == PAM_ESTABLISH_CRED)
+  if (flags & (PAM_ESTABLISH_CRED|PAM_REINITIALIZE_CRED|PAM_REFRESH_CRED))
     return pam_sm_open_session (pamh, flags, argc, argv);
 return PAM_SUCCESS;
 }

Reply via email to