diff --git a/lib/krb5/get_default_principal.c b/lib/krb5/get_default_principal.c index e6453f1b7..fa0c7231d 100644 --- a/lib/krb5/get_default_principal.c +++ b/lib/krb5/get_default_principal.c @@ -50,23 +50,21 @@ get_env_user(void) return user; } -krb5_error_code KRB5_LIB_FUNCTION -krb5_get_default_principal (krb5_context context, - krb5_principal *princ) +/* + * Will only use operating-system dependant operation to get the + * default principal, for use of functions that in ccache layer to + * avoid recursive calls. + */ + +krb5_error_code +_krb5_get_default_principal_local (krb5_context context, + krb5_principal *princ) { krb5_error_code ret; - krb5_ccache id; const char *user; uid_t uid; - 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; - } - + *princ = NULL; uid = getuid(); if(uid == 0) { @@ -93,6 +91,27 @@ krb5_get_default_principal (krb5_context context, } ret = krb5_make_principal(context, princ, NULL, user, NULL); } - return ret; } + +krb5_error_code KRB5_LIB_FUNCTION +krb5_get_default_principal (krb5_context context, + krb5_principal *princ) +{ + krb5_error_code ret; + krb5_ccache id; + const char *user; + uid_t uid; + + *princ = NULL; + + 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 _krb5_get_default_principal_local(context, princ); +}