@@ -97,22 +97,28 @@ const char *oidc_cmd_cache_type_set(cmd_parms *cmd, void *ptr, const char *arg)
9797 return OIDC_CONFIG_DIR_RV(cmd, rv); \
9898 }
9999
100- #define OIDC_CFG_MEMBER_FUNCS_CACHE_INT_EXT (member , parse , def_val ) \
100+ #define OIDC_CFG_MEMBER_FUNCS_CACHE_PARSE (member , type , parse , def_val ) \
101101 const char *oidc_cmd_cache_##member##_set(cmd_parms *cmd, void *ptr, const char *arg) { \
102102 oidc_cfg_t *cfg = \
103103 (oidc_cfg_t *)ap_get_module_config(cmd->server->module_config, &auth_openidc_module); \
104- int v = -1; \
104+ type v = -1; \
105105 const char *rv = parse; \
106106 if (rv == NULL) \
107107 cfg->cache.member = v; \
108108 return OIDC_CONFIG_DIR_RV(cmd, rv); \
109109 } \
110110 \
111- OIDC_CFG_MEMBER_FUNC_CACHE_TYPE_GET(member, int, def_val)
111+ OIDC_CFG_MEMBER_FUNC_CACHE_TYPE_GET(member, type, def_val)
112+
113+ #define OIDC_CFG_MEMBER_FUNCS_CACHE_INT_EXT (member , parse , def_val ) \
114+ OIDC_CFG_MEMBER_FUNCS_CACHE_PARSE(member, int, parse, def_val)
112115
113116#define OIDC_CFG_MEMBER_FUNCS_CACHE_INT (member , min , max , def_val ) \
114117 OIDC_CFG_MEMBER_FUNCS_CACHE_INT_EXT(member, oidc_cfg_parse_int_min_max(cmd->pool, arg, &v, min, max), def_val)
115118
119+ #define OIDC_CFG_MEMBER_FUNCS_CACHE_TIMEOUT (member , min , max , def_val ) \
120+ OIDC_CFG_MEMBER_FUNCS_CACHE_PARSE(member, apr_interval_time_t, oidc_cfg_parse_timeout_min_max(cmd->pool, arg, &v, min, max), def_val)
121+
116122#define OIDC_CFG_MEMBER_FUNCS_CACHE_BOOL (member , def_val ) \
117123 OIDC_CFG_MEMBER_FUNCS_CACHE_INT_EXT(member, oidc_cfg_parse_boolean(cmd->pool, arg, &v), def_val)
118124
@@ -235,19 +241,25 @@ OIDC_CFG_MEMBER_FUNCS_CACHE_INT(memcache_smax, OIDC_CACHE_MEMCACHE_CONNECTIONS_S
235241OIDC_CFG_MEMBER_FUNCS_CACHE_INT (memcache_hmax , OIDC_CACHE_MEMCACHE_CONNECTIONS_HMAX_MIN ,
236242 OIDC_CACHE_MEMCACHE_CONNECTIONS_HMAX_MAX , OIDC_DEFAULT_CACHE_MEMCACHE_CONNECTIONS_HMAX )
237243
238- #define OIDC_CACHE_MEMCACHE_CONNECTIONS_TTL_MIN 0
239- #define OIDC_CACHE_MEMCACHE_CONNECTIONS_TTL_MAX 3600 * 24 * 7
240- #define OIDC_DEFAULT_CACHE_MEMCACHE_CONNECTIONS_TTL 0
244+ #define OIDC_CACHE_MEMCACHE_CONNECTIONS_TTL_MIN (apr_interval_time_t)0
245+ /*
246+ * Due to a design error in the apr-util 1.x apr_memcache_server_create prototype
247+ * (it uses an apr_uint32_t instead of an apr_interval_time_t) we need to limit
248+ * the maximum value to 4292 seconds which is the maximum value in microseconds
249+ * that can be represented by an apr_uint32_t.
250+ */
251+ #define OIDC_CACHE_MEMCACHE_CONNECTIONS_TTL_MAX apr_time_from_sec(4294)
252+ #define OIDC_DEFAULT_CACHE_MEMCACHE_CONNECTIONS_TTL apr_time_from_sec(60)
241253
242- OIDC_CFG_MEMBER_FUNCS_CACHE_INT (memcache_ttl , OIDC_CACHE_MEMCACHE_CONNECTIONS_TTL_MIN ,
254+ OIDC_CFG_MEMBER_FUNCS_CACHE_TIMEOUT (memcache_ttl , OIDC_CACHE_MEMCACHE_CONNECTIONS_TTL_MIN ,
243255 OIDC_CACHE_MEMCACHE_CONNECTIONS_TTL_MAX , OIDC_DEFAULT_CACHE_MEMCACHE_CONNECTIONS_TTL )
244256
245257static void oidc_cfg_cache_memcache_create_server_config (oidc_cfg_t * c ) {
246258 c -> cache .memcache_servers = NULL ;
247259 c -> cache .memcache_min = OIDC_CONFIG_POS_INT_UNSET ;
248260 c -> cache .memcache_smax = OIDC_CONFIG_POS_INT_UNSET ;
249261 c -> cache .memcache_hmax = OIDC_CONFIG_POS_INT_UNSET ;
250- c -> cache .memcache_ttl = OIDC_CONFIG_POS_INT_UNSET ;
262+ c -> cache .memcache_ttl = OIDC_CONFIG_POS_TIMEOUT_UNSET ;
251263}
252264
253265static void oidc_cfg_cache_memcache_merge_server_config (oidc_cfg_t * c , oidc_cfg_t * base , oidc_cfg_t * add ) {
@@ -260,7 +272,7 @@ static void oidc_cfg_cache_memcache_merge_server_config(oidc_cfg_t *c, oidc_cfg_
260272 c -> cache .memcache_hmax = add -> cache .memcache_hmax != OIDC_CONFIG_POS_INT_UNSET ? add -> cache .memcache_hmax
261273 : base -> cache .memcache_hmax ;
262274 c -> cache .memcache_ttl =
263- add -> cache .memcache_ttl != OIDC_CONFIG_POS_INT_UNSET ? add -> cache .memcache_ttl : base -> cache .memcache_ttl ;
275+ add -> cache .memcache_ttl != OIDC_CONFIG_POS_TIMEOUT_UNSET ? add -> cache .memcache_ttl : base -> cache .memcache_ttl ;
264276}
265277
266278#endif
0 commit comments