ISC dhcpd treates /var/lib/dhcp3/leases as a log-structured database,
appending records to it and periodically rewriting it. When it
decides to rewrite it it writes the new contents to a temporary file -
fine.
But rather than renaming the temporary file into place, over the top
of the old file, using rename(2), it first renames the old leases file
to leases~. So briefly there is no leases file.
This means that the service used by Osstest/DhcpWatch/leases.pm when a
hostname and port is specified has to try various different files.
This is the appropriate shell script, which is most conveniently
maintained here in osstest. It can be used by putting something like
this in inetd.conf:
5556 stream tcp nowait nobody /root/cat-dhcp-leases cat-dhcp-leases
Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
--- /dev/null
+#!/bin/sh
+set -e
+cd /var/lib/dhcp3
+for f in dhcpd.leases dhcpd.leases~; do
+ if (exec 3>&2 2>/dev/null <$f 2>&3 3>&- cat); then exit 0; fi
+done
+echo '# CANNOT OPEN ANY LEASES FILE'