Re: unescaped double quotes in TXT record

Hugo Monteiro <[email protected]> Tue, 25 May 2010 13:36:18 +0100
Newsgroups gmane.network.djbdns
Message-ID <[email protected]>
On 05/25/2010 07:09 AM, Daryl Tester wrote:
> (* Reply to dev null'd *)
>
> Hugo Monteiro wrote:
>
>> It's not a dig-ism. If it was, it would also show up in the dig 
>> performed on the named server, right?
>
> Mea culpa - I missed your named setup/response in your initial message.
>
> However, I'm still not sure it's a not a dig-ism (potentially).  I
> build a generic record thusly -
>
> # :fqdn:n:rdata:ttl:timestamp:lo
> :hp_4050._ipp._tcp.testernet:16:\160"qtotl=1" "rp=printers/xerox6130n" 
> "ty=Xerox Phaser 6130N" "product=(Phaser 6130N)" 
> "pdl=application/postscript":86400
>
> I fire off a dig query (response trimmed):
>
> # dig txt hp_4050._ipp._tcp.testernet @127.0.0.1
> ...
> ;; ANSWER SECTION:
> hp_4050._ipp._tcp.testernet. 86400 IN   TXT     "\"qtotl=1\" 
> \"rp=printers/xerox6130n\" \"ty=Xerox Phaser 6130N\" \"product=(Phaser 
> 6130N)\" \"pdl=application/postscript\""
>
> I tcpdump the same query:
>
> 15:18:32.775440 IP 127.0.0.1.53 > 127.0.0.1.46418: 2993*- 1/1/1 TXT 
> ""qtotl=1" "rp=printers/xerox6130n" "ty=Xerox Phaser 6130N" 
> "product=(Phaser 6130N)" "pdl=application/postscript"" (203)
>        0x0000:  4500 00e7 0000 4000 4011 3c04 7f00 0001  E.....@.@.<.....
>        0x0010:  7f00 0001 0035 b552 00d3 fee6 0bb1 8500  .....5.R........
>        0x0020:  0001 0001 0001 0001 0768 705f 3430 3530  .........hp_4050
>        0x0030:  045f 6970 7004 5f74 6370 0974 6573 7465  ._ipp._tcp.teste
>        0x0040:  726e 6574 0000 1000 01c0 0c00 1000 0100  rnet............
>        0x0050:  0151 8000 7170 2271 746f 746c 3d31 2220  .Q..qp"qtotl=1".
>        0x0060:  2272 703d 7072 696e 7465 7273 2f78 6572  "rp=printers/xer
>        0x0070:  6f78 3631 3330 6e22 2022 7479 3d58 6572  ox6130n"."ty=Xer
>        0x0080:  6f78 2050 6861 7365 7220 3631 3330 4e22  ox.Phaser.6130N"
>        0x0090:  2022 7072 6f64 7563 743d 2850 6861 7365  ."product=(Phase
>        0x00a0:  7220 3631 3330 4e29 2220 2270 646c 3d61  r.6130N)"."pdl=a
>        0x00b0:  7070 6c69 6361 7469 6f6e 2f70 6f73 7473  pplication/posts
>        0x00c0:  6372 6970 7422 c01e 0002 0001 0003 f480  cript"..........
>        0x00d0:  0005 026e 73c0 1ec0 b600 0100 0100 03f4  ...ns...........
>        0x00e0:  8000 047f 0000 01                        .......
>
> No leading/trailing or backquoted quotes in the hexdumped query 
> (you'll note that
> tcpdump also surrounds the text response with quotes).  dnsq produces 
> the following:
>
> # dnsq txt hp_4050._ipp._tcp.testernet 127.0.0.1
> 16 hp_4050._ipp._tcp.testernet:
> 203 bytes, 1+1+1+1 records, response, authoritative, noerror
> query: 16 hp_4050._ipp._tcp.testernet
> answer: hp_4050._ipp._tcp.testernet 86400 16 
> p"qtotl=1"\040"rp=printers/xerox6130n"\040"ty=Xerox\040Phaser\0406130N"\040"product=(Phaser\0406130N)"\040"pdl=application/postscript" 
>
>
> Are you using generic records or something else (potentially txt?).
>


