From fe29851381bbb4c7b1122b10409b17a63e1f8494 Mon Sep 17 00:00:00 2001 From: Luke Howard Date: Sat, 25 Sep 2010 21:48:56 +0000 Subject: make arguments optional for RFC 5587 git-svn-id: svn://anonsvn.mit.edu/krb5/users/lhoward/sasl-gs2@24354 dc483132-0cff-0310-8789-dd5450dbe970 --- src/lib/gssapi/krb5/gssapi_krb5.c | 13 +++++++++++-- src/lib/gssapi/mechglue/g_mechattr.c | 8 +++----- src/lib/gssapi/spnego/spnego_mech.c | 10 +++++++++- 3 files changed, 23 insertions(+), 8 deletions(-) diff --git a/src/lib/gssapi/krb5/gssapi_krb5.c b/src/lib/gssapi/krb5/gssapi_krb5.c index ef85156..911e984 100644 --- a/src/lib/gssapi/krb5/gssapi_krb5.c +++ b/src/lib/gssapi/krb5/gssapi_krb5.c @@ -630,8 +630,8 @@ krb5_gssspi_mech_invoke (OM_uint32 *minor_status, return GSS_S_UNAVAILABLE; } -#define GS2_KRB5_SASL_NAME "GS2-KRB5" -#define GS2_KRB5_SASL_NAME_LEN (sizeof(GS2_KRB5_SASL_NAME) - 1) +#define GS2_KRB5_SASL_NAME "GS2-KRB5" +#define GS2_KRB5_SASL_NAME_LEN (sizeof(GS2_KRB5_SASL_NAME) - 1) #define GS2_IAKERB_SASL_NAME "GS2-IAKERB" #define GS2_IAKERB_SASL_NAME_LEN (sizeof(GS2_IAKERB_SASL_NAME) - 1) @@ -641,6 +641,8 @@ krb5_gss_inquire_mech_for_saslname(OM_uint32 *minor_status, const gss_buffer_t sasl_mech_name, gss_OID *mech_type) { + *minor_status = 0; + if (sasl_mech_name->length == GS2_KRB5_SASL_NAME_LEN && memcmp(sasl_mech_name->value, GS2_KRB5_SASL_NAME, GS2_KRB5_SASL_NAME_LEN) == 0) { @@ -665,6 +667,8 @@ krb5_gss_inquire_saslname_for_mech(OM_uint32 *minor_status, gss_buffer_t mech_name, gss_buffer_t mech_description) { + *minor_status = 0; + if (g_OID_equal(desired_mech, gss_mech_iakerb)) { g_make_string_buffer(GS2_IAKERB_SASL_NAME, sasl_mech_name); g_make_string_buffer("iakerb", mech_name); @@ -687,6 +691,11 @@ krb5_gss_inquire_attrs_for_mech(OM_uint32 *minor_status, { OM_uint32 major, tmpMinor; + if (mech_attrs == NULL) { + *minor_status = 0; + return GSS_S_COMPLETE; + } + major = gss_create_empty_oid_set(minor_status, mech_attrs); if (GSS_ERROR(major)) goto cleanup; diff --git a/src/lib/gssapi/mechglue/g_mechattr.c b/src/lib/gssapi/mechglue/g_mechattr.c index 704e4e3..d12dd7f 100644 --- a/src/lib/gssapi/mechglue/g_mechattr.c +++ b/src/lib/gssapi/mechglue/g_mechattr.c @@ -164,10 +164,8 @@ OM_uint32 gss_inquire_attrs_for_mech( *minor = 0; - if (mech_attrs == NULL) - return GSS_S_CALL_INACCESSIBLE_WRITE; - - *mech_attrs = GSS_C_NO_OID_SET; + if (mech_attrs != NULL) + *mech_attrs = GSS_C_NO_OID_SET; if (known_mech_attrs != NULL) *known_mech_attrs = GSS_C_NO_OID_SET; @@ -182,7 +180,7 @@ OM_uint32 gss_inquire_attrs_for_mech( return status; } - if (mech != gssint_get_mechanism(NULL)) { + if (mech_attrs != NULL && mech != gssint_get_mechanism(NULL)) { if (*mech_attrs == GSS_C_NO_OID_SET) { status = generic_gss_create_empty_oid_set(minor, mech_attrs); if (GSS_ERROR(status)) diff --git a/src/lib/gssapi/spnego/spnego_mech.c b/src/lib/gssapi/spnego/spnego_mech.c index 70c7245..2e030e4 100644 --- a/src/lib/gssapi/spnego/spnego_mech.c +++ b/src/lib/gssapi/spnego/spnego_mech.c @@ -2715,6 +2715,8 @@ spnego_gss_inquire_saslname_for_mech(OM_uint32 *minor_status, gss_buffer_t mech_name, gss_buffer_t mech_description) { + *minor_status = 0; + if (!g_OID_equal(desired_mech, gss_mech_spnego)) return (GSS_S_BAD_MECH); @@ -2732,7 +2734,13 @@ spnego_gss_inquire_attrs_for_mech(OM_uint32 *minor_status, gss_OID_set *mech_attrs, gss_OID_set *known_mech_attrs) { - OM_uint32 major, tmpMinor; + OM_uint32 major, tmpMinor; + + /* known_mech_attrs is handled by mechglue */ + *minor_status = 0; + + if (mech_attrs == NULL) + return (GSS_S_COMPLETE); major = gss_create_empty_oid_set(minor_status, mech_attrs); if (GSS_ERROR(major)) -- cgit v1.1