[Dnsmasq-discuss] [PATCH] Write the pcap header into an existing empty --dumpfile
Dominik Derigs
git at dl6er.de
Sun Oct 4 19:15:45 UTC 2026
From: DL6ER <dl6er at dl6er.de>
dump_init() creates a missing dump file with a pcap header and sends
the header to a FIFO, but expects an existing regular file to start
with one. An empty file therefore fails the header read at EOF, and
startup aborts with "cannot access <file>: Success".
An empty file is easy to end up with, e.g. from touch or from a tool
that checks the path is writable by opening it for appending. Treat it
like a missing file and write the header, so recording starts instead
of refusing to.
Signed-off-by: DL6ER <dl6er at dl6er.de>
---
src/dump.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/src/dump.c b/src/dump.c
index 0c668ba..14441de 100644
--- a/src/dump.c
+++ b/src/dump.c
@@ -75,6 +75,13 @@ void dump_init(void)
!read_write(daemon->dumpfd, (void *)&header, sizeof(header), RW_WRITE))
die(_("cannot open pipe %s: %s"), daemon->dump_file, EC_FILE);
}
+ else if (S_ISREG(buf.st_mode) && buf.st_size == 0)
+ {
+ /* Existing but empty file, treat as new and add header. */
+ if ((daemon->dumpfd = open(daemon->dump_file, O_APPEND | O_RDWR)) == -1 ||
+ !read_write(daemon->dumpfd, (void *)&header, sizeof(header), RW_WRITE))
+ die(_("cannot access %s: %s"), daemon->dump_file, EC_FILE);
+ }
else if ((daemon->dumpfd = open(daemon->dump_file, O_APPEND | O_RDWR)) == -1 ||
!read_write(daemon->dumpfd, (void *)&header, sizeof(header), RW_READ))
die(_("cannot access %s: %s"), daemon->dump_file, EC_FILE);
--
2.43.0
More information about the Dnsmasq-discuss
mailing list