|
 |
7d335d |
Test tweaked for 1.11.3.
|
|
 |
7d335d |
|
|
 |
7d335d |
commit d160bc733a3dbeb6d84f4e175234ff18738d9f66
|
|
 |
7d335d |
Author: Simo Sorce <simo@redhat.com>
|
|
 |
7d335d |
Date: Tue Dec 17 16:15:14 2013 -0500
|
|
 |
7d335d |
|
|
 |
7d335d |
Let SPNEGO display mechanism errors
|
|
 |
7d335d |
|
|
 |
7d335d |
To avoid potential recursion we use a thread local variable that tells
|
|
 |
7d335d |
us whether the ancestor was called via spnego_gss_display_name(). If
|
|
 |
7d335d |
we detect recursion, we assume that we returned a com_err code like
|
|
 |
7d335d |
ENOMEM and call error_message(); in the worst case that will result in
|
|
 |
7d335d |
an "Unknown error" message.
|
|
 |
7d335d |
|
|
 |
7d335d |
[ghudson@mit.edu: Edited comments and commit message; removed an
|
|
 |
7d335d |
unneeded line of code.]
|
|
 |
7d335d |
|
|
 |
7d335d |
ticket: 7045
|
|
 |
7d335d |
target_version: 1.12.1
|
|
 |
7d335d |
tags: pullup
|
|
 |
7d335d |
|
|
 |
7d335d |
diff --git a/src/include/k5-thread.h b/src/include/k5-thread.h
|
|
 |
7d335d |
index 1b7fa69..ab46ec3 100644
|
|
 |
7d335d |
--- a/src/include/k5-thread.h
|
|
 |
7d335d |
+++ b/src/include/k5-thread.h
|
|
 |
