From 0008ec96fed24c1837901c14d819442e1b288ea6 Mon Sep 17 00:00:00 2001 From: "Robert S. French" Date: Fri, 13 May 1988 11:03:04 +0000 Subject: Update for protocol 0.2 / cleanup / Kerberos fixes --- lib/ZGetSender.c | 67 +++++++++++++++++++++++++------------------------------- 1 file changed, 30 insertions(+), 37 deletions(-) (limited to 'lib/ZGetSender.c') 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); } -- cgit v1.2.3