Hello community,
here is the log from the commit of package apache2-mod_auth_openidc for
openSUSE:Factory checked in at 2020-11-26 23:13:46
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/apache2-mod_auth_openidc (Old)
and /work/SRC/openSUSE:Factory/.apache2-mod_auth_openidc.new.5913 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "apache2-mod_auth_openidc"
Thu Nov 26 23:13:46 2020 rev:13 rq:850781 version:2.4.5
Changes:
--------
---
/work/SRC/openSUSE:Factory/apache2-mod_auth_openidc/apache2-mod_auth_openidc.changes
2020-09-10 22:55:14.280411737 +0200
+++
/work/SRC/openSUSE:Factory/.apache2-mod_auth_openidc.new.5913/apache2-mod_auth_openidc.changes
2020-11-26 23:15:01.081019325 +0100
@@ -1,0 +2,29 @@
+Mon Nov 23 19:50:22 UTC 2020 - Michael Ströder <[email protected]>
+
+- Update to version 2.4.5
+ * Features
+ - disable caching token introspection results by setting
+ OIDCOAuthTokenIntrospectionInterval to -1
+ - add exec support to OIDCCryptoPassphrase
+ - delete stale session cookies that aren't in the cache
+ - allow OIDCDiscoverURL to be a relative URL
+ - add OIDCCABundlePath for configuring path to curl CA bundle
+ * Bugfixes
+ - enable authentication of sub-requests when the main request
+ doesn't require authentication
+ - fix content processing for info and JWKs handler so mod_headers etc.
+ work; closes #497
+ - avoid Apache 2.4 appending 401 HTML document text to step-up
+ authentication HTML refresh page; closes #484
+ - add config check for OIDCCryptoPassphrase in OAuth 2.0 RS setup with
+ cache encryption enabled
+ - populate AUTH_TYPE when performing authentication
+ - improve sanity checking on Redis reply
+ * Security
+ - ensure that sub is returned from the userinfo endpoint following
+ https://openid.net/specs/openid-connect-core-1_0.html#UserInfoResponse;
+ prevents potential ID spoofing
+ - don't printout JSON errors about NULL characters in error log
+ - restrict printout of JSON parsing errors to 4096 bytes
+
+-------------------------------------------------------------------
Old:
----
apache2-mod_auth_openidc-2.4.4.1.tar.gz
New:
----
apache2-mod_auth_openidc-2.4.5.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ apache2-mod_auth_openidc.spec ++++++
--- /var/tmp/diff_new_pack.wOirHw/_old 2020-11-26 23:15:01.781019902 +0100
+++ /var/tmp/diff_new_pack.wOirHw/_new 2020-11-26 23:15:01.785019905 +0100
@@ -19,7 +19,7 @@
%define apxs %{_sbindir}/apxs2
%define apache_libexecdir %(%{apxs} -q LIBEXECDIR)
Name: apache2-mod_auth_openidc
-Version: 2.4.4.1
+Version: 2.4.5
Release: 0
Summary: Apache2.x module for an OpenID Connect enabled Identity
Provider
License: Apache-2.0
++++++ apache2-mod_auth_openidc-2.4.4.1.tar.gz ->
apache2-mod_auth_openidc-2.4.5.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/mod_auth_openidc-2.4.4.1/.travis.yml
new/mod_auth_openidc-2.4.5/.travis.yml
--- old/mod_auth_openidc-2.4.4.1/.travis.yml 2020-09-03 16:52:30.000000000
+0200
+++ new/mod_auth_openidc-2.4.5/.travis.yml 2020-11-23 09:53:27.000000000
+0100
@@ -1,7 +1,5 @@
language: c
-dist: trusty
-
arch:
- amd64
- ppc64le
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/mod_auth_openidc-2.4.4.1/AUTHORS
new/mod_auth_openidc-2.4.5/AUTHORS
--- old/mod_auth_openidc-2.4.4.1/AUTHORS 2020-09-03 16:52:30.000000000
+0200
+++ new/mod_auth_openidc-2.4.5/AUTHORS 2020-11-23 09:53:27.000000000 +0100
@@ -64,3 +64,5 @@
Bryan Ingram <https://github/bcingram>
Tim Deisser <https://github.com/deisser>
Peter Hurtenbach <https://github.com/Peter0x48>
+ Paul Spangler <https://github.com/spanglerco>
+ Chris Pawling <https://github.com/chris468>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/mod_auth_openidc-2.4.4.1/ChangeLog
new/mod_auth_openidc-2.4.5/ChangeLog
--- old/mod_auth_openidc-2.4.4.1/ChangeLog 2020-09-03 16:52:30.000000000
+0200
+++ new/mod_auth_openidc-2.4.5/ChangeLog 2020-11-23 09:53:27.000000000
+0100
@@ -1,3 +1,52 @@
+11/23/2020
+- release 2.4.5
+
+11/19/2020
+- ensure that "sub" is returned from the userinfo endpoint following
https://openid.net/specs/openid-connect-core-1_0.html#UserInfoResponse
+ prevents potential ID spoofing; thanks Christian Fries of Ruhr-University
Bochum
+- don't printout JSON errors about NULL characters in error log; thanks
Christian Fries of Ruhr-University Bochum
+- restrict printout of JSON parsing errors to 4096 bytes; thanks Christian
Fries of Ruhr-University Bochum
+- bump to 2.4.5rc6
+
+11/5/2020
+- fix content processing for info and JWKs handler so mod_headers etc. works;
closes #497
+- bump to 2.4.5rc5
+
+11/2/2020
+- improve sanity checking on Redis reply
+- bump to 2.4.5rc4
+
+10/30/2020
+- disable caching token introspection results by setting
OIDCOAuthTokenIntrospectionInterval to -1; thanks @wadahiro
+- bump to 2.4.5rc3
+
+10/27/2020
+- config check on OIDCCryptoPassphrase in OAuth 2.0 RS setup with cache
encryption enabled
+- bump to 2.4.5rc2
+
+10/22/2020
+- hash define expression option to OIDCUnAuthAction so it compiles for Apache
2.2; fixes 1461634
+- bump to 2.4.5rc1
+- add exec support to OIDCCryptoPassphrase
+
+10/19/2020
+- delete stale session cookies that aren't in the cache
+- allow OIDCDiscoverURL to be a relative URL
+
+10/08/2020
+- add OIDCCABundlePath for configuring path to curl CA bundle
+
+09/22/2020
+- avoid Apache 2.4 appending 401 HTML document text to step-up authentication
HTML refresh page; closes #484
+- bump to 2.4.5rc0
+
+09/21/2020
+- populate AUTH_TYPE when performing authentication; thanks @spanglerco
+
+09/19/2020
+- enable authentication of sub-requests when the main request doesn't require
+ authentication; thanks @spanglerco
+
09/03/2020
- add SameSite attribute on cookie clearance / logout; thanks @v0gler
- bump to 2.4.4.1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/mod_auth_openidc-2.4.4.1/auth_openidc.conf
new/mod_auth_openidc-2.4.5/auth_openidc.conf
--- old/mod_auth_openidc-2.4.4.1/auth_openidc.conf 2020-09-03
16:52:30.000000000 +0200
+++ new/mod_auth_openidc-2.4.5/auth_openidc.conf 2020-11-23
09:53:27.000000000 +0100
@@ -17,7 +17,11 @@
# - encryption of the (temporary) state cookie
# - encryption of cache entries, that may include the session cookie, see:
OIDCCacheEncrypt and OIDCSessionType
# Note that an encrypted cache mechanism can be shared between servers if they
use the same OIDCCryptoPassphrase
+# If the value begins with exec: the resulting command will be executed and the
+# first line returned to standard output by the program will be used as the
+# password. The command may be absolute or relative to the web server root.
#OIDCCryptoPassphrase <passphrase>
+#OIDCCryptoPassphrase "exec:/path/to/otherProgram argument1"
#
# All other entries below this are optional though some may be required in a
@@ -380,7 +384,9 @@
# to be refreshed by introspecting (and validating) it again against the
Authorization Server.
# (can be configured on a per-path basis)
# When not defined the value is 0, which means it only expires after the `exp`
(or alternative,
-# see OIDCOAuthTokenExpiryClaim) hint as returned by the Authorization Server
+# see OIDCOAuthTokenExpiryClaim) hint as returned by the Authorization Server.
+# When set to -1, caching of the introspection results is disabled and the
token will be introspected
+# on each request presenting it.
#OIDCOAuthTokenIntrospectionInterval <seconds>
# Require a valid SSL server certificate when communicating with the
Authorization Server
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/mod_auth_openidc-2.4.4.1/configure.ac
new/mod_auth_openidc-2.4.5/configure.ac
--- old/mod_auth_openidc-2.4.4.1/configure.ac 2020-09-03 16:52:30.000000000
+0200
+++ new/mod_auth_openidc-2.4.5/configure.ac 2020-11-23 09:53:27.000000000
+0100
@@ -1,4 +1,4 @@
-AC_INIT([mod_auth_openidc],[2.4.4.1],[[email protected]])
+AC_INIT([mod_auth_openidc],[2.4.5],[[email protected]])
AC_SUBST(NAMEVER, AC_PACKAGE_TARNAME()-AC_PACKAGE_VERSION())
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/mod_auth_openidc-2.4.4.1/src/cache/redis.c
new/mod_auth_openidc-2.4.5/src/cache/redis.c
--- old/mod_auth_openidc-2.4.4.1/src/cache/redis.c 2020-09-03
16:52:30.000000000 +0200
+++ new/mod_auth_openidc-2.4.5/src/cache/redis.c 2020-11-23
09:53:27.000000000 +0100
@@ -291,10 +291,17 @@
goto end;
}
+ if (reply->type != REDIS_REPLY_STRING) {
+ oidc_error(r, "redisCommand reply type is not string: %d",
reply->type);
+ goto end;
+ }
+
/* do a sanity check on the returned value */
- if (reply->len != strlen(reply->str)) {
- oidc_error(r, "redisCommand reply->len != strlen(reply->str):
'%s'",
- reply->str);
+ if ((reply->str == NULL)
+ || (reply->len != strlen(reply->str))) {
+ oidc_error(r,
+ "redisCommand reply->len (%d) !=
strlen(reply->str): '%s'",
+ (int )reply->len, reply->str);
goto end;
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/mod_auth_openidc-2.4.4.1/src/config.c
new/mod_auth_openidc-2.4.5/src/config.c
--- old/mod_auth_openidc-2.4.4.1/src/config.c 2020-09-03 16:52:30.000000000
+0200
+++ new/mod_auth_openidc-2.4.5/src/config.c 2020-11-23 09:53:27.000000000
+0100
@@ -277,6 +277,7 @@
#define OIDCStateInputHeaders "OIDCStateInputHeaders"
#define OIDCRedirectURLsAllowed "OIDCRedirectURLsAllowed"
#define OIDCStateCookiePrefix "OIDCStateCookiePrefix"
+#define OIDCCABundlePath "OIDCCABundlePath"
extern module AP_MODULE_DECLARE_DATA auth_openidc_module;
@@ -289,7 +290,9 @@
char *cookie;
char *authn_header;
int unauth_action;
+#if MODULE_MAGIC_NUMBER_MAJOR >= 20100714
ap_expr_info_t *unauth_expression;
+#endif
int unautz_action;
apr_array_header_t *pass_cookies;
apr_array_header_t *strip_cookies;
@@ -372,12 +375,10 @@
}
/*
- * set a relative or absolute URL value in the server config
+ * set a relative or absolute URL value in a config rec
*/
-static const char *oidc_set_relative_or_absolute_url_slot(cmd_parms *cmd,
- void *ptr, const char *arg) {
- oidc_cfg *cfg = (oidc_cfg *) ap_get_module_config(
- cmd->server->module_config, &auth_openidc_module);
+static const char *oidc_set_relative_or_absolute_url_slot_dir_cfg(
+ cmd_parms *cmd, void *ptr, const char *arg) {
if (arg[0] == OIDC_CHAR_FORWARD_SLASH) {
// relative uri
apr_uri_t uri;
@@ -386,20 +387,22 @@
"cannot parse '%s' as relative URI",
arg);
return OIDC_CONFIG_DIR_RV(cmd, rv);
} else {
- return ap_set_string_slot(cmd, cfg, arg);
+ return ap_set_string_slot(cmd, ptr, arg);
}
} else {
// absolute uri
- return oidc_set_url_slot_type(cmd, cfg, arg, NULL);
+ return oidc_set_url_slot_type(cmd, ptr, arg, NULL);
}
}
/*
- * set a HTTPS/HTTP value in the directory config
+ * set a relative or absolute URL value in the server config
*/
-static const char *oidc_set_url_slot_dir_cfg(cmd_parms *cmd, void *ptr,
- const char *arg) {
- return oidc_set_url_slot_type(cmd, ptr, arg, NULL);
+static const char *oidc_set_relative_or_absolute_url_slot(cmd_parms *cmd,
+ void *ptr, const char *arg) {
+ oidc_cfg *cfg = (oidc_cfg *) ap_get_module_config(
+ cmd->server->module_config, &auth_openidc_module);
+ return oidc_set_relative_or_absolute_url_slot_dir_cfg(cmd, cfg, arg);
}
/*
@@ -416,6 +419,55 @@
}
/*
+ * set a path value in the server config, converting to absolute if necessary
+ */
+static const char *oidc_set_path_slot(cmd_parms *cmd, void *ptr, const char
*arg) {
+ oidc_cfg *cfg = (oidc_cfg *) ap_get_module_config(
+ cmd->server->module_config, &auth_openidc_module);
+ const char *full_path = oidc_util_get_full_path(cmd->pool, arg);
+ return ap_set_string_slot(cmd, cfg, full_path);
+}
+
+/*
+ * set a string value in the server config with exec support
+ */
+static const char *oidc_set_passphrase_slot(cmd_parms *cmd, void *struct_ptr,
+ const char *arg) {
+ int arglen = strlen(arg);
+ char **argv;
+ char *result;
+ const char *passphrase;
+ oidc_cfg *cfg = (oidc_cfg *) ap_get_module_config(
+ cmd->server->module_config, &auth_openidc_module);
+
+ /* Based on code from mod_session_crypto. */
+ if (arglen > 5 && strncmp(arg, "exec:", 5) == 0) {
+ if (apr_tokenize_to_argv(arg + 5, &argv, cmd->temp_pool) !=
APR_SUCCESS) {
+ return apr_pstrcat(cmd->pool,
+ "Unable to parse exec arguments from ", arg +
5, NULL);
+ }
+ argv[0] = ap_server_root_relative(cmd->temp_pool, argv[0]);
+
+ if (!argv[0]) {
+ return apr_pstrcat(cmd->pool,
+ "Invalid ", cmd->cmd->name, " exec location:",
arg + 5, NULL);
+ }
+ result = ap_get_exec_line(cmd->pool, argv[0], (const char *
const *)argv);
+
+ if (!result) {
+ return apr_pstrcat(cmd->pool,
+ "Unable to get passphrase from exec of ", arg +
5, NULL);
+ }
+
+ passphrase = result;
+ } else {
+ passphrase = arg;
+ }
+
+ return ap_set_string_slot(cmd, cfg, passphrase);
+}
+
+/*
* set the cookie domain in the server config and check it syntactically
*/
static const char *oidc_set_cookie_domain(cmd_parms *cmd, void *ptr,
@@ -927,9 +979,10 @@
static const char * oidc_set_unauth_action(cmd_parms *cmd, void *m,
const char *arg1, const char *arg2) {
oidc_dir_cfg *dir_cfg = (oidc_dir_cfg *) m;
- const char *expr_err = NULL;
const char *rv = oidc_parse_unauth_action(cmd->pool, arg1,
&dir_cfg->unauth_action);
+#if MODULE_MAGIC_NUMBER_MAJOR >= 20100714
+ const char *expr_err = NULL;
if ((rv == NULL) && (arg2 != NULL)) {
dir_cfg->unauth_expression = ap_expr_parse_cmd(cmd, arg2,
AP_EXPR_FLAG_DONT_VARY &
AP_EXPR_FLAG_RESTRICTED, &expr_err,
@@ -939,6 +992,7 @@
expr_err, NULL);
}
}
+#endif
return OIDC_CONFIG_DIR_RV(cmd, rv);
}
@@ -1343,6 +1397,8 @@
c->redirect_urls_allowed = NULL;
+ c->ca_bundle_path = NULL;
+
return c;
}
@@ -1818,6 +1874,10 @@
add->redirect_urls_allowed != NULL ?
add->redirect_urls_allowed :
base->redirect_urls_allowed;
+ c->ca_bundle_path =
+ add->ca_bundle_path != NULL ?
+ add->ca_bundle_path :
base->ca_bundle_path;
+
return c;
}
@@ -1847,7 +1907,9 @@
c->cookie_path = OIDC_CONFIG_STRING_UNSET;
c->authn_header = OIDC_CONFIG_STRING_UNSET;
c->unauth_action = OIDC_CONFIG_POS_INT_UNSET;
+#if MODULE_MAGIC_NUMBER_MAJOR >= 20100714
c->unauth_expression = NULL;
+#endif
c->unautz_action = OIDC_CONFIG_POS_INT_UNSET;
c->pass_cookies = NULL;
c->strip_cookies = NULL;
@@ -1855,7 +1917,7 @@
c->pass_info_in_env_vars = OIDC_CONFIG_POS_INT_UNSET;
c->oauth_accept_token_in = OIDC_CONFIG_POS_INT_UNSET;
c->oauth_accept_token_options = apr_hash_make(pool);
- c->oauth_token_introspect_interval = OIDC_CONFIG_POS_INT_UNSET;
+ c->oauth_token_introspect_interval = -2;
c->preserve_post = OIDC_CONFIG_POS_INT_UNSET;
c->pass_refresh_token = OIDC_CONFIG_POS_INT_UNSET;
c->path_auth_request_params = NULL;
@@ -1950,7 +2012,7 @@
int oidc_cfg_token_introspection_interval(request_rec *r) {
oidc_dir_cfg *dir_cfg = ap_get_module_config(r->per_dir_config,
&auth_openidc_module);
- if (dir_cfg->oauth_token_introspect_interval ==
OIDC_CONFIG_POS_INT_UNSET)
+ if (dir_cfg->oauth_token_introspect_interval <= -2)
return OIDC_DEFAULT_TOKEN_INTROSPECTION_INTERVAL;
return dir_cfg->oauth_token_introspect_interval;
}
@@ -1979,11 +2041,12 @@
oidc_dir_cfg *dir_cfg = ap_get_module_config(r->per_dir_config,
&auth_openidc_module);
- int rc = 0;
- const char *err_str = NULL;
if (dir_cfg->unauth_action == OIDC_CONFIG_POS_INT_UNSET)
return OIDC_DEFAULT_UNAUTH_ACTION;
+#if MODULE_MAGIC_NUMBER_MAJOR >= 20100714
+ int rc = 0;
+ const char *err_str = NULL;
if (dir_cfg->unauth_expression == NULL)
return dir_cfg->unauth_action;
@@ -1995,12 +2058,19 @@
}
return (rc > 0) ? dir_cfg->unauth_action : OIDC_DEFAULT_UNAUTH_ACTION;
+#else
+ return dir_cfg->unauth_action;
+#endif
}
apr_byte_t oidc_dir_cfg_unauth_expr_is_set(request_rec *r) {
+#if MODULE_MAGIC_NUMBER_MAJOR >= 20100714
oidc_dir_cfg *dir_cfg = ap_get_module_config(r->per_dir_config,
&auth_openidc_module);
return (dir_cfg->unauth_expression != NULL) ? TRUE : FALSE;
+#else
+ return FALSE;
+#endif
}
int oidc_dir_cfg_unautz_action(request_rec *r) {
@@ -2045,9 +2115,11 @@
c->unauth_action =
add->unauth_action != OIDC_CONFIG_POS_INT_UNSET ?
add->unauth_action :
base->unauth_action;
+#if MODULE_MAGIC_NUMBER_MAJOR >= 20100714
c->unauth_expression =
add->unauth_expression != NULL ?
add->unauth_expression :
base->unauth_expression;
+#endif
c->unautz_action =
add->unautz_action != OIDC_CONFIG_POS_INT_UNSET ?
add->unautz_action :
base->unautz_action;
@@ -2072,7 +2144,7 @@
add->oauth_accept_token_options :
base->oauth_accept_token_options;
c->oauth_token_introspect_interval =
- add->oauth_token_introspect_interval !=
OIDC_CONFIG_POS_INT_UNSET ?
+ add->oauth_token_introspect_interval >= -1 ?
add->oauth_token_introspect_interval :
base->oauth_token_introspect_interval;
c->preserve_post =
@@ -2226,6 +2298,9 @@
}
+ if ((c->cache_encrypt == 1) && (c->crypto_passphrase == NULL))
+ return oidc_check_config_error(s, OIDCCryptoPassphrase);
+
return OK;
}
@@ -2618,7 +2693,7 @@
void oidc_register_hooks(apr_pool_t *pool) {
ap_hook_post_config(oidc_post_config, NULL, NULL, APR_HOOK_LAST);
ap_hook_child_init(oidc_child_init, NULL, NULL, APR_HOOK_MIDDLE);
- ap_hook_handler(oidc_content_handler, NULL, NULL, APR_HOOK_MIDDLE);
+ ap_hook_handler(oidc_content_handler, NULL, NULL, APR_HOOK_FIRST);
ap_hook_insert_filter(oidc_filter_in_insert_filter, NULL, NULL,
APR_HOOK_MIDDLE);
ap_register_input_filter(oidcFilterName, oidc_filter_in_filter, NULL,
@@ -2898,7 +2973,7 @@
RSRC_CONF,
"Specify an outgoing proxy for your network
(<host>[:<port>]."),
AP_INIT_TAKE1(OIDCCryptoPassphrase,
- oidc_set_string_slot,
+ oidc_set_passphrase_slot,
(void*)APR_OFFSETOF(oidc_cfg,
crypto_passphrase),
RSRC_CONF,
"Passphrase used for AES crypto on cookies and
state."),
@@ -3114,7 +3189,7 @@
"Name of a HTML error template: needs to
contain two \"%s\" characters, one for the error message, one for the
description."),
AP_INIT_TAKE1(OIDCDiscoverURL,
- oidc_set_url_slot_dir_cfg,
+ oidc_set_relative_or_absolute_url_slot_dir_cfg,
(void *)APR_OFFSETOF(oidc_dir_cfg,
discover_url),
RSRC_CONF|ACCESS_CONF|OR_AUTHCFG,
"Defines an external IDP Discovery page"),
@@ -3247,5 +3322,11 @@
RSRC_CONF|ACCESS_CONF|OR_AUTHCFG,
"Define the cookie prefix for the state
cookie."),
+ AP_INIT_TAKE1(OIDCCABundlePath,
+ oidc_set_path_slot,
+ (void *) APR_OFFSETOF(oidc_cfg, ca_bundle_path),
+ RSRC_CONF,
+ "Sets the path to the CA bundle to be used by
cURL."),
+
{ NULL }
};
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/mod_auth_openidc-2.4.4.1/src/mod_auth_openidc.c
new/mod_auth_openidc-2.4.5/src/mod_auth_openidc.c
--- old/mod_auth_openidc-2.4.4.1/src/mod_auth_openidc.c 2020-09-03
16:52:30.000000000 +0200
+++ new/mod_auth_openidc-2.4.5/src/mod_auth_openidc.c 2020-11-23
09:53:27.000000000 +0100
@@ -935,7 +935,7 @@
oidc_util_set_cookie(r, cookieName, cookieValue, -1,
OIDC_COOKIE_SAMESITE_LAX(c));
- return HTTP_OK;
+ return OK;
}
/*
@@ -2453,7 +2453,7 @@
* and cryptographically bind it to the browser
*/
int rc = oidc_authorization_request_set_cookie(r, c, state,
proto_state);
- if (rc != HTTP_OK) {
+ if (rc != OK) {
oidc_proto_state_destroy(proto_state);
return rc;
}
@@ -3754,9 +3754,6 @@
int oidc_handle_redirect_uri_request(request_rec *r, oidc_cfg *c,
oidc_session_t *session) {
- /* track if the session needs to be updated/saved into the cache */
- apr_byte_t needs_save = FALSE;
-
if (oidc_proto_is_redirect_authorization_response(r, c)) {
/* this is an authorization response from the OP using the
Basic Client profile or a Hybrid flow*/
@@ -3787,9 +3784,13 @@
} else if (oidc_util_request_has_parameter(r,
OIDC_REDIRECT_URI_REQUEST_JWKS)) {
-
- /* handle JWKs request */
- return oidc_handle_jwks(r, c);
+ /*
+ * Will be handled in the content handler; avoid:
+ * No authentication done but request not allowed without
authentication
+ * by setting r->user
+ */
+ r->user = "";
+ return OK;
} else if (oidc_util_request_has_parameter(r,
OIDC_REDIRECT_URI_REQUEST_SESSION)) {
@@ -3821,12 +3822,13 @@
if (session->remote_user == NULL)
return HTTP_UNAUTHORIZED;
- /* set r->user, set headers/env-vars, update expiry, update
userinfo + AT */
- int rc = oidc_handle_existing_session(r, c, session,
&needs_save);
- if (rc != OK)
- return rc;
-
- return oidc_handle_info_request(r, c, session, needs_save);
+ /*
+ * Will be handled in the content handler; avoid:
+ * No authentication done but request not allowed without
authentication
+ * by setting r->user
+ */
+ r->user = "";
+ return OK;
} else if ((r->args == NULL) || (apr_strnatcmp(r->args, "") == 0)) {
@@ -3875,59 +3877,7 @@
}
/* check if this is a sub-request or an initial request */
- if (ap_is_initial_req(r)) {
-
- int rc = OK;
- apr_byte_t needs_save = FALSE;
-
- /* load the session from the request state; this will be a new
"empty" session if no state exists */
- oidc_session_t *session = NULL;
- oidc_session_load(r, &session);
-
- /* see if the initial request is to the redirect URI; this
handles potential logout too */
- if (oidc_util_request_matches_url(r, oidc_get_redirect_uri(r,
c))) {
-
- /* handle request to the redirect_uri */
- rc = oidc_handle_redirect_uri_request(r, c, session);
-
- /* free resources allocated for the session */
- oidc_session_free(r, session);
-
- return rc;
-
- /* initial request to non-redirect URI, check if we
have an existing session */
- } else if (session->remote_user != NULL) {
-
- /* this is initial request and we already have a
session */
- rc = oidc_handle_existing_session(r, c, session,
&needs_save);
- if (rc == OK) {
-
- /* check if something was updated in the
session and we need to save it again */
- if (needs_save) {
- if (oidc_session_save(r, session,
FALSE) == FALSE) {
- oidc_warn(r, "error saving
session");
- rc = HTTP_INTERNAL_SERVER_ERROR;
- }
- }
- }
-
- /* free resources allocated for the session */
- oidc_session_free(r, session);
-
- /* strip any cookies that we need to */
- oidc_strip_cookies(r);
-
- return rc;
- }
-
- /* free resources allocated for the session */
- oidc_session_free(r, session);
-
- /*
- * else: initial request, we have no session and it is not an
authorization or
- * discovery response: just hit the default flow for
unauthenticated users
- */
- } else {
+ if (!ap_is_initial_req(r)) {
/* not an initial request, try to recycle what we've already
established in the main request */
if (r->main != NULL)
@@ -3966,10 +3916,61 @@
}
/*
* else: not initial request, but we could not find a session,
so:
- * just hit the default flow for unauthenticated users
+ * try to load a new session as if this were the initial request
*/
}
+ int rc = OK;
+ apr_byte_t needs_save = FALSE;
+
+ /* load the session from the request state; this will be a new "empty"
session if no state exists */
+ oidc_session_t *session = NULL;
+ oidc_session_load(r, &session);
+
+ /* see if the initial request is to the redirect URI; this handles
potential logout too */
+ if (oidc_util_request_matches_url(r, oidc_get_redirect_uri(r, c))) {
+
+ /* handle request to the redirect_uri */
+ rc = oidc_handle_redirect_uri_request(r, c, session);
+
+ /* free resources allocated for the session */
+ oidc_session_free(r, session);
+
+ return rc;
+
+ /* initial request to non-redirect URI, check if we have an
existing session */
+ } else if (session->remote_user != NULL) {
+
+ /* this is initial request and we already have a session */
+ rc = oidc_handle_existing_session(r, c, session, &needs_save);
+ if (rc == OK) {
+
+ /* check if something was updated in the session and we
need to save it again */
+ if (needs_save) {
+ if (oidc_session_save(r, session, FALSE) ==
FALSE) {
+ oidc_warn(r, "error saving session");
+ rc = HTTP_INTERNAL_SERVER_ERROR;
+ }
+ }
+ }
+
+ /* free resources allocated for the session */
+ oidc_session_free(r, session);
+
+ /* strip any cookies that we need to */
+ oidc_strip_cookies(r);
+
+ return rc;
+ }
+
+ /* free resources allocated for the session */
+ oidc_session_free(r, session);
+
+ /*
+ * else: we have no session and it is not an authorization or
+ * discovery response: just hit the default flow for
unauthenticated users
+ */
+
return oidc_handle_unauthenticated_user(r, c);
}
@@ -3980,10 +3981,14 @@
/* get the bearer access token from the Authorization header */
const char *access_token = NULL;
- if (oidc_oauth_get_bearer_token(r, &access_token) == TRUE)
+ if (oidc_oauth_get_bearer_token(r, &access_token) == TRUE) {
+
+ r->ap_auth_type = apr_pstrdup(r->pool,
OIDC_AUTH_TYPE_OPENID_OAUTH20);
return oidc_oauth_check_userid(r, c, access_token);
+ }
/* no bearer token found: then treat this as a regular OIDC browser
request */
+ r->ap_auth_type = apr_pstrdup(r->pool, OIDC_AUTH_TYPE_OPENID_CONNECT);
return oidc_check_userid_openidc(r, c);
}
@@ -4000,22 +4005,26 @@
r->parsed_uri.path, r->args, ap_is_initial_req(r));
/* see if any authentication has been defined at all */
- if (ap_auth_type(r) == NULL)
+ const char *current_auth = ap_auth_type(r);
+ if (current_auth == NULL)
return DECLINED;
/* see if we've configured OpenID Connect user authentication for this
request */
- if (apr_strnatcasecmp((const char *) ap_auth_type(r),
- OIDC_AUTH_TYPE_OPENID_CONNECT) == 0)
+ if (strcasecmp(current_auth, OIDC_AUTH_TYPE_OPENID_CONNECT) == 0) {
+
+ r->ap_auth_type = (char *)current_auth;
return oidc_check_userid_openidc(r, c);
+ }
/* see if we've configured OAuth 2.0 access control for this request */
- if (apr_strnatcasecmp((const char *) ap_auth_type(r),
- OIDC_AUTH_TYPE_OPENID_OAUTH20) == 0)
+ if (strcasecmp(current_auth, OIDC_AUTH_TYPE_OPENID_OAUTH20) == 0) {
+
+ r->ap_auth_type = (char *)current_auth;
return oidc_oauth_check_userid(r, c, NULL);
+ }
/* see if we've configured "mixed mode" for this request */
- if (apr_strnatcasecmp((const char *) ap_auth_type(r),
- OIDC_AUTH_TYPE_OPENID_BOTH) == 0)
+ if (strcasecmp(current_auth, OIDC_AUTH_TYPE_OPENID_BOTH) == 0)
return oidc_check_mixed_userid_oauth(r, c);
/* this is not for us but for some other handler */
@@ -4090,6 +4099,11 @@
location);
oidc_util_html_send(r, "Stepup Authentication", html_head,
NULL, NULL,
HTTP_UNAUTHORIZED);
+ /*
+ * a hack for Apache 2.4 to prevent it from writing its own 401
HTML document
+ * text by making ap_send_error_response in http_protocol.c
return early...
+ */
+ r->header_only = 1;
}
return AUTHZ_DENIED;
@@ -4256,12 +4270,39 @@
* handle content generating requests
*/
int oidc_content_handler(request_rec *r) {
- if (oidc_enabled(r) == FALSE)
- return DECLINED;
oidc_cfg *c = ap_get_module_config(r->server->module_config,
&auth_openidc_module);
- return oidc_util_request_matches_url(r, oidc_get_redirect_uri(r, c)) ?
- OK : DECLINED;
+ int rc = DECLINED;
+ /* track if the session needs to be updated/saved into the cache */
+ apr_byte_t needs_save = FALSE;
+ oidc_session_t *session = NULL;
+
+ if (oidc_enabled(r)
+ && oidc_util_request_matches_url(r,
oidc_get_redirect_uri(r, c))) {
+
+ if (oidc_util_request_has_parameter(r,
+ OIDC_REDIRECT_URI_REQUEST_INFO)) {
+
+ oidc_session_load(r, &session);
+
+ rc = oidc_handle_existing_session(r, c, session,
&needs_save);
+ if (rc == OK)
+ /* handle request for session info */
+ rc = oidc_handle_info_request(r, c, session,
needs_save);
+
+ /* free resources allocated for the session */
+ oidc_session_free(r, session);
+
+ } else if (oidc_util_request_has_parameter(r,
+ OIDC_REDIRECT_URI_REQUEST_JWKS)) {
+
+ /* handle JWKs request */
+ rc = oidc_handle_jwks(r, c);
+ }
+
+ }
+
+ return rc;
}
extern const command_rec oidc_config_cmds[];
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/mod_auth_openidc-2.4.4.1/src/mod_auth_openidc.h
new/mod_auth_openidc-2.4.5/src/mod_auth_openidc.h
--- old/mod_auth_openidc-2.4.4.1/src/mod_auth_openidc.h 2020-09-03
16:52:30.000000000 +0200
+++ new/mod_auth_openidc-2.4.5/src/mod_auth_openidc.h 2020-11-23
09:53:27.000000000 +0100
@@ -426,6 +426,8 @@
apr_byte_t state_input_headers;
apr_hash_t *redirect_urls_allowed;
+
+ char *ca_bundle_path;
} oidc_cfg;
int oidc_check_user_id(request_rec *r);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/mod_auth_openidc-2.4.4.1/src/oauth.c
new/mod_auth_openidc-2.4.5/src/oauth.c
--- old/mod_auth_openidc-2.4.4.1/src/oauth.c 2020-09-03 16:52:30.000000000
+0200
+++ new/mod_auth_openidc-2.4.5/src/oauth.c 2020-11-23 09:53:27.000000000
+0100
@@ -389,6 +389,13 @@
static apr_byte_t oidc_oauth_cache_access_token(request_rec *r, oidc_cfg *c,
apr_time_t cache_until, const char *access_token, json_t *json)
{
+ /* no cache mode */
+ int token_introspection_interval =
oidc_cfg_token_introspection_interval(r);
+ if (token_introspection_interval == -1) {
+ oidc_debug(r, "not caching introspection result");
+ return TRUE;
+ }
+
oidc_debug(r, "caching introspection result");
json_t *cache_entry = json_object();
@@ -411,6 +418,12 @@
json_t *cache_entry = NULL;
char *s_cache_entry = NULL;
+ /* no cache mode */
+ int token_introspection_interval =
oidc_cfg_token_introspection_interval(r);
+ if (token_introspection_interval == -1) {
+ return FALSE;
+ }
+
/* see if we've got the claims for this access_token cached already */
oidc_cache_get_access_token(r, access_token, &s_cache_entry);
@@ -426,7 +439,6 @@
/* compare the timestamp against the freshness requirement */
json_t *v = json_object_get(cache_entry,
OIDC_OAUTH_CACHE_KEY_TIMESTAMP);
apr_time_t now = apr_time_sec(apr_time_now());
- int token_introspection_interval =
oidc_cfg_token_introspection_interval(r);
if ((token_introspection_interval > 0)
&& (now > json_integer_value(v) +
token_introspection_interval)) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/mod_auth_openidc-2.4.4.1/src/proto.c
new/mod_auth_openidc-2.4.5/src/proto.c
--- old/mod_auth_openidc-2.4.4.1/src/proto.c 2020-09-03 16:52:30.000000000
+0200
+++ new/mod_auth_openidc-2.4.5/src/proto.c 2020-11-23 09:53:27.000000000
+0100
@@ -2337,7 +2337,15 @@
oidc_debug(r, "id_token_sub=%s, user_info_sub=%s", id_token_sub,
user_info_sub);
- if ((id_token_sub != NULL) && (user_info_sub != NULL)) {
+ if (user_info_sub == NULL) {
+ oidc_error(r,
+ "mandatory claim (\"%s\") was not returned from
userinfo endpoint
(https://openid.net/specs/openid-connect-core-1_0.html#UserInfoResponse)",
+ OIDC_CLAIM_SUB);
+ json_decref(claims);
+ return FALSE;
+ }
+
+ if (id_token_sub != NULL) {
if (apr_strnatcmp(id_token_sub, user_info_sub) != 0) {
oidc_error(r,
"\"%s\" claim (\"%s\") returned from
userinfo endpoint does not match the one in the id_token (\"%s\")",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/mod_auth_openidc-2.4.4.1/src/session.c
new/mod_auth_openidc-2.4.5/src/session.c
--- old/mod_auth_openidc-2.4.4.1/src/session.c 2020-09-03 16:52:30.000000000
+0200
+++ new/mod_auth_openidc-2.4.5/src/session.c 2020-11-23 09:53:27.000000000
+0100
@@ -180,7 +180,7 @@
rc = oidc_session_load_cache_by_uuid(r, c, uuid, z);
- if (rc == FALSE) {
+ if (rc == FALSE || z->state == NULL) {
/* delete the session cookie */
oidc_util_set_cookie(r, oidc_cfg_dir_cookie(r), "", 0,
OIDC_COOKIE_EXT_SAME_SITE_NONE);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/mod_auth_openidc-2.4.4.1/src/util.c
new/mod_auth_openidc-2.4.5/src/util.c
--- old/mod_auth_openidc-2.4.4.1/src/util.c 2020-09-03 16:52:30.000000000
+0200
+++ new/mod_auth_openidc-2.4.5/src/util.c 2020-11-23 09:53:27.000000000
+0100
@@ -680,6 +680,8 @@
CURL *curl;
struct curl_slist *h_list = NULL;
int i;
+ oidc_cfg *c = ap_get_module_config(r->server->module_config,
+ &auth_openidc_module);
/* do some logging about the inputs */
oidc_debug(r,
@@ -727,17 +729,22 @@
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST,
(ssl_validate_server != FALSE ? 2L : 0L));
+ if (c->ca_bundle_path != NULL) {
+ curl_easy_setopt(curl, CURLOPT_CAINFO, c->ca_bundle_path);
+ }
#ifdef WIN32
- DWORD buflen;
- char *ptr = NULL;
- char *retval = (char *) malloc(sizeof (TCHAR) * (MAX_PATH + 1));
- retval[0] = '\0';
- buflen = SearchPath(NULL, "curl-ca-bundle.crt", NULL, MAX_PATH+1,
retval, &ptr);
- if (buflen > 0)
- curl_easy_setopt(curl, CURLOPT_CAINFO, retval);
- else
- oidc_warn(r, "no curl-ca-bundle.crt file found in path");
- free(retval);
+ else {
+ DWORD buflen;
+ char *ptr = NULL;
+ char *retval = (char *) malloc(sizeof (TCHAR) * (MAX_PATH + 1));
+ retval[0] = '\0';
+ buflen = SearchPath(NULL, "curl-ca-bundle.crt", NULL,
MAX_PATH+1, retval, &ptr);
+ if (buflen > 0)
+ curl_easy_setopt(curl, CURLOPT_CAINFO, retval);
+ else
+ oidc_warn(r, "no curl-ca-bundle.crt file found in
path");
+ free(retval);
+ }
#endif
/* identify this HTTP client */
@@ -1290,6 +1297,8 @@
return FALSE;
}
+#define OIDC_JSON_MAX_ERROR_STR 4096
+
/*
* parse a JSON object
*/
@@ -1305,8 +1314,18 @@
/* decode the JSON contents of the buffer */
if (*json == NULL) {
/* something went wrong */
- oidc_error(r, "JSON parsing returned an error: %s (%s)",
- json_error.text, str);
+#if JANSSON_VERSION_HEX >= 0x020B00
+ if (json_error_code(&json_error) == json_error_null_character) {
+ oidc_error(r, "JSON parsing returned an error: %s",
+ json_error.text);
+ } else {
+#endif
+ oidc_error(r, "JSON parsing returned an error: %s (%s)",
+ json_error.text,
+ apr_pstrndup(r->pool, str,
OIDC_JSON_MAX_ERROR_STR));
+#if JANSSON_VERSION_HEX >= 0x020B00
+ }
+#endif
return FALSE;
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/mod_auth_openidc-2.4.4.1/test/stub.c
new/mod_auth_openidc-2.4.5/test/stub.c
--- old/mod_auth_openidc-2.4.4.1/test/stub.c 2020-09-03 16:52:30.000000000
+0200
+++ new/mod_auth_openidc-2.4.5/test/stub.c 2020-11-23 09:53:27.000000000
+0100
@@ -37,6 +37,11 @@
return 0;
}
+AP_DECLARE(char *) ap_get_exec_line(apr_pool_t *p, const char *cmd,
+ const char * const *argv) {
+ return NULL;
+}
+
AP_DECLARE(char *) ap_getword(apr_pool_t *atrans, const char **line, char
stop) {
const char *pos = *line;
int len;
@@ -298,8 +303,9 @@
return NULL;
}
+#if MODULE_MAGIC_NUMBER_MAJOR >= 20100714
AP_DECLARE(int) ap_expr_exec(request_rec *r, const
ap_expr_info_t *expr,
const char **err) {
return 0;
}
-
+#endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/mod_auth_openidc-2.4.4.1/test/test.c
new/mod_auth_openidc-2.4.5/test/test.c
--- old/mod_auth_openidc-2.4.4.1/test/test.c 2020-09-03 16:52:30.000000000
+0200
+++ new/mod_auth_openidc-2.4.5/test/test.c 2020-11-23 09:53:27.000000000
+0100
@@ -1486,6 +1486,22 @@
#endif
+
+static char * test_decode_json_object(request_rec *r) {
+ apr_byte_t rc = FALSE;
+ json_t *json = NULL;
+ rc = oidc_util_decode_json_object(r, "nojson", &json);
+ TST_ASSERT("test invalid JSON", rc == FALSE);
+ rc = oidc_util_decode_json_object(r, "{ \"n\": \"\\u0000<?php echo
'Hello' ?>\"}", &json);
+ TST_ASSERT("test JSON with NULL value", rc == FALSE);
+ rc = oidc_util_decode_json_object(r,
"tmjcbnuvyrtygbtbyizkfuabiddgixcvnvupjuwnvxznpspmjaqrlpgmggixxovrpwntkvsvxjtkjjggnevyfyemdrlxtnmzjstmjuyquyyjzzwsfrazgzbdojkcfaeiqawltqsiwwzzgpiikpqoxixhsqtnfbchrcgxbgiaynkscvbvfnpuddrpjbgdtxxlebrswrtukzxqyyfrmwrrtfhcxhjfdoswjzvcchlufkqdaiqakvhyssegikcdkxvqxjrxukllhjduhokudtmhkqhqjheedxnlpbtybpwwogynneilkyffixdchdcjopxtdnhgsinwwktpqxfhmlfwucbtlbojaatocwqxsivdwwxrscsviwtllrqakzyogvseiackzzkkioactssxcglqqgavcpxmfokufechkdjkwbvdcnyboqbinbitixuqxeafdhrzndljsnqdlvxwvzggltmelmdcfouthhhzjuehfoejfyjvrpakmgmhaigkidmpmjtwrgezmwyvkgirhkxwrakbaizldjrcjbwieewdnxmrlgcmnuvhidvkqdokguvphmzywgqgfuwshouxcadbtkoxesyoqikuotloiowjpvztunkguyyrnbmsnwbpghharmvkoqjjoanbejbwdlewiebwkzsuxpxozqzteuozboxdaukiwbqduhdhdlgiewmgeeqwtgyvhexcsdthriprrxvpuqvlcgqlldpnjdtbcuxncoikjxxistytsdlzdmtevmxhoafdcwqqixzxnxnrcoqlkwosdxsktgdejqsopuzaqourcixwktuwjzqagtdjheqgkpeavaoxpechkkdxcrwdtuxvdwpyjgjtsgppnoudyjyslwzxcqtbeqdtppeoelefkumpaamkxjnmdbuzotdzjrwzjspgabxczvxiuogvtmkmvxitdezsrqskorsybwndftfoqrylgsnhetyksfjdctmmarhtxpjukhwxhzjorxgnbpskdzgmskiumcsyquuwknrmkvdxhwgztbbbgiogeynlertjprolkavghiatjaddwlacrlibdnbbhykaqepwujqkmylnnqcfmxqanfvxgmitmsgwotolcwqrxgaftsryrmvlnabnouwqubtocwhkerhvsyzgirkitehbpcvitmjndqwerqopsdhwenihhkybemtmrafhcqbbfrfhemzvklvzxykkczjdokblktoxknolzxgblsjplggysbutvddygjgaqntcavbopwanbdvijawdwuepvzcaoesbkdaaqevbaupyokttlgcplpfijaubzphwutmslimkdxtrgwrfhhvdygznabvhvfhhpuuzwkhaxurnnqrmrhmddkckxzrmzxavvfpyuagjfyjorlfwprlpmwyjbtyzidvabtjckfqesnumqddnrdkunxljarqxcokikkqvrwxfedfumbadugcvzigbdulrcmzihpepztbplwrcvunyrhlwdutawmroajvomwtnbntcdgeqnyjxqlgjcdkaxlezmrldewjvyfjljeskmebuepmbzlhludyzwfnjomfnbgdcseqvqdlxrsuyyakdfsssiobahylumrwzsztpwxvfxyqfhtubamboeykqjltmpdjzhrsdjfebwjhlsyrafmvhefyddxhkchaqxptrqewevrnqftswhhxezdxyowtstejeexrgiujxbxvrvukotxdtlbgdpmorbaglozcmkzyrgnsjauxybuwvozcatacoyrvuxpiqkppoiogpuiykdpxkefxvqwutsbdeerbhztiidxqxsahcbbbrhlqwwnstpsefwtunismgvhbcpholzedkivglyjoperxpfavaxqohcxrcmnfvlzqtflrslurdbxnyoswimovpteleifarnhrivasnxetxnwyumoiwomilmnmpnpfekpwiwpmlqumkfagjbxpswraxctsyvsfspoesfhfdifcexfknbbszjfznpwkftkescltnmmodctjmkwdlrgorauknioeqexwwqdkdhdielfewwenuhsosehfksfaybktumfaprcjgvgenfdffbgduawryrvlbphdjsryjzpspymqhflowqzvesljaasfjvheeqikfocyxuopsgsojcqmyfkwkspnspjewmsxljvezucnpuobfqblakqwbixswbbtuboneixdjhdbzdckkcarsswtutwhkjijwdtsyjirdcibtavigjnehntnpdpdugwryxybsqoboayifiwxyuiqlbjksjpuhwdglymyisjdhkovwexkroooorosiudclbrldesiolbrbeusyrpuuypioziymwdguquitxuiaxeayabeccbrislwinxxyumylbncyshsywkzdyqoaqtwbulnseynghoomiypzefykoexnzhwdcqoctptqabzbuiwxyahaptodtufofabylxtlggldckhuicuqdbueuuoknehkkuypnjwqfhocshmofgbmokiuxvcdonwuwqbjxgdukuubswwvxxqugjxnngnbnvtcophhamvbcuxdfkqubfiftrtfyljjulmansvnhnaoczrmxlqokbovddmpydamzicfzkmwcgecljucaezvhrcssupxkleiximldarmtszakjuficulnaefldyogmnavrfscsptejaexghcrqtnluzmxvxrixxgjtyujoruzzzrfgtymtfsdyrmhvvggyeeykdaglptsuqmqbknimmxnuftjjolcvhpdumqehmyevqlsotrsldgedxmuablgarjfwoqyuakqxbqewdlsfkamxrteaebqwwcsupefoshtwlghkqtqjddikfrwjilzuqfwpcxalauddfotnwlsdwpxynlqjpfcuodeyubenztxsjwxycrdhlluauutfrvgqzacvnfawqibftocxrksltmjvlnyjfeagoxpcepioattazmuuklhjxhpbughkmyjdgrxwqwdafgbnerlhlngeqojhjuvwwmqdradedjuugcqzkfozddctctckaqoruksjsqjpzdbvmocutxpnacbkihboujejmjdhorkpyzubhaxpksjfpzmwauwxkwyjisfsqdjdkvsifgxjygclbdtzultcejefyephhhgbazkqqdvhtkkllyopdcsnbqjcpyvienhqqkwyxfvjrgsymuxxsejqerumcldjuitavdgogcsvjgbwllaijavuaeqxvndvzyrlmmzrhijywctihqizqmjfosrddqqdyilnfzyvwkkqgnnhlajqgdsnhhzpphfjtkeafxlgaarcfdapicfmukyyzvbgoatibulenkkwtyrnzgbmcytazrieabuerwkxoffzuohdhqqhfbxqmqestunudduaywtrmdmbvidyvterebgvxwbhlbsqmghcktujvhfwmhralmodiywvyzvurzghwcpxqtzwmhnderhpognxnynmrfraklflrgppszmuxtwddrkzvqyvvmhlwcnzmspekcwhphabtmzdgvfyrvdzimpxbrkjbntiixkgxhepzqrugnmjyfbkcacbdgxbhraauoagihygwkiikuyximjjdnvslnfaouofwgdacnndhramvxazuzksploibonvneeixkykpwjmrlwkvbesxaklqkoaulskwdfstelqxyyrpvnzkjcmhvxbjvbmrgdoyiwlzubaovirtciwcptmrdggpcgtxptkfwjsnhbxprqjiezncmmypjfbgljzrawwdikhoaqggoizoixpnykwyotofdrduvgfcwxvzjuacxolorrfpunnkzltgbdkztiwjctjedtupmckbjajwcjnkbmywilylfhckksaowsbvhnktfeklaekpflbtsqpyxhrcwmjjgnqtmoumvcswredhtexnaojzjagrvwcieizjfvvmzzxmzwwvqthmrqvtviuyiqffjdpqmeknhwylmteliysiaenkhkiuojxdwscvtacbwfixhrcaxlfeakidxgrmgitrmrzdzhwjyazzikrclajgksENDxxxx",
&json);
+ TST_ASSERT("test invalid long JSON", rc == FALSE);
+ rc = oidc_util_decode_json_object(r, "{}", &json);
+ TST_ASSERT("test valid JSON", rc == TRUE);
+ json_decref(json);
+ return 0;
+}
+
static char * all_tests(apr_pool_t *pool, request_rec *r) {
char *message;
TST_RUN(test_public_key_parse, pool);
@@ -1519,6 +1535,8 @@
TST_RUN(test_current_url, r);
TST_RUN(test_accept, r);
+ TST_RUN(test_decode_json_object, r);
+
#if MODULE_MAGIC_NUMBER_MAJOR >= 20100714
TST_RUN(test_authz_worker, r);
#endif
_______________________________________________
openSUSE Commits mailing list -- [email protected]
To unsubscribe, email [email protected]
List Netiquette: https://en.opensuse.org/openSUSE:Mailing_list_netiquette
List Archives:
https://lists.opensuse.org/archives/list/[email protected]