ID: 24824
User updated by: php at johnlevine dot com
Reported By: php at johnlevine dot com
Status: Open
Bug Type: DBM/DBA related
Operating System: BSD/OS 4.3.1
PHP Version: 4.3.2
Assigned To: helly
New Comment:

It turns out on my system the ndbm is really a wrapper around the more
recent Berkeley db that uses dbopen().

The problem seems to be that the ndbm library appends .db to file name,
so if you open "foo", it really opens "foo.db". There's a bunch of
code in php_dba_open that distrusts ndbm's locking and tries to open
the file and lock it, but that code doesn't know that the file is
really called foo.db and gets confused.

The locking code is a mess. If it's written down anywhere what it's
supposed to do, I can probably come up with a simple patch or rewrite
that will work anywhere. The obvious question is why it tries to do
its own lockf rather than use the one built into ndbm.

Previous Comments:

[2003-07-27 14:05:52] php at johnlevine dot com

All the system libraries are the standard ones. We may have an arcane
difference between BSD/OS and other BSDs, assuming we know this works
on other BSDs. I could try it on FreeBSD 4.8.

tom:johnl:php-4.3.2$ php -r 'echo print_r(dba_handlers());'
[0] => ndbm
[1] => cdb
[2] => cdb_make
[3] => flatfile


[2003-07-27 12:33:35] [email][/email]

The result should be impossible with normal builds. Did you compile
your own libc or something like that?

Please execute: php -r 'echo print_r(dba_handlers());'

You could also provide me with your config.log per email but stick to
the list for the rest.


[2003-07-27 11:41:18] php at johnlevine dot com

tom:johnl:php-4.3.2$ TEST_PHP_EXECUTABLE=/usr/local/bin/php php
run-tests.php ext/dba

================================================== ===================
CWD : /home/src/php-4.3.2
PHP : /usr/local/bin/php
PHP_SAPI : cli
INI actual : /usr/local/lib/php.ini
More .INIs :
Extra dirs :
================================================== ===================
Running selected tests.
FAIL DBA File Creation Test [ext/dba/tests/dba001.phpt]
FAIL DBA Insert/Fetch Test [ext/dba/tests/dba002.phpt]
FAIL DBA Insert/Replace/Fetch Test [ext/dba/tests/dba003.phpt]
FAIL DBA Multiple Insert/Fetch Test [ext/dba/tests/dba004.phpt]
FAIL DBA FirstKey/NextKey Loop Test With 5 Items
FAIL DBA FirstKey/NextKey with 2 deletes [ext/dba/tests/dba006.phpt]
FAIL DBA Multiple File Creation Test [ext/dba/tests/dba007.phpt]
FAIL DBA magic_quotes_runtime Test [ext/dba/tests/dba008.phpt]
FAIL DBA dba_popen Test [ext/dba/tests/dba009.phpt]
FAIL DBA CDB handler test [ext/dba/tests/dba_cdb.phpt]
FAIL DBA CDB_MAKE handler test [ext/dba/tests/dba_cdb_make.phpt]
PASS DBA CDB handler test (read only)
FAIL DBA DB2 handler test [ext/dba/tests/dba_db2.phpt]
FAIL DBA DB3 handler test [ext/dba/tests/dba_db3.phpt]
FAIL DBA DB4 handler test [ext/dba/tests/dba_db4.phpt]
FAIL DBA DBM handler test [ext/dba/tests/dba_dbm.phpt]
FAIL DBA FlatFile handler test [ext/dba/tests/dba_flatfile.phpt]
FAIL DBA GDBM handler test [ext/dba/tests/dba_gdbm.phpt]
FAIL DBA NDBM handler test [ext/dba/tests/dba_ndbm.phpt]
tom:johnl:php-4.3.2$ ldd /usr/local/bin/php => /shlib/ (0x48171000) => /shlib/ (0x48182000) => /shlib/ (0x48185000) => /shlib/ (0x48191000)


[2003-07-27 11:27:46] [email][/email]

Please provide the outputs of the following two commands using CLI or
CGI version of php:
1) php run-tests.php ext/dba
2) ldd php


[2003-07-27 11:22:26] php at johnlevine dot com

On my system, it crashes with any dbm file, even one with no


The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at

Edit this bug report at [url][/url]