Hi!

On 2016-02-22 20:08, Stuart Henderson wrote:
On 2016-02-21, Imre Oolberg <i...@auul.pri.ee> wrote:
Hi!

I am in the middle of implementing https://www.dns-oarc.net/tools/dsc/ while on OpenBSD is running nameserver process i.e. there needs to be
also collector part of DSC and I am not succeeding compiling it.
Platform is OpenBSD v 5.8 amd64 and source is dsc-201502251630.tar.gz.
After unpacking i get

imre-obsd-58-rec:~/dsc/l/dsc-201502251630/collector# make
...
cc -g -Wall -DUSE_IPV6=1 -g -O2  -g -Wall -DUSE_IPV6=1 -g -O2    -c
base64.c
cc -g -Wall -DUSE_IPV6=1 -g -O2  -g -Wall -DUSE_IPV6=1 -g -O2    -c
generic_counter.c
cc -g -Wall -DUSE_IPV6=1 -g -O2  -g -Wall -DUSE_IPV6=1 -g -O2    -c
pcap.c
cc -g -Wall -DUSE_IPV6=1 -g -O2  -g -Wall -DUSE_IPV6=1 -g -O2    -c
ncap.c
cc -g -Wall -DUSE_IPV6=1 -g -O2  -g -Wall -DUSE_IPV6=1 -g -O2    -c
dns_protocol.c
dns_protocol.c:9:33: error: arpa/nameser_compat.h: No such file or
directory
*** Error 1 in dsc (<sys.mk>:87 'dns_protocol.o')
*** Error 1 in /root/dsc/l/dsc-201502251630/collector (Makefile:2
'all')

So i found that probably i need libbind package and continuing in
collector/dsc directory like this

imre-obsd-58-rec:~/dsc/l/dsc-201502251630/collector/dsc# ./configure
CFLAGS="-I/usr/local/include/bind" LDFLAGS="-L/usr/local/lib/libbind"

i get further (it think almost to the end on compilation)

imre-obsd-58-rec:~/dsc/l/dsc-201502251630/collector/dsc# make
...
cc -g -Wall -DUSE_IPV6=1 -I/usr/local/include/bind       -g -Wall
-DUSE_IPV6=1 -I/usr/local/include/bind         -c config_hooks.c
cc -g -Wall -DUSE_IPV6=1 -I/usr/local/include/bind       -g -Wall
-DUSE_IPV6=1 -I/usr/local/include/bind         -c hashtbl.c
cc -g -Wall -DUSE_IPV6=1 -I/usr/local/include/bind       -g -Wall
-DUSE_IPV6=1 -I/usr/local/include/bind         -c lookup3.c
cc -g -Wall -DUSE_IPV6=1 -I/usr/local/include/bind       -g -Wall
-DUSE_IPV6=1 -I/usr/local/include/bind         -c xmalloc.c
cc -g -Wall -DUSE_IPV6=1 -I/usr/local/include/bind       -g -Wall
-DUSE_IPV6=1 -I/usr/local/include/bind         -c inX_addr.c
c++ -o dsc base64.o generic_counter.o pcap.o ncap.o dns_protocol.o
dns_message.o  ip_message.o  daemon.o  md_array.o  null_index.o
qtype_index.o  qclass_index.o  tld_index.o  country_index.o
rcode_index.o  qnamelen_index.o  qname_index.o  msglen_index.o
client_ipv4_addr_index.o  client_ipv4_net_index.o
md_array_xml_printer.o  ip_direction_index.o  ip_proto_index.o
ip_version_index.o certain_qnames_index.o query_classification_index.o
idn_qname_index.o  edns_version_index.o  edns_bufsiz_index.o
do_bit_index.o  rd_bit_index.o  tc_bit_index.o  qr_aa_bits_index.o
opcode_index.o  transport_index.o  dns_ip_version_index.o
dns_source_port_index.o  ParseConfig.o  config_hooks.o  hashtbl.o
lookup3.o  xmalloc.o  inX_addr.o  -L/usr/local/lib/libbind    -lpcap
             ../TmfBase/Hapy/src/.libs/libHapy.a
dns_protocol.o: In function `grok_question':
/root/dsc/l/dsc-201502251630/collector/dsc/dns_protocol.c:93: warning:
warning: strcpy() is almost always misused, please use strlcpy()
pcap.o: In function `handle_tcp':
/root/dsc/l/dsc-201502251630/collector/dsc/pcap.c:552: warning:
warning: sprintf() is often misused, please use snprintf()
query_classification_index.o: In function `a_for_a':

/root/dsc/l/dsc-201502251630/collector/dsc/query_classification_index.c:71:
undefined reference to `__inet_aton'
inX_addr.o: In function `inXaddr_ntop':
/root/dsc/l/dsc-201502251630/collector/dsc/inX_addr.c:28: undefined
reference to `__inet_ntop'
/root/dsc/l/dsc-201502251630/collector/dsc/inX_addr.c:31: undefined
reference to `__inet_ntop'
inX_addr.o: In function `inXaddr_pton':
/root/dsc/l/dsc-201502251630/collector/dsc/inX_addr.c:41: undefined
reference to `__inet_pton'
/root/dsc/l/dsc-201502251630/collector/dsc/inX_addr.c:45: undefined
reference to `__inet_pton'
collect2: ld returned 1 exit status
*** Error 1 in /root/dsc/l/dsc-201502251630/collector/dsc (Makefile:65
'dsc')

For example text around query_classification_index.c:71 reads like this

static int
a_for_a(const dns_message * m)
{
     struct in_addr a;
     if (m->qtype != T_A)
         return 0;
     if (inet_aton(m->qname, &a))
         return CLASS_A_FOR_A;
     return 0;
}

I would be very thankful if you could point to me how to solve it and
progress from here to ./dsc binary.


Imre

PS I searched ports collection for similarities and actually found file

/usr/ports/pobj/dnstop-20140915/dnstop-20140915/inX_addr.c

which is very similar to

/root/dsc/l/dsc-201502251630/collector/dsc/inX_addr.c

and has some inet_* funtsions in it. dnstop from ports compiles and
runs fine. So i think i must be missing something obvious here. Needless to say i cant compile and read source but still i try to be attentive to
your answer! :)



You're going to need some things like

(cflags/cxxflags)
-nostdinc -I/usr/local/include/bind -I/usr/include -I/usr/local/include

(ldflags)
-L/usr/local/lib/libbind -Wl,-rpath,/usr/local/lib/libbind

It may still not work, the BIND resolver and the system resolver have
conflicts in some areas. Some programs work like this, but it's more
luck than anything else.

Alternatively try looking at old versions, they have some code to
support OpenBSD's resolver, but it's not clear whether it was
unfinished, or whether it used to work and got broken with updates.

Thank you for the answer, i tried like this and with every dsc .tgz listed

# ./configure CFLAGS="-nostdinc -I/usr/local/include/bind -I/usr/include -I/usr/local/include" LDFLAGS="-L/usr/local/lib/libbind -Wl,-rpath,/usr/local/lib/libbind"

but got same result. I decided to write to dsc-users list and referred to here, and good people there reacted and said they will soon look at it and most probably can sort it out

https://lists.dns-oarc.net/pipermail/dsc-users/2016-February/000005.html

I am in no position to expect a solution but of course i would be glad if one comes along. I will let know how it goes.


Best regards,

Imre

Reply via email to