summaryrefslogtreecommitdiffstats
path: root/src/lib/gssapi/krb5/gssapi_krb5.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/gssapi/krb5/gssapi_krb5.c')
-rw-r--r--src/lib/gssapi/krb5/gssapi_krb5.c30
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,