oidc_cache_mutex_create:
   63|      4|oidc_cache_mutex_t *oidc_cache_mutex_create(apr_pool_t *pool, apr_byte_t global) {
   64|      4|	oidc_cache_mutex_t *ctx = apr_pcalloc(pool, sizeof(oidc_cache_mutex_t));
  ------------------
  |  |  465|      4|#define apr_pcalloc(p, size) memset(apr_palloc(p, size), 0, size)
  ------------------
   65|      4|	ctx->gmutex = NULL;
   66|      4|	ctx->tmutex = NULL;
   67|      4|	ctx->mutex_filename = NULL;
   68|      4|	ctx->is_parent = TRUE;
  ------------------
  |  |   55|      4|#define TRUE (!FALSE)
  |  |  ------------------
  |  |  |  |   51|      4|#define FALSE 0
  |  |  ------------------
  ------------------
   69|      4|	ctx->is_global = global;
   70|      4|	return ctx;
   71|      4|}
oidc_cache_mutex_post_config:
  145|      4|apr_byte_t oidc_cache_mutex_post_config(apr_pool_t *pool, server_rec *s, oidc_cache_mutex_t *m, const char *type) {
  146|      4|	apr_byte_t rc = TRUE;
  ------------------
  |  |   55|      4|#define TRUE (!FALSE)
  |  |  ------------------
  |  |  |  |   51|      4|#define FALSE 0
  |  |  ------------------
  ------------------
  147|      4|	apr_status_t rv = APR_SUCCESS;
  ------------------
  |  |  225|      4|#define APR_SUCCESS 0
  ------------------
  148|       |
  149|      4|	if (m->is_global) {
  ------------------
  |  Branch (149:6): [True: 4, False: 0]
  ------------------
  150|      4|		rc = oidc_cache_mutex_global_create(pool, s, m, type);
  151|      4|		goto end;
  152|      4|	}
  153|       |
  154|       |	// NB: see the note above at apr_global_mutex_create on the pool/pre-cleanup ordering requirement
  155|      0|	rv = apr_thread_mutex_create(&m->tmutex, APR_THREAD_MUTEX_DEFAULT, pool);
  ------------------
  |  |   43|      0|#define APR_THREAD_MUTEX_DEFAULT  0x0   /**< platform-optimal lock behavior */
  ------------------
  156|      0|	if (rv != APR_SUCCESS) {
  ------------------
  |  |  225|      0|#define APR_SUCCESS 0
  ------------------
  |  Branch (156:6): [True: 0, False: 0]
  ------------------
  157|      0|		oidc_serror(s, "apr_thread_mutex_create failed: %s (%d)", oidc_cache_status2str(pool, rv), rv);
  ------------------
  |  |  177|      0|#define oidc_serror(s, fmt, ...) oidc_slog(s, APLOG_ERR, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |  167|      0|	ap_log_error(APLOG_MARK, level, 0, s, "%s: %s", __FUNCTION__,                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  363|      0|#define ap_log_error(...) ap_log_error__(__VA_ARGS__)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  366|      0|    do { const server_rec *sr__ = s; if (APLOG_MODULE_IS_LEVEL(sr__, mi, level)) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  183|      0|          ( (((level)&APLOG_LEVELMASK) <= APLOG_NOTICE) ||       \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|      0|#define APLOG_LEVELMASK 15     /* mask off the level value */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                         ( (((level)&APLOG_LEVELMASK) <= APLOG_NOTICE) ||       \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   48|      0|#define APLOG_NOTICE    LOG_NOTICE      /* normal but significant condition */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (183:13): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  184|      0|            (s == NULL) ||                                       \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (184:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  185|      0|            (ap_get_server_module_loglevel(s, module_index)      \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  626|      0|    (ap_get_module_loglevel(&(s)->log,i))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  621|      0|    (((i) < 0 || (l)->module_levels == NULL || (l)->module_levels[i] < 0) ?  \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:8): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:18): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:48): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:67): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  622|      0|     (l)->level :                                                         \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  623|      0|     (l)->module_levels[i])
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (623:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (185:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  186|      0|             >= ((level)&APLOG_LEVELMASK) ) )
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|      0|#define APLOG_LEVELMASK 15     /* mask off the level value */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  367|      0|             ap_log_error_(file, line, mi, level, status, sr__, __VA_ARGS__);    \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (367:40): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  368|      0|    } while(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (368:13): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  168|      0|		     apr_psprintf(s->process->pconf, fmt, ##__VA_ARGS__))
  |  |  ------------------
  ------------------
  158|      0|		rc = FALSE;
  ------------------
  |  |   51|      0|#define FALSE 0
  ------------------
  159|      0|		goto end;
  160|      0|	}
  161|       |
  162|      4|end:
  163|       |
  164|      4|	return rc;
  165|      0|}
common.c:oidc_cache_mutex_global_create:
   88|      4|						 const char *type) {
   89|       |
   90|      4|	apr_status_t rv = APR_SUCCESS;
  ------------------
  |  |  225|      4|#define APR_SUCCESS 0
  ------------------
   91|      4|	const char *dir;
   92|       |
   93|       |	/* construct the mutex filename */
   94|      4|	rv = apr_temp_dir_get(&dir, pool);
   95|      4|	if (rv != APR_SUCCESS) {
  ------------------
  |  |  225|      4|#define APR_SUCCESS 0
  ------------------
  |  Branch (95:6): [True: 0, False: 4]
  ------------------
   96|      0|		oidc_serror(s, "apr_temp_dir_get failed: could not find a temp dir: %s",
  ------------------
  |  |  177|      0|#define oidc_serror(s, fmt, ...) oidc_slog(s, APLOG_ERR, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |  167|      0|	ap_log_error(APLOG_MARK, level, 0, s, "%s: %s", __FUNCTION__,                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  363|      0|#define ap_log_error(...) ap_log_error__(__VA_ARGS__)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  366|      0|    do { const server_rec *sr__ = s; if (APLOG_MODULE_IS_LEVEL(sr__, mi, level)) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  183|      0|          ( (((level)&APLOG_LEVELMASK) <= APLOG_NOTICE) ||       \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|      0|#define APLOG_LEVELMASK 15     /* mask off the level value */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                         ( (((level)&APLOG_LEVELMASK) <= APLOG_NOTICE) ||       \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   48|      0|#define APLOG_NOTICE    LOG_NOTICE      /* normal but significant condition */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (183:13): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  184|      0|            (s == NULL) ||                                       \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (184:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  185|      0|            (ap_get_server_module_loglevel(s, module_index)      \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  626|      0|    (ap_get_module_loglevel(&(s)->log,i))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  621|      0|    (((i) < 0 || (l)->module_levels == NULL || (l)->module_levels[i] < 0) ?  \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:8): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:18): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:48): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:67): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  622|      0|     (l)->level :                                                         \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  623|      0|     (l)->module_levels[i])
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (623:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (185:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  186|      0|             >= ((level)&APLOG_LEVELMASK) ) )
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|      0|#define APLOG_LEVELMASK 15     /* mask off the level value */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  367|      0|             ap_log_error_(file, line, mi, level, status, sr__, __VA_ARGS__);    \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (367:40): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  368|      0|    } while(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (368:13): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  168|      0|		     apr_psprintf(s->process->pconf, fmt, ##__VA_ARGS__))
  |  |  ------------------
  ------------------
   97|      0|			    oidc_cache_status2str(pool, rv));
   98|      0|		return FALSE;
  ------------------
  |  |   51|      0|#define FALSE 0
  ------------------
   99|      0|	}
  100|       |
  101|      4|	m->mutex_filename =
  102|      4|	    apr_psprintf(pool, "%s/mod_auth_openidc_%s_mutex.%ld.%pp", dir, type, (long int)getpid(), s);
  103|       |
  104|       |	/* set the lock type */
  105|      4|	apr_lockmech_e mech =
  106|       |#ifdef OIDC_LOCK
  107|       |	    OIDC_LOCK
  108|       |#elif APR_HAS_POSIXSEM_SERIALIZE
  109|       |	    APR_LOCK_POSIXSEM
  110|       |#else
  111|       |	    APR_LOCK_DEFAULT
  112|       |#endif
  113|      4|	    ;
  114|       |
  115|       |	/*
  116|       |	 * The server pre-cleanup must destroy this mutex before APR's regular cleanup tears down its
  117|       |	 * semaphore. Changing that order can crash graceful restarts.
  118|       |	 */
  119|      4|	rv = apr_global_mutex_create(&m->gmutex, (const char *)m->mutex_filename, mech, pool);
  120|       |
  121|      4|	if (rv != APR_SUCCESS) {
  ------------------
  |  |  225|      4|#define APR_SUCCESS 0
  ------------------
  |  Branch (121:6): [True: 0, False: 4]
  ------------------
  122|      0|		oidc_serror(s, "apr_global_mutex_create failed to create mutex (%d) on file %s: %s (%d)", mech,
  ------------------
  |  |  177|      0|#define oidc_serror(s, fmt, ...) oidc_slog(s, APLOG_ERR, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |  167|      0|	ap_log_error(APLOG_MARK, level, 0, s, "%s: %s", __FUNCTION__,                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  363|      0|#define ap_log_error(...) ap_log_error__(__VA_ARGS__)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  366|      0|    do { const server_rec *sr__ = s; if (APLOG_MODULE_IS_LEVEL(sr__, mi, level)) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  183|      0|          ( (((level)&APLOG_LEVELMASK) <= APLOG_NOTICE) ||       \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|      0|#define APLOG_LEVELMASK 15     /* mask off the level value */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                         ( (((level)&APLOG_LEVELMASK) <= APLOG_NOTICE) ||       \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   48|      0|#define APLOG_NOTICE    LOG_NOTICE      /* normal but significant condition */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (183:13): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  184|      0|            (s == NULL) ||                                       \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (184:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  185|      0|            (ap_get_server_module_loglevel(s, module_index)      \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  626|      0|    (ap_get_module_loglevel(&(s)->log,i))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  621|      0|    (((i) < 0 || (l)->module_levels == NULL || (l)->module_levels[i] < 0) ?  \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:8): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:18): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:48): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:67): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  622|      0|     (l)->level :                                                         \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  623|      0|     (l)->module_levels[i])
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (623:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (185:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  186|      0|             >= ((level)&APLOG_LEVELMASK) ) )
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|      0|#define APLOG_LEVELMASK 15     /* mask off the level value */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  367|      0|             ap_log_error_(file, line, mi, level, status, sr__, __VA_ARGS__);    \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (367:40): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  368|      0|    } while(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (368:13): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  168|      0|		     apr_psprintf(s->process->pconf, fmt, ##__VA_ARGS__))
  |  |  ------------------
  ------------------
  123|      0|			    m->mutex_filename, oidc_cache_status2str(pool, rv), rv);
  124|      0|		return FALSE;
  ------------------
  |  |   51|      0|#define FALSE 0
  ------------------
  125|      0|	}
  126|       |
  127|       |	/* need this on Linux */
  128|      4|#ifdef AP_NEED_SET_MUTEX_PERMS
  129|      4|	rv = ap_unixd_set_global_mutex_perms(m->gmutex);
  130|      4|	if (rv != APR_SUCCESS) {
  ------------------
  |  |  225|      4|#define APR_SUCCESS 0
  ------------------
  |  Branch (130:6): [True: 0, False: 4]
  ------------------
  131|      0|		oidc_serror(s, "unixd_set_global_mutex_perms failed; could not set permissions: %s (%d)",
  ------------------
  |  |  177|      0|#define oidc_serror(s, fmt, ...) oidc_slog(s, APLOG_ERR, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |  167|      0|	ap_log_error(APLOG_MARK, level, 0, s, "%s: %s", __FUNCTION__,                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  363|      0|#define ap_log_error(...) ap_log_error__(__VA_ARGS__)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  366|      0|    do { const server_rec *sr__ = s; if (APLOG_MODULE_IS_LEVEL(sr__, mi, level)) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  183|      0|          ( (((level)&APLOG_LEVELMASK) <= APLOG_NOTICE) ||       \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|      0|#define APLOG_LEVELMASK 15     /* mask off the level value */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                         ( (((level)&APLOG_LEVELMASK) <= APLOG_NOTICE) ||       \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   48|      0|#define APLOG_NOTICE    LOG_NOTICE      /* normal but significant condition */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (183:13): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  184|      0|            (s == NULL) ||                                       \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (184:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  185|      0|            (ap_get_server_module_loglevel(s, module_index)      \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  626|      0|    (ap_get_module_loglevel(&(s)->log,i))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  621|      0|    (((i) < 0 || (l)->module_levels == NULL || (l)->module_levels[i] < 0) ?  \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:8): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:18): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:48): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:67): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  622|      0|     (l)->level :                                                         \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  623|      0|     (l)->module_levels[i])
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (623:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (185:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  186|      0|             >= ((level)&APLOG_LEVELMASK) ) )
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|      0|#define APLOG_LEVELMASK 15     /* mask off the level value */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  367|      0|             ap_log_error_(file, line, mi, level, status, sr__, __VA_ARGS__);    \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (367:40): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  368|      0|    } while(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (368:13): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  168|      0|		     apr_psprintf(s->process->pconf, fmt, ##__VA_ARGS__))
  |  |  ------------------
  ------------------
  132|      0|			    oidc_cache_status2str(pool, rv), rv);
  133|      0|		return FALSE;
  ------------------
  |  |   51|      0|#define FALSE 0
  ------------------
  134|      0|	}
  135|      4|#endif
  136|       |
  137|      4|	oidc_slog(s, APLOG_TRACE1, "create: %pp (m=%pp,s=%pp, p=%d)", m, m->gmutex ? m->gmutex : 0, s, m->is_parent);
  ------------------
  |  |  167|      4|	ap_log_error(APLOG_MARK, level, 0, s, "%s: %s", __FUNCTION__,                                                  \
  |  |  ------------------
  |  |  |  |  363|      4|#define ap_log_error(...) ap_log_error__(__VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      4|    do { const server_rec *sr__ = s; if (APLOG_MODULE_IS_LEVEL(sr__, mi, level)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  183|      4|          ( (((level)&APLOG_LEVELMASK) <= APLOG_NOTICE) ||       \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      4|#define APLOG_LEVELMASK 15     /* mask off the level value */
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                         ( (((level)&APLOG_LEVELMASK) <= APLOG_NOTICE) ||       \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   48|      4|#define APLOG_NOTICE    LOG_NOTICE      /* normal but significant condition */
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (183:13): [Folded, False: 4]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  184|      4|            (s == NULL) ||                                       \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (184:13): [True: 0, False: 4]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  185|      4|            (ap_get_server_module_loglevel(s, module_index)      \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  626|      4|    (ap_get_module_loglevel(&(s)->log,i))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  621|      8|    (((i) < 0 || (l)->module_levels == NULL || (l)->module_levels[i] < 0) ?  \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:7): [True: 0, False: 4]
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:8): [True: 4, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:18): [True: 4, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:48): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:67): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  622|      4|     (l)->level :                                                         \
  |  |  |  |  |  |  |  |  |  |  |  |  623|      4|     (l)->module_levels[i])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (623:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (185:13): [True: 0, False: 4]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  186|      4|             >= ((level)&APLOG_LEVELMASK) ) )
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      4|#define APLOG_LEVELMASK 15     /* mask off the level value */
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  367|      4|             ap_log_error_(file, line, mi, level, status, sr__, __VA_ARGS__);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (367:40): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (367:65): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  368|      4|    } while(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (368:13): [Folded, False: 4]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  168|      4|		     apr_psprintf(s->process->pconf, fmt, ##__VA_ARGS__))
  ------------------
  138|       |
  139|      4|	return TRUE;
  ------------------
  |  |   55|      4|#define TRUE (!FALSE)
  |  |  ------------------
  |  |  |  |   51|      4|#define FALSE 0
  |  |  ------------------
  ------------------
  140|      4|}

oidc_cache_shm_segment_size:
  120|      2|apr_byte_t oidc_cache_shm_segment_size(int size_max, int entry_size_max, apr_uint32_t nbuckets, apr_size_t *result) {
  121|       |	/* Calculate in 64 bits first: apr_size_t is only 32 bits on supported 32-bit APR builds. */
  122|      2|	const apr_uint64_t header_size = ((apr_uint64_t)sizeof(oidc_cache_shm_header_t) + 63) & ~63ULL;
  123|      2|	const apr_uint64_t bucket_size = ((apr_uint64_t)nbuckets * sizeof(apr_uint32_t) + 63) & ~63ULL;
  124|      2|	const apr_uint64_t slot_size = ((apr_uint64_t)entry_size_max + 63) & ~63ULL;
  125|      2|	const apr_uint64_t slots_size = slot_size * (apr_uint64_t)size_max;
  126|      2|	const apr_uint64_t total = 64 + header_size + bucket_size + slots_size;
  127|       |
  128|      2|	if ((result == NULL) || (size_max <= 0) || (entry_size_max <= 0) || (nbuckets == 0) ||
  ------------------
  |  Branch (128:6): [True: 0, False: 2]
  |  Branch (128:26): [True: 0, False: 2]
  |  Branch (128:45): [True: 0, False: 2]
  |  Branch (128:70): [True: 0, False: 2]
  ------------------
  129|      2|	    (slots_size / slot_size != (apr_uint64_t)size_max) || (total < slots_size) ||
  ------------------
  |  Branch (129:6): [True: 0, False: 2]
  |  Branch (129:60): [True: 0, False: 2]
  ------------------
  130|      2|	    (total > (apr_uint64_t)SIZE_MAX) || (total > OIDC_CACHE_SHM_SEGMENT_SIZE_MAX))
  ------------------
  |  |   59|      2|#define OIDC_CACHE_SHM_SEGMENT_SIZE_MAX ((apr_uint64_t)16 * 1024 * 1024 * 1024)
  ------------------
  |  Branch (130:6): [True: 0, False: 2]
  |  Branch (130:42): [True: 0, False: 2]
  ------------------
  131|      0|		return FALSE;
  ------------------
  |  |   51|      0|#define FALSE 0
  ------------------
  132|       |
  133|      2|	*result = (apr_size_t)total;
  134|      2|	return TRUE;
  ------------------
  |  |   55|      2|#define TRUE (!FALSE)
  |  |  ------------------
  |  |  |  |   51|      2|#define FALSE 0
  |  |  ------------------
  ------------------
  135|      2|}
shm.c:oidc_cache_shm_base:
  116|      2|static oidc_cache_shm_header_t *oidc_cache_shm_base(const oidc_cache_cfg_shm_t *context) {
  117|      2|	return (oidc_cache_shm_header_t *)APR_ALIGN((uintptr_t)apr_shm_baseaddr_get(context->shm), 64);
  ------------------
  |  |  137|      2|    (((size) + ((boundary) - 1)) & ~((boundary) - 1))
  ------------------
  118|      2|}
shm.c:oidc_cache_shm_buckets:
  101|  1.00k|static apr_uint32_t *oidc_cache_shm_buckets(oidc_cache_shm_header_t *hdr) {
  102|  1.00k|	return (apr_uint32_t *)((uint8_t *)hdr + APR_ALIGN(sizeof(oidc_cache_shm_header_t), 64));
  ------------------
  |  |  137|  1.00k|    (((size) + ((boundary) - 1)) & ~((boundary) - 1))
  ------------------
  103|  1.00k|}
shm.c:oidc_cache_shm_slot:
  105|  1.00k|static oidc_cache_shm_entry_t *oidc_cache_shm_slot(oidc_cache_shm_header_t *hdr, apr_uint32_t idx) {
  106|  1.00k|	uint8_t *slots =
  107|  1.00k|	    (uint8_t *)oidc_cache_shm_buckets(hdr) + APR_ALIGN((apr_size_t)hdr->nbuckets * sizeof(apr_uint32_t), 64);
  ------------------
  |  |  137|  1.00k|    (((size) + ((boundary) - 1)) & ~((boundary) - 1))
  ------------------
  108|  1.00k|	return (oidc_cache_shm_entry_t *)(slots + (apr_size_t)(idx - 1) * hdr->entry_size);
  109|  1.00k|}
shm.c:oidc_cache_shm_post_config:
  294|      2|static int oidc_cache_shm_post_config(apr_pool_t *pool, server_rec *s) {
  295|      2|	oidc_cfg_t *cfg = (oidc_cfg_t *)ap_get_module_config(s->module_config, &auth_openidc_module);
  ------------------
  |  |  551|      2|    (((void **)(v))[(m)->module_index])
  ------------------
  296|      2|	const int size_max = oidc_cfg_cache_shm_size_max_get(cfg);
  297|      2|	const int entry_size_max = oidc_cfg_cache_shm_entry_size_max_get(cfg);
  298|       |
  299|      2|	if (cfg->cache.cfg != NULL)
  ------------------
  |  Branch (299:6): [True: 0, False: 2]
  ------------------
  300|      0|		return OK;
  ------------------
  |  |  456|      0|#define OK 0                    /**< Module has handled this stage. */
  ------------------
  301|      2|	oidc_cache_cfg_shm_t *context = oidc_cache_shm_cfg_create(pool);
  302|      2|	cfg->cache.cfg = context;
  303|       |
  304|       |	/* a power-of-two number of hash buckets >= the number of slots */
  305|      2|	apr_uint32_t nbuckets = 1;
  306|     20|	while ((nbuckets < (apr_uint32_t)size_max) && (nbuckets <= UINT32_MAX / 2))
  ------------------
  |  Branch (306:9): [True: 18, False: 2]
  |  Branch (306:48): [True: 18, False: 0]
  ------------------
  307|     18|		nbuckets <<= 1;
  308|      2|	if (nbuckets < (apr_uint32_t)size_max) {
  ------------------
  |  Branch (308:6): [True: 0, False: 2]
  ------------------
  309|      0|		oidc_serror(s, "could not size the shared memory hash bucket array");
  ------------------
  |  |  177|      0|#define oidc_serror(s, fmt, ...) oidc_slog(s, APLOG_ERR, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |  167|      0|	ap_log_error(APLOG_MARK, level, 0, s, "%s: %s", __FUNCTION__,                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  363|      0|#define ap_log_error(...) ap_log_error__(__VA_ARGS__)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  366|      0|    do { const server_rec *sr__ = s; if (APLOG_MODULE_IS_LEVEL(sr__, mi, level)) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  183|      0|          ( (((level)&APLOG_LEVELMASK) <= APLOG_NOTICE) ||       \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|      0|#define APLOG_LEVELMASK 15     /* mask off the level value */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                         ( (((level)&APLOG_LEVELMASK) <= APLOG_NOTICE) ||       \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   48|      0|#define APLOG_NOTICE    LOG_NOTICE      /* normal but significant condition */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (183:13): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  184|      0|            (s == NULL) ||                                       \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (184:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  185|      0|            (ap_get_server_module_loglevel(s, module_index)      \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  626|      0|    (ap_get_module_loglevel(&(s)->log,i))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  621|      0|    (((i) < 0 || (l)->module_levels == NULL || (l)->module_levels[i] < 0) ?  \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:8): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:18): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:48): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:67): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  622|      0|     (l)->level :                                                         \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  623|      0|     (l)->module_levels[i])
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (623:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (185:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  186|      0|             >= ((level)&APLOG_LEVELMASK) ) )
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|      0|#define APLOG_LEVELMASK 15     /* mask off the level value */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  367|      0|             ap_log_error_(file, line, mi, level, status, sr__, __VA_ARGS__);    \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (367:40): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  368|      0|    } while(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (368:13): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  168|      0|		     apr_psprintf(s->process->pconf, fmt, ##__VA_ARGS__))
  |  |  ------------------
  ------------------
  310|      0|		return HTTP_INTERNAL_SERVER_ERROR;
  ------------------
  |  |  535|      0|#define HTTP_INTERNAL_SERVER_ERROR           500
  ------------------
  311|      0|	}
  312|       |
  313|      2|	apr_size_t segment_size = 0;
  314|      2|	if (oidc_cache_shm_segment_size(size_max, entry_size_max, nbuckets, &segment_size) == FALSE) {
  ------------------
  |  |   51|      2|#define FALSE 0
  ------------------
  |  Branch (314:6): [True: 0, False: 2]
  ------------------
  315|      0|		oidc_serror(s,
  ------------------
  |  |  177|      0|#define oidc_serror(s, fmt, ...) oidc_slog(s, APLOG_ERR, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |  167|      0|	ap_log_error(APLOG_MARK, level, 0, s, "%s: %s", __FUNCTION__,                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  363|      0|#define ap_log_error(...) ap_log_error__(__VA_ARGS__)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  366|      0|    do { const server_rec *sr__ = s; if (APLOG_MODULE_IS_LEVEL(sr__, mi, level)) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  183|      0|          ( (((level)&APLOG_LEVELMASK) <= APLOG_NOTICE) ||       \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|      0|#define APLOG_LEVELMASK 15     /* mask off the level value */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                         ( (((level)&APLOG_LEVELMASK) <= APLOG_NOTICE) ||       \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   48|      0|#define APLOG_NOTICE    LOG_NOTICE      /* normal but significant condition */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (183:13): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  184|      0|            (s == NULL) ||                                       \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (184:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  185|      0|            (ap_get_server_module_loglevel(s, module_index)      \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  626|      0|    (ap_get_module_loglevel(&(s)->log,i))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  621|      0|    (((i) < 0 || (l)->module_levels == NULL || (l)->module_levels[i] < 0) ?  \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:8): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:18): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:48): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:67): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  622|      0|     (l)->level :                                                         \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  623|      0|     (l)->module_levels[i])
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (623:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (185:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  186|      0|             >= ((level)&APLOG_LEVELMASK) ) )
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|      0|#define APLOG_LEVELMASK 15     /* mask off the level value */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  367|      0|             ap_log_error_(file, line, mi, level, status, sr__, __VA_ARGS__);    \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (367:40): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  368|      0|    } while(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (368:13): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  168|      0|		     apr_psprintf(s->process->pconf, fmt, ##__VA_ARGS__))
  |  |  ------------------
  ------------------
  316|      0|			    "requested shared memory cache is too large; reduce " OIDCCacheShmMax
  317|      0|			    " or " OIDCCacheShmEntrySizeMax " (maximum segment size is %" APR_UINT64_T_FMT " bytes)",
  318|      0|			    OIDC_CACHE_SHM_SEGMENT_SIZE_MAX);
  319|      0|		return HTTP_INTERNAL_SERVER_ERROR;
  ------------------
  |  |  535|      0|#define HTTP_INTERNAL_SERVER_ERROR           500
  ------------------
  320|      0|	}
  321|       |
  322|       |	/* create the shared memory segment */
  323|      2|	apr_status_t rv = apr_shm_create(&context->shm, segment_size, NULL, pool);
  324|      2|	if (rv != APR_SUCCESS) {
  ------------------
  |  |  225|      2|#define APR_SUCCESS 0
  ------------------
  |  Branch (324:6): [True: 0, False: 2]
  ------------------
  325|      0|		oidc_serror(s, "apr_shm_create failed to create shared memory segment");
  ------------------
  |  |  177|      0|#define oidc_serror(s, fmt, ...) oidc_slog(s, APLOG_ERR, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |  167|      0|	ap_log_error(APLOG_MARK, level, 0, s, "%s: %s", __FUNCTION__,                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  363|      0|#define ap_log_error(...) ap_log_error__(__VA_ARGS__)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  366|      0|    do { const server_rec *sr__ = s; if (APLOG_MODULE_IS_LEVEL(sr__, mi, level)) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  183|      0|          ( (((level)&APLOG_LEVELMASK) <= APLOG_NOTICE) ||       \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|      0|#define APLOG_LEVELMASK 15     /* mask off the level value */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                         ( (((level)&APLOG_LEVELMASK) <= APLOG_NOTICE) ||       \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   48|      0|#define APLOG_NOTICE    LOG_NOTICE      /* normal but significant condition */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (183:13): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  184|      0|            (s == NULL) ||                                       \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (184:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  185|      0|            (ap_get_server_module_loglevel(s, module_index)      \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  626|      0|    (ap_get_module_loglevel(&(s)->log,i))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  621|      0|    (((i) < 0 || (l)->module_levels == NULL || (l)->module_levels[i] < 0) ?  \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:8): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:18): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:48): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:67): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  622|      0|     (l)->level :                                                         \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  623|      0|     (l)->module_levels[i])
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (623:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (185:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  186|      0|             >= ((level)&APLOG_LEVELMASK) ) )
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|      0|#define APLOG_LEVELMASK 15     /* mask off the level value */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  367|      0|             ap_log_error_(file, line, mi, level, status, sr__, __VA_ARGS__);    \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (367:40): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  368|      0|    } while(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (368:13): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  168|      0|		     apr_psprintf(s->process->pconf, fmt, ##__VA_ARGS__))
  |  |  ------------------
  ------------------
  326|      0|		return HTTP_INTERNAL_SERVER_ERROR;
  ------------------
  |  |  535|      0|#define HTTP_INTERNAL_SERVER_ERROR           500
  ------------------
  327|      0|	}
  328|       |
  329|       |	/* initialize the header, the (empty) hash buckets and the free list holding all slots */
  330|      2|	oidc_cache_shm_header_t *hdr = oidc_cache_shm_base(context);
  331|      2|	hdr->nslots = (apr_uint32_t)size_max;
  332|      2|	hdr->nbuckets = nbuckets;
  333|       |	/* round the slot stride up to the entry's 64-byte alignment (see oidc_cache_shm_segment_size) */
  334|      2|	hdr->entry_size = (apr_uint32_t)APR_ALIGN((apr_size_t)entry_size_max, 64);
  ------------------
  |  |  137|      2|    (((size) + ((boundary) - 1)) & ~((boundary) - 1))
  ------------------
  335|      2|	if (apr_generate_random_bytes((unsigned char *)hdr->hash_key, sizeof(hdr->hash_key)) != APR_SUCCESS) {
  ------------------
  |  |  225|      2|#define APR_SUCCESS 0
  ------------------
  |  Branch (335:6): [True: 0, False: 2]
  ------------------
  336|      0|		oidc_serror(s, "apr_generate_random_bytes failed to seed the shared memory cache hash");
  ------------------
  |  |  177|      0|#define oidc_serror(s, fmt, ...) oidc_slog(s, APLOG_ERR, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |  167|      0|	ap_log_error(APLOG_MARK, level, 0, s, "%s: %s", __FUNCTION__,                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  363|      0|#define ap_log_error(...) ap_log_error__(__VA_ARGS__)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  366|      0|    do { const server_rec *sr__ = s; if (APLOG_MODULE_IS_LEVEL(sr__, mi, level)) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  183|      0|          ( (((level)&APLOG_LEVELMASK) <= APLOG_NOTICE) ||       \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|      0|#define APLOG_LEVELMASK 15     /* mask off the level value */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                         ( (((level)&APLOG_LEVELMASK) <= APLOG_NOTICE) ||       \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   48|      0|#define APLOG_NOTICE    LOG_NOTICE      /* normal but significant condition */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (183:13): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  184|      0|            (s == NULL) ||                                       \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (184:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  185|      0|            (ap_get_server_module_loglevel(s, module_index)      \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  626|      0|    (ap_get_module_loglevel(&(s)->log,i))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  621|      0|    (((i) < 0 || (l)->module_levels == NULL || (l)->module_levels[i] < 0) ?  \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:8): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:18): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:48): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:67): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  622|      0|     (l)->level :                                                         \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  623|      0|     (l)->module_levels[i])
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (623:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (185:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  186|      0|             >= ((level)&APLOG_LEVELMASK) ) )
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|      0|#define APLOG_LEVELMASK 15     /* mask off the level value */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  367|      0|             ap_log_error_(file, line, mi, level, status, sr__, __VA_ARGS__);    \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (367:40): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  368|      0|    } while(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (368:13): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  168|      0|		     apr_psprintf(s->process->pconf, fmt, ##__VA_ARGS__))
  |  |  ------------------
  ------------------
  337|      0|		return HTTP_INTERNAL_SERVER_ERROR;
  ------------------
  |  |  535|      0|#define HTTP_INTERNAL_SERVER_ERROR           500
  ------------------
  338|      0|	}
  339|      2|	hdr->last_pressure_warning = 0;
  340|      2|	_oidc_memset(oidc_cache_shm_buckets(hdr), 0, (apr_size_t)nbuckets * sizeof(apr_uint32_t));
  ------------------
  |  |   84|      2|#define _oidc_memset(b, c, __len) memset(b, c, __len)
  ------------------
  341|  1.00k|	for (apr_uint32_t i = 1; i <= hdr->nslots; i++) {
  ------------------
  |  Branch (341:27): [True: 1.00k, False: 2]
  ------------------
  342|  1.00k|		oidc_cache_shm_entry_t *t = oidc_cache_shm_slot(hdr, i);
  343|  1.00k|		t->section_key[0] = '\0';
  344|  1.00k|		t->access = 0;
  345|  1.00k|		t->next = i < hdr->nslots ? i + 1 : 0;
  ------------------
  |  Branch (345:13): [True: 998, False: 2]
  ------------------
  346|  1.00k|	}
  347|      2|	hdr->free_head = 1;
  348|       |
  349|      2|	if (oidc_cache_mutex_post_config(pool, s, context->mutex, "shm") == FALSE)
  ------------------
  |  |   51|      2|#define FALSE 0
  ------------------
  |  Branch (349:6): [True: 0, False: 2]
  ------------------
  350|      0|		return HTTP_INTERNAL_SERVER_ERROR;
  ------------------
  |  |  535|      0|#define HTTP_INTERNAL_SERVER_ERROR           500
  ------------------
  351|      2|	context->mutex_ready = TRUE;
  ------------------
  |  |   55|      2|#define TRUE (!FALSE)
  |  |  ------------------
  |  |  |  |   51|      2|#define FALSE 0
  |  |  ------------------
  ------------------
  352|       |
  353|      2|	oidc_sdebug(s,
  ------------------
  |  |  175|      2|#define oidc_sdebug(s, fmt, ...) oidc_slog(s, OIDC_DEBUG, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |  167|      2|	ap_log_error(APLOG_MARK, level, 0, s, "%s: %s", __FUNCTION__,                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  363|      2|#define ap_log_error(...) ap_log_error__(__VA_ARGS__)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  366|      2|    do { const server_rec *sr__ = s; if (APLOG_MODULE_IS_LEVEL(sr__, mi, level)) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  183|      2|          ( (((level)&APLOG_LEVELMASK) <= APLOG_NOTICE) ||       \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|      2|#define APLOG_LEVELMASK 15     /* mask off the level value */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                         ( (((level)&APLOG_LEVELMASK) <= APLOG_NOTICE) ||       \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   48|      2|#define APLOG_NOTICE    LOG_NOTICE      /* normal but significant condition */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (183:13): [Folded, False: 2]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  184|      2|            (s == NULL) ||                                       \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (184:13): [True: 0, False: 2]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  185|      2|            (ap_get_server_module_loglevel(s, module_index)      \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  626|      2|    (ap_get_module_loglevel(&(s)->log,i))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  621|      4|    (((i) < 0 || (l)->module_levels == NULL || (l)->module_levels[i] < 0) ?  \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:7): [True: 0, False: 2]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:8): [True: 2, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:18): [True: 2, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:48): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:67): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  622|      2|     (l)->level :                                                         \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  623|      2|     (l)->module_levels[i])
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (623:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (185:13): [True: 0, False: 2]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  186|      2|             >= ((level)&APLOG_LEVELMASK) ) )
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|      2|#define APLOG_LEVELMASK 15     /* mask off the level value */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  367|      2|             ap_log_error_(file, line, mi, level, status, sr__, __VA_ARGS__);    \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (367:40): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  368|      2|    } while(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (368:13): [Folded, False: 2]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  168|      2|		     apr_psprintf(s->process->pconf, fmt, ##__VA_ARGS__))
  |  |  ------------------
  ------------------
  354|      2|		    "initialized shared memory with a cache size (# entries) of: %d, a max (single) entry size of: %d, "
  355|      2|		    "and a segment size of: %" APR_SIZE_T_FMT,
  356|      2|		    size_max, entry_size_max, segment_size);
  357|       |
  358|      2|	oidc_slog(s, APLOG_TRACE1, "create: %pp (shm=%pp,s=%pp, p=%d)", context, context ? context->shm : 0, s,
  ------------------
  |  |  167|      2|	ap_log_error(APLOG_MARK, level, 0, s, "%s: %s", __FUNCTION__,                                                  \
  |  |  ------------------
  |  |  |  |  363|      2|#define ap_log_error(...) ap_log_error__(__VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      2|    do { const server_rec *sr__ = s; if (APLOG_MODULE_IS_LEVEL(sr__, mi, level)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  183|      2|          ( (((level)&APLOG_LEVELMASK) <= APLOG_NOTICE) ||       \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      2|#define APLOG_LEVELMASK 15     /* mask off the level value */
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                         ( (((level)&APLOG_LEVELMASK) <= APLOG_NOTICE) ||       \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   48|      2|#define APLOG_NOTICE    LOG_NOTICE      /* normal but significant condition */
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (183:13): [Folded, False: 2]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  184|      2|            (s == NULL) ||                                       \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (184:13): [True: 0, False: 2]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  185|      2|            (ap_get_server_module_loglevel(s, module_index)      \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  626|      2|    (ap_get_module_loglevel(&(s)->log,i))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  621|      4|    (((i) < 0 || (l)->module_levels == NULL || (l)->module_levels[i] < 0) ?  \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:7): [True: 0, False: 2]
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:8): [True: 2, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:18): [True: 2, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:48): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:67): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  622|      2|     (l)->level :                                                         \
  |  |  |  |  |  |  |  |  |  |  |  |  623|      2|     (l)->module_levels[i])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (623:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (185:13): [True: 0, False: 2]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  186|      2|             >= ((level)&APLOG_LEVELMASK) ) )
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      2|#define APLOG_LEVELMASK 15     /* mask off the level value */
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  367|      2|             ap_log_error_(file, line, mi, level, status, sr__, __VA_ARGS__);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (367:40): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (367:65): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (367:65): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  368|      2|    } while(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (368:13): [Folded, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  168|      2|		     apr_psprintf(s->process->pconf, fmt, ##__VA_ARGS__))
  ------------------
  359|      2|		  context ? context->is_parent : -1);
  360|       |
  361|      2|	return OK;
  ------------------
  |  |  456|      2|#define OK 0                    /**< Module has handled this stage. */
  ------------------
  362|      2|}
shm.c:oidc_cache_shm_cfg_create:
  283|      2|static void *oidc_cache_shm_cfg_create(apr_pool_t *pool) {
  284|      2|	oidc_cache_cfg_shm_t *context = apr_pcalloc(pool, sizeof(oidc_cache_cfg_shm_t));
  ------------------
  |  |  465|      2|#define apr_pcalloc(p, size) memset(apr_palloc(p, size), 0, size)
  ------------------
  285|      2|	context->shm = NULL;
  286|      2|	context->mutex = oidc_cache_mutex_create(pool, TRUE);
  ------------------
  |  |   55|      2|#define TRUE (!FALSE)
  |  |  ------------------
  |  |  |  |   51|      2|#define FALSE 0
  |  |  ------------------
  ------------------
  287|      2|	context->is_parent = TRUE;
  ------------------
  |  |   55|      2|#define TRUE (!FALSE)
  |  |  ------------------
  |  |  |  |   51|      2|#define FALSE 0
  |  |  ------------------
  ------------------
  288|      2|	return context;
  289|      2|}

oidc_cfg_cache_shm_size_max_get:
   61|      2|	type oidc_cfg_cache_##member##_get(const oidc_cfg_t *cfg) {                                                    \
   62|      2|		if (cfg->cache.member == unset_val)                                                                    \
  ------------------
  |  Branch (62:7): [True: 0, False: 2]
  ------------------
   63|      2|			return def_val;                                                                                \
   64|      2|		return cfg->cache.member;                                                                              \
   65|      2|	}
