diff options
-rw-r--r-- | main/main.c | 13 | ||||
-rw-r--r-- | main/php.h | 4 | ||||
-rw-r--r-- | main/php_globals.h | 3 | ||||
-rw-r--r-- | mod_php4.c | 13 |
4 files changed, 26 insertions, 7 deletions
diff --git a/main/main.c b/main/main.c index f778212c07..5e53f5ffa1 100644 --- a/main/main.c +++ b/main/main.c @@ -228,6 +228,7 @@ PHP_INI_BEGIN() STD_PHP_INI_BOOLEAN("track_vars", (PHP_TRACK_VARS?"1":"0"), PHP_INI_ALL, OnUpdateInt, track_vars, php_core_globals, core_globals) STD_PHP_INI_ENTRY("gpc_order", "GPC", PHP_INI_ALL, OnUpdateStringUnempty, gpc_order, php_core_globals, core_globals) STD_PHP_INI_ENTRY("arg_separator", "&", PHP_INI_ALL, OnUpdateStringUnempty, arg_separator, php_core_globals, core_globals) + STD_PHP_INI_BOOLEAN("ignore_user_abort", "1", PHP_INI_ALL, OnUpdateInt, ignore_user_abort, php_core_globals, core_globals) PHP_INI_END() @@ -235,14 +236,16 @@ PHP_INI_END() /* True global (no need for thread safety */ static int module_initialized = 0; - +#if 0 #if APACHE void php3_apache_puts(const char *s) { SLS_FETCH(); if (SG(server_context)) { - rputs(s, (request_rec *) SG(server_context)); + if(rputs(s, (request_rec *) SG(server_context))==-1) { + PG(connection_status) = PHP_CONNECTION_ABORTED; + } } else { fputs(s, stdout); } @@ -253,12 +256,15 @@ void php3_apache_putc(char c) SLS_FETCH(); if (SG(server_context)) { - rputc(c, (request_rec *) SG(server_context)); + if(rputc(c, (request_rec *) SG(server_context))!=c) { + PG(connection_status) = PHP_CONNECTION_ABORTED; + } } else { fputc(c, stdout); } } #endif +#endif void php3_log_err(char *log_message) { @@ -847,6 +853,7 @@ int php_module_startup(sapi_module_struct *sf) PG(header_is_being_sent) = 0; SG(request_info).headers_only = 0; + PG(connection_status) = PHP_CONNECTION_NORMAL; #if HAVE_SETLOCALE setlocale(LC_CTYPE, ""); diff --git a/main/php.h b/main/php.h index 209e0c7b31..9bc697dd5b 100644 --- a/main/php.h +++ b/main/php.h @@ -324,6 +324,10 @@ PHPAPI int cfg_get_string(char *varname, char **result); #include "zend_variables.h" #include "zend_constants.h" +/* connection status states */ +#define PHP_CONNECTION_NORMAL 0 +#define PHP_CONNECTION_ABORTED 1 +#define PHP_CONNECTION_TIMEOUT 2 /* Finding offsets of elements within structures. diff --git a/main/php_globals.h b/main/php_globals.h index be8b5e3890..054ef07c8b 100644 --- a/main/php_globals.h +++ b/main/php_globals.h @@ -83,6 +83,9 @@ struct _php_core_globals { long y2k_compliance; + short connection_status; + short ignore_user_abort; + unsigned char header_is_being_sent; /* for fsock */ diff --git a/mod_php4.c b/mod_php4.c index bba5776a22..65d52df220 100644 --- a/mod_php4.c +++ b/mod_php4.c @@ -94,12 +94,17 @@ void php_save_umask() static int zend_apache_ub_write(const char *str, uint str_length) { SLS_FETCH(); - + int ret; + if (SG(server_context)) { - return rwrite(str, str_length, (request_rec *) SG(server_context)); + ret = rwrite(str, str_length, (request_rec *) SG(server_context)); } else { - return fwrite(str, 1, str_length, stdout); + ret = fwrite(str, 1, str_length, stdout); + } + if(ret != str_length) { + PG(connection_status) = PHP_CONNECTION_ABORTED; } + return ret; } @@ -466,7 +471,7 @@ int php_xbithack_handler(request_rec * r) return send_parsed_php(r); } -static void apache_php_module_shutdown_wrapper() +static void apache_php_module_shutdown_wrapper(void) { apache_php_initialized = 0; sapi_module.shutdown(&sapi_module); |