blob: 3dcf5d87c9e02880532b41da8c8099ecb47e862b [file] [log] [blame]
/*
** Licensed to the Apache Software Foundation (ASF) under one or more
** contributor license agreements. See the NOTICE file distributed with
** this work for additional information regarding copyright ownership.
** The ASF licenses this file to You under the Apache License, Version 2.0
** (the "License"); you may not use this file except in compliance with
** the License. You may obtain a copy of the License at
**
** http://www.apache.org/licenses/LICENSE-2.0
**
** Unless required by applicable law or agreed to in writing, software
** distributed under the License is distributed on an "AS IS" BASIS,
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
** See the License for the specific language governing permissions and
** limitations under the License.
*/
#ifdef CONFIG_FOR_HTTPD_TEST
#if CONFIG_FOR_HTTPD_TEST
<Location /apreq_access_test>
TestAccess test
SetHandler apreq_request_test
</Location>
#endif
#endif
#define APACHE_HTTPD_TEST_ACCESS_CHECKER apreq_access_checker
#define APACHE_HTTPD_TEST_COMMANDS access_cmds
#define APACHE_HTTPD_TEST_PER_DIR_CREATE create_access_config
#include "apache_httpd_test.h"
#include "apreq_module_apache2.h"
#include "httpd.h"
#include "apr_strings.h"
extern module AP_MODULE_DECLARE_DATA apreq_access_test_module;
struct access_test_cfg {
apr_pool_t *pool;
const char *param;
};
static const char *access_config(cmd_parms *cmd, void *dv, const char *arg)
{
struct access_test_cfg *cfg = (struct access_test_cfg *)dv;
cfg->param = apr_pstrdup(cfg->pool, arg);
return NULL;
}
static const command_rec access_cmds[] =
{
AP_INIT_TAKE1("TestAccess", access_config, NULL, OR_LIMIT, "'param'"),
{ NULL }
};
static void *create_access_config(apr_pool_t *p, char *dummy)
{
struct access_test_cfg *cfg = apr_palloc(p, sizeof *cfg);
cfg->pool = p;
cfg->param = dummy;
return cfg;
}
static int apreq_access_checker(request_rec *r)
{
apreq_handle_t *handle;
apreq_param_t *param;
struct access_test_cfg *cfg = (struct access_test_cfg *)
ap_get_module_config(r->per_dir_config, &apreq_access_test_module);
if (!cfg || !cfg->param)
return DECLINED;
handle = apreq_handle_apache2(r);
param = apreq_param(handle, cfg->param);
if (param != NULL) {
ap_log_rerror(APLOG_MARK, APLOG_DEBUG, APR_SUCCESS,
r, "ACCESS GRANTED: %s => %s", cfg->param, param->v.data);
return OK;
}
else {
const apr_table_t *t = apreq_params(handle, r->pool);
if (t != NULL) {
ap_log_rerror(APLOG_MARK, APLOG_DEBUG, APR_EGENERAL, r,
"%s not found: parsing error detected (%d params)",
cfg->param, apr_table_elts(t)->nelts);
}
else {
ap_log_rerror(APLOG_MARK, APLOG_DEBUG, APR_EGENERAL, r,
"%s not found: paring error detected (no param table)",
cfg->param);
}
return HTTP_FORBIDDEN;
}
}
APACHE_HTTPD_TEST_MODULE(apreq_access_test);