On 2016-02-21, Imre Oolberg <[email protected]> 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.

