freebsd-nq/eBones/lib/libkrb/tkt_string.c
Geoff Rehmet 60643d379b Initial import of eBones.
(Including all changes for FreeBSD - importing the original eBones distribution
would be too complex at this stage, since I don't have access to Piero's 
CVS.)
(If you want to include eBones in your system, don't forget to include
MAKE_EBONES in /etc/make.conf.)
(This stuff is now also suppable from braae.ru.ac.za.)

Bones originally from MIT SIPB.
Original port to FreeBSD 1.x  by Piero Serini.
Moved to FreeBSD 2.0 by Doug Rabson and Geoff Rehmet.
Nice bug fixes from Doug Rabson.
1994-09-30 14:50:09 +00:00

80 lines
2.2 KiB
C

/*
* Copyright 1985, 1986, 1987, 1988 by the Massachusetts Institute
* of Technology.
* For copying and distribution information, please see the file
* <Copyright.MIT>.
*
* from: tkt_string.c,v 4.6 89/01/05 12:31:51 raeburn Exp $
* $Id: tkt_string.c,v 1.2 1994/07/19 19:26:29 g89r4222 Exp $
*/
#ifndef lint
static char *rcsid =
"$Id: tkt_string.c,v 1.2 1994/07/19 19:26:29 g89r4222 Exp $";
#endif /* lint */
#include <stdio.h>
#include <sys/types.h>
#include <krb.h>
#include <string.h>
#include <sys/param.h>
char *getenv();
/*
* This routine is used to generate the name of the file that holds
* the user's cache of server tickets and associated session keys.
*
* If it is set, krb_ticket_string contains the ticket file name.
* Otherwise, the filename is constructed as follows:
*
* If it is set, the environment variable "KRBTKFILE" will be used as
* the ticket file name. Otherwise TKT_ROOT (defined in "krb.h") and
* the user's uid are concatenated to produce the ticket file name
* (e.g., "/tmp/tkt123"). A pointer to the string containing the ticket
* file name is returned.
*/
static char krb_ticket_string[MAXPATHLEN] = "";
char *tkt_string()
{
char *env;
uid_t getuid();
if (!*krb_ticket_string) {
if (env = getenv("KRBTKFILE")) {
(void) strncpy(krb_ticket_string, env,
sizeof(krb_ticket_string)-1);
krb_ticket_string[sizeof(krb_ticket_string)-1] = '\0';
} else {
/* 32 bits of signed integer will always fit in 11 characters
(including the sign), so no need to worry about overflow */
(void) sprintf(krb_ticket_string, "%s%d",TKT_ROOT,getuid());
}
}
return krb_ticket_string;
}
/*
* This routine is used to set the name of the file that holds the user's
* cache of server tickets and associated session keys.
*
* The value passed in is copied into local storage.
*
* NOTE: This routine should be called during initialization, before other
* Kerberos routines are called; otherwise tkt_string() above may be called
* and return an undesired ticket file name until this routine is called.
*/
void
krb_set_tkt_string(val)
char *val;
{
(void) strncpy(krb_ticket_string, val, sizeof(krb_ticket_string)-1);
krb_ticket_string[sizeof(krb_ticket_string)-1] = '\0';
return;
}