diff --git a/include/http_conf_globals.h b/include/http_conf_globals.h index 5585469ed9..26e9fc4f9e 100644 --- a/include/http_conf_globals.h +++ b/include/http_conf_globals.h @@ -64,17 +64,8 @@ extern "C" { /* TODO: this file should be deleted after the other todos are dealt with */ -/* TODO: extern MODULE_VAR_EXPORT int ap_suexec_enabled; */ -#define ap_suexec_enabled (0) -/* TODO: extern API_VAR_EXPORT int ap_extended_status; */ - /* TODO: extern enum server_token_type ap_server_tokens; */ -/* We want this to have the least chance of being corrupted if there - * is some memory corruption, so we allocate it statically. - */ -/* TODO: extern char ap_coredump_dir[MAX_STRING_LEN]; */ - /* TODO: extern int ap_configtestonly; ... although it pains me because this breaks an abstraction */ /* TODO: extern int ap_docrootcheck; */ diff --git a/include/http_connection.h b/include/http_connection.h index 54eff1cbd1..bbd91d51a9 100644 --- a/include/http_connection.h +++ b/include/http_connection.h @@ -65,6 +65,7 @@ extern "C" { #endif +#ifdef CORE_PRIVATE conn_rec *ap_new_connection(ap_context_t *p, server_rec *server, BUFF *inout, const struct sockaddr_in *remaddr, const struct sockaddr_in *saddr, long id); @@ -72,6 +73,7 @@ conn_rec *ap_new_apr_connection(ap_context_t *p, server_rec *server, BUFF *inout const ap_socket_t *conn_socket, long id); CORE_EXPORT(void) ap_process_connection(conn_rec *); int ap_process_http_connection(conn_rec *); +#endif /* Hooks */ DECLARE_HOOK(void,pre_connection,(conn_rec *)) diff --git a/include/http_core.h b/include/http_core.h index ef096b84ca..1fac2d81b9 100644 --- a/include/http_core.h +++ b/include/http_core.h @@ -154,17 +154,6 @@ API_EXPORT(const char *) ap_auth_name (request_rec *); API_EXPORT(int) ap_satisfies (request_rec *r); API_EXPORT(const ap_array_header_t *) ap_requires (request_rec *); -#ifdef WIN32 -/* - * CGI Script stuff for Win32... - */ -typedef enum { eFileTypeUNKNOWN, eFileTypeBIN, eFileTypeEXE16, eFileTypeEXE32, - eFileTypeSCRIPT } file_type_e; -typedef enum { INTERPRETER_SOURCE_UNSET, INTERPRETER_SOURCE_REGISTRY, - INTERPRETER_SOURCE_SHEBANG } interpreter_source_e; -API_EXPORT(file_type_e) ap_get_win32_interpreter(const request_rec *, char **); -#endif - #ifdef CORE_PRIVATE /* @@ -256,11 +245,6 @@ typedef struct { ap_array_header_t *sec; regex_t *r; -#ifdef WIN32 - /* Where to find interpreter to run scripts */ - interpreter_source_e script_interpreter_source; -#endif - } core_dir_config; /* Per-server core configuration */ diff --git a/include/http_log.h b/include/http_log.h index 5837cb9c1c..f96311051a 100644 --- a/include/http_log.h +++ b/include/http_log.h @@ -94,11 +94,6 @@ extern "C" { #endif #define APLOG_NOERRNO (APLOG_LEVELMASK + 1) -#ifdef WIN32 -/* Set to indicate that error msg should come from Win32's GetLastError(), - * not errno. */ -#define APLOG_WIN32ERROR ((APLOG_LEVELMASK+1) * 2) -#endif /* normal but significant condition on startup, usually printed to stderr */ #define APLOG_STARTUP ((APLOG_LEVELMASK + 1) * 4) @@ -143,24 +138,19 @@ API_EXPORT(void) ap_log_reason(const char *reason, const char *fname, typedef struct piped_log { ap_context_t *p; + ap_file_t *fds[2]; + /* XXX - an #ifdef that needs to be eliminated from public view. Shouldn't + * be hard */ #ifdef HAVE_RELIABLE_PIPED_LOGS char *program; ap_proc_t *pid; - ap_file_t *fds[2]; -#else - ap_file_t *write_f; #endif } piped_log; API_EXPORT(piped_log *) ap_open_piped_log (ap_context_t *p, const char *program); API_EXPORT(void) ap_close_piped_log (piped_log *); -#ifdef HAVE_RELIABLE_PIPED_LOGS #define ap_piped_log_read_fd(pl) ((pl)->fds[0]) #define ap_piped_log_write_fd(pl) ((pl)->fds[1]) -#else -#define ap_piped_log_read_fd(pl) (-1) -#define ap_piped_log_write_fd(pl) ((pl)->write_f) -#endif #ifdef __cplusplus } diff --git a/include/httpd.h b/include/httpd.h index 0c54134c19..decab3910d 100644 --- a/include/httpd.h +++ b/include/httpd.h @@ -66,14 +66,24 @@ extern "C" { * httpd.h: header for simple (ha! not anymore) http daemon */ +/* XXX - We need to push more stuff to other .h files, or even .c files, to + * make this file smaller + */ + + /* Headers in which EVERYONE has an interest... */ -#include "ap_config.h" #include "apr_general.h" #include "apr_lib.h" #include "apr_time.h" +#include "apr_network_io.h" #include "buff.h" #include "ap.h" +#include "ap_mmn.h" + +#include + +#ifdef CORE_PRIVATE /* ----------------------------- config dir ------------------------------ */ @@ -95,6 +105,14 @@ extern "C" { #endif #endif /* HTTPD_ROOT */ +/* + * --------- You shouldn't have to edit anything below this line ---------- + * + * Any modifications to any defaults not defined above should be done in the + * respective config. file. + * + */ + /* Default location of documents. Can be overridden by the DocumentRoot * directive. */ @@ -120,31 +138,7 @@ extern "C" { #define TARGET "httpd" #endif -/* - * --------- You shouldn't have to edit anything below this line ---------- - * - * Any modifications to any defaults not defined above should be done in the - * respective config. file. - * - */ - - -/* -- Internal representation for a HTTP protocol number, e.g., HTTP/1.1 -- */ - -#define HTTP_VERSION(major,minor) (1000*(major)+(minor)) -#define HTTP_VERSION_MAJOR(number) ((number)/1000) -#define HTTP_VERSION_MINOR(number) ((number)%1000) - - -/* -------------- Port number for server running standalone --------------- */ - -#define DEFAULT_HTTP_PORT 80 -#define DEFAULT_HTTPS_PORT 443 -#define ap_is_default_port(port,r) ((port) == ap_default_port(r)) -#define ap_http_method(r) ap_run_http_method(r) -#define ap_default_port(r) ap_run_default_port(r) - -/* --------- Default user name and group name running standalone ---------- */ +/* --------- Default user name and group name ----------------------------- */ /* --- These may be specified as numbers by placing a # before a number --- */ #ifndef DEFAULT_USER @@ -171,32 +165,6 @@ extern "C" { #endif #endif /* DEFAULT_ERRORLOG */ -#ifndef DEFAULT_PIDLOG -#define DEFAULT_PIDLOG "logs/httpd.pid" -#endif -#ifndef DEFAULT_SCOREBOARD -#define DEFAULT_SCOREBOARD "logs/apache_runtime_status" -#endif -#ifndef DEFAULT_LOCKFILE -#define DEFAULT_LOCKFILE "logs/accept.lock" -#endif - -/* Define this to be what your HTML directory content files are called */ -#ifndef DEFAULT_INDEX -#define DEFAULT_INDEX "index.html" -#endif - -/* Define this to 1 if you want fancy indexing, 0 otherwise */ -#ifndef DEFAULT_INDEXING -#define DEFAULT_INDEXING 0 -#endif - -/* Define this to be what type you'd like returned for files with unknown */ -/* suffixes. MUST be all lower case. */ -#ifndef DEFAULT_CONTENT_TYPE -#define DEFAULT_CONTENT_TYPE "text/plain" -#endif - /* Define this to be what your per-directory security files are called */ #ifndef DEFAULT_ACCESS_FNAME #ifdef OS2 @@ -217,11 +185,6 @@ extern "C" { #define RESOURCE_CONFIG_FILE "conf/srm.conf" #endif -/* The name of the MIME types file */ -#ifndef TYPES_CONFIG_FILE -#define TYPES_CONFIG_FILE "conf/mime.types" -#endif - /* The name of the access file */ #ifndef ACCESS_CONFIG_FILE #define ACCESS_CONFIG_FILE "conf/access.conf" @@ -231,35 +194,17 @@ extern "C" { #ifndef DEFAULT_RFC1413 #define DEFAULT_RFC1413 0 #endif -/* The default directory in user's home dir */ -#ifndef DEFAULT_USER_DIR -#define DEFAULT_USER_DIR "public_html" -#endif /* The default path for CGI scripts if none is currently set */ #ifndef DEFAULT_PATH #define DEFAULT_PATH "/bin:/usr/bin:/usr/ucb:/usr/bsd:/usr/local/bin" #endif -/* The path to the shell interpreter, for parsed docs */ -#ifndef SHELL_PATH -#if defined(OS2) || defined(WIN32) -/* Set default for OS/2 and Windows file system */ -#define SHELL_PATH "CMD.EXE" -#else -#define SHELL_PATH "/bin/sh" -#endif -#endif /* SHELL_PATH */ - /* The path to the suExec wrapper, can be overridden in Configuration */ #ifndef SUEXEC_BIN #define SUEXEC_BIN HTTPD_ROOT "/sbin/suexec" #endif -/* The default string lengths */ -#define MAX_STRING_LEN HUGE_STRING_LEN -#define HUGE_STRING_LEN 8192 - /* The timeout for waiting for messages */ #ifndef DEFAULT_TIMEOUT #define DEFAULT_TIMEOUT 120000 @@ -275,58 +220,6 @@ extern "C" { #define DEFAULT_KEEPALIVE 100 #endif -/* The size of the server's internal read-write buffers */ -#define IOBUFSIZE 8192 - -/* - * Special Apache error codes. These are basically used - * in http_main.c so we can keep track of various errors. - * - * APEXIT_OK: - * A normal exit - * APEXIT_INIT: - * A fatal error arising during the server's init sequence - * APEXIT_CHILDINIT: - * The child died during it's init sequence - * APEXIT_CHILDFATAL: - * A fatal error, resulting in the whole server aborting. - * If a child exits with this error, the parent process - * considers this a server-wide fatal error and aborts. - * - */ -#define APEXIT_OK 0x0 -#define APEXIT_INIT 0x2 -#define APEXIT_CHILDINIT 0x3 -#define APEXIT_CHILDFATAL 0xf - -/* - * (Unix, OS/2 only) - * Interval, in microseconds, between scoreboard maintenance. During - * each scoreboard maintenance cycle the parent decides if it needs to - * spawn a new child (to meet MinSpareServers requirements), or kill off - * a child (to meet MaxSpareServers requirements). It will only spawn or - * kill one child per cycle. Setting this too low will chew cpu. The - * default is probably sufficient for everyone. But some people may want - * to raise this on servers which aren't dedicated to httpd and where they - * don't like the httpd waking up each second to see what's going on. - */ -#ifndef SCOREBOARD_MAINTENANCE_INTERVAL -#define SCOREBOARD_MAINTENANCE_INTERVAL 1000000 -#endif - -/* Number of requests to try to handle in a single process. If <= 0, - * the children don't die off. That's the default here, since I'm still - * interested in finding and stanching leaks. - */ - -#ifndef DEFAULT_MAX_REQUESTS_PER_CHILD -#define DEFAULT_MAX_REQUESTS_PER_CHILD 10000 -#endif - -#ifndef DEFAULT_EXCESS_REQUESTS_PER_CHILD -#define DEFAULT_EXCESS_REQUESTS_PER_CHILD 0 -#endif - /* The maximum length of the queue of pending connections, as defined * by listen(2). Under some systems, it should be increased if you * are experiencing a heavy TCP SYN flood attack. @@ -379,8 +272,95 @@ extern "C" { * Example: "Apache/1.1.0 MrWidget/0.1-alpha" */ -#define SERVER_BASEVERSION "Apache/2.0-dev" /* SEE COMMENTS ABOVE */ -#define SERVER_VERSION SERVER_BASEVERSION +/* Define this to 1 if you want fancy indexing, 0 otherwise */ +#ifndef DEFAULT_INDEXING +#define DEFAULT_INDEXING 0 +#endif +#endif /* CORE_PRIVATE */ + +#define AP_SERVER_BASEVERSION "Apache/2.0-dev" /* SEE COMMENTS ABOVE */ +#define AP_SERVER_VERSION AP_SERVER_BASEVERSION + +#define AP_SERVER_PROTOCOL "HTTP/1.1" + + +/* ------------------ stuff that modules are allowed to look at ----------- */ + +/* Define this to be what your HTML directory content files are called */ +#ifndef AP_DEFAULT_INDEX +#define AP_DEFAULT_INDEX "index.html" +#endif + + +/* Define this to be what type you'd like returned for files with unknown */ +/* suffixes. MUST be all lower case. */ +#ifndef DEFAULT_CONTENT_TYPE +#define DEFAULT_CONTENT_TYPE "text/plain" +#endif + +/* The name of the MIME types file */ +#ifndef AP_TYPES_CONFIG_FILE +#define AP_TYPES_CONFIG_FILE "conf/mime.types" +#endif + +/* + * Define the HTML doctype strings centrally. + */ +#define DOCTYPE_HTML_2_0 "\n" +#define DOCTYPE_HTML_3_2 "\n" +#define DOCTYPE_HTML_4_0S "\n" +#define DOCTYPE_HTML_4_0T "\n" +#define DOCTYPE_HTML_4_0F "\n" + +/* -- Internal representation for a HTTP protocol number, e.g., HTTP/1.1 -- */ + +#define HTTP_VERSION(major,minor) (1000*(major)+(minor)) +#define HTTP_VERSION_MAJOR(number) ((number)/1000) +#define HTTP_VERSION_MINOR(number) ((number)%1000) + +/* -------------- Port number for server running standalone --------------- */ + +#define DEFAULT_HTTP_PORT 80 +#define DEFAULT_HTTPS_PORT 443 +#define ap_is_default_port(port,r) ((port) == ap_default_port(r)) +#define ap_http_method(r) ap_run_http_method(r) +#define ap_default_port(r) ap_run_default_port(r) + +/* The default string lengths */ +#define MAX_STRING_LEN HUGE_STRING_LEN +#define HUGE_STRING_LEN 8192 + +/* The size of the server's internal read-write buffers */ +#define IOBUFSIZE 8192 + +/* + * Special Apache error codes. These are basically used + * in http_main.c so we can keep track of various errors. + * + * APEXIT_OK: + * A normal exit + * APEXIT_INIT: + * A fatal error arising during the server's init sequence + * APEXIT_CHILDINIT: + * The child died during it's init sequence + * APEXIT_CHILDFATAL: + * A fatal error, resulting in the whole server aborting. + * If a child exits with this error, the parent process + * considers this a server-wide fatal error and aborts. + * + */ +#define APEXIT_OK 0x0 +#define APEXIT_INIT 0x2 +#define APEXIT_CHILDINIT 0x3 +#define APEXIT_CHILDFATAL 0xf /* TODO: re-implement the server token/version stuff -- it's part of http_core * it should be possible to do without touching http_main at all. (or else @@ -408,11 +388,6 @@ API_EXPORT(const char *) ap_get_server_built(void); */ #define APACHE_RELEASE 10309100 -#define SERVER_PROTOCOL "HTTP/1.1" -#ifndef SERVER_SUPPORT -#define SERVER_SUPPORT "http://www.apache.org/" -#endif - #define DECLINED -1 /* Module declines to handle */ #define DONE -2 /* Module has served the response completely * - it's safe to die() with no more output @@ -539,47 +514,10 @@ API_EXPORT(const char *) ap_get_server_built(void); #define CGI_MAGIC_TYPE "application/x-httpd-cgi" #define INCLUDES_MAGIC_TYPE "text/x-server-parsed-html" #define INCLUDES_MAGIC_TYPE3 "text/x-server-parsed-html3" -#ifdef CHARSET_EBCDIC -#define ASCIITEXT_MAGIC_TYPE_PREFIX "text/x-ascii-" /* Text files whose content-type starts with this are passed thru unconverted */ -#endif /*CHARSET_EBCDIC*/ -#define MAP_FILE_MAGIC_TYPE "application/x-type-map" -#define ASIS_MAGIC_TYPE "httpd/send-as-is" #define DIR_MAGIC_TYPE "httpd/unix-directory" -#define STATUS_MAGIC_TYPE "application/x-httpd-status" -/* - * Define the HTML doctype strings centrally. - */ -#define DOCTYPE_HTML_2_0 "\n" -#define DOCTYPE_HTML_3_2 "\n" -#define DOCTYPE_HTML_4_0S "\n" -#define DOCTYPE_HTML_4_0T "\n" -#define DOCTYPE_HTML_4_0F "\n" - -/* Just in case your linefeed isn't the one the other end is expecting. */ -#ifndef CHARSET_EBCDIC #define LF 10 #define CR 13 -#else /* CHARSET_EBCDIC */ -#include "ebcdic.h" -/* OSD_POSIX uses the EBCDIC charset. The transition ASCII->EBCDIC is done in - * the buff package (bread/bputs/bwrite), so everywhere else, we use - * "native EBCDIC" CR and NL characters. These are therefore defined as - * '\r' and '\n'. - * NB: this is not the whole truth - sometimes \015 and \012 are contained - * in literal (EBCDIC!) strings, so these are not converted but passed. - */ -#define CR '\r' -#define LF '\n' -#endif /* CHARSET_EBCDIC */ /* Possible values for request_rec.read_body (set by handling module): * REQUEST_NO_BODY Send 413 error if message has any body @@ -848,7 +786,7 @@ struct conn_rec { typedef struct server_addr_rec server_addr_rec; struct server_addr_rec { server_addr_rec *next; - struct in_addr host_addr; /* The bound address, for this server */ + ap_in_addr host_addr; /* The bound address, for this server */ unsigned short host_port; /* The bound port, for this server */ char *virthost; /* The name given in */ }; @@ -909,9 +847,51 @@ struct server_rec { int limit_req_fields; /* limit on number of request header fields */ }; - -/* Prototypes for utilities... util.c. +/* stuff marked API_EXPORT is part of the API, and intended for use + * by modules */ +#ifndef API_EXPORT +#define API_EXPORT(type) type +#endif + +/* Stuff marked API_EXPORT_NONSTD is part of the API, and intended for + * use by modules. The difference between API_EXPORT and + * API_EXPORT_NONSTD is that the latter is required for any functions + * which use varargs or are used via indirect function call. This + * is to accomodate the two calling conventions in windows dlls. + */ +#ifndef API_EXPORT_NONSTD +#define API_EXPORT_NONSTD(type) type +#endif + +#ifndef MODULE_VAR_EXPORT +#define MODULE_VAR_EXPORT +#endif +#ifndef API_VAR_EXPORT +#define API_VAR_EXPORT +#endif + +/* modules should not used functions marked CORE_EXPORT + * or CORE_EXPORT_NONSTD */ +#ifndef CORE_EXPORT +#define CORE_EXPORT API_EXPORT +#endif +#ifndef CORE_EXPORT_NONSTD +#define CORE_EXPORT_NONSTD API_EXPORT_NONSTD +#endif + +/* On Mac OS X Server, symbols that conflict with loaded dylibs + * (eg. System framework) need to be declared as private symbols with + * __private_extern__. + * For other systems, make that a no-op. + */ +#ifndef ap_private_extern +#if (defined(MAC_OS) || defined(MAC_OS_X_SERVER)) && defined(__DYNAMIC__) +#define ap_private_extern __private_extern__ +#else +#define ap_private_extern +#endif +#endif /* Time */ @@ -966,9 +946,11 @@ API_EXPORT(char *) ap_pbase64encode(ap_context_t *p, char *string); API_EXPORT(char *) ap_uudecode(ap_context_t *p, const char *bufcoded); API_EXPORT(char *) ap_uuencode(ap_context_t *p, char *string); -#ifdef OS2 -void os2pathname(char *path); -char *ap_double_quotes(ap_context_t *p, char *str); +/* Regexes */ +#ifdef AP_USE_HSREGEX +#include "hsregex.h" +#else +#include #endif API_EXPORT(regex_t *) ap_pregcomp(ap_context_t *p, const char *pattern, @@ -1017,10 +999,6 @@ API_EXPORT(int) ap_cfg_getc(configfile_t *cfp); /* Detach from open configfile_t, calling the close handler */ API_EXPORT(int) ap_cfg_closefile(configfile_t *cfp); -#ifdef NEED_STRERROR -char *strerror(int err); -#endif - /* Misc system hackery */ API_EXPORT(uid_t) ap_uname2id(const char *name); @@ -1030,24 +1008,6 @@ API_EXPORT(void) ap_chdir_file(const char *file); API_EXPORT(int) ap_get_max_daemons(void); API_EXPORT(const server_rec *) ap_get_server_conf(void); -#ifndef HAVE_CANONICAL_FILENAME -/* - * We can't define these in os.h because of dependence on ap_context_t pointer. - */ -#define ap_os_canonical_filename(p,f) (f) -#define ap_os_case_canonical_filename(p,f) (f) -#define ap_os_systemcase_filename(p,f) (f) -#else -API_EXPORT(char *) ap_os_canonical_filename(ap_context_t *p, const char *file); -#ifdef WIN32 -API_EXPORT(char *) ap_os_case_canonical_filename(ap_context_t *pPool, const char *szFile); -API_EXPORT(char *) ap_os_systemcase_filename(ap_context_t *pPool, const char *szFile); -#else -#define ap_os_case_canonical_filename(p,f) ap_os_canonical_filename(p,f) -#define ap_os_systemcase_filename(p,f) ap_os_canonical_filename(p,f) -#endif -#endif - #ifdef _OSD_POSIX extern const char *os_set_account(ap_context_t *p, const char *account); extern int os_init_job_environment(server_rec *s, const char *user_name, int one_process); @@ -1056,43 +1016,6 @@ extern int os_init_job_environment(server_rec *s, const char *user_name, int one char *ap_get_local_host(ap_context_t *); unsigned long ap_get_virthost_addr(char *hostname, unsigned short *port); -extern API_VAR_EXPORT time_t ap_restart_time; - -/* - * Apache tries to keep all of its long term filehandles (such as log files, - * and sockets) above this number. This is to workaround problems in many - * third party libraries that are compiled with a small FD_SETSIZE. There - * should be no reason to lower this, because it's only advisory. If a file - * can't be allocated above this number then it will remain in the "slack" - * area. - * - * Only the low slack line is used by default. If HIGH_SLACK_LINE is defined - * then an attempt is also made to keep all non-FILE * files above the high - * slack line. This is to work around a Solaris C library limitation, where it - * uses an unsigned char to store the file descriptor. - */ -#ifndef LOW_SLACK_LINE -#define LOW_SLACK_LINE 15 -#endif -/* #define HIGH_SLACK_LINE 255 */ - -#if 0 -/* Moved to APR now.*/ -/* - * The ap_slack() function takes a fd, and tries to move it above the indicated - * line. It returns an fd which may or may not have moved above the line, and - * never fails. If the high line was requested and it fails it will also try - * the low line. - */ -#ifdef NO_SLACK -#define ap_slack(fd,line) (fd) -#else -APRFile ap_slack(APRFile fd, int line); -#define AP_SLACK_LOW 1 -#define AP_SLACK_HIGH 2 -#endif -#endif - API_EXPORT(char *) ap_escape_quotes(ap_context_t *p, const char *instr); /* @@ -1102,14 +1025,6 @@ API_EXPORT(void) ap_log_assert(const char *szExp, const char *szFile, int nLine) __attribute__((noreturn)); #define ap_assert(exp) ((exp) ? (void)0 : ap_log_assert(#exp,__FILE__,__LINE__)) -/* The optimized timeout code only works if we're not MULTITHREAD and we're - * also not using a scoreboard file - */ -#if !defined (MULTITHREAD) && \ - (defined (USE_MMAP_SCOREBOARD) || defined (USE_SHMGET_SCOREBOARD)) -#define OPTIMIZE_TIMEOUTS -#endif - /* A set of flags which indicate places where the server should raise(SIGSTOP). * This is useful for debugging, because you can then attach to that process * with gdb and continue. This is important in cases where one_process diff --git a/include/util_date.h b/include/util_date.h index b74849899b..2f892bb261 100644 --- a/include/util_date.h +++ b/include/util_date.h @@ -66,12 +66,16 @@ extern "C" { * util_date.h: prototypes for date parsing utility routines */ -#ifdef NEWSOS -#include -#include -#endif -#include #include "apr_time.h" +/* XXX - This section lists include files for OS-specific types that APR + * should replace. Once they are replaced, this section should be + * removed */ +#ifndef NO_MORE_OS_TYPES_IN_THIS_FILE +#include "ap_config_auto.h" +#ifdef HAVE_SYS_TIME_H +#include +#endif +#endif /* NO_MORE_OS_TYPES_IN_THIS_FILE */ #define BAD_DATE (time_t)0 diff --git a/include/util_md5.h b/include/util_md5.h index 646b080805..6e11506a79 100644 --- a/include/util_md5.h +++ b/include/util_md5.h @@ -67,11 +67,7 @@ extern "C" { API_EXPORT(char *) ap_md5(ap_context_t *a, const unsigned char *string); API_EXPORT(char *) ap_md5_binary(ap_context_t *a, const unsigned char *buf, int len); API_EXPORT(char *) ap_md5contextTo64(ap_context_t *p, AP_MD5_CTX * context); -#ifdef CHARSET_EBCDIC -API_EXPORT(char *) ap_md5digest(ap_context_t *p, ap_file_t *infile, int convert); -#else API_EXPORT(char *) ap_md5digest(ap_context_t *p, ap_file_t *infile); -#endif /* CHARSET_EBCDIC */ #ifdef __cplusplus } diff --git a/modules/http/http_core.c b/modules/http/http_core.c index 9dee32299b..393c2a1468 100644 --- a/modules/http/http_core.c +++ b/modules/http/http_core.c @@ -69,6 +69,7 @@ #include "util_md5.h" #include "apr_fnmatch.h" #include "http_connection.h" +#include "ap_config.h" /* Allow Apache to use ap_mmap */ #ifdef USE_MMAP_FILES diff --git a/modules/http/http_protocol.c b/modules/http/http_protocol.c index 51eebc2ef2..5f622879f1 100644 --- a/modules/http/http_protocol.c +++ b/modules/http/http_protocol.c @@ -75,6 +75,7 @@ #include "util_date.h" /* For parseHTTPdate and BAD_DATE */ #include "mpm_status.h" #include +#include "ap_config.h" HOOK_STRUCT( HOOK_LINK(post_read_request) diff --git a/modules/http/http_request.c b/modules/http/http_request.c index 5dc2e63d2c..1ccbacc85a 100644 --- a/modules/http/http_request.c +++ b/modules/http/http_request.c @@ -73,10 +73,8 @@ #include "http_protocol.h" #include "http_log.h" #include "http_main.h" -#if 0 -#include "scoreboard.h" -#endif #include "apr_fnmatch.h" +#include "ap_config.h" HOOK_STRUCT( HOOK_LINK(translate_name) diff --git a/os/beos/beosd.h b/os/beos/beosd.h index b65cc661b9..876bb475b2 100644 --- a/os/beos/beosd.h +++ b/os/beos/beosd.h @@ -60,6 +60,16 @@ /* common stuff that beos MPMs will want */ +/* Default user name and group name. These may be specified as numbers by + * placing a # before a number */ + +#ifndef DEFAULT_USER +#define DEFAULT_USER "#-1" +#endif +#ifndef DEFAULT_GROUP +#define DEFAULT_GROUP "#-1" +#endif + typedef struct { char *user_name; uid_t user_id; diff --git a/os/beos/os.h b/os/beos/os.h index 3a1c22b30e..f9e42e2f4e 100644 --- a/os/beos/os.h +++ b/os/beos/os.h @@ -72,6 +72,9 @@ */ extern int ap_os_is_path_absolute(const char *file); +#define ap_os_canonical_filename(p,f) (f) +#define ap_os_case_canonical_filename(p,f) (f) +#define ap_os_systemcase_filename(p,f) (f) #define ap_os_is_filename_valid(f) (1) #define ap_os_kill(pid, sig) kill(pid, sig) diff --git a/os/os2/os.h b/os/os2/os.h index d717f1f8ca..22355ab4cf 100644 --- a/os/os2/os.h +++ b/os/os2/os.h @@ -29,6 +29,9 @@ INLINE int ap_os_is_path_absolute(const char *file); extern int ap_os_is_path_absolute(const char *file); #endif +API_EXPORT(char *) ap_os_canonical_filename(ap_context_t *p, const char *file); +#define ap_os_case_canonical_filename(p,f) ap_os_canonical_filename(p,f) +#define ap_os_systemcase_filename(p,f) ap_os_canonical_filename(p,f) /* FIXME: the following should be implemented on this platform */ #define ap_os_is_filename_valid(f) (1) diff --git a/os/unix/os.h b/os/unix/os.h index b11394e458..875a669990 100644 --- a/os/unix/os.h +++ b/os/unix/os.h @@ -90,6 +90,9 @@ extern int ap_os_is_path_absolute(const char *file); /* Other ap_os_ routines not used by this platform */ +#define ap_os_canonical_filename(p,f) (f) +#define ap_os_case_canonical_filename(p,f) (f) +#define ap_os_systemcase_filename(p,f) (f) #define ap_os_is_filename_valid(f) (1) #define ap_os_kill(pid, sig) kill(pid, sig) diff --git a/os/unix/unixd.c b/os/unix/unixd.c index ee817c491a..4748e93242 100644 --- a/os/unix/unixd.c +++ b/os/unix/unixd.c @@ -60,6 +60,7 @@ #include "http_main.h" #include "http_log.h" #include "unixd.h" +#include unixd_config_rec unixd_config; diff --git a/os/unix/unixd.h b/os/unix/unixd.h index 733c90b927..30a74f730c 100644 --- a/os/unix/unixd.h +++ b/os/unix/unixd.h @@ -62,6 +62,16 @@ /* common stuff that unix MPMs will want */ +/* Default user name and group name. These may be specified as numbers by + * placing a # before a number */ + +#ifndef DEFAULT_USER +#define DEFAULT_USER "#-1" +#endif +#ifndef DEFAULT_GROUP +#define DEFAULT_GROUP "#-1" +#endif + typedef struct { char *user_name; uid_t user_id; diff --git a/os/win32/os.h b/os/win32/os.h index 6cdad531b1..20ff4d9152 100644 --- a/os/win32/os.h +++ b/os/win32/os.h @@ -172,6 +172,9 @@ __inline int ap_os_is_path_absolute(const char *file) #define spawnle os_spawnle /* OS-dependent filename routines in util_win32.c */ +API_EXPORT(char *) ap_os_canonical_filename(ap_context_t *p, const char *file); +API_EXPORT(char *) ap_os_case_canonical_filename(ap_context_t *pPool, const char *szFile); +API_EXPORT(char *) ap_os_systemcase_filename(ap_context_t *pPool, const char *szFile); int ap_os_is_filename_valid(const char *file); int os_strftime(char *, size_t , const char *, const struct tm *); diff --git a/server/config.c b/server/config.c index 2d72a08bfb..09faae67e2 100644 --- a/server/config.c +++ b/server/config.c @@ -81,7 +81,7 @@ #include "http_request.h" /* for default_handler (see invoke_handler) */ #include "http_main.h" #include "http_vhost.h" -#include "explain.h" +#include "ap_config.h" HOOK_STRUCT( HOOK_LINK(header_parser) @@ -102,8 +102,6 @@ IMPLEMENT_HOOK_VOID(open_logs, (pconf,plog,ptemp,s)) IMPLEMENT_HOOK_VOID(child_init,(ap_context_t *pchild, server_rec *s),(pchild,s)) -DEF_Explain - /**************************************************************** * * We begin with the functions which deal with the linked list diff --git a/server/connection.c b/server/connection.c index a3bbd78792..11d49d0d57 100644 --- a/server/connection.c +++ b/server/connection.c @@ -64,6 +64,7 @@ #include "mpm_status.h" #include "http_config.h" #include "http_vhost.h" +#include "ap_config.h" HOOK_STRUCT( HOOK_LINK(pre_connection) diff --git a/server/listen.c b/server/listen.c index 9061a974a6..6ae1ba20f5 100644 --- a/server/listen.c +++ b/server/listen.c @@ -56,10 +56,13 @@ */ #include "apr_network_io.h" + +#define CORE_PRIVATE #include "httpd.h" #include "http_config.h" #include "ap_listen.h" #include "http_log.h" +#include ap_listen_rec *ap_listeners; static ap_listen_rec *old_listeners; diff --git a/server/log.c b/server/log.c index 0832613f84..1a5a3d9c57 100644 --- a/server/log.c +++ b/server/log.c @@ -64,6 +64,7 @@ #define CORE_PRIVATE +#include "ap_config.h" #include "apr_lib.h" #include "apr_portable.h" #include "httpd.h" @@ -405,59 +406,12 @@ static void log_error_core(const char *file, int line, int level, len += ap_snprintf(errstr + len, MAX_STRING_LEN - len, "[client %s] ", r->connection->remote_ip); } + /* XXX - need an APRized strerror() */ if (!(level & APLOG_NOERRNO) - && (status != 0) -#ifdef WIN32 - && !(level & APLOG_WIN32ERROR) -#endif - ) { + && (status != 0)) { len += ap_snprintf(errstr + len, MAX_STRING_LEN - len, "(%d)%s: ", status, strerror(status)); } -#ifdef WIN32 - if (level & APLOG_WIN32ERROR) { - int nChars; - int nErrorCode; - - nErrorCode = GetLastError(); - len += ap_snprintf(errstr + len, MAX_STRING_LEN - len, - "(%d)", nErrorCode); - - nChars = FormatMessage( - FORMAT_MESSAGE_FROM_SYSTEM, - NULL, - nErrorCode, - MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), /* // Default language */ - (LPTSTR) errstr + len, - MAX_STRING_LEN - len, - NULL - ); - len += nChars; - if (nChars == 0) { - /* Um, error occurred, but we can't recurse to log it again - * (and it would probably only fail anyway), so lets just - * log the numeric value. - */ - nErrorCode = GetLastError(); - len += ap_snprintf(errstr + len, MAX_STRING_LEN - len, - "(FormatMessage failed with code %d): ", - nErrorCode); - } - else { - /* FormatMessage put the message in the buffer, but it may - * have appended a newline (\r\n). So remove it and use - * ": " instead like the Unix errors. The error may also - * end with a . before the return - if so, trash it. - */ - if (len > 1 && errstr[len-2] == '\r' && errstr[len-1] == '\n') { - if (len > 2 && errstr[len-3] == '.') - len--; - errstr[len-2] = ':'; - errstr[len-1] = ' '; - } - } - } -#endif len += ap_vsnprintf(errstr + len, MAX_STRING_LEN - len, fmt, args); @@ -622,11 +576,11 @@ static int piped_log_spawn(piped_log *pl) #endif if ((ap_createprocattr_init(&procattr, pl->p) != APR_SUCCESS) || (ap_setprocattr_dir(procattr, pl->program) != APR_SUCCESS) || - (ap_set_childin(procattr, pl->fds[0], pl->fds[1]) != APR_SUCCESS)) { + (ap_set_childin(procattr, ap_piped_log_read_fd(pl), ap_piped_log_write_fd(pl)) != APR_SUCCESS)) { /* Something bad happened, give up and go away. */ ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, - "piped_log_spawn: unable to exec %s -c '%s': %s", - SHELL_PATH, pl->program, strerror (errno)); + "piped_log_spawn: unable to exec '%s': %s", + pl->program, strerror (errno)); rc = -1; } else { @@ -637,7 +591,7 @@ static int piped_log_spawn(piped_log *pl) /* successful that the child is running. */ pl->pid = procnew; ap_get_os_proc(&pid, procnew); - ap_register_other_child(pid, piped_log_maintenance, pl, pl->fds[1]); + ap_register_other_child(pid, piped_log_maintenance, pl, ap_piped_log_write_fd(pl)); } } @@ -696,8 +650,8 @@ static ap_status_t piped_log_cleanup(void *data) ap_kill(pl->pid, SIGTERM); } ap_unregister_other_child(pl); - ap_close(pl->fds[0]); - ap_close(pl->fds[1]); + ap_close(ap_piped_log_read_fd(pl)); + ap_close(ap_piped_log_write_fd(pl)); return APR_SUCCESS; } @@ -706,12 +660,11 @@ static ap_status_t piped_log_cleanup_for_exec(void *data) { piped_log *pl = data; - ap_close(pl->fds[0]); - ap_close(pl->fds[1]); + ap_close(ap_piped_log_read_fd(pl)); + ap_close(ap_piped_log_write_fd(pl)); return APR_SUCCESS; } - API_EXPORT(piped_log *) ap_open_piped_log(ap_context_t *p, const char *program) { piped_log *pl; @@ -720,7 +673,7 @@ API_EXPORT(piped_log *) ap_open_piped_log(ap_context_t *p, const char *program) pl->p = p; pl->program = ap_pstrdup(p, program); pl->pid = NULL; - if (ap_create_pipe(&pl->fds[0], &pl->fds[1], p) != APR_SUCCESS) { + if (ap_create_pipe(&ap_piped_log_read_fd(pl), &ap_piped_log_write_fd(pl), p) != APR_SUCCESS) { int save_errno = errno; errno = save_errno; return NULL; @@ -729,21 +682,24 @@ API_EXPORT(piped_log *) ap_open_piped_log(ap_context_t *p, const char *program) if (piped_log_spawn(pl) == -1) { int save_errno = errno; ap_kill_cleanup(p, pl, piped_log_cleanup); - ap_close(pl->fds[0]); - ap_close(pl->fds[1]); + ap_close(ap_piped_log_read_fd(pl)); + ap_close(ap_piped_log_write_fd(pl)); errno = save_errno; return NULL; } return pl; } -API_EXPORT(void) ap_close_piped_log(piped_log *pl) +#else + +static ap_status_t piped_log_cleanup(void *data) { - piped_log_cleanup(pl); - ap_kill_cleanup(pl->p, pl, piped_log_cleanup); + piped_log *pl = data; + + ap_close(ap_piped_log_write_fd(pl)); + return APR_SUCCESS; } -#else API_EXPORT(piped_log *) ap_open_piped_log(ap_context_t *p, const char *program) { piped_log *pl; @@ -760,14 +716,17 @@ API_EXPORT(piped_log *) ap_open_piped_log(ap_context_t *p, const char *program) pl = ap_palloc(p, sizeof (*pl)); pl->p = p; - pl->write_f = dummy; + ap_piped_log_read_fd(pl) = NULL; + ap_piped_log_write_fd(pl) = dummy; + ap_register_cleanup(p, pl, piped_log_cleanup, piped_log_cleanup); return pl; } +#endif API_EXPORT(void) ap_close_piped_log(piped_log *pl) { - ap_close(pl->write_f); + ap_run_cleanup(pl->p, pl, piped_log_cleanup); } -#endif + diff --git a/server/main.c b/server/main.c index f88d29d8da..06fee1b5a7 100644 --- a/server/main.c +++ b/server/main.c @@ -63,6 +63,7 @@ #include "util_uri.h" #include "apr_getopt.h" #include "ap_mpm.h" +#include "ap_config.h" const char *ap_server_argv0; @@ -72,6 +73,7 @@ ap_array_header_t *ap_server_pre_read_config; ap_array_header_t *ap_server_post_read_config; ap_array_header_t *ap_server_config_defines; +/* XXX - We should be able to grab the per-MPM settings here too */ static void show_compile_settings(void) { printf("Server version: %s\n", ap_get_server_version()); diff --git a/server/mpm/dexter/dexter.c b/server/mpm/dexter/dexter.c index ea0c82423f..fa4ed627fe 100644 --- a/server/mpm/dexter/dexter.c +++ b/server/mpm/dexter/dexter.c @@ -57,6 +57,7 @@ #define CORE_PRIVATE +#include "ap_config.h" #include "apr_portable.h" #include "httpd.h" #include "http_main.h" diff --git a/server/mpm/dexter/mpm_default.h b/server/mpm/dexter/mpm_default.h index 881a520465..ed22c7d2f1 100644 --- a/server/mpm/dexter/mpm_default.h +++ b/server/mpm/dexter/mpm_default.h @@ -111,4 +111,28 @@ #define HARD_SERVER_LIMIT 8 #endif +/* File used for accept locking, when we use a file */ +#ifndef DEFAULT_LOCKFILE +#define DEFAULT_LOCKFILE "logs/accept.lock" +#endif + +/* Where the main/parent process's pid is logged */ +#ifndef DEFAULT_PIDLOG +#define DEFAULT_PIDLOG "logs/httpd.pid" +#endif + +/* + * Interval, in microseconds, between scoreboard maintenance. + */ +#ifndef SCOREBOARD_MAINTENANCE_INTERVAL +#define SCOREBOARD_MAINTENANCE_INTERVAL 1000000 +#endif + +/* Number of requests to try to handle in a single process. If <= 0, + * the children don't die off. + */ +#ifndef DEFAULT_MAX_REQUESTS_PER_CHILD +#define DEFAULT_MAX_REQUESTS_PER_CHILD 10000 +#endif + #endif /* AP_MPM_DEFAULT_H */ diff --git a/server/mpm/dexter/scoreboard.c b/server/mpm/dexter/scoreboard.c index 8e75d79009..d80e038ae5 100644 --- a/server/mpm/dexter/scoreboard.c +++ b/server/mpm/dexter/scoreboard.c @@ -55,6 +55,7 @@ * */ +#include "ap_config.h" #include "httpd.h" #include "http_log.h" #include "http_main.h" @@ -65,8 +66,8 @@ #include "mpm_status.h" #include "scoreboard.h" #include "dexter.h" /* for max_daemons_limit */ -#ifdef USE_SHMGET_SCOREBOARD #include +#ifdef USE_SHMGET_SCOREBOARD #include #include #endif diff --git a/server/mpm/mpmt_beos/mpm_default.h b/server/mpm/mpmt_beos/mpm_default.h index a60f122266..02a4b2459f 100644 --- a/server/mpm/mpmt_beos/mpm_default.h +++ b/server/mpm/mpmt_beos/mpm_default.h @@ -118,4 +118,23 @@ #define DEFAULT_THREADS_PER_CHILD 10 #endif +/* Where the main/parent process's pid is logged */ +#ifndef DEFAULT_PIDLOG +#define DEFAULT_PIDLOG "logs/httpd.pid" +#endif + +/* + * Interval, in microseconds, between scoreboard maintenance. + */ +#ifndef SCOREBOARD_MAINTENANCE_INTERVAL +#define SCOREBOARD_MAINTENANCE_INTERVAL 1000000 +#endif + +/* Number of requests to try to handle in a single process. If <= 0, + * the children don't die off. + */ +#ifndef DEFAULT_MAX_REQUESTS_PER_CHILD +#define DEFAULT_MAX_REQUESTS_PER_CHILD 10000 +#endif + #endif /* AP_MPM_DEFAULT_H */ diff --git a/server/mpm/mpmt_pthread/mpm_default.h b/server/mpm/mpmt_pthread/mpm_default.h index 538af6b836..d45efd5929 100644 --- a/server/mpm/mpmt_pthread/mpm_default.h +++ b/server/mpm/mpmt_pthread/mpm_default.h @@ -118,4 +118,33 @@ #define DEFAULT_THREADS_PER_CHILD 50 #endif +/* File used for accept locking, when we use a file */ +#ifndef DEFAULT_LOCKFILE +#define DEFAULT_LOCKFILE "logs/accept.lock" +#endif + +/* Scoreboard file, if there is one */ +#ifndef DEFAULT_SCOREBOARD +#define DEFAULT_SCOREBOARD "logs/apache_runtime_status" +#endif + +/* Where the main/parent process's pid is logged */ +#ifndef DEFAULT_PIDLOG +#define DEFAULT_PIDLOG "logs/httpd.pid" +#endif + +/* + * Interval, in microseconds, between scoreboard maintenance. + */ +#ifndef SCOREBOARD_MAINTENANCE_INTERVAL +#define SCOREBOARD_MAINTENANCE_INTERVAL 1000000 +#endif + +/* Number of requests to try to handle in a single process. If <= 0, + * the children don't die off. + */ +#ifndef DEFAULT_MAX_REQUESTS_PER_CHILD +#define DEFAULT_MAX_REQUESTS_PER_CHILD 10000 +#endif + #endif /* AP_MPM_DEFAULT_H */ diff --git a/server/mpm/mpmt_pthread/mpmt_pthread.c b/server/mpm/mpmt_pthread/mpmt_pthread.c index 5f71fc4447..6b29134d40 100644 --- a/server/mpm/mpmt_pthread/mpmt_pthread.c +++ b/server/mpm/mpmt_pthread/mpmt_pthread.c @@ -58,6 +58,8 @@ #define CORE_PRIVATE #include "apr_portable.h" +#include "apr_thread_proc.h" +#include "ap_config.h" #include "httpd.h" #include "http_main.h" #include "http_log.h" @@ -71,6 +73,7 @@ #include "scoreboard.h" #include +#include #include #include diff --git a/server/mpm/mpmt_pthread/scoreboard.c b/server/mpm/mpmt_pthread/scoreboard.c index 876b8c2670..bfa31a8fb7 100644 --- a/server/mpm/mpmt_pthread/scoreboard.c +++ b/server/mpm/mpmt_pthread/scoreboard.c @@ -1,3 +1,4 @@ +#include "ap_config.h" #include "httpd.h" #include "http_log.h" #include "http_main.h" @@ -8,8 +9,8 @@ #include "mpm_status.h" #include "mpmt_pthread.h" #include "scoreboard.h" -#ifdef USE_SHMGET_SCOREBOARD #include +#ifdef USE_SHMGET_SCOREBOARD #include #include #endif @@ -411,8 +412,6 @@ API_EXPORT(void) reopen_scoreboard(ap_context_t *p) #else #define SCOREBOARD_FILE static scoreboard _scoreboard_image; -static int scoreboard_fd = -1; -static ap_file_t *scoreboard_file = NULL; static ap_file_t *scoreboard_file = NULL; /* XXX: things are seriously screwed if we ever have to do a partial @@ -456,7 +455,7 @@ static void cleanup_scoreboard_file(void *foo) API_EXPORT(void) reopen_scoreboard(ap_context_t *p) { if (scoreboard_fd != -1) - ap_close(scoreboard_fd); + ap_close(scoreboard_file); ap_open(p, ap_scoreboard_fname, APR_CREATE | APR_BINARY | APR_READ | APR_WRITE, APR_UREAD | APR_UWRITE | APR_GREAD | APR_GWRITE | APR_WREAD | APR_WWRITE, diff --git a/server/mpm/mpmt_pthread/scoreboard.h b/server/mpm/mpmt_pthread/scoreboard.h index dc69f5b64d..4a367f3fdb 100644 --- a/server/mpm/mpmt_pthread/scoreboard.h +++ b/server/mpm/mpmt_pthread/scoreboard.h @@ -63,6 +63,7 @@ extern "C" { #endif #ifdef HAVE_SYS_TIMES_H +#include #include #elif defined(TPF) #include @@ -70,6 +71,12 @@ extern "C" { #include "mpm_default.h" /* For HARD_.*_LIMIT */ +/* The optimized timeout code only works if we're not using a scoreboard file + */ +#if (defined (USE_MMAP_SCOREBOARD) || defined (USE_SHMGET_SCOREBOARD)) +#define OPTIMIZE_TIMEOUTS +#endif + /* Scoreboard info on a process is, for now, kept very brief --- * just status value and pid (the latter so that the caretaker process * can properly update the scoreboard when a process dies). We may want diff --git a/server/mpm/prefork/mpm_default.h b/server/mpm/prefork/mpm_default.h index 3ff9ac27f7..131b516cac 100644 --- a/server/mpm/prefork/mpm_default.h +++ b/server/mpm/prefork/mpm_default.h @@ -94,4 +94,33 @@ #define HARD_SERVER_LIMIT 256 #endif +/* File used for accept locking, when we use a file */ +#ifndef DEFAULT_LOCKFILE +#define DEFAULT_LOCKFILE "logs/accept.lock" +#endif + +/* Scoreboard file, if there is one */ +#ifndef DEFAULT_SCOREBOARD +#define DEFAULT_SCOREBOARD "logs/apache_runtime_status" +#endif + +/* Where the main/parent process's pid is logged */ +#ifndef DEFAULT_PIDLOG +#define DEFAULT_PIDLOG "logs/httpd.pid" +#endif + +/* + * Interval, in microseconds, between scoreboard maintenance. + */ +#ifndef SCOREBOARD_MAINTENANCE_INTERVAL +#define SCOREBOARD_MAINTENANCE_INTERVAL 1000000 +#endif + +/* Number of requests to try to handle in a single process. If <= 0, + * the children don't die off. + */ +#ifndef DEFAULT_MAX_REQUESTS_PER_CHILD +#define DEFAULT_MAX_REQUESTS_PER_CHILD 10000 +#endif + #endif /* AP_MPM_DEFAULT_H */ diff --git a/server/mpm/prefork/prefork.c b/server/mpm/prefork/prefork.c index 2afe44b28e..b3d0957d3c 100644 --- a/server/mpm/prefork/prefork.c +++ b/server/mpm/prefork/prefork.c @@ -87,6 +87,7 @@ #define CORE_PRIVATE +#include "ap_config.h" #include "apr_portable.h" #include "httpd.h" #include "mpm_default.h" @@ -101,8 +102,11 @@ #include "unixd.h" #include "iol_socket.h" #include "ap_listen.h" -#ifdef USE_SHMGET_SCOREBOARD +#include "ap_mmn.h" +#include #include +#include +#ifdef USE_SHMGET_SCOREBOARD #include #include #endif diff --git a/server/mpm/prefork/scoreboard.h b/server/mpm/prefork/scoreboard.h index cb182b67b2..8bf2bb695b 100644 --- a/server/mpm/prefork/scoreboard.h +++ b/server/mpm/prefork/scoreboard.h @@ -67,11 +67,15 @@ extern "C" { #include #else #include +#include #endif /* TPF */ #endif -#ifdef HAVE_SYS_TIMES_H -#include + +/* The optimized timeout code only works if we're not using a scoreboard file + */ +#if (defined (USE_MMAP_SCOREBOARD) || defined (USE_SHMGET_SCOREBOARD)) +#define OPTIMIZE_TIMEOUTS #endif /* Scoreboard info on a process is, for now, kept very brief --- diff --git a/server/mpm/spmt_os2/mpm_default.h b/server/mpm/spmt_os2/mpm_default.h index 3ff9ac27f7..78d527efbf 100644 --- a/server/mpm/spmt_os2/mpm_default.h +++ b/server/mpm/spmt_os2/mpm_default.h @@ -94,4 +94,23 @@ #define HARD_SERVER_LIMIT 256 #endif +/* Where the main/parent process's pid is logged */ +#ifndef DEFAULT_PIDLOG +#define DEFAULT_PIDLOG "logs/httpd.pid" +#endif + +/* + * Interval, in microseconds, between scoreboard maintenance. + */ +#ifndef SCOREBOARD_MAINTENANCE_INTERVAL +#define SCOREBOARD_MAINTENANCE_INTERVAL 1000000 +#endif + +/* Number of requests to try to handle in a single process. If <= 0, + * the children don't die off. + */ +#ifndef DEFAULT_MAX_REQUESTS_PER_CHILD +#define DEFAULT_MAX_REQUESTS_PER_CHILD 10000 +#endif + #endif /* AP_MPM_DEFAULT_H */ diff --git a/server/mpm/spmt_os2/scoreboard.h b/server/mpm/spmt_os2/scoreboard.h index a345766824..82693e2c37 100644 --- a/server/mpm/spmt_os2/scoreboard.h +++ b/server/mpm/spmt_os2/scoreboard.h @@ -66,6 +66,12 @@ extern "C" { #include #endif +/* The optimized timeout code only works if we're not using a scoreboard file + */ +#if (defined (USE_MMAP_SCOREBOARD) || defined (USE_SHMGET_SCOREBOARD)) +#define OPTIMIZE_TIMEOUTS +#endif + /* Scoreboard info on a thread is, for now, kept very brief --- * just status value and pid (the latter so that the caretaker thread * can properly update the scoreboard when a thread dies). We may want diff --git a/server/mpm/winnt/mpm_default.h b/server/mpm/winnt/mpm_default.h index 5ac2fe40aa..deb1ceb6ae 100644 --- a/server/mpm/winnt/mpm_default.h +++ b/server/mpm/winnt/mpm_default.h @@ -111,4 +111,23 @@ #define HARD_SERVER_LIMIT 8 #endif +/* Where the main/parent process's pid is logged */ +#ifndef DEFAULT_PIDLOG +#define DEFAULT_PIDLOG "logs/httpd.pid" +#endif + +/* + * Interval, in microseconds, between scoreboard maintenance. + */ +#ifndef SCOREBOARD_MAINTENANCE_INTERVAL +#define SCOREBOARD_MAINTENANCE_INTERVAL 1000000 +#endif + +/* Number of requests to try to handle in a single process. If <= 0, + * the children don't die off. + */ +#ifndef DEFAULT_MAX_REQUESTS_PER_CHILD +#define DEFAULT_MAX_REQUESTS_PER_CHILD 10000 +#endif + #endif /* AP_MPM_DEFAULT_H */ diff --git a/server/rfc1413.c b/server/rfc1413.c index 3bd66f573e..604d1ac044 100644 --- a/server/rfc1413.c +++ b/server/rfc1413.c @@ -83,6 +83,7 @@ #include "rfc1413.h" #include "http_main.h" /* set_callback_and_alarm */ #include "apr_network_io.h" +#include /* Local stuff. */ /* Semi-well-known port */ diff --git a/server/util.c b/server/util.c index c1027a3985..8d4fbd2ef6 100644 --- a/server/util.c +++ b/server/util.c @@ -68,10 +68,13 @@ * #define DEBUG_CFG_LINES to trace every line read from the config files */ +#define CORE_PRIVATE + #include "httpd.h" #include "http_main.h" #include "http_log.h" #include "http_protocol.h" +#include "ap_config.h" #if defined(SUNOS4) /* stdio.h has been read in ap_config.h already. Add missing prototypes here: */ extern int fgetc(FILE *); @@ -1939,60 +1942,6 @@ API_EXPORT(char *) ap_uuencode(ap_context_t *p, char *string) return ap_pbase64encode(p, string); } -#ifdef OS2 -void os2pathname(char *path) -{ - char newpath[MAX_STRING_LEN]; - int loop; - int offset; - - offset = 0; - for (loop = 0; loop < (strlen(path) + 1) && loop < sizeof(newpath) - 1; loop++) { - if (path[loop] == '/') { - newpath[offset] = '\\'; - /* - offset = offset + 1; - newpath[offset] = '\\'; - */ - } - else - newpath[offset] = path[loop]; - offset = offset + 1; - }; - /* Debugging code */ - /* fprintf(stderr, "%s \n", newpath); */ - - strcpy(path, newpath); -}; - -/* quotes in the string are doubled up. - * Used to escape quotes in args passed to OS/2's cmd.exe - */ -char *ap_double_quotes(ap_context_t *p, char *str) -{ - int num_quotes = 0; - int len = 0; - char *quote_doubled_str, *dest; - - while (str[len]) { - num_quotes += str[len++] == '\"'; - } - - quote_doubled_str = ap_palloc(p, len + num_quotes + 1); - dest = quote_doubled_str; - - while (*str) { - if (*str == '\"') - *(dest++) = '\"'; - *(dest++) = *(str++); - } - - *dest = 0; - return quote_doubled_str; -} -#endif - - #ifndef HAVE_STRERROR char * strerror(int err) diff --git a/server/util_date.c b/server/util_date.c index 2864ed244b..f8809e9def 100644 --- a/server/util_date.c +++ b/server/util_date.c @@ -66,6 +66,8 @@ * */ +#define CORE_PRIVATE + #include "ap_config.h" #include "util_date.h" #include diff --git a/server/util_script.c b/server/util_script.c index 9095b57b7b..293ba98764 100644 --- a/server/util_script.c +++ b/server/util_script.c @@ -65,6 +65,8 @@ #include "http_request.h" /* for sub_req_lookup_uri() */ #include "util_script.h" #include "util_date.h" /* For parseHTTPdate() */ +#include +#include #ifdef OS2 #define INCL_DOS diff --git a/server/util_uri.c b/server/util_uri.c index 47fa1e385f..b4a1ffc649 100644 --- a/server/util_uri.c +++ b/server/util_uri.c @@ -62,6 +62,8 @@ #include "httpd.h" #include "http_log.h" #include "util_uri.h" +#include +#include /* Some WWW schemes and their default ports; this is basically /etc/services */ /* This will become global when the protocol abstraction comes */ diff --git a/server/vhost.c b/server/vhost.c index 400abfa11f..e22a42abc9 100644 --- a/server/vhost.c +++ b/server/vhost.c @@ -67,6 +67,7 @@ #include "http_vhost.h" #include "http_protocol.h" #include "http_core.h" +#include "ap_config.h" /* * After all the definitions there's an explanation of how it's all put