ID: 25109 User updated by: cunha17 at uol dot com dot br Reported By: cunha17 at uol dot com dot br -Status: Feedback +Status: Open Bug Type: PostgreSQL related Operating System: Redhat Linux 9.0 - Kernel 2.4.21 PHP Version: 4CVS-2003-08-20 New Comment:
As I told you I'm using John Lim's ADODB database library for PHP: http://php.weblogs.com/adodb I run the following PHP code: <? include_once("framework/adodb/adodb.inc.php"); $MM_conn_HOSTNAME = "10.67.92.57"; $MM_conn_DBTYPE = "postgres7"; $MM_conn_DATABASE = "teste"; $MM_conn_USERNAME = "teste"; $MM_conn_PASSWORD = "teste"; ADOLoadCode($MM_conn_DBTYPE); $conn=&ADONewConnection($MM_conn_DBTYPE); if($MM_conn_DBTYPE == "access" || $MM_conn_DBTYPE == "odbc"){ $conn->Connect($MM_conn_DATABASE, $MM_conn_USERNAME,$MM_conn_PASSWORD); } else if($MM_conn_DBTYPE == "ibase") { $conn->Connect($MM_conn_HOSTNAME.":".$MM_conn_DATABASE,$MM_conn_USERNAME,$MM_conn_PASSWORD); } else { $conn->Connect($MM_conn_HOSTNAME,$MM_conn_USERNAME,$MM_conn_PASSWORD,$MM_conn_DATABASE); } $concatOp = $conn->concat_operator; $rs = $conn->execute("SELECT * from teste") or die($conn->errorMsg());; print_r($rs->fields); echo "ok"; ?> And got these last lines of backtrace(strace): open("/webpages/sistemas/framework1.5/adodb/adodb.inc.php", O_RDONLY) = 4 fstat64(4, {st_mode=S_IFREG|0755, st_size=20000, ...}) = 0 fstat64(4, {st_mode=S_IFREG|0755, st_size=20000, ...}) = 0 lseek(4, 0, SEEK_CUR) = 0 lseek(4, 0, SEEK_SET) = 0 close(4) = 0 getcwd("/webpages/sistemas", 4096) = 19 lstat64("/webpages", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0 lstat64("/webpages/sistemas", {st_mode=S_IFDIR|0750, st_size=4096, ...}) = 0 lstat64("/webpages/sistemas/framework1.5", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0 lstat64("/webpages/sistemas/framework1.5/adodb", {st_mode=S_IFDIR|0750, st_size=4096, ...}) = 0 lstat64("/webpages/sistemas/framework1.5/adodb/drivers", {st_mode=S_IFDIR|0750, st_size=4096, ...}) = 0 lstat64("/webpages/sistemas/framework1.5/adodb/drivers/adodb-postgres7.inc.php", {st_mode=S_IFREG|0755, st_size=2246, ...}) = 0 open("/webpages/sistemas/framework1.5/adodb/drivers/adodb-postgres7.inc.php", O_RDONLY) = 4 fstat64(4, {st_mode=S_IFREG|0755, st_size=2246, ...}) = 0 fstat64(4, {st_mode=S_IFREG|0755, st_size=2246, ...}) = 0 lseek(4, 0, SEEK_CUR) = 0 lseek(4, 0, SEEK_SET) = 0 read(4, "<?php\r\n/*\r\n V3.40 7 April 2003 "..., 8192) = 2246 read(4, "", 8192) = 0 close(4) = 0 getcwd("/webpages/sistemas", 4096) = 19 lstat64("/webpages", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0 lstat64("/webpages/sistemas", {st_mode=S_IFDIR|0750, st_size=4096, ...}) = 0 lstat64("/webpages/sistemas/framework1.5", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0 lstat64("/webpages/sistemas/framework1.5/adodb", {st_mode=S_IFDIR|0750, st_size=4096, ...}) = 0 lstat64("/webpages/sistemas/framework1.5/adodb/drivers", {st_mode=S_IFDIR|0750, st_size=4096, ...}) = 0 lstat64("/webpages/sistemas/framework1.5/adodb/drivers/adodb-postgres64.inc.php", {st_mode=S_IFREG|0755, st_size=21405, ...}) = 0 open("/webpages/sistemas/framework1.5/adodb/drivers/adodb-postgres64.inc.php", O_RDONLY) = 4 fstat64(4, {st_mode=S_IFREG|0755, st_size=21405, ...}) = 0 fstat64(4, {st_mode=S_IFREG|0755, st_size=21405, ...}) = 0 lseek(4, 0, SEEK_CUR) = 0 lseek(4, 0, SEEK_SET) = 0 read(4, "<?php\r\n/*\r\n V3.40 7 April 2003 "..., 8192) = 8192 brk(0) = 0x85cf000 brk(0x85d0000) = 0x85d0000 brk(0) = 0x85d0000 brk(0x85d1000) = 0x85d1000 brk(0) = 0x85d1000 brk(0x85d2000) = 0x85d2000 brk(0) = 0x85d2000 brk(0x85d3000) = 0x85d3000 brk(0) = 0x85d3000 brk(0x85d6000) = 0x85d6000 read(4, "\n\t{ \r\n\t\tpg_exec ($this->_connect"..., 8192) = 8192 brk(0) = 0x85d6000 brk(0x85d9000) = 0x85d9000 brk(0) = 0x85d9000 brk(0x85dd000) = 0x85dd000 brk(0) = 0x85dd000 brk(0x85ec000) = 0x85ec000 read(4, "f X field\r\n\t*/\r\n\tfunction TextMa"..., 8192) = 5021 brk(0) = 0x85ec000 brk(0x85ed000) = 0x85ed000 brk(0) = 0x85ed000 brk(0x85ee000) = 0x85ee000 brk(0) = 0x85ee000 brk(0x85f2000) = 0x85f2000 brk(0) = 0x85f2000 brk(0x85f5000) = 0x85f5000 read(4, "", 8192) = 0 close(4) = 0 brk(0) = 0x85f5000 brk(0x85f6000) = 0x85f6000 brk(0) = 0x85f6000 brk(0x85f7000) = 0x85f7000 brk(0) = 0x85f7000 brk(0x85fb000) = 0x85fb000 brk(0) = 0x85fb000 brk(0x85fd000) = 0x85fd000 socket(PF_INET, SOCK_STREAM, IPPROTO_IP) = 4 setsockopt(4, SOL_TCP, TCP_NODELAY, [1], 4) = 0 connect(4, {sa_family=AF_INET, sin_port=htons(5432), sin_addr=inet_addr("10.67.92.57")}, 16) = 0 rt_sigaction(SIGPIPE, {SIG_IGN}, {SIG_IGN}, 8) = 0 send(4, "\0\0\1(\4\322\26/\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 296, 0) = 296 rt_sigaction(SIGPIPE, {SIG_IGN}, {SIG_IGN}, 8) = 0 recv(4, "N", 1, 0) = 1 fcntl64(4, F_SETFL, O_RDONLY|O_NONBLOCK) = 0 select(5, [], [4], [4], NULL) = 1 (out [4]) rt_sigaction(SIGPIPE, {SIG_IGN}, {SIG_IGN}, 8) = 0 send(4, "\0\0\1(\0\2\0\0teste\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 296, 0) = 296 rt_sigaction(SIGPIPE, {SIG_IGN}, {SIG_IGN}, 8) = 0 select(5, [4], [], [4], NULL) = 1 (in [4]) recv(4, "R\0\0\0\0K\0\0\26\n\6\307\317\202Z", 16384, 0) = 15 rt_sigaction(SIGPIPE, {SIG_IGN}, {SIG_IGN}, 8) = 0 send(4, "Qbegin; select getdatabaseencodi"..., 45, 0) = 45 rt_sigaction(SIGPIPE, {SIG_IGN}, {SIG_IGN}, 8) = 0 select(5, [4], [], [4], NULL) = 1 (in [4]) recv(4, "CBEGIN\0Pblank\0T\0\1getdatabaseenco"..., 16384, 0) = 79 brk(0) = 0x85fd000 brk(0x85fe000) = 0x85fe000 rt_sigaction(SIGPIPE, {SIG_IGN}, {SIG_IGN}, 8) = 0 send(4, "Qset datestyle=\'ISO\'\0", 21, 0) = 21 rt_sigaction(SIGPIPE, {SIG_IGN}, {SIG_IGN}, 8) = 0 select(5, [4], [], [4], NULL) = 1 (in [4]) recv(4, "CSET\0Z", 16384, 0) = 6 rt_sigaction(SIGPIPE, {SIG_IGN}, {SIG_IGN}, 8) = 0 send(4, "QSELECT * from teste\0", 21, 0) = 21 rt_sigaction(SIGPIPE, {SIG_IGN}, {SIG_IGN}, 8) = 0 select(5, [4], [], [4], NULL) = 1 (in [4]) recv(4, "Pblank\0T\0\2id\0\0\0\0\27\0\4\377\377\377\377texto\0\0"..., 16384, 0) = 81 brk(0) = 0x85fe000 brk(0x85ff000) = 0x85ff000 rt_sigaction(SIGPIPE, {SIG_IGN}, {SIG_IGN}, 8) = 0 send(4, "Qselect oid,typname from pg_type"..., 33, 0) = 33 rt_sigaction(SIGPIPE, {SIG_IGN}, {SIG_IGN}, 8) = 0 select(5, [4], [], [4], NULL) = 1 (in [4]) recv(4, "EERROR: pg_type: permission den"..., 16384, 0) = 38 --- SIGSEGV (Segmentation fault) @ 0 (0) --- +++ killed by SIGSEGV +++ It seems that the problem is some permission denied on the system tables. IMHO PHP should raise an error if the script tries to access a table that the connection user has no access on. Previous Comments: ------------------------------------------------------------------------ [2003-08-26 19:06:42] [EMAIL PROTECTED] Could you please generate a backtrace of the crash and supply the query you've run to trigger it. ------------------------------------------------------------------------ [2003-08-20 18:30:25] cunha17 at uol dot com dot br The same problem happened with the latest PHP: PHP4-STABLE-200308202130 ------------------------------------------------------------------------ [2003-08-16 11:50:51] [EMAIL PROTECTED] Please try using this CVS snapshot: http://snaps.php.net/php4-STABLE-latest.tar.gz For Windows: http://snaps.php.net/win32/php4-win32-STABLE-latest.zip ------------------------------------------------------------------------ [2003-08-16 11:47:12] cunha17 at uol dot com dot br Description: ------------ I found out that pgsql functions cause segmentation fault if the connection user has no read access on pg_ system tables. I'm using John Lim's ADOdb class to access a PostgreSQL 7.2.4 database. This problem has nothing to do with apache since it happens with the CLI interface too. Reproduce code: --------------- With an empty postgresql installation, I created an empty database, connected to it, created an user and set all privileges on this new database to this user. Connected as the new user on the new database I created some tables. When trying to access this new tables with PHP and ADOdb classes, I got a segmentation fault. At the very end, when running with strace, I got a message before the segmentation fault saying: 'pg_class access denied' When I grant read access on this table to the new user, I got: 'pg_attribute access denied' and so on... When I grant read access to all pg_* tables, the problem disappear and PHP runs ok. Expected result: ---------------- PgSQL Error: Access denied to pg_* system table or something like that. Actual result: -------------- Segmentation Fault if the connection user has no read access on system tables ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=25109&edit=1
