diff options
| author | Arno Töll <arno@debian.org> | 2013-12-23 23:50:09 -1100 |
|---|---|---|
| committer | Arno Töll <arno@debian.org> | 2013-12-23 23:50:09 -1100 |
| commit | 86d5cc79d9d6750da8771fdb0c9ab22c19b8ad45 (patch) | |
| tree | 5037da70bf37c0ee93f0ea09f054bdfb278befe0 /include | |
| parent | 4a336a5b117419c33c29eadd6409c69df78cd586 (diff) | |
| download | apache2-86d5cc79d9d6750da8771fdb0c9ab22c19b8ad45.tar.gz | |
Imported Upstream version 2.4.7upstream/2.4.7
Diffstat (limited to 'include')
| -rw-r--r-- | include/ap_expr.h | 2 | ||||
| -rw-r--r-- | include/ap_mmn.h | 6 | ||||
| -rw-r--r-- | include/ap_release.h | 2 | ||||
| -rw-r--r-- | include/ap_slotmem.h | 1 | ||||
| -rw-r--r-- | include/http_config.h | 29 | ||||
| -rw-r--r-- | include/http_protocol.h | 2 | ||||
| -rw-r--r-- | include/httpd.h | 8 | ||||
| -rw-r--r-- | include/mpm_common.h | 44 | ||||
| -rw-r--r-- | include/util_fcgi.h | 280 | ||||
| -rw-r--r-- | include/util_ldap.h | 4 |
10 files changed, 372 insertions, 6 deletions
diff --git a/include/ap_expr.h b/include/ap_expr.h index f0463bbf..55fff363 100644 --- a/include/ap_expr.h +++ b/include/ap_expr.h @@ -107,7 +107,7 @@ typedef struct { request_rec *r; /** the current connection */ conn_rec *c; - /** the current connection */ + /** the current virtual host */ server_rec *s; /** the pool to use */ apr_pool_t *p; diff --git a/include/ap_mmn.h b/include/ap_mmn.h index 89c41409..965483f0 100644 --- a/include/ap_mmn.h +++ b/include/ap_mmn.h @@ -418,6 +418,10 @@ * ap_proxy_pass_brigade() * 20120211.22 (2.4.5-dev) No longer prevent usage of strtoul() * 20120211.23 (2.4.5-dev) Add ap_proxy_clear_connection() + * 20120211.24 (2.4.7-dev) add open_htaccess hook. + * 20120211.25 (2.4.7-dev) Add conn_sense_e + * 20120211.26 (2.4.7-dev) Add util_fcgi.h, FastCGI protocol support + * 20120211.27 (2.4.7-dev) Add ap_podx_restart_t and ap_mpm_podx_* */ #define MODULE_MAGIC_COOKIE 0x41503234UL /* "AP24" */ @@ -425,7 +429,7 @@ #ifndef MODULE_MAGIC_NUMBER_MAJOR #define MODULE_MAGIC_NUMBER_MAJOR 20120211 #endif -#define MODULE_MAGIC_NUMBER_MINOR 23 /* 0...n */ +#define MODULE_MAGIC_NUMBER_MINOR 27 /* 0...n */ /** * Determine if the server's current MODULE_MAGIC_NUMBER is at least a diff --git a/include/ap_release.h b/include/ap_release.h index 0d54fa6f..a089374c 100644 --- a/include/ap_release.h +++ b/include/ap_release.h @@ -43,7 +43,7 @@ #define AP_SERVER_MAJORVERSION_NUMBER 2 #define AP_SERVER_MINORVERSION_NUMBER 4 -#define AP_SERVER_PATCHLEVEL_NUMBER 6 +#define AP_SERVER_PATCHLEVEL_NUMBER 7 #define AP_SERVER_DEVBUILD_BOOLEAN 0 /* Synchronize the above with docs/manual/style/version.ent */ diff --git a/include/ap_slotmem.h b/include/ap_slotmem.h index b9c81036..e1615e91 100644 --- a/include/ap_slotmem.h +++ b/include/ap_slotmem.h @@ -39,6 +39,7 @@ #include "apr_shm.h" #include "apr_global_mutex.h" #include "apr_file_io.h" +#include "apr_md5.h" #if APR_HAVE_UNISTD_H #include <unistd.h> /* for getpid() */ diff --git a/include/http_config.h b/include/http_config.h index 7ee3760d..da24d70f 100644 --- a/include/http_config.h +++ b/include/http_config.h @@ -197,7 +197,7 @@ typedef const char *(*cmd_func) (); #endif /* AP_HAVE_DESIGNATED_INITIALIZER */ /** - * The command record structure. Each modules can define a table of these + * The command record structure. Modules can define a table of these * to define the directives it will implement. */ typedef struct command_struct command_rec; @@ -492,7 +492,7 @@ AP_DECLARE(void *) ap_get_module_config(const ap_conf_vector_t *cv, const module *m); /** - * Generic accessors for other modules to set at their own module-specific + * Generic accessors for other modules to set their own module-specific * data * @param cv The vector in which the modules configuration is stored. * usually r->per_dir_config or s->module_config @@ -1322,6 +1322,31 @@ AP_DECLARE_HOOK(int,quick_handler,(request_rec *r, int lookup_uri)) AP_DECLARE_HOOK(void,optional_fn_retrieve,(void)) /** + * Allow modules to open htaccess files or perform operations before doing so + * @param r The current request + * @param dir_name The directory for which the htaccess file should be opened + * @param access_name The filename for which the htaccess file should be opened + * @param conffile Where the pointer to the opened ap_configfile_t must be + * stored + * @param full_name Where the full file name of the htaccess file must be + * stored. + * @return APR_SUCCESS on success, + * APR_ENOENT or APR_ENOTDIR if no htaccess file exists, + * AP_DECLINED to let later modules do the opening, + * any other error code on error. + */ +AP_DECLARE_HOOK(apr_status_t,open_htaccess, + (request_rec *r, const char *dir_name, const char *access_name, + ap_configfile_t **conffile, const char **full_name)) + +/** + * Core internal function, use ap_run_open_htaccess() instead. + */ +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); + +/** * A generic pool cleanup that will reset a pointer to NULL. For use with * apr_pool_cleanup_register. * @param data The address of the pointer diff --git a/include/http_protocol.h b/include/http_protocol.h index 415270b2..cdf8f589 100644 --- a/include/http_protocol.h +++ b/include/http_protocol.h @@ -411,7 +411,7 @@ AP_DECLARE(int) ap_rwrite(const void *buf, int nbyte, request_rec *r); */ static APR_INLINE int ap_rputs(const char *str, request_rec *r) { - return ap_rwrite(str, strlen(str), r); + return ap_rwrite(str, (int)strlen(str), r); } /** diff --git a/include/httpd.h b/include/httpd.h index 36cd58d5..c84e2446 100644 --- a/include/httpd.h +++ b/include/httpd.h @@ -1175,12 +1175,20 @@ typedef enum { CONN_STATE_LINGER_SHORT /* MPM has started lingering close with short timeout */ } conn_state_e; +typedef enum { + CONN_SENSE_DEFAULT, + CONN_SENSE_WANT_READ, /* next event must be read */ + CONN_SENSE_WANT_WRITE /* next event must be write */ +} conn_sense_e; + /** * @brief A structure to contain connection state information */ struct conn_state_t { /** Current state of the connection */ conn_state_e state; + /** Whether to read instead of write, or write instead of read */ + conn_sense_e sense; }; /* Per-vhost config... */ diff --git a/include/mpm_common.h b/include/mpm_common.h index 0a98d700..8bb0ec54 100644 --- a/include/mpm_common.h +++ b/include/mpm_common.h @@ -278,6 +278,50 @@ AP_DECLARE(apr_status_t) ap_mpm_pod_signal(ap_pod_t *pod); */ AP_DECLARE(void) ap_mpm_pod_killpg(ap_pod_t *pod, int num); +#define AP_MPM_PODX_RESTART_CHAR '$' +#define AP_MPM_PODX_GRACEFUL_CHAR '!' + +typedef enum { AP_MPM_PODX_NORESTART, AP_MPM_PODX_RESTART, AP_MPM_PODX_GRACEFUL } ap_podx_restart_t; + +/** + * Open the extended pipe-of-death. + * @param p The pool to use for allocating the pipe + * @param pod The pipe-of-death that is created. + */ +AP_DECLARE(apr_status_t) ap_mpm_podx_open(apr_pool_t *p, ap_pod_t **pod); + +/** + * Check the extended pipe to determine if the process has been signalled to die. + */ +AP_DECLARE(int) ap_mpm_podx_check(ap_pod_t *pod); + +/** + * Close the pipe-of-death + * + * @param pod The pipe-of-death to close. + */ +AP_DECLARE(apr_status_t) ap_mpm_podx_close(ap_pod_t *pod); + +/** + * Write data to the extended pipe-of-death, signalling that one child process + * should die. + * @param pod the pipe-of-death to write to. + * @param graceful restart-type + */ +AP_DECLARE(apr_status_t) ap_mpm_podx_signal(ap_pod_t *pod, + ap_podx_restart_t graceful); + +/** + * Write data to the extended pipe-of-death, signalling that all child process + * should die. + * @param pod The pipe-of-death to write to. + * @param num The number of child processes to kill + * @param graceful restart-type + */ +AP_DECLARE(void) ap_mpm_podx_killpg(ap_pod_t *pod, int num, + ap_podx_restart_t graceful); + + #endif /* !WIN32 || DOXYGEN */ /** diff --git a/include/util_fcgi.h b/include/util_fcgi.h new file mode 100644 index 00000000..849fdee9 --- /dev/null +++ b/include/util_fcgi.h @@ -0,0 +1,280 @@ +/* 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. + */ + +/** + * @file util_fcgi.h + * @brief FastCGI protocol defitions and support routines + * + * @defgroup APACHE_CORE_FASTCGI FastCGI Tools + * @ingroup APACHE_CORE + * @{ + */ + +#ifndef APACHE_UTIL_FCGI_H +#define APACHE_UTIL_FCGI_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include "httpd.h" + +/** + * @brief A structure that represents the fixed header fields + * at the beginning of a "FastCGI record" (i.e., the data prior + * to content data and padding). + */ +typedef struct { + /** See values for version, below */ + unsigned char version; + /** See values for type, below */ + unsigned char type; + /** request id, in two parts */ + unsigned char requestIdB1; + unsigned char requestIdB0; + /** content length, in two parts */ + unsigned char contentLengthB1; + unsigned char contentLengthB0; + /** padding length */ + unsigned char paddingLength; + /** 8-bit reserved field */ + unsigned char reserved; +} ap_fcgi_header; + +/* + * Number of bytes in the header portion of a FastCGI record + * (i.e., ap_fcgi_header structure). Future versions of the + * protocol may increase the size. + */ +#define AP_FCGI_HEADER_LEN 8 + +/* + * Maximum number of bytes in the content portion of a FastCGI record. + */ +#define AP_FCGI_MAX_CONTENT_LEN 65535 + +/** + * Possible values for the version field of ap_fcgi_header + */ +#define AP_FCGI_VERSION_1 1 + +/** + * Possible values for the type field of ap_fcgi_header + */ +#define AP_FCGI_BEGIN_REQUEST 1 +#define AP_FCGI_ABORT_REQUEST 2 +#define AP_FCGI_END_REQUEST 3 +#define AP_FCGI_PARAMS 4 +#define AP_FCGI_STDIN 5 +#define AP_FCGI_STDOUT 6 +#define AP_FCGI_STDERR 7 +#define AP_FCGI_DATA 8 +#define AP_FCGI_GET_VALUES 9 +#define AP_FCGI_GET_VALUES_RESULT 10 +#define AP_FCGI_UNKNOWN_TYPE 11 +#define AP_FCGI_MAXTYPE (AP_FCGI_UNKNOWN_TYPE) + +/** + * Offsets of the various fields of ap_fcgi_header + */ +#define AP_FCGI_HDR_VERSION_OFFSET 0 +#define AP_FCGI_HDR_TYPE_OFFSET 1 +#define AP_FCGI_HDR_REQUEST_ID_B1_OFFSET 2 +#define AP_FCGI_HDR_REQUEST_ID_B0_OFFSET 3 +#define AP_FCGI_HDR_CONTENT_LEN_B1_OFFSET 4 +#define AP_FCGI_HDR_CONTENT_LEN_B0_OFFSET 5 +#define AP_FCGI_HDR_PADDING_LEN_OFFSET 6 +#define AP_FCGI_HDR_RESERVED_OFFSET 7 + +/** + * @brief This represents the content data of the FastCGI record when + * the type is AP_FCGI_BEGIN_REQUEST. + */ +typedef struct { + /** + * role, in two parts + * See values for role, below + */ + unsigned char roleB1; + unsigned char roleB0; + /** + * flags + * See values for flags bits, below + */ + unsigned char flags; + /** reserved */ + unsigned char reserved[5]; +} ap_fcgi_begin_request_body; + +/* + * Values for role component of ap_fcgi_begin_request_body + */ +#define AP_FCGI_RESPONDER 1 +#define AP_FCGI_AUTHORIZER 2 +#define AP_FCGI_FILTER 3 + +/* + * Values for flags bits of ap_fcgi_begin_request_body + */ +#define AP_FCGI_KEEP_CONN 1 /* otherwise the application closes */ + +/** + * Offsets of the various fields of ap_fcgi_begin_request_body + */ +#define AP_FCGI_BRB_ROLEB1_OFFSET 0 +#define AP_FCGI_BRB_ROLEB0_OFFSET 1 +#define AP_FCGI_BRB_FLAGS_OFFSET 2 +#define AP_FCGI_BRB_RESERVED0_OFFSET 3 +#define AP_FCGI_BRB_RESERVED1_OFFSET 4 +#define AP_FCGI_BRB_RESERVED2_OFFSET 5 +#define AP_FCGI_BRB_RESERVED3_OFFSET 6 +#define AP_FCGI_BRB_RESERVED4_OFFSET 7 + +/** + * Pack ap_fcgi_header + * @param h The header to read from + * @param a The array to write to, of size AP_FCGI_HEADER_LEN + */ +AP_DECLARE(void) ap_fcgi_header_to_array(ap_fcgi_header *h, + unsigned char a[]); + +/** + * Unpack header of FastCGI record into ap_fcgi_header + * @param h The header to write to + * @param a The array to read from, of size AP_FCGI_HEADER_LEN + */ +AP_DECLARE(void) ap_fcgi_header_from_array(ap_fcgi_header *h, + unsigned char a[]); + +/** + * Unpack header of FastCGI record into individual fields + * @param version The version, on output + * @param type The type, on output + * @param request_id The request id, on output + * @param content_len The content length, on output + * @param padding_len The amount of padding following the content, on output + * @param a The array to read from, of size AP_FCGI_HEADER_LEN + */ +AP_DECLARE(void) ap_fcgi_header_fields_from_array(unsigned char *version, + unsigned char *type, + apr_uint16_t *request_id, + apr_uint16_t *content_len, + unsigned char *padding_len, + unsigned char a[]); + +/** + * Pack ap_fcgi_begin_request_body + * @param h The begin-request body to read from + * @param a The array to write to, of size AP_FCGI_HEADER_LEN + */ +AP_DECLARE(void) ap_fcgi_begin_request_body_to_array(ap_fcgi_begin_request_body *h, + unsigned char a[]); + +/** + * Fill in a FastCGI request header with the required field values. + * @param header The header to fill in + * @param type The type of record + * @param request_id The request id + * @param content_len The amount of content which follows the header + * @param padding_len The amount of padding which follows the content + * + * The header array must be at least AP_FCGI_HEADER_LEN bytes long. + */ +AP_DECLARE(void) ap_fcgi_fill_in_header(ap_fcgi_header *header, + unsigned char type, + apr_uint16_t request_id, + apr_uint16_t content_len, + unsigned char padding_len); + +/** + * Fill in a FastCGI begin request body with the required field values. + * @param brb The begin-request-body to fill in + * @param role AP_FCGI_RESPONDER or other roles + * @param flags 0 or a combination of flags like AP_FCGI_KEEP_CONN + */ +AP_DECLARE(void) ap_fcgi_fill_in_request_body(ap_fcgi_begin_request_body *brb, + int role, + unsigned char flags); + +/** + * Compute the buffer size needed to encode the next portion of + * the provided environment table. + * @param env The environment table + * @param maxlen The maximum buffer size allowable, capped at + * AP_FCGI_MAX_CONTENT_LEN. + * @param starting_elem On input, the next element of the table array + * to process in this FastCGI record. On output, the next element to + * process on the *next* FastCGI record. + * @return Size of buffer needed to encode the next part, or 0 + * if no more can be encoded. When 0 is returned: If starting_elem + * has reached the end of the table array, all has been encoded; + * otherwise, the next envvar can't be encoded within the specified + * limit. + * @note If an envvar can't be encoded within the specified limit, + * the caller can log a warning and increment starting_elem and try + * again or increase the limit or fail, as appropriate for the module. + */ +AP_DECLARE(apr_size_t) ap_fcgi_encoded_env_len(apr_table_t *env, + apr_size_t maxlen, + int *starting_elem); + +/** + * Encode the next portion of the provided environment table using + * a buffer previously allocated. + * @param r The request, for logging + * @param env The environment table + * @param buffer A buffer to contain the encoded environment table + * @param buflen The length of the buffer, previously computed by + * ap_fcgi_encoded_env_len(). + * @param starting_elem On input, the next element of the table array + * to process in this FastCGI record. On output, the next element to + * process on the *next* FastCGI record. + * @return APR_SUCCESS if a section could be encoded or APR_ENOSPC + * otherwise. + * @note The output starting_elem from ap_fcgi_encoded_env_len + * shouldn't be used as input to ap_fcgi_encode_env when building the + * same FastCGI record. + */ +AP_DECLARE(apr_status_t) ap_fcgi_encode_env(request_rec *r, + apr_table_t *env, + void *buffer, + apr_size_t buflen, + int *starting_elem); + +/** + * String forms for the value of the FCGI_ROLE envvar + */ +#define AP_FCGI_RESPONDER_STR "RESPONDER" +#define AP_FCGI_AUTHORIZER_STR "AUTHORIZER" +#define AP_FCGI_FILTER_STR "FILTER" + +/** + * FastCGI implementations that implement the AUTHORIZER role + * for Apache httpd and allow the application to participate in + * any of the Apache httpd AAA phases typically set the variable + * FCGI_APACHE_ROLE to one of these strings to indicate the + * specific AAA phase. + */ +#define AP_FCGI_APACHE_ROLE_AUTHENTICATOR_STR "AUTHENTICATOR" +#define AP_FCGI_APACHE_ROLE_AUTHORIZER_STR "AUTHORIZER" +#define AP_FCGI_APACHE_ROLE_ACCESS_CHECKER_STR "ACCESS_CHECKER" + +#ifdef __cplusplus +} +#endif + +#endif /* !APACHE_UTIL_FCGI_H */ +/** @} */ diff --git a/include/util_ldap.h b/include/util_ldap.h index c3153981..2db507f5 100644 --- a/include/util_ldap.h +++ b/include/util_ldap.h @@ -83,6 +83,10 @@ #define LDAP_DECLARE_DATA __declspec(dllimport) #endif +#ifdef WIN32 +#define timeval l_timeval +#endif + #ifdef __cplusplus extern "C" { #endif |
