aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Howard <lukeh@padl.com>2010-09-25 21:48:56 +0000
committerLuke Howard <lukeh@padl.com>2010-09-25 21:48:56 +0000
commitfe29851381bbb4c7b1122b10409b17a63e1f8494 (patch)
tree9a6fdf95feed07b6a638873dcbaf22ff244452cb
parentc16eb5079ac46decd883b2d49243312bfeac815f (diff)
downloadkrb5-fe29851381bbb4c7b1122b10409b17a63e1f8494.zip
krb5-fe29851381bbb4c7b1122b10409b17a63e1f8494.tar.gz
krb5-fe29851381bbb4c7b1122b10409b17a63e1f8494.tar.bz2
make arguments optional for RFC 5587
git-svn-id: svn://anonsvn.mit.edu/krb5/users/lhoward/sasl-gs2@24354 dc483132-0cff-0310-8789-dd5450dbe970
-rw-r--r--src/lib/gssapi/krb5/gssapi_krb5.c13
-rw-r--r--src/lib/gssapi/mechglue/g_mechattr.c8
-rw-r--r--src/lib/gssapi/spnego/spnego_mech.c10
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))