NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: bin/32591: cap_mkdb(1) does not update properly db files?

The following reply was made to PR bin/32591; it has been noted by GNATS.

From: Christoph Badura <>
Subject: Re: bin/32591: cap_mkdb(1) does not update properly db files?
Date: Thu, 4 Sep 2008 00:49:08 +0200

 I noticed the same problme today with a simpler setup.
 I just added "datasize=384m" to the default class.  And ran
 "cap_mkdb /etc/login.conf".
 I see this under NetBSD 3.1/i386 but the bug seems to be present in all
 There was an attempt to work around this in rev 1.22 of cap_mkdb.c but
 that handles only the case where the name of the output file is derived from
 the first input file and the ".db" file doesn't exist already.
 When the ".db" file does exist the following happens:
 cap_mkdb keeps calling cgetnext() to parse the input files.
 cgetnext() calls getent() internally passing the names of the input files
 as the db_array parameter and -1 as the fd parameter.  This causes getent()
 to iterate over the db_array file names and opening them, trying to dbopen
 the ".db" version first.  When it succeeds to open the ".db" it seem to
 pull out the old record for the current key and that will be stored in the
 new ".db" file hence preventing changes to existing records.
 The proper fix is to prevent getent() from opening the ".db" files for the
 input files of cap_mkdb when being called from cap_mkdb.
 How to repeat:
 echo "foo:bar" >/tmp/foo
 cap_mkdb /tmp/foo
 db -NSb hash /tmp/foo.db
 echo "foo:baz" >/tmp/foo
 cap_mkdb /tmp/foo
 db -NSb hash /tmp/foo.db

Home | Main Index | Thread Index | Old Index