From 9495fb9d7dc6193c57b62d4e38f8eec1cf9919f7 Mon Sep 17 00:00:00 2001 From: Christian Stocker Date: Thu, 22 Aug 2002 07:48:23 +0000 Subject: [PATCH] @ - Added php.ini option "allow_webdav_methods" to allow handling of @ WebDAV http requests within PHP scripts. (chregu) # More methods (for DeltaV) will follow. --- main/SAPI.c | 12 ++++++++++-- main/main.c | 1 + main/php_globals.h | 3 ++- sapi/apache/mod_php4.c | 13 ++++++++----- 4 files changed, 21 insertions(+), 8 deletions(-) diff --git a/main/SAPI.c b/main/SAPI.c index 054d35dce2..ab83ca0079 100644 --- a/main/SAPI.c +++ b/main/SAPI.c @@ -306,8 +306,16 @@ SAPI_API void sapi_activate(TSRMLS_D) SG(rfc1867_uploaded_files) = NULL; if (SG(server_context)) { - if (SG(request_info).request_method - && !strcmp(SG(request_info).request_method, "POST")) { + if ( SG(request_info).request_method + && (!strcmp(SG(request_info).request_method, "POST") + || (PG(allow_webdav_methods) + && (!strcmp(SG(request_info).request_method, "PROPFIND") + || !strcmp(SG(request_info).request_method, "PROPPATCH") + || !strcmp(SG(request_info).request_method, "PUT") + || !strcmp(SG(request_info).request_method, "MOVE") + || !strcmp(SG(request_info).request_method, "POST") + || !strcmp(SG(request_info).request_method, "COPY") + || !strcmp(SG(request_info).request_method, "LOCK"))))) { if (!SG(request_info).content_type) { SG(request_info).content_type_dup = NULL; if(PG(always_populate_raw_post_data)) { diff --git a/main/main.c b/main/main.c index 311b7ba1a5..446e94786a 100644 --- a/main/main.c +++ b/main/main.c @@ -326,6 +326,7 @@ PHP_INI_BEGIN() STD_PHP_INI_BOOLEAN("allow_url_fopen", "1", PHP_INI_ALL, OnUpdateBool, allow_url_fopen, php_core_globals, core_globals) STD_PHP_INI_BOOLEAN("always_populate_raw_post_data", "0", PHP_INI_SYSTEM|PHP_INI_PERDIR, OnUpdateBool, always_populate_raw_post_data, php_core_globals, core_globals) + STD_PHP_INI_BOOLEAN("allow_webdav_methods", "0", PHP_INI_SYSTEM|PHP_INI_PERDIR, OnUpdateBool, allow_webdav_methods, php_core_globals, core_globals) PHP_INI_END() /* }}} */ diff --git a/main/php_globals.h b/main/php_globals.h index 10639de0a1..4f8755aa4b 100644 --- a/main/php_globals.h +++ b/main/php_globals.h @@ -139,7 +139,8 @@ struct _php_core_globals { zend_bool allow_url_fopen; zend_bool always_populate_raw_post_data; - + + zend_bool allow_webdav_methods; }; diff --git a/sapi/apache/mod_php4.c b/sapi/apache/mod_php4.c index dc0500da58..26573a6065 100644 --- a/sapi/apache/mod_php4.c +++ b/sapi/apache/mod_php4.c @@ -488,11 +488,6 @@ static int send_php(request_rec *r, int display_source_mode, char *filename) } zend_first_try { - /* We don't accept OPTIONS requests, but take everything else */ - if (r->method_number == M_OPTIONS) { - r->allowed |= (1 << METHODS) - 1; - return DECLINED; - } /* Make sure file exists */ if (filename == NULL && r->finfo.st_mode == 0) { @@ -503,6 +498,14 @@ static int send_php(request_rec *r, int display_source_mode, char *filename) if (per_dir_conf) { zend_hash_apply((HashTable *) per_dir_conf, (apply_func_t) php_apache_alter_ini_entries TSRMLS_CC); } + + /* We don't accept OPTIONS requests, but take everything else */ + if (!PG(allow_webdav_methods)) { + if (r->method_number == M_OPTIONS) { + r->allowed |= (1 << METHODS) - 1; + return DECLINED; + } + } /* If PHP parser engine has been turned off with an "engine off" * directive, then decline to handle this request -- 2.50.1