7d335d |
@@ -406,6 +406,7 @@ typedef enum {
|
|
 |
7d335d |
K5_KEY_GSS_KRB5_SET_CCACHE_OLD_NAME,
|
|
 |
7d335d |
K5_KEY_GSS_KRB5_CCACHE_NAME,
|
|
 |
7d335d |
K5_KEY_GSS_KRB5_ERROR_MESSAGE,
|
|
 |
7d335d |
+ K5_KEY_GSS_SPNEGO_STATUS,
|
|
 |
7d335d |
#if defined(__MACH__) && defined(__APPLE__)
|
|
 |
7d335d |
K5_KEY_IPC_CONNECTION_INFO,
|
|
 |
7d335d |
#endif
|
|
 |
7d335d |
diff --git a/src/lib/gssapi/spnego/spnego_mech.c b/src/lib/gssapi/spnego/spnego_mech.c
|
|
 |
7d335d |
index 06cfab0..7e4bf90 100644
|
|
 |
7d335d |
--- a/src/lib/gssapi/spnego/spnego_mech.c
|
|
 |
7d335d |
+++ b/src/lib/gssapi/spnego/spnego_mech.c
|
|
 |
7d335d |
@@ -85,8 +85,8 @@ extern int gssint_put_der_length(unsigned int, unsigned char **, unsigned int);
|
|
 |
7d335d |
|
|
 |
7d335d |
|
|
 |
7d335d |
/* private routines for spnego_mechanism */
|
|
 |
7d335d |
-static spnego_token_t make_spnego_token(char *);
|
|
 |
7d335d |
-static gss_buffer_desc make_err_msg(char *);
|
|
 |
7d335d |
+static spnego_token_t make_spnego_token(const char *);
|
|
 |
7d335d |
+static gss_buffer_desc make_err_msg(const char *);
|
|
 |
7d335d |
static int g_token_size(gss_OID_const, unsigned int);
|
|
 |
7d335d |
static int g_make_token_header(gss_OID_const, unsigned int,
|
|
 |
7d335d |
unsigned char **, unsigned int);
|
|
 |
7d335d |
@@ -316,6 +316,12 @@ int gss_krb5int_lib_init(void);
|
|
 |
7d335d |
|
|
 |
7d335d |
int gss_spnegoint_lib_init(void)
|
|
 |
7d335d |
{
|
|
 |
7d335d |
+ int err;
|
|
 |
7d335d |
+
|
|
 |
7d335d |
+ err = k5_key_register(K5_KEY_GSS_SPNEGO_STATUS, NULL);
|
|
 |
7d335d |
+ if (err)
|
|
 |
7d335d |
+ return err;
|
|
 |
7d335d |
+
|
|
 |
7d335d |
#ifdef _GSS_STATIC_LINK
|
|
 |
7d335d |
return gss_spnegomechglue_init();
|
|
 |
7d335d |
#else
|
|
 |
7d335d |
@@ -1791,7 +1797,6 @@ cleanup:
|
|
 |
7d335d |
}
|
|
 |
7d335d |
#endif /* LEAN_CLIENT */
|
|
 |
7d335d |
|
|
 |
7d335d |
-
|
|
 |
7d335d |
/*ARGSUSED*/
|
|
 |
7d335d |
OM_uint32 KRB5_CALLCONV
|
|
 |
7d335d |
spnego_gss_display_status(
|
|
 |
7d335d |
@@ -1802,6 +1807,9 @@ spnego_gss_display_status(
|
|
 |
7d335d |
OM_uint32 *message_context,
|
|
 |
7d335d |
gss_buffer_t status_string)
|
|
 |
7d335d |
{
|
|
 |
7d335d |
+ OM_uint32 maj = GSS_S_COMPLETE;
|
|
 |
7d335d |
+ int ret;
|
|
 |
7d335d |
+
|
|
 |
7d335d |
dsyslog("Entering display_status\n");
|
|
 |
7d335d |
|
|
 |
7d335d |
*message_context = 0;
|
|
 |
7d335d |
@@ -1832,13 +1840,31 @@ spnego_gss_display_status(
|
|
 |
7d335d |
"return a valid token"));
|
|
 |
7d335d |
break;
|
|
 |
7d335d |
default:
|
|
 |
7d335d |
- status_string->length = 0;
|
|
 |
7d335d |
- status_string->value = "";
|
|
 |
7d335d |
+ /* Not one of our minor codes; might be from a mech. Call back
|
|
 |
7d335d |
+ * to gss_display_status, but first check for recursion. */
|
|
 |
7d335d |
+ if (k5_getspecific(K5_KEY_GSS_SPNEGO_STATUS) != NULL) {
|
|
 |
7d335d |
+ /* Perhaps we returned a com_err code like ENOMEM. */
|
|
 |
7d335d |
+ const char *err = error_message(status_value);
|
|
 |
7d335d |
+ *status_string = make_err_msg(err);
|
|
 |
7d335d |
+ break;
|
|
 |
7d335d |
+ }
|
|
 |
7d335d |
+ /* Set a non-null pointer value; doesn't matter which one. */
|
|
 |
7d335d |
+ ret = k5_setspecific(K5_KEY_GSS_SPNEGO_STATUS, &ret;;
|
|
 |
7d335d |
+ if (ret != 0) {
|
|
 |
7d335d |
+ *minor_status = ret;
|
|
 |
7d335d |
+ maj = GSS_S_FAILURE;
|
|
 |
7d335d |
+ break;
|
|
 |
7d335d |
+ }
|
|
 |
7d335d |
+ maj = gss_display_status(minor_status, status_value,
|
|
 |
7d335d |
+ status_type, mech_type,
|
|
 |
7d335d |
+ message_context, status_string);
|
|
 |
7d335d |
+ /* This is unlikely to fail; not much we can do if it does. */
|
|
 |
7d335d |
+ (void)k5_setspecific(K5_KEY_GSS_SPNEGO_STATUS, NULL);
|
|
 |
7d335d |
break;
|
|
 |
7d335d |
}
|
|
 |
7d335d |
|
|
 |
7d335d |
dsyslog("Leaving display_status\n");
|
|
 |
7d335d |
- return (GSS_S_COMPLETE);
|
|
 |
7d335d |
+ return maj;
|
|
 |
7d335d |
}
|
|
 |
7d335d |
|
|
 |
7d335d |
|
|
 |
7d335d |
@@ -3550,13 +3576,13 @@ negotiate_mech(gss_OID_set supported, gss_OID_set received,
|
|
 |
7d335d |
* these routines will be changes to return the error string.
|
|
 |
7d335d |
*/
|
|
 |
7d335d |
static spnego_token_t
|
|
 |
7d335d |
-make_spnego_token(char *name)
|
|
 |
7d335d |
+make_spnego_token(const char *name)
|
|
 |
7d335d |
{
|
|
 |
7d335d |
return (spnego_token_t)strdup(name);
|
|
 |
7d335d |
}
|
|
 |
7d335d |
|
|
 |
7d335d |
static gss_buffer_desc
|
|
 |
7d335d |
-make_err_msg(char *name)
|
|
 |
7d335d |
+make_err_msg(const char *name)
|
|
 |
7d335d |
{
|
|
 |
7d335d |
gss_buffer_desc buffer;
|
|
 |
7d335d |
|
|
 |
7d335d |
commit 4faca53e3a8ee213d43da8998f6889e7bfd36248
|
|
 |
7d335d |
Author: Greg Hudson <ghudson@mit.edu>
|
|
 |
7d335d |
Date: Wed Dec 18 16:03:16 2013 -0500
|
|
 |
7d335d |
|
|
 |
7d335d |
Test SPNEGO error message in t_s4u.py
|
|
 |
7d335d |
|
|
 |
7d335d |
Now that #7045 is fixed, we can check for the correct error message
|
|
 |
7d335d |
from t_s4u2proxy_krb5 with --spnego.
|
|
 |
7d335d |
|
|
 |
7d335d |
ticket: 7045
|
|
 |
7d335d |
|
|
 |
7d335d |
diff --git a/src/tests/gssapi/t_s4u.py b/src/tests/gssapi/t_s4u.py
|
|
 |
7d335d |
index 67dc810..e4aa259 100644
|
|
 |
7d335d |
--- a/src/tests/gssapi/t_s4u.py
|
|
 |
7d335d |
+++ b/src/tests/gssapi/t_s4u.py
|
|
 |
7d335d |
@@ -30,12 +30,12 @@ if ('auth1: ' + realm.user_princ not in output or
|
|
 |
7d335d |
'NOT_ALLOWED_TO_DELEGATE' not in output):
|
|
 |
7d335d |
fail('krb5 -> s4u2proxy')
|
|
 |
7d335d |
|
|
 |
7d335d |
-# Again with SPNEGO. Bug #7045 prevents us from checking the error
|
|
 |
7d335d |
-# message, but we can at least exercise the code.
|
|
 |
7d335d |
+# Again with SPNEGO.
|
|
 |
7d335d |
output = realm.run_as_server(['./t_s4u2proxy_krb5', '--spnego', usercache,
|
|
 |
7d335d |
storagecache, '-', pservice1, pservice2],
|
|
 |
7d335d |
expected_code=1)
|
|
 |
7d335d |
-if ('auth1: ' + realm.user_princ not in output):
|
|
 |
7d335d |
+if ('auth1: ' + realm.user_princ not in output or
|
|
 |
7d335d |
+ 'NOT_ALLOWED_TO_DELEGATE' not in output):
|
|
 |
7d335d |
fail('krb5 -> s4u2proxy (SPNEGO)')
|
|
 |
7d335d |
|
|
 |
7d335d |
# Try krb5 -> S4U2Proxy without forwardable user creds. This should
|
|
 |
7d335d |
@@ -66,10 +66,9 @@ if 'NOT_ALLOWED_TO_DELEGATE' not in output:
|
|
 |
7d335d |
fail('s4u2self')
|
|
 |
7d335d |
|
|
 |
7d335d |
# Again with SPNEGO. This uses SPNEGO for the initial authentication,
|
|
 |
7d335d |
-# but still uses krb5 for S4U2Proxy (the delegated cred is returned as
|
|
 |
7d335d |
+# but still uses krb5 for S4U2Proxy--the delegated cred is returned as
|
|
 |
7d335d |
# a krb5 cred, not a SPNEGO cred, and t_s4u uses the delegated cred
|
|
 |
7d335d |
-# directly rather than saving and reacquiring it) so bug #7045 does
|
|
 |
7d335d |
-# not apply and we can verify the error message.
|
|
 |
7d335d |
+# directly rather than saving and reacquiring it.
|
|
 |
7d335d |
output = realm.run_as_server(['./t_s4u', '--spnego', puser, pservice2],
|
|
 |
7d335d |
expected_code=1)
|
|
 |
7d335d |
if 'NOT_ALLOWED_TO_DELEGATE' not in output:
|
|
 |
7d335d |
fail('s4u2self')
|