]> granicus.if.org Git - php/commitdiff
Fix INFILE LOCAL option handling with MySQL - now not allowed when open_basedir
authorStanislav Malyshev <stas@php.net>
Mon, 18 Jun 2007 21:51:32 +0000 (21:51 +0000)
committerStanislav Malyshev <stas@php.net>
Mon, 18 Jun 2007 21:51:32 +0000 (21:51 +0000)
or safe_mode is active

ext/mysql/php_mysql.c
ext/mysqli/mysqli_api.c
ext/pdo_mysql/mysql_driver.c

index 172249665db56ca0ed4135fef729f79c28e446ff..35b9dc66c1a0a7a28843d5b4b0305c709b9a1e02 100644 (file)
@@ -603,7 +603,7 @@ static void php_mysql_do_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent)
                                break;
                }
                /* disable local infile option for open_basedir */
-                if (PG(open_basedir) && strlen(PG(open_basedir)) && (client_flags & CLIENT_LOCAL_FILES)) {
+               if (((PG(open_basedir) && PG(open_basedir)[0] != '\0') || PG(safe_mode)) && (client_flags & CLIENT_LOCAL_FILES)) {
                        client_flags ^= CLIENT_LOCAL_FILES;
                }
 
index 71a7308f6a839c2d81a7ec3b14152d469e0d3858..5afd565ff56e5d91e4eae7b1ba10bbdd1f16b5ca 100644 (file)
@@ -1289,6 +1289,12 @@ PHP_FUNCTION(mysqli_options)
        }
        MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link", MYSQLI_STATUS_INITIALIZED);
 
+       if ((PG(open_basedir) && PG(open_basedir)[0] != '\0') || PG(safe_mode)) {
+               if(mysql_option == MYSQL_OPT_LOCAL_INFILE) {
+                       RETURN_FALSE;
+               }
+       }
+
        switch (Z_TYPE_PP(&mysql_value)) {
                case IS_STRING:
                        ret = mysql_options(mysql->mysql, mysql_option, Z_STRVAL_PP(&mysql_value));
@@ -1427,9 +1433,9 @@ PHP_FUNCTION(mysqli_real_connect)
        MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link", MYSQLI_STATUS_INITIALIZED);
 
        /* remove some insecure options */
-       flags ^= CLIENT_MULTI_STATEMENTS;   /* don't allow multi_queries via connect parameter */
-       if (PG(open_basedir) && strlen(PG(open_basedir))) {
-               flags ^= CLIENT_LOCAL_FILES;
+       flags &= ~CLIENT_MULTI_STATEMENTS;   /* don't allow multi_queries via connect parameter */
+       if ((PG(open_basedir) && PG(open_basedir)[0] != '\0') || PG(safe_mode)) {
+               flags &= ~CLIENT_LOCAL_FILES;
        }
 
        if (!socket) {
index 8f099e0d7167441f44d0402e2d83cf146ee7dde4..0519d585c66d80ceeab3c5daeba03382cf36f4cf 100755 (executable)
@@ -492,7 +492,11 @@ static int pdo_mysql_handle_factory(pdo_dbh_t *dbh, zval *driver_options TSRMLS_
                        pdo_mysql_error(dbh);
                        goto cleanup;
                }
-               
+
+               if ((PG(open_basedir) && PG(open_basedir)[0] != '\0') || PG(safe_mode)) {
+                       local_infile = 0;
+               }
+
                if (mysql_options(H->server, MYSQL_OPT_LOCAL_INFILE, (const char *)&local_infile)) {
                        pdo_mysql_error(dbh);
                        goto cleanup;