X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Futils%2Fgss%2Flsupport.c;fp=lustre%2Futils%2Fgss%2Flsupport.c;h=545afa3e6bb9721be85bbabc4308f5a803793cd5;hb=7d8a15fbf86811e5ba71b1b35b2d829e231f08de;hp=eda236f12546bdd8c810399545b99f0fc12d4ea0;hpb=478df609235660fc3816a454b244f2b0a6496592;p=fs%2Flustre-release.git diff --git a/lustre/utils/gss/lsupport.c b/lustre/utils/gss/lsupport.c index eda236f..545afa3 100644 --- a/lustre/utils/gss/lsupport.c +++ b/lustre/utils/gss/lsupport.c @@ -555,3 +555,53 @@ int lookup_mapping(char *princ, lnet_nid_t nid, uid_t *uid) printerr(LL_INFO, "no mapping for %s/%#Lx\n", princ, nid); return -1; } + +/* realm of this node */ +char *krb5_this_realm; + +static int gss_get_provided_realm(char *realm) +{ + if (krb5_this_realm) + return 0; + + if (!realm) + return -1; + + krb5_this_realm = strdup(realm); + return 0; +} + +static int gss_get_local_realm(void) +{ + krb5_context context = NULL; + krb5_error_code code; + + if (krb5_this_realm != NULL) + return 0; + + code = krb5_init_context(&context); + if (code) + return code; + + code = krb5_get_default_realm(context, &krb5_this_realm); + krb5_free_context(context); + + if (code) + return code; + + return 0; +} + +int gss_get_realm(char *realm) +{ + int rc; + + /* Try to use provided realm first. + * If no provided realm, get default local realm. + */ + rc = gss_get_provided_realm(realm); + if (rc) + rc = gss_get_local_realm(); + + return rc; +}