bjori           Tue Dec  9 10:20:11 2008 UTC

  Added files:                 (Branch: PHP_5_3)
    /php-src/ext/standard/tests/directory       open_basedir_001.phpt 

  Modified files:              
    /php-src    NEWS 
    /php-src/main       fopen_wrappers.c fopen_wrappers.h 
  Log:
  MFH: - Changed open_basedir to allow tightening in runtime contexts. (Sara)
  - Add test
  
  
  
http://cvs.php.net/viewvc.cgi/php-src/NEWS?r1=1.2027.2.547.2.965.2.405&r2=1.2027.2.547.2.965.2.406&diff_format=u
Index: php-src/NEWS
diff -u php-src/NEWS:1.2027.2.547.2.965.2.405 
php-src/NEWS:1.2027.2.547.2.965.2.406
--- php-src/NEWS:1.2027.2.547.2.965.2.405       Tue Dec  9 10:12:21 2008
+++ php-src/NEWS        Tue Dec  9 10:20:11 2008
@@ -3,6 +3,7 @@
 ?? ??? 200?, PHP 5.3.0 Alpha 4
 - 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)
 
 - Fixed bug #46811 ini_set() doesn't return false on failure. (Hannes)
 
http://cvs.php.net/viewvc.cgi/php-src/main/fopen_wrappers.c?r1=1.175.2.3.2.13.2.13&r2=1.175.2.3.2.13.2.14&diff_format=u
Index: php-src/main/fopen_wrappers.c
diff -u php-src/main/fopen_wrappers.c:1.175.2.3.2.13.2.13 
php-src/main/fopen_wrappers.c:1.175.2.3.2.13.2.14
--- php-src/main/fopen_wrappers.c:1.175.2.3.2.13.2.13   Mon Aug 11 15:33:02 2008
+++ php-src/main/fopen_wrappers.c       Tue Dec  9 10:20:11 2008
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: fopen_wrappers.c,v 1.175.2.3.2.13.2.13 2008/08/11 15:33:02 lbarnaud 
Exp $ */
+/* $Id: fopen_wrappers.c,v 1.175.2.3.2.13.2.14 2008/12/09 10:20:11 bjori Exp $ 
*/
 
 /* {{{ includes
  */
@@ -79,6 +79,62 @@
 #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;
+       }
+
+       /* Otherwise 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.44.2.1.2.2.2.4&r2=1.44.2.1.2.2.2.5&diff_format=u
Index: php-src/main/fopen_wrappers.h
diff -u php-src/main/fopen_wrappers.h:1.44.2.1.2.2.2.4 
php-src/main/fopen_wrappers.h:1.44.2.1.2.2.2.5
--- php-src/main/fopen_wrappers.h:1.44.2.1.2.2.2.4      Mon Aug 11 15:33:02 2008
+++ php-src/main/fopen_wrappers.h       Tue Dec  9 10:20:11 2008
@@ -16,13 +16,14 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: fopen_wrappers.h,v 1.44.2.1.2.2.2.4 2008/08/11 15:33:02 lbarnaud Exp $ 
*/
+/* $Id: fopen_wrappers.h,v 1.44.2.1.2.2.2.5 2008/12/09 10:20:11 bjori 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);
@@ -39,6 +40,8 @@
 PHPAPI FILE *php_fopen_with_path(const char *filename, const char *mode, const 
char *path, char **opened_path TSRMLS_DC);
 
 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/ext/standard/tests/directory/open_basedir_001.phpt?view=markup&rev=1.1
Index: php-src/ext/standard/tests/directory/open_basedir_001.phpt
+++ php-src/ext/standard/tests/directory/open_basedir_001.phpt



-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to