diff --git a/ChangeLog b/ChangeLog index cfdfbb17a..084998f2c 100755 --- a/ChangeLog +++ b/ChangeLog @@ -5,6 +5,11 @@ phpMyAdmin - Changelog $Id$ $Source$ +2002-05-17 Robin Johnson + * config.inc.php3, libraries/common.lib.php3: IP-based Allow/Deny code + from feature #484158 + * Documentation.*: feature #484158 documented + 2002-05-17 Marc Delisle * tbl_change.php3, bug 556296: field size for int * tbl_qbe.php3, adjust drop-down width, thanks to Mike Beck diff --git a/Documentation.html b/Documentation.html index 29847a12e..c1f8c8c20 100755 --- a/Documentation.html +++ b/Documentation.html @@ -343,10 +343,13 @@ $cfg['Servers'][$i]['user'] and $cfg['Servers'][$i]['password'] fields.
But you don't need to setup a "controluser" here: - using the $cfg['Servers'][$i]['only_db'] might be enough. -
- In the ISP FAQ section, there is an entry explaining how to protect + using the $cfg['Servers'][$i]['only_db'] might be enough. +
  • In the ISP FAQ section, there is an entry explaining how to protect your configuration file.
  • +
  • For additional security in this mode, you may wish to consider the + Host authentication $cfg['Servers'][$i]['AllowDeny']['order'] + and $cfg['Servers'][$i]['AllowDeny']['rules'] configuration + directives.
  • @@ -438,9 +441,9 @@ $cfg['PmaAbsoluteUri'] = (!empty($HTTPS) ? 'https' : 'http') . '://'
    $cfg['Servers'][$i]['connect_type'] string
    What type connection to use with the MySQL server. Your options are - 'socket' & 'tcp'. It defaults to 'tcp' as that is nearly guarenteed - to be available on all MySQL servers, while sockets are not supported - on some platforms. + 'socket' & 'tcp'. It defaults to 'tcp' as that + is nearly guarenteed to be available on all MySQL servers, while + sockets are not supported on some platforms.

    @@ -691,6 +694,56 @@ $cfg['PmaAbsoluteUri'] = (!empty($HTTPS) ? 'https' : 'http') . '://'

    + + +
    $cfg['Servers'][$i]['AllowDeny']['order'] string
    +
    + If your rule order is empty, then IP authentication is disabled. +

    + If your rule order is set to 'deny,allow'. Then the system applies all deny rules followed by allow rules. + Access is allowed by default. Any client which does not match a Deny command or does match an Allow command will be + allowed access to the server. +

    + If your rule order is set to 'allow,deny'. Then the system applies all allow rules followed by deny rules. Access + is denied by default. Any client which does not match an Allow directive or does match a Deny directive will be denied + access to the server. +

    + If your rule order is set to 'explicit', the authentication is performed in a similar fashion to rule order 'deny,allow', + with the added restriction that your host/username combination must be listed in the allow rules, and not + listed in the deny rules. This is the most secure means of using Allow/Deny rules, and was available in + Apache by specifying allow and deny rules without setting any order. +

    +
    + + +
    $cfg['Servers'][$i]['AllowDeny']['rules'] array of strings
    +
    + The general format for the rules is as such:
    + <'allow' | 'deny'> <username> [from] <ipmask> +

    + + If you wish to match all users, it is possible to use a '%' as a wildcard in the username field.
    + There are a few shortcuts you can use in the ipmask field as well: +
    +      'all' -> 0.0.0.0/0
    +      'localhost' -> 127.0.0.1/8
    +

    + + Having an empty rule list is equivilent to either using 'allow % from all' if your rule order is set to + 'deny,allow' or 'deny % from all' if your rule order is set to 'allow,deny' or + 'explicit'. +

    + + For the IP matching system, the following work:
    + xxx.xxx.xxx.xxx (an exact IP address)
    + xxx.xxx.xxx.[yyy-zzz] (an IP address range)
    + xxx.xxx.xxx.xxx/nn (CIDR, Classless Inter-Domain Routing type IP addresses)
    + But the following does not work:
    + xxx.xxx.xxx.xx[yyy-zzz] (partial IP address range) +

    + +
    +
    $cfg['ServerDefault'] integer
    If you have more than one server configured, you can set @@ -1386,7 +1439,7 @@ $cfg['PmaAbsoluteUri'] = (!empty($HTTPS) ? 'https' : 'http') . '://' your users. The development of this feature was kindly sponsored by NetCologne GmbH. This requires a properly setup MySQL user management and phpMyAdmin - http authentication. See the install section on + http or cookie authentication. See the install section on "Using http authentication".

    @@ -1456,6 +1509,30 @@ $cfg['PmaAbsoluteUri'] = (!empty($HTTPS) ? 'https' : 'http') . '://' would let a user create/manage his/her database(s).

    +

    + How can I use the Host-based authentication additions? +
    + If you have existing rules from an old .htaccess file, you can take them and + add a username between the 'deny'/'allow' and 'from' + strings. Using the username wildcard of '%' would be a major benefit + here if your installation is suited to using it. Then you can just add those + updated lines into the $cfg['Servers'][$i]['AllowDeny']['rules'] array. +

    + If you want a pre-made sample, you can try this fragment. It stops the 'root' + user from logging in from any networks other than the private network IP blocks. +
    +    //block root from logging in except from the private networks
    +    $cfg['Servers'][$i]['AllowDeny']['order'] = 'deny,allow';
    +    $cfg['Servers'][$i]['AllowDeny']['rules'] = array(
    +        'deny root from all',
    +        'allow root from localhost',
    +        'allow root from 10.0.0.0/8',
    +        'allow root from 192.168.0.0/16',
    +        'allow root from 172.16.0.0/12',
    +        );
    + +

    +

    [Browsers or client OS]

    @@ -1556,7 +1633,7 @@ $cfg['PmaAbsoluteUri'] = (!empty($HTTPS) ? 'https' : 'http') . '://'

    • Using VARCHAR without a size argument
    • -
    • Using TEXT or BLOB with a size argument
    • +
    • Using TEXT or BLOB with a size argument

    Also, look at the syntax chapter in the MySQL manual to confirm that your @@ -1883,7 +1960,7 @@ CREDITS, in chronological order * started SourceForge phpMyAdmin project in March 2001 * sync'ed different existing CVS trees with new features and bugfixes * multi-language improvements, dynamic language selection - * current project maintainer, with Marc and Loic + * current project maintainer [lc] - Loïc Chapeaux <lolo_at_phpheaven.net> * rewrote and optimized javascript, DHTML and DOM stuff @@ -1895,6 +1972,8 @@ CREDITS, in chronological order [rj] - Robin Johnson <robbat2_at_users.sourceforge.net> * database maintence controls * table type code + * Host authentication IP Allow/Deny + * DB-based configuration [af] - Armel Fauveau <armel.fauveau_at_globalis-ms.com> * bookmarks feature @@ -1927,7 +2006,7 @@ CREDITS, in chronological order * German language file updates -Thanks to those guy who send us some major improvements to merge into the +Thanks to these guys who have sent us some major improvements to merge into the code since version 2.1.0: - Michal Cihar <nijel at users.sourceforge.net> who implemented the enhanced index creation/display feature. @@ -1947,6 +2026,7 @@ code since version 2.1.0: - Maxime Delorme <delorme.maxime at free.fr> for the PDF schema output; thanks also to Olivier Plathey for the fpdf library (www.fpdf.org). + And also to the following people who have contributed minor changes, enhancements, bugfixes or support for a new language since version 2.1.0: Bora Alioglu, Ricardo ?, Sven-Erik Andersen, Alessandro Astarita, diff --git a/Documentation.txt b/Documentation.txt index a0adab6da..fe3e43bed 100644 --- a/Documentation.txt +++ b/Documentation.txt @@ -1,41 +1,34 @@ - phpMyAdmin 2.3.0-dev Documentation - - * [1]Sourceforge phpMyAdmin project page [ - http://www.phpmyadmin.net/ ] + phpMyAdmin 2.3.0-dev Documentation + + * Sourceforge phpMyAdmin project page [ http://www.phpmyadmin.net/ ] * Local documents: - + Version history: [2]ChangeLog - + General notes: [3]README - + License: [4]LICENSE - * Documentation version: $Id: Documentation.html,v 1.220 2002/05/01 - 18:29:43 lem9 Exp $ - ______________________________________________________________________ - - [5]Top - [6]Requirements - [7]Introduction - [8]Installation - - [9]Configuration - [10]FAQ - [11]Developers - [12]Credits - ______________________________________________________________________ - + + Version history: ChangeLog + + General notes: README + + License: LICENSE + * Documentation version: $Id$ + ________________________________________________________________________________________________________________________________ + + Top - Requirements - Introduction - Installation - Configuration - FAQ - Developers - Credits + ________________________________________________________________________________________________________________________________ + Requirements - * PHP3 or PHP4: phpMyAdmin widely uses the 'str_replace()' php - function that was added in PHP 3.0.6, but was buggy up until + * PHP3 or PHP4: phpMyAdmin widely uses the 'str_replace()' php function that was added in PHP 3.0.6, but was buggy up until PHP 3.0.8. Then you should not run this script with PHP3 < 3.0.8. PHP also needs to be compiled with MySQL support; * MySQL (tested with 3.21.x, 3.22.x, 3.23.x and 4.0.x); * a web-browser (doh!). - ______________________________________________________________________ - - [13]Top - [14]Requirements - [15]Introduction - [16]Installation - - [17]Configuration - [18]FAQ - [19]Developers - [20]Credits - ______________________________________________________________________ - + ________________________________________________________________________________________________________________________________ + + Top - Requirements - Introduction - Installation - Configuration - FAQ - Developers - Credits + ________________________________________________________________________________________________________________________________ + Introduction - phpMyAdmin can manage a whole MySQL-server (needs a super-user) but - also a single database. To accomplish the latter you'll need a - properly set up MySQL-user who can read/write only the desired - database. It's up to you to look up the appropriate part in the MySQL - manual. Currently phpMyAdmin can: + phpMyAdmin can manage a whole MySQL-server (needs a super-user) but also a single database. To accomplish the latter you'll need + a properly set up MySQL-user who can read/write only the desired database. It's up to you to look up the appropriate part in the + MySQL manual. Currently phpMyAdmin can: * create and drop databases * create, copy, drop and alter tables * delete, edit and add fields @@ -47,260 +40,185 @@ Introduction * administer multiple servers and single databases * check referential integrity * communicate in more than 38 different languages - - (*) phpMyAdmin can compress (Zip, GZip -RFC 1952- or Bzip2 formats) - dumps and CSV exports if you use PHP4 >= 4.0.4 with Zlib support - (--with-zlib) and/or Bzip2 support (--with-bz2). - ______________________________________________________________________ - - [21]Top - [22]Requirements - [23]Introduction - [24]Installation - - [25]Configuration - [26]FAQ - [27]Developers - [28]Credits - ______________________________________________________________________ - + + (*) phpMyAdmin can compress (Zip, GZip -RFC 1952- or Bzip2 formats) dumps and CSV exports if you use PHP4 >= 4.0.4 with Zlib + support (--with-zlib) and/or Bzip2 support (--with-bz2). + ________________________________________________________________________________________________________________________________ + + Top - Requirements - Introduction - Installation - Configuration - FAQ - Developers - Credits + ________________________________________________________________________________________________________________________________ + Installation - NOTE: phpMyAdmin does not apply any special security methods to the - MySQL database server. It is still the sysadmin's job to grant - permissions on the MySQL databases properly. - - Warning for Mac users: php seems not to like Mac end of lines - character ("\r") and Stuffit unstuffs with Mac formats, of course. - So you'll have to resave as in Bbedit to unix style ALL phpMyAdmin - scripts before uploading them to your server. - - Documentation warning: when you see in this document a .php3 file - extension, please transpose to .php if you are using a kit with files - having this extension. - + NOTE: phpMyAdmin does not apply any special security methods to the MySQL database server. It is still the sysadmin's job to + grant permissions on the MySQL databases properly. + + Warning for Mac users: php seems not to like Mac end of lines character ("\r") and Stuffit unstuffs with Mac formats, of course. + So you'll have to resave as in Bbedit to unix style ALL phpMyAdmin scripts before uploading them to your server. + + Documentation warning: when you see in this document a .php3 file extension, please transpose to .php if you are using a kit + with files having this extension. + Quick Install: - 1. Use a distribution kit with the files having the extension (.php3 - or .php) depending on the way your web/PHP server interprets those - extensions. - 2. Untar or unzip the distribution (be sure to unzip the - subdirectories): tar xzvf phpMyAdmin_x.x.x.tar.gz in your - webserver's document root. - 3. Open the file config.inc.php3 in your favourite editor and change - the values for host, user, password and authentication mode to fit - your environment. Also insert the correct value for - $cfg['PmaAbsoluteUri']. Have a look at [29]Configuration section + 1. Use a distribution kit with the files having the extension (.php3 or .php) depending on the way your web/PHP server + interprets those extensions. + 2. Untar or unzip the distribution (be sure to unzip the subdirectories): tar xzvf phpMyAdmin_x.x.x.tar.gz in your webserver's + document root. + 3. Open the file config.inc.php3 in your favourite editor and change the values for host, user, password and authentication + mode to fit your environment. Also insert the correct value for $cfg['PmaAbsoluteUri']. Have a look at Configuration section for an explanation of all values. - 4. It is recommended that you protect the directory in which you - installed phpMyAdmin (unless it's on a closed intranet, or you - wish to use http or cookie authentication), for example with - HTTP-AUTH (in a .htaccess file). See the [30]FAQ section for + 4. It is recommended that you protect the directory in which you installed phpMyAdmin (unless it's on a closed intranet, or you + wish to use http or cookie authentication), for example with HTTP-AUTH (in a .htaccess file). See the FAQ section for additional information. - 5. Open the file //index.php3 in - your browser. phpMyAdmin should now display a welcome screen and - your databases, or a login dialog if using http or cookie - authentication mode. - + 5. Open the file //index.php3 in your browser. phpMyAdmin should now display a welcome + screen and your databases, or a login dialog if using http or cookie authentication mode. + Upgrading from an older version: - * Please do not copy your older config.inc.php3 over the new one: it - may offer new configuration variables, and the new version may - depend on these for normal behavior. It is suggested instead to - insert your site values in the new one. - + * Please do not copy your older config.inc.php3 over the new one: it may offer new configuration variables, and the new + version may depend on these for normal behavior. It is suggested instead to insert your site values in the new one. + Using authentication modes: - * Http and cookie authentication modes are recommended in a - multi-user environment where you want to give users access to + * Http and cookie authentication modes are recommended in a multi-user environment where you want to give users access to their own database and don't want them to play around with others. - Nevertheless be aware that MS Internet Explorer seems to be really - buggy about cookies, at least till version 6. And php 4.1.1 is - also a bit buggy in this area! - * Http and cookie authentication modes are secure: the MySQL - password does not need to be set in the phpMyAdmin configuration - file. (except for the "controluser" -see the Configuration - section-). - In cookie mode, we send the password in a temporary cookie, so - most browsers should not store the password in their cookie file. - * For 'http' and 'cookie' modes, phpMyAdmin needs a controluser that - has only the SELECT privilege on the mysql.user (all columns - except "Password"), mysql.db (all columns) & mysql.tables_priv - (all columns except "Grantor" & "Timestamp") tables. - You must specify the details for the controluser in the - config.inc.php3 file under the $cfg['Servers'][$i]['controluser']& + Nevertheless be aware that MS Internet Explorer seems to be really buggy about cookies, at least till version 6. And php + 4.1.1 is also a bit buggy in this area! + * Http and cookie authentication modes are secure: the MySQL password does not need to be set in the phpMyAdmin configuration + file. (except for the "controluser" -see the Configuration section-). + In cookie mode, we send the password in a temporary cookie, so most browsers should not store the password in their cookie + file. + * For 'http' and 'cookie' modes, phpMyAdmin needs a controluser that has only the SELECT privilege on the mysql.user (all + columns except "Password"), mysql.db (all columns) & mysql.tables_priv (all columns except "Grantor" & "Timestamp") tables. + You must specify the details for the controluser in the config.inc.php3 file under the $cfg['Servers'][$i]['controluser']& $cfg['Servers'][$i]['controlpass'] settings. - This example assumes you want to use pma as the controluser and - pmapass as the controlpass: - - GRANT USAGE ON mysql.* TO 'pma'@'localhost' IDENTIFIED BY - 'pmapass'; - GRANT SELECT (Host, User, Select_priv, Insert_priv, Update_priv, - Delete_priv, Create_priv, Drop_priv, Reload_priv, Shutdown_priv, - Process_priv, File_priv, Grant_priv, References_priv, Index_priv, - Alter_priv) ON mysql.user TO 'pma'@'localhost'; + This example assumes you want to use pma as the controluser and pmapass as the controlpass: + + GRANT USAGE ON mysql.* TO 'pma'@'localhost' IDENTIFIED BY 'pmapass'; + GRANT SELECT (Host, User, Select_priv, Insert_priv, Update_priv, Delete_priv, Create_priv, Drop_priv, Reload_priv, + Shutdown_priv, Process_priv, File_priv, Grant_priv, References_priv, Index_priv, Alter_priv) ON mysql.user TO 'pma'@'localhost'; GRANT SELECT ON mysql.db TO 'pma'@'localhost'; - GRANT SELECT (Host, Db, User, Table_name, Table_priv, Column_priv) ON - mysql.tables_priv TO 'pma'@'localhost'; + GRANT SELECT (Host, Db, User, Table_name, Table_priv, Column_priv) ON mysql.tables_priv TO 'pma'@'localhost'; ... and if you want to use the bookmark feature: - GRANT SELECT, INSERT, DELETE ON . TO - 'pma'@'localhost'; - * Then each of the true users should be granted of a set of - privileges on a set of particular databases but shouldn't have any - global privileges. For example, to grant the user real_user with - all privileges on the database user_base: - GRANT ALL PRIVILEGES ON user_base.* TO 'real_user'@localhost - IDENTIFIED BY 'real_password'; - What the user may now do is controlled entirely by the MySQL user - management system. - With http or cookie auth mode, you don't need to fill the - user/password fields inside the $cfg['Servers'] array. - + GRANT SELECT, INSERT, DELETE ON . TO 'pma'@'localhost'; + * Then each of the true users should be granted of a set of privileges on a set of particular databases but shouldn't have any + global privileges. For example, to grant the user real_user with all privileges on the database user_base: + GRANT ALL PRIVILEGES ON user_base.* TO 'real_user'@localhost IDENTIFIED BY 'real_password'; + What the user may now do is controlled entirely by the MySQL user management system. + With http or cookie auth mode, you don't need to fill the user/password fields inside the $cfg['Servers'] array. + 'http' authentication mode: * Was called 'advanced' in versions before 2.2.3. - * Introduced in 1.3.0, it uses Basic HTTP authentication method and - allows you to login as any valid MySQL user. - * Is only supported with PHP running as an Apache module, not with - cgi. - + * Introduced in 1.3.0, it uses Basic HTTP authentication method and allows you to login as any valid MySQL user. + * Is only supported with PHP running as an Apache module, not with cgi. + 'cookie' authentication mode: - * You can use this method as a replacement for the http - authentication (for example, if you're running IIS). + * You can use this method as a replacement for the http authentication (for example, if you're running IIS). * Obviously, the user must enable cookies in the browser. - * With this mode, the use can truly logout of phpMyAdmin and login - back with the same username. - + * With this mode, the use can truly logout of phpMyAdmin and login back with the same username. + 'config' authentication mode: - * This mode is the less secure one because it requires you to fill - the $cfg['Servers'][$i]['user'] and + * This mode is the less secure one because it requires you to fill the $cfg['Servers'][$i]['user'] and $cfg['Servers'][$i]['password'] fields. - But you don't need to setup a "controluser" here: using the - $cfg['Servers'][$i]['only_db'] might be enough. - In the ISP FAQ section, there is an entry explaining how to - protect your configuration file. - ______________________________________________________________________ - - [31]Top - [32]Requirements - [33]Introduction - [34]Installation - - [35]Configuration - [36]FAQ - [37]Developers - [38]Credits - ______________________________________________________________________ - + But you don't need to setup a "controluser" here: using the $cfg['Servers'][$i]['only_db'] might be enough. + * In the ISP FAQ section, there is an entry explaining how to protect your configuration file. + * For additional security in this mode, you may wish to consider the Host authentication + $cfg['Servers'][$i]['AllowDeny']['order'] and $cfg['Servers'][$i]['AllowDeny']['rules'] configuration directives. + ________________________________________________________________________________________________________________________________ + + Top - Requirements - Introduction - Installation - Configuration - FAQ - Developers - Credits + ________________________________________________________________________________________________________________________________ + Configuration - Warning for Mac users: php seems not to like Mac end of lines - character ("\r"). So ensure you choose the option that allows to use - the *nix end of line character ("\n") in your text editor before - registering a script you have modified. - + Warning for Mac users: php seems not to like Mac end of lines character ("\r"). So ensure you choose the option that allows to + use the *nix end of line character ("\n") in your text editor before registering a script you have modified. + All configurable data is placed in config.inc.php3. - + $cfg['PmaAbsoluteUri'] string - Sets here the complete url (with full path) to your phpMyAdmin - version. E.g. + Sets here the complete url (with full path) to your phpMyAdmin version. E.g. http://www.your_web.net/path_to_your_phpMyAdmin_directory/. - Don't forget the slash at the end of your url. The url must - contain characters that are valid for a url, and on some + Don't forget the slash at the end of your url. The url must contain characters that are valid for a url, and on some servers, the path is case-sensitive. - This setting can be dynamically completed. For example, you can - try to use such a kind of code: - + This setting can be dynamically completed. For example, you can try to use such a kind of code: + $cfg['PmaAbsoluteUri'] = (!empty($HTTPS) ? 'https' : 'http') . '://' - . $HTTP_HOST . (!empty($SERVER_PORT) ? ':' . $SERVER_POR -T : '') + . $HTTP_HOST . (!empty($SERVER_PORT) ? ':' . $SERVER_PORT : '') . substr($PHP_SELF, 0, strrpos($PHP_SELF, '/')+1); or $cfg['PmaAbsoluteUri'] = (!empty($HTTPS) ? 'https' : 'http') . '://' - . $SERVER_NAME . (!empty($SERVER_PORT) ? ':' . $SERVER_P -ORT : '') + . $SERVER_NAME . (!empty($SERVER_PORT) ? ':' . $SERVER_PORT : '') . substr($SCRIPT_NAME, 0, strrpos($SCRIPT_NAME, '/')+1); $cfg['Servers'] array - Since version 1.4.2, phpMyAdmin supports the administration of - multiple MySQL servers. Therefore, a $cfg['Servers']-array has - been added which contains the login information for the - different servers. The first $cfg['Servers'][$i]['host'] - contains the hostname of the first server, the second - $cfg['Servers'][$i]['host'] the hostname of the second server, - etc. If you have only one server to administer, simply leave - free the hostname of the other $cfg['Server']-entries. - + Since version 1.4.2, phpMyAdmin supports the administration of multiple MySQL servers. Therefore, a $cfg['Servers']-array + has been added which contains the login information for the different servers. The first $cfg['Servers'][$i]['host'] + contains the hostname of the first server, the second $cfg['Servers'][$i]['host'] the hostname of the second server, etc. + If you have only one server to administer, simply leave free the hostname of the other $cfg['Server']-entries. + $cfg['Servers'][$i]['host'] string The hostname of your $i-th MySQL-server. E.g. localhost. - + $cfg['Servers'][$i]['port'] string - The port-number of your $i-th MySQL-server. Default is 3306 - (leave blank). - + The port-number of your $i-th MySQL-server. Default is 3306 (leave blank). + $cfg['Servers'][$i]['socket'] string The path to the socket to use. Leave blank for default. To use the socket feature you must run php 3.0.10 or more. - + $cfg['Servers'][$i]['connect_type'] string - What type connection to use with the MySQL server. Your options - are 'socket' & 'tcp'. It defaults to 'tcp' as that is nearly - guarenteed to be available on all MySQL servers, while sockets - are not supported on some platforms. - + What type connection to use with the MySQL server. Your options are 'socket' & 'tcp'. It defaults to 'tcp' as that is + nearly guarenteed to be available on all MySQL servers, while sockets are not supported on some platforms. + $cfg['Servers'][$i]['controluser'] string $cfg['Servers'][$i]['controlpass'] string - When using http or cookie authentication modes (or 'config' - authentication mode since phpMyAdmin 2.2.1), you need to supply - the details of a MySQL account that has SELECT privilege on the - mysql.user (all columns except "Password"), mysql.db (all - columns) & mysql.tables_priv (all columns except "Grantor" & - "Timestamp") tables. This account is used to check what - databases the user will see at login. - Please see the [39]install section on "Using http - authentication" for more information. - Note that if you try login to phpMyAdmin with this - "controluser", you could get some errors, depending the exact - privileges you gave to the "controluser". phpMyAdmin does not - support a direct login with the "controluser". + When using http or cookie authentication modes (or 'config' authentication mode since phpMyAdmin 2.2.1), you need to + supply the details of a MySQL account that has SELECT privilege on the mysql.user (all columns except "Password"), + mysql.db (all columns) & mysql.tables_priv (all columns except "Grantor" & "Timestamp") tables. This account is used to + check what databases the user will see at login. + Please see the install section on "Using http authentication" for more information. + Note that if you try login to phpMyAdmin with this "controluser", you could get some errors, depending the exact + privileges you gave to the "controluser". phpMyAdmin does not support a direct login with the "controluser". In versions before 2.2.5, those were called "stduser/stdpass". - + $cfg['Servers'][$i]['auth_type'] string ['http'|'cookie'|'config'] - Whether config or cookie or http authentication should be used - for this server. - - + 'config' authentication ($auth_type = 'config') is the plain - old way: username and password are stored in config.inc.php3. - + 'cookie' authentication mode ($auth_type = 'cookie') as - introduced in 2.2.3 allows you to log in as any valid MySQL - user with the help of... cookies. Log name and password are - stored in cookies during the session and password is deleted - when it ends. - + 'http' authentication (was called 'advanced' in older - versions) ($auth_type = 'http') as introduced in 1.3.0 allows - you to log in as any valid MySQL user via HTTP-Auth. - - Please see the install section on "Using authentication modes" - for more information. - + Whether config or cookie or http authentication should be used for this server. + + + 'config' authentication ($auth_type = 'config') is the plain old way: username and password are stored in + config.inc.php3. + + 'cookie' authentication mode ($auth_type = 'cookie') as introduced in 2.2.3 allows you to log in as any valid MySQL + user with the help of... cookies. Log name and password are stored in cookies during the session and password is + deleted when it ends. + + 'http' authentication (was called 'advanced' in older versions) ($auth_type = 'http') as introduced in 1.3.0 allows you + to log in as any valid MySQL user via HTTP-Auth. + + Please see the install section on "Using authentication modes" for more information. + $cfg['Servers'][$i]['user'] string $cfg['Servers'][$i]['password'] string - The user/password-pair which phpMyAdmin will use to connect to - this MySQL-server. This user/password pair is not needed when - http or cookie authentication is used, and should be empty. - + The user/password-pair which phpMyAdmin will use to connect to this MySQL-server. This user/password pair is not needed + when http or cookie authentication is used, and should be empty. + $cfg['Servers'][$i]['only_db'] string or array - If set to a(an array of) database name(s), only this(these) - database(s) will be shown to the user. Since phpMyAdmin 2.2.1, - this/these database(s) name(s) may contain MySQL wilcards - characters ("_" and "%"): if you want to use literal instances - of these characters, escape them (ie use 'my\_db' and not - 'my_db'). - This setting is an efficient way to lower the server charge - since the latter does not need to send MySQL requests to build - the available database list. But it does not replace the - privileges rules of the MySQL database server. If set, it just - means only these databases will be displayed but not at all - other databases can't be used. - + If set to a(an array of) database name(s), only this(these) database(s) will be shown to the user. Since phpMyAdmin + 2.2.1, this/these database(s) name(s) may contain MySQL wilcards characters ("_" and "%"): if you want to use literal + instances of these characters, escape them (ie use 'my\_db' and not 'my_db'). + This setting is an efficient way to lower the server charge since the latter does not need to send MySQL requests to + build the available database list. But it does not replace the privileges rules of the MySQL database server. If set, it + just means only these databases will be displayed but not at all other databases can't be used. + $cfg['Servers'][$i]['verbose'] string - Only useful when using phpMyAdmin with multiple server entries. - If set, this string will be displayed instead of the hostname - in the pulldown menu on the main page. This can be useful if - you want to show only certain databases on your system, for - example. - + Only useful when using phpMyAdmin with multiple server entries. If set, this string will be displayed instead of the + hostname in the pulldown menu on the main page. This can be useful if you want to show only certain databases on your + system, for example. + $cfg['Servers'][$i]['bookmarkdb'] string $cfg['Servers'][$i]['bookmarktable'] string - Since release 2.2.0 phpMyAdmin allows to bookmark queries. This - can be useful for queries you often run. + Since release 2.2.0 phpMyAdmin allows to bookmark queries. This can be useful for queries you often run. To use this functionality you have to: - + + create a table following this scheme: CREATE TABLE bookmark ( id int(11) DEFAULT '0' NOT NULL auto_increment, @@ -310,637 +228,537 @@ ORT : '') query text NOT NULL, PRIMARY KEY (id) ); - + then complete the two variables - $cfg['Servers'][$i]['bookmarkdb'] and - $cfg['Servers'][$i]['bookmarktable'] with the database and - table names you've choosen so phpMyAdmin will be able to find - the bookmarks. - - Note that controluser must have SELECT, INSERT and DELETE - privileges on the bookmark table. Here is a query to set up + + then complete the two variables $cfg['Servers'][$i]['bookmarkdb'] and $cfg['Servers'][$i]['bookmarktable'] with the + database and table names you've choosen so phpMyAdmin will be able to find the bookmarks. + + Note that controluser must have SELECT, INSERT and DELETE privileges on the bookmark table. Here is a query to set up those privileges (using "pma" as the controluser: - GRANT SELECT,INSERT,DELETE ON . to - 'pma'@localhost; - + GRANT SELECT,INSERT,DELETE ON . to 'pma'@localhost; + $cfg['Servers'][$i]['relation'] string - Since release 2.2.4 you can describe, in a special 'relation' - table, which field is a key in another table (a foreign key). - phpMyAdmin currently uses this to - - + make clickable, when you browse the master table, the data - values that point to the foreign table; - + display links on the table properties page, to check - referential integrity (display missing foreign keys) for each + Since release 2.2.4 you can describe, in a special 'relation' table, which field is a key in another table (a foreign + key). phpMyAdmin currently uses this to + + + make clickable, when you browse the master table, the data values that point to the foreign table; + + display in an optional tooltip the "display field" when browsing the master table, if you move the mouse to a column + containing a foreign key; + + display links on the table properties page, to check referential integrity (display missing foreign keys) for each described key; - + in query-by-example, create automatic joints (see an example - in the FAQ, section "Using phpMyAdmin"). - + + in query-by-example, create automatic joints (see an example in the FAQ, section "Using phpMyAdmin"); + + enable you to get a PDF schema of your database. + The keys can be numeric or character. To use this functionality you have to: - - + create in the same database a table (for example 'relation') - following this scheme: + + + create in the same database a table (for example 'relation') following this scheme: CREATE TABLE `relation` ( `master_table` varchar(32) NOT NULL default '', `master_field` varchar(32) NOT NULL default '', `foreign_table` varchar(32) NOT NULL default '', `foreign_field` varchar(32) NOT NULL default '', - PRIMARY KEY (`master_table`,`master_field`) - ) TYPE=MyISAM COMMENT='Table Relation'; - + put the relation table name in - $cfg['Servers'][$i]['relation'] - + then manually fill the relation table with information about - the keys. - - If you created a relation table before release 2.3.0, you can - upgrade it with those commands, assuming your table name is + `foreign_display_field` varchar(32) NOT NULL default '', + `pdf_page_number` int(11) NOT NULL default '0', + PRIMARY KEY (`master_table`,`master_field`), + KEY pdf_page_number (`pdf_page_number`) + ) TYPE=MyISAM COMMENT='Relation table'; + + put the relation table name in $cfg['Servers'][$i]['relation'] + + then manually fill the relation table with information about the keys. + + If you created a relation table before release 2.3.0, you can upgrade it with those commands, assuming your table name is "relation": - ALTER TABLE relation CHANGE src_table master_table - VARCHAR(32) NOT NULL - ALTER TABLE relation CHANGE src_column master_field - VARCHAR(32) NOT NULL - ALTER TABLE relation CHANGE dest_table foreign_table - VARCHAR(32) NOT NULL - ALTER TABLE relation CHANGE dest_column foreign_field - VARCHAR(32) NOT NULL - + ALTER TABLE relation CHANGE src_table master_table VARCHAR(32) NOT NULL + ALTER TABLE relation CHANGE src_column master_field VARCHAR(32) NOT NULL + ALTER TABLE relation CHANGE dest_table foreign_table VARCHAR(32) NOT NULL + ALTER TABLE relation CHANGE dest_column foreign_field VARCHAR(32) NOT NULL + ALTER TABLE `relation` ADD `foreign_display_field` VARCHAR(32) NOT NULL; + ALTER TABLE `relation` ADD `pdf_page_number` int(11) NOT NULL; + ALTER TABLE `relation` ADD INDEX(`pdf_page_number`); + + $cfg['Servers'][$i]['pdf_table_position'] string + Since release 2.3.0 you can describe, in a special 'pdf_table_position' table, the coordinates where each table will be + placed on a PDF schema output. This configuration variable will hold the name of this special table. + This feature is supported under PHP4, and you must be using also the 'relation' feature. + To use this functionality you have to: + + + create in the same database a table (for example 'pdf_table_position') following this scheme: + CREATE TABLE `pdf_table_position` ( + `table_name` varchar(50) NOT NULL default '', + `x` float unsigned NOT NULL default '0', + `y` float unsigned NOT NULL default '0', + PRIMARY KEY (`table_name`) + ) TYPE=MyISAM COMMENT='Table positions for PDF schema'; + + put the table name in $cfg['Servers'][$i]['pdf_table_position'] + + then manually fill this table with information about the table positions on the PDF schema. + + See also this usage tip. + + $cfg['Servers'][$i]['AllowDeny']['order'] string + If your rule order is empty, then IP authentication is disabled. + If your rule order is set to 'deny,allow'. Then the system applies all deny rules followed by allow rules. Access is + allowed by default. Any client which does not match a Deny command or does match an Allow command will be allowed access + to the server. + If your rule order is set to 'allow,deny'. Then the system applies all allow rules followed by deny rules. Access is + denied by default. Any client which does not match an Allow directive or does match a Deny directive will be denied + access to the server. + If your rule order is set to 'explicit', the authentication is performed in a similar fashion to rule order 'deny,allow', + with the added restriction that your host/username combination must be listed in the allow rules, and not listed in the + deny rules. This is the most secure means of using Allow/Deny rules, and was available in Apache by specifying allow and + deny rules without setting any order. + + $cfg['Servers'][$i]['AllowDeny']['rules'] array of strings + The general format for the rules is as such: + <'allow' | 'deny'> [from] + If you wish to match all users, it is possible to use a '%' as a wildcard in the username field. + There are a few shortcuts you can use in the ipmask field as well: + 'all' -> 0.0.0.0/0 + 'localhost' -> 127.0.0.1/8 + Having an empty rule list is equivilent to either using 'allow % from all' if your rule order is set to 'deny,allow' or + 'deny % from all' if your rule order is set to 'allow,deny' or 'explicit'. + For the IP matching system, the following work: + xxx.xxx.xxx.xxx (an exact IP address) + xxx.xxx.xxx.[yyy-zzz] (an IP address range) + xxx.xxx.xxx.xxx/nn (CIDR, Classless Inter-Domain Routing type IP addresses) + But the following does not work: + xxx.xxx.xxx.xx[yyy-zzz] (partial IP address range) + $cfg['ServerDefault'] integer - If you have more than one server configured, you can set - $cfg['ServerDefault'] to any one of them to autoconnect to that - server when phpMyAdmin is started, or set it to 0 to be given a - list of servers without logging in. - If you have only one server configured, $cfg['ServerDefault'] - MUST be set to that server. - + If you have more than one server configured, you can set $cfg['ServerDefault'] to any one of them to autoconnect to that + server when phpMyAdmin is started, or set it to 0 to be given a list of servers without logging in. + If you have only one server configured, $cfg['ServerDefault'] MUST be set to that server. + $cfg['OBGzip'] boolean - Defines whether to use gzip output buffering for increased - speed in HTTP transfers. - + Defines whether to use gzip output buffering for increased speed in HTTP transfers. + $cfg['PersistentConnections'] boolean - Whether persistent connections should be used or not - (mysql_connect or mysql_pconnect). - + Whether persistent connections should be used or not (mysql_connect or mysql_pconnect). + $cfg['ExecTimeLimit'] integer [number of seconds] - Set the number of seconds a script is allowed to run. If - seconds is set to zero, no time limit is imposed. - This setting is used while importing/exporting dump files but - has no effect when PHP is running in safe mode. - + Set the number of seconds a script is allowed to run. If seconds is set to zero, no time limit is imposed. + This setting is used while importing/exporting dump files but has no effect when PHP is running in safe mode. + $cfg['SkipLockedTables'] boolean - Mark used tables and make it possible to show databases with - locked tables (since 3.23.30). - + Mark used tables and make it possible to show databases with locked tables (since 3.23.30). + $cfg['ShowSQL'] boolean - Defines whether sql-queries generated by phpMyAdmin should be - displayed or not. - + Defines whether sql-queries generated by phpMyAdmin should be displayed or not. + $cfg['AllowUserDropDatabase'] boolean - Defines whether normal users (non-administrator) are allowed to - delete their own database or not. If set as FALSE, the link - "Drop Database" will not be shown, and even a "DROP DATABASE - mydatabase" will be rejected. Quite practical for ISP's with - many customers. - + Defines whether normal users (non-administrator) are allowed to delete their own database or not. If set as FALSE, the + link "Drop Database" will not be shown, and even a "DROP DATABASE mydatabase" will be rejected. Quite practical for ISP's + with many customers. + $cfg['Confirm'] boolean - Whether a warning ("Are your really sure..") should be - displayed when you're about to loose data. - + Whether a warning ("Are your really sure..") should be displayed when you're about to loose data. + $cfg['ShowTooltip'] boolean - Defines whether to display table comment as tooltip in left - frame or not. - + Defines whether to display table comment as tooltip in left frame or not. + $cfg['LeftFrameLight'] boolean - Defines whether to use select-based menu and display only the - current tables in the left frame (smaller page). - + Defines whether to use select-based menu and display only the current tables in the left frame (smaller page). + $cfg['ShowMysqlInfo'] boolean $cfg['ShowMysqlVars'] boolean $cfg['ShowPhpInfo'] boolean $cfg['ShowChgPassword'] boolean - Defines whether to display the "MySQL runtime information", - "MySQL system variables", "PHP information" and "Change - password " links or not for simple users at the starting main - (right) frame. This setting does not check MySQL commands + Defines whether to display the "MySQL runtime information", "MySQL system variables", "PHP information" and "Change + password " links or not for simple users at the starting main (right) frame. This setting does not check MySQL commands entered directly. - Please note that to block the usage of phpinfo() in scripts, - you have to put this in your php.ini: + Please note that to block the usage of phpinfo() in scripts, you have to put this in your php.ini: disable_functions = phpinfo() - Also note that enabling the "Change password " link has no - effect with "config" authentication mode: because of the hard - coded password value in the configuration file, end users can't - be allowed to change their passwords. - + Also note that enabling the "Change password " link has no effect with "config" authentication mode: because of the hard + coded password value in the configuration file, end users can't be allowed to change their passwords. + $cfg['LoginCookieRecall'] boolean - Define whether the previous login should be recalled or not in - cookie authentication mode. - + Define whether the previous login should be recalled or not in cookie authentication mode. + $cfg['ShowStats'] boolean - Defines whether to display space usage and statistics about - databases and tables or not. - Note that statistics requires at least MySQL 3.23.3 and that, - at this date, MySQL doesn't return such information for + Defines whether to display space usage and statistics about databases and tables or not. + Note that statistics requires at least MySQL 3.23.3 and that, at this date, MySQL doesn't return such information for Berkeley DB tables. - + $cfg['ShowBlob'] boolean - Defines whether BLOB fields are shown when browsing a table's - content or not. - + Defines whether BLOB fields are shown when browsing a table's content or not. + $cfg['NavigationBarIconic'] boolean - Defines whether navigation bar buttons contain text or symbols - only. - + Defines whether navigation bar buttons contain text or symbols only. + $cfg['ShowAll'] boolean - Defines whether an user should be displayed a "show all - (records)" button in browse mode or not. - + Defines whether an user should be displayed a "show all (records)" button in browse mode or not. + $cfg['MaxRows'] integer - Number of rows displayed when browsing a resultset. If the - resultset contains more rows, Previous/Next links will be + Number of rows displayed when browsing a resultset. If the resultset contains more rows, Previous/Next links will be shown. - + $cfg['Order'] string [DESC|ASC|SMART] - Defines whether fields are displayed in ascending (ASC) order, - in descending (DESC) order or in a "smart" (SMART) order -ie - descending order for fields of type TIME, DATE, DATETIME & - TIMESTAMP, ascending order else- by default. - + Defines whether fields are displayed in ascending (ASC) order, in descending (DESC) order or in a "smart" (SMART) order + -ie descending order for fields of type TIME, DATE, DATETIME & TIMESTAMP, ascending order else- by default. + $cfg['ProtectBinary'] boolean or string - Defines whether BLOB or BINARY fields are protected from - edition when browsing a table's content or not. Valid values + Defines whether BLOB or BINARY fields are protected from edition when browsing a table's content or not. Valid values are: - FALSE to allow edition of all fields; - blob to allow edition of all fields except BLOBS; - all to disallow edition of all BINARY or BLOB fields. - + $cfg['ShowFunctionFields'] boolean - Defines whether MySQL functions fields should be displayed or - not in edit/insert mode. - + Defines whether MySQL functions fields should be displayed or not in edit/insert mode. + $cfg['ZipDump'] boolean $cfg['GZipDump'] boolean $cfg['BZipDump'] boolean - Defines whether to allow the use of zip/gzip/bzip compression - when creating a dump file or not. - + Defines whether to allow the use of zip/gzip/bzip compression when creating a dump file or not. + $cfg['ManualBaseShort'] string - If set to an URL which points to the MySQL documentation (on - short pages), appropriate help links are generated. - + If set to an URL which points to the MySQL documentation (on short pages), appropriate help links are generated. + $cfg['DefaultLang'] string - Defines the default language to use, if not browser-defined or - user-defined. - See the select_lang.inc.php3 script to know the valid values - for this setting. - + Defines the default language to use, if not browser-defined or user-defined. + See the select_lang.inc.php3 script to know the valid values for this setting. + $cfg['Lang'] string - Force: always use this language (must be defined in the - select_lang.inc.php3 script). - + Force: always use this language (must be defined in the select_lang.inc.php3 script). + $cfg['LeftWidth'] integer Left frame width in pixel. - + $cfg['LeftBgColor'] string [HTML color] $cfg['RightBgColor'] string [HTML color] The background colors (HTML) used for both the frames. - + $cfg['LeftPointerColor'] string [HTML color] - The color (HTML) used for the pointer in the left frame (does - not work with NS4). - + The color (HTML) used for the pointer in the left frame (does not work with NS4). + $cfg['Border'] integer The size of a table's border. - + $cfg['ThBgcolor'] string [HTML color] The color (HTML) used for table headers. - + $cfg['BgcolorOne'] string [HTML color] The color (HTML) #1 for table rows. - + $cfg['BgcolorTwo'] string [HTML color] The color (HTML) #2 for table rows. - + $cfg['BrowsePointerColor'] string [HTML color] $cfg['BrowseMarkerColor'] string [HTML color] - The colors (HTML) uses for the pointer and the marker in browse - mode (does not work with NS4). - The former feature highlights the row over which your mouse is - passing and the latter lets you visually mark/unmark rows by - clicking on them. - You can disable both of these features by emptying the - respective directive. - + The colors (HTML) uses for the pointer and the marker in browse mode (does not work with NS4). + The former feature highlights the row over which your mouse is passing and the latter lets you visually mark/unmark rows + by clicking on them. + You can disable both of these features by emptying the respective directive. + $cfg['TextareaCols'] integer $cfg['TextareaRows'] integer Number of columns and rows for the textareas. This value will be emphasized (*2) for sql query textareas. - + $cfg['LimitChars'] integer - Maximal number of Chars showed in a TEXT OR a BLOB field on - browse view. Can be turned off by a toggle button on the browse - page. - + Maximal number of Chars showed in a TEXT OR a BLOB field on browse view. Can be turned off by a toggle button on the + browse page. + $cfg['ModifyDeleteAtLeft'] boolean $cfg['ModifyDeleteAtRight'] boolean - Defines the place where modify and delete links would be put - when tables contents are displayed (you may have them displayed - both at the left and at the right). "Left" and "right" are - parsed as "top" and "bottom" with vertical display mode. - + Defines the place where modify and delete links would be put when tables contents are displayed (you may have them + displayed both at the left and at the right). "Left" and "right" are parsed as "top" and "bottom" with vertical display + mode. + $cfg['DefaultDisplay'] string - There are 2 display modes: horizontal and vertical. Define - which one is displayed by default. - + There are 2 display modes: horizontal and vertical. Define which one is displayed by default. + $cfg['RepeatCells'] integer Repeat the headers every X cells, or 0 to deactivate. - + $cfg['ColumnTypes'] array - All possible types of a MySQL column. In most cases you don't - need to edit this. - + All possible types of a MySQL column. In most cases you don't need to edit this. + $cfg['AttributeTypes'] array - Possible attributes for fields. In most cases you don't need to - edit this. - + Possible attributes for fields. In most cases you don't need to edit this. + $cfg['Functions'] array - A list of functions MySQL supports. In most cases you don't - need to edit this. - ______________________________________________________________________ - - [40]Top - [41]Requirements - [42]Introduction - [43]Installation - - [44]Configuration - [45]FAQ - [46]Developers - [47]Credits - ______________________________________________________________________ - + A list of functions MySQL supports. In most cases you don't need to edit this. + ________________________________________________________________________________________________________________________________ + + Top - Requirements - Introduction - Installation - Configuration - FAQ - Developers - Credits + ________________________________________________________________________________________________________________________________ + FAQ - Frequently Asked Questions - [48]Server - [49]Configuration - [50]Limitations - - [51]Multi-user - [52]Browsers - [53]Usage tips - [54]Project - + Server - Configuration - Limitations - Multi-user - Browsers - Usage tips - Project + [Server] - - I'm running php 4+ and my server is crashing each time a specific - action is required or phpMyAdmin sends a blank page or a page full of - cryptic characters to my browser, what can I do? + + I'm running php 4+ and my server is crashing each time a specific action is required or phpMyAdmin sends a blank page or a page + full of cryptic characters to my browser, what can I do? There are some known php bugs with output buffering and compression. - Try to set the $cfg['OBGzip'] directive to FALSE in your - config.inc.php or .php3 file and the zlib.output_compression directive + Try to set the $cfg['OBGzip'] directive to FALSE in your config.inc.php or .php3 file and the zlib.output_compression directive to Off in your php configuration file. - Furthermore, we know about such problems connected to the release - candidates of php 4.2.0 (tested with php 4.2.0 RC1 to RC4) together - with MS Internet Explorer. Please upgrade to the release version php - 4.2.0. - + Furthermore, we know about such problems connected to the release candidates of php 4.2.0 (tested with php 4.2.0 RC1 to RC4) + together with MS Internet Explorer. Please upgrade to the release version php 4.2.0. + My Apache server crashes when using phpMyAdmin. - You should first try the latest versions of Apache (and possibly - MySQL). + You should first try the latest versions of Apache (and possibly MySQL). See also the other FAQ entry about php bugs with output buffering. - If your server keeps crashing, please ask for help in the various - Apache support groups. - - Using phpMyAdmin on IIS, I'm displayed the error message: "The - specified CGI application misbehaved by not returning a complete set - of HTTP headers...." - You just forgot to read the install.txt file from the php - distribution. Have a look at the last message in this [55]bug report - from the official php bug database. - - Using phpMyAdmin on IIS, I'm facing crashes and/or many error messages - with the http or advanced authentication mode. - This is a known problem with the php ISAPI filter: it's not so stable. - For some more information and complete testings see the messages - posted by André B. aka "djdeluxe76" in [56]this thread from the - phpWizard forum. + If your server keeps crashing, please ask for help in the various Apache support groups. + + Using phpMyAdmin on IIS, I'm displayed the error message: "The specified CGI application misbehaved by not returning a complete + set of HTTP headers...." + You just forgot to read the install.txt file from the php distribution. Have a look at the last message in this bug report from + the official php bug database. + + Using phpMyAdmin on IIS, I'm facing crashes and/or many error messages with the http or advanced authentication mode. + This is a known problem with the php ISAPI filter: it's not so stable. For some more information and complete testings see the + messages posted by André B. aka "djdeluxe76" in this thread from the phpWizard forum. Please use instead the cookie authentication mode. - + I can't use phpMyAdmin on PWS: nothing is displayed! - This seems to be a PWS bug. Filippo Simoncini found a workaroud (at - this time there is no better fix): remove or comment the DOCTYPE - declarations (3 lines) from the scripts header.inc.php3, index.php3, - left.php3 and libraries/common.lib.php3. - + This seems to be a PWS bug. Filippo Simoncini found a workaroud (at this time there is no better fix): remove or comment the + DOCTYPE declarations (3 lines) from the scripts header.inc.php3, index.php3, left.php3 and libraries/common.lib.php3. + How can I GZip or Bzip a dump or a CSV export. It seems to not work? - These features are based on the gzencode() and bzcompress() php - functions to be more independent of the platform (Unix/Windows, Safe - Mode or not, and so on). So, you must have PHP4 >= 4.0.4 and - Zlib/Bzip2 support (--with-zlib and --with-bz2). - We faced php crashes when trying to download a dump with MS Internet - Explorer when phpMyAdmin is run with a release candidate of php 4.2.0. - In this case you should switch to the release version of php 4.2.0. - - I cannot insert a text file in a table, and I get an error about safe - mode being in effect. - Your uploaded file is saved by PHP in the "upload dir", as defined in - php.ini by the variable upload_tmp_dir (usually the system default is - /tmp). - We recommend the following setup for Apache servers running in safe - mode, to enable uploads of files while being reasonably secure: + These features are based on the gzencode() and bzcompress() php functions to be more independent of the platform (Unix/Windows, + Safe Mode or not, and so on). So, you must have PHP4 >= 4.0.4 and Zlib/Bzip2 support (--with-zlib and --with-bz2). + We faced php crashes when trying to download a dump with MS Internet Explorer when phpMyAdmin is run with a release candidate of + php 4.2.0. In this case you should switch to the release version of php 4.2.0. + + I cannot insert a text file in a table, and I get an error about safe mode being in effect. + Your uploaded file is saved by PHP in the "upload dir", as defined in php.ini by the variable upload_tmp_dir (usually the system + default is /tmp). + We recommend the following setup for Apache servers running in safe mode, to enable uploads of files while being reasonably + secure: * create a separate directory for uploads: mkdir /tmp/php - * give ownership to the Apache server's user.group: chown - apache.apache /tmp/php + * give ownership to the Apache server's user.group: chown apache.apache /tmp/php * give proper permission: chmod 600 /tmp/php * put upload_tmp_dir = /tmp/php in php.ini * restart Apache - - I'm having troubles when uploading files. In general file uploads - don't work on my system and uploaded files have a Content-Type: header - in the first line. - It's not really phpMyAdmin related but RedHat 7.0. You have a RedHat - 7.0 and you updated your php rpm to php-4.0.4pl1-3.i386.rpm, didn't - you? - So the problem is that this package has a serious bug that was - corrected ages ago in php (2001-01-28: see [57]php's bug tracking - system for more details). The problem is that the bugged package is - still available though it was corrected (see [58]redhat's bugzilla for - more details). - So please download [59]the fixed package (4.0.4pl1-9) and the problem - should go away. + + I'm having troubles when uploading files. In general file uploads don't work on my system and uploaded files have a + Content-Type: header in the first line. + It's not really phpMyAdmin related but RedHat 7.0. You have a RedHat 7.0 and you updated your php rpm to + php-4.0.4pl1-3.i386.rpm, didn't you? + So the problem is that this package has a serious bug that was corrected ages ago in php (2001-01-28: see php's bug tracking + system for more details). The problem is that the bugged package is still available though it was corrected (see redhat's + bugzilla for more details). + So please download the fixed package (4.0.4pl1-9) and the problem should go away. And that fixes the \r\n problem with file uploads! - - I'm having troubles when uploading files with phpMyAdmin running on a - secure server. My browser is Internet Explorer and I'm using the - Apache server. - As suggested by "Rob M" in the phpWizard forum, add this line to your - httpd.conf: + + I'm having troubles when uploading files with phpMyAdmin running on a secure server. My browser is Internet Explorer and I'm + using the Apache server. + As suggested by "Rob M" in the phpWizard forum, add this line to your httpd.conf: SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown It seems to clear up many problems between IE and SSL. - - I get an 'open_basedir restriction' while uploading a file from the - query box. - Since version 2.2.4, phpMyAdmin supports servers with open_basedir - restrictions. Assuming that the restriction allows you to open files - in the current directory ('.'), all you have to do is create a 'tmp' - directory under the phpMyAdmin install directory, with permissions 777 - and the same owner as the owner of your phpMyAdmin directory. The - uploaded files will be moved there, and after execution of your SQL - commands, removed. - + + I get an 'open_basedir restriction' while uploading a file from the query box. + Since version 2.2.4, phpMyAdmin supports servers with open_basedir restrictions. Assuming that the restriction allows you to + open files in the current directory ('.'), all you have to do is create a 'tmp' directory under the phpMyAdmin install + directory, with permissions 777 and the same owner as the owner of your phpMyAdmin directory. The uploaded files will be moved + there, and after execution of your SQL commands, removed. + I have lost my MySQL root password, what can I do? - The MySql manual explains how to [60]reset the permissions. - + The MySql manual explains how to reset the permissions. + I get an error 'No SQL query' when trying to execute a bookmark. - If PHP does not have read/write access to its upload_tmp_dir, it - cannot access the uploaded query. - - I get an error 'No SQL query' when trying to submit a query from the - convenient text area. - Check the post_max_size directive from your php configuration file and - try to increase it. - + If PHP does not have read/write access to its upload_tmp_dir, it cannot access the uploaded query. + + I get an error 'No SQL query' when trying to submit a query from the convenient text area. + Check the post_max_size directive from your php configuration file and try to increase it. + I have problems with mysql.user field names. - In older MySQL versions, the User and Password fields were named user - and password. Please modify your field names to align with current - standards. - + In older MySQL versions, the User and Password fields were named user and password. Please modify your field names to align with + current standards. + I cannot upload big dump files. - The first things to check (or ask your host provider to check) are the - values of upload_max_filesize, memory_limit and post_max_size in the - php.ini configuration file. - All of these three settings limit the maximum size of data that can be - submitted and handled by php. - + The first things to check (or ask your host provider to check) are the values of upload_max_filesize, memory_limit and + post_max_size in the php.ini configuration file. + All of these three settings limit the maximum size of data that can be submitted and handled by php. + Does phpMyAdmin support MySQL 4? MySQL 4 is not yet fully supported by phpMyAdmin. - Because of MySQL 4's backwards compatibility you can use phpMyAdmin - for administering MySQL 4 servers, but phpMyAdmin does not yet support - its new features. Please notice that in this case it is recommended to - use php >= 4.1 since older versions of php are not compatible to - MySQL 4. - Furthermore, several users reported problems with phpMyAdmin related - to bugs in MySQL 4. MySQL 4 is still an alpha release and should be - used for test purposes only! - - I'm running MySQL 4.0.1 on a Windows NT machine. Each time I create a - table the table name is changed to lowercase. - This seems to be a bug of MySQL 4.0.1 because it also appears when - using the MySQL commandline. Currently we only know about its - appearance on Windows NT systems, but it is possible that it appears - on other systems, too. - If you encounter this bug together with another OS and/or MySQL - version or you know how to work around it, please post a message into - [61]our bug tracker at SourceForge. - + Because of MySQL 4's backwards compatibility you can use phpMyAdmin for administering MySQL 4 servers, but phpMyAdmin does not + yet support its new features. Please notice that in this case it is recommended to use php >= 4.1 since older versions of php + are not compatible to MySQL 4. + Furthermore, several users reported problems with phpMyAdmin related to bugs in MySQL 4. MySQL 4 is still an alpha release and + should be used for test purposes only! + + I'm running MySQL 4.0.1 on a Windows NT machine. Each time I create a table the table name is changed to lowercase. + This seems to be a bug of MySQL 4.0.1 because it also appears when using the MySQL commandline. Currently we only know about its + appearance on Windows NT systems, but it is possible that it appears on other systems, too. + If you encounter this bug together with another OS and/or MySQL version or you know how to work around it, please post a message + into our bug tracker at SourceForge. + [Configuration] - - The error message "Warning: Cannot add header information - headers - already sent by ..." is displayed, what's the problem? - Edit your config.inc.php or .php3 file and ensure there is nothing (ie - no blank lines, no spaces, no characters...) neither before the tag at the end. - + + The error message "Warning: Cannot add header information - headers already sent by ..." is displayed, what's the problem? + Edit your config.inc.php or .php3 file and ensure there is nothing (ie no blank lines, no spaces, no characters...) neither + before the tag at the end. + phpMyAdmin can't connect to MySQL. What's wrong? - Either there is an error with your PHP setup or your username/password - is wrong. Try to make a small script which uses mysql_connect and see - if it works. If it doesn't, it may be you haven't even compiled MySQL - support into PHP. - - The error message "Warning: MySQL Connection Failed: Can't connect to - local MySQL server through socket '/tmp/mysql.sock' (111)...") is - displayed. What can I do? + Either there is an error with your PHP setup or your username/password is wrong. Try to make a small script which uses + mysql_connect and see if it works. If it doesn't, it may be you haven't even compiled MySQL support into PHP. + + The error message "Warning: MySQL Connection Failed: Can't connect to local MySQL server through socket '/tmp/mysql.sock' + (111)...") is displayed. What can I do? For RedHat users, Harald Legner suggests this on the mailing list: - On my RedHat-Box the socket of mysql is /var/lib/mysql/mysql.sock. In - your php.ini you will find a line + On my RedHat-Box the socket of mysql is /var/lib/mysql/mysql.sock. In your php.ini you will find a line mysql.default_socket = /tmp/mysql.sock change it to mysql.default_socket = /var/lib/mysql/mysql.sock Then restart apache and it will work. - Here is a fix suggested by Brad Ummer in the [62]phpwizard forum: + Here is a fix suggested by Brad Ummer in the phpwizard forum: * First, you need to determine what socket is being used by MySQL. - To do this, telnet to your server and go to the MySQL bin - directory. In this directory there should be a file named - mysqladmin. Type ./mysqladmin variables, and this should give you - a bunch of info about your MySQL server, including the socket - (/tmp/mysql.sock, for example). + To do this, telnet to your server and go to the MySQL bin directory. In this directory there should be a file named + mysqladmin. Type ./mysqladmin variables, and this should give you a bunch of info about your MySQL server, including the + socket (/tmp/mysql.sock, for example). * Then, you need to tell PHP to use this socket. - Assuming you are using PHP 3.0.10 or better, you can specify the - socket to use when you open the connection. To do this in - phpMyAdmin, you need to complete the socket information in the - config.inc.php3. + Assuming you are using PHP 3.0.10 or better, you can specify the socket to use when you open the connection. To do this in + phpMyAdmin, you need to complete the socket information in the config.inc.php3. For example: $cfg['Servers'][$i]['socket'] = '/tmp/mysql.sock'; - - Have also a look at the [63]corresponding section of the MySQL - documentation. - - Nothing is displayed by my browser when I try to run phpMyAdmin, what - can I do? - Try to set the $cfg['OBGZip'] directive to FALSE in the phpMyAdmin - configuration file. It helps sometime. - Also have a look at your php version number: if it contains "4.0b..." - it means you're running a beta version of PHP. That's not a so good - idea, please upgrade to a plain revision. - - Each time I want to insert or change a record or drop a database or a - table, an error 404 (page not found) is displayed or, with http or - cookie authentication, I'm asked to login again. What's wrong? - Check the value you set for the $cfg['PmaAbsoluteUri'] directive in - the phpMyAdmin configuration file. - + + Have also a look at the corresponding section of the MySQL documentation. + + Nothing is displayed by my browser when I try to run phpMyAdmin, what can I do? + Try to set the $cfg['OBGZip'] directive to FALSE in the phpMyAdmin configuration file. It helps sometime. + Also have a look at your php version number: if it contains "4.0b..." it means you're running a beta version of PHP. That's not + a so good idea, please upgrade to a plain revision. + + Each time I want to insert or change a record or drop a database or a table, an error 404 (page not found) is displayed or, with + http or cookie authentication, I'm asked to login again. What's wrong? + Check the value you set for the $cfg['PmaAbsoluteUri'] directive in the phpMyAdmin configuration file. + [Known limitations] - - When using http authentication, an user who logged out can not relog - in with the same nick. - This is related to the authentication mechanism (protocol) used by - phpMyAdmin. We plan to change it as soon as we may find enough free - time to do it, but you can bypass this problem: just close all the - opened browser windows and then go back to phpMyAdmin. You should be - able to logs in again. - - When dumping a large table in compressed mode, I get a memory limit - error or a time limit error. - As of version 2.2.4, we build the compressed dump in memory, so large - tables dumps may hang. The only alternative we can think about (using - system calls to mysqldump then gzip or bzip2) would not be applicable - in environments where PHP is in safe mode: access to system programs - is is limited by the system administrator, and time limit is enforced. - + + When using http authentication, an user who logged out can not relog in with the same nick. + This is related to the authentication mechanism (protocol) used by phpMyAdmin. We plan to change it as soon as we may find + enough free time to do it, but you can bypass this problem: just close all the opened browser windows and then go back to + phpMyAdmin. You should be able to logs in again. + + When dumping a large table in compressed mode, I get a memory limit error or a time limit error. + As of version 2.2.4, we build the compressed dump in memory, so large tables dumps may hang. The only alternative we can think + about (using system calls to mysqldump then gzip or bzip2) would not be applicable in environments where PHP is in safe mode: + access to system programs is is limited by the system administrator, and time limit is enforced. + [ISPs, multi-user installations ] - - I'm an ISP. Can I setup one central copy of phpMyAdmin or do I need to - install it for each customer? - Since version 2.0.3, you can setup a central copy of phpMyAdmin for - all your users. The development of this feature was kindly sponsored - by NetCologne GmbH. This requires a properly setup MySQL user - management and phpMyAdmin http authentication. See the install section - on "Using http authentication". - - What's the preferred way of making phpMyAdmin secure against evil - access? + + I'm an ISP. Can I setup one central copy of phpMyAdmin or do I need to install it for each customer? + Since version 2.0.3, you can setup a central copy of phpMyAdmin for all your users. The development of this feature was kindly + sponsored by NetCologne GmbH. This requires a properly setup MySQL user management and phpMyAdmin http or cookie authentication. + See the install section on "Using http authentication". + + What's the preferred way of making phpMyAdmin secure against evil access? This depends on your system. - If you're running a server which cannot be accessed by other people, - it's sufficient to use the directory protection bundled with your - webserver (with Apache you can use .htaccess files, for example). - If other people have telnet access to your server, you should use - phpMyAdmin's http authentication feature. + If you're running a server which cannot be accessed by other people, it's sufficient to use the directory protection bundled + with your webserver (with Apache you can use .htaccess files, for example). + If other people have telnet access to your server, you should use phpMyAdmin's http authentication feature. Suggestions: * Your config.inc.php3 file should be chmod 660. - * All your phpMyAdmin files should be chown phpmy.apache, where - phpmy is a user whose password is only known to you, and apache is - the group under which Apache runs. - * You should use PHP safe mode, to protect from other users that try - to include your config.inc.php3 in their scripts. - - I get errors about not being able to include a file in /lang or in - /libraries. - Check php.ini, or ask your sysadmin to check it. The include_path must - contain "." somewhere in it, and open_basedir, if used, must contain - "." and "./lang" to allow normal operation of phpMyAdmin. - - phpMyAdmin always gives "Access denied" when using http - authentication. + * All your phpMyAdmin files should be chown phpmy.apache, where phpmy is a user whose password is only known to you, and + apache is the group under which Apache runs. + * You should use PHP safe mode, to protect from other users that try to include your config.inc.php3 in their scripts. + + I get errors about not being able to include a file in /lang or in /libraries. + Check php.ini, or ask your sysadmin to check it. The include_path must contain "." somewhere in it, and open_basedir, if used, + must contain "." and "./lang" to allow normal operation of phpMyAdmin. + + phpMyAdmin always gives "Access denied" when using http authentication. This could happen for several reasons: - * $cfg['Servers'][$i]['controluser'] and/or - $cfg['Servers'][$i]['controlpass'] are wrong. + * $cfg['Servers'][$i]['controluser'] and/or $cfg['Servers'][$i]['controlpass'] are wrong. * The username/password you specify in the login-dialog are invalid. - * You have already setup a security mechanism for the - phpMyAdmin-directory, eg. a .htaccess file. This would interfere - with phpMyAdmin's authentication, so remove it. - + * You have already setup a security mechanism for the phpMyAdmin-directory, eg. a .htaccess file. This would interfere with + phpMyAdmin's authentication, so remove it. + Is it possible to let users create their own databases? - Starting with 2.2.5, in the user management page, you can enter a - wildcard database name for a user, and put the privileges you want. - For example, adding SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, - INDEX, ALTER would let a user create/manage his/her database(s). - + Starting with 2.2.5, in the user management page, you can enter a wildcard database name for a user, and put the privileges you + want. For example, adding SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER would let a user create/manage his/her + database(s). + + How can I use the Host-based authentication additions? + If you have existing rules from an old .htaccess file, you can take them and add a username between the 'deny'/'allow' and + 'from' strings. Using the username wildcard of '%' would be a major benefit here if your installation is suited to using it. + Then you can just add those updated lines into the $cfg['Servers'][$i]['AllowDeny']['rules'] array. + If you want a pre-made sample, you can try this fragment. It stops the 'root' user from logging in from any networks other than + the private network IP blocks. + //block root from logging in except from the private networks + $cfg['Servers'][$i]['AllowDeny']['order'] = 'deny,allow'; + $cfg['Servers'][$i]['AllowDeny']['rules'] = array( + 'deny root from all', + 'allow root from localhost', + 'allow root from 10.0.0.0/8', + 'allow root from 192.168.0.0/16', + 'allow root from 172.16.0.0/12', + ); + [Browsers or client OS] - - I get an out of memory error, and my controls are non-functional, when - trying to create a table with more than 14 fields. - We could reproduce this problem only under Win98/98SE. Testing under - WinNT4 or Win2K, we could easily create more than 60 fields. - A workaround is to create a smaller number of fields, then come back - to your table properties and add the other fields. - + + I get an out of memory error, and my controls are non-functional, when trying to create a table with more than 14 fields. + We could reproduce this problem only under Win98/98SE. Testing under WinNT4 or Win2K, we could easily create more than 60 + fields. + A workaround is to create a smaller number of fields, then come back to your table properties and add the other fields. + With Xitami 2.5b4, phpMyAdmin won't process form fields. - This is not a phpMyAdmin problem but a Xitami known bug: you'll face - it with each script/website that use forms. + This is not a phpMyAdmin problem but a Xitami known bug: you'll face it with each script/website that use forms. Upgrade or downgrade your Xitami server. - + I have problems dumping tables with Konqueror (phpMyAdmin 2.2.2) - With Konqueror 2.1.1: plain dumps, zip and gzip dumps work ok, except - that the proposed file name for the dump is always 'tbl_dump.php'. - Bzip2 dumps don't seem to work. - With Konqueror 2.2.1: plain dumps work; zip dumps are placed into the - user's temporary directory, so they must be moved before closing - Konqueror, or else they disappear. Gzip dumps give an error message. + With Konqueror 2.1.1: plain dumps, zip and gzip dumps work ok, except that the proposed file name for the dump is always + 'tbl_dump.php'. Bzip2 dumps don't seem to work. + With Konqueror 2.2.1: plain dumps work; zip dumps are placed into the user's temporary directory, so they must be moved before + closing Konqueror, or else they disappear. Gzip dumps give an error message. Testing needs to be done for Konqueror 2.2.2. - - I can't use the cookie authentication mode because Internet Explorer - never stores the cookies. - MS Internet Explorer seems to be really buggy about cookies, at least - till version 6. And thanks to Andrew Zivolup we've traced also a php - 4.1.1 bug in this area! - Then, If you're running php 4.1.1, try to upgrade or downgrade... it - may works! - - In Internet Explorer 5.0, I get Javascript errors when browsing my - rows. + + I can't use the cookie authentication mode because Internet Explorer never stores the cookies. + MS Internet Explorer seems to be really buggy about cookies, at least till version 6. And thanks to Andrew Zivolup we've traced + also a php 4.1.1 bug in this area! + Then, If you're running php 4.1.1, try to upgrade or downgrade... it may works! + + In Internet Explorer 5.0, I get Javascript errors when browsing my rows. Upgrade to at least Internet Explorer 5.5SP2. - - In Internet Explorer 5.0, 5.5 or 6.0, I get an error when trying to - modify a row in a table with many fields, or with a text field. - Your table neither have a primary key nor an unique one, so we must - use a long URL to identify this row. There is a limit on the lenght of - the URL in those browsers, and this not happen in Netscape, for - example. The workaround is to create a primary or unique key, or use - another browser. - + + In Internet Explorer 5.0, 5.5 or 6.0, I get an error when trying to modify a row in a table with many fields, or with a text + field. + Your table neither have a primary key nor an unique one, so we must use a long URL to identify this row. There is a limit on the + lenght of the URL in those browsers, and this not happen in Netscape, for example. The workaround is to create a primary or + unique key, or use another browser. + I refresh (reload) my browser, and come back to the welcome page. - Some browsers support right-clicking into the frame you want to - refresh, just do this in the right frame. - - With Mozilla 0.9.7 I have problems sending a query modified in the - query box. - Looks like a Mozilla bug: 0.9.6 was ok. We will keep an eye on future - Mozilla versions. - - With Mozilla 0.9.? to 1.0-RC1 I can't type a whitespace in the - SQL-Query edit area: the page scrolls down. - This is a Mozilla bug (see bug #26882 at [64]Bugzilla). - + Some browsers support right-clicking into the frame you want to refresh, just do this in the right frame. + + With Mozilla 0.9.7 I have problems sending a query modified in the query box. + Looks like a Mozilla bug: 0.9.6 was ok. We will keep an eye on future Mozilla versions. + + With Mozilla 0.9.? to 1.0-RC1 I can't type a whitespace in the SQL-Query edit area: the page scrolls down. + This is a Mozilla bug (see bug #26882 at Bugzilla). + [Using phpMyAdmin] - + I can't insert new rows into a table - MySQL brings up a SQL-error. - Examine the SQL error with care. I've found that many programmers - specifying a wrong field-type. + Examine the SQL error with care. I've found that many programmers specifying a wrong field-type. Common errors include: * Using VARCHAR without a size argument * Using TEXT or BLOB with a size argument - - Also, look at the syntax chapter in the MySQL manual to confirm that - your syntax is correct. - - When I create a table, I click the Index checkbox for 2 fields and - phpMyAdmin generates only one index with those 2 fields. - In phpMyAdmin 2.2.0 and 2.2.1, this is the way to create a - multi-fields index. If you want two indexes, create the first one when - creating the table, save, then display the table properties and click - the Index link to create the other index. - + + Also, look at the syntax chapter in the MySQL manual to confirm that your syntax is correct. + + When I create a table, I click the Index checkbox for 2 fields and phpMyAdmin generates only one index with those 2 fields. + In phpMyAdmin 2.2.0 and 2.2.1, this is the way to create a multi-fields index. If you want two indexes, create the first one + when creating the table, save, then display the table properties and click the Index link to create the other index. + How can I insert a null value into my table? - Since version 2.2.3, you have a checkbox for each field that can be - null. Before 2.2.3, you had to enter "null", without the quotes, as - the field's value. - + Since version 2.2.3, you have a checkbox for each field that can be null. Before 2.2.3, you had to enter "null", without the + quotes, as the field's value. + How can I backup my database or table? - Click on a database or table name in the left frame, the properties - will be displayed. Then go to the Dump section, you can dump the - structure, the data, or both. This will generate standard SQL - statements that can be used to recreate your database/table. - You will need to choose "Save as file", so that phpMyAdmin can - transmit the resulting dump to your station. Depending on your PHP - configuration, you will see options to compress the dump. See also the - $cfg['ExecTimeLimit'] configuration variable. - For additional help on this subject, look for the word "dump" in this - document. - + Click on a database or table name in the left frame, the properties will be displayed. Then go to the Dump section, you can dump + the structure, the data, or both. This will generate standard SQL statements that can be used to recreate your database/table. + You will need to choose "Save as file", so that phpMyAdmin can transmit the resulting dump to your station. Depending on your + PHP configuration, you will see options to compress the dump. See also the $cfg['ExecTimeLimit'] configuration variable. + For additional help on this subject, look for the word "dump" in this document. + How can I restore (upload) my database or table using a dump? - Click on a database name in the left frame, the properties will be - displayed. Then in the "Run SQL query" section, type in your local - dump filename, or use the Browse button. Then click Go. - For additional help on this subject, look for the word "upload" in - this document. - + Click on a database name in the left frame, the properties will be displayed. Then in the "Run SQL query" section, type in your + local dump filename, or use the Browse button. Then click Go. + For additional help on this subject, look for the word "upload" in this document. + How can I use the relation table in Query-by-example? - Here is an example with the tables persons, towns and countries. Start - by creating this: + Here is an example with the tables persons, towns and countries. Start by creating this: CREATE TABLE countries ( country_code char(1) NOT NULL default '', description varchar(10) NOT NULL default '', @@ -961,12 +779,13 @@ FAQ - Frequently Asked Questions master_field varchar(32) NOT NULL default '', foreign_table varchar(32) NOT NULL default '', foreign_field varchar(32) NOT NULL default '', - PRIMARY KEY (master_table,master_field) + foreign_display_field varchar(32) NOT NULL default '', + pdf_page_number int(11) NOT NULL default '0', + PRIMARY KEY (master_table,master_field), + KEY pdf_page_number (`pdf_page_number`) ) TYPE=MyISAM; - INSERT INTO relation VALUES ('persons', 'town_code', 'towns', - 'town_code'); - INSERT INTO relation VALUES ('persons', 'country_code', - 'countries', 'country_code'); + INSERT INTO relation VALUES ('persons', 'town_code', 'towns', 'town_code','description', 1); + INSERT INTO relation VALUES ('persons', 'country_code', 'countries', 'country_code','description', 1); CREATE TABLE towns ( town_code varchar(5) NOT NULL default '0', description varchar(30) NOT NULL default '', @@ -979,113 +798,89 @@ FAQ - Frequently Asked Questions * Choose "Query by example" * Use tables: persons, towns, countries * Click "Update query" - * In the fields row, choose persons.person_name and click the "Show" - tickbox - * Do the same for towns.description and countries.descriptions in - the other 2 columns - * Click "Update query" and you will see in the query box that the - correct joints have been generated + * In the fields row, choose persons.person_name and click the "Show" tickbox + * Do the same for towns.description and countries.descriptions in the other 2 columns + * Click "Update query" and you will see in the query box that the correct joints have been generated * Click "Submit query" - + + How can I produce a PDF schema of my database? + First you have to fill the 'relation' and 'pdf_table_position' configuration variables. + Then, think about your schema layout: which tables will go on which pages. You have to fill in the 'relation' table the page + number for each master-foreign link. + Then manually fill the pdf_table_position table with the coordinates, x being the width and y the height, and (0,0) at the upper + left corner. For example, x=100 and y=200 means that the table will be at 200 mm down and 100 mm right from the upper left + corner. + To produce the output, click on your database name, then choose 'Structure' and 'Display PDF schema', and enter the page number. + [phpMyAdmin project] - + I have found a bug. How do I inform developers? - Our Bug Tracker is located at - [65]http://sourceforge.net/projects/phpmyadmin/ under the Bugs - section. + Our Bug Tracker is located at http://sourceforge.net/projects/phpmyadmin/ under the Bugs section. But please first discuss your bug with other users: - [66]http://sourceforge.net/projects/phpmyadmin/ (and choose Forums) - - I want to translate the messages to a new language or upgrade an - existing language, where do I start? - Always use the current cvs version of your language file. For a new - language, start from english.inc.php3. If you don't know how to get - the cvs version, please ask one of the developers. - You can then put your translations, as a zip file to avoid losing - special characters, on the sourceforge.net translation tracker. - It would be a good idea to subscribe to the phpmyadmin-translators - mailing list, because this is where we ask for translations of new - messages. - - I would like to help out with the development of phpMyAdmin. How - should I proceed? + http://sourceforge.net/projects/phpmyadmin/ (and choose Forums) + + I want to translate the messages to a new language or upgrade an existing language, where do I start? + Always use the current cvs version of your language file. For a new language, start from english.inc.php3. If you don't know how + to get the cvs version, please ask one of the developers. + You can then put your translations, as a zip file to avoid losing special characters, on the sourceforge.net translation + tracker. + It would be a good idea to subscribe to the phpmyadmin-translators mailing list, because this is where we ask for translations + of new messages. + + I would like to help out with the development of phpMyAdmin. How should I proceed? The following method is preferred for new developers: * fetch the current CVS tree over anonymous CVS: - cvs - -d:pserver:anonymous@cvs.phpmyadmin.sourceforge.net:/cvsroot/phpmy - admin login + cvs -d:pserver:anonymous@cvs.phpmyadmin.sourceforge.net:/cvsroot/phpmyadmin login [Password: simply press the Enter key] - cvs -z3 - -d:pserver:anonymous@cvs.phpmyadmin.sourceforge.net:/cvsroot/phpmy - admin checkout phpMyAdmin + cvs -z3 -d:pserver:anonymous@cvs.phpmyadmin.sourceforge.net:/cvsroot/phpmyadmin checkout phpMyAdmin [This will create a new sub-directory named phpMyAdmin] * add your stuff - * put the modified files (tar'ed and gzip'ed) inside the patch - tracker of the [67]phpMyAdmin SourceForge account. - - Write access to the CVS tree is granted only to experienced developers - who have already contributed something useful to phpMyAdmin. - Also, have a look at the [68]Developers section. - ______________________________________________________________________ - - [69]Top - [70]Requirements - [71]Introduction - [72]Installation - - [73]Configuration - [74]FAQ - [75]Developers - [76]Credits - ______________________________________________________________________ - + * put the modified files (tar'ed and gzip'ed) inside the patch tracker of the phpMyAdmin SourceForge account. + + Write access to the CVS tree is granted only to experienced developers who have already contributed something useful to + phpMyAdmin. + Also, have a look at the Developers section. + ________________________________________________________________________________________________________________________________ + + Top - Requirements - Introduction - Installation - Configuration - FAQ - Developers - Credits + ________________________________________________________________________________________________________________________________ + Developers Information - phpMyAdmin is Open Source, so you're invited to contribute to it. Many - great features have been written by other people and you too can help - to make phpMyAdmin a useful tool. - - If you're planning to contribute source, please read the following - information: - * All files include header.inc.php3 (layout), - libraries/common.lib.php3 (common functions) and config.inc.php3. - All configuration data belongs in config.inc.php3. Please keep it - free from other code. - Commonly used functions should be added to - libraries/common.lib.php3 and more specific ones may be added - within a library stored into the libraries sub-directory. - * Obviously, you're free to use whatever coding style you want. But - please try to keep your code as simple as possible: beginners are - using phpMyAdmin as an example application. - As far as possible, we want the scripts to be XHTML1.0 and CSS2 - compliant on one hand, they fit [77]PEAR coding standards on the + phpMyAdmin is Open Source, so you're invited to contribute to it. Many great features have been written by other people and you + too can help to make phpMyAdmin a useful tool. + + If you're planning to contribute source, please read the following information: + * All files include header.inc.php3 (layout), libraries/common.lib.php3 (common functions) and config.inc.php3. + All configuration data belongs in config.inc.php3. Please keep it free from other code. + Commonly used functions should be added to libraries/common.lib.php3 and more specific ones may be added within a library + stored into the libraries sub-directory. + * Obviously, you're free to use whatever coding style you want. But please try to keep your code as simple as possible: + beginners are using phpMyAdmin as an example application. + As far as possible, we want the scripts to be XHTML1.0 and CSS2 compliant on one hand, they fit PEAR coding standards on the other hand. Please pay attention to this. - * Please try to keep up the file-naming conventions. Table-related - stuff goes to tbl_*.php3, db-related code to db_*.php3 and so on. - * Please don't use verbose strings in your code, instead add the - string (at least) to english.inc.php3 and print() it out. - * If you want to be really helpful, write an entry for the - ChangeLog. - - IMPORTANT: With 1.4.1, development has switched to CVS. The following - method is preferred for new developers: + * Please try to keep up the file-naming conventions. Table-related stuff goes to tbl_*.php3, db-related code to db_*.php3 and + so on. + * Please don't use verbose strings in your code, instead add the string (at least) to english.inc.php3 and print() it out. + * If you want to be really helpful, write an entry for the ChangeLog. + + IMPORTANT: With 1.4.1, development has switched to CVS. The following method is preferred for new developers: * fetch the current CVS tree over anonymous CVS: - cvs - -d:pserver:anonymous@cvs.phpmyadmin.sourceforge.net:/cvsroot/phpmy - admin login + cvs -d:pserver:anonymous@cvs.phpmyadmin.sourceforge.net:/cvsroot/phpmyadmin login [Password: simply press the Enter key] - cvs -z3 - -d:pserver:anonymous@cvs.phpmyadmin.sourceforge.net:/cvsroot/phpmy - admin checkout phpMyAdmin + cvs -z3 -d:pserver:anonymous@cvs.phpmyadmin.sourceforge.net:/cvsroot/phpmyadmin checkout phpMyAdmin [This will create a new sub-directory named phpMyAdmin] * add your stuff - * put the modified files (tar'ed and gzip'ed) inside the patch - tracker of the phpMyAdmin SourceForge account - ([78]http://sourceforge.net/projects/phpmyadmin/) - - Write access to the CVS tree is granted only to developers who have - already contributed something useful to phpMyAdmin. If you're - interested in that, please contact us using the phpmyadmin-devel - mailing list. - ______________________________________________________________________ - - [79]Top - [80]Requirements - [81]Introduction - [82]Installation - - [83]Configuration - [84]FAQ - [85]Developers - [86]Credits - ______________________________________________________________________ - + * put the modified files (tar'ed and gzip'ed) inside the patch tracker of the phpMyAdmin SourceForge account + (http://sourceforge.net/projects/phpmyadmin/) + + Write access to the CVS tree is granted only to developers who have already contributed something useful to phpMyAdmin. If + you're interested in that, please contact us using the phpmyadmin-devel mailing list. + ________________________________________________________________________________________________________________________________ + + Top - Requirements - Introduction - Installation - Configuration - FAQ - Developers - Credits + ________________________________________________________________________________________________________________________________ + Credits @@ -1096,69 +891,71 @@ CREDITS, in chronological order ------------------------------- [tr] - Tobias Ratschiller - * creator of the phpmyadmin project - * maintainer from 1998 to summer 2000 + * creator of the phpmyadmin project + * maintainer from 1998 to summer 2000 [md] - Marc Delisle - * multi-language version - * various fixes and improvements + * multi-language version + * various fixes and improvements [om] - Olivier Müller - * started SourceForge phpMyAdmin project in March 2001 - * sync'ed different existing CVS trees with new features and bugfixes - * multi-language improvements, dynamic language selection - * current project maintainer, with Marc and Loic + * started SourceForge phpMyAdmin project in March 2001 + * sync'ed different existing CVS trees with new features and bugfixes + * multi-language improvements, dynamic language selection + * current project maintainer [lc] - Loïc Chapeaux - * rewrote and optimized javascript, DHTML and DOM stuff - * rewrote the scripts so they fit the PEAR coding standards and - generate XHTML1.0 and CSS2 compliant codes - * improved the language detection system - * many bugfixes and improvements + * rewrote and optimized javascript, DHTML and DOM stuff + * rewrote the scripts so they fit the PEAR coding standards and + generate XHTML1.0 and CSS2 compliant codes + * improved the language detection system + * many bugfixes and improvements [rj] - Robin Johnson - * database maintence controls - * table type code + * database maintence controls + * table type code + * Host authentication IP Allow/Deny + * DB-based configuration [af] - Armel Fauveau - * bookmarks feature - * multiple dump feature - * gzip dump feature - * zip dump feature + * bookmarks feature + * multiple dump feature + * gzip dump feature + * zip dump feature [gl] - Geert Lund - * various fixes - * moderator of the phpMyAdmin users forum at phpwizard.net + * various fixes + * moderator of the phpMyAdmin users forum at phpwizard.net [kc] - Korakot Chaovavanich - * "insert as new row" feature + * "insert as new row" feature [pk] - Pete Kelly - * rewrote and fix dump code - * bugfixes + * rewrote and fix dump code + * bugfixes [sa] - Steve Alberty - * rewrote dump code for PHP4 - * mySQL table statistics - * bugfixes + * rewrote dump code for PHP4 + * mySQL table statistics + * bugfixes [bg] - Benjamin Gandon - * main author of the version 2.1.0.1 - * bugfixes + * main author of the version 2.1.0.1 + * bugfixes [at] - Alexander M. Turek * various small features and fixes * German language file updates -Thanks to those guy who send us some major improvements to merge into the +Thanks to these guys who have sent us some major improvements to merge into the code since version 2.1.0: - Michal Cihar who implemented the enhanced index creation/display feature. - Christophe Gesché from the "MySQL Form Generator for PHPMyAdmin" (http://sourceforge.net/projects/phpmysqlformgen/) who suggested the patch for multiple table printviews. -- Garvin Hicking who builds the patch for +- Garvin Hicking who built the patch for vertical display of table rows. - Yukihiro Kawada for the japanese kanji encoding conversion feature. @@ -1168,6 +965,9 @@ code since version 2.1.0: relation-links feature. - Mike Beck for his work on the Relation table feature: automatic joint in QBE, links column in printview, Relation view. +- Maxime Delorme for the PDF schema output; + thanks also to Olivier Plathey for the fpdf library (www.fpdf.org). + And also to the following people who have contributed minor changes, enhancements, bugfixes or support for a new language since version 2.1.0: @@ -1220,109 +1020,9 @@ Original Credits of Version 2.1.0 And thanks to everyone else who sent me email with suggestions, bug-reports and or just some feedback. - ______________________________________________________________________ - - [87]Top - [88]Requirements - [89]Introduction - [90]Installation - - [91]Configuration - [92]FAQ - [93]Developers - [94]Credits - ______________________________________________________________________ - - [95]Valid XHTML 1.0! [96]Valid CSS! - -References - - 1. http://www.phpmyadmin.net/ - 2. http://localhost/phpMyAdmin-devel/ChangeLog - 3. http://localhost/phpMyAdmin-devel/README - 4. http://localhost/phpMyAdmin-devel/LICENSE - 5. http://localhost/phpMyAdmin-devel/Documentation.html#top - 6. http://localhost/phpMyAdmin-devel/Documentation.html#require - 7. http://localhost/phpMyAdmin-devel/Documentation.html#intro - 8. http://localhost/phpMyAdmin-devel/Documentation.html#setup - 9. http://localhost/phpMyAdmin-devel/Documentation.html#config - 10. http://localhost/phpMyAdmin-devel/Documentation.html#faq - 11. http://localhost/phpMyAdmin-devel/Documentation.html#developers - 12. http://localhost/phpMyAdmin-devel/Documentation.html#credits - 13. http://localhost/phpMyAdmin-devel/Documentation.html#top - 14. http://localhost/phpMyAdmin-devel/Documentation.html#require - 15. http://localhost/phpMyAdmin-devel/Documentation.html#intro - 16. http://localhost/phpMyAdmin-devel/Documentation.html#setup - 17. http://localhost/phpMyAdmin-devel/Documentation.html#config - 18. http://localhost/phpMyAdmin-devel/Documentation.html#faq - 19. http://localhost/phpMyAdmin-devel/Documentation.html#developers - 20. http://localhost/phpMyAdmin-devel/Documentation.html#credits - 21. http://localhost/phpMyAdmin-devel/Documentation.html#top - 22. http://localhost/phpMyAdmin-devel/Documentation.html#require - 23. http://localhost/phpMyAdmin-devel/Documentation.html#intro - 24. http://localhost/phpMyAdmin-devel/Documentation.html#setup - 25. http://localhost/phpMyAdmin-devel/Documentation.html#config - 26. http://localhost/phpMyAdmin-devel/Documentation.html#faq - 27. http://localhost/phpMyAdmin-devel/Documentation.html#developers - 28. http://localhost/phpMyAdmin-devel/Documentation.html#credits - 29. http://localhost/phpMyAdmin-devel/Documentation.html#config - 30. http://localhost/phpMyAdmin-devel/Documentation.html#faq - 31. http://localhost/phpMyAdmin-devel/Documentation.html#top - 32. http://localhost/phpMyAdmin-devel/Documentation.html#require - 33. http://localhost/phpMyAdmin-devel/Documentation.html#intro - 34. http://localhost/phpMyAdmin-devel/Documentation.html#setup - 35. http://localhost/phpMyAdmin-devel/Documentation.html#config - 36. http://localhost/phpMyAdmin-devel/Documentation.html#faq - 37. http://localhost/phpMyAdmin-devel/Documentation.html#developers - 38. http://localhost/phpMyAdmin-devel/Documentation.html#credits - 39. http://localhost/phpMyAdmin-devel/Documentation.html#setup - 40. http://localhost/phpMyAdmin-devel/Documentation.html#top - 41. http://localhost/phpMyAdmin-devel/Documentation.html#require - 42. http://localhost/phpMyAdmin-devel/Documentation.html#intro - 43. http://localhost/phpMyAdmin-devel/Documentation.html#setup - 44. http://localhost/phpMyAdmin-devel/Documentation.html#config - 45. http://localhost/phpMyAdmin-devel/Documentation.html#faq - 46. http://localhost/phpMyAdmin-devel/Documentation.html#developers - 47. http://localhost/phpMyAdmin-devel/Documentation.html#credits - 48. http://localhost/phpMyAdmin-devel/Documentation.html#faqserver - 49. http://localhost/phpMyAdmin-devel/Documentation.html#faqconfig - 50. http://localhost/phpMyAdmin-devel/Documentation.html#faqlimitations - 51. http://localhost/phpMyAdmin-devel/Documentation.html#faqmultiuser - 52. http://localhost/phpMyAdmin-devel/Documentation.html#faqbrowsers - 53. http://localhost/phpMyAdmin-devel/Documentation.html#faqusing - 54. http://localhost/phpMyAdmin-devel/Documentation.html#faqproject - 55. http://bugs.php.net/bug.php?id=12061 - 56. http://www.phpwizard.net/phorum/read.php?f=1&i=6624&t=6300 - 57. http://www.php.net/bugs.php?id=8966 - 58. http://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=24933 - 59. http://www.redhat.com/swr/i386/php-4.0.4pl1-9.i386.html - 60. http://www.mysql.com/doc/R/e/Resetting_permissions.html - 61. https://sourceforge.net/tracker/index.php?func=detail&aid=540671&group_id=23067&atid=377408 - 62. http://www.phpwizard.net/phorum/list.php?f=1 - 63. http://www.mysql.com/doc/C/a/Can_not_connect_to_server.html - 64. http://bugzilla.mozilla.org/ - 65. http://sourceforge.net/projects/phpmyadmin/ - 66. http://sourceforge.net/projects/phpmyadmin/ - 67. https://sourceforge.net/projects/phpmyadmin/ - 68. http://localhost/phpMyAdmin-devel/Documentation.html#developers - 69. http://localhost/phpMyAdmin-devel/Documentation.html#top - 70. http://localhost/phpMyAdmin-devel/Documentation.html#require - 71. http://localhost/phpMyAdmin-devel/Documentation.html#intro - 72. http://localhost/phpMyAdmin-devel/Documentation.html#setup - 73. http://localhost/phpMyAdmin-devel/Documentation.html#config - 74. http://localhost/phpMyAdmin-devel/Documentation.html#faq - 75. http://localhost/phpMyAdmin-devel/Documentation.html#developers - 76. http://localhost/phpMyAdmin-devel/Documentation.html#credits - 77. http://pear.php.net/ - 78. http://sourceforge.net/projects/phpmyadmin/ - 79. http://localhost/phpMyAdmin-devel/Documentation.html#top - 80. http://localhost/phpMyAdmin-devel/Documentation.html#require - 81. http://localhost/phpMyAdmin-devel/Documentation.html#intro - 82. http://localhost/phpMyAdmin-devel/Documentation.html#setup - 83. http://localhost/phpMyAdmin-devel/Documentation.html#config - 84. http://localhost/phpMyAdmin-devel/Documentation.html#faq - 85. http://localhost/phpMyAdmin-devel/Documentation.html#developers - 86. http://localhost/phpMyAdmin-devel/Documentation.html#credits - 87. http://localhost/phpMyAdmin-devel/Documentation.html#top - 88. http://localhost/phpMyAdmin-devel/Documentation.html#require - 89. http://localhost/phpMyAdmin-devel/Documentation.html#intro - 90. http://localhost/phpMyAdmin-devel/Documentation.html#setup - 91. http://localhost/phpMyAdmin-devel/Documentation.html#config - 92. http://localhost/phpMyAdmin-devel/Documentation.html#faq - 93. http://localhost/phpMyAdmin-devel/Documentation.html#developers - 94. http://localhost/phpMyAdmin-devel/Documentation.html#credits - 95. http://validator.w3.org/check/referer - 96. http://jigsaw.w3.org/css-validator/ + ________________________________________________________________________________________________________________________________ + + Top - Requirements - Introduction - Installation - Configuration - FAQ - Developers - Credits + ________________________________________________________________________________________________________________________________ + + Valid XHTML 1.0! Valid CSS! diff --git a/config.inc.php3 b/config.inc.php3 index e177fa715..77b0e66dc 100755 --- a/config.inc.php3 +++ b/config.inc.php3 @@ -55,6 +55,11 @@ $cfg['Servers'][$i]['pdf_table_position'] // tables position for the // PDF schema - leave blank // for no PDF schema support +$cfg['Servers'][$i]['AllowDeny']['order'] + = ''; // Host authentication order, leave blank to not use +$cfg['Servers'][$i]['AllowDeny']['rules'] + = array( ); // Host authentication rules, leave blank for defaults + $i++; $cfg['Servers'][$i]['host'] = ''; diff --git a/libraries/common.lib.php3 b/libraries/common.lib.php3 index 97b7a3921..a21a1c89d 100644 --- a/libraries/common.lib.php3 +++ b/libraries/common.lib.php3 @@ -311,6 +311,144 @@ if (!defined('PMA_COMMON_LIB_INCLUDED')){ return true; } // end of the 'PMA_setFontSizes()' function + + /** + * Based on IP Pattern Matcher + * Originally by J.Adams + * Found on + * Modified by Robbat2 + * + * Matches: + * xxx.xxx.xxx.xxx (exact) + * xxx.xxx.xxx.[yyy-zzz] (range) + * xxx.xxx.xxx.xxx/nn (CIDR) + * + * Does not match: + * xxx.xxx.xxx.xx[yyy-zzz] (range, partial octets not supported) + * + * @param string string of IP range to match + * @param string string of IP to test against range + * + * @return boolean always true + * + * @access public + */ + + function PMA_IPMaskTest($TestRange,$IPtoTest) + { + $result = TRUE; + + if (ereg( "([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+)/([0-9]+)", $TestRange, $regs) ) { + //perform a mask match + $ipl = ip2long($IPtoTest); + $rangel = ip2long($regs[1].'.'.$regs[2].'.'.$regs[3].'.'.$regs[4]); + + $maskl = 0; + + for ($i = 0; $i< 31; $i++) { + if ($i < $regs[5]-1) { + $maskl = $maskl + pow(2,(30-$i)); + } // end if + } // end for + + if (($maskl & $rangel) == ($maskl & $ipl)) { + return TRUE; + } else { + return FALSE; + } + } else { + // range based + $maskocts = split("\.",$TestRange); + $ipocts = split("\.",$IPtoTest); + + // perform a range match + for ($i=0; $i<4; $i++) { + if (ereg("\[([0-9]+)\-([0-9]+)\]",$maskocts[$i],$regs)) { + if ( ($ipocts[$i] > $regs[2]) + || ($ipocts[$i] < $regs[1])) { + $result = FALSE; + } // end if + } else { + if ($maskocts[$i] <> $ipocts[$i]) { + $result = FALSE; + } // end if + } // end if/else + } //end for + } //end if/else + + return $result; + } + + + /** + * Runs through IP Allow/Deny rules the use of it below for more information + * + * @param string 'allow' | 'deny' type of rule to match + * + * @return bool Matched a rule ? + * + * @access public + */ + function PMA_AllowDeny($type) + { + global $cfg; + + // grab IP of user + if (getenv("HTTP_X_FORWARDED_FOR")) { + // try to behave properly with proxies, as per + // http://www.php.net/manual/en/function.getenv.php + $remoteip = getenv("HTTP_X_FORWARDED_FOR"); + } else { + // possibly does not work in ISAPI? + $remoteip = getenv("REMOTE_ADDR"); + } + + // copy username + $username = $cfg['Server']['user']; + + // copy rule database + $rules = $cfg['Server']['AllowDeny']['rules']; + + // lookup table for some name shortcuts + $shortcuts = array( + "all" => "0.0.0.0/0", + "localhost" => "127.0.0.1/8" + ); + + reset ($rules); // used instead of a foreach look for PHP3 support + while ( list(, $rule) = each ($rules) ) { + // extract rule data + $rule_data = explode(' ',$rule); + + // check for rule type + if( $rule_data[0] != $type ) + continue; + + // check for username + if( ($rule_data[1] != '%' ) //wildcarded first + && ($rule_data[1] != $username) ) + continue; + + // check if the config file has the full string with an extra 'from' in it + // if it does, just discard it + if( $rule_data[2] == 'from' ) + $rule_data[2] = $rule_data[3]; + + // Handle shortcuts with above array + // DON'T use "array_key_exists" as it's only PHP 4.1 and newer. + if( isset($shortcuts[$rule_data[2]]) ) + $rule_data[2] = $shortcuts[$rule_data[2]]; + + // Add code for host lookups here + // Excluded for the moment + + // Do the actual matching now + if(PMA_IPMaskTest($rule_data[2],$remoteip)) + return TRUE; + } + + return FALSE; + } /** * $cfg['PmaAbsoluteUri'] is a required directive else cookies won't be @@ -405,6 +543,42 @@ if (!defined('PMA_COMMON_LIB_INCLUDED')){ PMA_auth_set_user(); } + // Check IP-based Allow/Deny rules as soon as possible to reject the user + // Based on mod_access in Apache + // http://cvs.apache.org/viewcvs.cgi/httpd-2.0/modules/aaa/mod_access.c?rev=1.37&content-type=text/vnd.viewcvs-markup + // Look at: "static int check_dir_access(request_rec *r)" + // Robbat2 - May 10, 2002 + + $AllowDeny_forbidden = FALSE; //default + if ( $cfg['Server']['AllowDeny']['order'] == 'allow,deny' ) { + $AllowDeny_forbidden = TRUE; + if( PMA_AllowDeny('allow') ) { + $AllowDeny_forbidden = FALSE; + } + if( PMA_AllowDeny('deny') ) { + $AllowDeny_forbidden = TRUE; + } + } else if ( $cfg['Server']['AllowDeny']['order'] == 'deny,allow' ) { + if( PMA_AllowDeny('deny') ) { + $AllowDeny_forbidden = TRUE; + } + if( PMA_AllowDeny('allow') ) { + $AllowDeny_forbidden = FALSE; + } + } else if ( $cfg['Server']['AllowDeny']['order'] == 'explicit' ) { + if( PMA_AllowDeny('allow') + && !PMA_AllowDeny('deny') ) { + $AllowDeny_forbidden = FALSE; + } else { + $AllowDeny_forbidden = TRUE; + } + } + if($AllowDeny_forbidden) { + // eject the user if they are bad + PMA_auth_fails(); + } + unset($AllowDeny_forbidden); //Clean up after you! + // The user can work with only some databases if (isset($cfg['Server']['only_db']) && $cfg['Server']['only_db'] != '') { if (is_array($cfg['Server']['only_db'])) { @@ -447,6 +621,9 @@ if (!defined('PMA_COMMON_LIB_INCLUDED')){ } // end if } // end if + // Pass #1 of DB-Config to read in master level DB-Config will go here + // Robbat2 - May 11, 2002 + // Connects to the server (validates user's login) $userlink = @$connect_func( $cfg['Server']['host'] . $server_port . $server_socket, @@ -457,6 +634,9 @@ if (!defined('PMA_COMMON_LIB_INCLUDED')){ PMA_auth_fails(); } // end if + // Pass #2 of DB-Config to read in user level DB-Config will go here + // Robbat2 - May 11, 2002 + if (PMA_PHP_INT_VERSION >= 40000) { @ini_set('track_errors', $bkp_track_err); }