Hello Daryl,

I have tried both TXT and generic records and the result was always the 
same.


>> also, dnsq response, for the tinydns server is
>>
>> $ dnsq txt hp_4050._ipp._tcp.dev.hmonteiro.net 192.168.56.102
>> 16 hp_4050._ipp._tcp.dev.hmonteiro.net:
>> 252 bytes, 1+1+2+2 records, response, authoritative, noerror
>> query: 16 hp_4050._ipp._tcp.dev.hmonteiro.net
>> answer: hp_4050._ipp._tcp.dev.hmonteiro.net 60 16 
>> {"qtotl=1"\040"rp=printers/HP"\040"ty=HP\040LaserJet\0404050\040Series\040PS"\040"product=(HP\040LaserJet\0404050\040Series)"\040"pdl=application/postscript" 
>>
>> authority: dev.hmonteiro.net 604800 NS ns1.dev.hmonteiro.net
>> additional: ns1.dev.hmonteiro.net 604800 A 192.168.56.102
>
> Isn't this the correct response you're seeking?
>
>> $ dnsq txt xerox_phaser_6130n._ipp._tcp.dev.hmonteiro.net 192.168.56.103
>> 16 xerox_phaser_6130n._ipp._tcp.dev.hmonteiro.net:
>> 212 bytes, 1+1+1+1 records, response, authoritative, weird ra, noerror
>> query: 16 xerox_phaser_6130n._ipp._tcp.dev.hmonteiro.net
>> answer: xerox_phaser_6130n._ipp._tcp.dev.hmonteiro.net 604800 16 
>> \007qtotl=1\026rp=printers/xerox6130n\025ty=Xerox\040Phaser\0406130N\026product=(Phaser\0406130N)\032pdl=application/postscript 
>>
>> authority: dev.hmonteiro.net 604800 NS ns2.dev.hmonteiro.net
>> additional: ns2.dev.hmonteiro.net 604800 A 192.168.56.103
>>
>> i'm also finding the bind response weird .. \007 ?  \026 ?  \025 ?
>
> They look like lengths of the individual text portions - i.e.
>
> 7: qtotl=1
> 22: rp=printers/xerox6130n
> 21: ty=Xerox Phaser 6130N
> etc.
>
> (note octal to decimal conversion).
>


Aye, i missed that one. Good catch.


>> (but IT WORKS)
>
> Hmmm, OK, looking at Section 6 of 
> <http://files.dns-sd.org/draft-cheshire-dnsext-dns-sd.txt>
> shows that it's supposed to be in the format that the bind server is 
> returning (that is,
> each key/value pair needs to have a length byte preceeding it).  I 
> suspect the format you're
> feeding into djbdns doesn't have that.
>


I probably should have paid more attention to the contents of the draft. 
Indeed you seem to be right.



>
> (And yippee, another protocol overloading the TXT record).
>

Looks like it, but the question now is: Is there any way to solve 
this?... probably a well crafted generic record can do it..

I've also started to think about delegating _tcp.dev.hmonteiro.net zone 
to a bind server and be done with it, but it sure would feel a lot 
better if it could be done using tiny.


Thank you so much for your input and clarifications.

R's,

Hugo Monteiro.


-- 
fct.unl.pt:~# cat .signature

Hugo Monteiro
Email	 : [email protected]
Telefone : +351 212948300 Ext.15307
Web      : http://hmonteiro.net

Divisão de Informática
Faculdade de Ciências e Tecnologia da
		   Universidade Nova de Lisboa
Quinta da Torre   2829-516 Caparica   Portugal
Telefone: +351 212948596   Fax: +351 212948548
www.fct.unl.pt                [email protected]

fct.unl.pt:~# _