Subject: [DNSOP] I-D Action: draft-ietf-dnsop-extended-error-03.txt

From: [email-masked]
Date: Thu, 20 Dec 2018 14:59:30 -0800

A New Internet-Draft is available from the on-line Internet-Drafts directories.
This draft is a work item of the Domain Name System Operations WG of the IETF.

        Title           : Extended DNS Errors
        Authors         : Warren Kumari
                          Evan Hunt
                          Roy Arends
                          Wes Hardaker
                          David C Lawrence
	Filename        : draft-ietf-dnsop-extended-error-03.txt
	Pages           : 12
	Date            : 2018-12-20

Abstract:
   This document defines an extensible method to return additional
   information about the cause of DNS errors.  Though created primarily
   to extend SERVFAIL to provide additional information about the cause
   of DNS and DNSSEC failures, the Extended DNS Errors option defined in
   this document allows all response types to contain extended error
   information.

The IETF datatracker status page for this draft is:
https://datatracker.ietf.org/doc/draft-ietf-dnsop-extended-error/

There are also htmlized versions available at:
https://tools.ietf.org/html/draft-ietf-dnsop-extended-error-03
https://datatracker.ietf.org/doc/html/draft-ietf-dnsop-extended-error-03

A diff from the previous version is available at:
https://www.ietf.org/rfcdiff?url2=draft-ietf-dnsop-extended-error-03

Please note that it may take a couple of minutes from the time of submission
until the htmlized version and diff are available at tools.ietf.org.

Internet-Drafts are also available by anonymous FTP at:
ftp://ftp.ietf.org/internet-drafts/

---

From: Wes Hardaker <[email-masked]>
Date: Thu, 20 Dec 2018 15:20:22 -0800

> 	Filename        : draft-ietf-dnsop-extended-error-03.txt

Folks,

With a LOT of embarrassment, I did a lot of editing and discussing to
bring the draft into much better shape.  We had a LC issued while
discussing the draft with the chair only to find out that our memory of
its state was far worse than reality.  Though it wasn't the worst thing
in the world, it needed a fair amount of improvement.  That being said,
thank you to everyone that submitted comments about it and all of those
issues have been addressed (details below).

In the mean time, the new draft is much stronger.  One of the comments
about the draft previously was "are their implementations?", as that
became a sort of pseudo-requirement since the original start of the
work.  So with that, we're very curious:

   QUESTION: Is anyone planning on implementation this draft?

Otherwise, here's the results of the rest of the comments and concerns
that came about in the Last Call:

1 Shane Kerr's review
.. 1.1 DONE Plus there's also this odd bit of stray text laying around:
.. 1.2 DONE Also is this correct:
.. 1.3 DONE Also, this text seems a bit unclear:
.. 1.4 DONE EXTRA-TEXT and EXTRA-INFO duplication
.. 1.5 DONE encoding of the EXTRA-TEXT field
.. 1.6 DONE I am not sure I agree with these recommendations:
.. 1.7 DONE How to add multiple EDE
.. 1.8 CANCELED Implementation required
2 Peter Spacek
.. 2.1 DONE EDNS handling as mentioned elsewhere in this thread
.. 2.2 CANCELED lack of implementation reports
3 Joe Abley
.. 3.1 DONE Fix IANA registry template
4 Donald Eastlake
.. 4.1 DONE two dimensional table is unneeded
.. 4.2 DONE rcodes are only 4 bits

1 Shane Kerr's review
=====================

  Dear DNS colleagues,

  I definitely agree with George that last call seems a bit
  premature. As he points out, section 6 is a large open question. We
  need to either change EDNS behavior to allow an unsolicited EDNS
  option in a response or change this draft to include an appropriate
  EDNS option when it queries. Personally I think the draft should
  specify that the query should include an empty version of this EDNS
  option to indicate support (this is actually helpful, as it doesn't
  make too much sense sending back extra information that clients will
  ignore, decades of BIND adding useless ADDITIONAL section data
  notwithstanding).

1.1 DONE Plus there's also this odd bit of stray text laying around:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  Here is a reference to an "external" (non-RFC / draft) thing:
  ([IANA.AS_Numbers]).  And this is a link to an
  [ID:[I-D.ietf-sidr-iana-objects]].

  + Result: removed

1.2 DONE Also is this correct:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

      o OPTION-LENGTH, 2 octets ((defined in [RFC6891]) contains the
  length of the payload (everything after OPTION-LENGTH) in octets and
  should be 4.

  If I am correct there are at least 6 octets after the OPTION-LENGTH
  and possibly more if EXTRA-TEXT is present.

  + Result: fixed text to say "OPTION-LENGTH, 2 octets ((defined in
    [RFC6891]) contains the length of the payload (everything after
    OPTION-LENGTH) in octets and should be 6 plus the length of the
    EXTRA-TEXT section (which may be a zero-length string)."

