39#define APR_WANT_STRFUNC
55#define APLOG_UNSET (APLOG_NO_MODULE - 1)
57#undef APLOG_MODULE_INDEX
58#define APLOG_MODULE_INDEX AP_CORE_MODULE_INDEX
182#if defined(APR_HOOK_PROBES_ENABLED)
183#undef APR_HOOK_PROBES_ENABLED
184#undef APR_HOOK_PROBE_ENTRY
185#define APR_HOOK_PROBE_ENTRY(ud,ns,name,args)
186#undef APR_HOOK_PROBE_RETURN
187#define APR_HOOK_PROBE_RETURN(ud,ns,name,rv,args)
188#undef APR_HOOK_PROBE_INVOKE
189#define APR_HOOK_PROBE_INVOKE(ud,ns,name,src,args)
190#undef APR_HOOK_PROBE_COMPLETE
191#define APR_HOOK_PROBE_COMPLETE(ud,ns,name,src,rv,args)
192#undef APR_HOOK_INT_DCL_UD
193#define APR_HOOK_INT_DCL_UD
249#ifndef AP_MAX_INCLUDE_DIR_DEPTH
250#define AP_MAX_INCLUDE_DIR_DEPTH (128)
317 if (
modp->create_server_config)
337 int i =
modp->module_index;
340 if (
df &&
modp->create_server_config
430 while (
p2 > handler &&
p2[-1] ==
' ')
463 "Handler for %s returned invalid result code %d",
491 if (
m->register_hooks) {
492 if (
getenv(
"SHOW_HOOKS")) {
493 printf(
"Registering hooks for %s\n",
m->name);
498 m->register_hooks(
p);
541 while (
cmd &&
cmd->name) {
569 return apr_psprintf(
p,
"Module \"%s\" is not compatible with this "
570 "version of Apache (found %d, need %d). Please "
571 "contact the vendor for the correct version.",
575 if (
m->module_index == -1) {
578 "because the dynamic module limit was "
579 "reached. Please increase "
580 "DYNAMIC_MODULE_LIMIT and recompile.",
m->name);
593 if (
sym->modp ==
m) {
601 if (
m->next ==
NULL) {
602 m->next = ap_top_module;
608 int slen = strlen(
"_module");
637 if (
m->name[strlen(
m->name)-1] ==
')') {
639 memcpy(tmp,
m->name, strlen(
m->name)-1);
640 tmp[strlen(
m->name)-1] =
'\0';
666 modp = ap_top_module;
669 ap_top_module =
modp->next;
684 "Cannot remove module %s: not found in module list",
697 m->module_index = -1;
704 const char *short_name)
754 if (*
m2 ==
mod && done == 0)
787 sizeof(module *) * conf_vector_length);
796 return "Ouch! Out of memory in ap_setup_prelinked_modules()!";
851#define AP_MAX_ARGC 64
858 const char *errmsg =
NULL;
871 "%s in .htaccess forbidden by AllowOverride",
875 else if (
parms->directive &&
parms->directive->parent) {
877 parms->directive->parent->directive,
">",
882 " not allowed here",
NULL);
889 switch (
cmd->args_how) {
891#ifdef RESOLVE_ENV_PER_TOKEN
903 if (*w ==
'\0' && *
args ==
'\0') {
923 if (*w ==
'\0' || *
args != 0)
933 if (*w ==
'\0' || *
w2 ==
'\0' || *
args != 0)
943 if (*w ==
'\0' || *
args != 0)
954 if (*w ==
'\0' || *
w2 ==
'\0' || *
w3 ==
'\0' || *
args != 0)
965 if (*w ==
'\0' || *
w2 ==
'\0' || *
args != 0)
967 " takes two or three arguments",
977 if (*w ==
'\0' || *
args != 0)
979 " takes one, two or three arguments",
989 if (*w ==
'\0' || (
w2 && *
w2 && !
w3) || *
args != 0)
991 " takes one or three arguments",
1001 " requires at least one argument",
1004 while (*w !=
'\0') {
1018 if (*w ==
'\0' || *
args == 0)
1020 " requires at least two arguments",
1048 " is improperly configured internally (server bug)",
1090 if (!section_config &&
mod->create_dir_config) {
1101 return section_config;
1124 if (*l ==
'#' || *l ==
'\0')
1127#if RESOLVE_ENV_PER_TOKEN
1147 if (*
lastc ==
'>') {
1157 newdir->line_num =
parms->config_file->line_number;
1181 (*current)->
parent = (*curr_parent);
1189 *conftree = *current;
1191 while ((*current)->next !=
NULL) {
1192 (*current) = (*current)->
next;
1193 (*current)->
parent = (*curr_parent);
1212 " without matching <",
cmd_name + 2,
1221 "> directive missing closing '>'",
NULL);
1227 (*curr_parent)->directive + 1) != 0) {
1230 (*curr_parent)->directive + 1,
"> but saw ",
1248#define VARBUF_INIT_LEN 200
1249#define VARBUF_MAX_LEN (16*1024*1024)
1311 parms->err_directive = current;
1314 APLOGNO(02296)
"Unknown directive %s "
1315 "perhaps misspelled or defined by a module "
1316 "not included in the server configuration",
dir);
1322 "', perhaps misspelled or defined by a module "
1323 "not included in the server configuration",
1350 if (!
parms->err_directive) {
1351 parms->err_directive = current;
1369 for (; current !=
NULL; current = current->
next) {
1376 if (errmsg !=
NULL) {
1403 if (current !=
NULL) {
1415 while (current->
next) {
1416 current = current->
next;
1436 if (*conftree ==
NULL && current !=
NULL) {
1437 *conftree = current;
1485 char *error_str =
NULL;
1490 if ((*
arg ==
'\0') || (*
endptr !=
'\0')) {
1492 "Invalid value for directive %s, expected integer",
1493 cmd->directive->directive);
1561 return cmd->cmd->errmsg;
1571 int index,
int level)
1592{
NULL, 0, 0,
NULL, -1,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL};
1636 if (
cmd->pool ==
cmd->temp_pool)
1652 directive + 1,
"> but saw ",
1676 directive + 1,
"> before end of configuration",
1697 "', perhaps misspelled or defined by a module "
1698 "not included in the server configuration",
1779 parms.temp_pool = ptemp;
1792 return apr_pstrcat(
p,
"Syntax error in -C/-c directive: ", errmsg,
1832 line_number = *(
unsigned *)
data;
1838 if (line_number > 0) {
1860 parms.temp_pool = ptemp;
1867 return apr_psprintf(
p,
"Could not open configuration file %s: %pm",
1875 parms.config_file = cfp;
1880 if (
parms.err_directive)
1882 parms.err_directive->line_num,
1913 cfgs.conftree = conftree;
1915 w.
prefix =
"Include/IncludeOptional: ";
1966 parms.temp_pool = ptemp;
1974 if (
parms.err_directive)
1976 "Syntax error on line %d of %s:",
1977 parms.err_directive->line_num,
1978 parms.err_directive->filename);
2057 "%s pcfg_openfile: unable to check htaccess file, "
2058 "ensure it is readable and that '%s' "
2062 "Server unable to read htaccess file, denying "
2063 "access to be safe");
2071 new->dir =
parms.path;
2072 new->override =
override;
2092 s->server_admin =
NULL;
2093 s->server_hostname =
NULL;
2094 s->server_scheme =
NULL;
2095 s->error_fname =
NULL;
2097 s->keep_alive_timeout = 0;
2099 s->keep_alive_max = -1;
2102 s->log.module_levels =
NULL;
2129 if (
old->module_levels) {
2173 virt->lookup_defaults =
2175 virt->lookup_defaults);
2180 if (
virt->timeout == 0)
2183 if (
virt->keep_alive_timeout == 0)
2186 if (
virt->keep_alive == -1)
2189 if (
virt->keep_alive_max == -1)
2223 s->process = process;
2226 s->server_hostname =
NULL;
2227 s->server_scheme =
NULL;
2230 s->log.module_levels =
NULL;
2247 "initialisation: bug or getaddrinfo fail");
2251 s->addrs->host_port = 0;
2252 s->addrs->virthost =
"";
2253 s->names =
s->wild_names =
NULL;
2370 if (
m->create_server_config)
2372 (*
m->create_server_config)(
p,
s));
2374 if (
m->create_dir_config)
2376 (*
m->create_dir_config)(
p,
NULL));
2383 for (
m = ap_top_module;
m;
m =
m->next) {
2384 if (
m->rewrite_args) {
2385 (*
m->rewrite_args)(process);
2410 printf(
"\tAllowed in *.conf ");
2417 printf(
"only outside <Directory>, <Files>, <Location>, or <If>");
2420 printf(
"only inside <Directory>, <Files>, <Location>, or <If>");
2427 printf(
" [no per-dir config]");
2430 printf(
" and in .htaccess\n\twhen AllowOverride");
2504 printf(
"Compiled in modules:\n");
2539 while (current !=
NULL) {
2544 current = current->
next;
Symbol export macros and hook functions.
#define AP_DECLARE_NONSTD(type)
#define AP_IMPLEMENT_HOOK_VOID(name, args_decl, args_use)
#define AP_IMPLEMENT_HOOK_RUN_ALL(ret, name, args_decl, args_use, ok, decline)
#define AP_IMPLEMENT_HOOK_RUN_FIRST(ret, name, args_decl, args_use, decline)
const char apr_size_t len
APR Portability Routines.
apr_size_t const unsigned char unsigned int unsigned int d
APR Standard Headers Support.
static apr_status_t arr_elts_close(void *param)
static const char * invoke_cmd(const command_rec *cmd, cmd_parms *parms, void *mconfig, const char *args)
const command_rec * ap_find_command_in_modules(const char *cmd_name, module **mod)
const char * ap_init_virtual_host(apr_pool_t *p, const char *hostname, server_rec *main_server, server_rec **ps)
static int conf_vector_length_pre_config(apr_pool_t *pconf, apr_pool_t *plog, apr_pool_t *ptemp)
static apr_status_t reset_conf_vector_length(void *dummy)
ap_conf_vector_t * ap_merge_per_dir_configs(apr_pool_t *p, ap_conf_vector_t *base, ap_conf_vector_t *new_conf)
static int dynamic_modules
void * ap_set_config_vectors(server_rec *server, ap_conf_vector_t *section_vector, const char *section, module *mod, apr_pool_t *pconf)
static merger_func * merger_func_cache
static void show_overrides(const command_rec *pc, module *pm)
static ap_conf_vector_t * create_server_config(apr_pool_t *p, server_rec *s)
static void init_config_globals(apr_pool_t *p)
static apr_status_t arr_elts_getstr(void *buf, apr_size_t bufsiz, void *param)
ap_conf_vector_t * ap_create_conn_config(apr_pool_t *p)
void *(* merger_func)(apr_pool_t *, void *, void *)
int(* handler_func)(request_rec *)
const command_rec * ap_find_command(const char *name, const command_rec *cmds)
static int conf_vector_length
int ap_parse_htaccess(ap_conf_vector_t **result, request_rec *r, int override, int override_opts, apr_table_t *override_list, const char *d, const char *access_names)
static int reserved_module_slots
static const char * process_command_config(server_rec *s, apr_array_header_t *arr, ap_directive_t **conftree, apr_pool_t *p, apr_pool_t *ptemp)
int ap_invoke_handler(request_rec *r)
static void ap_add_module_commands(module *m, apr_pool_t *p)
static void rebuild_conf_hash(apr_pool_t *p, int add_prelinked)
static const char * execute_now(char *cmd_line, const char *args, cmd_parms *parms, apr_pool_t *p, apr_pool_t *ptemp, ap_directive_t **sub_tree, ap_directive_t *parent)
static void dump_config_name(const char *fname, apr_pool_t *p)
static cmd_parms default_parms
static apr_hash_t * ap_config_hash
static int invoke_filter_init(request_rec *r, ap_filter_t *filters)
static ap_conf_vector_t * create_default_per_dir_config(apr_pool_t *p)
void *(* dir_maker_func)(apr_pool_t *, char *)
static ap_conf_vector_t * create_empty_config(apr_pool_t *p)
static const char * ap_build_config_sub(apr_pool_t *p, apr_pool_t *temp_pool, const char *l, cmd_parms *parms, ap_directive_t **current, ap_directive_t **curr_parent, ap_directive_t **conftree)
static char ** ap_module_short_names
ap_conf_vector_t * ap_create_per_dir_config(apr_pool_t *p)
static int count_directives_sub(const char *directive, ap_directive_t *current)
static const char * ap_walk_config_sub(const ap_directive_t *current, cmd_parms *parms, ap_conf_vector_t *section_vector)
static server_rec * init_server_config(process_rec *process, apr_pool_t *p)
static const char * process_resource_config_cb(ap_dir_match_t *w, const char *fname)
static void merge_server_configs(apr_pool_t *p, ap_conf_vector_t *base, server_rec *virt)
static event_retained_data * retained
static apr_pool_t * pconf
ap_directive_t * ap_conftree
ap_directive_t * ap_add_node(ap_directive_t **parent, ap_directive_t *current, ap_directive_t *toadd, int child)
request_rec int int apr_table_t * override_list
void ap_register_hooks(module *m, apr_pool_t *p)
const char * ap_build_cont_config(apr_pool_t *p, apr_pool_t *temp_pool, cmd_parms *parms, ap_directive_t **current, ap_directive_t **curr_parent, char *orig_directive)
#define AP_MODULE_FLAG_ALWAYS_MERGE
char * ap_runtime_dir_relative(apr_pool_t *p, const char *file)
#define ap_get_module_config(v, m)
ap_conf_vector_t * ap_create_request_config(apr_pool_t *p)
apr_status_t ap_pool_cleanup_set_null(void *data)
apr_status_t ap_open_htaccess(request_rec *r, const char *dir_name, const char *access_name, ap_configfile_t **conffile, const char **full_name)
const char * ap_setup_prelinked_modules(process_rec *process)
ap_module_symbol_t ap_prelinked_module_symbols[]
const char * ap_build_config(cmd_parms *parms, apr_pool_t *p, apr_pool_t *temp_pool, ap_directive_t **conftree)
void ap_set_module_loglevel(apr_pool_t *pool, struct ap_logconf *l, int index, int level)
const char * ap_set_string_slot_lower(cmd_parms *cmd, void *struct_ptr, const char *arg_)
const char * ap_pcfg_strerror(apr_pool_t *p, ap_configfile_t *cfp, apr_status_t rc)
int ap_cfg_closefile(ap_configfile_t *cfp)
const char * ap_process_fnmatch_configs(server_rec *s, const char *fname, ap_directive_t **conftree, apr_pool_t *p, apr_pool_t *ptemp, int optional)
void ap_remove_loaded_module(module *mod)
void ap_run_rewrite_args(process_rec *process)
int ap_run_handler(request_rec *r)
apr_status_t ap_pcfg_openfile(ap_configfile_t **ret_cfg, apr_pool_t *p, const char *name)
const char * ap_soak_end_container(cmd_parms *cmd, char *directive)
struct ap_conf_vector_t ap_conf_vector_t
ap_conf_vector_t * section_vector
int ap_exists_directive(apr_pool_t *p, const char *name)
const char * ap_set_deprecated(cmd_parms *cmd, void *struct_ptr, const char *arg)
int ap_get_module_flags(const module *m)
void ap_show_directives(void)
void ap_fixup_virtual_hosts(apr_pool_t *p, server_rec *main_server)
const char * ap_set_flag_slot_char(cmd_parms *cmd, void *struct_ptr_v, int arg)
const char * ap_set_int_slot(cmd_parms *cmd, void *struct_ptr, const char *arg)
int ap_process_config_tree(server_rec *s, ap_directive_t *conftree, apr_pool_t *p, apr_pool_t *ptemp)
char * ap_server_root_relative(apr_pool_t *p, const char *file)
const char * ap_set_string_slot(cmd_parms *cmd, void *struct_ptr, const char *arg)
const char * ap_find_module_short_name(int module_index)
#define ap_set_module_config(v, m, val)
void ap_hook_pre_config(ap_HOOK_pre_config_t *pf, const char *const *aszPre, const char *const *aszSucc, int nOrder)
void ap_reserve_module_slots(int count)
void ap_remove_module(module *m)
const char * ap_add_module(module *m, apr_pool_t *p, const char *sym_name)
void ap_merge_log_config(const struct ap_logconf *old_conf, struct ap_logconf *new_conf)
request_rec int int override_opts
void * ap_retained_data_create(const char *key, apr_size_t size)
apr_status_t ap_run_open_htaccess(request_rec *r, const char *dir_name, const char *access_name, ap_configfile_t **conffile, const char **full_name)
const char * ap_add_loaded_module(module *mod, apr_pool_t *p, const char *short_name)
int ap_method_is_limited(cmd_parms *cmd, const char *method)
ap_configfile_t * ap_pcfg_open_custom(apr_pool_t *p, const char *descr, void *param, apr_status_t(*getc_func)(char *ch, void *param), apr_status_t(*gets_func)(void *buf, apr_size_t bufsiz, void *param), apr_status_t(*close_func)(void *param))
request_rec int int apr_table_t const char * path
server_rec * ap_read_config(process_rec *process, apr_pool_t *ptemp, const char *filename, ap_directive_t **conftree)
const char * ap_set_flag_slot(cmd_parms *cmd, void *struct_ptr_v, int arg)
ap_conf_vector_t const char * section
void ap_single_module_configure(apr_pool_t *p, server_rec *s, module *m)
const char server_rec server_rec ** ps
void * ap_retained_data_get(const char *key)
const char * ap_set_file_slot(cmd_parms *cmd, void *struct_ptr, const char *arg)
const char * ap_walk_config(ap_directive_t *current, cmd_parms *parms, ap_conf_vector_t *section_vector)
const char * ap_find_module_name(module *m)
request_rec int int apr_table_t const char const char * access_name
const char * ap_process_resource_config(server_rec *s, const char *fname, ap_directive_t **conftree, apr_pool_t *p, apr_pool_t *ptemp)
void ap_reset_module_loglevels(struct ap_logconf *l, int val)
ap_conf_vector_t ap_conf_vector_t * new_conf
void ap_reserve_module_slots_directive(const char *directive)
void ap_show_modules(void)
const char server_rec * main_server
struct ap_logconf * ap_new_log_config(apr_pool_t *p, const struct ap_logconf *old)
#define DEFAULT_LIMIT_REQUEST_LINE
#define DEFAULT_LIMIT_REQUEST_FIELDS
#define DEFAULT_KEEPALIVE
#define DEFAULT_KEEPALIVE_TIMEOUT
#define DYNAMIC_MODULE_LIMIT
#define DEFAULT_LIMIT_REQUEST_FIELDSIZE
#define SERVER_CONFIG_FILE
int ap_exists_config_define(const char *name)
#define ap_get_core_module_config(v)
void ap_register_config_hooks(apr_pool_t *p)
void ap_core_reorder_directories(apr_pool_t *, server_rec *)
const char * ap_server_argv0
const char * ap_server_root
apr_array_header_t * ap_server_pre_read_config
apr_array_header_t * ap_server_config_defines
const char * ap_runtime_dir
apr_array_header_t * ap_server_post_read_config
server_rec * ap_server_conf
const unsigned char * buf
#define MODULE_MAGIC_NUMBER_MAJOR
int ap_method_number_of(const char *method)
void ap_run_insert_filter(request_rec *r)
apr_status_t ap_varbuf_cfg_getline(struct ap_varbuf *vb, ap_configfile_t *cfp, apr_size_t max_len)
void ap_varbuf_free(struct ap_varbuf *vb)
void ap_varbuf_init(apr_pool_t *pool, struct ap_varbuf *vb, apr_size_t init_size)
const char * ap_parse_vhost_addrs(apr_pool_t *p, const char *hostname, server_rec *s)
#define AP_REQUEST_IS_TRUSTED_CT(r)
const char * ap_check_mpm(void)
#define APR_STATUS_IS_ENOTDIR(s)
#define APR_STATUS_IS_ENOENT(s)
#define APR_STATUS_IS_EPATHWILD(s)
apr_pool_t const char apr_dbd_t const char ** error
const char apr_ssize_t slen
APU_DECLARE_DATA const char * apr_hook_debug_current
APU_DECLARE_DATA int apr_hook_debug_enabled
#define APR_HOOK_LINK(name)
#define APR_HOOK_STRUCT(members)
APU_DECLARE_DATA apr_pool_t * apr_hook_global_pool
#define APR_HOOK_REALLY_LAST
apr_memcache_server_t * server
#define NONFATAL_OVERRIDE
#define ap_is_HTTP_VALID_RESPONSE(x)
#define HTTP_INTERNAL_SERVER_ERROR
#define AP_DIR_FLAG_RECURSIVE
char * ap_make_full_path(apr_pool_t *a, const char *dir, const char *f)
int ap_cstr_casecmp(const char *s1, const char *s2)
#define ap_strrchr_c(s, c)
const char * ap_dir_nofnmatch(ap_dir_match_t *w, const char *fname) __attribute__((nonnull(1
#define ap_strchr_c(s, c)
const char * ap_resolve_env(apr_pool_t *p, const char *word)
void * ap_calloc(size_t nelem, size_t size) __attribute__((malloc))
void ap_str_tolower(char *s)
#define AP_DIR_FLAG_OPTIONAL
void * ap_malloc(size_t size) __attribute__((malloc))
const char const char * ap_dir_fnmatch(ap_dir_match_t *w, const char *path, const char *fname) __attribute__((nonnull(1
char * ap_getword_conf(apr_pool_t *p, const char **line)
const char int apr_pool_t * pool
apr_seek_where_t apr_off_t * offset
const char apr_file_t * file
#define APR_FILEPATH_TRUENAME
apr_array_header_t ** result
#define APR_HASH_KEY_STRING
apr_uint32_t apr_pool_t apr_uint32_t apr_pollset_method_e method
#define apr_pcalloc(p, size)
apr_size_t const char * filename
const apr_array_header_t * arr
const char const char *const * args
#define apr_time_from_sec(sec)
#define AP_DEFAULT_HANDLER_NAME
static apr_pool_t * pchild
static int check_config(apr_pool_t *pconf, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *s)
static void child_init(apr_pool_t *p, server_rec *s)
static int post_config(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *s)
static int pre_config(apr_pool_t *pconf, apr_pool_t *plog, apr_pool_t *ptemp)
Multi-Processing Modules functions.
const char *(* cb)(ap_dir_match_t *w, const char *fname)
Structure used to build the config tree.
struct ap_directive_t * next
struct ap_directive_t * parent
struct ap_directive_t * first_child
struct ap_directive_t * last
The representation of a filter chain.
signed char * module_levels
struct ap_mod_list_struct * next
This structure is used to assign symbol names to module pointers.
apr_array_header_t * array
ap_directive_t ** conftree
Per-directory configuration.
This represents the result of calling htaccess; these are cached for each request.
const struct htaccess_result * next
void *(* create_dir_config)(apr_pool_t *p, char *dir)
A structure that represents one process.
A structure that represents the current request.
const char * content_type
struct ap_filter_t * output_filters
const struct htaccess_result * htaccess
struct ap_filter_t * input_filters
A structure to be used for Per-vhost config.
A structure to store information for each virtual server.
apr_interval_time_t timeout
apr_interval_time_t keep_alive_timeout
struct ap_conf_vector_t * lookup_defaults
struct ap_conf_vector_t * module_config
Apache resizable variable length buffer library.
void ap_init_vhost_config(apr_pool_t *p)
typedef int(WSAAPI *apr_winapi_fpt_WSAPoll)(IN OUT LPWSAPOLLFD fdArray
static NAMED * lookup(XML_Parser parser, HASH_TABLE *table, KEY name, size_t createSize)