oidc_cfg_cache_shm_entry_size_max_get:
   61|      2|	type oidc_cfg_cache_##member##_get(const oidc_cfg_t *cfg) {                                                    \
   62|      2|		if (cfg->cache.member == unset_val)                                                                    \
  ------------------
  |  Branch (62:7): [True: 0, False: 2]
  ------------------
   63|      2|			return def_val;                                                                                \
   64|      2|		return cfg->cache.member;                                                                              \
   65|      2|	}
oidc_cfg_cache_create_server_config:
  267|      2|void oidc_cfg_cache_create_server_config(oidc_cfg_t *c) {
  268|      2|	c->cache.impl = NULL;
  269|      2|	c->cache.cfg = NULL;
  270|      2|	OIDC_CACHE_CFG_SIMPLE_MEMBERS(OIDC_CACHE_M_CREATE_PTR, OIDC_CACHE_M_CREATE_INT, OIDC_CACHE_M_CREATE_TIMEOUT)
  ------------------
  |  |  111|      2|	INT(int, encrypt)                                                                                              \
  |  |  ------------------
  |  |  |  |  270|      2|	OIDC_CACHE_CFG_SIMPLE_MEMBERS(OIDC_CACHE_M_CREATE_PTR, OIDC_CACHE_M_CREATE_INT, OIDC_CACHE_M_CREATE_TIMEOUT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  261|      2|#define OIDC_CACHE_M_CREATE_INT(type, name) c->cache.name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  112|      2|	/* shm: size of the segment (max number of cached entries) and max size in bytes of one entry */               \
  |  |  113|      2|	INT(int, shm_size_max)                                                                                         \
  |  |  ------------------
  |  |  |  |  270|      2|	OIDC_CACHE_CFG_SIMPLE_MEMBERS(OIDC_CACHE_M_CREATE_PTR, OIDC_CACHE_M_CREATE_INT, OIDC_CACHE_M_CREATE_TIMEOUT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  261|      2|#define OIDC_CACHE_M_CREATE_INT(type, name) c->cache.name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  114|      2|	INT(int, shm_entry_size_max)                                                                                   \
  |  |  ------------------
  |  |  |  |  270|      2|	OIDC_CACHE_CFG_SIMPLE_MEMBERS(OIDC_CACHE_M_CREATE_PTR, OIDC_CACHE_M_CREATE_INT, OIDC_CACHE_M_CREATE_TIMEOUT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  261|      2|#define OIDC_CACHE_M_CREATE_INT(type, name) c->cache.name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  115|      2|	/* file: directory holding the cache files (OS default like "/tmp" if unset) + clean interval */               \
  |  |  116|      2|	PTR(char *, file_dir)                                                                                          \
  |  |  ------------------
  |  |  |  |  270|      2|	OIDC_CACHE_CFG_SIMPLE_MEMBERS(OIDC_CACHE_M_CREATE_PTR, OIDC_CACHE_M_CREATE_INT, OIDC_CACHE_M_CREATE_TIMEOUT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  260|      2|#define OIDC_CACHE_M_CREATE_PTR(type, name) c->cache.name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  117|      2|	INT(int, file_clean_interval)                                                                                  \
  |  |  ------------------
  |  |  |  |  270|      2|	OIDC_CACHE_CFG_SIMPLE_MEMBERS(OIDC_CACHE_M_CREATE_PTR, OIDC_CACHE_M_CREATE_INT, OIDC_CACHE_M_CREATE_TIMEOUT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  261|      2|#define OIDC_CACHE_M_CREATE_INT(type, name) c->cache.name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  118|      2|	OIDC_CACHE_CFG_MEMCACHE_MEMBERS(PTR, INT, TIMEOUT)                                                             \
  |  |  ------------------
  |  |  |  |   81|      2|	PTR(char *, memcache_servers)                                                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  270|      2|	OIDC_CACHE_CFG_SIMPLE_MEMBERS(OIDC_CACHE_M_CREATE_PTR, OIDC_CACHE_M_CREATE_INT, OIDC_CACHE_M_CREATE_TIMEOUT)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  260|      2|#define OIDC_CACHE_M_CREATE_PTR(type, name) c->cache.name = NULL;
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   82|      2|	/* cache_type= memcache: minimum number of connections to each memcache server per process*/                   \
  |  |  |  |   83|      2|	INT(int, memcache_min)                                                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  270|      2|	OIDC_CACHE_CFG_SIMPLE_MEMBERS(OIDC_CACHE_M_CREATE_PTR, OIDC_CACHE_M_CREATE_INT, OIDC_CACHE_M_CREATE_TIMEOUT)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  261|      2|#define OIDC_CACHE_M_CREATE_INT(type, name) c->cache.name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   84|      2|	/* cache_type= memcache: soft maximum number of connections to each memcache server per process */             \
  |  |  |  |   85|      2|	INT(int, memcache_smax)                                                                                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  270|      2|	OIDC_CACHE_CFG_SIMPLE_MEMBERS(OIDC_CACHE_M_CREATE_PTR, OIDC_CACHE_M_CREATE_INT, OIDC_CACHE_M_CREATE_TIMEOUT)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  261|      2|#define OIDC_CACHE_M_CREATE_INT(type, name) c->cache.name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   86|      2|	/* cache_type= memcache: hard maximum number of connections to each memcache server per process */             \
  |  |  |  |   87|      2|	INT(int, memcache_hmax)                                                                                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  270|      2|	OIDC_CACHE_CFG_SIMPLE_MEMBERS(OIDC_CACHE_M_CREATE_PTR, OIDC_CACHE_M_CREATE_INT, OIDC_CACHE_M_CREATE_TIMEOUT)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  261|      2|#define OIDC_CACHE_M_CREATE_INT(type, name) c->cache.name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   88|      2|	/* cache_type= memcache: maximum time in microseconds a connection to a memcache server can be idle before     \
  |  |  |  |   89|      2|	 * being closed */                                                                                             \
  |  |  |  |   90|      2|	TIMEOUT(memcache_ttl)
  |  |  |  |  ------------------
  |  |  |  |  |  |  270|      2|	OIDC_CACHE_CFG_SIMPLE_MEMBERS(OIDC_CACHE_M_CREATE_PTR, OIDC_CACHE_M_CREATE_INT, OIDC_CACHE_M_CREATE_TIMEOUT)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  262|      2|#define OIDC_CACHE_M_CREATE_TIMEOUT(name) c->cache.name = OIDC_CONFIG_POS_TIMEOUT_UNSET;
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   59|      2|#define OIDC_CONFIG_POS_TIMEOUT_UNSET (apr_interval_time_t) - 2
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      2|	OIDC_CACHE_CFG_REDIS_MEMBERS(PTR, INT, TIMEOUT)
  ------------------
  271|      2|}

oidc_cfg_x_forwarded_headers_check:
  602|  3.04k|void oidc_cfg_x_forwarded_headers_check(request_rec *r, oidc_hdr_x_forwarded_t x_forwarded_headers) {
  603|  3.04k|	oidc_check_x_forwarded_hdr(r, x_forwarded_headers, OIDC_HDR_X_FORWARDED_HOST, OIDC_HTTP_HDR_X_FORWARDED_HOST,
  ------------------
  |  |   79|  3.04k|#define OIDC_HTTP_HDR_X_FORWARDED_HOST "X-Forwarded-Host"
  ------------------
  604|  3.04k|				   oidc_http_hdr_in_x_forwarded_host_get);
  605|  3.04k|	oidc_check_x_forwarded_hdr(r, x_forwarded_headers, OIDC_HDR_X_FORWARDED_PORT, OIDC_HTTP_HDR_X_FORWARDED_PORT,
  ------------------
  |  |   78|  3.04k|#define OIDC_HTTP_HDR_X_FORWARDED_PORT "X-Forwarded-Port"
  ------------------
  606|  3.04k|				   oidc_http_hdr_in_x_forwarded_port_get);
  607|  3.04k|	oidc_check_x_forwarded_hdr(r, x_forwarded_headers, OIDC_HDR_X_FORWARDED_PROTO, OIDC_HTTP_HDR_X_FORWARDED_PROTO,
  ------------------
  |  |   77|  3.04k|#define OIDC_HTTP_HDR_X_FORWARDED_PROTO "X-Forwarded-Proto"
  ------------------
  608|  3.04k|				   oidc_http_hdr_in_x_forwarded_proto_get);
  609|  3.04k|	oidc_check_x_forwarded_hdr(r, x_forwarded_headers, OIDC_HDR_FORWARDED, OIDC_HTTP_HDR_FORWARDED,
  ------------------
  |  |   80|  3.04k|#define OIDC_HTTP_HDR_FORWARDED "Forwarded"
  ------------------
  610|  3.04k|				   oidc_http_hdr_in_forwarded_get);
  611|  3.04k|}
oidc_cfg_server_create:
  849|      2|void *oidc_cfg_server_create(apr_pool_t *pool, server_rec *svr) {
  850|      2|	oidc_cfg_t *c = oidc_cfg_server_alloc(pool, svr);
  851|      2|	c->svr = svr;
  852|       |
  853|      2|	c->merged = FALSE;
  ------------------
  |  |   51|      2|#define FALSE 0
  ------------------
  854|       |	/* nothing to inherit from: whatever OIDCRedirectURI this config ends up with is its own */
  855|      2|	c->redirect_uri_inherited = FALSE;
  ------------------
  |  |   51|      2|#define FALSE 0
  ------------------
  856|       |
  857|      2|	OIDC_SVR_CFG_SIMPLE_MEMBERS(OIDC_SVR_M_CREATE_PTR, OIDC_SVR_M_CREATE_INT)
  ------------------
  |  |  138|      2|	PTR(char *, redirect_uri)                                                                                      \
  |  |  ------------------
  |  |  |  |  857|      2|	OIDC_SVR_CFG_SIMPLE_MEMBERS(OIDC_SVR_M_CREATE_PTR, OIDC_SVR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  844|      2|#define OIDC_SVR_M_CREATE_PTR(type, name) c->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  139|      2|	/* (optional) default URL for 3rd-party initiated SSO */                                                       \
  |  |  140|      2|	PTR(char *, default_sso_url)                                                                                   \
  |  |  ------------------
  |  |  |  |  857|      2|	OIDC_SVR_CFG_SIMPLE_MEMBERS(OIDC_SVR_M_CREATE_PTR, OIDC_SVR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  844|      2|#define OIDC_SVR_M_CREATE_PTR(type, name) c->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  141|      2|	/* (optional) default URL to go to after logout */                                                             \
  |  |  142|      2|	PTR(char *, default_slo_url)                                                                                   \
  |  |  ------------------
  |  |  |  |  857|      2|	OIDC_SVR_CFG_SIMPLE_MEMBERS(OIDC_SVR_M_CREATE_PTR, OIDC_SVR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  844|      2|#define OIDC_SVR_M_CREATE_PTR(type, name) c->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  143|      2|	/* Javascript template to preserve POST data */                                                                \
  |  |  144|      2|	PTR(char *, post_preserve_template)                                                                            \
  |  |  ------------------
  |  |  |  |  857|      2|	OIDC_SVR_CFG_SIMPLE_MEMBERS(OIDC_SVR_M_CREATE_PTR, OIDC_SVR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  844|      2|#define OIDC_SVR_M_CREATE_PTR(type, name) c->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|      2|	/* Javascript template to restore POST data */                                                                 \
  |  |  146|      2|	PTR(char *, post_restore_template)                                                                             \
  |  |  ------------------
  |  |  |  |  857|      2|	OIDC_SVR_CFG_SIMPLE_MEMBERS(OIDC_SVR_M_CREATE_PTR, OIDC_SVR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  844|      2|#define OIDC_SVR_M_CREATE_PTR(type, name) c->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  147|      2|	/* type of session management/storage */                                                                       \
  |  |  148|      2|	INT(session_type)                                                                                              \
  |  |  ------------------
  |  |  |  |  857|      2|	OIDC_SVR_CFG_SIMPLE_MEMBERS(OIDC_SVR_M_CREATE_PTR, OIDC_SVR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  845|      2|#define OIDC_SVR_M_CREATE_INT(name) c->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      2|	/* whether secrets/tokens are masked in the debug log */                                                       \
  |  |  150|      2|	INT(debug_mask_secrets)                                                                                        \
  |  |  ------------------
  |  |  |  |  857|      2|	OIDC_SVR_CFG_SIMPLE_MEMBERS(OIDC_SVR_M_CREATE_PTR, OIDC_SVR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  845|      2|#define OIDC_SVR_M_CREATE_INT(name) c->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      2|	INT(session_cache_fallback_to_cookie)                                                                          \
  |  |  ------------------
  |  |  |  |  857|      2|	OIDC_SVR_CFG_SIMPLE_MEMBERS(OIDC_SVR_M_CREATE_PTR, OIDC_SVR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  845|      2|#define OIDC_SVR_M_CREATE_INT(name) c->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  152|      2|	/* session cookie or persistent cookie */                                                                      \
  |  |  153|      2|	INT(persistent_session_cookie)                                                                                 \
  |  |  ------------------
  |  |  |  |  857|      2|	OIDC_SVR_CFG_SIMPLE_MEMBERS(OIDC_SVR_M_CREATE_PTR, OIDC_SVR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  845|      2|#define OIDC_SVR_M_CREATE_INT(name) c->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  154|      2|	/* store the id_token in the session */                                                                        \
  |  |  155|      2|	INT(store_id_token)                                                                                            \
  |  |  ------------------
  |  |  |  |  857|      2|	OIDC_SVR_CFG_SIMPLE_MEMBERS(OIDC_SVR_M_CREATE_PTR, OIDC_SVR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  845|      2|#define OIDC_SVR_M_CREATE_INT(name) c->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  156|      2|	/* session cookie chunk size */                                                                                \
  |  |  157|      2|	INT(session_cookie_chunk_size)                                                                                 \
  |  |  ------------------
  |  |  |  |  857|      2|	OIDC_SVR_CFG_SIMPLE_MEMBERS(OIDC_SVR_M_CREATE_PTR, OIDC_SVR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  845|      2|#define OIDC_SVR_M_CREATE_INT(name) c->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  158|      2|	PTR(char *, cookie_domain)                                                                                     \
  |  |  ------------------
  |  |  |  |  857|      2|	OIDC_SVR_CFG_SIMPLE_MEMBERS(OIDC_SVR_M_CREATE_PTR, OIDC_SVR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  844|      2|#define OIDC_SVR_M_CREATE_PTR(type, name) c->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  159|      2|	INT(cookie_http_only)                                                                                          \
  |  |  ------------------
  |  |  |  |  857|      2|	OIDC_SVR_CFG_SIMPLE_MEMBERS(OIDC_SVR_M_CREATE_PTR, OIDC_SVR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  845|      2|#define OIDC_SVR_M_CREATE_INT(name) c->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  160|      2|	/* samesite cookie settings */                                                                                 \
  |  |  161|      2|	INT(cookie_same_site_session)                                                                                  \
  |  |  ------------------
  |  |  |  |  857|      2|	OIDC_SVR_CFG_SIMPLE_MEMBERS(OIDC_SVR_M_CREATE_PTR, OIDC_SVR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  845|      2|#define OIDC_SVR_M_CREATE_INT(name) c->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  162|      2|	INT(cookie_same_site_state)                                                                                    \
  |  |  ------------------
  |  |  |  |  857|      2|	OIDC_SVR_CFG_SIMPLE_MEMBERS(OIDC_SVR_M_CREATE_PTR, OIDC_SVR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  845|      2|#define OIDC_SVR_M_CREATE_INT(name) c->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      2|	INT(cookie_same_site_discovery_csrf)                                                                           \
  |  |  ------------------
  |  |  |  |  857|      2|	OIDC_SVR_CFG_SIMPLE_MEMBERS(OIDC_SVR_M_CREATE_PTR, OIDC_SVR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  845|      2|#define OIDC_SVR_M_CREATE_INT(name) c->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  164|      2|	INT(state_timeout)                                                                                             \
  |  |  ------------------
  |  |  |  |  857|      2|	OIDC_SVR_CFG_SIMPLE_MEMBERS(OIDC_SVR_M_CREATE_PTR, OIDC_SVR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  845|      2|#define OIDC_SVR_M_CREATE_INT(name) c->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      2|	INT(max_number_of_state_cookies)                                                                               \
  |  |  ------------------
  |  |  |  |  857|      2|	OIDC_SVR_CFG_SIMPLE_MEMBERS(OIDC_SVR_M_CREATE_PTR, OIDC_SVR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  845|      2|#define OIDC_SVR_M_CREATE_INT(name) c->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  166|      2|	INT(delete_oldest_state_cookies)                                                                               \
  |  |  ------------------
  |  |  |  |  857|      2|	OIDC_SVR_CFG_SIMPLE_MEMBERS(OIDC_SVR_M_CREATE_PTR, OIDC_SVR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  845|      2|#define OIDC_SVR_M_CREATE_INT(name) c->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  167|      2|	INT(state_input_headers)                                                                                       \
  |  |  ------------------
  |  |  |  |  857|      2|	OIDC_SVR_CFG_SIMPLE_MEMBERS(OIDC_SVR_M_CREATE_PTR, OIDC_SVR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  845|      2|#define OIDC_SVR_M_CREATE_INT(name) c->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  168|      2|	INT(session_inactivity_timeout)                                                                                \
  |  |  ------------------
  |  |  |  |  857|      2|	OIDC_SVR_CFG_SIMPLE_MEMBERS(OIDC_SVR_M_CREATE_PTR, OIDC_SVR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  845|      2|#define OIDC_SVR_M_CREATE_INT(name) c->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  169|      2|	INT(provider_metadata_refresh_interval)                                                                        \
  |  |  ------------------
  |  |  |  |  857|      2|	OIDC_SVR_CFG_SIMPLE_MEMBERS(OIDC_SVR_M_CREATE_PTR, OIDC_SVR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  845|      2|#define OIDC_SVR_M_CREATE_INT(name) c->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  170|      2|	PTR(char *, claim_delimiter)                                                                                   \
  |  |  ------------------
  |  |  |  |  857|      2|	OIDC_SVR_CFG_SIMPLE_MEMBERS(OIDC_SVR_M_CREATE_PTR, OIDC_SVR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  844|      2|#define OIDC_SVR_M_CREATE_PTR(type, name) c->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  171|      2|	PTR(char *, claim_prefix)                                                                                      \
  |  |  ------------------
  |  |  |  |  857|      2|	OIDC_SVR_CFG_SIMPLE_MEMBERS(OIDC_SVR_M_CREATE_PTR, OIDC_SVR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  844|      2|#define OIDC_SVR_M_CREATE_PTR(type, name) c->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  172|      2|	PTR(char *, ca_bundle_path)                                                                                    \
  |  |  ------------------
  |  |  |  |  857|      2|	OIDC_SVR_CFG_SIMPLE_MEMBERS(OIDC_SVR_M_CREATE_PTR, OIDC_SVR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  844|      2|#define OIDC_SVR_M_CREATE_PTR(type, name) c->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  173|      2|	PTR(char *, logout_x_frame_options)                                                                            \
  |  |  ------------------
  |  |  |  |  857|      2|	OIDC_SVR_CFG_SIMPLE_MEMBERS(OIDC_SVR_M_CREATE_PTR, OIDC_SVR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  844|      2|#define OIDC_SVR_M_CREATE_PTR(type, name) c->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  174|      2|	INT(x_forwarded_headers)                                                                                       \
  |  |  ------------------
  |  |  |  |  857|      2|	OIDC_SVR_CFG_SIMPLE_MEMBERS(OIDC_SVR_M_CREATE_PTR, OIDC_SVR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  845|      2|#define OIDC_SVR_M_CREATE_INT(name) c->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  175|      2|	INT(action_on_userinfo_error)                                                                                  \
  |  |  ------------------
  |  |  |  |  857|      2|	OIDC_SVR_CFG_SIMPLE_MEMBERS(OIDC_SVR_M_CREATE_PTR, OIDC_SVR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  845|      2|#define OIDC_SVR_M_CREATE_INT(name) c->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  176|      2|	INT(trace_parent)                                                                                              \
  |  |  ------------------
  |  |  |  |  857|      2|	OIDC_SVR_CFG_SIMPLE_MEMBERS(OIDC_SVR_M_CREATE_PTR, OIDC_SVR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  845|      2|#define OIDC_SVR_M_CREATE_INT(name) c->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      2|	PTR(char *, metrics_path)                                                                                      \
  |  |  ------------------
  |  |  |  |  857|      2|	OIDC_SVR_CFG_SIMPLE_MEMBERS(OIDC_SVR_M_CREATE_PTR, OIDC_SVR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  844|      2|#define OIDC_SVR_M_CREATE_PTR(type, name) c->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  178|      2|	INT(dpop_api_enabled)                                                                                          \
  |  |  ------------------
  |  |  |  |  857|      2|	OIDC_SVR_CFG_SIMPLE_MEMBERS(OIDC_SVR_M_CREATE_PTR, OIDC_SVR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  845|      2|#define OIDC_SVR_M_CREATE_INT(name) c->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      2|	/* directory that holds the provider & client metadata files */                                                \
  |  |  180|      2|	PTR(char *, metadata_dir)
  |  |  ------------------
  |  |  |  |  857|      2|	OIDC_SVR_CFG_SIMPLE_MEMBERS(OIDC_SVR_M_CREATE_PTR, OIDC_SVR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  844|      2|#define OIDC_SVR_M_CREATE_PTR(type, name) c->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  858|      2|	c->public_keys = NULL;
  859|      2|	c->private_keys = NULL;
  860|       |
  861|      2|	c->provider = oidc_cfg_provider_create(pool);
  862|      2|	c->oauth = oidc_cfg_oauth_create(pool);
  863|      2|	oidc_cfg_cache_create_server_config(c);
  864|       |
  865|      2|	c->http_timeout_long.request_timeout = OIDC_CONFIG_POS_INT_UNSET;
  ------------------
  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  ------------------
  866|      2|	c->http_timeout_long.connect_timeout = OIDC_DEFAULT_HTTP_CONNECT_TIMEOUT_LONG;
  ------------------
  |  |   90|      2|#define OIDC_DEFAULT_HTTP_CONNECT_TIMEOUT_LONG 10
  ------------------
  867|      2|	c->http_timeout_long.retries = OIDC_DEFAULT_HTTP_RETRIES_LONG;
  ------------------
  |  |   92|      2|#define OIDC_DEFAULT_HTTP_RETRIES_LONG 1
  ------------------
  868|      2|	c->http_timeout_long.retry_interval = OIDC_DEFAULT_HTTP_RETRY_INTERVAL_LONG;
  ------------------
  |  |   94|      2|#define OIDC_DEFAULT_HTTP_RETRY_INTERVAL_LONG 500
  ------------------
  869|      2|	c->http_timeout_short.request_timeout = OIDC_CONFIG_POS_INT_UNSET;
  ------------------
  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  ------------------
  870|      2|	c->http_timeout_short.connect_timeout = OIDC_DEFAULT_HTTP_CONNECT_TIMEOUT_SHORT;
  ------------------
  |  |   98|      2|#define OIDC_DEFAULT_HTTP_CONNECT_TIMEOUT_SHORT 2
  ------------------
  871|      2|	c->http_timeout_short.retries = OIDC_DEFAULT_HTTP_RETRIES_SHORT;
  ------------------
  |  |  100|      2|#define OIDC_DEFAULT_HTTP_RETRIES_SHORT 1
  ------------------
  872|      2|	c->http_timeout_short.retry_interval = OIDC_DEFAULT_HTTP_RETRY_INTERVAL_SHORT;
  ------------------
  |  |  102|      2|#define OIDC_DEFAULT_HTTP_RETRY_INTERVAL_SHORT 300
  ------------------
  873|       |
  874|      2|	c->remote_user_claim.claim_name = NULL;
  875|      2|	c->remote_user_claim.reg_exp = NULL;
  876|      2|	c->remote_user_claim.replace = NULL;
  877|       |
  878|      2|	c->outgoing_proxy.host_port = NULL;
  879|      2|	c->outgoing_proxy.username_password = NULL;
  880|      2|	c->outgoing_proxy.auth_type = OIDC_CONFIG_POS_INT_UNSET;
  ------------------
  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  ------------------
  881|       |
  882|      2|	c->crypto_passphrase.secret1 = NULL;
  883|      2|	c->crypto_passphrase.secret2 = NULL;
  884|      2|	c->crypto_passphrase.derived_key1_set = FALSE;
  ------------------
  |  |   51|      2|#define FALSE 0
  ------------------
  885|      2|	c->crypto_passphrase.derived_key2_set = FALSE;
  ------------------
  |  |   51|      2|#define FALSE 0
  ------------------
  886|       |
  887|      2|	c->info_hook_data = NULL;
  888|      2|	c->metrics_hook_data = NULL;
  889|       |
  890|      2|	c->black_listed_claims = NULL;
  891|      2|	c->white_listed_claims = NULL;
  892|      2|	c->filter_claims_expr = NULL;
  893|       |
  894|      2|	c->redirect_urls_allowed = NULL;
  895|      2|	c->discover_issuers_allowed = NULL;
  896|       |
  897|      2|	return c;
  898|      2|}
oidc_pre_config_init:
 1011|      2|void oidc_pre_config_init(void) {
 1012|      2|#if OPENSSL_API_COMPAT < 0x10100000L
 1013|      2|	ERR_load_crypto_strings();
 1014|      2|	OpenSSL_add_all_algorithms();
 1015|      2|	OpenSSL_add_all_digests();
 1016|       |#else
 1017|       |	OPENSSL_init_crypto(0, NULL);
 1018|       |#endif
 1019|      2|}
oidc_cfg_provider_get:
 1021|      6|oidc_provider_t *oidc_cfg_provider_get(oidc_cfg_t *cfg) {
 1022|      6|	return cfg->provider;
 1023|      6|}
oidc_cfg_post_config:
 1039|      2|int oidc_cfg_post_config(apr_pool_t *pool, oidc_cfg_t *cfg, server_rec *s) {
 1040|      2|	if (cfg->cache.impl == NULL)
  ------------------
  |  Branch (1040:6): [True: 0, False: 2]
  ------------------
 1041|      0|		cfg->cache.impl = &oidc_cache_shm;
 1042|      2|	if ((cfg->cache.impl->post_config != NULL) && (cfg->cache.impl->post_config(pool, s) != OK))
  ------------------
  |  |  456|      2|#define OK 0                    /**< Module has handled this stage. */
  ------------------
  |  Branch (1042:6): [True: 2, False: 0]
  |  Branch (1042:48): [True: 0, False: 2]
  ------------------
 1043|      0|		return HTTP_INTERNAL_SERVER_ERROR;
  ------------------
  |  |  535|      0|#define HTTP_INTERNAL_SERVER_ERROR           500
  ------------------
 1044|      2|	if (_oidc_refresh_mutex == NULL) {
  ------------------
  |  Branch (1044:6): [True: 2, False: 0]
  ------------------
 1045|       |		// NB: use the process pool here as the mutex is a process-wide singleton
 1046|      2|		_oidc_refresh_mutex = oidc_cache_mutex_create(s->process->pool, TRUE);
  ------------------
  |  |   55|      2|#define TRUE (!FALSE)
  |  |  ------------------
  |  |  |  |   51|      2|#define FALSE 0
  |  |  ------------------
  ------------------
 1047|      2|		if (oidc_cache_mutex_post_config(s->process->pool, s, _oidc_refresh_mutex, "refresh") != TRUE)
  ------------------
  |  |   55|      2|#define TRUE (!FALSE)
  |  |  ------------------
  |  |  |  |   51|      2|#define FALSE 0
  |  |  ------------------
  ------------------
  |  Branch (1047:7): [True: 0, False: 2]
  ------------------
 1048|      0|			return HTTP_INTERNAL_SERVER_ERROR;
  ------------------
  |  |  535|      0|#define HTTP_INTERNAL_SERVER_ERROR           500
  ------------------
 1049|      2|	}
 1050|      2|	if ((cfg->metrics_hook_data != NULL) && (oidc_metrics_post_config(pool, s) != TRUE))
  ------------------
  |  |   55|      0|#define TRUE (!FALSE)
  |  |  ------------------
  |  |  |  |   51|      0|#define FALSE 0
  |  |  ------------------
  ------------------
  |  Branch (1050:6): [True: 0, False: 2]
  |  Branch (1050:42): [True: 0, False: 0]
  ------------------
 1051|      0|		return HTTP_INTERNAL_SERVER_ERROR;
  ------------------
  |  |  535|      0|#define HTTP_INTERNAL_SERVER_ERROR           500
  ------------------
 1052|      2|	return OK;
  ------------------
  |  |  456|      2|#define OK 0                    /**< Module has handled this stage. */
  ------------------
 1053|      2|}
cfg.c:oidc_check_x_forwarded_hdr:
  589|  12.1k|				       const char *(hdr_func)(const request_rec *r)) {
  590|  12.1k|	apr_byte_t suppress = oidc_util_spaced_string_contains(
  591|  12.1k|	    r->pool, apr_table_get(r->subprocess_env, OIDC_CHECK_X_FORWARDED_HDR_LOG_DISABLE), hdr_str);
  ------------------
  |  |  585|  12.1k|#define OIDC_CHECK_X_FORWARDED_HDR_LOG_DISABLE "OIDC_CHECK_X_FORWARDED_HDR_LOG_DISABLE"
  ------------------
  592|  12.1k|	if (hdr_func(r)) {
  ------------------
  |  Branch (592:6): [True: 1.18k, False: 10.9k]
  ------------------
  593|  1.18k|		if (!(x_forwarded_headers & hdr_type) && !suppress)
  ------------------
  |  Branch (593:7): [True: 845, False: 343]
  |  Branch (593:44): [True: 845, False: 0]
  ------------------
  594|  1.18k|			oidc_warn(r, "header %s received but %s not configured for it", hdr_str, OIDCXForwardedHeaders);
  ------------------
  |  |  171|  1.18k|#define oidc_warn(r, fmt, ...) oidc_log(r, APLOG_WARNING, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |  165|  1.18k|	ap_log_rerror(APLOG_MARK, level, 0, r, "%s: %s", __FUNCTION__, apr_psprintf(r->pool, fmt, ##__VA_ARGS__))
  |  |  |  |  ------------------
  |  |  |  |  |  |  448|    845|#define ap_log_rerror(...) ap_log_rerror__(__VA_ARGS__)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  450|    845|    do { if (APLOG_R_MODULE_IS_LEVEL(r, mi, level))                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  196|    845|          ( (((level)&APLOG_LEVELMASK) <= APLOG_NOTICE) ||       \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|    845|#define APLOG_LEVELMASK 15     /* mask off the level value */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                         ( (((level)&APLOG_LEVELMASK) <= APLOG_NOTICE) ||       \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   48|    845|#define APLOG_NOTICE    LOG_NOTICE      /* normal but significant condition */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (196:13): [True: 845, Folded]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  197|    845|            (ap_get_request_module_loglevel(r, module_index)     \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  635|      0|    (ap_get_module_loglevel(ap_get_request_logconf(r),i))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  621|      0|    (((i) < 0 || (l)->module_levels == NULL || (l)->module_levels[i] < 0) ?  \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:8): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:18): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:19): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:19): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:48): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:49): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:49): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:67): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  622|      0|     (l)->level :                                                         \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (622:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (622:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  623|      0|     (l)->module_levels[i])
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (623:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (623:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (623:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (197:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  198|      0|             >= ((level)&APLOG_LEVELMASK) ) )
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|      0|#define APLOG_LEVELMASK 15     /* mask off the level value */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  451|  1.69k|             ap_log_rerror_(file, line, mi, level, status, r, __VA_ARGS__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (451:41): [True: 845, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  452|    845|    } while(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (452:13): [Folded, False: 845]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  595|  10.9k|	} else {
  596|  10.9k|		if ((x_forwarded_headers & hdr_type) && !suppress)
  ------------------
  |  Branch (596:7): [True: 3.80k, False: 7.18k]
  |  Branch (596:43): [True: 3.80k, False: 0]
  ------------------
  597|       |			oidc_warn(r, "%s configured for header %s but not found in request", OIDCXForwardedHeaders,
  ------------------
  |  |  171|  10.9k|#define oidc_warn(r, fmt, ...) oidc_log(r, APLOG_WARNING, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |  165|  10.9k|	ap_log_rerror(APLOG_MARK, level, 0, r, "%s: %s", __FUNCTION__, apr_psprintf(r->pool, fmt, ##__VA_ARGS__))
  |  |  |  |  ------------------
  |  |  |  |  |  |  448|  3.80k|#define ap_log_rerror(...) ap_log_rerror__(__VA_ARGS__)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  450|  3.80k|    do { if (APLOG_R_MODULE_IS_LEVEL(r, mi, level))                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  196|  3.80k|          ( (((level)&APLOG_LEVELMASK) <= APLOG_NOTICE) ||       \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|  3.80k|#define APLOG_LEVELMASK 15     /* mask off the level value */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                         ( (((level)&APLOG_LEVELMASK) <= APLOG_NOTICE) ||       \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   48|  3.80k|#define APLOG_NOTICE    LOG_NOTICE      /* normal but significant condition */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (196:13): [True: 3.80k, Folded]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  197|  3.80k|            (ap_get_request_module_loglevel(r, module_index)     \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  635|      0|    (ap_get_module_loglevel(ap_get_request_logconf(r),i))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  621|      0|    (((i) < 0 || (l)->module_levels == NULL || (l)->module_levels[i] < 0) ?  \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:8): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:18): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:19): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:19): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:48): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:49): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:49): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:67): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  622|      0|     (l)->level :                                                         \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (622:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (622:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  623|      0|     (l)->module_levels[i])
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (623:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (623:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (623:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (197:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  198|      0|             >= ((level)&APLOG_LEVELMASK) ) )
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|      0|#define APLOG_LEVELMASK 15     /* mask off the level value */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  451|  7.60k|             ap_log_rerror_(file, line, mi, level, status, r, __VA_ARGS__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (451:41): [True: 3.80k, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  452|  3.80k|    } while(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (452:13): [Folded, False: 3.80k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  598|  10.9k|				  hdr_str);
  599|  10.9k|	}
  600|  12.1k|}
cfg.c:oidc_cfg_server_alloc:
  822|      2|static oidc_cfg_t *oidc_cfg_server_alloc(apr_pool_t *pool, server_rec *s) {
  823|      2|	oidc_cfg_t *c = apr_pcalloc(pool, sizeof(oidc_cfg_t));
  ------------------
  |  |  465|      2|#define apr_pcalloc(p, size) memset(apr_palloc(p, size), 0, size)
  ------------------
  824|      2|	oidc_cfg_cleanup_ctx_t *ctx = apr_pcalloc(pool, sizeof(oidc_cfg_cleanup_ctx_t));
  ------------------
  |  |  465|      2|#define apr_pcalloc(p, size) memset(apr_palloc(p, size), 0, size)
  ------------------
  825|      2|	ctx->cfg = c;
  826|       |	// pconf pool used at destruction time
  827|      2|	ctx->pool = pool;
  828|      2|	ctx->svr = s;
  829|       |	// register a cleanup handler on the config pool to handle graceful restarts without increasing
  830|       |	// memory consumption; this MUST be a *pre*-cleanup: libapr registers its own regular cleanups
  831|       |	// for the cache global mutex's POSIX semaphore and the shm segment on this same pool when they
  832|       |	// are created at post_config time, and regular cleanups run in reverse order of registration,
  833|       |	// so a regular registration here (which happens much earlier, at config-parse time) would run
  834|       |	// only AFTER libapr has already closed/unmapped those objects, making the mutex unlock/destroy
  835|       |	// in oidc_cache_shm_destroy() dereference an unmapped semaphore and segfault the parent process
  836|       |	// on a graceful restart; pre-cleanups are guaranteed to run before all regular cleanups
  837|      2|	apr_pool_pre_cleanup_register(pool, ctx, oidc_cfg_server_cleanup);
  838|      2|	return c;
  839|      2|}

oidc_cfg_x_forwarded_headers_get:
  254|    783|	type oidc_cfg_##member##_get(const oidc_cfg_t *cfg) {                                                          \
  255|    783|		if (cfg->member == OIDC_CONFIG_POS_INT_UNSET)                                                          \
  ------------------
  |  |   57|    783|#define OIDC_CONFIG_POS_INT_UNSET -1
  ------------------
  |  Branch (255:7): [True: 783, False: 0]
  ------------------
  256|    783|			return def_val;                                                                                \
  257|    783|		return cfg->member;                                                                                    \
  258|    783|	}
oidc_cfg_redirect_uri_get:
  234|    377|	type oidc_cfg_##member##_get(const oidc_cfg_t *cfg) {                                                          \
  235|    377|		return cfg->member;                                                                                    \
  236|    377|	}

oidc_cfg_dir_post_config:
  611|      2|int oidc_cfg_dir_post_config(server_rec *s) {
  612|      2|	oidc_pass_user_info_as_t *p = NULL;
  613|      2|	if (pass_userinfo_as_default != NULL)
  ------------------
  |  Branch (613:6): [True: 0, False: 2]
  ------------------
  614|      0|		return OK;
  ------------------
  |  |  456|      0|#define OK 0                    /**< Module has handled this stage. */
  ------------------
  615|      2|	pass_userinfo_as_default = apr_array_make(s->process->pool, 3, sizeof(const oidc_pass_user_info_as_t *));
  616|      2|	if (oidc_cfg_dir_parse_pass_userinfo_as(s->process->pool, OIDC_DEFAULT_PASS_USERINFO_AS, &p) != NULL)
  ------------------
  |  |  602|      2|#define OIDC_DEFAULT_PASS_USERINFO_AS OIDC_PASS_USERINFO_AS_CLAIMS_STR
  |  |  ------------------
  |  |  |  |  136|      2|#define OIDC_PASS_USERINFO_AS_CLAIMS_STR "claims"
  |  |  ------------------
  ------------------
  |  Branch (616:6): [True: 0, False: 2]
  ------------------
  617|      0|		return HTTP_INTERNAL_SERVER_ERROR;
  ------------------
  |  |  535|      0|#define HTTP_INTERNAL_SERVER_ERROR           500
  ------------------
  618|      2|	APR_ARRAY_PUSH(pass_userinfo_as_default, const oidc_pass_user_info_as_t *) = p;
  ------------------
  |  |  150|      2|#define APR_ARRAY_PUSH(ary,type) (*((type *)apr_array_push(ary)))
  ------------------
  619|      2|	return OK;
  ------------------
  |  |  456|      2|#define OK 0                    /**< Module has handled this stage. */
  ------------------
  620|      2|}
oidc_cfg_dir_config_create:
  646|      2|void *oidc_cfg_dir_config_create(apr_pool_t *pool, char *path) {
  647|      2|	oidc_dir_cfg_t *c = apr_pcalloc(pool, sizeof(oidc_dir_cfg_t));
  ------------------
  |  |  465|      2|#define apr_pcalloc(p, size) memset(apr_palloc(p, size), 0, size)
  ------------------
  648|      2|	OIDC_DIR_CFG_SIMPLE_MEMBERS(OIDC_DIR_M_CREATE_PTR, OIDC_DIR_M_CREATE_INT)
  ------------------
  |  |   60|      2|	PTR(char *, discover_url)                                                                                      \
  |  |  ------------------
  |  |  |  |  648|      2|	OIDC_DIR_CFG_SIMPLE_MEMBERS(OIDC_DIR_M_CREATE_PTR, OIDC_DIR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   87|      2|#define OIDC_DIR_M_CREATE_PTR(type, name) c->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      2|	PTR(char *, cookie_path)                                                                                       \
  |  |  ------------------
  |  |  |  |  648|      2|	OIDC_DIR_CFG_SIMPLE_MEMBERS(OIDC_DIR_M_CREATE_PTR, OIDC_DIR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   87|      2|#define OIDC_DIR_M_CREATE_PTR(type, name) c->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   62|      2|	PTR(char *, cookie)                                                                                            \
  |  |  ------------------
  |  |  |  |  648|      2|	OIDC_DIR_CFG_SIMPLE_MEMBERS(OIDC_DIR_M_CREATE_PTR, OIDC_DIR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   87|      2|#define OIDC_DIR_M_CREATE_PTR(type, name) c->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   63|      2|	PTR(char *, authn_header)                                                                                      \
  |  |  ------------------
  |  |  |  |  648|      2|	OIDC_DIR_CFG_SIMPLE_MEMBERS(OIDC_DIR_M_CREATE_PTR, OIDC_DIR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   87|      2|#define OIDC_DIR_M_CREATE_PTR(type, name) c->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   64|      2|	PTR(char *, unauthz_arg)                                                                                       \
  |  |  ------------------
  |  |  |  |  648|      2|	OIDC_DIR_CFG_SIMPLE_MEMBERS(OIDC_DIR_M_CREATE_PTR, OIDC_DIR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   87|      2|#define OIDC_DIR_M_CREATE_PTR(type, name) c->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   65|      2|	PTR(apr_array_header_t *, pass_cookies)                                                                        \
  |  |  ------------------
  |  |  |  |  648|      2|	OIDC_DIR_CFG_SIMPLE_MEMBERS(OIDC_DIR_M_CREATE_PTR, OIDC_DIR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   87|      2|#define OIDC_DIR_M_CREATE_PTR(type, name) c->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   66|      2|	PTR(apr_array_header_t *, strip_cookies)                                                                       \
  |  |  ------------------
  |  |  |  |  648|      2|	OIDC_DIR_CFG_SIMPLE_MEMBERS(OIDC_DIR_M_CREATE_PTR, OIDC_DIR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   87|      2|#define OIDC_DIR_M_CREATE_PTR(type, name) c->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   67|      2|	PTR(oidc_apr_expr_t *, path_auth_request_expr)                                                                 \
  |  |  ------------------
  |  |  |  |  648|      2|	OIDC_DIR_CFG_SIMPLE_MEMBERS(OIDC_DIR_M_CREATE_PTR, OIDC_DIR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   87|      2|#define OIDC_DIR_M_CREATE_PTR(type, name) c->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   68|      2|	PTR(oidc_apr_expr_t *, path_scope_expr)                                                                        \
  |  |  ------------------
  |  |  |  |  648|      2|	OIDC_DIR_CFG_SIMPLE_MEMBERS(OIDC_DIR_M_CREATE_PTR, OIDC_DIR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   87|      2|#define OIDC_DIR_M_CREATE_PTR(type, name) c->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   69|      2|	PTR(oidc_apr_expr_t *, unauth_expression)                                                                      \
  |  |  ------------------
  |  |  |  |  648|      2|	OIDC_DIR_CFG_SIMPLE_MEMBERS(OIDC_DIR_M_CREATE_PTR, OIDC_DIR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   87|      2|#define OIDC_DIR_M_CREATE_PTR(type, name) c->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   70|      2|	PTR(oidc_apr_expr_t *, userinfo_claims_expr)                                                                   \
  |  |  ------------------
  |  |  |  |  648|      2|	OIDC_DIR_CFG_SIMPLE_MEMBERS(OIDC_DIR_M_CREATE_PTR, OIDC_DIR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   87|      2|#define OIDC_DIR_M_CREATE_PTR(type, name) c->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   71|      2|	PTR(char *, state_cookie_prefix)                                                                               \
  |  |  ------------------
  |  |  |  |  648|      2|	OIDC_DIR_CFG_SIMPLE_MEMBERS(OIDC_DIR_M_CREATE_PTR, OIDC_DIR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   87|      2|#define OIDC_DIR_M_CREATE_PTR(type, name) c->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   72|      2|	PTR(apr_array_header_t *, pass_userinfo_as)                                                                    \
  |  |  ------------------
  |  |  |  |  648|      2|	OIDC_DIR_CFG_SIMPLE_MEMBERS(OIDC_DIR_M_CREATE_PTR, OIDC_DIR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   87|      2|#define OIDC_DIR_M_CREATE_PTR(type, name) c->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   73|      2|	INT(unauth_action)                                                                                             \
  |  |  ------------------
  |  |  |  |  648|      2|	OIDC_DIR_CFG_SIMPLE_MEMBERS(OIDC_DIR_M_CREATE_PTR, OIDC_DIR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   88|      2|#define OIDC_DIR_M_CREATE_INT(name) c->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   74|      2|	INT(unautz_action)                                                                                             \
  |  |  ------------------
  |  |  |  |  648|      2|	OIDC_DIR_CFG_SIMPLE_MEMBERS(OIDC_DIR_M_CREATE_PTR, OIDC_DIR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   88|      2|#define OIDC_DIR_M_CREATE_INT(name) c->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   75|      2|	INT(pass_info_in)                                                                                              \
  |  |  ------------------
  |  |  |  |  648|      2|	OIDC_DIR_CFG_SIMPLE_MEMBERS(OIDC_DIR_M_CREATE_PTR, OIDC_DIR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   88|      2|#define OIDC_DIR_M_CREATE_INT(name) c->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   76|      2|	INT(pass_info_encoding)                                                                                        \
  |  |  ------------------
  |  |  |  |  648|      2|	OIDC_DIR_CFG_SIMPLE_MEMBERS(OIDC_DIR_M_CREATE_PTR, OIDC_DIR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   88|      2|#define OIDC_DIR_M_CREATE_INT(name) c->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   77|      2|	INT(oauth_accept_token_in)                                                                                     \
  |  |  ------------------
  |  |  |  |  648|      2|	OIDC_DIR_CFG_SIMPLE_MEMBERS(OIDC_DIR_M_CREATE_PTR, OIDC_DIR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   88|      2|#define OIDC_DIR_M_CREATE_INT(name) c->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   78|      2|	INT(preserve_post)                                                                                             \
  |  |  ------------------
  |  |  |  |  648|      2|	OIDC_DIR_CFG_SIMPLE_MEMBERS(OIDC_DIR_M_CREATE_PTR, OIDC_DIR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   88|      2|#define OIDC_DIR_M_CREATE_INT(name) c->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   79|      2|	INT(pass_access_token)                                                                                         \
  |  |  ------------------
  |  |  |  |  648|      2|	OIDC_DIR_CFG_SIMPLE_MEMBERS(OIDC_DIR_M_CREATE_PTR, OIDC_DIR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   88|      2|#define OIDC_DIR_M_CREATE_INT(name) c->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   80|      2|	INT(pass_refresh_token)                                                                                        \
  |  |  ------------------
  |  |  |  |  648|      2|	OIDC_DIR_CFG_SIMPLE_MEMBERS(OIDC_DIR_M_CREATE_PTR, OIDC_DIR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   88|      2|#define OIDC_DIR_M_CREATE_INT(name) c->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   81|      2|	INT(refresh_access_token_before_expiry)                                                                        \
  |  |  ------------------
  |  |  |  |  648|      2|	OIDC_DIR_CFG_SIMPLE_MEMBERS(OIDC_DIR_M_CREATE_PTR, OIDC_DIR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   88|      2|#define OIDC_DIR_M_CREATE_INT(name) c->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   82|      2|	INT(action_on_error_refresh)                                                                                   \
  |  |  ------------------
  |  |  |  |  648|      2|	OIDC_DIR_CFG_SIMPLE_MEMBERS(OIDC_DIR_M_CREATE_PTR, OIDC_DIR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   88|      2|#define OIDC_DIR_M_CREATE_INT(name) c->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   83|      2|	INT(pass_idtoken_as)
  |  |  ------------------
  |  |  |  |  648|      2|	OIDC_DIR_CFG_SIMPLE_MEMBERS(OIDC_DIR_M_CREATE_PTR, OIDC_DIR_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   88|      2|#define OIDC_DIR_M_CREATE_INT(name) c->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  649|      2|	c->oauth_accept_token_options = apr_hash_make(pool);
  650|      2|	c->oauth_token_introspect_interval = OIDC_INTROSPECT_INTERVAL_UNSET;
  ------------------
  |  |   53|      2|#define OIDC_INTROSPECT_INTERVAL_UNSET -2
  ------------------
  651|      2|	return c;
  652|      2|}
dir.c:oidc_cfg_dir_parse_pass_userinfo_as:
  145|      2|						       oidc_pass_user_info_as_t **result) {
  146|      2|	const char *rv = NULL;
  147|       |	/* only read when the parse below succeeds and has written it; seeded so the optimizer does not
  148|       |	 * have to prove that across the call (-Wmaybe-uninitialized) */
  149|      2|	oidc_pass_userinfo_enum_t type = OIDC_PASS_USERINFO_AS_CLAIMS;
  150|      2|	static const oidc_cfg_option_t options[] = {
  151|      2|	    {OIDC_PASS_USERINFO_AS_CLAIMS, OIDC_PASS_USERINFO_AS_CLAIMS_STR},
  ------------------
  |  |  136|      2|#define OIDC_PASS_USERINFO_AS_CLAIMS_STR "claims"
  ------------------
  152|      2|	    {OIDC_PASS_USERINFO_AS_JSON_OBJECT, OIDC_PASS_USERINFO_AS_JSON_OBJECT_STR},
  ------------------
  |  |  137|      2|#define OIDC_PASS_USERINFO_AS_JSON_OBJECT_STR "json"
  ------------------
  153|      2|	    {OIDC_PASS_USERINFO_AS_JWT, OIDC_PASS_USERINFO_AS_JWT_STR},
  ------------------
  |  |  138|      2|#define OIDC_PASS_USERINFO_AS_JWT_STR "jwt"
  ------------------
  154|      2|	    {OIDC_PASS_USERINFO_AS_SIGNED_JWT, OIDC_PASS_USERINFO_AS_SIGNED_JWT_STR}};
  ------------------
  |  |  139|      2|#define OIDC_PASS_USERINFO_AS_SIGNED_JWT_STR "signed_jwt"
  ------------------
  155|       |
  156|       |	/* split "<type>:<name>" without writing into `v`: oidc_cfg_dir_post_config passes the default
  157|       |	 * as a string literal, so truncating it in place would write to read-only memory. Copying out
  158|       |	 * just the type also avoids duplicating the whole string when there is no separator at all. */
  159|      2|	const char *sep = _oidc_strstr(v, ":");
  160|      2|	const char *value = (sep != NULL) ? apr_pstrndup(pool, v, (apr_size_t)(sep - v)) : v;
  ------------------
  |  Branch (160:22): [True: 0, False: 2]
  ------------------
  161|      2|	const char *name = (sep != NULL) ? sep + 1 : NULL;
  ------------------
  |  Branch (161:21): [True: 0, False: 2]
  ------------------
  162|       |
  163|      2|	rv = oidc_cfg_parse_option(pool, options, OIDC_CFG_OPTIONS_SIZE(options), value, (int *)&type);
  ------------------
  |  |  152|      2|#define OIDC_CFG_OPTIONS_SIZE(options) ((int)(sizeof(options) / sizeof(oidc_cfg_option_t)))
  ------------------
  164|      2|	if (rv != NULL)
  ------------------
  |  Branch (164:6): [True: 0, False: 2]
  ------------------
  165|      0|		return rv;
  166|       |
  167|      2|	*result = apr_pcalloc(pool, sizeof(oidc_pass_user_info_as_t));
  ------------------
  |  |  465|      2|#define apr_pcalloc(p, size) memset(apr_palloc(p, size), 0, size)
  ------------------
  168|      2|	(*result)->type = type;
  169|      2|	if (name)
  ------------------
  |  Branch (169:6): [True: 0, False: 2]
  ------------------
  170|      0|		(*result)->name = apr_pstrdup(pool, name);
  171|       |
  172|       |	return NULL;
  173|      2|}

oidc_cfg_oauth_create:
  378|      2|oidc_oauth_t *oidc_cfg_oauth_create(apr_pool_t *pool) {
  379|      2|	oidc_oauth_t *o = apr_pcalloc(pool, sizeof(oidc_oauth_t));
  ------------------
  |  |  465|      2|#define apr_pcalloc(p, size) memset(apr_palloc(p, size), 0, size)
  ------------------
  380|      2|	OIDC_OAUTH_CFG_SIMPLE_MEMBERS(OIDC_OAUTH_M_CREATE_PTR, OIDC_OAUTH_M_CREATE_INT)
  ------------------
  |  |   54|      2|	PTR(char *, metadata_url)                                                                                      \
  |  |  ------------------
  |  |  |  |  380|      2|	OIDC_OAUTH_CFG_SIMPLE_MEMBERS(OIDC_OAUTH_M_CREATE_PTR, OIDC_OAUTH_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   76|      2|#define OIDC_OAUTH_M_CREATE_PTR(type, name) o->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   55|      2|	PTR(char *, verify_jwks_uri)                                                                                   \
  |  |  ------------------
  |  |  |  |  380|      2|	OIDC_OAUTH_CFG_SIMPLE_MEMBERS(OIDC_OAUTH_M_CREATE_PTR, OIDC_OAUTH_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   76|      2|#define OIDC_OAUTH_M_CREATE_PTR(type, name) o->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   56|      2|	PTR(apr_array_header_t *, verify_aud_values)                                                                   \
  |  |  ------------------
  |  |  |  |  380|      2|	OIDC_OAUTH_CFG_SIMPLE_MEMBERS(OIDC_OAUTH_M_CREATE_PTR, OIDC_OAUTH_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   76|      2|#define OIDC_OAUTH_M_CREATE_PTR(type, name) o->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   57|      2|	PTR(char *, verify_issuer)                                                                                     \
  |  |  ------------------
  |  |  |  |  380|      2|	OIDC_OAUTH_CFG_SIMPLE_MEMBERS(OIDC_OAUTH_M_CREATE_PTR, OIDC_OAUTH_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   76|      2|#define OIDC_OAUTH_M_CREATE_PTR(type, name) o->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   58|      2|	PTR(apr_hash_t *, verify_shared_keys)                                                                          \
  |  |  ------------------
  |  |  |  |  380|      2|	OIDC_OAUTH_CFG_SIMPLE_MEMBERS(OIDC_OAUTH_M_CREATE_PTR, OIDC_OAUTH_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   76|      2|#define OIDC_OAUTH_M_CREATE_PTR(type, name) o->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   59|      2|	PTR(apr_hash_t *, decrypt_shared_keys)                                                                         \
  |  |  ------------------
  |  |  |  |  380|      2|	OIDC_OAUTH_CFG_SIMPLE_MEMBERS(OIDC_OAUTH_M_CREATE_PTR, OIDC_OAUTH_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   76|      2|#define OIDC_OAUTH_M_CREATE_PTR(type, name) o->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   60|      2|	PTR(char *, client_id)                                                                                         \
  |  |  ------------------
  |  |  |  |  380|      2|	OIDC_OAUTH_CFG_SIMPLE_MEMBERS(OIDC_OAUTH_M_CREATE_PTR, OIDC_OAUTH_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   76|      2|#define OIDC_OAUTH_M_CREATE_PTR(type, name) o->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      2|	PTR(char *, client_secret)                                                                                     \
  |  |  ------------------
  |  |  |  |  380|      2|	OIDC_OAUTH_CFG_SIMPLE_MEMBERS(OIDC_OAUTH_M_CREATE_PTR, OIDC_OAUTH_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   76|      2|#define OIDC_OAUTH_M_CREATE_PTR(type, name) o->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   62|      2|	PTR(char *, introspection_endpoint_url)                                                                        \
  |  |  ------------------
  |  |  |  |  380|      2|	OIDC_OAUTH_CFG_SIMPLE_MEMBERS(OIDC_OAUTH_M_CREATE_PTR, OIDC_OAUTH_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   76|      2|#define OIDC_OAUTH_M_CREATE_PTR(type, name) o->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   63|      2|	INT(introspection_endpoint_method)                                                                             \
  |  |  ------------------
  |  |  |  |  380|      2|	OIDC_OAUTH_CFG_SIMPLE_MEMBERS(OIDC_OAUTH_M_CREATE_PTR, OIDC_OAUTH_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   77|      2|#define OIDC_OAUTH_M_CREATE_INT(name) o->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   64|      2|	PTR(char *, introspection_token_param_name)                                                                    \
  |  |  ------------------
  |  |  |  |  380|      2|	OIDC_OAUTH_CFG_SIMPLE_MEMBERS(OIDC_OAUTH_M_CREATE_PTR, OIDC_OAUTH_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   76|      2|#define OIDC_OAUTH_M_CREATE_PTR(type, name) o->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   65|      2|	PTR(char *, introspection_endpoint_params)                                                                     \
  |  |  ------------------
  |  |  |  |  380|      2|	OIDC_OAUTH_CFG_SIMPLE_MEMBERS(OIDC_OAUTH_M_CREATE_PTR, OIDC_OAUTH_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   76|      2|#define OIDC_OAUTH_M_CREATE_PTR(type, name) o->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   66|      2|	PTR(char *, introspection_endpoint_auth)                                                                       \
  |  |  ------------------
  |  |  |  |  380|      2|	OIDC_OAUTH_CFG_SIMPLE_MEMBERS(OIDC_OAUTH_M_CREATE_PTR, OIDC_OAUTH_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   76|      2|#define OIDC_OAUTH_M_CREATE_PTR(type, name) o->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   67|      2|	PTR(char *, introspection_endpoint_auth_alg)                                                                   \
  |  |  ------------------
  |  |  |  |  380|      2|	OIDC_OAUTH_CFG_SIMPLE_MEMBERS(OIDC_OAUTH_M_CREATE_PTR, OIDC_OAUTH_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   76|      2|#define OIDC_OAUTH_M_CREATE_PTR(type, name) o->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   68|      2|	PTR(const char *, introspection_client_auth_bearer_token)                                                      \
  |  |  ------------------
  |  |  |  |  380|      2|	OIDC_OAUTH_CFG_SIMPLE_MEMBERS(OIDC_OAUTH_M_CREATE_PTR, OIDC_OAUTH_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   76|      2|#define OIDC_OAUTH_M_CREATE_PTR(type, name) o->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   69|      2|	PTR(char *, introspection_endpoint_tls_client_key)                                                             \
  |  |  ------------------
  |  |  |  |  380|      2|	OIDC_OAUTH_CFG_SIMPLE_MEMBERS(OIDC_OAUTH_M_CREATE_PTR, OIDC_OAUTH_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   76|      2|#define OIDC_OAUTH_M_CREATE_PTR(type, name) o->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   70|      2|	PTR(char *, introspection_endpoint_tls_client_key_pwd)                                                         \
  |  |  ------------------
  |  |  |  |  380|      2|	OIDC_OAUTH_CFG_SIMPLE_MEMBERS(OIDC_OAUTH_M_CREATE_PTR, OIDC_OAUTH_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   76|      2|#define OIDC_OAUTH_M_CREATE_PTR(type, name) o->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   71|      2|	PTR(char *, introspection_endpoint_tls_client_cert)                                                            \
  |  |  ------------------
  |  |  |  |  380|      2|	OIDC_OAUTH_CFG_SIMPLE_MEMBERS(OIDC_OAUTH_M_CREATE_PTR, OIDC_OAUTH_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   76|      2|#define OIDC_OAUTH_M_CREATE_PTR(type, name) o->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   72|      2|	INT(ssl_validate_server)
  |  |  ------------------
  |  |  |  |  380|      2|	OIDC_OAUTH_CFG_SIMPLE_MEMBERS(OIDC_OAUTH_M_CREATE_PTR, OIDC_OAUTH_M_CREATE_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   77|      2|#define OIDC_OAUTH_M_CREATE_INT(name) o->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  381|      2|	o->verify_public_keys = NULL;
  382|      2|	o->introspection_token_expiry_claim_name = NULL;
  383|      2|	o->introspection_token_expiry_claim_format = OIDC_TOKEN_EXPIRY_CLAIM_FORMAT_RELATIVE;
  384|      2|	o->introspection_token_expiry_claim_required = OIDC_TOKEN_EXPIRY_CLAIM_REQUIRED_MANDATORY;
  385|      2|	o->remote_user_claim.claim_name = NULL;
  386|      2|	o->remote_user_claim.reg_exp = NULL;
  387|       |	o->remote_user_claim.replace = NULL;
  388|      2|	return o;
  389|      2|}

oidc_cfg_parse_option:
  125|      2|char *oidc_cfg_parse_option(apr_pool_t *pool, const oidc_cfg_option_t options[], int n, const char *arg, int *v) {
  126|      2|	return oidc_cfg_parse_option_impl(pool, options, n, arg, v, _oidc_strcmp);
  127|      2|}
oidc_cfg_parse_is_valid_http_url:
  305|      2|const char *oidc_cfg_parse_is_valid_http_url(apr_pool_t *pool, const char *arg) {
  306|      2|	return oidc_cfg_parse_is_valid_url_scheme(pool, arg, "https", "http");
  307|      2|}
parse.c:oidc_cfg_parse_option_impl:
  110|      2|					int *v, int (*fstrcmp)(const char *, const char *)) {
  111|      2|	int i = 0;
  112|      2|	while ((i < n) && (fstrcmp(arg, options[i].str) != 0))
  ------------------
  |  Branch (112:9): [True: 2, False: 0]
  |  Branch (112:20): [True: 0, False: 2]
  ------------------
  113|      0|		i++;
  114|      2|	if (i < n) {
  ------------------
  |  Branch (114:6): [True: 2, False: 0]
  ------------------
  115|      2|		*v = options[i].val;
  116|      2|		return NULL;
  117|      2|	}
  118|      0|	return apr_psprintf(pool, "invalid value %s%s%s, must be one of %s", OIDC_LIST_OPTIONS_QUOTE, arg,
  ------------------
  |  |   56|      0|#define OIDC_LIST_OPTIONS_QUOTE "'"
  ------------------
  119|      0|			    OIDC_LIST_OPTIONS_QUOTE, oidc_cfg_parse_options_flatten(pool, options, n));
  ------------------
  |  |   56|      0|#define OIDC_LIST_OPTIONS_QUOTE "'"
  ------------------
  120|      2|}
parse.c:oidc_cfg_parse_is_valid_url_scheme:
  265|      2|						      const char *scheme2) {
  266|       |
  267|      2|	apr_uri_t uri;
  268|       |
  269|      2|	if (arg == NULL)
  ------------------
  |  Branch (269:6): [True: 0, False: 2]
  ------------------
  270|      0|		return apr_psprintf(pool, "input cannot be empty");
  271|       |
  272|      2|	if (apr_uri_parse(pool, arg, &uri) != APR_SUCCESS)
  ------------------
  |  |  225|      2|#define APR_SUCCESS 0
  ------------------
  |  Branch (272:6): [True: 0, False: 2]
  ------------------
  273|      0|		return apr_psprintf(pool, "'%s' cannot be parsed as a URL", arg);
  274|       |
  275|      2|	if (uri.scheme == NULL)
  ------------------
  |  Branch (275:6): [True: 0, False: 2]
  ------------------
  276|      0|		return apr_psprintf(pool, "'%s' cannot be parsed as a URL (no scheme set)", arg);
  277|       |
  278|      2|	if ((scheme1 != NULL) && (_oidc_strnatcasecmp(uri.scheme, scheme1) != 0)) {
  ------------------
  |  Branch (278:6): [True: 2, False: 0]
  |  Branch (278:27): [True: 0, False: 2]
  ------------------
  279|      0|		if ((scheme2 != NULL) && (_oidc_strnatcasecmp(uri.scheme, scheme2) != 0)) {
  ------------------
  |  Branch (279:7): [True: 0, False: 0]
  |  Branch (279:28): [True: 0, False: 0]
  ------------------
  280|      0|			return apr_psprintf(pool, "'%s' cannot be parsed as a \"%s\" or \"%s\" URL (scheme == %s)!",
  281|      0|					    arg, scheme1, scheme2, uri.scheme);
  282|      0|		} else if (scheme2 == NULL) {
  ------------------
  |  Branch (282:14): [True: 0, False: 0]
  ------------------
  283|      0|			return apr_psprintf(pool, "'%s' cannot be parsed as a \"%s\" URL (scheme == %s)!", arg, scheme1,
  284|      0|					    uri.scheme);
  285|      0|		}
  286|      0|	}
  287|       |
  288|      2|	if (uri.hostname == NULL)
  ------------------
  |  Branch (288:6): [True: 0, False: 2]
  ------------------
  289|      0|		return apr_psprintf(pool, "'%s' cannot be parsed as a valid URL (no hostname set, check your slashes)",
  290|      0|				    arg);
  291|       |
  292|      2|	return NULL;
  293|      2|}

oidc_cfg_provider_authorization_endpoint_url_valid:
  188|      2|	const char *oidc_cfg_provider_##member##_valid(apr_pool_t *pool, const char *arg) {                            \
  189|      2|		return fvalid(pool, arg);                                                                              \
  190|      2|	}                                                                                                              \
oidc_cfg_provider_create:
  791|      2|oidc_provider_t *oidc_cfg_provider_create(apr_pool_t *pool) {
  792|      2|	oidc_provider_t *provider = apr_pcalloc(pool, sizeof(oidc_provider_t));
  ------------------
  |  |  465|      2|#define apr_pcalloc(p, size) memset(apr_palloc(p, size), 0, size)
  ------------------
  793|      2|	oidc_cfg_provider_init(provider);
  794|      2|	return provider;
  795|      2|}
provider.c:oidc_cfg_provider_init:
  764|      2|static void oidc_cfg_provider_init(oidc_provider_t *provider) {
  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  ------------------
  |  |   53|      2|	PTR(char *, metadata_url)                                                                                      \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  105|      2|#define OIDC_PROVIDER_M_INIT_PTR(type, name) provider->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   54|      2|	PTR(char *, issuer)                                                                                            \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  105|      2|#define OIDC_PROVIDER_M_INIT_PTR(type, name) provider->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   55|      2|	PTR(char *, authorization_endpoint_url)                                                                        \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  105|      2|#define OIDC_PROVIDER_M_INIT_PTR(type, name) provider->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   56|      2|	PTR(char *, token_endpoint_url)                                                                                \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  105|      2|#define OIDC_PROVIDER_M_INIT_PTR(type, name) provider->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   57|      2|	PTR(char *, token_endpoint_auth)                                                                               \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  105|      2|#define OIDC_PROVIDER_M_INIT_PTR(type, name) provider->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   58|      2|	PTR(char *, token_endpoint_auth_alg)                                                                           \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  105|      2|#define OIDC_PROVIDER_M_INIT_PTR(type, name) provider->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   59|      2|	PTR(char *, token_endpoint_params)                                                                             \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  105|      2|#define OIDC_PROVIDER_M_INIT_PTR(type, name) provider->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   60|      2|	PTR(char *, userinfo_endpoint_url)                                                                             \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  105|      2|#define OIDC_PROVIDER_M_INIT_PTR(type, name) provider->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      2|	PTR(char *, revocation_endpoint_url)                                                                           \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  105|      2|#define OIDC_PROVIDER_M_INIT_PTR(type, name) provider->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   62|      2|	PTR(char *, registration_endpoint_url)                                                                         \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  105|      2|#define OIDC_PROVIDER_M_INIT_PTR(type, name) provider->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   63|      2|	PTR(char *, pushed_authorization_request_endpoint_url)                                                         \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  105|      2|#define OIDC_PROVIDER_M_INIT_PTR(type, name) provider->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   64|      2|	PTR(char *, check_session_iframe)                                                                              \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  105|      2|#define OIDC_PROVIDER_M_INIT_PTR(type, name) provider->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   65|      2|	PTR(char *, end_session_endpoint)                                                                              \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  105|      2|#define OIDC_PROVIDER_M_INIT_PTR(type, name) provider->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   66|      2|	PTR(char *, client_id)                                                                                         \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  105|      2|#define OIDC_PROVIDER_M_INIT_PTR(type, name) provider->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   67|      2|	PTR(char *, client_secret)                                                                                     \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  105|      2|#define OIDC_PROVIDER_M_INIT_PTR(type, name) provider->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   68|      2|	PTR(char *, token_endpoint_tls_client_key)                                                                     \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  105|      2|#define OIDC_PROVIDER_M_INIT_PTR(type, name) provider->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   69|      2|	PTR(char *, token_endpoint_tls_client_key_pwd)                                                                 \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  105|      2|#define OIDC_PROVIDER_M_INIT_PTR(type, name) provider->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   70|      2|	PTR(char *, token_endpoint_tls_client_cert)                                                                    \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  105|      2|#define OIDC_PROVIDER_M_INIT_PTR(type, name) provider->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   71|      2|	PTR(char *, client_name)                                                                                       \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  105|      2|#define OIDC_PROVIDER_M_INIT_PTR(type, name) provider->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   72|      2|	PTR(char *, client_contact)                                                                                    \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  105|      2|#define OIDC_PROVIDER_M_INIT_PTR(type, name) provider->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   73|      2|	PTR(char *, registration_token)                                                                                \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  105|      2|#define OIDC_PROVIDER_M_INIT_PTR(type, name) provider->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   74|      2|	PTR(char *, registration_endpoint_json)                                                                        \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  105|      2|#define OIDC_PROVIDER_M_INIT_PTR(type, name) provider->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   75|      2|	PTR(char *, scope)                                                                                             \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  105|      2|#define OIDC_PROVIDER_M_INIT_PTR(type, name) provider->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   76|      2|	PTR(char *, response_type)                                                                                     \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  105|      2|#define OIDC_PROVIDER_M_INIT_PTR(type, name) provider->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   77|      2|	PTR(char *, response_mode)                                                                                     \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  105|      2|#define OIDC_PROVIDER_M_INIT_PTR(type, name) provider->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   78|      2|	PTR(char *, auth_request_params)                                                                               \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  105|      2|#define OIDC_PROVIDER_M_INIT_PTR(type, name) provider->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   79|      2|	PTR(char *, logout_request_params)                                                                             \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  105|      2|#define OIDC_PROVIDER_M_INIT_PTR(type, name) provider->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   80|      2|	PTR(char *, client_jwks_uri)                                                                                   \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  105|      2|#define OIDC_PROVIDER_M_INIT_PTR(type, name) provider->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   81|      2|	PTR(char *, id_token_signed_response_alg)                                                                      \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  105|      2|#define OIDC_PROVIDER_M_INIT_PTR(type, name) provider->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   82|      2|	PTR(char *, id_token_encrypted_response_alg)                                                                   \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  105|      2|#define OIDC_PROVIDER_M_INIT_PTR(type, name) provider->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   83|      2|	PTR(char *, id_token_encrypted_response_enc)                                                                   \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  105|      2|#define OIDC_PROVIDER_M_INIT_PTR(type, name) provider->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   84|      2|	PTR(char *, userinfo_signed_response_alg)                                                                      \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  105|      2|#define OIDC_PROVIDER_M_INIT_PTR(type, name) provider->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   85|      2|	PTR(char *, userinfo_encrypted_response_alg)                                                                   \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  105|      2|#define OIDC_PROVIDER_M_INIT_PTR(type, name) provider->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   86|      2|	PTR(char *, userinfo_encrypted_response_enc)                                                                   \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  105|      2|#define OIDC_PROVIDER_M_INIT_PTR(type, name) provider->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   87|      2|	PTR(char *, request_object)                                                                                    \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  105|      2|#define OIDC_PROVIDER_M_INIT_PTR(type, name) provider->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   88|      2|	PTR(oidc_proto_pkce_t *, pkce)                                                                                 \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  105|      2|#define OIDC_PROVIDER_M_INIT_PTR(type, name) provider->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   89|      2|	PTR(apr_array_header_t *, id_token_aud_values)                                                                 \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  105|      2|#define OIDC_PROVIDER_M_INIT_PTR(type, name) provider->name = NULL;
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   90|      2|	INT(int, backchannel_logout_supported)                                                                         \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  106|      2|#define OIDC_PROVIDER_M_INIT_INT(type, name) provider->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   91|      2|	INT(int, ssl_validate_server)                                                                                  \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  106|      2|#define OIDC_PROVIDER_M_INIT_INT(type, name) provider->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   92|      2|	INT(int, validate_issuer)                                                                                      \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  106|      2|#define OIDC_PROVIDER_M_INIT_INT(type, name) provider->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   93|      2|	INT(int, idtoken_iat_slack)                                                                                    \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  106|      2|#define OIDC_PROVIDER_M_INIT_INT(type, name) provider->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   94|      2|	INT(int, session_max_duration)                                                                                 \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  106|      2|#define OIDC_PROVIDER_M_INIT_INT(type, name) provider->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   95|      2|	INT(oidc_dpop_mode_t, dpop_mode)                                                                               \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  106|      2|#define OIDC_PROVIDER_M_INIT_INT(type, name) provider->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   96|      2|	INT(oidc_cert_bound_tokens_t, cert_bound_tokens)                                                               \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  106|      2|#define OIDC_PROVIDER_M_INIT_INT(type, name) provider->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   97|      2|	INT(int, dpop_supported)                                                                                       \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  106|      2|#define OIDC_PROVIDER_M_INIT_INT(type, name) provider->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   98|      2|	INT(int, userinfo_refresh_interval)                                                                            \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  106|      2|#define OIDC_PROVIDER_M_INIT_INT(type, name) provider->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   99|      2|	INT(oidc_userinfo_token_method_t, userinfo_token_method)                                                       \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  106|      2|#define OIDC_PROVIDER_M_INIT_INT(type, name) provider->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  100|      2|	INT(oidc_auth_request_method_t, auth_request_method)                                                           \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  106|      2|#define OIDC_PROVIDER_M_INIT_INT(type, name) provider->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  101|      2|	INT(oidc_profile_t, profile)                                                                                   \
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  106|      2|#define OIDC_PROVIDER_M_INIT_INT(type, name) provider->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  102|      2|	INT(int, response_require_iss)
  |  |  ------------------
  |  |  |  |  765|      2|	OIDC_PROVIDER_CFG_SIMPLE_MEMBERS(OIDC_PROVIDER_M_INIT_PTR, OIDC_PROVIDER_M_INIT_INT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  106|      2|#define OIDC_PROVIDER_M_INIT_INT(type, name) provider->name = OIDC_CONFIG_POS_INT_UNSET;
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  766|      2|	provider->jwks_uri.uri = NULL;
  767|      2|	provider->jwks_uri.refresh_interval = OIDC_CONFIG_POS_INT_UNSET;
  ------------------
  |  |   57|      2|#define OIDC_CONFIG_POS_INT_UNSET -1
  ------------------
  768|      2|	provider->jwks_uri.signed_uri = NULL;
  769|      2|	provider->jwks_uri.jwk_list = NULL;
  770|      2|	provider->verify_public_keys = NULL;
  771|       |	provider->client_keys = NULL;
  772|      2|}

util.c:_oidc_strlen:
   90|      4|static inline size_t _oidc_strlen(const char *s) {
   91|      4|	return (s ? strlen(s) : 0);
  ------------------
  |  Branch (91:10): [True: 4, False: 0]
  ------------------
   92|      4|}
dir.c:_oidc_strstr:
  107|      2|static inline char *_oidc_strstr(const char *a, const char *b) {
  108|      2|	return ((a && b) ? (char *)strstr(a, b) : NULL);
  ------------------
  |  Branch (108:11): [True: 2, False: 0]
  |  Branch (108:16): [True: 2, False: 0]
  ------------------
  109|      2|}
parse.c:_oidc_strcmp:
   98|      2|static inline int _oidc_strcmp(const char *a, const char *b) {
   99|      2|	return ((a && b) ? strcmp(a, b) : -1);
  ------------------
  |  Branch (99:11): [True: 2, False: 0]
  |  Branch (99:16): [True: 2, False: 0]
  ------------------
  100|      2|}
parse.c:_oidc_strnatcasecmp:
  101|      2|static inline int _oidc_strnatcasecmp(const char *a, const char *b) {
  102|      2|	return ((a && b) ? apr_strnatcasecmp(a, b) : -1);
  ------------------
  |  Branch (102:11): [True: 2, False: 0]
  |  Branch (102:16): [True: 2, False: 0]
  ------------------
  103|      2|}
key.c:_oidc_strlen:
   90|      4|static inline size_t _oidc_strlen(const char *s) {
   91|      4|	return (s ? strlen(s) : 0);
  ------------------
  |  Branch (91:10): [True: 4, False: 0]
  ------------------
   92|      4|}
url.c:_oidc_strnatcasecmp:
  101|  5.67k|static inline int _oidc_strnatcasecmp(const char *a, const char *b) {
  102|  5.67k|	return ((a && b) ? apr_strnatcasecmp(a, b) : -1);
  ------------------
  |  Branch (102:11): [True: 5.67k, False: 0]
  |  Branch (102:16): [True: 5.67k, False: 0]
  ------------------
  103|  5.67k|}
url.c:_oidc_strcmp:
   98|    754|static inline int _oidc_strcmp(const char *a, const char *b) {
   99|    754|	return ((a && b) ? strcmp(a, b) : -1);
  ------------------
  |  Branch (99:11): [True: 754, False: 0]
  |  Branch (99:16): [True: 754, False: 0]
  ------------------
  100|    754|}
http.c:_oidc_strlen:
   90|    276|static inline size_t _oidc_strlen(const char *s) {
   91|    276|	return (s ? strlen(s) : 0);
  ------------------
  |  Branch (91:10): [True: 276, False: 0]
  ------------------
   92|    276|}
http.c:_oidc_strstr:
  107|    552|static inline char *_oidc_strstr(const char *a, const char *b) {
  108|    552|	return ((a && b) ? (char *)strstr(a, b) : NULL);
  ------------------
  |  Branch (108:11): [True: 552, False: 0]
  |  Branch (108:16): [True: 552, False: 0]
  ------------------
  109|    552|}

oidc_http_hdr_in_x_forwarded_proto_get:
  370|  5.10k|const char *oidc_http_hdr_in_x_forwarded_proto_get(const request_rec *r) {
  371|  5.10k|	return oidc_http_hdr_in_get_left_most_only(r, OIDC_HTTP_HDR_X_FORWARDED_PROTO, OIDC_STR_COMMA OIDC_STR_SPACE);
  ------------------
  |  |   77|  5.10k|#define OIDC_HTTP_HDR_X_FORWARDED_PROTO "X-Forwarded-Proto"
  ------------------
              	return oidc_http_hdr_in_get_left_most_only(r, OIDC_HTTP_HDR_X_FORWARDED_PROTO, OIDC_STR_COMMA OIDC_STR_SPACE);
  ------------------
  |  |  209|  5.10k|#define OIDC_STR_COMMA ","
  ------------------
              	return oidc_http_hdr_in_get_left_most_only(r, OIDC_HTTP_HDR_X_FORWARDED_PROTO, OIDC_STR_COMMA OIDC_STR_SPACE);
  ------------------
  |  |  201|  5.10k|#define OIDC_STR_SPACE " "
  ------------------
  372|  5.10k|}
oidc_http_hdr_in_x_forwarded_port_get:
  377|  4.17k|const char *oidc_http_hdr_in_x_forwarded_port_get(const request_rec *r) {
  378|  4.17k|	return oidc_http_hdr_in_get_left_most_only(r, OIDC_HTTP_HDR_X_FORWARDED_PORT, OIDC_STR_COMMA OIDC_STR_SPACE);
  ------------------
  |  |   78|  4.17k|#define OIDC_HTTP_HDR_X_FORWARDED_PORT "X-Forwarded-Port"
  ------------------
              	return oidc_http_hdr_in_get_left_most_only(r, OIDC_HTTP_HDR_X_FORWARDED_PORT, OIDC_STR_COMMA OIDC_STR_SPACE);
  ------------------
  |  |  209|  4.17k|#define OIDC_STR_COMMA ","
  ------------------
              	return oidc_http_hdr_in_get_left_most_only(r, OIDC_HTTP_HDR_X_FORWARDED_PORT, OIDC_STR_COMMA OIDC_STR_SPACE);
  ------------------
  |  |  201|  4.17k|#define OIDC_STR_SPACE " "
  ------------------
  379|  4.17k|}
oidc_http_hdr_in_x_forwarded_host_get:
  384|  6.28k|const char *oidc_http_hdr_in_x_forwarded_host_get(const request_rec *r) {
  385|  6.28k|	return oidc_http_hdr_in_get_left_most_only(r, OIDC_HTTP_HDR_X_FORWARDED_HOST, OIDC_STR_COMMA OIDC_STR_SPACE);
  ------------------
  |  |   79|  6.28k|#define OIDC_HTTP_HDR_X_FORWARDED_HOST "X-Forwarded-Host"
  ------------------
              	return oidc_http_hdr_in_get_left_most_only(r, OIDC_HTTP_HDR_X_FORWARDED_HOST, OIDC_STR_COMMA OIDC_STR_SPACE);
  ------------------
  |  |  209|  6.28k|#define OIDC_STR_COMMA ","
  ------------------
              	return oidc_http_hdr_in_get_left_most_only(r, OIDC_HTTP_HDR_X_FORWARDED_HOST, OIDC_STR_COMMA OIDC_STR_SPACE);
  ------------------
  |  |  201|  6.28k|#define OIDC_STR_SPACE " "
  ------------------
  386|  6.28k|}
oidc_http_hdr_in_forwarded_get:
  391|  6.63k|const char *oidc_http_hdr_in_forwarded_get(const request_rec *r) {
  392|  6.63k|	return oidc_http_hdr_in_get_left_most_only(r, OIDC_HTTP_HDR_FORWARDED, OIDC_STR_COMMA);
  ------------------
  |  |   80|  6.63k|#define OIDC_HTTP_HDR_FORWARDED "Forwarded"
  ------------------
              	return oidc_http_hdr_in_get_left_most_only(r, OIDC_HTTP_HDR_FORWARDED, OIDC_STR_COMMA);
  ------------------
  |  |  209|  6.63k|#define OIDC_STR_COMMA ","
  ------------------
  393|  6.63k|}
oidc_http_hdr_in_host_get:
  398|  8.32k|const char *oidc_http_hdr_in_host_get(const request_rec *r) {
  399|  8.32k|	return oidc_http_hdr_in_get(r, OIDC_HTTP_HDR_HOST);
  ------------------
  |  |   81|  8.32k|#define OIDC_HTTP_HDR_HOST "Host"
  ------------------
  400|  8.32k|}
oidc_http_hdr_forwarded_get:
  426|  3.59k|const char *oidc_http_hdr_forwarded_get(const request_rec *r, const char *elem) {
  427|  3.59k|	const char *value = NULL;
  428|  3.59k|	char *ptr = NULL;
  429|  3.59k|	const char *item = apr_psprintf(r->pool, "%s=", elem);
  430|  3.59k|	value = oidc_http_hdr_in_forwarded_get(r);
  431|  3.59k|	value = oidc_util_strcasestr(value, item);
  432|  3.59k|	if (value) {
  ------------------
  |  Branch (432:6): [True: 276, False: 3.31k]
  ------------------
  433|    276|		value += _oidc_strlen(item);
  434|    276|		ptr = _oidc_strstr(value, ";");
  435|    276|		if (ptr)
  ------------------
  |  Branch (435:7): [True: 19, False: 257]
  ------------------
  436|     19|			*ptr = '\0';
  437|    276|		ptr = _oidc_strstr(value, " ");
  438|    276|		if (ptr)
  ------------------
  |  Branch (438:7): [True: 19, False: 257]
  ------------------
  439|     19|			*ptr = '\0';
  440|    276|	}
  441|  3.59k|	return value ? apr_pstrdup(r->pool, value) : NULL;
  ------------------
  |  Branch (441:9): [True: 276, False: 3.31k]
  ------------------
  442|  3.59k|}
oidc_http_curl_pool_init:
 1640|      2|void oidc_http_curl_pool_init(apr_pool_t *pool) {
 1641|      2|	if (_oidc_http_curl_pool_enabled == TRUE)
  ------------------
  |  |   55|      2|#define TRUE (!FALSE)
  |  |  ------------------
  |  |  |  |   51|      2|#define FALSE 0
  |  |  ------------------
  ------------------
  |  Branch (1641:6): [True: 0, False: 2]
  ------------------
 1642|      0|		return;
 1643|      2|#if APR_HAS_THREADS
 1644|      2|	if (apr_thread_mutex_create(&_oidc_http_curl_pool_mutex, APR_THREAD_MUTEX_DEFAULT, pool) != APR_SUCCESS)
  ------------------
  |  |   43|      2|#define APR_THREAD_MUTEX_DEFAULT  0x0   /**< platform-optimal lock behavior */
  ------------------
              	if (apr_thread_mutex_create(&_oidc_http_curl_pool_mutex, APR_THREAD_MUTEX_DEFAULT, pool) != APR_SUCCESS)
  ------------------
  |  |  225|      2|#define APR_SUCCESS 0
  ------------------
  |  Branch (1644:6): [True: 0, False: 2]
  ------------------
 1645|      0|		return;
 1646|      2|#endif
 1647|      2|	_oidc_http_curl_pool_num = 0;
 1648|      2|	_oidc_http_curl_pool_enabled = TRUE;
  ------------------
  |  |   55|      2|#define TRUE (!FALSE)
  |  |  ------------------
  |  |  |  |   51|      2|#define FALSE 0
  |  |  ------------------
  ------------------
 1649|       |	apr_pool_cleanup_register(pool, NULL, oidc_http_curl_pool_cleanup, apr_pool_cleanup_null);
 1650|      2|}
http.c:oidc_http_hdr_in_get:
  160|  30.5k|static const char *oidc_http_hdr_in_get(const request_rec *r, const char *name) {
  161|  30.5k|	const char *value = apr_table_get(r->headers_in, name);
  162|  30.5k|	if (value)
  ------------------
  |  Branch (162:6): [True: 3.16k, False: 27.3k]
  ------------------
  163|       |		oidc_debug(r, "%s=%s", name, value);
  ------------------
  |  |  170|  30.5k|#define oidc_debug(r, fmt, ...) oidc_log(r, OIDC_DEBUG, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |  165|  30.5k|	ap_log_rerror(APLOG_MARK, level, 0, r, "%s: %s", __FUNCTION__, apr_psprintf(r->pool, fmt, ##__VA_ARGS__))
  |  |  |  |  ------------------
  |  |  |  |  |  |  448|  3.16k|#define ap_log_rerror(...) ap_log_rerror__(__VA_ARGS__)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  450|  3.16k|    do { if (APLOG_R_MODULE_IS_LEVEL(r, mi, level))                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  196|  3.16k|          ( (((level)&APLOG_LEVELMASK) <= APLOG_NOTICE) ||       \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|  3.16k|#define APLOG_LEVELMASK 15     /* mask off the level value */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                         ( (((level)&APLOG_LEVELMASK) <= APLOG_NOTICE) ||       \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   48|  3.16k|#define APLOG_NOTICE    LOG_NOTICE      /* normal but significant condition */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (196:13): [Folded, False: 3.16k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  197|  3.16k|            (ap_get_request_module_loglevel(r, module_index)     \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  635|  3.16k|    (ap_get_module_loglevel(ap_get_request_logconf(r),i))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  621|  12.6k|    (((i) < 0 || (l)->module_levels == NULL || (l)->module_levels[i] < 0) ?  \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:7): [True: 0, False: 3.16k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:8): [True: 3.16k, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:18): [True: 3.16k, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:19): [True: 0, False: 3.16k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:19): [True: 0, False: 3.16k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:48): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:49): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:49): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:67): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  622|  12.6k|     (l)->level :                                                         \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (622:7): [True: 0, False: 3.16k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (622:7): [True: 0, False: 3.16k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  623|  3.16k|     (l)->module_levels[i])
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (623:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (623:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (623:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (197:13): [True: 0, False: 3.16k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  198|  3.16k|             >= ((level)&APLOG_LEVELMASK) ) )
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|  3.16k|#define APLOG_LEVELMASK 15     /* mask off the level value */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  451|  3.16k|             ap_log_rerror_(file, line, mi, level, status, r, __VA_ARGS__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (451:41): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  452|  3.16k|    } while(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (452:13): [Folded, False: 3.16k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  164|  30.5k|	return value;
  165|  30.5k|}
http.c:oidc_http_hdr_in_get_left_most_only:
  170|  22.2k|static const char *oidc_http_hdr_in_get_left_most_only(const request_rec *r, const char *name, const char *separator) {
  171|  22.2k|	char *last = NULL;
  172|  22.2k|	const char *value = oidc_http_hdr_in_get(r, name);
  173|  22.2k|	if (value)
  ------------------
  |  Branch (173:6): [True: 2.44k, False: 19.7k]
  ------------------
  174|  2.44k|		return apr_strtok(apr_pstrdup(r->pool, value), separator, &last);
  175|  19.7k|	return NULL;
  176|  22.2k|}

oidc_util_key_derive_passphrase_key:
   60|      2|apr_byte_t oidc_util_key_derive_passphrase_key(const char *passphrase, unsigned char *out, apr_size_t out_len) {
   61|      2|	if ((passphrase == NULL) || (_oidc_strlen(passphrase) == 0))
  ------------------
  |  Branch (61:6): [True: 0, False: 2]
  |  Branch (61:30): [True: 0, False: 2]
  ------------------
   62|      0|		return FALSE;
  ------------------
  |  |   51|      0|#define FALSE 0
  ------------------
   63|      2|	return (PKCS5_PBKDF2_HMAC(passphrase, (int)_oidc_strlen(passphrase),
  ------------------
  |  Branch (63:9): [True: 2, False: 0]
  ------------------
   64|      2|				  (const unsigned char *)OIDC_UTIL_KEY_DERIVE_SALT,
  ------------------
  |  |   53|      2|#define OIDC_UTIL_KEY_DERIVE_SALT "mod_auth_openidc-crypto-passphrase-v1"
  ------------------
   65|      2|				  (int)(sizeof(OIDC_UTIL_KEY_DERIVE_SALT) - 1), OIDC_UTIL_KEY_DERIVE_ITERATIONS,
  ------------------
  |  |   53|      2|#define OIDC_UTIL_KEY_DERIVE_SALT "mod_auth_openidc-crypto-passphrase-v1"
  ------------------
              				  (int)(sizeof(OIDC_UTIL_KEY_DERIVE_SALT) - 1), OIDC_UTIL_KEY_DERIVE_ITERATIONS,
  ------------------
  |  |   49|      2|#define OIDC_UTIL_KEY_DERIVE_ITERATIONS 210000
  ------------------
   66|      2|				  EVP_sha256(), (int)out_len, out) == 1)
   67|      2|		   ? TRUE
  ------------------
  |  |   55|      2|#define TRUE (!FALSE)
  |  |  ------------------
  |  |  |  |   51|      2|#define FALSE 0
  |  |  ------------------
  ------------------
   68|      2|		   : FALSE;
  ------------------
  |  |   51|      2|#define FALSE 0
  ------------------
   69|      2|}

oidc_util_url_cur_host:
  171|  5.68k|const char *oidc_util_url_cur_host(request_rec *r, oidc_hdr_x_forwarded_t x_forwarded_headers) {
  172|  5.68k|	const char *host_str = NULL;
  173|  5.68k|	char *p = NULL;
  174|       |
  175|  5.68k|	if (x_forwarded_headers & OIDC_HDR_FORWARDED)
  ------------------
  |  Branch (175:6): [True: 1.50k, False: 4.17k]
  ------------------
  176|  1.50k|		host_str = oidc_http_hdr_forwarded_get(r, "host");
  177|  5.68k|	if ((host_str == NULL) && (x_forwarded_headers & OIDC_HDR_X_FORWARDED_HOST))
  ------------------
  |  Branch (177:6): [True: 5.52k, False: 156]
  |  Branch (177:28): [True: 2.18k, False: 3.34k]
  ------------------
  178|  2.18k|		host_str = oidc_http_hdr_in_x_forwarded_host_get(r);
  179|       |
  180|  5.68k|	if (host_str == NULL)
  ------------------
  |  Branch (180:6): [True: 5.44k, False: 236]
  ------------------
  181|  5.44k|		host_str = oidc_http_hdr_in_host_get(r);
  182|  5.68k|	if (host_str) {
  ------------------
  |  Branch (182:6): [True: 704, False: 4.98k]
  ------------------
  183|    704|		char *dup = apr_pstrdup(r->pool, host_str);
  184|       |
  185|    704|		if (dup[0] == '[') {
  ------------------
  |  Branch (185:7): [True: 122, False: 582]
  ------------------
  186|    122|			p = strchr(dup, ']');
  187|    122|			if (p)
  ------------------
  |  Branch (187:8): [True: 35, False: 87]
  ------------------
  188|     35|				p = strchr(p, OIDC_CHAR_COLON);
  ------------------
  |  |  188|     35|#define OIDC_CHAR_COLON ':'
  ------------------
  189|    582|		} else {
  190|    582|			p = strchr(dup, OIDC_CHAR_COLON);
  ------------------
  |  |  188|    582|#define OIDC_CHAR_COLON ':'
  ------------------
  191|    582|		}
  192|       |
  193|    704|		if (p != NULL)
  ------------------
  |  Branch (193:7): [True: 83, False: 621]
  ------------------
  194|     83|			*p = '\0';
  195|    704|		host_str = dup;
  196|  4.98k|	} else {
  197|       |		/* no Host header, HTTP 1.0 */
  198|  4.98k|		host_str = ap_get_server_name(r);
  199|  4.98k|	}
  200|       |
  201|  5.68k|	return host_str;
  202|  5.68k|}
oidc_util_url_cur:
  228|  2.63k|char *oidc_util_url_cur(request_rec *r, oidc_hdr_x_forwarded_t x_forwarded_headers) {
  229|  2.63k|	char *url = NULL;
  230|  2.63k|	char *path = NULL;
  231|  2.63k|	apr_uri_t uri;
  232|       |
  233|  2.63k|	path = r->uri;
  234|       |
  235|       |	/* check if we're dealing with a forward proxying secenario i.e. a non-relative URL */
  236|  2.63k|	if (path && (path[0] != '/')) {
  ------------------
  |  Branch (236:6): [True: 2.63k, False: 0]
  |  Branch (236:14): [True: 2.43k, False: 203]
  ------------------
  237|  2.43k|		_oidc_memset(&uri, 0, sizeof(apr_uri_t));
  ------------------
  |  |   84|  2.43k|#define _oidc_memset(b, c, __len) memset(b, c, __len)
  ------------------
  238|  2.43k|		if (apr_uri_parse(r->pool, r->uri, &uri) == APR_SUCCESS)
  ------------------
  |  |  225|  2.43k|#define APR_SUCCESS 0
  ------------------
  |  Branch (238:7): [True: 2.26k, False: 175]
  ------------------
  239|  2.26k|			path = apr_pstrcat(r->pool, uri.path, (r->args != NULL && *r->args != '\0' ? "?" : ""), r->args,
  ------------------
  |  Branch (239:43): [True: 112, False: 2.14k]
  |  Branch (239:62): [True: 56, False: 56]
  ------------------
  240|  2.26k|					   NULL);
  241|    175|		else
  242|  2.43k|			oidc_warn(r, "apr_uri_parse failed on non-relative URL: %s", r->uri);
  ------------------
  |  |  171|  2.43k|#define oidc_warn(r, fmt, ...) oidc_log(r, APLOG_WARNING, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |  165|  2.43k|	ap_log_rerror(APLOG_MARK, level, 0, r, "%s: %s", __FUNCTION__, apr_psprintf(r->pool, fmt, ##__VA_ARGS__))
  |  |  |  |  ------------------
  |  |  |  |  |  |  448|    175|#define ap_log_rerror(...) ap_log_rerror__(__VA_ARGS__)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  450|    175|    do { if (APLOG_R_MODULE_IS_LEVEL(r, mi, level))                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  196|    175|          ( (((level)&APLOG_LEVELMASK) <= APLOG_NOTICE) ||       \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|    175|#define APLOG_LEVELMASK 15     /* mask off the level value */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                         ( (((level)&APLOG_LEVELMASK) <= APLOG_NOTICE) ||       \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   48|    175|#define APLOG_NOTICE    LOG_NOTICE      /* normal but significant condition */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (196:13): [True: 175, Folded]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  197|    175|            (ap_get_request_module_loglevel(r, module_index)     \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  635|      0|    (ap_get_module_loglevel(ap_get_request_logconf(r),i))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  621|      0|    (((i) < 0 || (l)->module_levels == NULL || (l)->module_levels[i] < 0) ?  \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:8): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:18): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:19): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:19): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:48): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:49): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:49): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:67): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  622|      0|     (l)->level :                                                         \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (622:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (622:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  623|      0|     (l)->module_levels[i])
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (623:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (623:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (623:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (197:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  198|      0|             >= ((level)&APLOG_LEVELMASK) ) )
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|      0|#define APLOG_LEVELMASK 15     /* mask off the level value */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  451|    350|             ap_log_rerror_(file, line, mi, level, status, r, __VA_ARGS__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (451:41): [True: 175, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  452|    175|    } while(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (452:13): [Folded, False: 175]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  243|  2.43k|	} else {
  244|       |		/* make sure we retain URL-encoded characters original URL that we send the user back to */
  245|    203|		path = r->unparsed_uri;
  246|    203|	}
  247|       |
  248|  2.63k|	url = apr_pstrcat(r->pool, _oidc_util_url_base_cur(r, x_forwarded_headers), path, NULL);
  249|       |
  250|  2.63k|	oidc_debug(r, "current URL '%s'", url);
  ------------------
  |  |  170|  2.63k|#define oidc_debug(r, fmt, ...) oidc_log(r, OIDC_DEBUG, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |  165|  2.63k|	ap_log_rerror(APLOG_MARK, level, 0, r, "%s: %s", __FUNCTION__, apr_psprintf(r->pool, fmt, ##__VA_ARGS__))
  |  |  |  |  ------------------
  |  |  |  |  |  |  448|  2.63k|#define ap_log_rerror(...) ap_log_rerror__(__VA_ARGS__)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  450|  2.63k|    do { if (APLOG_R_MODULE_IS_LEVEL(r, mi, level))                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  196|  2.63k|          ( (((level)&APLOG_LEVELMASK) <= APLOG_NOTICE) ||       \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|  2.63k|#define APLOG_LEVELMASK 15     /* mask off the level value */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                         ( (((level)&APLOG_LEVELMASK) <= APLOG_NOTICE) ||       \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   48|  2.63k|#define APLOG_NOTICE    LOG_NOTICE      /* normal but significant condition */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (196:13): [Folded, False: 2.63k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  197|  2.63k|            (ap_get_request_module_loglevel(r, module_index)     \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  635|  2.63k|    (ap_get_module_loglevel(ap_get_request_logconf(r),i))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  621|  10.5k|    (((i) < 0 || (l)->module_levels == NULL || (l)->module_levels[i] < 0) ?  \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:7): [True: 0, False: 2.63k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:8): [True: 2.63k, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:18): [True: 2.63k, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:19): [True: 0, False: 2.63k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:19): [True: 0, False: 2.63k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:48): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:49): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:49): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:67): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  622|  10.5k|     (l)->level :                                                         \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (622:7): [True: 0, False: 2.63k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (622:7): [True: 0, False: 2.63k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  623|  2.63k|     (l)->module_levels[i])
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (623:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (623:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (623:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (197:13): [True: 0, False: 2.63k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  198|  2.63k|             >= ((level)&APLOG_LEVELMASK) ) )
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|  2.63k|#define APLOG_LEVELMASK 15     /* mask off the level value */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  451|  2.63k|             ap_log_rerror_(file, line, mi, level, status, r, __VA_ARGS__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (451:41): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  452|  2.63k|    } while(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (452:13): [Folded, False: 2.63k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  251|       |
  252|  2.63k|	return url;
  253|  2.63k|}
oidc_util_url_abs:
  258|  1.13k|const char *oidc_util_url_abs(request_rec *r, const oidc_cfg_t *cfg, const char *url) {
  259|  1.13k|	if ((url != NULL) && (url[0] == OIDC_CHAR_FORWARD_SLASH)) {
  ------------------
  |  |  195|  1.13k|#define OIDC_CHAR_FORWARD_SLASH '/'
  ------------------
  |  Branch (259:6): [True: 1.13k, False: 0]
  |  Branch (259:23): [True: 406, False: 725]
  ------------------
  260|    406|		url =
  261|    406|		    apr_pstrcat(r->pool, _oidc_util_url_base_cur(r, oidc_cfg_x_forwarded_headers_get(cfg)), url, NULL);
  262|       |		oidc_debug(r, "determined absolute url: %s", url);
  ------------------
  |  |  170|    406|#define oidc_debug(r, fmt, ...) oidc_log(r, OIDC_DEBUG, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |  165|    406|	ap_log_rerror(APLOG_MARK, level, 0, r, "%s: %s", __FUNCTION__, apr_psprintf(r->pool, fmt, ##__VA_ARGS__))
  |  |  |  |  ------------------
  |  |  |  |  |  |  448|    406|#define ap_log_rerror(...) ap_log_rerror__(__VA_ARGS__)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  450|    406|    do { if (APLOG_R_MODULE_IS_LEVEL(r, mi, level))                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  196|    406|          ( (((level)&APLOG_LEVELMASK) <= APLOG_NOTICE) ||       \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|    406|#define APLOG_LEVELMASK 15     /* mask off the level value */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                         ( (((level)&APLOG_LEVELMASK) <= APLOG_NOTICE) ||       \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   48|    406|#define APLOG_NOTICE    LOG_NOTICE      /* normal but significant condition */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (196:13): [Folded, False: 406]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  197|    406|            (ap_get_request_module_loglevel(r, module_index)     \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  635|    406|    (ap_get_module_loglevel(ap_get_request_logconf(r),i))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  621|  1.62k|    (((i) < 0 || (l)->module_levels == NULL || (l)->module_levels[i] < 0) ?  \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:7): [True: 0, False: 406]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:8): [True: 406, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:18): [True: 406, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:19): [True: 0, False: 406]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:19): [True: 0, False: 406]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:48): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:49): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:49): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:67): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  622|  1.62k|     (l)->level :                                                         \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (622:7): [True: 0, False: 406]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (622:7): [True: 0, False: 406]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  623|    406|     (l)->module_levels[i])
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (623:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (623:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (623:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (197:13): [True: 0, False: 406]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  198|    406|             >= ((level)&APLOG_LEVELMASK) ) )
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|    406|#define APLOG_LEVELMASK 15     /* mask off the level value */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  451|    406|             ap_log_rerror_(file, line, mi, level, status, r, __VA_ARGS__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (451:41): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  452|    406|    } while(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (452:13): [Folded, False: 406]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  263|    406|	}
  264|  1.13k|	return url;
  265|  1.13k|}
oidc_util_url_cur_is_secure:
  270|    377|apr_byte_t oidc_util_url_cur_is_secure(const request_rec *r, const oidc_cfg_t *c) {
  271|    377|	return (_oidc_strnatcasecmp("https", _oidc_util_url_cur_scheme(r, oidc_cfg_x_forwarded_headers_get(c))) == 0);
  272|    377|}
oidc_util_url_redirect_uri:
  277|    377|const char *oidc_util_url_redirect_uri(request_rec *r, const oidc_cfg_t *cfg) {
  278|    377|	return oidc_util_url_abs(r, cfg, oidc_cfg_redirect_uri_get(cfg));
  279|    377|}
oidc_util_url_cur_matches:
  284|    754|apr_byte_t oidc_util_url_cur_matches(request_rec *r, const char *url) {
  285|    754|	apr_uri_t uri;
  286|    754|	_oidc_memset(&uri, 0, sizeof(apr_uri_t));
  ------------------
  |  |   84|    754|#define _oidc_memset(b, c, __len) memset(b, c, __len)
  ------------------
  287|    754|	if ((url == NULL) || (apr_uri_parse(r->pool, url, &uri) != APR_SUCCESS))
  ------------------
  |  |  225|    754|#define APR_SUCCESS 0
  ------------------
  |  Branch (287:6): [True: 0, False: 754]
  |  Branch (287:23): [True: 0, False: 754]
  ------------------
  288|      0|		return FALSE;
  ------------------
  |  |   51|      0|#define FALSE 0
  ------------------
  289|    754|	oidc_debug(r, "comparing \"%s\"==\"%s\"", r->parsed_uri.path, uri.path);
  ------------------
  |  |  170|    754|#define oidc_debug(r, fmt, ...) oidc_log(r, OIDC_DEBUG, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |  165|    754|	ap_log_rerror(APLOG_MARK, level, 0, r, "%s: %s", __FUNCTION__, apr_psprintf(r->pool, fmt, ##__VA_ARGS__))
  |  |  |  |  ------------------
  |  |  |  |  |  |  448|    754|#define ap_log_rerror(...) ap_log_rerror__(__VA_ARGS__)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  450|    754|    do { if (APLOG_R_MODULE_IS_LEVEL(r, mi, level))                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  196|    754|          ( (((level)&APLOG_LEVELMASK) <= APLOG_NOTICE) ||       \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|    754|#define APLOG_LEVELMASK 15     /* mask off the level value */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                         ( (((level)&APLOG_LEVELMASK) <= APLOG_NOTICE) ||       \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   48|    754|#define APLOG_NOTICE    LOG_NOTICE      /* normal but significant condition */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (196:13): [Folded, False: 754]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  197|    754|            (ap_get_request_module_loglevel(r, module_index)     \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  635|    754|    (ap_get_module_loglevel(ap_get_request_logconf(r),i))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  621|  3.01k|    (((i) < 0 || (l)->module_levels == NULL || (l)->module_levels[i] < 0) ?  \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:7): [True: 0, False: 754]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:8): [True: 754, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:18): [True: 754, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:19): [True: 0, False: 754]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:19): [True: 0, False: 754]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:48): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:49): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:49): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:67): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  622|  3.01k|     (l)->level :                                                         \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (622:7): [True: 0, False: 754]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (622:7): [True: 0, False: 754]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  623|    754|     (l)->module_levels[i])
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (623:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (623:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (623:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (197:13): [True: 0, False: 754]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  198|    754|             >= ((level)&APLOG_LEVELMASK) ) )
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|    754|#define APLOG_LEVELMASK 15     /* mask off the level value */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  451|    754|             ap_log_rerror_(file, line, mi, level, status, r, __VA_ARGS__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (451:41): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  452|    754|    } while(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (452:13): [Folded, False: 754]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  290|    754|	if ((r->parsed_uri.path == NULL) || (uri.path == NULL))
  ------------------
  |  Branch (290:6): [True: 0, False: 754]
  |  Branch (290:38): [True: 0, False: 754]
  ------------------
  291|      0|		return (r->parsed_uri.path == uri.path);
  292|    754|	return (_oidc_strcmp(r->parsed_uri.path, uri.path) == 0);
  293|    754|}
oidc_util_url_matches_redirect_uri:
  298|    377|apr_byte_t oidc_util_url_matches_redirect_uri(request_rec *r, const oidc_cfg_t *cfg) {
  299|    377|	return oidc_util_url_cur_matches(r, oidc_util_url_redirect_uri(r, cfg));
  300|    377|}
url.c:_oidc_util_url_base_cur:
  207|  3.04k|static const char *_oidc_util_url_base_cur(request_rec *r, oidc_hdr_x_forwarded_t x_forwarded_headers) {
  208|       |
  209|  3.04k|	const char *scheme_str = NULL;
  210|  3.04k|	const char *host_str = NULL;
  211|  3.04k|	const char *port_str = NULL;
  212|       |
  213|  3.04k|	oidc_cfg_x_forwarded_headers_check(r, x_forwarded_headers);
  214|       |
  215|  3.04k|	scheme_str = _oidc_util_url_cur_scheme(r, x_forwarded_headers);
  216|  3.04k|	host_str = oidc_util_url_cur_host(r, x_forwarded_headers);
  217|  3.04k|	port_str = _oidc_util_url_cur_port(r, scheme_str, x_forwarded_headers);
  218|  3.04k|	port_str = port_str ? apr_psprintf(r->pool, ":%s", port_str) : "";
  ------------------
  |  Branch (218:13): [True: 2.70k, False: 344]
  ------------------
  219|       |
  220|  3.04k|	const char *url = apr_pstrcat(r->pool, scheme_str, "://", host_str, port_str, NULL);
  221|       |
  222|  3.04k|	return url;
  223|  3.04k|}
url.c:_oidc_util_url_cur_port:
  104|  3.04k|static const char *_oidc_util_url_cur_port(const request_rec *r, const char *scheme_str, int x_forwarded_headers) {
  105|       |
  106|  3.04k|	const char *host_hdr = NULL;
  107|  3.04k|	const char *port_str = NULL;
  108|       |
  109|       |	/*
  110|       |	 * first see if there's a proxy/load-balancer in front of us
  111|       |	 * that sets X-Forwarded-Port
  112|       |	 */
  113|       |
  114|  3.04k|	if (x_forwarded_headers & OIDC_HDR_X_FORWARDED_PORT)
  ------------------
  |  Branch (114:6): [True: 1.13k, False: 1.91k]
  ------------------
  115|  1.13k|		port_str = oidc_http_hdr_in_x_forwarded_port_get(r);
  116|       |
  117|  3.04k|	if (port_str)
  ------------------
  |  Branch (117:6): [True: 69, False: 2.97k]
  ------------------
  118|     69|		return port_str;
  119|       |
  120|       |	/*
  121|       |	 * see if we can get the port from the "X-Forwarded-Host" or "Forwarded" header
  122|       |	 * and if that header was set we'll assume defaults
  123|       |	 */
  124|       |
  125|  2.97k|	if (x_forwarded_headers & OIDC_HDR_FORWARDED)
  ------------------
  |  Branch (125:6): [True: 731, False: 2.24k]
  ------------------
  126|    731|		host_hdr = oidc_http_hdr_forwarded_get(r, "host");
  127|  2.97k|	if ((host_hdr == NULL) && (x_forwarded_headers & OIDC_HDR_X_FORWARDED_HOST))
  ------------------
  |  Branch (127:6): [True: 2.90k, False: 70]
  |  Branch (127:28): [True: 1.05k, False: 1.85k]
  ------------------
  128|  1.05k|		host_hdr = oidc_http_hdr_in_x_forwarded_host_get(r);
  129|       |
  130|  2.97k|	if (host_hdr)
  ------------------
  |  Branch (130:6): [True: 101, False: 2.87k]
  ------------------
  131|    101|		return _oidc_util_url_port_from_host_hdr(host_hdr);
  132|       |
  133|       |	/*
  134|       |	 * see if we can get the port from the "Host" header; if not
  135|       |	 * we'll determine the port locally
  136|       |	 */
  137|  2.87k|	host_hdr = oidc_http_hdr_in_host_get(r);
  138|  2.87k|	if (host_hdr)
  ------------------
  |  Branch (138:6): [True: 248, False: 2.62k]
  ------------------
  139|    248|		return _oidc_util_url_port_from_host_hdr(host_hdr);
  140|       |
  141|       |	/*
  142|       |	 * if X-Forwarded-Proto assume the default port otherwise the
  143|       |	 * port should have been set in the X-Forwarded-Port header
  144|       |	 */
  145|  2.62k|	if ((x_forwarded_headers & OIDC_HDR_X_FORWARDED_PROTO) && (oidc_http_hdr_in_x_forwarded_proto_get(r)))
  ------------------
  |  Branch (145:6): [True: 951, False: 1.67k]
  |  Branch (145:60): [True: 23, False: 928]
  ------------------
  146|     23|		return NULL;
  147|       |
  148|       |	/*
  149|       |	 * do the same for the Forwarded: proto= header
  150|       |	 */
  151|  2.60k|	if ((x_forwarded_headers & OIDC_HDR_FORWARDED) && (oidc_http_hdr_forwarded_get(r, "proto")))
  ------------------
  |  Branch (151:6): [True: 600, False: 2.00k]
  |  Branch (151:52): [True: 14, False: 586]
  ------------------
  152|     14|		return NULL;
  153|       |
  154|       |	/*
  155|       |	 * if no port was set in the Host header and no X-Forwarded-Proto was set, we'll
  156|       |	 * determine the port locally and don't print it when it's the default for the protocol
  157|       |	 */
  158|  2.59k|	const apr_port_t port = r->connection->local_addr->port;
  159|  2.59k|	if ((_oidc_strnatcasecmp(scheme_str, "https") == 0) && port == 443)
  ------------------
  |  Branch (159:6): [True: 2.59k, False: 0]
  |  Branch (159:57): [True: 0, False: 2.59k]
  ------------------
  160|      0|		return NULL;
  161|  2.59k|	else if ((_oidc_strnatcasecmp(scheme_str, "http") == 0) && port == 80)
  ------------------
  |  Branch (161:11): [True: 0, False: 2.59k]
  |  Branch (161:61): [True: 0, False: 0]
  ------------------
  162|      0|		return NULL;
  163|       |
  164|  2.59k|	port_str = apr_psprintf(r->pool, "%u", port);
  165|  2.59k|	return port_str;
  166|  2.59k|}
url.c:_oidc_util_url_port_from_host_hdr:
   82|    349|static const char *_oidc_util_url_port_from_host_hdr(const char *host_hdr) {
   83|    349|	const char *p = NULL;
   84|       |
   85|       |	// check for an IPv6 literal addresses
   86|    349|	if (host_hdr && host_hdr[0] == '[')
  ------------------
  |  Branch (86:6): [True: 349, False: 0]
  |  Branch (86:18): [True: 58, False: 291]
  ------------------
   87|     58|		p = strchr(host_hdr, ']');
   88|    291|	else
   89|    291|		p = host_hdr;
   90|       |
   91|    349|	if (p) {
  ------------------
  |  Branch (91:6): [True: 310, False: 39]
  ------------------
   92|    310|		p = strchr(p, OIDC_CHAR_COLON);
  ------------------
  |  |  188|    310|#define OIDC_CHAR_COLON ':'
  ------------------
   93|       |		// skip over the ":" to point to the actual port number
   94|    310|		if (p)
  ------------------
  |  Branch (94:7): [True: 42, False: 268]
  ------------------
   95|     42|			p++;
   96|    310|	}
   97|       |
   98|    349|	return p;
   99|    349|}
url.c:_oidc_util_url_cur_scheme:
   51|  3.42k|static const char *_oidc_util_url_cur_scheme(const request_rec *r, oidc_hdr_x_forwarded_t x_forwarded_headers) {
   52|       |	/* first see if there's a proxy/load-balancer in front of us */
   53|  3.42k|	const char *scheme_str = NULL;
   54|       |
   55|  3.42k|	if (x_forwarded_headers & OIDC_HDR_FORWARDED)
  ------------------
  |  Branch (55:6): [True: 754, False: 2.66k]
  ------------------
   56|    754|		scheme_str = oidc_http_hdr_forwarded_get(r, "proto");
   57|  3.42k|	if ((scheme_str == NULL) && (x_forwarded_headers & OIDC_HDR_X_FORWARDED_PROTO))
  ------------------
  |  Branch (57:6): [True: 3.38k, False: 36]
  |  Branch (57:30): [True: 1.11k, False: 2.27k]
  ------------------
   58|  1.11k|		scheme_str = oidc_http_hdr_in_x_forwarded_proto_get(r);
   59|       |
   60|       |	/* if not we'll determine the scheme used to connect to this server */
   61|  3.42k|	if (scheme_str == NULL) {
  ------------------
  |  Branch (61:6): [True: 3.35k, False: 63]
  ------------------
   62|       |#ifdef APACHE2_0
   63|       |		scheme_str = (char *)ap_http_method(r);
   64|       |#else
   65|  3.35k|		scheme_str = ap_http_scheme(r);
  ------------------
  |  |  297|  3.35k|#define ap_http_scheme(r)       ap_run_http_scheme(r)
  ------------------
   66|  3.35k|#endif
   67|  3.35k|	}
   68|  3.42k|	if ((scheme_str == NULL) ||
  ------------------
  |  Branch (68:6): [True: 3.35k, False: 63]
  ------------------
   69|  3.40k|	    ((_oidc_strnatcasecmp(scheme_str, "http") != 0) && (_oidc_strnatcasecmp(scheme_str, "https") != 0))) {
  ------------------
  |  Branch (69:7): [True: 54, False: 9]
  |  Branch (69:57): [True: 45, False: 9]
  ------------------
   70|       |		oidc_warn(r,
  ------------------
  |  |  171|  3.40k|#define oidc_warn(r, fmt, ...) oidc_log(r, APLOG_WARNING, fmt, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |  165|  3.40k|	ap_log_rerror(APLOG_MARK, level, 0, r, "%s: %s", __FUNCTION__, apr_psprintf(r->pool, fmt, ##__VA_ARGS__))
  |  |  |  |  ------------------
  |  |  |  |  |  |  448|  3.40k|#define ap_log_rerror(...) ap_log_rerror__(__VA_ARGS__)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  450|  3.40k|    do { if (APLOG_R_MODULE_IS_LEVEL(r, mi, level))                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  196|  3.40k|          ( (((level)&APLOG_LEVELMASK) <= APLOG_NOTICE) ||       \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|  3.40k|#define APLOG_LEVELMASK 15     /* mask off the level value */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                         ( (((level)&APLOG_LEVELMASK) <= APLOG_NOTICE) ||       \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   48|  3.40k|#define APLOG_NOTICE    LOG_NOTICE      /* normal but significant condition */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (196:13): [True: 3.40k, Folded]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  197|  3.40k|            (ap_get_request_module_loglevel(r, module_index)     \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  635|      0|    (ap_get_module_loglevel(ap_get_request_logconf(r),i))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  621|      0|    (((i) < 0 || (l)->module_levels == NULL || (l)->module_levels[i] < 0) ?  \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:8): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:18): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:19): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:19): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:48): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:49): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:49): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (621:67): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  622|      0|     (l)->level :                                                         \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (622:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (622:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  623|      0|     (l)->module_levels[i])
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (623:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (623:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (623:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (197:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  198|      0|             >= ((level)&APLOG_LEVELMASK) ) )
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|      0|#define APLOG_LEVELMASK 15     /* mask off the level value */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  451|  6.80k|             ap_log_rerror_(file, line, mi, level, status, r, __VA_ARGS__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (451:41): [True: 3.40k, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  452|  3.40k|    } while(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (452:13): [Folded, False: 3.40k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   71|  3.40k|			  "detected HTTP scheme \"%s\" is not \"http\" nor \"https\"; perhaps your reverse proxy "
   72|  3.40k|			  "passes a wrongly configured \"%s\" header: falling back to default \"https\"",
   73|  3.40k|			  scheme_str, OIDC_HTTP_HDR_X_FORWARDED_PROTO);
   74|  3.40k|		scheme_str = "https";
   75|  3.40k|	}
   76|  3.42k|	return scheme_str;
   77|  3.42k|}

oidc_util_strcasestr:
   98|  3.59k|const char *oidc_util_strcasestr(const char *s1, const char *s2) {
   99|  3.59k|	const char *s = s1;
  100|  3.59k|	const char *p = s2;
  101|  3.59k|	if ((s == NULL) || (p == NULL))
  ------------------
  |  Branch (101:6): [True: 2.73k, False: 860]
  |  Branch (101:21): [True: 0, False: 860]
  ------------------
  102|  2.73k|		return NULL;
  103|  8.58k|	do {
  104|  8.58k|		if (!*p)
  ------------------
  |  Branch (104:7): [True: 276, False: 8.31k]
  ------------------
  105|    276|			return s1;
  106|  8.31k|		if ((*p == *s) || (tolower(*p) == tolower(*s))) {
  ------------------
  |  Branch (106:7): [True: 2.11k, False: 6.19k]
  |  Branch (106:21): [True: 878, False: 5.31k]
  |  Branch (106:22): [True: 0, False: 0]
  |  Branch (106:22): [True: 0, False: 0]
  |  Branch (106:22): [Folded, False: 6.19k]
  |  Branch (106:37): [True: 0, False: 0]
  |  Branch (106:37): [True: 0, False: 0]
  |  Branch (106:37): [Folded, False: 6.19k]
  ------------------
  107|  2.99k|			++p;
  108|  2.99k|			++s;
  109|  5.31k|		} else {
  110|  5.31k|			p = s2;
  111|  5.31k|			if (!*s)
  ------------------
  |  Branch (111:8): [True: 584, False: 4.73k]
  ------------------
  112|    584|				return NULL;
  113|  4.73k|			s = ++s1;
  114|  4.73k|		}
  115|  8.31k|	} while (1);
  ------------------
  |  Branch (115:11): [True: 7.72k, Folded]
  ------------------
  116|    860|}
oidc_util_spaced_string_contains:
  412|  12.1k|apr_byte_t oidc_util_spaced_string_contains(apr_pool_t *pool, const char *str, const char *match) {
  413|  12.1k|	if ((str == NULL) || (match == NULL))
  ------------------
  |  Branch (413:6): [True: 12.1k, False: 0]
  |  Branch (413:23): [True: 0, False: 0]
  ------------------
  414|  12.1k|		return FALSE;
  ------------------
  |  |   51|  12.1k|#define FALSE 0
  ------------------
  415|      0|	apr_hash_t *ht = oidc_util_spaced_string_to_hashtable(pool, str);
  416|      0|	return (apr_hash_get(ht, match, APR_HASH_KEY_STRING) != NULL);
  ------------------
  |  |   47|      0|#define APR_HASH_KEY_STRING     (-1)
  ------------------
  417|  12.1k|}

fuzz_current_url.c:fuzz_strndup:
   43|    377|static inline char *fuzz_strndup(apr_pool_t *pool, const uint8_t *data, size_t size) {
   44|    377|	char *s = apr_palloc(pool, size + 1);
   45|    377|	if (size > 0)
  ------------------
  |  Branch (45:6): [True: 377, False: 0]
  ------------------
   46|    377|		memcpy(s, data, size);
   47|    377|	s[size] = '\0';
   48|    377|	return s;
   49|    377|}

LLVMFuzzerInitialize:
   53|      2|int LLVMFuzzerInitialize(int *argc, char ***argv) {
   54|      2|	(void)argc;
   55|      2|	(void)argv;
   56|      2|	if (!g_ready) {
  ------------------
  |  Branch (56:6): [True: 2, False: 0]
  ------------------
   57|      2|		oidc_test_setup();
   58|      2|		g_ready = 1;
   59|      2|	}
   60|      2|	return 0;
   61|      2|}
LLVMFuzzerTestOneInput:
   63|    377|int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
   64|    377|	if (!g_ready)
  ------------------
  |  Branch (64:6): [True: 0, False: 377]
  ------------------
   65|      0|		LLVMFuzzerInitialize(NULL, NULL);
   66|       |
   67|    377|	apr_pool_t *pool = NULL;
   68|    377|	apr_pool_create(&pool, oidc_test_pool_get());
  ------------------
  |  |  323|    377|    apr_pool_create_ex(newpool, parent, NULL, NULL)
  ------------------
   69|       |
   70|       |	/* shallow copy of the fixture request with a per-input pool and a fresh headers_in: the
   71|       |	 * Forwarded parser writes terminators into the header value it reads, so the fuzzed
   72|       |	 * headers must never live in the shared fixture table */
   73|    377|	request_rec r = *oidc_test_request_get();
   74|    377|	r.pool = pool;
   75|    377|	r.headers_in = apr_table_make(pool, 8);
   76|       |
   77|    377|	char *input = fuzz_strndup(pool, data, size);
   78|    377|	char *last = NULL;
   79|    377|	char *line = apr_strtok(input, "\n", &last);
   80|       |
   81|       |	/* first line: the request-target */
   82|    377|	r.uri = apr_pstrdup(pool, line ? line : "");
  ------------------
  |  Branch (82:28): [True: 375, False: 2]
  ------------------
   83|    377|	r.unparsed_uri = r.uri;
   84|    377|	r.args = NULL;
   85|    377|	char *q = strchr(r.uri, '?');
   86|    377|	if (q != NULL) {
  ------------------
  |  Branch (86:6): [True: 16, False: 361]
  ------------------
   87|     16|		r.args = q + 1;
   88|     16|		r.uri = apr_pstrmemdup(pool, r.uri, (apr_size_t)(q - r.uri));
   89|     16|	}
   90|       |
   91|       |	/* remaining lines: request headers (an empty input has no first line to continue from) */
   92|  2.27k|	while ((line != NULL) && ((line = apr_strtok(NULL, "\n", &last)) != NULL)) {
  ------------------
  |  Branch (92:9): [True: 2.26k, False: 2]
  |  Branch (92:27): [True: 1.89k, False: 375]
  ------------------
   93|  1.89k|		char *colon = strchr(line, ':');
   94|  1.89k|		if (colon == NULL)
  ------------------
  |  Branch (94:7): [True: 920, False: 973]
  ------------------
   95|    920|			continue;
   96|    973|		*colon = '\0';
   97|    973|		char *value = colon + 1;
   98|  1.45k|		while ((*value == ' ') || (*value == '\t'))
  ------------------
  |  Branch (98:10): [True: 252, False: 1.20k]
  |  Branch (98:29): [True: 229, False: 973]
  ------------------
   99|    481|			value++;
  100|    973|		apr_table_add(r.headers_in, line, value);
  101|    973|	}
  102|       |
  103|    377|	oidc_cfg_t *cfg = oidc_test_cfg_get();
  104|  3.01k|	for (size_t i = 0; i < sizeof(fuzz_modes) / sizeof(fuzz_modes[0]); i++) {
  ------------------
  |  Branch (104:21): [True: 2.63k, False: 377]
  ------------------
  105|  2.63k|		oidc_util_url_cur(&r, fuzz_modes[i]);
  106|  2.63k|		oidc_util_url_cur_host(&r, fuzz_modes[i]);
  107|  2.63k|	}
  108|    377|	oidc_util_url_cur_is_secure(&r, cfg);
  109|    377|	oidc_util_url_matches_redirect_uri(&r, cfg);
  110|    377|	oidc_util_url_cur_matches(&r, "https://www.example.com/protected/");
  111|    377|	oidc_util_url_abs(&r, cfg, "/relative/path");
  112|    377|	oidc_util_url_abs(&r, cfg, r.unparsed_uri);
  113|       |
  114|    377|	apr_pool_destroy(pool);
  115|    377|	return 0;
  116|    377|}

ap_unixd_set_global_mutex_perms:
   54|      4|AP_DECLARE(apr_status_t) ap_unixd_set_global_mutex_perms(apr_global_mutex_t *gmutex) {
   55|      4|	return 0;
   56|      4|}
oidc_test_set_auth_type:
   63|      2|void oidc_test_set_auth_type(const char *auth_type) {
   64|      2|	stub_auth_type = (auth_type != NULL) ? auth_type : "openid-connect";
  ------------------
  |  Branch (64:19): [True: 0, False: 2]
  ------------------
   65|      2|}
ap_log_rerror_:
  307|  8.22k|	       const char *fmt, ...) {
  308|  8.22k|	if (level < APLOG_DEBUG) {
  ------------------
  |  |   50|  8.22k|#define APLOG_DEBUG     LOG_DEBUG       /* debug-level messages */
  ------------------
  |  Branch (308:6): [True: 8.22k, False: 0]
  ------------------
  309|  8.22k|		fprintf(stderr, "%s:%d [%d] [%d] ", file, line, level, status);
  310|  8.22k|		va_list ap;
  311|  8.22k|		va_start(ap, fmt);
  312|  8.22k|		vfprintf(stderr, fmt, ap);
  313|  8.22k|		va_end(ap);
  314|       |		fprintf(stderr, "\n");
  315|  8.22k|	}
  316|  8.22k|}
ap_run_http_scheme:
  340|  3.35k|const char *ap_run_http_scheme(const request_rec *r) {
  341|  3.35k|	char *rv;
  342|  3.35k|	apr_pool_userdata_get((void **)&rv, "scheme", r->pool);
  343|  3.35k|	return (const char *)rv;
  344|  3.35k|}
ap_get_server_name:
  378|  4.98k|AP_DECLARE(const char *) ap_get_server_name(request_rec *r) {
  379|  4.98k|	return "www.example.com";
  380|  4.98k|}

oidc_test_setup:
  201|      2|void oidc_test_setup(void) {
  202|      2|	apr_initialize();
  203|      2|	oidc_pre_config_init();
  204|       |	/* reset the stubbed AuthType so a test that changed it does not leak into
  205|       |	 * the next one under CK_FORK=no */
  206|      2|	oidc_test_set_auth_type(NULL);
  207|       |	apr_pool_create(&pool, NULL);
  ------------------
  |  |  323|      2|    apr_pool_create_ex(newpool, parent, NULL, NULL)
  ------------------
  208|      2|	request = oidc_test_request_init(pool);
  209|      2|}
oidc_test_pool_get:
  223|    377|apr_pool_t *oidc_test_pool_get(void) {
  224|    377|	return pool;
  225|    377|}
oidc_test_request_get:
  227|    377|request_rec *oidc_test_request_get(void) {
  228|    377|	return request;
  229|    377|}
oidc_test_cfg_get:
  231|    377|oidc_cfg_t *oidc_test_cfg_get(void) {
  232|    377|	return (oidc_cfg_t *)ap_get_module_config(request->server->module_config, &auth_openidc_module);
  ------------------
  |  |  551|    377|    (((void **)(v))[(m)->module_index])
  ------------------
  233|    377|}
util.c:oidc_test_request_init:
  105|      2|static request_rec *oidc_test_request_init(apr_pool_t *pool) {
  106|      2|	const unsigned int kIdx = 0;
  107|      2|	const unsigned int kEls = kIdx + 1;
  108|      2|	request_rec *request = (request_rec *)apr_pcalloc(pool, sizeof(request_rec));
  ------------------
  |  |  465|      2|#define apr_pcalloc(p, size) memset(apr_palloc(p, size), 0, size)
  ------------------
  109|       |
  110|      2|	apr_pool_create(&request->pool, pool);
  ------------------
  |  |  323|      2|    apr_pool_create_ex(newpool, parent, NULL, NULL)
  ------------------
  111|       |
  112|      2|	request->subprocess_env = apr_table_make(request->pool, 0);
  113|       |
  114|      2|	request->headers_in = apr_table_make(request->pool, 0);
  115|      2|	request->headers_out = apr_table_make(request->pool, 0);
  116|      2|	request->err_headers_out = apr_table_make(request->pool, 0);
  117|       |
  118|      2|	apr_table_set(request->headers_in, "Host", "www.example.com");
  119|      2|	apr_table_set(request->headers_in, "OIDC_foo", "some-value");
  120|      2|	apr_table_set(request->headers_in, "Cookie",
  121|      2|		      "foo=bar; "
  122|      2|		      "mod_auth_openidc_session"
  123|      2|		      "=0123456789abcdef; baz=zot");
  124|       |
  125|      2|	request->server = apr_pcalloc(pool, sizeof(struct server_rec));
  ------------------
  |  |  465|      2|#define apr_pcalloc(p, size) memset(apr_palloc(p, size), 0, size)
  ------------------
  126|      2|	request->server->process = apr_pcalloc(pool, sizeof(struct process_rec));
  ------------------
  |  |  465|      2|#define apr_pcalloc(p, size) memset(apr_palloc(p, size), 0, size)
  ------------------
  127|      2|	apr_pool_create(&request->server->process->pool, pool);
  ------------------
  |  |  323|      2|    apr_pool_create_ex(newpool, parent, NULL, NULL)
  ------------------
  128|      2|	apr_pool_create(&request->server->process->pconf, pool);
  ------------------
  |  |  323|      2|    apr_pool_create_ex(newpool, parent, NULL, NULL)
  ------------------
  129|      2|	request->connection = apr_pcalloc(pool, sizeof(struct conn_rec));
  ------------------
  |  |  465|      2|#define apr_pcalloc(p, size) memset(apr_palloc(p, size), 0, size)
  ------------------
  130|      2|	request->connection->bucket_alloc = apr_bucket_alloc_create(pool);
  131|      2|	request->connection->local_addr = apr_pcalloc(pool, sizeof(apr_sockaddr_t));
  ------------------
  |  |  465|      2|#define apr_pcalloc(p, size) memset(apr_palloc(p, size), 0, size)
  ------------------
  132|       |	/* minimal output filter carrying the request so the ap_pass_brigade stub
  133|       |	 * can capture sent response bodies into the "sent_body" request state */
  134|      2|	request->output_filters = apr_pcalloc(pool, sizeof(ap_filter_t));
  ------------------
  |  |  465|      2|#define apr_pcalloc(p, size) memset(apr_palloc(p, size), 0, size)
  ------------------
  135|      2|	request->output_filters->r = request;
  136|       |
  137|      2|	apr_pool_userdata_set("https", "scheme", NULL, request->pool);
  138|      2|	request->server->server_hostname = "www.example.com";
  139|      2|	request->connection->local_addr->port = 4433;
  140|      2|	request->unparsed_uri = "/bla?foo=bar&param1=value1";
  141|      2|	request->args = "foo=bar&param1=value1";
  142|      2|	apr_uri_parse(request->pool, "https://www.example.com/bla?foo=bar&param1=value1", &request->parsed_uri);
  143|       |
  144|      2|	auth_openidc_module.module_index = kIdx;
  145|      2|	oidc_cfg_t *cfg = oidc_cfg_server_create(request->server->process->pconf, request->server);
  146|       |
  147|      2|	oidc_cfg_provider_issuer_set(request->server->process->pconf, oidc_cfg_provider_get(cfg),
  148|      2|				     "https://idp.example.com");
  149|      2|	oidc_cfg_provider_authorization_endpoint_url_set(request->server->process->pconf, oidc_cfg_provider_get(cfg),
  150|      2|							 "https://idp.example.com/authorize");
  151|      2|	oidc_cfg_provider_client_id_set(request->server->process->pconf, oidc_cfg_provider_get(cfg), "client_id");
  152|       |
  153|      2|	cfg->redirect_uri = "https://www.example.com/protected/";
  154|       |
  155|      2|	oidc_dir_cfg_t *d_cfg = oidc_cfg_dir_config_create(request->server->process->pconf, NULL);
  156|       |
  157|       |	// coverity[suspicious_sizeof]
  158|      2|	request->server->module_config = apr_pcalloc(request->server->process->pconf, sizeof(void *) * kEls);
  ------------------
  |  |  465|      2|#define apr_pcalloc(p, size) memset(apr_palloc(p, size), 0, size)
  ------------------
  159|       |	// coverity[suspicious_sizeof]
  160|      2|	request->per_dir_config = apr_pcalloc(request->server->process->pconf, sizeof(void *) * kEls);
  ------------------
  |  |  465|      2|#define apr_pcalloc(p, size) memset(apr_palloc(p, size), 0, size)
  ------------------
  161|      2|	ap_set_module_config(request->server->module_config, &auth_openidc_module, cfg);
  ------------------
  |  |  553|      2|    ((((void **)(v))[(m)->module_index]) = (val))
  ------------------
  162|      2|	ap_set_module_config(request->per_dir_config, &auth_openidc_module, d_cfg);
  ------------------
  |  |  553|      2|    ((((void **)(v))[(m)->module_index]) = (val))
  ------------------
  163|       |
  164|       |	// TODO:
  165|      2|	cfg->public_keys = apr_array_make(request->server->process->pconf, 1, sizeof(const char *));
  166|      2|	cfg->private_keys = apr_array_make(request->server->process->pconf, 1, sizeof(const char *));
  167|       |
  168|      2|	cfg->crypto_passphrase.secret1 = "12345678901234567890123456789012";
  169|      2|	if (oidc_test_crypto_passphrase_derive_keys_cached(&cfg->crypto_passphrase) == FALSE) {
  ------------------
  |  |   51|      2|#define FALSE 0
  ------------------
  |  Branch (169:6): [True: 0, False: 2]
  ------------------
  170|      0|		fprintf(stderr, "oidc_cfg_crypto_passphrase_derive_keys failed!\n");
  171|      0|		exit(-1);
  172|      0|	}
  173|      2|	cfg->cache.impl = &oidc_cache_shm;
  174|      2|	cfg->cache.cfg = NULL;
  175|      2|	cfg->cache.shm_size_max = 500;
  176|      2|	const char *shm_size = getenv("OIDC_TEST_SHM_SIZE");
  177|      2|	if (shm_size != NULL) {
  ------------------
  |  Branch (177:6): [True: 0, False: 2]
  ------------------
  178|      0|		char *end = NULL;
  179|      0|		long parsed = strtol(shm_size, &end, 10);
  180|      0|		if ((end != shm_size) && (*end == '\0') && (parsed >= 128) && (parsed <= 1000000))
  ------------------
  |  Branch (180:7): [True: 0, False: 0]
  |  Branch (180:28): [True: 0, False: 0]
  |  Branch (180:46): [True: 0, False: 0]
  |  Branch (180:65): [True: 0, False: 0]
  ------------------
  181|      0|			cfg->cache.shm_size_max = (int)parsed;
  182|      0|	}
  183|      2|	cfg->cache.shm_entry_size_max = 16384 + 255 + 17;
  184|      2|	cfg->cache.encrypt = 1;
  185|       |	/* full post-config so the cache backend AND the shared refresh-grant mutex get set up */
  186|      2|	if (oidc_cfg_post_config(request->server->process->pconf, cfg, request->server) != OK) {
  ------------------
  |  |  456|      2|#define OK 0                    /**< Module has handled this stage. */
  ------------------
  |  Branch (186:6): [True: 0, False: 2]
  ------------------
  187|      0|		fprintf(stderr, "oidc_cfg_post_config failed!\n");
  188|      0|		exit(-1);
  189|      0|	}
  190|       |
  191|      2|	if (oidc_cfg_dir_post_config(request->server) != OK) {
  ------------------
  |  |  456|      2|#define OK 0                    /**< Module has handled this stage. */
  ------------------
  |  Branch (191:6): [True: 0, False: 2]
  ------------------
  192|      0|		fprintf(stderr, "oidc_cfg_dir_post_config failed!\n");
  193|      0|		exit(-1);
  194|      0|	}
  195|       |
  196|      2|	oidc_http_curl_pool_init(request->server->process->pconf);
  197|       |
  198|      2|	return request;
  199|      2|}
util.c:oidc_test_crypto_passphrase_derive_keys_cached:
   91|      2|static apr_byte_t oidc_test_crypto_passphrase_derive_keys_cached(oidc_crypto_passphrase_t *cp) {
   92|      2|	if ((cp->secret1 != NULL) && (_oidc_strlen(cp->secret1) > 0) && (cp->derived_key1_set == FALSE)) {
  ------------------
  |  |   51|      2|#define FALSE 0
  ------------------
  |  Branch (92:6): [True: 2, False: 0]
  |  Branch (92:31): [True: 2, False: 0]
  |  Branch (92:66): [True: 2, False: 0]
  ------------------
   93|      2|		if (oidc_test_key_derive_cached(cp->secret1, cp->derived_key1) == FALSE)
  ------------------
  |  |   51|      2|#define FALSE 0
  ------------------
  |  Branch (93:7): [True: 0, False: 2]
  ------------------
   94|      0|			return FALSE;
  ------------------
  |  |   51|      0|#define FALSE 0
  ------------------
   95|      2|		cp->derived_key1_set = TRUE;
  ------------------
  |  |   55|      2|#define TRUE (!FALSE)
  |  |  ------------------
  |  |  |  |   51|      2|#define FALSE 0
  |  |  ------------------
  ------------------
   96|      2|	}
   97|      2|	if ((cp->secret2 != NULL) && (_oidc_strlen(cp->secret2) > 0) && (cp->derived_key2_set == FALSE)) {
  ------------------
  |  |   51|      0|#define FALSE 0
  ------------------
  |  Branch (97:6): [True: 0, False: 2]
  |  Branch (97:31): [True: 0, False: 0]
  |  Branch (97:66): [True: 0, False: 0]
  ------------------
   98|      0|		if (oidc_test_key_derive_cached(cp->secret2, cp->derived_key2) == FALSE)
  ------------------
  |  |   51|      0|#define FALSE 0
  ------------------
  |  Branch (98:7): [True: 0, False: 0]
  ------------------
   99|      0|			return FALSE;
  ------------------
  |  |   51|      0|#define FALSE 0
  ------------------
  100|      0|		cp->derived_key2_set = TRUE;
  ------------------
  |  |   55|      0|#define TRUE (!FALSE)
  |  |  ------------------
  |  |  |  |   51|      0|#define FALSE 0
  |  |  ------------------
  ------------------
  101|      0|	}
  102|      2|	return TRUE;
  ------------------
  |  |   55|      2|#define TRUE (!FALSE)
  |  |  ------------------
  |  |  |  |   51|      2|#define FALSE 0
  |  |  ------------------
  ------------------
  103|      2|}
util.c:oidc_test_key_derive_cached:
   66|      2|static apr_byte_t oidc_test_key_derive_cached(const char *secret, unsigned char *out) {
   67|      2|	int i;
   68|      2|	for (i = 0; i < oidc_test_kdf_cache_n; i++) {
  ------------------
  |  Branch (68:14): [True: 0, False: 2]
  ------------------
   69|      0|		if (_oidc_strcmp(oidc_test_kdf_cache[i].secret, secret) == 0) {
  ------------------
  |  Branch (69:7): [True: 0, False: 0]
  ------------------
   70|      0|			_oidc_memcpy(out, oidc_test_kdf_cache[i].key, OIDC_CRYPTO_PASSPHRASE_DERIVED_KEY_LEN);
  ------------------
  |  |   85|      0|#define _oidc_memcpy(__dst, __src, __n) memcpy(__dst, __src, __n)
  ------------------
   71|      0|			return TRUE;
  ------------------
  |  |   55|      0|#define TRUE (!FALSE)
  |  |  ------------------
  |  |  |  |   51|      0|#define FALSE 0
  |  |  ------------------
  ------------------
   72|      0|		}
   73|      0|	}
   74|      2|	if (oidc_util_key_derive_passphrase_key(secret, out, OIDC_CRYPTO_PASSPHRASE_DERIVED_KEY_LEN) == FALSE)
  ------------------
  |  |  113|      2|#define OIDC_CRYPTO_PASSPHRASE_DERIVED_KEY_LEN 32
  ------------------
              	if (oidc_util_key_derive_passphrase_key(secret, out, OIDC_CRYPTO_PASSPHRASE_DERIVED_KEY_LEN) == FALSE)
  ------------------
  |  |   51|      2|#define FALSE 0
  ------------------
  |  Branch (74:6): [True: 0, False: 2]
  ------------------
   75|      0|		return FALSE;
  ------------------
  |  |   51|      0|#define FALSE 0
  ------------------
   76|      2|	if ((oidc_test_kdf_cache_n < OIDC_TEST_KDF_CACHE_MAX) &&
  ------------------
  |  |   59|      2|#define OIDC_TEST_KDF_CACHE_MAX 32
  ------------------
  |  Branch (76:6): [True: 2, False: 0]
  ------------------
   77|      2|	    (_oidc_strlen(secret) < sizeof(oidc_test_kdf_cache[0].secret))) {
  ------------------
  |  Branch (77:6): [True: 2, False: 0]
  ------------------
   78|      2|		_oidc_strcpy(oidc_test_kdf_cache[oidc_test_kdf_cache_n].secret, secret);
  ------------------
  |  |   86|      2|#define _oidc_strcpy(__dst, __src) strcpy(__dst, __src)
  ------------------
   79|      2|		_oidc_memcpy(oidc_test_kdf_cache[oidc_test_kdf_cache_n].key, out,
  ------------------
  |  |   85|      2|#define _oidc_memcpy(__dst, __src, __n) memcpy(__dst, __src, __n)
  ------------------
   80|      2|			     OIDC_CRYPTO_PASSPHRASE_DERIVED_KEY_LEN);
   81|      2|		oidc_test_kdf_cache_n++;
   82|      2|	}
   83|      2|	return TRUE;
  ------------------
  |  |   55|      2|#define TRUE (!FALSE)
  |  |  ------------------
  |  |  |  |   51|      2|#define FALSE 0
  |  |  ------------------
  ------------------
   84|      2|}

