From b657667fa3e31e5126bbd656997a1122bc1affbb Mon Sep 17 00:00:00 2001 From: Johan Danielsson Date: Sat, 29 Nov 1997 04:11:57 +0000 Subject: [PATCH] More guessing. git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@4068 ec53bebd-3082-4978-b11e-865c3cabbd6b --- lib/krb5/get_default_principal.c | 64 +++++++++++++++++++------------- 1 file changed, 39 insertions(+), 25 deletions(-) diff --git a/lib/krb5/get_default_principal.c b/lib/krb5/get_default_principal.c index 18c687ce4..3db42223c 100644 --- a/lib/krb5/get_default_principal.c +++ b/lib/krb5/get_default_principal.c @@ -40,37 +40,51 @@ RCSID("$Id$"); +static char * +get_logname(void) +{ + char *p; + if((p = getenv("USER"))) + return p; + if((p = getenv("LOGNAME"))) + return p; +#if defined(HAVE_GETLOGIN) && !defined(POSIX_GETLOGIN) + if((p = getlogin())) + return p; +#endif + return NULL; +} + krb5_error_code krb5_get_default_principal (krb5_context context, krb5_principal *princ) { krb5_error_code ret; + struct passwd *pw; char *p; + krb5_ccache id; - p = getenv ("USER"); - if (p) { - ret = krb5_parse_name (context, p, princ); - if (ret) - return ret; - } else { - struct passwd *pw; - char *realm; - - pw = getpwuid (getuid ()); - if (pw == NULL) - return ENOTTY; - ret = krb5_get_default_realm (context, &realm); - if (ret) - return ret; - ret = krb5_build_principal (context, - princ, - strlen(realm), - realm, - pw->pw_name, - NULL); - free (realm); - if (ret) - return ret; + ret = krb5_cc_default(context, &id); + if(ret == 0){ + ret = krb5_cc_get_principal(context, id, princ); + krb5_cc_close(context, id); + if(ret == 0) + return 0; } - return 0; + + pw = getpwuid(getuid()); + if(pw == NULL){ + p = get_logname(); + if(p == NULL) + return ENOTTY; + ret = krb5_make_principal(context, princ, NULL, p, NULL); + }else{ + if(strcmp(pw->pw_name, "root") == 0){ + p = get_logname(); + ret = krb5_make_principal(context, princ, NULL, pw->pw_name, + "root", NULL); + }else + ret = krb5_make_principal(context, princ, NULL, pw->pw_name, NULL); + } + return ret; }