[Freeipa-devel] Generic support for unknown DNS RR types (RFC 3597)
Simo Sorce
simo at redhat.com
Tue Mar 10 14:53:22 UTC 2015
On Tue, 2015-03-10 at 15:32 +0100, Petr Spacek wrote:
> Hello,
>
> I would like to discuss Generic support for unknown DNS RR types (RFC 3597
> [0]). Here is the proposal:
>
> LDAP schema
> ===========
> - 1 new attribute:
> ( <OID> NAME 'GenericRecord' DESC 'unknown DNS record, RFC 3597' EQUALITY
> caseIgnoreIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
>
> The attribute should be added to existing idnsRecord object class as MAY.
>
> This new attribute should contain data encoded according to RFC 3597 section
> 5 [5]:
>
> The RDATA section of an RR of unknown type is represented as a
> sequence of white space separated words as follows:
>
> The special token \# (a backslash immediately followed by a hash
> sign), which identifies the RDATA as having the generic encoding
> defined herein rather than a traditional type-specific encoding.
>
> An unsigned decimal integer specifying the RDATA length in octets.
>
> Zero or more words of hexadecimal data encoding the actual RDATA
> field, each containing an even number of hexadecimal digits.
>
> If the RDATA is of zero length, the text representation contains only
> the \# token and the single zero representing the length.
>
> Examples from RFC:
> a.example. CLASS32 TYPE731 \# 6 abcd (
> ef 01 23 45 )
> b.example. HS TYPE62347 \# 0
> e.example. IN A \# 4 0A000001
> e.example. CLASS1 TYPE1 10.0.0.2
>
>
> Open questions about LDAP format
> ================================
> Should we include "\#" constant? We know that the attribute contains record in
> RFC 3597 syntax so it is not strictly necessary.
>
> I think it would be better to follow RFC 3597 format. It allows blind
> copy&pasting from other tools, including direct calls to python-dns.
>
> It also eases writing conversion tools between DNS and LDAP format because
> they do not need to change record values.
>
>
> Another question is if we should explicitly include length of data represented
> in hexadecimal notation as a decimal number. I'm very strongly inclined to let
> it there because it is very good sanity check and again, it allows us to
> re-use existing tools including parsers.
>
> I will ask Uninett.no for standardization after we sort this out (they own the
> OID arc we use for DNS records).
>
>
> Attribute usage
> ===============
> Every DNS RR type has assigned a number [1] which is used on wire. RR types
> which are unknown to the server cannot be named by their mnemonic/type name
> because server would not be able to do name->number conversion and to generate
> DNS wire format.
>
> As a result, we have to encode the RR type number somehow. Let's use attribute
> sub-types.
>
> E.g. a record with type 65280 and hex value 0A000001 will be represented as:
> GenericRecord;TYPE65280: \# 4 0A000001
>
>
> CLI
> ===
> $ ipa dnsrecord-add zone.example owner \
> --generic-type=65280 --generic-data='\# 4 0A000001'
>
> $ ipa dnsrecord-show zone.example owner
> Record name: owner
> TYPE65280 Record: \# 4 0A000001
>
>
> ACK? :-)
Almost.
We should refrain from using subtypes when not necessary, and in this
case it is not necessary.
Use:
GenericRecord: 65280 \# 4 0A000001
Done!
Simo.
>
> Related tickets
> ===============
> https://fedorahosted.org/freeipa/ticket/4939
> https://fedorahosted.org/bind-dyndb-ldap/ticket/157
>
> [0] http://tools.ietf.org/html/rfc3597
> [1]
> http://www.iana.org/assignments/dns-parameters/dns-parameters.xhtml#dns-parameters-4
> [5] http://tools.ietf.org/html/rfc3597#section-5
>
> --
> Petr^2 Spacek
>
--
Simo Sorce * Red Hat, Inc * New York
More information about the Freeipa-devel
mailing list