Re: [Exim] exim and exim_dumpdb use different Berkeley DB ve…

Top Page
Delete this message
Reply to this message
Author: Matthias Waffenschmidt
Date:  
To: exim-users
CC: Matthias Waffenschmidt
Subject: Re: [Exim] exim and exim_dumpdb use different Berkeley DB version
Hi,

first of all thanks for your reply!

On Wed, Jun 25, 2003 at 11:15:53AM +0100, Philip Hazel wrote:
> On Tue, 24 Jun 2003, Matthias Waffenschmidt wrote:
>
> > I have exim 4.20 compiled with a static Berkeley DB library version
> > 3.2.9 and exim is just running fine. For example the retry database
> > has the correct file format:
> >
> > bash-2.05# file /var/spool/exim/db/retry
> > /var/spool/exim/db/retry: Berkeley DB (Hash, version 7, native byte-order)
> >
> > But when I try to access these files with the exim utilites
> > (e.g. exim_dumpdb) I get the following error message:
> >
> > bash-2.05# exim_dumpdb /var/spool/exim retry
> > ** Failed to open DBM file /var/spool/exim/db/retry for reading:
> >    Inappropriate file type or format (or Berkeley DB error while opening)

> >
> > As exim_dbmbuild creates a Berkeley DB file of version 1.85 and
> > exim_dumpdb can read this file there is an inconsistency of the
> > Berkeley DB versions used by exim:
>
> That is strange, but it must be caused by some kind of problem when Exim
> was compiled. You are using FreeBSD, right? IIRC that is the OS where
> 1.85 is still the default.


Yes, the machine is indeed running FreeBSD 4.3 (yes, I know it is
pretty old, but it is our reference machine for a lot of client
machines, so an upgrade is not possible currently).

And yes, it seems that 1.85 is the system default. As I have just
seen, the Berkeley DB is built into libc (in 4.3 as well as 4.8) 8-(:

bash-2.04$ strings /usr/lib/libc.so | grep dbopen
dbopen

Maybe this fact is causing the problem. While exim itself is using the
functions of the included libdb, exim_dumpdb is using the functions of
the dynamically loaded libc.

I'm no C expert at all, but I do not understand why exim and
exim_dumpdb use different functions. The only thing I can imagine is
that the DB parts of the two programs differ in some way.

What I just tested:

After I remove the system Berkeley DB include file /usr/include/db.h,
exim_dumpdb fails to compile, because it cannot find a db.h, but the
file /client/include/db.h exists and LOOKUP_INCLUDE=-I/client/include
is defined in Local/Makefile. Why is the compilation of exim_dumpdb
ignoring this option?

> When you build 4.20, are you sure you installed the versions of
> exim_dbmbuild and exim_dumpdb that it built with it? Are you picking up
> older versions from some other directory by accident?


Yes, I am using exim and exim_dumpdb that were built during one run of
make.

BTW: Using the exim port is no alternative. It would take much too
long to explain why I cannot use ports...

--
Gruss / Best regards   |  LF.net GmbH        |  fon +49 711 90074-411
Matthias Waffenschmidt |  Ruppmannstr. 27    |  fax +49 711 90074-33
mw@???              |  D-70565 Stuttgart  |  http://www.lf.net