pollita Tue Oct 17 21:54:17 2006 UTC
Modified files:
/php-src/main main.c fopen_wrappers.c fopen_wrappers.h
/php-src NEWS
Log:
Extend open_basedir functionality to allow runtime tightening
http://cvs.php.net/viewvc.cgi/php-src/main/main.c?r1=1.704&r2=1.705&diff_format=u
Index: php-src/main/main.c
diff -u php-src/main/main.c:1.704 php-src/main/main.c:1.705
--- php-src/main/main.c:1.704 Tue Oct 3 16:28:02 2006
+++ php-src/main/main.c Tue Oct 17 21:54:16 2006
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: main.c,v 1.704 2006/10/03 16:28:02 pollita Exp $ */
+/* $Id: main.c,v 1.705 2006/10/17 21:54:16 pollita Exp $ */
/* {{{ includes
*/
@@ -339,6 +339,7 @@
#else
# define DEFAULT_SENDMAIL_PATH NULL
#endif
+
/* {{{ PHP_INI
*/
PHP_INI_BEGIN()
@@ -392,7 +393,7 @@
STD_PHP_INI_ENTRY("extension_dir",
PHP_EXTENSION_DIR, PHP_INI_SYSTEM, OnUpdateStringUnempty,
extension_dir, php_core_globals, core_globals)
STD_PHP_INI_ENTRY("include_path",
PHP_INCLUDE_PATH, PHP_INI_ALL, OnUpdateStringUnempty,
include_path, php_core_globals, core_globals)
PHP_INI_ENTRY("max_execution_time", "30",
PHP_INI_ALL, OnUpdateTimeout)
- STD_PHP_INI_ENTRY("open_basedir", NULL,
PHP_INI_SYSTEM, OnUpdateString, open_basedir,
php_core_globals, core_globals)
+ STD_PHP_INI_ENTRY("open_basedir", NULL,
PHP_INI_ALL, OnUpdateBaseDir, open_basedir,
php_core_globals, core_globals)
STD_PHP_INI_BOOLEAN("file_uploads", "1",
PHP_INI_SYSTEM, OnUpdateBool, file_uploads,
php_core_globals, core_globals)
STD_PHP_INI_ENTRY("upload_max_filesize", "2M",
PHP_INI_SYSTEM|PHP_INI_PERDIR, OnUpdateLong,
upload_max_filesize, php_core_globals, core_globals)
http://cvs.php.net/viewvc.cgi/php-src/main/fopen_wrappers.c?r1=1.183&r2=1.184&diff_format=u
Index: php-src/main/fopen_wrappers.c
diff -u php-src/main/fopen_wrappers.c:1.183 php-src/main/fopen_wrappers.c:1.184
--- php-src/main/fopen_wrappers.c:1.183 Sat Jul 1 11:50:52 2006
+++ php-src/main/fopen_wrappers.c Tue Oct 17 21:54:16 2006
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: fopen_wrappers.c,v 1.183 2006/07/01 11:50:52 nlopess Exp $ */
+/* $Id: fopen_wrappers.c,v 1.184 2006/10/17 21:54:16 pollita Exp $ */
/* {{{ includes
*/
@@ -82,6 +82,64 @@
#endif
/* }}} */
+/* {{{ OnUpdateBaseDir
+Allows any change to open_basedir setting in during Startup and Shutdown
events,
+or a tightening during activation/runtime/deactivation */
+PHPAPI ZEND_INI_MH(OnUpdateBaseDir)
+{
+ char **p, *pathbuf, *ptr, *end;
+#ifndef ZTS
+ char *base = (char *) mh_arg2;
+#else
+ char *base = (char *) ts_resource(*((int *) mh_arg2));
+#endif
+
+ p = (char **) (base+(size_t) mh_arg1);
+
+ if (stage == PHP_INI_STAGE_STARTUP || stage == PHP_INI_STAGE_SHUTDOWN) {
+ /* We're in a PHP_INI_SYSTEM context, no restrictions */
+ *p = new_value;
+ return SUCCESS;
+ }
+
+
+ /* Elsewise, we're in runtime */
+ if (!*p || !**p) {
+ /* open_basedir not set yet, go ahead and give it a value */
+ *p = new_value;
+ return SUCCESS;
+ }
+
+ /* Shortcut: When we have a open_basedir and someone tries to unset, we
know it'll fail */
+ if (!new_value || !*new_value) {
+ return FAILURE;
+ }
+
+ /* Is the proposed open_basedir at least as restrictive as the current
setting? */
+ ptr = pathbuf = estrdup(new_value);
+ while (ptr && *ptr) {
+ end = strchr(ptr, DEFAULT_DIR_SEPARATOR);
+ if (end != NULL) {
+ *end = '\0';
+ end++;
+ }
+ if (php_check_open_basedir_ex(ptr, 0 TSRMLS_CC) != 0) {
+ /* At least one portion of this open_basedir is less
restrictive than the prior one, FAIL */
+ efree(pathbuf);
+ return FAILURE;
+ }
+ ptr = end;
+ }
+ efree(pathbuf);
+
+ /* Everything checks out, set it */
+ *p = new_value;
+
+ return SUCCESS;
+}
+/* }}} */
+
+
/* {{{ php_check_specific_open_basedir
When open_basedir is not NULL, check if the given filename is located in
open_basedir. Returns -1 if error or not in the open_basedir, else 0
http://cvs.php.net/viewvc.cgi/php-src/main/fopen_wrappers.h?r1=1.47&r2=1.48&diff_format=u
Index: php-src/main/fopen_wrappers.h
diff -u php-src/main/fopen_wrappers.h:1.47 php-src/main/fopen_wrappers.h:1.48
--- php-src/main/fopen_wrappers.h:1.47 Sat Jul 1 11:50:52 2006
+++ php-src/main/fopen_wrappers.h Tue Oct 17 21:54:16 2006
@@ -16,13 +16,14 @@
+----------------------------------------------------------------------+
*/
-/* $Id: fopen_wrappers.h,v 1.47 2006/07/01 11:50:52 nlopess Exp $ */
+/* $Id: fopen_wrappers.h,v 1.48 2006/10/17 21:54:16 pollita Exp $ */
#ifndef FOPEN_WRAPPERS_H
#define FOPEN_WRAPPERS_H
BEGIN_EXTERN_C()
#include "php_globals.h"
+#include "php_ini.h"
PHPAPI int php_fopen_primary_script(zend_file_handle *file_handle TSRMLS_DC);
PHPAPI char *expand_filepath(const char *filepath, char *real_path TSRMLS_DC);
@@ -35,6 +36,8 @@
PHPAPI int php_is_url(char *path);
PHPAPI char *php_strip_url_passwd(char *path);
+
+PHPAPI ZEND_INI_MH(OnUpdateBaseDir);
END_EXTERN_C()
#endif
http://cvs.php.net/viewvc.cgi/php-src/NEWS?r1=1.2128&r2=1.2129&diff_format=u
Index: php-src/NEWS
diff -u php-src/NEWS:1.2128 php-src/NEWS:1.2129
--- php-src/NEWS:1.2128 Mon Oct 9 02:48:06 2006
+++ php-src/NEWS Tue Oct 17 21:54:17 2006
@@ -10,6 +10,7 @@
functions to not call __autoload(). (Dmitry)
- Changed opendir/dir/scandir to use default context
when no context argument is passed. (Sara)
+- Changed open_basedir to allow tightening in runtime contexts. (Sara)
- Removed old legacy:
. "register_globals" support. (Pierre)
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php