From: Ryan Bloom Date: Wed, 19 Jan 2000 01:16:31 +0000 (+0000) Subject: Finish the commits for the change in the header files. Basically, this hides X-Git-Tag: 1.3.13~19 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=a8ce196da5b170ba69ebc9c3d5cb44d59f0c72e6;p=apache Finish the commits for the change in the header files. Basically, this hides all of the Apache macros that modules don't need access to. This should have been committed with the modules, but I wasn't paying attention to the directory I was in when I ran the commit. Submitted by: Manoj Kasichainula and Ryan Bloom git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@84493 13f79535-47bb-0310-9956-ffa450edef68 --- 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 */ }; +/* 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 -/* Prototypes for utilities... util.c. +/* 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