diff options
author | Sam Hartman <hartmans@mit.edu> | 2011-09-21 18:40:43 +0000 |
---|---|---|
committer | Sam Hartman <hartmans@mit.edu> | 2011-09-21 18:40:43 +0000 |
commit | fe12e6f6da58abc3cc3e2d30d3925259ad1fbf6a (patch) | |
tree | 1ca1637c6fe7d81691bc0ce0c30e77d2cb5a0fc5 /src/lib/gssapi/krb5/gssapi_krb5.c | |
parent | d168c25d80fb6fe2d4c272252d2fb41a2a9bb54e (diff) | |
download | krb5-fe12e6f6da58abc3cc3e2d30d3925259ad1fbf6a.tar.gz krb5-fe12e6f6da58abc3cc3e2d30d3925259ad1fbf6a.tar.xz krb5-fe12e6f6da58abc3cc3e2d30d3925259ad1fbf6a.zip |
* New implementation to map a gss name to localname
* Write gss_pname_to_uid in terms of gss_localname; suppress on win32
* Add test for gss_pname_to_uid indirectly testing gss_localname
* gss_localname is the SPI, not gss_pname_to_uid
* fix some const gss_OID->gss_const_oid
Signed-off-by: Sam Hartman <hartmans@painless-security.com>
gss_localname: map gss name to localname
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@25222 dc483132-0cff-0310-8789-dd5450dbe970
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, |