diff options
Diffstat (limited to 'src/lib/gssapi/krb5/gssapi_krb5.c')
-rw-r--r-- | src/lib/gssapi/krb5/gssapi_krb5.c | 30 |
1 files changed, 11 insertions, 19 deletions
diff --git a/src/lib/gssapi/krb5/gssapi_krb5.c b/src/lib/gssapi/krb5/gssapi_krb5.c index 4d4f545f5..48918b461 100644 --- a/src/lib/gssapi/krb5/gssapi_krb5.c +++ b/src/lib/gssapi/krb5/gssapi_krb5.c @@ -739,18 +739,16 @@ cleanup: return major; } -#ifndef NO_PASSWORD static OM_uint32 KRB5_CALLCONV -krb5_gss_pname_to_uid(OM_uint32 *minor, - const gss_name_t pname, - const gss_OID mech_type, - uid_t *uid) +krb5_gss_localname(OM_uint32 *minor, + const gss_name_t pname, + const gss_const_OID mech_type, + gss_buffer_t localname) { krb5_context context; krb5_error_code code; krb5_gss_name_t kname; - char localname[BUFSIZ], pwbuf[BUFSIZ]; - struct passwd pwx, *pw; + char lname[BUFSIZ]; code = krb5_gss_init_context(&context); if (code != 0) { @@ -761,24 +759,21 @@ krb5_gss_pname_to_uid(OM_uint32 *minor, kname = (krb5_gss_name_t)pname; code = krb5_aname_to_localname(context, kname->princ, - sizeof(localname), localname); + sizeof(lname), lname); if (code != 0) { *minor = KRB5_NO_LOCALNAME; krb5_free_context(context); return GSS_S_FAILURE; } - code = k5_getpwnam_r(localname, &pwx, pwbuf, sizeof(pwbuf), &pw); - if (code == 0 && pw != NULL) - *uid = pw->pw_uid; - else - *minor = KRB5_NO_LOCALNAME; krb5_free_context(context); + localname->value = strdup(lname); + localname->length = strlen(lname); return (code == 0) ? GSS_S_COMPLETE : GSS_S_FAILURE; } -#endif /* !NO_PASSWORD */ + static OM_uint32 KRB5_CALLCONV krb5_gss_authorize_localname(OM_uint32 *minor, @@ -870,11 +865,8 @@ static struct gss_config krb5_mechanism = { krb5_gss_inquire_context, krb5_gss_internal_release_oid, krb5_gss_wrap_size_limit, -#ifdef NO_PASSWORD - NULL, -#else - krb5_gss_pname_to_uid, -#endif + krb5_gss_localname, + krb5_gss_authorize_localname, krb5_gss_export_name, krb5_gss_duplicate_name, |