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;
}