}
return APR_SUCCESS;
}
+
static apr_status_t destroy_cache(void *data)
{
if (socache_instance) {
return APR_SUCCESS;
}
-
static int authn_cache_precfg(apr_pool_t *pconf, apr_pool_t *plog, apr_pool_t *ptmp)
{
apr_status_t rv = ap_mutex_register(pconf, authn_cache_id,
configured = 0;
return OK;
}
+
static int authn_cache_post_config(apr_pool_t *pconf, apr_pool_t *plog,
apr_pool_t *ptmp, server_rec *s)
{
apr_pool_cleanup_register(pconf, (void*)s, destroy_cache, apr_pool_cleanup_null);
return OK;
}
+
static void authn_cache_child_init(apr_pool_t *p, server_rec *s)
{
const char *lock;
ret->context = directory;
return ret;
}
+
/* not sure we want this. Might be safer to document use-all-or-none */
static void* authn_cache_dircfg_merge(apr_pool_t *pool, void *BASE, void *ADD)
{
return apr_pstrcat(r->pool, context, ":", user, ":", realm, NULL);
}
}
+
static void ap_authn_cache_store(request_rec *r, const char *module,
const char *user, const char *realm,
const char* data)
if (rv != APR_SUCCESS) {
ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r, APLOGNO(01683) "Failed to release mutex!");
}
- return;
}
#define MAX_VAL_LEN 100
static authn_status check_password(request_rec *r, const char *user,
const char *password)
{
-
/* construct key
* look it up
* if found, test password
&check_password,
&get_realm_hash,
};
+
static void register_hooks(apr_pool_t *p)
{
ap_register_auth_provider(p, AUTHN_PROVIDER_GROUP, "socache",