summaryrefslogtreecommitdiff
path: root/lib/ZGetSender.c
diff options
context:
space:
mode:
authorGravatar Robert S. French <rfrench@mit.edu>1988-05-13 11:03:04 +0000
committerGravatar Robert S. French <rfrench@mit.edu>1988-05-13 11:03:04 +0000
commit0008ec96fed24c1837901c14d819442e1b288ea6 (patch)
treed27d7286d83984c2aab05da72c080f70952de5be /lib/ZGetSender.c
parent0edbd59af95e929c068f6ea94fd510b6cb4b3f9f (diff)
Update for protocol 0.2 / cleanup / Kerberos fixes
Diffstat (limited to 'lib/ZGetSender.c')
-rw-r--r--lib/ZGetSender.c67
1 files changed, 30 insertions, 37 deletions
diff --git a/lib/ZGetSender.c b/lib/ZGetSender.c
index 217c215..b8e80cf 100644
--- a/lib/ZGetSender.c
+++ b/lib/ZGetSender.c
@@ -26,44 +26,37 @@ uid_t getuid();
char *ZGetSender()
{
- char *tktfile;
- static char sender[128] = "";
- char pname[ANAME_SZ],pinst[INST_SZ];
- FILE *fp;
- struct passwd *pw;
-
- if (*sender)
- return (sender);
- tktfile = (char *)TKT_FILE;
- if (!(fp = fopen(tktfile,"r"))) {
- /* XXX a uid_t is a u_short (now), but getpwuid
- wants an int. AARGH! */
- pw = getpwuid((int) getuid());
- if (!pw)
- return ("unknown");
- (void) sprintf(sender,"%s@%s",pw->pw_name,__Zephyr_realm);
- return (sender);
- }
- readstr(fp,pname,ANAME_SZ);
- readstr(fp,pinst,INST_SZ);
- (void) sprintf(sender,"%s%s%s@%s",pname,(pinst[0]?".":""),pinst,
- __Zephyr_realm);
-
- return (sender);
-}
+ struct passwd *pw;
+#ifdef KERBEROS
+ char pname[ANAME_SZ], pinst[INST_SZ];
+ static char sender[ANAME_SZ+INST_SZ+REALM_SZ+3] = "";
+#else
+ static char sender[128] = "";
+#endif
-static readstr(fp,s,n)
- FILE *fp;
- char *s;
- int n;
-{
- int count;
+ /* Return it if already cached */
+ if (*sender)
+ return (sender);
- count = n;
- while (fread(s,1,1,fp) && --count)
- if (!*(s++))
- return;
- *(s++) = '\0';
- return;
+#ifdef KERBEROS
+ if (tf_init((char *)TKT_FILE, R_TKT_FIL) == KSUCCESS) {
+ if ((tf_get_pname(pname) == KSUCCESS) &&
+ (tf_get_pinst(pinst) == KSUCCESS)) {
+ (void) sprintf(sender, "%s%s%s@%s", pname, (pinst[0]?".":""),
+ pinst, __Zephyr_realm);
+ tf_close();
+ return (sender);
+ }
+ tf_close();
+ }
+#endif KERBEROS
+
+ /* XXX a uid_t is a u_short (now), but getpwuid
+ * wants an int. AARGH! */
+ pw = getpwuid((int) getuid());
+ if (!pw)
+ return ("unknown");
+ (void) sprintf(sender, "%s@%s", pw->pw_name, __Zephyr_realm);
+ return (sender);
}