QMAIL2DLF.IN(1)

πŸ“¦ version 2.1.1, in arch rolling

πŸ’Œ qmail2dlf β€” the manual, but make it make sense

okay bestie, so this is the page for qmail2dlf β€” a lil' Lire tool that lives in the qmail ecosystem. sit down, grab a strawberry drink πŸ“, and let's get into it.


✨ NAME ✨

qmail2dlf β€” the icon that converts sanitized qmail-send logs into dlf. that's it, that's the job. πŸŽ€


🌸 SYNOPSIS 🌸

qmail2ldf

(yes, that's literally how it's written up there β€” we keep it exactly like that, no cap πŸ”₯)


πŸ’– DESCRIPTION πŸ’–

So here's the vibe: qmail2dlf reads qmail-send logs from stdin, writes dlf to stdout, and β€” if something goes wrong β€” it complains on stderr. like, it will absolutely tell you about it. main character energy, honestly. πŸ’…


πŸ•°οΈ TIMESTAMPS πŸ•°οΈ

We expect timestamps that look like e.g. 977359048.466280500 in our log β€” that's the number of seconds since the epoch, in any precision. lowkey generous of us, ngl. 🫢

The log should feature lines that look something like:

982584201.511524 info msg 6426: bytes 3537 from
  <qmail-return-63074-joostvb=mdcc.cx@list.cr.yp.to> qp 21089 uid 70

So, the cast of characters πŸ‘‘

  • splogger, as distributed with qmail, writes a numerical timestamp β€” something like 972802273.627578, indicating seconds and nanoseconds since the beginning of 1970. iconic behaviour.
  • multilog, as distributed with daemontools, http://cr.yp.to/daemontools.html β€” if you invoke it with action t, it writes a @ and a tai64n format timestamp. these look like e.g. 4000000039ef8532346bb35c. note that 0x400000000000000000000000 is 2^62. big number, big slay. πŸ’€

Wanna get the current time in tai64 format? do this:

echo 40000000`(echo obase = 16; date +%s) | bc`00000000

(assuming GNU date is installed, bestie β€” that part matters ✨)

And to convert tai64n to numerical timestamps, you can use Russ Allbery's tai64nfraq. it's in the public domain, available from http://www.qmail.org/tai64nfrac. king behaviour, honestly. πŸ‘‘


🌈 EXAMPLE 🌈

Process a log as produced by splogger:

$ lr_desyslog qmail < mail.log | qmail2dlf

Process a log as produced by multilog:

$ tai64nfrac < current | qmail2dlf

okay so real talk β€” qmail2dlf(1) will be rarely used on its own, but is way more likely called by lr_log2report:

$ tai64nfrac < /service/qmail-send/log/main/current | \
    lr_log2report qmail

that's the actual workflow, iykyk πŸ¦‹


πŸ’€ BUGS πŸ’€

ngl, we don't deal with bounces. so you'll get something like this:

email qmail none qmail2dlf info skipping line '986244190.800217 bounce msg
 6306 qp 28445': first field should be one of 'new', 'info', 'starting',
 'delivery', 'end' or 'status:', not 'bounce'

and second thing πŸ™ˆ β€” qmail2dlf doesn't use any information from the qmail-smtpd(1) logs. (these look like

2002-06-16 09:34:57.798038500 tcpserver: pid 19385 from 100.61.24.7
2002-06-16 09:34:58.114198500 tcpserver: ok 19385 foo.example.com:100.163.25.11:25 logreport.iae.nl:212.61.24.7:postfix:1189

.)


⭐ VERSION ⭐

$Id: qmail2dlf.in,v 1.24 2006/07/23 13:16:34 vanbaal Exp $

Copyright (C) 2000, 2001 Stichting LogReport Foundation LogReport@LogReport.org

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program (see COPYING); if not, check with http://www.gnu.org/copyleft/gpl.html.

fr fr, read the license β€” it's giving "respect the paperwork" 🧚

πŸ’œ AUTHOR πŸ’œ

Joost van Baal <joostvb@logreport.org>


🌸 that's the whole thing, bestie β€” courtesy of Lire 2.1.1, dated 2025-09-28. go forth and parse those qmail logs. slay. πŸ’…βœ¨

πŸ“¦ where this page comes from