Bugfix: missing line in message.c

Peter pmc at citylink.dinoex.sub.org
Wed Jun 1 21:26:22 UTC 2022


Hi,

  this is broken in 916 (and apparently 918 also).
Consequentially, output from dnstap gets unreadable (invalid YAML)
when using dynamic zone updates. 

******************** PATCH ****************
--- lib/dns/message.c.orig      2022-05-10 11:02:21.000000000 +0200
+++ lib/dns/message.c   2022-05-30 04:02:40.568222000 +0200
@@ -4296,6 +4296,7 @@
                        INDENT(style);
                        ADD_STRING(target, "QUESTION: ");
                } else {
+                       INDENT(style);
                        ADD_STRING(target, "ZONE: ");
                }
                snprintf(buf, sizeof(buf), "%1u",
******************** PATCH ****************

And when You'ra at it:
I would very much appreciate when we could get the *view name* into the
dnstap output.

I am running my nameservers as
 * authoritative to the public,
 * authoritative for the LAN,
 * recursing for the LAN (for DNSSEC to work some useful DANE things),
 * authoritative as root slave,
 * recursing as root slave (for DNSSEC to get 'AD' instead of 'AA'),
 * plus a couple of in-between cases,
all in a single process. :)

Obviousely that needs lots of views. I found dnstap to be the perfect
and long desired solution for debugging and understanding what
actually happens, to become even able to create more fancy setups.

But then the view name is needed in the messages. There is an option 
'dnstap-identity ( <quoted_string> | none | hostname );'
and putting that into the views would be the natural solution - but
that doesn't work, it gets rejected as a syntax error (for no reason
obvious to me). I tried 918, it gets rejected there also.

So for now I hacked it with a simple approach (because I know my
version anyway, I need only the identity of an instance and the view)
and that works for now:
-               dm->d.version.data = env->version.base;
-               dm->d.version.len = env->version.length;
+               dm->d.version.data = (uint8_t *)(view->name);
+               dm->d.version.len = strlen(view->name);

But this is ugly as it computes strlen() on every call. I could do it
nicer, but then I think the beforementioned option should be made
working instead.


-- PMc


More information about the bind-users mailing list