1.3 DONE Also, this text seems a bit unclear:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

      R - Retry The R (or Retry) flag provides a hint to the receiver
  that it should retry the query, probably by querying another server.
  If the R bit is set (1), the sender believes that retrying the query
  may provide a successful answer next time; if the R bit is clear (0),
  the sender believes that it should not ask another server.

  The "probably by querying another server" is odd. In my mind it should
  explicitly apply to querying another server ONLY.

  + Result: that's fair.  Changed it to " it should retry the query to
    another server."

1.4 DONE EXTRA-TEXT and EXTRA-INFO duplication
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  The draft refers to EXTRA-TEXT twice, and EXTRA-INFO once which is
  presumably meant to be the same thing.

  + Result: switched to all EXTRA-TEXT

1.5 DONE encoding of the EXTRA-TEXT field
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  In any case, I think the encoding of this field should be specified as
  either ASCII or UTF-8. I prefer UTF-8, because otherwise I won't be
  able to send back 🤯 emoji in error messages (and the authors won't be
  able to use the 🍄 emoji that they clearly want).

  + Resolution: we're proposing ASCII to keep the protocol simple and to
    match TXT records.  These are not intended to be end user messages
    but rather administrative hints for operators.

  + resulting text:

    A variable length, ASCII encoded, EXTRA-TEXT field holding
    additional textual information. It may be zero length when no
    additional textual information is included.

1.6 DONE I am not sure I agree with these recommendations:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  4.1.5.  Extended DNS Error Code 5 - Unsupported DNSKEY Algorithm

  The resolver attempted to perform DNSSEC validation, but a DNSKEY
  RRSET contained only unknown algorithms.  The R flag should not be
  set.

  4.1.6.  Extended DNS Error Code 6 - Unsupported DS Algorithm

  The resolver attempted to perform DNSSEC validation, but a DS RRSET
  contained only unknown algorithms.  The R flag should not be set.

  This seems like a case where a stub resolver may want to try another
  full-service resolver that may support more algorithms, so perhaps the
  text "The R flag should not be set" should be removed.

  + Resolution: we agree; text changed

1.7 DONE How to add multiple EDE
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  While the draft suggests that it is possible to add multiple EDE to a
  message:

      o RESPONSE-CODE, 2 octets: this SHOULD be a copy of the RCODE from
  the primary DNS packet.  When including multiple extended error EDNS0
  records in a response in order to provide additional error
  information, the RESPONSE-CODE MAY be a different RCODE.

  It is not explicit about how this is done. If the intention is for a
  resolver to forward this back to a stub resolver, then it needs to be
  mentioned, probably in section 3, something like this. However, then
  we also need some text describing how a client behaves when presented
  with multiple EDE.

  + Tried to clean this up with new text about multiple inserts.  Please
    see what you think!

1.8 CANCELED Implementation required
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  Finally, do we have any implementations of this draft? It seems pretty
  straightforward, but I don't actually think that it's possible to
  develop interoperable code with the draft as it stands today. I
  vaguely recall that we wanted running code going forward to try to
  starve the DNS camel...

  + issue response moved to a generic multiple-people issue

2 Peter Spacek
==============

  I believe the document is not ready for multiple reasons:

2.1 DONE EDNS handling as mentioned elsewhere in this thread
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  + Response: we believe we have handled all other issues; please let us
    know if you disagree.

2.2 CANCELED lack of implementation reports
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  With my implementer hat on, this might not be as easy to implement as
  we would like. An actual implementation might uncover various weird
  corner cases so I'm against advacing this document before there are
  implementations for *real* resolvers/DNSSEC validators.

  + issue response moved to a generic multiple-people issue

3 Joe Abley
===========

3.1 DONE Fix IANA registry template
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  >> With IANA registry requests, I may be wrong here, but I thought we
  >> had some (boilerplate?) language about how IANA is asked to operate
  >> the registry: what criteria judge acceptance. Is it like the OID
  >> and basically open (hair oil) slather, or is it only at WG RFC
  >> documented request?  > > If there is a better template, we'd
  >> certainly like to hear it.

  RFC 8126 contains exactly the guidance you're looking for. When
  creating a new registry you not only need to specify the schema and
  the initial rows to populate the new table with (as you started in
  section 5.2, although the formatting of the table is a bit
  horrifying); you also need to specify the name of the registry,
  required information for future additions and the registration policy.

  Happy to contribute some text if that seems useful.

  + Response: cleaned up and tried to make it pretty

4 Donald Eastlake
=================

  I like the Extended Error Code using EDNS idea. This was effectively
  what was done with TSIG and TKEY that have an expanded Error field
  inside the RR. However:

4.1 DONE two dimensional table is unneeded
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

   >> I don't see any reason for the complex two-dimensional table to
  new error codes. Given that 16 bits is available for "INFO-CODE"
  (which I think, to follow the DNS nomenclature used in TSIG and TKEY,
  should just be called "Error"), I don't see why these extended error
  codes, which provide more detail beyond the top level Error code
  value, can't be from the single unified DNS error code table. That
  way, wherever you get a DNS Error code (from RCODE or the EDNS
  extended error field or the TSIG or TKEY error fields or wherever,
  there is just one table to look it up in. For example, you could
  Reserve 4096 through 8191 for this purpose, which is probably enough
  values :-)

  + response: this was discussed multiple times in previous working
    group meetings and on the mailing list, and the general consensus
    was to use a multiple-lookup table.  Continue reading into the next
    issue for further information on a decent compromise:

