4

I need to compile an old Apache version, 1.3, and the compilation process fails because:

mod_auth_dbm.c:77:18: fatal error: ndbm.h: File or directory not found

Where is this ndbm.h file?

Jeff Schaller
  • 66,199
  • 35
  • 114
  • 250
Phate
  • 319
  • 2
  • 6
  • 13

4 Answers4

5

In ubuntu there is apt-file package that allows you to find package which contains specified file. You need to install it with

sudo apt-get install apt-file

update the cache with

apt-file update

and than you can to search the package you need with

apt-file search ndbm.h

There is only tendra package, that contains file with such name.

Also libgdbm-dev contains /usr/include/gdbm-ndbm.h. May be it's the one you need. You can try to compile with it.

ps. Also you can use search on ubuntu site.

rush
  • 27,055
  • 7
  • 87
  • 112
  • I don't think tendra has anything to do with this. `dbm` was a "database" (really a library for handling a table of a database only, part of early Unix), which in turn was replaced by `ndbm` (new DBM, had some licensing issues); `gdbm` (GNU dbm) was written to replace both. The whole sordid story is covered by [Wikipedia](http://en.wikipedia.org/wiki/Dbm). Perhaps there is still a `ndbm-dev` package in some non-free repo? – vonbrand Mar 04 '13 at 17:53
  • Excellent answer, equipping people with `apt-file` instead of just giving the answer. – datu-puti Oct 30 '20 at 05:30
4

That file here (Fedora 18) belongs to gdbm-devel, the package containing it for Ubuntu should be named similarly. Check the dependencies for the source, you'll probably need a swath of -devel packages corresponding to each dependency.

What do you need an outdated apache, which moreover has known vulnerabilities? Why doesn't the distribution's apache work? It is probably a much better idea to port whatever requires that apache forward than to get stuck in prehistory...

vonbrand
  • 18,156
  • 2
  • 37
  • 59
  • I downloaded that package but ndbm.h is still unfound because now I have gdbm.h and gdbm-ndbm.h. I need that version just because of vulnerabilities: I need to do some penetration testing using known exploits. – Phate Mar 04 '13 at 17:36
  • 1
    There is no gdbm-devel package in ubuntu. There is `libgdbm-dev` that is most similar by name, unfortunately it doesn't contain `ndbm.h`, however it contains `/usr/include/gdbm-ndbm.h`. Maybe it's the one is needed, – rush Mar 04 '13 at 17:46
  • Ok, I made a symbolic link to this latter file and it worked. Problem is that now it searches for a db.h file... – Phate Mar 04 '13 at 17:53
  • `db.h` is part of Berkeley DB, another project to replace DBM (currently owned by Oracle, under some non-free license). Is this perhaps the `config` script lloking for available DBM functionality? In that case you should just leave things be. – vonbrand Mar 04 '13 at 17:57
1

The gdbm sources put the header files in /usr/include/gdbm. Some packaging systems (e.g. Arch Linux) put in symbolic links to those (so /usr/include/ndbm.h points to /usr/include/gdbm/ndbm.h) while at least some Debian-based systems omit the directory AND rename ndbm.h to gdbm-ndbm.h (so they have gdbm.h, dbm.h and gdbm-ndbm.h).

I assume it was to avoid some conflict with a different package, but it's a poor solution.

One way to get around such issues (especially if you don't have permissions to modify the system directories) is to create your own directory, e.g. compat, put in a link from compat/ndbm.h to /usr/include/gdbm-ndbm.h, and then tell the compiler to search your compat directory (-Icompat). Then, if it doesn't find the file in the system libraries it will find the correct name in your own directory.

Patrick Mevzek
  • 3,130
  • 2
  • 20
  • 30
Steve Peltz
  • 111
  • 1
1

Since Debian 10 and Ubuntu 18.04 (possibly earlier, but that’s the oldest supported release with this package), the relevant files are available in libgdbm-compat-dev:

apt install libgdbm-compat-dev
Stephen Kitt
  • 411,918
  • 54
  • 1,065
  • 1,164
RvL
  • 11
  • 1