Skip to content

Commit

Permalink
Pass the actual mech oid in creds functions
Browse files Browse the repository at this point in the history
This way the mechanism handler knows what mech type is intended.
This allows plugin that implement multiple mechanisms or interposer
plugins to know what they are being asked to do.
  • Loading branch information
simo5 authored and greghudson committed Aug 6, 2012
1 parent bb02471 commit 22881a1
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 11 deletions.
16 changes: 13 additions & 3 deletions src/lib/gssapi/mechglue/g_acquire_cred.c
Original file line number Diff line number Diff line change
Expand Up @@ -373,6 +373,7 @@ gss_add_cred_from(minor_status, input_cred_handle,
gss_cred_id_t cred = NULL;
gss_OID new_mechs_array = NULL;
gss_cred_id_t * new_cred_array = NULL;
gss_OID_set target_mechs = GSS_C_NO_OID_SET;

status = val_add_cred_args(minor_status,
input_cred_handle,
Expand Down Expand Up @@ -439,15 +440,24 @@ gss_add_cred_from(minor_status, input_cred_handle,
else
time_req = 0;

status = gss_create_empty_oid_set(minor_status, &target_mechs);
if (status != GSS_S_COMPLETE)
goto errout;

status = gss_add_oid_set_member(minor_status,
&mech->mech_type, &target_mechs);
if (status != GSS_S_COMPLETE)
goto errout;

if (mech->gss_acquire_cred_from) {
status = mech->gss_acquire_cred_from(minor_status, internal_name,
time_req, GSS_C_NULL_OID_SET,
time_req, target_mechs,
cred_usage, cred_store, &cred,
NULL, &time_rec);
} else if (cred_store == GSS_C_NO_CRED_STORE) {
status = mech->gss_acquire_cred(minor_status, internal_name, time_req,
GSS_C_NULL_OID_SET, cred_usage, &cred,
NULL, &time_rec);
target_mechs, cred_usage, &cred, NULL,
&time_rec);
} else {
return GSS_S_UNAVAILABLE;
}
Expand Down
29 changes: 21 additions & 8 deletions src/lib/gssapi/mechglue/g_acquire_cred_with_pw.c
Original file line number Diff line number Diff line change
Expand Up @@ -339,6 +339,7 @@ gss_add_cred_with_password(minor_status, input_cred_handle,
gss_cred_id_t cred = NULL;
gss_OID new_mechs_array = NULL;
gss_cred_id_t * new_cred_array = NULL;
gss_OID_set target_mechs = GSS_C_NO_OID_SET;

status = val_add_cred_pw_args(minor_status,
input_cred_handle,
Expand Down Expand Up @@ -402,15 +403,24 @@ gss_add_cred_with_password(minor_status, input_cred_handle,
else
time_req = 0;

status = gss_create_empty_oid_set(minor_status, &target_mechs);
if (status != GSS_S_COMPLETE)
goto errout;

status = gss_add_oid_set_member(minor_status,
&mech->mech_type, &target_mechs);
if (status != GSS_S_COMPLETE)
goto errout;

status = mech_ext->gssspi_acquire_cred_with_password(minor_status,
internal_name,
password,
time_req,
GSS_C_NULL_OID_SET,
cred_usage,
&cred,
NULL,
&time_rec);
internal_name,
password,
time_req,
target_mechs,
cred_usage,
&cred,
NULL,
&time_rec);
if (status != GSS_S_COMPLETE) {
map_error(minor_status, mech);
goto errout;
Expand Down Expand Up @@ -506,6 +516,9 @@ gss_add_cred_with_password(minor_status, input_cred_handle,
&mech->mech_type,
&allocated_name);

if (target_mechs)
(void)gss_release_oid_set(&temp_minor_status, &target_mechs);

if (input_cred_handle == GSS_C_NO_CREDENTIAL && union_cred)
free(union_cred);

Expand Down

0 comments on commit 22881a1

Please sign in to comment.