forward.c: Use a saner naming convention for the credentials cache.
authorRichard Basch <probe@mit.edu>
Fri, 12 Apr 1996 01:52:28 +0000 (01:52 +0000)
committerRichard Basch <probe@mit.edu>
Fri, 12 Apr 1996 01:52:28 +0000 (01:52 +0000)
kerberos5.c: Add a cleanup function to destroy the credentials cache.

git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@7799 dc483132-0cff-0310-8789-dd5450dbe970

src/appl/telnet/libtelnet/ChangeLog
src/appl/telnet/libtelnet/forward.c
src/appl/telnet/libtelnet/kerberos5.c

index 391cd7166dd7374f12fd4279271af7fa1c25ad8e..8cb56165c80c20672f271a7ae31696962e7d6c73 100644 (file)
@@ -1,3 +1,13 @@
+Thu Apr 11 21:45:21 1996  Richard Basch  <basch@lehman.com>
+
+       * forward.c (rd_and_store_for_creds): If we are going to use a
+       ttyname based credentials file, at least compute it in a saner
+       fashion (strip the /dev/ and translate remaining /'s into _, so
+       the cache name looks like krb5cc_pts_4 instead of krb5cc_4).
+
+       * kerberos5.c (kerberos5_cleanup): Cleanup the credentials cache
+       that we may have created and destroy the context.
+
 Mon Mar 18 20:56:37 1996  Theodore Y. Ts'o  <tytso@dcl>
 
        * kerberos5.c (kerberos5_send): Send in as input the
index 1647b6004f06a908f520085147ccf38354e51fbb..025a134eba783c23c47fe9996ebb421c4ea029c2 100644 (file)
@@ -46,6 +46,7 @@ rd_and_store_for_creds(context, auth_context, inbuf, ticket, lusername)
     char ccname[35];
     krb5_ccache ccache = NULL;
     struct passwd *pwd;
+    char *tty;
 
     if (!(pwd = (struct passwd *) getpwnam(lusername))) 
        return -1;
@@ -53,13 +54,17 @@ rd_and_store_for_creds(context, auth_context, inbuf, ticket, lusername)
     if (retval = krb5_rd_cred(context, auth_context, inbuf, &creds, NULL)) 
        return(retval);
 
-    if (*line) {
-      /* code from appl/bsd/login.c since it will do the same */
-      sprintf(ccname, "FILE:/tmp/krb5cc_%s", strrchr(line, '/')+1);
-    } else {
-     /* since default will be based on uid and we haven't changed yet */
-     sprintf(ccname, "FILE:/tmp/krb5cc_%d", pwd->pw_uid);
-    }
+    if (*line && (tty = strchr(line, '/')) && (tty = strchr(tty+1, '/'))) {
+       ++tty;
+       sprintf(ccname, "FILE:/tmp/krb5cc_%s", tty);
+       while (tty = strchr(tty, '/')) {
+           tty++;
+           *((char *)strrchr(ccname, '/')) = '_';
+       }
+    } else
+       /* since default will be based on uid and we haven't changed yet */
+       sprintf(ccname, "FILE:/tmp/krb5cc_%d", pwd->pw_uid);
+
     setenv(KRB5_ENV_CCNAME, ccname, 1);
 
     if (retval = krb5_cc_resolve(context, ccname, &ccache))
index 6f947e3579589b104c729b475d795769ef8134f2..63f54cd3b2b344ea78af23ee349d7f59ee61724f 100644 (file)
@@ -61,7 +61,7 @@
 #ifdef KRB5
 #include <arpa/telnet.h>
 #include <stdio.h>
-#include "krb5.h"
+#include "k5-int.h"
 #include "com_err.h"
 #include <netdb.h>
 #include <ctype.h>
@@ -179,6 +179,28 @@ kerberos5_init(ap, server)
        return(1);
 }
 
+void
+kerberos5_cleanup()
+{
+    krb5_error_code retval;
+    krb5_ccache ccache;
+    char *ccname;
+    
+    if (telnet_context == 0)
+       return;
+
+    ccname = getenv(KRB5_ENV_CCNAME);
+    if (ccname) {
+       retval = krb5_cc_resolve(telnet_context, ccname, &ccache);
+       if (!retval)
+           retval = krb5_cc_destroy(telnet_context, ccache);
+    }
+
+    krb5_free_context(telnet_context);
+    telnet_context = 0;
+}
+
+
        int
 kerberos5_send(ap)
        Authenticator *ap;