diff options
author | Luke Howard <lukeh@padl.com> | 2010-09-25 21:45:02 +0000 |
---|---|---|
committer | Luke Howard <lukeh@padl.com> | 2010-09-25 21:45:02 +0000 |
commit | c16eb5079ac46decd883b2d49243312bfeac815f (patch) | |
tree | 94ddff13448bb5051eb61260068d9eadfa3aa4df | |
parent | 358d086a618fc541be8d5660632b86b2b978ea6d (diff) | |
download | krb5-c16eb5079ac46decd883b2d49243312bfeac815f.zip krb5-c16eb5079ac46decd883b2d49243312bfeac815f.tar.gz krb5-c16eb5079ac46decd883b2d49243312bfeac815f.tar.bz2 |
All RFC 5801 arguments are optional
git-svn-id: svn://anonsvn.mit.edu/krb5/users/lhoward/sasl-gs2@24353 dc483132-0cff-0310-8789-dd5450dbe970
-rw-r--r-- | src/lib/gssapi/generic/util_buffer.c | 3 | ||||
-rw-r--r-- | src/lib/gssapi/krb5/gssapi_krb5.c | 6 | ||||
-rw-r--r-- | src/lib/gssapi/mechglue/g_saslname.c | 40 | ||||
-rw-r--r-- | src/lib/gssapi/spnego/spnego_mech.c | 12 |
4 files changed, 32 insertions, 29 deletions
diff --git a/src/lib/gssapi/generic/util_buffer.c b/src/lib/gssapi/generic/util_buffer.c index cd16862..81d86fc 100644 --- a/src/lib/gssapi/generic/util_buffer.c +++ b/src/lib/gssapi/generic/util_buffer.c @@ -34,6 +34,9 @@ int g_make_string_buffer(const char *str, gss_buffer_t buffer) { + if (buffer == GSS_C_NO_BUFFER) + return (1); + buffer->length = strlen(str); if ((buffer->value = strdup(str)) == NULL) { diff --git a/src/lib/gssapi/krb5/gssapi_krb5.c b/src/lib/gssapi/krb5/gssapi_krb5.c index 4625463..ef85156 100644 --- a/src/lib/gssapi/krb5/gssapi_krb5.c +++ b/src/lib/gssapi/krb5/gssapi_krb5.c @@ -644,12 +644,14 @@ krb5_gss_inquire_mech_for_saslname(OM_uint32 *minor_status, 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) { - *mech_type = (gss_OID)gss_mech_krb5; + if (mech_type != NULL) + *mech_type = (gss_OID)gss_mech_krb5; return GSS_S_COMPLETE; } else if (sasl_mech_name->length == GS2_IAKERB_SASL_NAME_LEN && memcmp(sasl_mech_name->value, GS2_IAKERB_SASL_NAME, GS2_IAKERB_SASL_NAME_LEN) == 0) { - *mech_type = (gss_OID)gss_mech_iakerb; + if (mech_type != NULL) + *mech_type = (gss_OID)gss_mech_iakerb; return GSS_S_COMPLETE; } diff --git a/src/lib/gssapi/mechglue/g_saslname.c b/src/lib/gssapi/mechglue/g_saslname.c index 1e3b5ff..4bffdd6 100644 --- a/src/lib/gssapi/mechglue/g_saslname.c +++ b/src/lib/gssapi/mechglue/g_saslname.c @@ -124,19 +124,20 @@ OM_uint32 KRB5_CALLCONV gss_inquire_saslname_for_mech( *minor_status = 0; - if (sasl_mech_name == GSS_C_NO_BUFFER || - mech_name == GSS_C_NO_BUFFER || - mech_description == GSS_C_NO_BUFFER) - return GSS_S_CALL_INACCESSIBLE_WRITE; - - sasl_mech_name->length = 0; - sasl_mech_name->value = NULL; + if (sasl_mech_name != GSS_C_NO_BUFFER) { + sasl_mech_name->length = 0; + sasl_mech_name->value = NULL; + } - mech_name->length = 0; - mech_name->value = NULL; + if (mech_name != GSS_C_NO_BUFFER) { + mech_name->length = 0; + mech_name->value = NULL; + } - mech_description->length = 0; - mech_description->value = NULL; + if (mech_description != GSS_C_NO_BUFFER) { + mech_description->length = 0; + mech_description->value = NULL; + } mech = gssint_get_mechanism(desired_mech); if (mech != NULL && mech->gss_inquire_saslname_for_mech != NULL) { @@ -147,8 +148,11 @@ OM_uint32 KRB5_CALLCONV gss_inquire_saslname_for_mech( mech_description); } if (status == GSS_S_BAD_MECH) { - status = oidToSaslNameAlloc(minor_status, desired_mech, - sasl_mech_name); + if (sasl_mech_name != GSS_C_NO_BUFFER) + status = oidToSaslNameAlloc(minor_status, desired_mech, + sasl_mech_name); + else + status = GSS_S_COMPLETE; } return status; @@ -166,11 +170,10 @@ OM_uint32 KRB5_CALLCONV gss_inquire_mech_for_saslname( if (minor_status == NULL) return GSS_S_CALL_INACCESSIBLE_WRITE; - if (mech_type == NULL) - return GSS_S_CALL_INACCESSIBLE_WRITE; - *minor_status = 0; - *mech_type = GSS_C_NO_OID; + + if (mech_type != NULL) + *mech_type = GSS_C_NO_OID; status = gss_indicate_mechs(minor_status, &mechSet); if (status != GSS_S_COMPLETE) @@ -194,7 +197,8 @@ OM_uint32 KRB5_CALLCONV gss_inquire_mech_for_saslname( mappedName) == GSS_S_COMPLETE && memcmp(sasl_mech_name->value, mappedName, OID_SASL_NAME_LENGTH) == 0) { - *mech_type = &mech->mech_type; + if (mech_type != NULL) + *mech_type = &mech->mech_type; status = GSS_S_COMPLETE; break; } diff --git a/src/lib/gssapi/spnego/spnego_mech.c b/src/lib/gssapi/spnego/spnego_mech.c index 6a99ca3..70c7245 100644 --- a/src/lib/gssapi/spnego/spnego_mech.c +++ b/src/lib/gssapi/spnego/spnego_mech.c @@ -2700,7 +2700,8 @@ spnego_gss_inquire_mech_for_saslname(OM_uint32 *minor_status, if (sasl_mech_name->length == SPNEGO_SASL_NAME_LEN && memcmp(sasl_mech_name->value, SPNEGO_SASL_NAME, SPNEGO_SASL_NAME_LEN) == 0) { - *mech_type = (gss_OID)gss_mech_spnego; + if (mech_type != NULL) + *mech_type = (gss_OID)gss_mech_spnego; return (GSS_S_COMPLETE); } @@ -2717,18 +2718,11 @@ spnego_gss_inquire_saslname_for_mech(OM_uint32 *minor_status, if (!g_OID_equal(desired_mech, gss_mech_spnego)) return (GSS_S_BAD_MECH); + (void) g_make_string_buffer(SPNEGO_SASL_NAME, sasl_mech_name); (void) g_make_string_buffer("spnego", mech_name); (void) g_make_string_buffer("Simple and Protected GSS-API " "Negotiation Mechanism", mech_description); - sasl_mech_name->value = strdup(SPNEGO_SASL_NAME); - if (sasl_mech_name->value == NULL) { - *minor_status = ENOMEM; - return (GSS_S_FAILURE); - } - - sasl_mech_name->length = SPNEGO_SASL_NAME_LEN; - return (GSS_S_COMPLETE); } |