[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