Problème de connexion mysql avec adodb sous Apache chrooté - OpenBSD
Système: OpenBSD 4.9
Packages installés: php5-core-5.2.17, php5-extensions-5.2.17, php5-gd-5.2.17, php5-mysql-5.2.17, php5-snmp-5.2.17, mysql-server-5.1.54p3, mysql-client-5.1.54p0
Bonjour,
J'ai un script de tests placé dans /var/www/htdocs avec /var/www le chroot d'Apache.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| <?php
include('../adodb5/adodb.inc.php');
$conn = &ADONewConnection('mysql');
$conn->PConnect('localhost','cacti','cactipw','cactidb');
$sql = 'select hostname,description from host;';
$recordSet = &$conn->Execute($sql);
if (!$recordSet)
print $conn->ErrorMsg();
else
while (!$recordSet->EOF) {
print $recordSet->fields[0].' '.$recordSet->fields[1].'<BR>';
$recordSet->MoveNext();
}
$recordSet->Close();
$conn->Close();
?> |
J'ai aussi téléchargé adodb5 que j'ai placé dans /var/www
Mon serveur mysql est lancé par la commande suivante
Code:
# /usr/local/bin/mysqld_safe --user=_mysql --pid-file=/var/mysql/mysql.pid &
Et j'ai configuré /etc/my.cnf (avec / non chrooté)
Code:
1 2
| [mysqld]
socket = /var/www/var/run/mysql/mysql.sock |
Lorsque mon serveur mysqld est démarré, il crée mysql.sock dans /var/www/var/run/mysql
Citation:
# ls -l /var/www/var/run/mysql/
srwxrwxrwx 6 _mysql daemon 0 Oct 4 23:04 mysql.sock
J'ai fais un lien pour que mysql.sock soit aussi joignable dans /var/run/mysql/
Code:
# ln /var/www/var/run/mysql/mysql.sock /var/run/mysql/mysql.sock
Cas 1: Le script est executé hors de toute considération chroot => FONCTIONNE
Code:
1 2
| # /usr/local/bin/php /var/www/htdocs/adotest.php
127.0.0.1 System1<BR>1.1.1.1 System2<BR> |
Cas 2: Le script est executé en http par l'intermédiare d'Apache (qui est chrooté) url http://localhost/adotest.php => FONCTIONNE
Code:
1 2
| 127.0.0.1 System1
1.1.1.1 System2 |
Case 3: Le script est executé en ligne de commande et simule un utilisateur dans le chroot d'Apache => ECHOUE
Code:
1 2 3
| # /usr/sbin/chroot /var/www /bin/php /htdocs/adotest.php
PHP Fatal error: Call to undefined function mysql_pconnect() in /adodb5/drivers/adodb-mysql.inc.php on line 383
Fatal error: Call to undefined function mysql_pconnect() in /adodb5/drivers/adodb-mysql.inc.php on line 383 |
Vous remarquerez que le script adotest.php est parvenu à inclure /adodb5/drivers/adodb-mysql.inc.php
J'ai aussi copié /etc/my.cnf dans /var/www/etc mais changé le chemin pour le client mysql
Code:
1 2
| [client]
socket = /var/run/mysql/mysql.sock |
J'ai pensé qu'il y avait un problème de connexion mysql, j'ai donc copié le client mysql dans le chroot (/var/www/bin) ainsi que les librairies dynamiques qui lui sont liées. Et la connexion fonctionne bien !
Code:
1 2 3 4
| # /bin/mysql -u cacti -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 6 |
Je ne comprends absolument pas pourquoi dans Cas 3 la connexion vers mysql ne s'effectue pas.
Comme vous pouvez l'imaginer j'ai énormément cherché :roll:
Merci