aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Howard <lukeh@padl.com>2010-09-25 21:45:02 +0000
committerLuke Howard <lukeh@padl.com>2010-09-25 21:45:02 +0000
commitc16eb5079ac46decd883b2d49243312bfeac815f (patch)
tree94ddff13448bb5051eb61260068d9eadfa3aa4df
parent358d086a618fc541be8d5660632b86b2b978ea6d (diff)
downloadkrb5-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.c3
-rw-r--r--src/lib/gssapi/krb5/gssapi_krb5.c6
-rw-r--r--src/lib/gssapi/mechglue/g_saslname.c40
-rw-r--r--src/lib/gssapi/spnego/spnego_mech.c12
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);
}