4.2 DONE rcodes are only 4 bits
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  >> Since RCODEs are 4 bits, I don't see why a 16-bit RESPONSE-CODE
  field is required. Even if you want to be able to provide additional
  information for the 12-bit error codes of RCODE as extended by base
  EDNS, there is still enough room in the previous 16-bit word which has
  15 unused bits in it. Just move the RESPONSE-CODE up into the previous
  word

  + Response: you're right about the 4 bits of course.  Somehow our
    initial remembrance of this got lost in the double table issue.  So
    to simplify both this issue, and the previous, we've decided to
    merge the two codes into a 4-bit RCODE value and a 12-bit INFO-CODE
    value.  This actually allows implementers to treat it easily as two
    codes, if they'd prefer, or a single 16b-bit code if they'd rather
    handle it that way while preserving interoperability between
    everything.

-- 
Wes Hardaker
USC/ISI

---

From: Vladimír Čunát <[email-masked]>
Date: Fri, 21 Dec 2018 17:29:18 +0100

Hello!

Unsupported algorithms (4.1.5 + 4.1.6):
I'm a bit confused why these conditions are meant for SERVFAIL.  Has
something changed?
https://tools.ietf.org/html/rfc4035#section-5.2 (paragraph "If the
validator does not support...")

--Vladimir (knot-resolver)

---

From: Jared Mauch <[email-masked]>
Date: Fri, 21 Dec 2018 11:49:00 -0500

> On Dec 20, 2018, at 6:20 PM, Wes Hardaker <[email-masked]> wrote:
> 

We went through some of this in IDR about routing protocols and how to leave
a partner device a message.  UTF-8 is the supported method.  7-bit ASCII lacks
language support.

- Jared

---

From: Joe Abley <[email-masked]>
Date: Fri, 21 Dec 2018 12:25:28 -0500

> a partner device a message.  UTF-8 is the supported method.  7-bit ASCII lacks

Isn't there some standing IAB advice on this kind of thing, and doesn't it strongly recommend UTF-8? Using UTF-8 would also simplify the transformation of DNS wire-format parameters into other formats like XML or JSON. Administrative hints for operators still need to be human-readable (operators are humans, too!)

All of these issues and more are elegantly eliminated by specifying UTF-8. Conversely, I don't see a problem that is solved by choosing US-ASCII.

Joe

---

From: Wes Hardaker <[email-masked]>
Date: Fri, 21 Dec 2018 09:52:28 -0800

> a partner device a message.  UTF-8 is the supported method.  7-bit ASCII lacks

That's a fair point.  I'd be happy with a change to it.  Any others with
thoughts or opinions?
-- 
Wes Hardaker
USC/ISI

---

From: Warren Kumari <[email-masked]>
Date: Fri, 21 Dec 2018 15:28:07 -0500

On Fri, Dec 21, 2018 at 12:52 PM Wes Hardaker <[email-masked]> wrote:

> That's a fair point.  I'd be happy with a change to it.

+1. Wes and I had a chat about this before specifying ASCII - he was all
for specifying UTF-8, I suggested ASCII because it is the "standard" in
DNS, and I was arguing for simplicity.

'm happy to be wrong though!
W

> Any others with
> thoughts or opinions?
> --
> Wes Hardaker
> USC/ISI
>
> _______________________________________________
> DNSOP mailing list
> [email-masked]
> https://www.ietf.org/mailman/listinfo/dnsop
>

-- 
I don't think the execution is relevant when it was obviously a bad idea in
the first place.
This is like putting rabid weasels in your pants, and later expressing
regret at having chosen those particular rabid weasels and that pair of
pants.
   ---maf

---

From: "Patrik Fältström" <[email-masked]>
Date: Fri, 21 Dec 2018 22:31:46 +0100

On 21 Dec 2018, at 21:28, Warren Kumari wrote:

> On Fri, Dec 21, 2018 at 12:52 PM Wes Hardaker <[[email-masked]](<mailto:[email-masked]>)> wrote:
>
>> Jared Mauch <[[email-masked]](<mailto:[email-masked]>)> writes:
>>
> +1. Wes and I had a chat about this before specifying ASCII - he was all for specifying UTF-8, I suggested ASCII because it is the "standard" in DNS, and I was arguing for simplicity.

RFC2130, updated by RFC6055.

Be careful though as UTF-8 is only an encoding. Matching or comparing strings in UTF-8 is not something that should be done without a bunch of extra rules. See IDN.

But for "display strings", perfect!

UTF-8 please!

   Patrik

---

From: Donald Eastlake <[email-masked]>
Date: Fri, 21 Dec 2018 21:04:08 -0500

Hi,

While it is not exactly what I would want, I am satisfied with the
changes below and consider my comments resolved.

Thanks,
Donald
===============================
 Donald E. Eastlake 3rd   +1-508-333-2270 (cell)
 1424 Pro Shop Court, Davenport, FL 33896 USA
 [email-masked]