So far, everything looks like a bug in the dns ...
Take a simple local file:
cat /lib/ndb/local
database=
file=/lib/ndb/local
file=/lib/ndb/common

dom=test.local soa=
refresh=3600 ttl=3600
ns=server.test.local

dom=_ldap._tcp.test.local soa=
refresh=3600 ttl=3600
srv=server.test.local pri=0 weight=0 port=389

ip=192.168.0.193 sys=server dom=server.test.local

From plan9 everything looks fine:

cpu% dnsquery
> server.test.local
server.test.local ip 192.168.0.193
> _ldap._tcp.test.local srv
_ldap._tcp.test.local srv 0 0 389 server.test.local

But not from linux, not from windows, access to SRV records can not be obtained ..
Linux output(Gentoo, bind-tools 9.7.3):

krok@krok ~ $ nslookup
> server 192.168.0.193
Default server: 192.168.0.193
Address: 192.168.0.193#53
> set q=srv
> _ldap._tcp.test.local
;; Warning: Message parser reports malformed message packet.
Server: 192.168.0.193
Address: 192.168.0.193#53

*** Can't find _ldap._tcp.test.local: No answer

Windows output(Windows Server 2003):

Address: 192.168.0.193

> set q=srv
> _ldap._tcp.test.local
Server: ns.rit.com
Address: 192.168.0.193

_ldap._tcp.test.local SRV service location:
priority = 0
weight = 0
port = 389
svr hostname = Invalid Name at offset 57!


*** Error: record size incorrect (-391819 != 24)

_ldap._tcp.test.local SRV service location:
priority = 0
weight = 0
port = 389
svr hostname = Invalid Name at offset 57!


*** Error: record size incorrect (-391819 != 24)

*** ns.rit.com can't find _ldap._tcp.test.local: Unspecified error

Does anyone have ideas how to fix the situation?