From 9249e798893812cebd28f7391a3ab26e5bfc02b9 Mon Sep 17 00:00:00 2001 From: Christoph Date: Tue, 28 May 2019 11:10:19 +0200 Subject: [PATCH] Update 'NONE-CKUBU'. --- NONE-CKUBU/bin/admin-stuff | 2 +- NONE-CKUBU/bin/manage-gw-config | 2 +- NONE-CKUBU/bin/monitoring | 2 +- NONE-CKUBU/cron_root.NONE-CKUBU | 2 +- NONE-CKUBU/hostname.NONE-CKUBU | 2 +- NONE-CKUBU/hosts.NONE-CKUBU | 2 +- NONE-CKUBU/interfaces.NONE-CKUBU | 2 +- NONE-CKUBU/ipt-firewall/interfaces_ipv6.conf | 45 + .../ipt-firewall/load_modules_ipv4.conf | 2 +- NONE-CKUBU/ipt-firewall/main_ipv4.conf | 100 + .../ipt-firewall/post_decalrations.conf | 50 + NONE-CKUBU/mailname.NONE-CKUBU | 2 +- NONE-CKUBU/main.cf.NONE-CKUBU | 6 +- NONE-CKUBU/peers/dsl-provider.DSL | 84 + NONE-CKUBU/peers/dsl-provider.VDSL | 84 + NONE-CKUBU/sbin/check_net.sh | 623 +++ NONE-CKUBU/sbin/ip6t-firewall-gateway | 3852 +++++++++++++++++ NONE-CKUBU/sbin/ipt-firewall-gateway | 485 ++- NONE-CKUBU/sbin/netconfig.sh | 993 +++++ NONE-CKUBU/src/check_net | 2 +- NONE-CKUBU/src/djbdns/djbdns-1.05/CHANGES | 376 ++ NONE-CKUBU/src/djbdns/djbdns-1.05/FILES | 254 ++ NONE-CKUBU/src/djbdns/djbdns-1.05/Makefile | 1226 ++++++ NONE-CKUBU/src/djbdns/djbdns-1.05/README | 7 + NONE-CKUBU/src/djbdns/djbdns-1.05/SYSDEPS | 10 + NONE-CKUBU/src/djbdns/djbdns-1.05/TARGETS | 241 ++ NONE-CKUBU/src/djbdns/djbdns-1.05/TINYDNS | 25 + NONE-CKUBU/src/djbdns/djbdns-1.05/TODO | 12 + NONE-CKUBU/src/djbdns/djbdns-1.05/VERSION | 1 + NONE-CKUBU/src/djbdns/djbdns-1.05/alloc.a | Bin 0 -> 21880 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/alloc.c | 31 + NONE-CKUBU/src/djbdns/djbdns-1.05/alloc.h | 8 + NONE-CKUBU/src/djbdns/djbdns-1.05/alloc.o | Bin 0 -> 1920 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/alloc_re.c | 17 + NONE-CKUBU/src/djbdns/djbdns-1.05/alloc_re.o | Bin 0 -> 1544 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/auto-str | Bin 0 -> 7160 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/auto-str.c | 40 + NONE-CKUBU/src/djbdns/djbdns-1.05/auto-str.o | Bin 0 -> 2560 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/auto_home.c | 3 + NONE-CKUBU/src/djbdns/djbdns-1.05/auto_home.h | 6 + NONE-CKUBU/src/djbdns/djbdns-1.05/auto_home.o | Bin 0 -> 1063 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/axfr-get | Bin 0 -> 29256 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/axfr-get.c | 382 ++ NONE-CKUBU/src/djbdns/djbdns-1.05/axfr-get.o | Bin 0 -> 24296 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/axfrdns | Bin 0 -> 41792 bytes .../src/djbdns/djbdns-1.05/axfrdns-conf | Bin 0 -> 15784 bytes .../src/djbdns/djbdns-1.05/axfrdns-conf.c | 71 + .../src/djbdns/djbdns-1.05/axfrdns-conf.o | Bin 0 -> 5520 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/axfrdns.c | 378 ++ NONE-CKUBU/src/djbdns/djbdns-1.05/axfrdns.o | Bin 0 -> 22536 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/buffer.a | Bin 0 -> 16434 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/buffer.c | 10 + NONE-CKUBU/src/djbdns/djbdns-1.05/buffer.h | 59 + NONE-CKUBU/src/djbdns/djbdns-1.05/buffer.o | Bin 0 -> 1224 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/buffer_1.c | 5 + NONE-CKUBU/src/djbdns/djbdns-1.05/buffer_1.o | Bin 0 -> 1272 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/buffer_2.c | 5 + NONE-CKUBU/src/djbdns/djbdns-1.05/buffer_2.o | Bin 0 -> 1272 bytes .../src/djbdns/djbdns-1.05/buffer_copy.c | 16 + .../src/djbdns/djbdns-1.05/buffer_copy.o | Bin 0 -> 1504 bytes .../src/djbdns/djbdns-1.05/buffer_get.c | 67 + .../src/djbdns/djbdns-1.05/buffer_get.o | Bin 0 -> 2608 bytes .../src/djbdns/djbdns-1.05/buffer_put.c | 88 + .../src/djbdns/djbdns-1.05/buffer_put.o | Bin 0 -> 3224 bytes .../src/djbdns/djbdns-1.05/buffer_read.c | 7 + .../src/djbdns/djbdns-1.05/buffer_read.o | Bin 0 -> 1344 bytes .../src/djbdns/djbdns-1.05/buffer_write.c | 7 + .../src/djbdns/djbdns-1.05/buffer_write.o | Bin 0 -> 1344 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/byte.a | Bin 0 -> 38338 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/byte.h | 13 + NONE-CKUBU/src/djbdns/djbdns-1.05/byte_chr.c | 20 + NONE-CKUBU/src/djbdns/djbdns-1.05/byte_chr.o | Bin 0 -> 1392 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/byte_copy.c | 14 + NONE-CKUBU/src/djbdns/djbdns-1.05/byte_copy.o | Bin 0 -> 1320 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/byte_cr.c | 16 + NONE-CKUBU/src/djbdns/djbdns-1.05/byte_cr.o | Bin 0 -> 1328 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/byte_diff.c | 16 + NONE-CKUBU/src/djbdns/djbdns-1.05/byte_diff.o | Bin 0 -> 1392 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/byte_zero.c | 13 + NONE-CKUBU/src/djbdns/djbdns-1.05/byte_zero.o | Bin 0 -> 1296 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/cache.c | 207 + NONE-CKUBU/src/djbdns/djbdns-1.05/cache.h | 12 + NONE-CKUBU/src/djbdns/djbdns-1.05/cache.o | Bin 0 -> 5888 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/cachetest | Bin 0 -> 11728 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/cachetest.c | 32 + NONE-CKUBU/src/djbdns/djbdns-1.05/cachetest.o | Bin 0 -> 2312 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/case.h | 13 + .../src/djbdns/djbdns-1.05/case_diffb.c | 18 + .../src/djbdns/djbdns-1.05/case_diffb.o | Bin 0 -> 1296 bytes .../src/djbdns/djbdns-1.05/case_diffs.c | 17 + .../src/djbdns/djbdns-1.05/case_diffs.o | Bin 0 -> 1280 bytes .../src/djbdns/djbdns-1.05/case_lowerb.c | 12 + .../src/djbdns/djbdns-1.05/case_lowerb.o | Bin 0 -> 1256 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/cdb.a | Bin 0 -> 9842 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/cdb.c | 136 + NONE-CKUBU/src/djbdns/djbdns-1.05/cdb.h | 37 + NONE-CKUBU/src/djbdns/djbdns-1.05/cdb.o | Bin 0 -> 3728 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/cdb_hash.c | 21 + NONE-CKUBU/src/djbdns/djbdns-1.05/cdb_hash.o | Bin 0 -> 1360 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/cdb_make.c | 152 + NONE-CKUBU/src/djbdns/djbdns-1.05/cdb_make.h | 39 + NONE-CKUBU/src/djbdns/djbdns-1.05/cdb_make.o | Bin 0 -> 4288 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/chkshsgr | Bin 0 -> 4664 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/chkshsgr.c | 10 + NONE-CKUBU/src/djbdns/djbdns-1.05/chkshsgr.o | Bin 0 -> 1544 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/choose | 20 + NONE-CKUBU/src/djbdns/djbdns-1.05/choose.sh | 18 + NONE-CKUBU/src/djbdns/djbdns-1.05/compile | 3 + NONE-CKUBU/src/djbdns/djbdns-1.05/conf-cc | 3 + NONE-CKUBU/src/djbdns/djbdns-1.05/conf-home | 4 + NONE-CKUBU/src/djbdns/djbdns-1.05/conf-ld | 3 + NONE-CKUBU/src/djbdns/djbdns-1.05/dd.c | 36 + NONE-CKUBU/src/djbdns/djbdns-1.05/dd.h | 6 + NONE-CKUBU/src/djbdns/djbdns-1.05/dd.o | Bin 0 -> 1544 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/direntry.h | 10 + NONE-CKUBU/src/djbdns/djbdns-1.05/direntry.h1 | 10 + NONE-CKUBU/src/djbdns/djbdns-1.05/direntry.h2 | 10 + NONE-CKUBU/src/djbdns/djbdns-1.05/dns.a | Bin 0 -> 67094 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/dns.h | 97 + NONE-CKUBU/src/djbdns/djbdns-1.05/dns_dfd.c | 69 + NONE-CKUBU/src/djbdns/djbdns-1.05/dns_dfd.o | Bin 0 -> 2144 bytes .../src/djbdns/djbdns-1.05/dns_domain.c | 74 + .../src/djbdns/djbdns-1.05/dns_domain.o | Bin 0 -> 2552 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/dns_dtda.c | 35 + NONE-CKUBU/src/djbdns/djbdns-1.05/dns_dtda.o | Bin 0 -> 1904 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/dns_ip.c | 75 + NONE-CKUBU/src/djbdns/djbdns-1.05/dns_ip.o | Bin 0 -> 3600 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/dns_ip6.c | 103 + NONE-CKUBU/src/djbdns/djbdns-1.05/dns_ip6.o | Bin 0 -> 4840 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/dns_ipq.c | 71 + NONE-CKUBU/src/djbdns/djbdns-1.05/dns_ipq.o | Bin 0 -> 2832 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/dns_ipq6.c | 72 + NONE-CKUBU/src/djbdns/djbdns-1.05/dns_ipq6.o | Bin 0 -> 2888 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/dns_mx.c | 49 + NONE-CKUBU/src/djbdns/djbdns-1.05/dns_mx.o | Bin 0 -> 3560 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/dns_name.c | 70 + NONE-CKUBU/src/djbdns/djbdns-1.05/dns_name.o | Bin 0 -> 4192 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/dns_nd.c | 24 + NONE-CKUBU/src/djbdns/djbdns-1.05/dns_nd.o | Bin 0 -> 1776 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/dns_nd6.c | 35 + NONE-CKUBU/src/djbdns/djbdns-1.05/dns_nd6.o | Bin 0 -> 1920 bytes .../src/djbdns/djbdns-1.05/dns_packet.c | 77 + .../src/djbdns/djbdns-1.05/dns_packet.o | Bin 0 -> 2280 bytes .../src/djbdns/djbdns-1.05/dns_random.c | 63 + .../src/djbdns/djbdns-1.05/dns_random.o | Bin 0 -> 3376 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/dns_rcip.c | 85 + NONE-CKUBU/src/djbdns/djbdns-1.05/dns_rcip.o | Bin 0 -> 3864 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/dns_rcrw.c | 131 + NONE-CKUBU/src/djbdns/djbdns-1.05/dns_rcrw.o | Bin 0 -> 5840 bytes .../src/djbdns/djbdns-1.05/dns_resolve.c | 30 + .../src/djbdns/djbdns-1.05/dns_resolve.o | Bin 0 -> 2304 bytes .../src/djbdns/djbdns-1.05/dns_sortip.c | 20 + .../src/djbdns/djbdns-1.05/dns_sortip.o | Bin 0 -> 1600 bytes .../src/djbdns/djbdns-1.05/dns_sortip6.c | 20 + .../src/djbdns/djbdns-1.05/dns_sortip6.o | Bin 0 -> 1592 bytes .../src/djbdns/djbdns-1.05/dns_transmit.c | 367 ++ .../src/djbdns/djbdns-1.05/dns_transmit.o | Bin 0 -> 8672 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/dns_txt.c | 59 + NONE-CKUBU/src/djbdns/djbdns-1.05/dns_txt.o | Bin 0 -> 3272 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/dnscache | Bin 0 -> 66440 bytes .../src/djbdns/djbdns-1.05/dnscache-conf | Bin 0 -> 20072 bytes .../src/djbdns/djbdns-1.05/dnscache-conf.c | 169 + .../src/djbdns/djbdns-1.05/dnscache-conf.o | Bin 0 -> 10368 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/dnscache.c | 479 ++ NONE-CKUBU/src/djbdns/djbdns-1.05/dnscache.o | Bin 0 -> 17648 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/dnsfilter | Bin 0 -> 35192 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/dnsfilter.c | 215 + NONE-CKUBU/src/djbdns/djbdns-1.05/dnsfilter.o | Bin 0 -> 11632 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/dnsip | Bin 0 -> 30752 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/dnsip.c | 40 + NONE-CKUBU/src/djbdns/djbdns-1.05/dnsip.o | Bin 0 -> 3160 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/dnsip6 | Bin 0 -> 32000 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/dnsip6.c | 40 + NONE-CKUBU/src/djbdns/djbdns-1.05/dnsip6.o | Bin 0 -> 3176 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/dnsip6q | Bin 0 -> 35352 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/dnsip6q.c | 43 + NONE-CKUBU/src/djbdns/djbdns-1.05/dnsip6q.o | Bin 0 -> 3456 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/dnsipq | Bin 0 -> 34104 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/dnsipq.c | 43 + NONE-CKUBU/src/djbdns/djbdns-1.05/dnsipq.o | Bin 0 -> 3456 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/dnsmx | Bin 0 -> 31456 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/dnsmx.c | 64 + NONE-CKUBU/src/djbdns/djbdns-1.05/dnsmx.o | Bin 0 -> 4960 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/dnsname | Bin 0 -> 31040 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/dnsname.c | 41 + NONE-CKUBU/src/djbdns/djbdns-1.05/dnsname.o | Bin 0 -> 3016 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/dnsq | Bin 0 -> 42424 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/dnsq.c | 99 + NONE-CKUBU/src/djbdns/djbdns-1.05/dnsq.o | Bin 0 -> 7848 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/dnsqr | Bin 0 -> 37176 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/dnsqr.c | 66 + NONE-CKUBU/src/djbdns/djbdns-1.05/dnsqr.o | Bin 0 -> 6096 bytes .../src/djbdns/djbdns-1.05/dnsroots.global | 13 + NONE-CKUBU/src/djbdns/djbdns-1.05/dnstrace | Bin 0 -> 49264 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/dnstrace.c | 486 +++ NONE-CKUBU/src/djbdns/djbdns-1.05/dnstrace.o | Bin 0 -> 27904 bytes .../src/djbdns/djbdns-1.05/dnstracesort | 53 + .../src/djbdns/djbdns-1.05/dnstracesort.sh | 51 + NONE-CKUBU/src/djbdns/djbdns-1.05/dnstxt | Bin 0 -> 29632 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/dnstxt.c | 33 + NONE-CKUBU/src/djbdns/djbdns-1.05/dnstxt.o | Bin 0 -> 2872 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/droproot.c | 33 + NONE-CKUBU/src/djbdns/djbdns-1.05/droproot.h | 6 + NONE-CKUBU/src/djbdns/djbdns-1.05/droproot.o | Bin 0 -> 3192 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/env.a | Bin 0 -> 1808 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/env.c | 15 + NONE-CKUBU/src/djbdns/djbdns-1.05/env.h | 8 + NONE-CKUBU/src/djbdns/djbdns-1.05/env.o | Bin 0 -> 1664 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/error.c | 123 + NONE-CKUBU/src/djbdns/djbdns-1.05/error.h | 27 + NONE-CKUBU/src/djbdns/djbdns-1.05/error.o | Bin 0 -> 1613 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/error_str.c | 267 ++ NONE-CKUBU/src/djbdns/djbdns-1.05/error_str.o | Bin 0 -> 7648 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/exit.h | 6 + .../src/djbdns/djbdns-1.05/find-systype.sh | 143 + NONE-CKUBU/src/djbdns/djbdns-1.05/fmt.h | 25 + NONE-CKUBU/src/djbdns/djbdns-1.05/fmt_ulong.c | 13 + NONE-CKUBU/src/djbdns/djbdns-1.05/fmt_ulong.o | Bin 0 -> 1328 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/fmt_xlong.c | 22 + NONE-CKUBU/src/djbdns/djbdns-1.05/fmt_xlong.o | Bin 0 -> 1416 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/gen_alloc.h | 7 + .../src/djbdns/djbdns-1.05/gen_allocdefs.h | 34 + .../src/djbdns/djbdns-1.05/generic-conf.c | 99 + .../src/djbdns/djbdns-1.05/generic-conf.h | 20 + .../src/djbdns/djbdns-1.05/generic-conf.o | Bin 0 -> 8312 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/getln.c | 14 + NONE-CKUBU/src/djbdns/djbdns-1.05/getln.h | 10 + NONE-CKUBU/src/djbdns/djbdns-1.05/getln.o | Bin 0 -> 1496 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/getln2.c | 24 + NONE-CKUBU/src/djbdns/djbdns-1.05/getln2.o | Bin 0 -> 1864 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/getopt.a | Bin 0 -> 5276 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/hasdevtcp.h | 1 + .../src/djbdns/djbdns-1.05/hasdevtcp.h1 | 1 + .../src/djbdns/djbdns-1.05/hasdevtcp.h2 | 2 + NONE-CKUBU/src/djbdns/djbdns-1.05/hasshsgr.h | 1 + NONE-CKUBU/src/djbdns/djbdns-1.05/hasshsgr.h1 | 1 + NONE-CKUBU/src/djbdns/djbdns-1.05/hasshsgr.h2 | 2 + NONE-CKUBU/src/djbdns/djbdns-1.05/haveip6.h | 1 + NONE-CKUBU/src/djbdns/djbdns-1.05/haveip6.h1 | 1 + NONE-CKUBU/src/djbdns/djbdns-1.05/haveip6.h2 | 1 + NONE-CKUBU/src/djbdns/djbdns-1.05/haven2i.h | 1 + NONE-CKUBU/src/djbdns/djbdns-1.05/haven2i.h1 | 1 + NONE-CKUBU/src/djbdns/djbdns-1.05/haven2i.h2 | 1 + NONE-CKUBU/src/djbdns/djbdns-1.05/hier.c | 44 + NONE-CKUBU/src/djbdns/djbdns-1.05/hier.o | Bin 0 -> 6240 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/install | Bin 0 -> 17512 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/install.c | 151 + NONE-CKUBU/src/djbdns/djbdns-1.05/install.o | Bin 0 -> 11224 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/instcheck | Bin 0 -> 13808 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/instcheck.c | 108 + NONE-CKUBU/src/djbdns/djbdns-1.05/instcheck.o | Bin 0 -> 5416 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/iopause.c | 76 + NONE-CKUBU/src/djbdns/djbdns-1.05/iopause.h | 18 + NONE-CKUBU/src/djbdns/djbdns-1.05/iopause.h1 | 19 + NONE-CKUBU/src/djbdns/djbdns-1.05/iopause.h2 | 18 + NONE-CKUBU/src/djbdns/djbdns-1.05/iopause.o | Bin 0 -> 1912 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/ip4.h | 9 + NONE-CKUBU/src/djbdns/djbdns-1.05/ip4_fmt.c | 18 + NONE-CKUBU/src/djbdns/djbdns-1.05/ip4_fmt.o | Bin 0 -> 1632 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/ip4_scan.c | 19 + NONE-CKUBU/src/djbdns/djbdns-1.05/ip4_scan.o | Bin 0 -> 1664 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/ip6.h | 28 + NONE-CKUBU/src/djbdns/djbdns-1.05/ip6_fmt.c | 60 + NONE-CKUBU/src/djbdns/djbdns-1.05/ip6_fmt.o | Bin 0 -> 2192 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/ip6_scan.c | 115 + NONE-CKUBU/src/djbdns/djbdns-1.05/ip6_scan.o | Bin 0 -> 2728 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/libtai.a | Bin 0 -> 20814 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/load | 4 + NONE-CKUBU/src/djbdns/djbdns-1.05/log.c | 287 ++ NONE-CKUBU/src/djbdns/djbdns-1.05/log.h | 36 + NONE-CKUBU/src/djbdns/djbdns-1.05/log.o | Bin 0 -> 15432 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/makelib | 6 + NONE-CKUBU/src/djbdns/djbdns-1.05/ndelay.h | 7 + .../src/djbdns/djbdns-1.05/ndelay_off.c | 12 + .../src/djbdns/djbdns-1.05/ndelay_off.o | Bin 0 -> 1384 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/ndelay_on.c | 12 + NONE-CKUBU/src/djbdns/djbdns-1.05/ndelay_on.o | Bin 0 -> 1384 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/okclient.c | 36 + NONE-CKUBU/src/djbdns/djbdns-1.05/okclient.h | 6 + NONE-CKUBU/src/djbdns/djbdns-1.05/okclient.o | Bin 0 -> 2328 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/open.h | 10 + NONE-CKUBU/src/djbdns/djbdns-1.05/open_read.c | 6 + NONE-CKUBU/src/djbdns/djbdns-1.05/open_read.o | Bin 0 -> 1336 bytes .../src/djbdns/djbdns-1.05/open_trunc.c | 6 + .../src/djbdns/djbdns-1.05/open_trunc.o | Bin 0 -> 1344 bytes .../src/djbdns/djbdns-1.05/openreadclose.c | 16 + .../src/djbdns/djbdns-1.05/openreadclose.h | 8 + .../src/djbdns/djbdns-1.05/openreadclose.o | Bin 0 -> 1608 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/parsetype.c | 31 + NONE-CKUBU/src/djbdns/djbdns-1.05/parsetype.h | 6 + NONE-CKUBU/src/djbdns/djbdns-1.05/parsetype.o | Bin 0 -> 3896 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/pickdns | Bin 0 -> 31072 bytes .../src/djbdns/djbdns-1.05/pickdns-conf | Bin 0 -> 15784 bytes .../src/djbdns/djbdns-1.05/pickdns-conf.c | 66 + .../src/djbdns/djbdns-1.05/pickdns-conf.o | Bin 0 -> 5176 bytes .../src/djbdns/djbdns-1.05/pickdns-data | Bin 0 -> 24664 bytes .../src/djbdns/djbdns-1.05/pickdns-data.c | 230 + .../src/djbdns/djbdns-1.05/pickdns-data.o | Bin 0 -> 14320 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/pickdns.c | 101 + NONE-CKUBU/src/djbdns/djbdns-1.05/pickdns.o | Bin 0 -> 5000 bytes .../src/djbdns/djbdns-1.05/printpacket.c | 90 + .../src/djbdns/djbdns-1.05/printpacket.h | 8 + .../src/djbdns/djbdns-1.05/printpacket.o | Bin 0 -> 5216 bytes .../src/djbdns/djbdns-1.05/printrecord.c | 125 + .../src/djbdns/djbdns-1.05/printrecord.h | 9 + .../src/djbdns/djbdns-1.05/printrecord.o | Bin 0 -> 6368 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/prot.c | 19 + NONE-CKUBU/src/djbdns/djbdns-1.05/prot.h | 7 + NONE-CKUBU/src/djbdns/djbdns-1.05/prot.o | Bin 0 -> 1576 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/qlog.c | 63 + NONE-CKUBU/src/djbdns/djbdns-1.05/qlog.h | 8 + NONE-CKUBU/src/djbdns/djbdns-1.05/qlog.o | Bin 0 -> 3136 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/query.c | 1065 +++++ NONE-CKUBU/src/djbdns/djbdns-1.05/query.h | 33 + NONE-CKUBU/src/djbdns/djbdns-1.05/query.o | Bin 0 -> 35688 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/random-ip | Bin 0 -> 9488 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/random-ip.c | 80 + NONE-CKUBU/src/djbdns/djbdns-1.05/random-ip.o | Bin 0 -> 4696 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/rbldns | Bin 0 -> 30976 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/rbldns-conf | Bin 0 -> 15784 bytes .../src/djbdns/djbdns-1.05/rbldns-conf.c | 71 + .../src/djbdns/djbdns-1.05/rbldns-conf.o | Bin 0 -> 5576 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/rbldns-data | Bin 0 -> 19864 bytes .../src/djbdns/djbdns-1.05/rbldns-data.c | 128 + .../src/djbdns/djbdns-1.05/rbldns-data.o | Bin 0 -> 8920 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/rbldns.c | 116 + NONE-CKUBU/src/djbdns/djbdns-1.05/rbldns.o | Bin 0 -> 5256 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/readclose.c | 21 + NONE-CKUBU/src/djbdns/djbdns-1.05/readclose.h | 9 + NONE-CKUBU/src/djbdns/djbdns-1.05/readclose.o | Bin 0 -> 2216 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/response.c | 121 + NONE-CKUBU/src/djbdns/djbdns-1.05/response.h | 27 + NONE-CKUBU/src/djbdns/djbdns-1.05/response.o | Bin 0 -> 5184 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/roots.c | 128 + NONE-CKUBU/src/djbdns/djbdns-1.05/roots.h | 8 + NONE-CKUBU/src/djbdns/djbdns-1.05/roots.o | Bin 0 -> 4568 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/rts | 3 + NONE-CKUBU/src/djbdns/djbdns-1.05/rts.exp | 1072 +++++ NONE-CKUBU/src/djbdns/djbdns-1.05/rts.sh | 1 + NONE-CKUBU/src/djbdns/djbdns-1.05/rts.tests | 767 ++++ NONE-CKUBU/src/djbdns/djbdns-1.05/scan.h | 28 + .../src/djbdns/djbdns-1.05/scan_ulong.c | 14 + .../src/djbdns/djbdns-1.05/scan_ulong.o | Bin 0 -> 1272 bytes .../src/djbdns/djbdns-1.05/scan_xlong.c | 23 + .../src/djbdns/djbdns-1.05/scan_xlong.o | Bin 0 -> 1304 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/seek.h | 15 + NONE-CKUBU/src/djbdns/djbdns-1.05/seek_set.c | 7 + NONE-CKUBU/src/djbdns/djbdns-1.05/seek_set.o | Bin 0 -> 1352 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/select.h | 11 + NONE-CKUBU/src/djbdns/djbdns-1.05/select.h1 | 10 + NONE-CKUBU/src/djbdns/djbdns-1.05/select.h2 | 11 + NONE-CKUBU/src/djbdns/djbdns-1.05/server.c | 176 + NONE-CKUBU/src/djbdns/djbdns-1.05/server.o | Bin 0 -> 7824 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/sgetopt.c | 51 + NONE-CKUBU/src/djbdns/djbdns-1.05/sgetopt.h | 21 + NONE-CKUBU/src/djbdns/djbdns-1.05/sgetopt.o | Bin 0 -> 2696 bytes .../src/djbdns/djbdns-1.05/sockaddr_in6.h | 4 + .../src/djbdns/djbdns-1.05/sockaddr_in6.h1 | 21 + .../src/djbdns/djbdns-1.05/sockaddr_in6.h2 | 4 + NONE-CKUBU/src/djbdns/djbdns-1.05/socket.h | 38 + NONE-CKUBU/src/djbdns/djbdns-1.05/socket.lib | 0 .../src/djbdns/djbdns-1.05/socket_accept.c | 21 + .../src/djbdns/djbdns-1.05/socket_accept.o | Bin 0 -> 1584 bytes .../src/djbdns/djbdns-1.05/socket_accept6.c | 43 + .../src/djbdns/djbdns-1.05/socket_accept6.o | Bin 0 -> 1928 bytes .../src/djbdns/djbdns-1.05/socket_bind.c | 33 + .../src/djbdns/djbdns-1.05/socket_bind.o | Bin 0 -> 2136 bytes .../src/djbdns/djbdns-1.05/socket_bind6.c | 43 + .../src/djbdns/djbdns-1.05/socket_bind6.o | Bin 0 -> 2400 bytes .../src/djbdns/djbdns-1.05/socket_conn.c | 33 + .../src/djbdns/djbdns-1.05/socket_conn.o | Bin 0 -> 1936 bytes .../src/djbdns/djbdns-1.05/socket_connect6.c | 39 + .../src/djbdns/djbdns-1.05/socket_connect6.o | Bin 0 -> 2336 bytes .../src/djbdns/djbdns-1.05/socket_getifidx.c | 13 + .../src/djbdns/djbdns-1.05/socket_getifidx.o | Bin 0 -> 1352 bytes .../src/djbdns/djbdns-1.05/socket_listen.c | 10 + .../src/djbdns/djbdns-1.05/socket_listen.o | Bin 0 -> 1336 bytes .../src/djbdns/djbdns-1.05/socket_noipv6.c | 7 + .../src/djbdns/djbdns-1.05/socket_noipv6.o | Bin 0 -> 960 bytes .../src/djbdns/djbdns-1.05/socket_recv.c | 21 + .../src/djbdns/djbdns-1.05/socket_recv.o | Bin 0 -> 1592 bytes .../src/djbdns/djbdns-1.05/socket_recv6.c | 42 + .../src/djbdns/djbdns-1.05/socket_recv6.o | Bin 0 -> 2096 bytes .../src/djbdns/djbdns-1.05/socket_send.c | 18 + .../src/djbdns/djbdns-1.05/socket_send.o | Bin 0 -> 1688 bytes .../src/djbdns/djbdns-1.05/socket_send6.c | 39 + .../src/djbdns/djbdns-1.05/socket_send6.o | Bin 0 -> 2512 bytes .../src/djbdns/djbdns-1.05/socket_tcp.c | 17 + .../src/djbdns/djbdns-1.05/socket_tcp.o | Bin 0 -> 1512 bytes .../src/djbdns/djbdns-1.05/socket_tcp6.c | 44 + .../src/djbdns/djbdns-1.05/socket_tcp6.o | Bin 0 -> 1864 bytes .../src/djbdns/djbdns-1.05/socket_udp.c | 17 + .../src/djbdns/djbdns-1.05/socket_udp.o | Bin 0 -> 1512 bytes .../src/djbdns/djbdns-1.05/socket_udp6.c | 43 + .../src/djbdns/djbdns-1.05/socket_udp6.o | Bin 0 -> 1864 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/str.h | 14 + NONE-CKUBU/src/djbdns/djbdns-1.05/str_chr.c | 17 + NONE-CKUBU/src/djbdns/djbdns-1.05/str_chr.o | Bin 0 -> 1400 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/str_diff.c | 15 + NONE-CKUBU/src/djbdns/djbdns-1.05/str_diff.o | Bin 0 -> 1424 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/str_len.c | 14 + NONE-CKUBU/src/djbdns/djbdns-1.05/str_len.o | Bin 0 -> 1320 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/str_rchr.c | 20 + NONE-CKUBU/src/djbdns/djbdns-1.05/str_rchr.o | Bin 0 -> 1328 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/str_start.c | 13 + NONE-CKUBU/src/djbdns/djbdns-1.05/str_start.o | Bin 0 -> 1296 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/stralloc.h | 29 + .../src/djbdns/djbdns-1.05/stralloc_cat.c | 7 + .../src/djbdns/djbdns-1.05/stralloc_cat.o | Bin 0 -> 1352 bytes .../src/djbdns/djbdns-1.05/stralloc_catb.c | 12 + .../src/djbdns/djbdns-1.05/stralloc_catb.o | Bin 0 -> 1608 bytes .../src/djbdns/djbdns-1.05/stralloc_cats.c | 8 + .../src/djbdns/djbdns-1.05/stralloc_cats.o | Bin 0 -> 1456 bytes .../src/djbdns/djbdns-1.05/stralloc_copy.c | 7 + .../src/djbdns/djbdns-1.05/stralloc_copy.o | Bin 0 -> 1352 bytes .../src/djbdns/djbdns-1.05/stralloc_eady.c | 6 + .../src/djbdns/djbdns-1.05/stralloc_eady.o | Bin 0 -> 1808 bytes .../src/djbdns/djbdns-1.05/stralloc_num.c | 29 + .../src/djbdns/djbdns-1.05/stralloc_num.o | Bin 0 -> 1968 bytes .../src/djbdns/djbdns-1.05/stralloc_opyb.c | 11 + .../src/djbdns/djbdns-1.05/stralloc_opyb.o | Bin 0 -> 1504 bytes .../src/djbdns/djbdns-1.05/stralloc_opys.c | 8 + .../src/djbdns/djbdns-1.05/stralloc_opys.o | Bin 0 -> 1456 bytes .../src/djbdns/djbdns-1.05/stralloc_pend.c | 5 + .../src/djbdns/djbdns-1.05/stralloc_pend.o | Bin 0 -> 1424 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/strerr.h | 78 + .../src/djbdns/djbdns-1.05/strerr_die.c | 31 + .../src/djbdns/djbdns-1.05/strerr_die.o | Bin 0 -> 2656 bytes .../src/djbdns/djbdns-1.05/strerr_sys.c | 12 + .../src/djbdns/djbdns-1.05/strerr_sys.o | Bin 0 -> 1752 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/subgetopt.c | 65 + NONE-CKUBU/src/djbdns/djbdns-1.05/subgetopt.h | 24 + NONE-CKUBU/src/djbdns/djbdns-1.05/subgetopt.o | Bin 0 -> 2232 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/systype | 1 + NONE-CKUBU/src/djbdns/djbdns-1.05/tai.h | 26 + NONE-CKUBU/src/djbdns/djbdns-1.05/tai_add.c | 6 + NONE-CKUBU/src/djbdns/djbdns-1.05/tai_add.o | Bin 0 -> 1216 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/tai_now.c | 7 + NONE-CKUBU/src/djbdns/djbdns-1.05/tai_now.o | Bin 0 -> 1344 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/tai_pack.c | 16 + NONE-CKUBU/src/djbdns/djbdns-1.05/tai_pack.o | Bin 0 -> 1256 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/tai_sub.c | 6 + NONE-CKUBU/src/djbdns/djbdns-1.05/tai_sub.o | Bin 0 -> 1216 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/tai_uint.c | 6 + NONE-CKUBU/src/djbdns/djbdns-1.05/tai_uint.o | Bin 0 -> 1208 bytes .../src/djbdns/djbdns-1.05/tai_unpack.c | 16 + .../src/djbdns/djbdns-1.05/tai_unpack.o | Bin 0 -> 1296 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/taia.h | 34 + NONE-CKUBU/src/djbdns/djbdns-1.05/taia_add.c | 18 + NONE-CKUBU/src/djbdns/djbdns-1.05/taia_add.o | Bin 0 -> 1288 bytes .../src/djbdns/djbdns-1.05/taia_approx.c | 6 + .../src/djbdns/djbdns-1.05/taia_approx.o | Bin 0 -> 1440 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/taia_frac.c | 6 + NONE-CKUBU/src/djbdns/djbdns-1.05/taia_frac.o | Bin 0 -> 1544 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/taia_less.c | 12 + NONE-CKUBU/src/djbdns/djbdns-1.05/taia_less.o | Bin 0 -> 1280 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/taia_now.c | 12 + NONE-CKUBU/src/djbdns/djbdns-1.05/taia_now.o | Bin 0 -> 1408 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/taia_pack.c | 20 + NONE-CKUBU/src/djbdns/djbdns-1.05/taia_pack.o | Bin 0 -> 1424 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/taia_sub.c | 21 + NONE-CKUBU/src/djbdns/djbdns-1.05/taia_sub.o | Bin 0 -> 1288 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/taia_tai.c | 6 + NONE-CKUBU/src/djbdns/djbdns-1.05/taia_tai.o | Bin 0 -> 1208 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/taia_uint.c | 10 + NONE-CKUBU/src/djbdns/djbdns-1.05/taia_uint.o | Bin 0 -> 1224 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/tdlookup.c | 336 ++ NONE-CKUBU/src/djbdns/djbdns-1.05/tdlookup.o | Bin 0 -> 13528 bytes .../src/djbdns/djbdns-1.05/timeoutread.c | 28 + .../src/djbdns/djbdns-1.05/timeoutread.h | 6 + .../src/djbdns/djbdns-1.05/timeoutread.o | Bin 0 -> 1992 bytes .../src/djbdns/djbdns-1.05/timeoutwrite.c | 28 + .../src/djbdns/djbdns-1.05/timeoutwrite.h | 6 + .../src/djbdns/djbdns-1.05/timeoutwrite.o | Bin 0 -> 1992 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/tinydns | Bin 0 -> 34656 bytes .../src/djbdns/djbdns-1.05/tinydns-conf | Bin 0 -> 16456 bytes .../src/djbdns/djbdns-1.05/tinydns-conf.c | 110 + .../src/djbdns/djbdns-1.05/tinydns-conf.o | Bin 0 -> 7744 bytes .../src/djbdns/djbdns-1.05/tinydns-data | Bin 0 -> 31280 bytes .../src/djbdns/djbdns-1.05/tinydns-data.c | 486 +++ .../src/djbdns/djbdns-1.05/tinydns-data.o | Bin 0 -> 30592 bytes .../src/djbdns/djbdns-1.05/tinydns-edit | Bin 0 -> 28816 bytes .../src/djbdns/djbdns-1.05/tinydns-edit.c | 284 ++ .../src/djbdns/djbdns-1.05/tinydns-edit.o | Bin 0 -> 23272 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/tinydns-get | Bin 0 -> 34152 bytes .../src/djbdns/djbdns-1.05/tinydns-get.c | 76 + .../src/djbdns/djbdns-1.05/tinydns-get.o | Bin 0 -> 6520 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/tinydns.c | 11 + NONE-CKUBU/src/djbdns/djbdns-1.05/tinydns.o | Bin 0 -> 1744 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/trycpp.c | 7 + NONE-CKUBU/src/djbdns/djbdns-1.05/trydrent.c | 8 + NONE-CKUBU/src/djbdns/djbdns-1.05/tryip6.c | 8 + NONE-CKUBU/src/djbdns/djbdns-1.05/trylsock.c | 4 + NONE-CKUBU/src/djbdns/djbdns-1.05/tryn2i.c | 8 + NONE-CKUBU/src/djbdns/djbdns-1.05/trypoll.c | 18 + NONE-CKUBU/src/djbdns/djbdns-1.05/trysa6.c | 8 + NONE-CKUBU/src/djbdns/djbdns-1.05/tryshsgr.c | 14 + NONE-CKUBU/src/djbdns/djbdns-1.05/trysysel.c | 8 + .../src/djbdns/djbdns-1.05/tryulong32.c | 11 + .../src/djbdns/djbdns-1.05/tryulong64.c | 11 + NONE-CKUBU/src/djbdns/djbdns-1.05/uint16.h | 11 + .../src/djbdns/djbdns-1.05/uint16_pack.c | 13 + .../src/djbdns/djbdns-1.05/uint16_pack.o | Bin 0 -> 1328 bytes .../src/djbdns/djbdns-1.05/uint16_unpack.c | 23 + .../src/djbdns/djbdns-1.05/uint16_unpack.o | Bin 0 -> 1336 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/uint32.h | 11 + NONE-CKUBU/src/djbdns/djbdns-1.05/uint32.h1 | 11 + NONE-CKUBU/src/djbdns/djbdns-1.05/uint32.h2 | 11 + .../src/djbdns/djbdns-1.05/uint32_pack.c | 21 + .../src/djbdns/djbdns-1.05/uint32_pack.o | Bin 0 -> 1360 bytes .../src/djbdns/djbdns-1.05/uint32_unpack.c | 31 + .../src/djbdns/djbdns-1.05/uint32_unpack.o | Bin 0 -> 1392 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/uint64.h | 8 + NONE-CKUBU/src/djbdns/djbdns-1.05/uint64.h1 | 8 + NONE-CKUBU/src/djbdns/djbdns-1.05/uint64.h2 | 8 + NONE-CKUBU/src/djbdns/djbdns-1.05/unix.a | Bin 0 -> 55900 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/utime | Bin 0 -> 4760 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/utime.c | 24 + NONE-CKUBU/src/djbdns/djbdns-1.05/utime.o | Bin 0 -> 1936 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/walldns | Bin 0 -> 27112 bytes .../src/djbdns/djbdns-1.05/walldns-conf | Bin 0 -> 15784 bytes .../src/djbdns/djbdns-1.05/walldns-conf.c | 58 + .../src/djbdns/djbdns-1.05/walldns-conf.o | Bin 0 -> 4632 bytes NONE-CKUBU/src/djbdns/djbdns-1.05/walldns.c | 57 + NONE-CKUBU/src/djbdns/djbdns-1.05/walldns.o | Bin 0 -> 3304 bytes .../src/djbdns/djbdns-1.05/warn-auto.sh | 2 + NONE-CKUBU/src/djbdns/djbdns-1.05/warn-shsgr | 3 + NONE-CKUBU/src/djbdns/djbdns-1.05/x86cpuid.c | 38 + .../src/djbdns/qlogtools-3.1/ANNOUNCEMENT | 25 + NONE-CKUBU/src/djbdns/qlogtools-3.1/COPYING | 340 ++ NONE-CKUBU/src/djbdns/qlogtools-3.1/FILES | 55 + NONE-CKUBU/src/djbdns/qlogtools-3.1/Makefile | 141 + NONE-CKUBU/src/djbdns/qlogtools-3.1/NEWS | 25 + NONE-CKUBU/src/djbdns/qlogtools-3.1/README | 13 + NONE-CKUBU/src/djbdns/qlogtools-3.1/TARGETS | 37 + NONE-CKUBU/src/djbdns/qlogtools-3.1/TODO | 0 NONE-CKUBU/src/djbdns/qlogtools-3.1/VERSION | 1 + NONE-CKUBU/src/djbdns/qlogtools-3.1/bool.h | 8 + NONE-CKUBU/src/djbdns/qlogtools-3.1/choose | 20 + NONE-CKUBU/src/djbdns/qlogtools-3.1/choose.sh | 18 + NONE-CKUBU/src/djbdns/qlogtools-3.1/compile | 4 + NONE-CKUBU/src/djbdns/qlogtools-3.1/conf-bin | 3 + NONE-CKUBU/src/djbdns/qlogtools-3.1/conf-cc | 3 + NONE-CKUBU/src/djbdns/qlogtools-3.1/conf-ld | 3 + NONE-CKUBU/src/djbdns/qlogtools-3.1/conf-man | 4 + .../src/djbdns/qlogtools-3.1/conf_bin.c | 1 + .../src/djbdns/qlogtools-3.1/conf_man.c | 1 + .../src/djbdns/qlogtools-3.1/direntry.h | 8 + .../src/djbdns/qlogtools-3.1/direntry.h1 | 8 + .../src/djbdns/qlogtools-3.1/direntry.h2 | 8 + NONE-CKUBU/src/djbdns/qlogtools-3.1/fork.h | 7 + NONE-CKUBU/src/djbdns/qlogtools-3.1/fork.h1 | 7 + NONE-CKUBU/src/djbdns/qlogtools-3.1/fork.h2 | 7 + NONE-CKUBU/src/djbdns/qlogtools-3.1/installer | Bin 0 -> 8088 bytes .../src/djbdns/qlogtools-3.1/installer.c | 103 + .../src/djbdns/qlogtools-3.1/installer.h | 13 + .../src/djbdns/qlogtools-3.1/installer.o | Bin 0 -> 15536 bytes NONE-CKUBU/src/djbdns/qlogtools-3.1/instcheck | Bin 0 -> 7328 bytes .../src/djbdns/qlogtools-3.1/instcheck.c | 90 + .../src/djbdns/qlogtools-3.1/instcheck.o | Bin 0 -> 16288 bytes .../src/djbdns/qlogtools-3.1/insthier.c | 27 + .../src/djbdns/qlogtools-3.1/insthier.o | Bin 0 -> 5960 bytes NONE-CKUBU/src/djbdns/qlogtools-3.1/instshow | Bin 0 -> 7464 bytes .../src/djbdns/qlogtools-3.1/instshow.c | 98 + .../src/djbdns/qlogtools-3.1/instshow.o | Bin 0 -> 15544 bytes NONE-CKUBU/src/djbdns/qlogtools-3.1/load | 3 + NONE-CKUBU/src/djbdns/qlogtools-3.1/multipipe | Bin 0 -> 11144 bytes .../src/djbdns/qlogtools-3.1/multipipe.1 | 44 + .../src/djbdns/qlogtools-3.1/multipipe.c | 346 ++ .../src/djbdns/qlogtools-3.1/multipipe.o | Bin 0 -> 26904 bytes NONE-CKUBU/src/djbdns/qlogtools-3.1/multitail | Bin 0 -> 6920 bytes .../src/djbdns/qlogtools-3.1/multitail.1 | 47 + .../src/djbdns/qlogtools-3.1/multitail.c | 140 + .../src/djbdns/qlogtools-3.1/multitail.o | Bin 0 -> 15112 bytes NONE-CKUBU/src/djbdns/qlogtools-3.1/qfilelog | Bin 0 -> 6920 bytes .../src/djbdns/qlogtools-3.1/qfilelog.1 | 25 + .../src/djbdns/qlogtools-3.1/qfilelog.c | 129 + .../src/djbdns/qlogtools-3.1/qfilelog.o | Bin 0 -> 12896 bytes .../src/djbdns/qlogtools-3.1/qlogselect.1 | 46 + .../djbdns/qlogtools-3.1/qlogtools-3.1.spec | 42 + NONE-CKUBU/src/djbdns/qlogtools-3.1/select.h | 11 + NONE-CKUBU/src/djbdns/qlogtools-3.1/select.h1 | 10 + NONE-CKUBU/src/djbdns/qlogtools-3.1/select.h2 | 11 + NONE-CKUBU/src/djbdns/qlogtools-3.1/spipe | Bin 0 -> 7968 bytes NONE-CKUBU/src/djbdns/qlogtools-3.1/spipe.1 | 33 + NONE-CKUBU/src/djbdns/qlogtools-3.1/spipe.c | 132 + NONE-CKUBU/src/djbdns/qlogtools-3.1/spipe.o | Bin 0 -> 14752 bytes NONE-CKUBU/src/djbdns/qlogtools-3.1/svcfns.c | 99 + NONE-CKUBU/src/djbdns/qlogtools-3.1/svcfns.h | 16 + NONE-CKUBU/src/djbdns/qlogtools-3.1/svcfns.o | Bin 0 -> 8648 bytes NONE-CKUBU/src/djbdns/qlogtools-3.1/systime.h | 2 + NONE-CKUBU/src/djbdns/qlogtools-3.1/tai.h | 19 + .../src/djbdns/qlogtools-3.1/tai2tai64n | Bin 0 -> 5616 bytes .../src/djbdns/qlogtools-3.1/tai2tai64n.1 | 17 + .../src/djbdns/qlogtools-3.1/tai2tai64n.c | 38 + .../src/djbdns/qlogtools-3.1/tai2tai64n.o | Bin 0 -> 7184 bytes .../src/djbdns/qlogtools-3.1/tai64n2tai | Bin 0 -> 5808 bytes .../src/djbdns/qlogtools-3.1/tai64n2tai.1 | 18 + .../src/djbdns/qlogtools-3.1/tai64n2tai.c | 38 + .../src/djbdns/qlogtools-3.1/tai64n2tai.o | Bin 0 -> 7048 bytes .../src/djbdns/qlogtools-3.1/tai64n_decode.c | 44 + .../src/djbdns/qlogtools-3.1/tai64n_decode.o | Bin 0 -> 5264 bytes .../src/djbdns/qlogtools-3.1/tai64n_encode.c | 38 + .../src/djbdns/qlogtools-3.1/tai64n_encode.o | Bin 0 -> 5080 bytes .../src/djbdns/qlogtools-3.1/tai_decode.c | 23 + .../src/djbdns/qlogtools-3.1/tai_decode.o | Bin 0 -> 4832 bytes .../src/djbdns/qlogtools-3.1/tai_encode.c | 19 + .../src/djbdns/qlogtools-3.1/tai_encode.o | Bin 0 -> 3928 bytes NONE-CKUBU/src/djbdns/qlogtools-3.1/teepipe | Bin 0 -> 6920 bytes NONE-CKUBU/src/djbdns/qlogtools-3.1/teepipe.1 | 21 + NONE-CKUBU/src/djbdns/qlogtools-3.1/teepipe.c | 93 + NONE-CKUBU/src/djbdns/qlogtools-3.1/teepipe.o | Bin 0 -> 10176 bytes .../src/djbdns/qlogtools-3.1/trydirent.c | 8 + .../src/djbdns/qlogtools-3.1/trysysel.c | 8 + .../src/djbdns/qlogtools-3.1/trysystime.c | 1 + NONE-CKUBU/src/djbdns/qlogtools-3.1/trytime.c | 1 + .../src/djbdns/qlogtools-3.1/tryvfork.c | 4 + .../src/djbdns/qlogtools-3.1/warn-auto.sh | 2 + .../tarballs/daemontools-0.76-man.tar.gz | Bin 0 -> 8005 bytes .../tarballs/daemontools-0.76.errno.patch | 12 + .../djbdns/tarballs/daemontools-0.76.tar.gz | Bin 0 -> 36975 bytes .../djbdns/tarballs/djbdns-1.05-ixfr.diff.gz | Bin 0 -> 368 bytes .../tarballs/djbdns-1.05-test23.diff.bz2 | Bin 0 -> 18480 bytes .../src/djbdns/tarballs/djbdns-1.05.tar.gz | Bin 0 -> 85648 bytes NONE-CKUBU/src/djbdns/tarballs/doc.tar.gz | Bin 0 -> 229765 bytes .../src/djbdns/tarballs/qlogtools-3.1.tar.gz | Bin 0 -> 20868 bytes .../src/djbdns/tarballs/qlogtools_errno.patch | 13 + .../tarballs/ucspi-tcp-0.88-ipv6.diff19.bz2 | Bin 0 -> 22632 bytes .../djbdns/tarballs/ucspi-tcp-0.88-man.tar.gz | Bin 0 -> 7562 bytes .../tarballs/ucspi-tcp-0.88.a_record.patch | 64 + .../tarballs/ucspi-tcp-0.88.nobase.patch | 21 + .../src/djbdns/tarballs/ucspi-tcp-0.88.tar.gz | Bin 0 -> 53019 bytes .../src/djbdns/ucspi-tcp-0.88-man/README | 21 + .../src/djbdns/ucspi-tcp-0.88-man/addcr.1.gz | Bin 0 -> 329 bytes .../src/djbdns/ucspi-tcp-0.88-man/argv0.1.gz | Bin 0 -> 649 bytes .../src/djbdns/ucspi-tcp-0.88-man/date@.1.gz | Bin 0 -> 443 bytes .../src/djbdns/ucspi-tcp-0.88-man/delcr.1.gz | Bin 0 -> 323 bytes .../djbdns/ucspi-tcp-0.88-man/finger@.1.gz | Bin 0 -> 474 bytes .../djbdns/ucspi-tcp-0.88-man/fixcrio.1.gz | Bin 0 -> 349 bytes .../src/djbdns/ucspi-tcp-0.88-man/http@.1.gz | Bin 0 -> 422 bytes .../djbdns/ucspi-tcp-0.88-man/mconnect.1.gz | Bin 0 -> 378 bytes .../djbdns/ucspi-tcp-0.88-man/rblsmtpd.1.gz | Bin 0 -> 1570 bytes .../djbdns/ucspi-tcp-0.88-man/recordio.1.gz | Bin 0 -> 672 bytes .../src/djbdns/ucspi-tcp-0.88-man/tcpcat.1.gz | Bin 0 -> 318 bytes .../djbdns/ucspi-tcp-0.88-man/tcpclient.1.gz | Bin 0 -> 1308 bytes .../djbdns/ucspi-tcp-0.88-man/tcprules.1.gz | Bin 0 -> 1595 bytes .../ucspi-tcp-0.88-man/tcprulescheck.1.gz | Bin 0 -> 355 bytes .../djbdns/ucspi-tcp-0.88-man/tcpserver.1.gz | Bin 0 -> 1923 bytes .../src/djbdns/ucspi-tcp-0.88-man/who@.1.gz | Bin 0 -> 443 bytes NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/CHANGES | 148 + NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/FILES | 255 ++ NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/Makefile | 969 +++++ NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/README | 7 + NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/SYSDEPS | 12 + NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/TARGETS | 199 + NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/TODO | 3 + NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/VERSION | 1 + NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/addcr | Bin 0 -> 7984 bytes NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/addcr.1 | 22 + NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/addcr.c | 22 + NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/addcr.o | Bin 0 -> 2024 bytes NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/alloc.c | 32 + NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/alloc.h | 8 + NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/alloc.o | Bin 0 -> 1920 bytes .../src/djbdns/ucspi-tcp-0.88/alloc_re.c | 17 + .../src/djbdns/ucspi-tcp-0.88/alloc_re.o | Bin 0 -> 1544 bytes NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/argv0 | Bin 0 -> 15816 bytes NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/argv0.1 | 47 + NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/argv0.c | 10 + NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/argv0.o | Bin 0 -> 2000 bytes NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/auto-str | Bin 0 -> 7120 bytes .../src/djbdns/ucspi-tcp-0.88/auto-str.c | 41 + .../src/djbdns/ucspi-tcp-0.88/auto-str.o | Bin 0 -> 2544 bytes .../src/djbdns/ucspi-tcp-0.88/auto_home.c | 3 + .../src/djbdns/ucspi-tcp-0.88/auto_home.h | 6 + .../src/djbdns/ucspi-tcp-0.88/auto_home.o | Bin 0 -> 967 bytes NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/buffer.c | 10 + NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/buffer.h | 56 + NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/buffer.o | Bin 0 -> 1224 bytes .../src/djbdns/ucspi-tcp-0.88/buffer_0.c | 12 + .../src/djbdns/ucspi-tcp-0.88/buffer_0.o | Bin 0 -> 1880 bytes .../src/djbdns/ucspi-tcp-0.88/buffer_1.c | 6 + .../src/djbdns/ucspi-tcp-0.88/buffer_1.o | Bin 0 -> 1264 bytes .../src/djbdns/ucspi-tcp-0.88/buffer_2.c | 6 + .../src/djbdns/ucspi-tcp-0.88/buffer_2.o | Bin 0 -> 1264 bytes .../src/djbdns/ucspi-tcp-0.88/buffer_copy.c | 16 + .../src/djbdns/ucspi-tcp-0.88/buffer_copy.o | Bin 0 -> 1504 bytes .../src/djbdns/ucspi-tcp-0.88/buffer_get.c | 67 + .../src/djbdns/ucspi-tcp-0.88/buffer_get.o | Bin 0 -> 2608 bytes .../src/djbdns/ucspi-tcp-0.88/buffer_put.c | 88 + .../src/djbdns/ucspi-tcp-0.88/buffer_put.o | Bin 0 -> 3224 bytes NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/byte.a | Bin 0 -> 36252 bytes NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/byte.h | 13 + .../src/djbdns/ucspi-tcp-0.88/byte_chr.c | 20 + .../src/djbdns/ucspi-tcp-0.88/byte_chr.o | Bin 0 -> 1392 bytes .../src/djbdns/ucspi-tcp-0.88/byte_copy.c | 14 + .../src/djbdns/ucspi-tcp-0.88/byte_copy.o | Bin 0 -> 1320 bytes .../src/djbdns/ucspi-tcp-0.88/byte_cr.c | 16 + .../src/djbdns/ucspi-tcp-0.88/byte_cr.o | Bin 0 -> 1328 bytes .../src/djbdns/ucspi-tcp-0.88/byte_diff.c | 16 + .../src/djbdns/ucspi-tcp-0.88/byte_diff.o | Bin 0 -> 1392 bytes .../src/djbdns/ucspi-tcp-0.88/byte_rchr.c | 23 + .../src/djbdns/ucspi-tcp-0.88/byte_rchr.o | Bin 0 -> 1304 bytes .../src/djbdns/ucspi-tcp-0.88/byte_zero.c | 13 + .../src/djbdns/ucspi-tcp-0.88/byte_zero.o | Bin 0 -> 1296 bytes NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/case.h | 13 + .../src/djbdns/ucspi-tcp-0.88/case_diffb.c | 18 + .../src/djbdns/ucspi-tcp-0.88/case_diffb.o | Bin 0 -> 1296 bytes .../src/djbdns/ucspi-tcp-0.88/case_diffs.c | 17 + .../src/djbdns/ucspi-tcp-0.88/case_diffs.o | Bin 0 -> 1280 bytes NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/cdb.a | Bin 0 -> 9802 bytes NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/cdb.c | 136 + NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/cdb.h | 37 + NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/cdb.o | Bin 0 -> 3696 bytes .../src/djbdns/ucspi-tcp-0.88/cdb_hash.c | 21 + .../src/djbdns/ucspi-tcp-0.88/cdb_hash.o | Bin 0 -> 1360 bytes .../src/djbdns/ucspi-tcp-0.88/cdb_make.c | 153 + .../src/djbdns/ucspi-tcp-0.88/cdb_make.h | 39 + .../src/djbdns/ucspi-tcp-0.88/cdb_make.o | Bin 0 -> 4280 bytes NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/chkshsgr | Bin 0 -> 4664 bytes .../src/djbdns/ucspi-tcp-0.88/chkshsgr.c | 10 + .../src/djbdns/ucspi-tcp-0.88/chkshsgr.o | Bin 0 -> 1544 bytes NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/choose | 20 + .../src/djbdns/ucspi-tcp-0.88/choose.sh | 18 + .../src/djbdns/ucspi-tcp-0.88/commands.c | 39 + .../src/djbdns/ucspi-tcp-0.88/commands.h | 12 + .../src/djbdns/ucspi-tcp-0.88/commands.o | Bin 0 -> 2376 bytes NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/compile | 3 + NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/conf-cc | 3 + .../src/djbdns/ucspi-tcp-0.88/conf-home | 4 + NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/conf-ld | 3 + NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/date@ | 3 + NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/date@.1 | 32 + NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/date@.sh | 1 + NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/delcr | Bin 0 -> 8144 bytes NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/delcr.1 | 30 + NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/delcr.c | 37 + NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/delcr.o | Bin 0 -> 2400 bytes NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns.a | Bin 0 -> 62254 bytes NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns.h | 93 + .../src/djbdns/ucspi-tcp-0.88/dns_dfd.c | 70 + .../src/djbdns/ucspi-tcp-0.88/dns_dfd.o | Bin 0 -> 2144 bytes .../src/djbdns/ucspi-tcp-0.88/dns_domain.c | 73 + .../src/djbdns/ucspi-tcp-0.88/dns_domain.o | Bin 0 -> 2552 bytes .../src/djbdns/ucspi-tcp-0.88/dns_dtda.c | 35 + .../src/djbdns/ucspi-tcp-0.88/dns_dtda.o | Bin 0 -> 1904 bytes NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_ip.c | 75 + NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_ip.o | Bin 0 -> 3600 bytes .../src/djbdns/ucspi-tcp-0.88/dns_ip6.c | 103 + .../src/djbdns/ucspi-tcp-0.88/dns_ip6.o | Bin 0 -> 4824 bytes .../src/djbdns/ucspi-tcp-0.88/dns_ipq.c | 71 + .../src/djbdns/ucspi-tcp-0.88/dns_ipq.o | Bin 0 -> 2832 bytes .../src/djbdns/ucspi-tcp-0.88/dns_ipq6.c | 72 + .../src/djbdns/ucspi-tcp-0.88/dns_ipq6.o | Bin 0 -> 2888 bytes .../src/djbdns/ucspi-tcp-0.88/dns_name.c | 63 + .../src/djbdns/ucspi-tcp-0.88/dns_name.o | Bin 0 -> 3928 bytes NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_nd.c | 24 + NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_nd.o | Bin 0 -> 1776 bytes .../src/djbdns/ucspi-tcp-0.88/dns_nd6.c | 28 + .../src/djbdns/ucspi-tcp-0.88/dns_nd6.o | Bin 0 -> 1584 bytes .../src/djbdns/ucspi-tcp-0.88/dns_packet.c | 78 + .../src/djbdns/ucspi-tcp-0.88/dns_packet.o | Bin 0 -> 2280 bytes .../src/djbdns/ucspi-tcp-0.88/dns_random.c | 63 + .../src/djbdns/ucspi-tcp-0.88/dns_random.o | Bin 0 -> 3376 bytes .../src/djbdns/ucspi-tcp-0.88/dns_rcip.c | 85 + .../src/djbdns/ucspi-tcp-0.88/dns_rcip.o | Bin 0 -> 3864 bytes .../src/djbdns/ucspi-tcp-0.88/dns_rcrw.c | 131 + .../src/djbdns/ucspi-tcp-0.88/dns_rcrw.o | Bin 0 -> 5840 bytes .../src/djbdns/ucspi-tcp-0.88/dns_resolve.c | 30 + .../src/djbdns/ucspi-tcp-0.88/dns_resolve.o | Bin 0 -> 2192 bytes .../src/djbdns/ucspi-tcp-0.88/dns_sortip.c | 20 + .../src/djbdns/ucspi-tcp-0.88/dns_sortip.o | Bin 0 -> 1600 bytes .../src/djbdns/ucspi-tcp-0.88/dns_sortip6.c | 20 + .../src/djbdns/ucspi-tcp-0.88/dns_sortip6.o | Bin 0 -> 1592 bytes .../src/djbdns/ucspi-tcp-0.88/dns_transmit.c | 367 ++ .../src/djbdns/ucspi-tcp-0.88/dns_transmit.o | Bin 0 -> 8240 bytes .../src/djbdns/ucspi-tcp-0.88/dns_txt.c | 59 + .../src/djbdns/ucspi-tcp-0.88/dns_txt.o | Bin 0 -> 3272 bytes NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/env.c | 15 + NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/env.h | 8 + NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/env.o | Bin 0 -> 1664 bytes NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/error.c | 116 + NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/error.h | 26 + NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/error.o | Bin 0 -> 1571 bytes .../src/djbdns/ucspi-tcp-0.88/error_str.c | 269 ++ .../src/djbdns/ucspi-tcp-0.88/error_str.o | Bin 0 -> 7584 bytes NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/exit.h | 6 + NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/fd.h | 7 + .../src/djbdns/ucspi-tcp-0.88/fd_copy.c | 11 + .../src/djbdns/ucspi-tcp-0.88/fd_copy.o | Bin 0 -> 1504 bytes .../src/djbdns/ucspi-tcp-0.88/fd_move.c | 9 + .../src/djbdns/ucspi-tcp-0.88/fd_move.o | Bin 0 -> 1416 bytes .../src/djbdns/ucspi-tcp-0.88/find-systype.sh | 159 + NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/finger@ | 6 + .../src/djbdns/ucspi-tcp-0.88/finger@.1 | 45 + .../src/djbdns/ucspi-tcp-0.88/finger@.sh | 4 + NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/fixcr.1 | 11 + NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/fixcrio | Bin 0 -> 17536 bytes .../src/djbdns/ucspi-tcp-0.88/fixcrio.c | 161 + .../src/djbdns/ucspi-tcp-0.88/fixcrio.o | Bin 0 -> 6352 bytes NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/fmt.h | 25 + .../src/djbdns/ucspi-tcp-0.88/fmt_ulong.c | 13 + .../src/djbdns/ucspi-tcp-0.88/fmt_ulong.o | Bin 0 -> 1328 bytes .../src/djbdns/ucspi-tcp-0.88/fmt_xlong.c | 22 + .../src/djbdns/ucspi-tcp-0.88/fmt_xlong.o | Bin 0 -> 1416 bytes NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/fork.h | 9 + NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/fork.h1 | 9 + NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/fork.h2 | 9 + .../src/djbdns/ucspi-tcp-0.88/gen_alloc.h | 7 + .../src/djbdns/ucspi-tcp-0.88/gen_allocdefs.h | 34 + NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/getln.c | 14 + NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/getln.h | 10 + NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/getln.o | Bin 0 -> 1496 bytes NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/getln2.c | 24 + NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/getln2.o | Bin 0 -> 1864 bytes .../src/djbdns/ucspi-tcp-0.88/hassgact.h | 2 + .../src/djbdns/ucspi-tcp-0.88/hassgact.h1 | 1 + .../src/djbdns/ucspi-tcp-0.88/hassgact.h2 | 2 + .../src/djbdns/ucspi-tcp-0.88/hassgprm.h | 2 + .../src/djbdns/ucspi-tcp-0.88/hassgprm.h1 | 1 + .../src/djbdns/ucspi-tcp-0.88/hassgprm.h2 | 2 + .../src/djbdns/ucspi-tcp-0.88/hasshsgr.h | 1 + .../src/djbdns/ucspi-tcp-0.88/hasshsgr.h1 | 1 + .../src/djbdns/ucspi-tcp-0.88/hasshsgr.h2 | 2 + .../src/djbdns/ucspi-tcp-0.88/haswaitp.h | 2 + .../src/djbdns/ucspi-tcp-0.88/haswaitp.h1 | 1 + .../src/djbdns/ucspi-tcp-0.88/haswaitp.h2 | 2 + .../src/djbdns/ucspi-tcp-0.88/haveip6.h | 1 + .../src/djbdns/ucspi-tcp-0.88/haveip6.h1 | 1 + .../src/djbdns/ucspi-tcp-0.88/haveip6.h2 | 1 + NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/hier.c | 44 + NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/hier.o | Bin 0 -> 6536 bytes NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/http@ | 8 + NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/http@.1 | 52 + NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/http@.sh | 6 + NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/install | Bin 0 -> 17448 bytes .../src/djbdns/ucspi-tcp-0.88/install.c | 149 + .../src/djbdns/ucspi-tcp-0.88/install.o | Bin 0 -> 11176 bytes .../src/djbdns/ucspi-tcp-0.88/instcheck | Bin 0 -> 13808 bytes .../src/djbdns/ucspi-tcp-0.88/instcheck.c | 108 + .../src/djbdns/ucspi-tcp-0.88/instcheck.o | Bin 0 -> 5400 bytes .../src/djbdns/ucspi-tcp-0.88/iopause.c | 76 + .../src/djbdns/ucspi-tcp-0.88/iopause.h | 18 + .../src/djbdns/ucspi-tcp-0.88/iopause.h1 | 19 + .../src/djbdns/ucspi-tcp-0.88/iopause.h2 | 18 + .../src/djbdns/ucspi-tcp-0.88/iopause.o | Bin 0 -> 1912 bytes NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/ip4.h | 11 + .../src/djbdns/ucspi-tcp-0.88/ip4_fmt.c | 18 + .../src/djbdns/ucspi-tcp-0.88/ip4_fmt.o | Bin 0 -> 1632 bytes .../src/djbdns/ucspi-tcp-0.88/ip4_scan.c | 19 + .../src/djbdns/ucspi-tcp-0.88/ip4_scan.o | Bin 0 -> 1664 bytes NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/ip6.h | 28 + .../src/djbdns/ucspi-tcp-0.88/ip6_fmt.c | 64 + .../src/djbdns/ucspi-tcp-0.88/ip6_fmt.o | Bin 0 -> 2096 bytes NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/load | 4 + NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/makelib | 6 + NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/mconnect | 3 + .../src/djbdns/ucspi-tcp-0.88/mconnect-io | Bin 0 -> 12648 bytes .../src/djbdns/ucspi-tcp-0.88/mconnect-io.c | 53 + .../src/djbdns/ucspi-tcp-0.88/mconnect-io.o | Bin 0 -> 3632 bytes .../src/djbdns/ucspi-tcp-0.88/mconnect.1 | 36 + .../src/djbdns/ucspi-tcp-0.88/mconnect.sh | 1 + NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/ndelay.h | 7 + .../src/djbdns/ucspi-tcp-0.88/ndelay_off.c | 12 + .../src/djbdns/ucspi-tcp-0.88/ndelay_off.o | Bin 0 -> 1384 bytes .../src/djbdns/ucspi-tcp-0.88/ndelay_on.c | 12 + .../src/djbdns/ucspi-tcp-0.88/ndelay_on.o | Bin 0 -> 1384 bytes .../src/djbdns/ucspi-tcp-0.88/old-rules.c | 101 + NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/open.h | 10 + .../src/djbdns/ucspi-tcp-0.88/open_read.c | 6 + .../src/djbdns/ucspi-tcp-0.88/open_read.o | Bin 0 -> 1336 bytes .../src/djbdns/ucspi-tcp-0.88/open_trunc.c | 6 + .../src/djbdns/ucspi-tcp-0.88/open_trunc.o | Bin 0 -> 1344 bytes .../src/djbdns/ucspi-tcp-0.88/open_write.c | 6 + .../src/djbdns/ucspi-tcp-0.88/open_write.o | Bin 0 -> 1336 bytes .../src/djbdns/ucspi-tcp-0.88/openreadclose.c | 16 + .../src/djbdns/ucspi-tcp-0.88/openreadclose.h | 8 + .../src/djbdns/ucspi-tcp-0.88/openreadclose.o | Bin 0 -> 1608 bytes .../src/djbdns/ucspi-tcp-0.88/pathexec.h | 8 + .../src/djbdns/ucspi-tcp-0.88/pathexec_env.c | 67 + .../src/djbdns/ucspi-tcp-0.88/pathexec_env.o | Bin 0 -> 3328 bytes .../src/djbdns/ucspi-tcp-0.88/pathexec_run.c | 46 + .../src/djbdns/ucspi-tcp-0.88/pathexec_run.o | Bin 0 -> 2848 bytes NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/prot.c | 19 + NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/prot.h | 7 + NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/prot.o | Bin 0 -> 1576 bytes NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/rblsmtpd | Bin 0 -> 39104 bytes .../src/djbdns/ucspi-tcp-0.88/rblsmtpd.c | 236 + .../src/djbdns/ucspi-tcp-0.88/rblsmtpd.c.orig | 236 + .../src/djbdns/ucspi-tcp-0.88/rblsmtpd.o | Bin 0 -> 15872 bytes .../src/djbdns/ucspi-tcp-0.88/readclose.c | 21 + .../src/djbdns/ucspi-tcp-0.88/readclose.h | 9 + .../src/djbdns/ucspi-tcp-0.88/readclose.o | Bin 0 -> 2208 bytes .../src/djbdns/ucspi-tcp-0.88/readwrite.h | 7 + NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/recordio | Bin 0 -> 18328 bytes .../src/djbdns/ucspi-tcp-0.88/recordio.1 | 75 + .../src/djbdns/ucspi-tcp-0.88/recordio.c | 178 + .../src/djbdns/ucspi-tcp-0.88/recordio.o | Bin 0 -> 7792 bytes .../src/djbdns/ucspi-tcp-0.88/remoteinfo.c | 98 + .../src/djbdns/ucspi-tcp-0.88/remoteinfo.h | 10 + .../src/djbdns/ucspi-tcp-0.88/remoteinfo6.c | 98 + .../src/djbdns/ucspi-tcp-0.88/remoteinfo6.o | Bin 0 -> 4448 bytes NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/rts | 3 + NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/rts.exp | 435 ++ NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/rts.sh | 1 + .../src/djbdns/ucspi-tcp-0.88/rts.tests | 347 ++ NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/rules.c | 100 + NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/rules.h | 9 + NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/rules.o | Bin 0 -> 3864 bytes NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/scan.h | 28 + .../src/djbdns/ucspi-tcp-0.88/scan_ip6.c | 87 + .../src/djbdns/ucspi-tcp-0.88/scan_ip6.o | Bin 0 -> 2112 bytes .../src/djbdns/ucspi-tcp-0.88/scan_ulong.c | 14 + .../src/djbdns/ucspi-tcp-0.88/scan_ulong.o | Bin 0 -> 1272 bytes .../src/djbdns/ucspi-tcp-0.88/scan_xlong.c | 23 + .../src/djbdns/ucspi-tcp-0.88/scan_xlong.o | Bin 0 -> 1304 bytes NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/seek.h | 15 + .../src/djbdns/ucspi-tcp-0.88/seek_set.c | 7 + .../src/djbdns/ucspi-tcp-0.88/seek_set.o | Bin 0 -> 1352 bytes NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/select.h | 11 + .../src/djbdns/ucspi-tcp-0.88/select.h1 | 10 + .../src/djbdns/ucspi-tcp-0.88/select.h2 | 11 + .../src/djbdns/ucspi-tcp-0.88/sgetopt.c | 51 + .../src/djbdns/ucspi-tcp-0.88/sgetopt.h | 21 + .../src/djbdns/ucspi-tcp-0.88/sgetopt.o | Bin 0 -> 2696 bytes NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/sig.c | 12 + NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/sig.h | 25 + NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/sig.o | Bin 0 -> 1238 bytes .../src/djbdns/ucspi-tcp-0.88/sig_block.c | 38 + .../src/djbdns/ucspi-tcp-0.88/sig_block.o | Bin 0 -> 1968 bytes .../src/djbdns/ucspi-tcp-0.88/sig_catch.c | 16 + .../src/djbdns/ucspi-tcp-0.88/sig_catch.o | Bin 0 -> 1480 bytes .../src/djbdns/ucspi-tcp-0.88/sig_pause.c | 14 + .../src/djbdns/ucspi-tcp-0.88/sig_pause.o | Bin 0 -> 1424 bytes NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket.h | 53 + .../src/djbdns/ucspi-tcp-0.88/socket.lib | 0 .../src/djbdns/ucspi-tcp-0.88/socket_accept.c | 21 + .../src/djbdns/ucspi-tcp-0.88/socket_accept.o | Bin 0 -> 1584 bytes .../djbdns/ucspi-tcp-0.88/socket_accept6.c | 44 + .../djbdns/ucspi-tcp-0.88/socket_accept6.o | Bin 0 -> 1816 bytes .../src/djbdns/ucspi-tcp-0.88/socket_bind.c | 33 + .../src/djbdns/ucspi-tcp-0.88/socket_bind.o | Bin 0 -> 2136 bytes .../src/djbdns/ucspi-tcp-0.88/socket_bind6.c | 45 + .../src/djbdns/ucspi-tcp-0.88/socket_bind6.o | Bin 0 -> 2288 bytes .../src/djbdns/ucspi-tcp-0.88/socket_conn.c | 33 + .../src/djbdns/ucspi-tcp-0.88/socket_conn.o | Bin 0 -> 1936 bytes .../src/djbdns/ucspi-tcp-0.88/socket_conn6.c | 38 + .../src/djbdns/ucspi-tcp-0.88/socket_conn6.o | Bin 0 -> 2200 bytes .../src/djbdns/ucspi-tcp-0.88/socket_delay.c | 11 + .../src/djbdns/ucspi-tcp-0.88/socket_delay.o | Bin 0 -> 1384 bytes .../djbdns/ucspi-tcp-0.88/socket_getifidx.c | 8 + .../djbdns/ucspi-tcp-0.88/socket_getifidx.o | Bin 0 -> 1352 bytes .../djbdns/ucspi-tcp-0.88/socket_getifname.c | 14 + .../djbdns/ucspi-tcp-0.88/socket_getifname.o | Bin 0 -> 1592 bytes .../ucspi-tcp-0.88/socket_ip4loopback.c | 2 + .../ucspi-tcp-0.88/socket_ip4loopback.o | Bin 0 -> 1066 bytes .../src/djbdns/ucspi-tcp-0.88/socket_listen.c | 10 + .../src/djbdns/ucspi-tcp-0.88/socket_listen.o | Bin 0 -> 1336 bytes .../src/djbdns/ucspi-tcp-0.88/socket_local.c | 17 + .../src/djbdns/ucspi-tcp-0.88/socket_local.o | Bin 0 -> 1576 bytes .../src/djbdns/ucspi-tcp-0.88/socket_local6.c | 39 + .../src/djbdns/ucspi-tcp-0.88/socket_local6.o | Bin 0 -> 1808 bytes .../src/djbdns/ucspi-tcp-0.88/socket_opts.c | 10 + .../src/djbdns/ucspi-tcp-0.88/socket_opts.o | Bin 0 -> 1360 bytes .../src/djbdns/ucspi-tcp-0.88/socket_recv6.c | 44 + .../src/djbdns/ucspi-tcp-0.88/socket_recv6.o | Bin 0 -> 1984 bytes .../src/djbdns/ucspi-tcp-0.88/socket_remote.c | 17 + .../src/djbdns/ucspi-tcp-0.88/socket_remote.o | Bin 0 -> 1576 bytes .../djbdns/ucspi-tcp-0.88/socket_remote6.c | 39 + .../djbdns/ucspi-tcp-0.88/socket_remote6.o | Bin 0 -> 1808 bytes .../src/djbdns/ucspi-tcp-0.88/socket_send6.c | 40 + .../src/djbdns/ucspi-tcp-0.88/socket_send6.o | Bin 0 -> 2368 bytes .../src/djbdns/ucspi-tcp-0.88/socket_tcp.c | 16 + .../src/djbdns/ucspi-tcp-0.88/socket_tcp.o | Bin 0 -> 1520 bytes .../src/djbdns/ucspi-tcp-0.88/socket_tcp6.c | 44 + .../src/djbdns/ucspi-tcp-0.88/socket_tcp6.o | Bin 0 -> 1864 bytes .../src/djbdns/ucspi-tcp-0.88/socket_udp.c | 16 + .../src/djbdns/ucspi-tcp-0.88/socket_udp.o | Bin 0 -> 1520 bytes .../src/djbdns/ucspi-tcp-0.88/socket_udp6.c | 38 + .../src/djbdns/ucspi-tcp-0.88/socket_udp6.o | Bin 0 -> 1712 bytes .../ucspi-tcp-0.88/socket_v4mappedprefix.c | 2 + .../ucspi-tcp-0.88/socket_v4mappedprefix.o | Bin 0 -> 1080 bytes .../src/djbdns/ucspi-tcp-0.88/socket_v6any.c | 2 + .../src/djbdns/ucspi-tcp-0.88/socket_v6any.o | Bin 0 -> 1070 bytes .../djbdns/ucspi-tcp-0.88/socket_v6loopback.c | 2 + .../djbdns/ucspi-tcp-0.88/socket_v6loopback.o | Bin 0 -> 1080 bytes NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/str.h | 14 + .../src/djbdns/ucspi-tcp-0.88/str_chr.c | 17 + .../src/djbdns/ucspi-tcp-0.88/str_chr.o | Bin 0 -> 1400 bytes .../src/djbdns/ucspi-tcp-0.88/str_diff.c | 15 + .../src/djbdns/ucspi-tcp-0.88/str_diff.o | Bin 0 -> 1424 bytes .../src/djbdns/ucspi-tcp-0.88/str_len.c | 14 + .../src/djbdns/ucspi-tcp-0.88/str_len.o | Bin 0 -> 1320 bytes .../src/djbdns/ucspi-tcp-0.88/str_start.c | 13 + .../src/djbdns/ucspi-tcp-0.88/str_start.o | Bin 0 -> 1296 bytes .../src/djbdns/ucspi-tcp-0.88/stralloc.h | 31 + .../src/djbdns/ucspi-tcp-0.88/stralloc_cat.c | 7 + .../src/djbdns/ucspi-tcp-0.88/stralloc_cat.o | Bin 0 -> 1352 bytes .../src/djbdns/ucspi-tcp-0.88/stralloc_catb.c | 12 + .../src/djbdns/ucspi-tcp-0.88/stralloc_catb.o | Bin 0 -> 1608 bytes .../src/djbdns/ucspi-tcp-0.88/stralloc_cats.c | 8 + .../src/djbdns/ucspi-tcp-0.88/stralloc_cats.o | Bin 0 -> 1456 bytes .../src/djbdns/ucspi-tcp-0.88/stralloc_copy.c | 7 + .../src/djbdns/ucspi-tcp-0.88/stralloc_copy.o | Bin 0 -> 1352 bytes .../src/djbdns/ucspi-tcp-0.88/stralloc_eady.c | 6 + .../src/djbdns/ucspi-tcp-0.88/stralloc_eady.o | Bin 0 -> 1808 bytes .../src/djbdns/ucspi-tcp-0.88/stralloc_opyb.c | 11 + .../src/djbdns/ucspi-tcp-0.88/stralloc_opyb.o | Bin 0 -> 1504 bytes .../src/djbdns/ucspi-tcp-0.88/stralloc_opys.c | 8 + .../src/djbdns/ucspi-tcp-0.88/stralloc_opys.o | Bin 0 -> 1456 bytes .../src/djbdns/ucspi-tcp-0.88/stralloc_pend.c | 5 + .../src/djbdns/ucspi-tcp-0.88/stralloc_pend.o | Bin 0 -> 1424 bytes NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/strerr.h | 78 + .../src/djbdns/ucspi-tcp-0.88/strerr_die.c | 31 + .../src/djbdns/ucspi-tcp-0.88/strerr_die.o | Bin 0 -> 2656 bytes .../src/djbdns/ucspi-tcp-0.88/strerr_sys.c | 12 + .../src/djbdns/ucspi-tcp-0.88/strerr_sys.o | Bin 0 -> 1752 bytes .../src/djbdns/ucspi-tcp-0.88/subgetopt.c | 65 + .../src/djbdns/ucspi-tcp-0.88/subgetopt.h | 24 + .../src/djbdns/ucspi-tcp-0.88/subgetopt.o | Bin 0 -> 2232 bytes NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/systype | 1 + NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tai.h | 26 + .../src/djbdns/ucspi-tcp-0.88/tai_pack.c | 16 + .../src/djbdns/ucspi-tcp-0.88/tai_pack.o | Bin 0 -> 1256 bytes NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/taia.h | 33 + .../src/djbdns/ucspi-tcp-0.88/taia_add.c | 18 + .../src/djbdns/ucspi-tcp-0.88/taia_add.o | Bin 0 -> 1288 bytes .../src/djbdns/ucspi-tcp-0.88/taia_approx.c | 6 + .../src/djbdns/ucspi-tcp-0.88/taia_approx.o | Bin 0 -> 1440 bytes .../src/djbdns/ucspi-tcp-0.88/taia_frac.c | 6 + .../src/djbdns/ucspi-tcp-0.88/taia_frac.o | Bin 0 -> 1544 bytes .../src/djbdns/ucspi-tcp-0.88/taia_less.c | 12 + .../src/djbdns/ucspi-tcp-0.88/taia_less.o | Bin 0 -> 1280 bytes .../src/djbdns/ucspi-tcp-0.88/taia_now.c | 12 + .../src/djbdns/ucspi-tcp-0.88/taia_now.o | Bin 0 -> 1408 bytes .../src/djbdns/ucspi-tcp-0.88/taia_pack.c | 20 + .../src/djbdns/ucspi-tcp-0.88/taia_pack.o | Bin 0 -> 1424 bytes .../src/djbdns/ucspi-tcp-0.88/taia_sub.c | 21 + .../src/djbdns/ucspi-tcp-0.88/taia_sub.o | Bin 0 -> 1288 bytes .../src/djbdns/ucspi-tcp-0.88/taia_uint.c | 10 + .../src/djbdns/ucspi-tcp-0.88/taia_uint.o | Bin 0 -> 1224 bytes .../src/djbdns/ucspi-tcp-0.88/tcp-environ.5 | 66 + NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tcpcat | 3 + NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tcpcat.1 | 20 + .../src/djbdns/ucspi-tcp-0.88/tcpcat.sh | 1 + .../src/djbdns/ucspi-tcp-0.88/tcpclient | Bin 0 -> 48688 bytes .../src/djbdns/ucspi-tcp-0.88/tcpclient.1 | 173 + .../src/djbdns/ucspi-tcp-0.88/tcpclient.c | 245 ++ .../src/djbdns/ucspi-tcp-0.88/tcpclient.o | Bin 0 -> 18968 bytes NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tcprules | Bin 0 -> 24600 bytes .../src/djbdns/ucspi-tcp-0.88/tcprules.1 | 221 + .../src/djbdns/ucspi-tcp-0.88/tcprules.c | 182 + .../src/djbdns/ucspi-tcp-0.88/tcprules.o | Bin 0 -> 11816 bytes .../src/djbdns/ucspi-tcp-0.88/tcprulescheck | Bin 0 -> 16864 bytes .../src/djbdns/ucspi-tcp-0.88/tcprulescheck.1 | 25 + .../src/djbdns/ucspi-tcp-0.88/tcprulescheck.c | 57 + .../src/djbdns/ucspi-tcp-0.88/tcprulescheck.o | Bin 0 -> 3840 bytes .../src/djbdns/ucspi-tcp-0.88/tcpserver | Bin 0 -> 56000 bytes .../src/djbdns/ucspi-tcp-0.88/tcpserver.1 | 266 ++ .../src/djbdns/ucspi-tcp-0.88/tcpserver.c | 468 ++ .../src/djbdns/ucspi-tcp-0.88/tcpserver.o | Bin 0 -> 29480 bytes NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/time.a | Bin 0 -> 14872 bytes .../src/djbdns/ucspi-tcp-0.88/timeoutconn.c | 34 + .../src/djbdns/ucspi-tcp-0.88/timeoutconn.h | 10 + .../src/djbdns/ucspi-tcp-0.88/timeoutconn6.c | 34 + .../src/djbdns/ucspi-tcp-0.88/timeoutconn6.o | Bin 0 -> 2320 bytes NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/trycpp.c | 7 + NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tryip6.c | 8 + .../src/djbdns/ucspi-tcp-0.88/trylsock.c | 4 + .../src/djbdns/ucspi-tcp-0.88/trypoll.c | 18 + .../src/djbdns/ucspi-tcp-0.88/trysgact.c | 10 + .../src/djbdns/ucspi-tcp-0.88/trysgprm.c | 10 + .../src/djbdns/ucspi-tcp-0.88/tryshsgr.c | 14 + .../src/djbdns/ucspi-tcp-0.88/trysysel.c | 8 + .../src/djbdns/ucspi-tcp-0.88/tryulong32.c | 11 + .../src/djbdns/ucspi-tcp-0.88/tryulong64.c | 11 + .../src/djbdns/ucspi-tcp-0.88/tryvfork.c | 4 + .../src/djbdns/ucspi-tcp-0.88/trywaitp.c | 7 + NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/uint16.h | 11 + .../src/djbdns/ucspi-tcp-0.88/uint16_pack.c | 13 + .../src/djbdns/ucspi-tcp-0.88/uint16_pack.o | Bin 0 -> 1328 bytes .../src/djbdns/ucspi-tcp-0.88/uint16_unpack.c | 23 + .../src/djbdns/ucspi-tcp-0.88/uint16_unpack.o | Bin 0 -> 1336 bytes NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/uint32.h | 11 + .../src/djbdns/ucspi-tcp-0.88/uint32.h1 | 11 + .../src/djbdns/ucspi-tcp-0.88/uint32.h2 | 11 + .../src/djbdns/ucspi-tcp-0.88/uint32_pack.c | 21 + .../src/djbdns/ucspi-tcp-0.88/uint32_pack.o | Bin 0 -> 1360 bytes .../src/djbdns/ucspi-tcp-0.88/uint32_unpack.c | 31 + .../src/djbdns/ucspi-tcp-0.88/uint32_unpack.o | Bin 0 -> 1392 bytes NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/uint64.h | 8 + .../src/djbdns/ucspi-tcp-0.88/uint64.h1 | 8 + .../src/djbdns/ucspi-tcp-0.88/uint64.h2 | 8 + NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/unix.a | Bin 0 -> 131122 bytes .../usr/local/man/man1/tcpclient.1 | 173 + .../usr/local/man/man1/tcpserver.1 | 266 ++ NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/wait.h | 14 + .../src/djbdns/ucspi-tcp-0.88/wait_nohang.c | 12 + .../src/djbdns/ucspi-tcp-0.88/wait_nohang.o | Bin 0 -> 1352 bytes .../src/djbdns/ucspi-tcp-0.88/wait_pid.c | 39 + .../src/djbdns/ucspi-tcp-0.88/wait_pid.o | Bin 0 -> 1520 bytes .../src/djbdns/ucspi-tcp-0.88/warn-auto.sh | 2 + .../src/djbdns/ucspi-tcp-0.88/warn-shsgr | 3 + NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/who@ | 3 + NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/who@.1 | 32 + NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/who@.sh | 1 + .../src/djbdns/ucspi-tcp-0.88/x86cpuid.c | 38 + .../src/igmpproxy/igmpproxy.configure.txt | 1 + NONE-CKUBU/src/ipt-gateway | 2 +- NONE-CKUBU/src/mailsystem | 2 +- 1110 files changed, 39330 insertions(+), 40 deletions(-) create mode 100644 NONE-CKUBU/ipt-firewall/interfaces_ipv6.conf create mode 100644 NONE-CKUBU/peers/dsl-provider.DSL create mode 100644 NONE-CKUBU/peers/dsl-provider.VDSL create mode 100755 NONE-CKUBU/sbin/check_net.sh create mode 100755 NONE-CKUBU/sbin/ip6t-firewall-gateway create mode 100755 NONE-CKUBU/sbin/netconfig.sh create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/CHANGES create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/FILES create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/Makefile create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/README create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/SYSDEPS create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/TARGETS create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/TINYDNS create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/TODO create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/VERSION create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/alloc.a create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/alloc.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/alloc.h create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/alloc.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/alloc_re.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/alloc_re.o create mode 100755 NONE-CKUBU/src/djbdns/djbdns-1.05/auto-str create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/auto-str.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/auto-str.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/auto_home.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/auto_home.h create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/auto_home.o create mode 100755 NONE-CKUBU/src/djbdns/djbdns-1.05/axfr-get create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/axfr-get.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/axfr-get.o create mode 100755 NONE-CKUBU/src/djbdns/djbdns-1.05/axfrdns create mode 100755 NONE-CKUBU/src/djbdns/djbdns-1.05/axfrdns-conf create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/axfrdns-conf.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/axfrdns-conf.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/axfrdns.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/axfrdns.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/buffer.a create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/buffer.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/buffer.h create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/buffer.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/buffer_1.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/buffer_1.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/buffer_2.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/buffer_2.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/buffer_copy.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/buffer_copy.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/buffer_get.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/buffer_get.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/buffer_put.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/buffer_put.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/buffer_read.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/buffer_read.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/buffer_write.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/buffer_write.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/byte.a create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/byte.h create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/byte_chr.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/byte_chr.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/byte_copy.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/byte_copy.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/byte_cr.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/byte_cr.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/byte_diff.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/byte_diff.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/byte_zero.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/byte_zero.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/cache.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/cache.h create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/cache.o create mode 100755 NONE-CKUBU/src/djbdns/djbdns-1.05/cachetest create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/cachetest.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/cachetest.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/case.h create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/case_diffb.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/case_diffb.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/case_diffs.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/case_diffs.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/case_lowerb.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/case_lowerb.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/cdb.a create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/cdb.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/cdb.h create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/cdb.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/cdb_hash.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/cdb_hash.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/cdb_make.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/cdb_make.h create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/cdb_make.o create mode 100755 NONE-CKUBU/src/djbdns/djbdns-1.05/chkshsgr create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/chkshsgr.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/chkshsgr.o create mode 100755 NONE-CKUBU/src/djbdns/djbdns-1.05/choose create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/choose.sh create mode 100755 NONE-CKUBU/src/djbdns/djbdns-1.05/compile create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/conf-cc create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/conf-home create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/conf-ld create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/dd.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/dd.h create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/dd.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/direntry.h create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/direntry.h1 create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/direntry.h2 create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/dns.a create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/dns.h create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/dns_dfd.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/dns_dfd.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/dns_domain.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/dns_domain.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/dns_dtda.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/dns_dtda.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/dns_ip.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/dns_ip.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/dns_ip6.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/dns_ip6.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/dns_ipq.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/dns_ipq.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/dns_ipq6.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/dns_ipq6.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/dns_mx.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/dns_mx.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/dns_name.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/dns_name.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/dns_nd.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/dns_nd.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/dns_nd6.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/dns_nd6.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/dns_packet.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/dns_packet.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/dns_random.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/dns_random.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/dns_rcip.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/dns_rcip.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/dns_rcrw.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/dns_rcrw.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/dns_resolve.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/dns_resolve.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/dns_sortip.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/dns_sortip.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/dns_sortip6.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/dns_sortip6.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/dns_transmit.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/dns_transmit.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/dns_txt.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/dns_txt.o create mode 100755 NONE-CKUBU/src/djbdns/djbdns-1.05/dnscache create mode 100755 NONE-CKUBU/src/djbdns/djbdns-1.05/dnscache-conf create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/dnscache-conf.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/dnscache-conf.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/dnscache.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/dnscache.o create mode 100755 NONE-CKUBU/src/djbdns/djbdns-1.05/dnsfilter create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/dnsfilter.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/dnsfilter.o create mode 100755 NONE-CKUBU/src/djbdns/djbdns-1.05/dnsip create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/dnsip.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/dnsip.o create mode 100755 NONE-CKUBU/src/djbdns/djbdns-1.05/dnsip6 create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/dnsip6.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/dnsip6.o create mode 100755 NONE-CKUBU/src/djbdns/djbdns-1.05/dnsip6q create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/dnsip6q.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/dnsip6q.o create mode 100755 NONE-CKUBU/src/djbdns/djbdns-1.05/dnsipq create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/dnsipq.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/dnsipq.o create mode 100755 NONE-CKUBU/src/djbdns/djbdns-1.05/dnsmx create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/dnsmx.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/dnsmx.o create mode 100755 NONE-CKUBU/src/djbdns/djbdns-1.05/dnsname create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/dnsname.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/dnsname.o create mode 100755 NONE-CKUBU/src/djbdns/djbdns-1.05/dnsq create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/dnsq.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/dnsq.o create mode 100755 NONE-CKUBU/src/djbdns/djbdns-1.05/dnsqr create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/dnsqr.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/dnsqr.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/dnsroots.global create mode 100755 NONE-CKUBU/src/djbdns/djbdns-1.05/dnstrace create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/dnstrace.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/dnstrace.o create mode 100755 NONE-CKUBU/src/djbdns/djbdns-1.05/dnstracesort create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/dnstracesort.sh create mode 100755 NONE-CKUBU/src/djbdns/djbdns-1.05/dnstxt create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/dnstxt.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/dnstxt.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/droproot.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/droproot.h create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/droproot.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/env.a create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/env.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/env.h create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/env.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/error.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/error.h create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/error.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/error_str.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/error_str.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/exit.h create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/find-systype.sh create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/fmt.h create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/fmt_ulong.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/fmt_ulong.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/fmt_xlong.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/fmt_xlong.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/gen_alloc.h create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/gen_allocdefs.h create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/generic-conf.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/generic-conf.h create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/generic-conf.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/getln.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/getln.h create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/getln.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/getln2.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/getln2.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/getopt.a create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/hasdevtcp.h create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/hasdevtcp.h1 create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/hasdevtcp.h2 create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/hasshsgr.h create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/hasshsgr.h1 create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/hasshsgr.h2 create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/haveip6.h create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/haveip6.h1 create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/haveip6.h2 create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/haven2i.h create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/haven2i.h1 create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/haven2i.h2 create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/hier.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/hier.o create mode 100755 NONE-CKUBU/src/djbdns/djbdns-1.05/install create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/install.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/install.o create mode 100755 NONE-CKUBU/src/djbdns/djbdns-1.05/instcheck create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/instcheck.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/instcheck.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/iopause.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/iopause.h create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/iopause.h1 create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/iopause.h2 create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/iopause.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/ip4.h create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/ip4_fmt.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/ip4_fmt.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/ip4_scan.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/ip4_scan.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/ip6.h create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/ip6_fmt.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/ip6_fmt.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/ip6_scan.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/ip6_scan.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/libtai.a create mode 100755 NONE-CKUBU/src/djbdns/djbdns-1.05/load create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/log.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/log.h create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/log.o create mode 100755 NONE-CKUBU/src/djbdns/djbdns-1.05/makelib create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/ndelay.h create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/ndelay_off.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/ndelay_off.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/ndelay_on.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/ndelay_on.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/okclient.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/okclient.h create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/okclient.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/open.h create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/open_read.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/open_read.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/open_trunc.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/open_trunc.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/openreadclose.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/openreadclose.h create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/openreadclose.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/parsetype.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/parsetype.h create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/parsetype.o create mode 100755 NONE-CKUBU/src/djbdns/djbdns-1.05/pickdns create mode 100755 NONE-CKUBU/src/djbdns/djbdns-1.05/pickdns-conf create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/pickdns-conf.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/pickdns-conf.o create mode 100755 NONE-CKUBU/src/djbdns/djbdns-1.05/pickdns-data create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/pickdns-data.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/pickdns-data.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/pickdns.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/pickdns.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/printpacket.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/printpacket.h create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/printpacket.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/printrecord.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/printrecord.h create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/printrecord.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/prot.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/prot.h create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/prot.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/qlog.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/qlog.h create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/qlog.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/query.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/query.h create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/query.o create mode 100755 NONE-CKUBU/src/djbdns/djbdns-1.05/random-ip create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/random-ip.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/random-ip.o create mode 100755 NONE-CKUBU/src/djbdns/djbdns-1.05/rbldns create mode 100755 NONE-CKUBU/src/djbdns/djbdns-1.05/rbldns-conf create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/rbldns-conf.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/rbldns-conf.o create mode 100755 NONE-CKUBU/src/djbdns/djbdns-1.05/rbldns-data create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/rbldns-data.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/rbldns-data.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/rbldns.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/rbldns.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/readclose.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/readclose.h create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/readclose.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/response.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/response.h create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/response.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/roots.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/roots.h create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/roots.o create mode 100755 NONE-CKUBU/src/djbdns/djbdns-1.05/rts create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/rts.exp create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/rts.sh create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/rts.tests create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/scan.h create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/scan_ulong.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/scan_ulong.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/scan_xlong.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/scan_xlong.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/seek.h create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/seek_set.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/seek_set.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/select.h create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/select.h1 create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/select.h2 create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/server.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/server.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/sgetopt.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/sgetopt.h create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/sgetopt.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/sockaddr_in6.h create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/sockaddr_in6.h1 create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/sockaddr_in6.h2 create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/socket.h create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/socket.lib create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/socket_accept.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/socket_accept.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/socket_accept6.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/socket_accept6.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/socket_bind.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/socket_bind.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/socket_bind6.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/socket_bind6.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/socket_conn.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/socket_conn.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/socket_connect6.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/socket_connect6.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/socket_getifidx.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/socket_getifidx.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/socket_listen.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/socket_listen.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/socket_noipv6.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/socket_noipv6.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/socket_recv.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/socket_recv.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/socket_recv6.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/socket_recv6.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/socket_send.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/socket_send.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/socket_send6.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/socket_send6.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/socket_tcp.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/socket_tcp.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/socket_tcp6.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/socket_tcp6.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/socket_udp.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/socket_udp.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/socket_udp6.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/socket_udp6.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/str.h create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/str_chr.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/str_chr.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/str_diff.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/str_diff.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/str_len.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/str_len.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/str_rchr.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/str_rchr.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/str_start.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/str_start.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/stralloc.h create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/stralloc_cat.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/stralloc_cat.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/stralloc_catb.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/stralloc_catb.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/stralloc_cats.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/stralloc_cats.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/stralloc_copy.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/stralloc_copy.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/stralloc_eady.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/stralloc_eady.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/stralloc_num.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/stralloc_num.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/stralloc_opyb.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/stralloc_opyb.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/stralloc_opys.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/stralloc_opys.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/stralloc_pend.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/stralloc_pend.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/strerr.h create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/strerr_die.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/strerr_die.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/strerr_sys.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/strerr_sys.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/subgetopt.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/subgetopt.h create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/subgetopt.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/systype create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/tai.h create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/tai_add.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/tai_add.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/tai_now.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/tai_now.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/tai_pack.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/tai_pack.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/tai_sub.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/tai_sub.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/tai_uint.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/tai_uint.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/tai_unpack.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/tai_unpack.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/taia.h create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/taia_add.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/taia_add.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/taia_approx.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/taia_approx.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/taia_frac.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/taia_frac.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/taia_less.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/taia_less.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/taia_now.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/taia_now.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/taia_pack.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/taia_pack.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/taia_sub.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/taia_sub.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/taia_tai.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/taia_tai.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/taia_uint.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/taia_uint.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/tdlookup.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/tdlookup.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/timeoutread.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/timeoutread.h create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/timeoutread.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/timeoutwrite.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/timeoutwrite.h create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/timeoutwrite.o create mode 100755 NONE-CKUBU/src/djbdns/djbdns-1.05/tinydns create mode 100755 NONE-CKUBU/src/djbdns/djbdns-1.05/tinydns-conf create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/tinydns-conf.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/tinydns-conf.o create mode 100755 NONE-CKUBU/src/djbdns/djbdns-1.05/tinydns-data create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/tinydns-data.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/tinydns-data.o create mode 100755 NONE-CKUBU/src/djbdns/djbdns-1.05/tinydns-edit create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/tinydns-edit.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/tinydns-edit.o create mode 100755 NONE-CKUBU/src/djbdns/djbdns-1.05/tinydns-get create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/tinydns-get.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/tinydns-get.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/tinydns.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/tinydns.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/trycpp.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/trydrent.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/tryip6.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/trylsock.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/tryn2i.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/trypoll.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/trysa6.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/tryshsgr.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/trysysel.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/tryulong32.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/tryulong64.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/uint16.h create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/uint16_pack.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/uint16_pack.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/uint16_unpack.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/uint16_unpack.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/uint32.h create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/uint32.h1 create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/uint32.h2 create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/uint32_pack.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/uint32_pack.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/uint32_unpack.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/uint32_unpack.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/uint64.h create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/uint64.h1 create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/uint64.h2 create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/unix.a create mode 100755 NONE-CKUBU/src/djbdns/djbdns-1.05/utime create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/utime.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/utime.o create mode 100755 NONE-CKUBU/src/djbdns/djbdns-1.05/walldns create mode 100755 NONE-CKUBU/src/djbdns/djbdns-1.05/walldns-conf create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/walldns-conf.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/walldns-conf.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/walldns.c create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/walldns.o create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/warn-auto.sh create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/warn-shsgr create mode 100644 NONE-CKUBU/src/djbdns/djbdns-1.05/x86cpuid.c create mode 100644 NONE-CKUBU/src/djbdns/qlogtools-3.1/ANNOUNCEMENT create mode 100644 NONE-CKUBU/src/djbdns/qlogtools-3.1/COPYING create mode 100644 NONE-CKUBU/src/djbdns/qlogtools-3.1/FILES create mode 100644 NONE-CKUBU/src/djbdns/qlogtools-3.1/Makefile create mode 100644 NONE-CKUBU/src/djbdns/qlogtools-3.1/NEWS create mode 100644 NONE-CKUBU/src/djbdns/qlogtools-3.1/README create mode 100644 NONE-CKUBU/src/djbdns/qlogtools-3.1/TARGETS create mode 100644 NONE-CKUBU/src/djbdns/qlogtools-3.1/TODO create mode 100644 NONE-CKUBU/src/djbdns/qlogtools-3.1/VERSION create mode 100644 NONE-CKUBU/src/djbdns/qlogtools-3.1/bool.h create mode 100755 NONE-CKUBU/src/djbdns/qlogtools-3.1/choose create mode 100644 NONE-CKUBU/src/djbdns/qlogtools-3.1/choose.sh create mode 100755 NONE-CKUBU/src/djbdns/qlogtools-3.1/compile create mode 100644 NONE-CKUBU/src/djbdns/qlogtools-3.1/conf-bin create mode 100644 NONE-CKUBU/src/djbdns/qlogtools-3.1/conf-cc create mode 100644 NONE-CKUBU/src/djbdns/qlogtools-3.1/conf-ld create mode 100644 NONE-CKUBU/src/djbdns/qlogtools-3.1/conf-man create mode 100644 NONE-CKUBU/src/djbdns/qlogtools-3.1/conf_bin.c create mode 100644 NONE-CKUBU/src/djbdns/qlogtools-3.1/conf_man.c create mode 100644 NONE-CKUBU/src/djbdns/qlogtools-3.1/direntry.h create mode 100644 NONE-CKUBU/src/djbdns/qlogtools-3.1/direntry.h1 create mode 100644 NONE-CKUBU/src/djbdns/qlogtools-3.1/direntry.h2 create mode 100644 NONE-CKUBU/src/djbdns/qlogtools-3.1/fork.h create mode 100644 NONE-CKUBU/src/djbdns/qlogtools-3.1/fork.h1 create mode 100644 NONE-CKUBU/src/djbdns/qlogtools-3.1/fork.h2 create mode 100755 NONE-CKUBU/src/djbdns/qlogtools-3.1/installer create mode 100644 NONE-CKUBU/src/djbdns/qlogtools-3.1/installer.c create mode 100644 NONE-CKUBU/src/djbdns/qlogtools-3.1/installer.h create mode 100644 NONE-CKUBU/src/djbdns/qlogtools-3.1/installer.o create mode 100755 NONE-CKUBU/src/djbdns/qlogtools-3.1/instcheck create mode 100644 NONE-CKUBU/src/djbdns/qlogtools-3.1/instcheck.c create mode 100644 NONE-CKUBU/src/djbdns/qlogtools-3.1/instcheck.o create mode 100644 NONE-CKUBU/src/djbdns/qlogtools-3.1/insthier.c create mode 100644 NONE-CKUBU/src/djbdns/qlogtools-3.1/insthier.o create mode 100755 NONE-CKUBU/src/djbdns/qlogtools-3.1/instshow create mode 100644 NONE-CKUBU/src/djbdns/qlogtools-3.1/instshow.c create mode 100644 NONE-CKUBU/src/djbdns/qlogtools-3.1/instshow.o create mode 100755 NONE-CKUBU/src/djbdns/qlogtools-3.1/load create mode 100755 NONE-CKUBU/src/djbdns/qlogtools-3.1/multipipe create mode 100644 NONE-CKUBU/src/djbdns/qlogtools-3.1/multipipe.1 create mode 100644 NONE-CKUBU/src/djbdns/qlogtools-3.1/multipipe.c create mode 100644 NONE-CKUBU/src/djbdns/qlogtools-3.1/multipipe.o create mode 100755 NONE-CKUBU/src/djbdns/qlogtools-3.1/multitail create mode 100644 NONE-CKUBU/src/djbdns/qlogtools-3.1/multitail.1 create mode 100644 NONE-CKUBU/src/djbdns/qlogtools-3.1/multitail.c create mode 100644 NONE-CKUBU/src/djbdns/qlogtools-3.1/multitail.o create mode 100755 NONE-CKUBU/src/djbdns/qlogtools-3.1/qfilelog create mode 100644 NONE-CKUBU/src/djbdns/qlogtools-3.1/qfilelog.1 create mode 100644 NONE-CKUBU/src/djbdns/qlogtools-3.1/qfilelog.c create mode 100644 NONE-CKUBU/src/djbdns/qlogtools-3.1/qfilelog.o create mode 100644 NONE-CKUBU/src/djbdns/qlogtools-3.1/qlogselect.1 create mode 100644 NONE-CKUBU/src/djbdns/qlogtools-3.1/qlogtools-3.1.spec create mode 100644 NONE-CKUBU/src/djbdns/qlogtools-3.1/select.h create mode 100644 NONE-CKUBU/src/djbdns/qlogtools-3.1/select.h1 create mode 100644 NONE-CKUBU/src/djbdns/qlogtools-3.1/select.h2 create mode 100755 NONE-CKUBU/src/djbdns/qlogtools-3.1/spipe create mode 100644 NONE-CKUBU/src/djbdns/qlogtools-3.1/spipe.1 create mode 100644 NONE-CKUBU/src/djbdns/qlogtools-3.1/spipe.c create mode 100644 NONE-CKUBU/src/djbdns/qlogtools-3.1/spipe.o create mode 100644 NONE-CKUBU/src/djbdns/qlogtools-3.1/svcfns.c create mode 100644 NONE-CKUBU/src/djbdns/qlogtools-3.1/svcfns.h create mode 100644 NONE-CKUBU/src/djbdns/qlogtools-3.1/svcfns.o create mode 100644 NONE-CKUBU/src/djbdns/qlogtools-3.1/systime.h create mode 100644 NONE-CKUBU/src/djbdns/qlogtools-3.1/tai.h create mode 100755 NONE-CKUBU/src/djbdns/qlogtools-3.1/tai2tai64n create mode 100644 NONE-CKUBU/src/djbdns/qlogtools-3.1/tai2tai64n.1 create mode 100644 NONE-CKUBU/src/djbdns/qlogtools-3.1/tai2tai64n.c create mode 100644 NONE-CKUBU/src/djbdns/qlogtools-3.1/tai2tai64n.o create mode 100755 NONE-CKUBU/src/djbdns/qlogtools-3.1/tai64n2tai create mode 100644 NONE-CKUBU/src/djbdns/qlogtools-3.1/tai64n2tai.1 create mode 100644 NONE-CKUBU/src/djbdns/qlogtools-3.1/tai64n2tai.c create mode 100644 NONE-CKUBU/src/djbdns/qlogtools-3.1/tai64n2tai.o create mode 100644 NONE-CKUBU/src/djbdns/qlogtools-3.1/tai64n_decode.c create mode 100644 NONE-CKUBU/src/djbdns/qlogtools-3.1/tai64n_decode.o create mode 100644 NONE-CKUBU/src/djbdns/qlogtools-3.1/tai64n_encode.c create mode 100644 NONE-CKUBU/src/djbdns/qlogtools-3.1/tai64n_encode.o create mode 100644 NONE-CKUBU/src/djbdns/qlogtools-3.1/tai_decode.c create mode 100644 NONE-CKUBU/src/djbdns/qlogtools-3.1/tai_decode.o create mode 100644 NONE-CKUBU/src/djbdns/qlogtools-3.1/tai_encode.c create mode 100644 NONE-CKUBU/src/djbdns/qlogtools-3.1/tai_encode.o create mode 100755 NONE-CKUBU/src/djbdns/qlogtools-3.1/teepipe create mode 100644 NONE-CKUBU/src/djbdns/qlogtools-3.1/teepipe.1 create mode 100644 NONE-CKUBU/src/djbdns/qlogtools-3.1/teepipe.c create mode 100644 NONE-CKUBU/src/djbdns/qlogtools-3.1/teepipe.o create mode 100644 NONE-CKUBU/src/djbdns/qlogtools-3.1/trydirent.c create mode 100644 NONE-CKUBU/src/djbdns/qlogtools-3.1/trysysel.c create mode 100644 NONE-CKUBU/src/djbdns/qlogtools-3.1/trysystime.c create mode 100644 NONE-CKUBU/src/djbdns/qlogtools-3.1/trytime.c create mode 100644 NONE-CKUBU/src/djbdns/qlogtools-3.1/tryvfork.c create mode 100644 NONE-CKUBU/src/djbdns/qlogtools-3.1/warn-auto.sh create mode 100644 NONE-CKUBU/src/djbdns/tarballs/daemontools-0.76-man.tar.gz create mode 100644 NONE-CKUBU/src/djbdns/tarballs/daemontools-0.76.errno.patch create mode 100644 NONE-CKUBU/src/djbdns/tarballs/daemontools-0.76.tar.gz create mode 100644 NONE-CKUBU/src/djbdns/tarballs/djbdns-1.05-ixfr.diff.gz create mode 100644 NONE-CKUBU/src/djbdns/tarballs/djbdns-1.05-test23.diff.bz2 create mode 100644 NONE-CKUBU/src/djbdns/tarballs/djbdns-1.05.tar.gz create mode 100644 NONE-CKUBU/src/djbdns/tarballs/doc.tar.gz create mode 100644 NONE-CKUBU/src/djbdns/tarballs/qlogtools-3.1.tar.gz create mode 100644 NONE-CKUBU/src/djbdns/tarballs/qlogtools_errno.patch create mode 100644 NONE-CKUBU/src/djbdns/tarballs/ucspi-tcp-0.88-ipv6.diff19.bz2 create mode 100644 NONE-CKUBU/src/djbdns/tarballs/ucspi-tcp-0.88-man.tar.gz create mode 100644 NONE-CKUBU/src/djbdns/tarballs/ucspi-tcp-0.88.a_record.patch create mode 100644 NONE-CKUBU/src/djbdns/tarballs/ucspi-tcp-0.88.nobase.patch create mode 100644 NONE-CKUBU/src/djbdns/tarballs/ucspi-tcp-0.88.tar.gz create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88-man/README create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88-man/addcr.1.gz create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88-man/argv0.1.gz create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88-man/date@.1.gz create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88-man/delcr.1.gz create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88-man/finger@.1.gz create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88-man/fixcrio.1.gz create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88-man/http@.1.gz create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88-man/mconnect.1.gz create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88-man/rblsmtpd.1.gz create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88-man/recordio.1.gz create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88-man/tcpcat.1.gz create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88-man/tcpclient.1.gz create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88-man/tcprules.1.gz create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88-man/tcprulescheck.1.gz create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88-man/tcpserver.1.gz create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88-man/who@.1.gz create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/CHANGES create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/FILES create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/Makefile create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/README create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/SYSDEPS create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/TARGETS create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/TODO create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/VERSION create mode 100755 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/addcr create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/addcr.1 create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/addcr.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/addcr.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/alloc.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/alloc.h create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/alloc.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/alloc_re.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/alloc_re.o create mode 100755 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/argv0 create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/argv0.1 create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/argv0.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/argv0.o create mode 100755 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/auto-str create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/auto-str.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/auto-str.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/auto_home.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/auto_home.h create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/auto_home.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/buffer.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/buffer.h create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/buffer.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/buffer_0.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/buffer_0.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/buffer_1.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/buffer_1.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/buffer_2.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/buffer_2.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/buffer_copy.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/buffer_copy.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/buffer_get.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/buffer_get.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/buffer_put.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/buffer_put.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/byte.a create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/byte.h create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/byte_chr.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/byte_chr.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/byte_copy.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/byte_copy.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/byte_cr.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/byte_cr.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/byte_diff.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/byte_diff.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/byte_rchr.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/byte_rchr.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/byte_zero.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/byte_zero.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/case.h create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/case_diffb.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/case_diffb.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/case_diffs.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/case_diffs.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/cdb.a create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/cdb.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/cdb.h create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/cdb.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/cdb_hash.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/cdb_hash.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/cdb_make.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/cdb_make.h create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/cdb_make.o create mode 100755 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/chkshsgr create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/chkshsgr.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/chkshsgr.o create mode 100755 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/choose create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/choose.sh create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/commands.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/commands.h create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/commands.o create mode 100755 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/compile create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/conf-cc create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/conf-home create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/conf-ld create mode 100755 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/date@ create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/date@.1 create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/date@.sh create mode 100755 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/delcr create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/delcr.1 create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/delcr.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/delcr.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns.a create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns.h create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_dfd.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_dfd.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_domain.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_domain.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_dtda.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_dtda.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_ip.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_ip.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_ip6.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_ip6.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_ipq.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_ipq.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_ipq6.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_ipq6.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_name.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_name.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_nd.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_nd.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_nd6.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_nd6.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_packet.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_packet.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_random.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_random.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_rcip.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_rcip.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_rcrw.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_rcrw.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_resolve.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_resolve.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_sortip.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_sortip.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_sortip6.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_sortip6.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_transmit.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_transmit.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_txt.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_txt.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/env.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/env.h create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/env.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/error.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/error.h create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/error.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/error_str.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/error_str.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/exit.h create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/fd.h create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/fd_copy.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/fd_copy.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/fd_move.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/fd_move.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/find-systype.sh create mode 100755 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/finger@ create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/finger@.1 create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/finger@.sh create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/fixcr.1 create mode 100755 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/fixcrio create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/fixcrio.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/fixcrio.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/fmt.h create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/fmt_ulong.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/fmt_ulong.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/fmt_xlong.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/fmt_xlong.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/fork.h create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/fork.h1 create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/fork.h2 create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/gen_alloc.h create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/gen_allocdefs.h create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/getln.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/getln.h create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/getln.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/getln2.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/getln2.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/hassgact.h create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/hassgact.h1 create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/hassgact.h2 create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/hassgprm.h create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/hassgprm.h1 create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/hassgprm.h2 create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/hasshsgr.h create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/hasshsgr.h1 create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/hasshsgr.h2 create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/haswaitp.h create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/haswaitp.h1 create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/haswaitp.h2 create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/haveip6.h create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/haveip6.h1 create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/haveip6.h2 create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/hier.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/hier.o create mode 100755 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/http@ create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/http@.1 create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/http@.sh create mode 100755 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/install create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/install.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/install.o create mode 100755 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/instcheck create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/instcheck.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/instcheck.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/iopause.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/iopause.h create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/iopause.h1 create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/iopause.h2 create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/iopause.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/ip4.h create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/ip4_fmt.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/ip4_fmt.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/ip4_scan.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/ip4_scan.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/ip6.h create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/ip6_fmt.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/ip6_fmt.o create mode 100755 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/load create mode 100755 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/makelib create mode 100755 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/mconnect create mode 100755 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/mconnect-io create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/mconnect-io.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/mconnect-io.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/mconnect.1 create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/mconnect.sh create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/ndelay.h create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/ndelay_off.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/ndelay_off.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/ndelay_on.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/ndelay_on.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/old-rules.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/open.h create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/open_read.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/open_read.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/open_trunc.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/open_trunc.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/open_write.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/open_write.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/openreadclose.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/openreadclose.h create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/openreadclose.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/pathexec.h create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/pathexec_env.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/pathexec_env.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/pathexec_run.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/pathexec_run.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/prot.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/prot.h create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/prot.o create mode 100755 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/rblsmtpd create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/rblsmtpd.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/rblsmtpd.c.orig create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/rblsmtpd.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/readclose.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/readclose.h create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/readclose.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/readwrite.h create mode 100755 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/recordio create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/recordio.1 create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/recordio.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/recordio.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/remoteinfo.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/remoteinfo.h create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/remoteinfo6.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/remoteinfo6.o create mode 100755 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/rts create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/rts.exp create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/rts.sh create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/rts.tests create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/rules.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/rules.h create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/rules.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/scan.h create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/scan_ip6.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/scan_ip6.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/scan_ulong.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/scan_ulong.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/scan_xlong.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/scan_xlong.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/seek.h create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/seek_set.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/seek_set.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/select.h create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/select.h1 create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/select.h2 create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/sgetopt.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/sgetopt.h create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/sgetopt.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/sig.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/sig.h create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/sig.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/sig_block.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/sig_block.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/sig_catch.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/sig_catch.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/sig_pause.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/sig_pause.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket.h create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket.lib create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_accept.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_accept.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_accept6.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_accept6.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_bind.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_bind.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_bind6.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_bind6.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_conn.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_conn.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_conn6.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_conn6.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_delay.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_delay.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_getifidx.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_getifidx.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_getifname.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_getifname.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_ip4loopback.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_ip4loopback.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_listen.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_listen.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_local.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_local.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_local6.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_local6.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_opts.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_opts.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_recv6.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_recv6.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_remote.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_remote.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_remote6.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_remote6.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_send6.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_send6.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_tcp.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_tcp.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_tcp6.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_tcp6.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_udp.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_udp.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_udp6.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_udp6.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_v4mappedprefix.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_v4mappedprefix.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_v6any.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_v6any.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_v6loopback.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_v6loopback.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/str.h create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/str_chr.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/str_chr.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/str_diff.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/str_diff.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/str_len.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/str_len.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/str_start.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/str_start.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/stralloc.h create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/stralloc_cat.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/stralloc_cat.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/stralloc_catb.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/stralloc_catb.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/stralloc_cats.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/stralloc_cats.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/stralloc_copy.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/stralloc_copy.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/stralloc_eady.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/stralloc_eady.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/stralloc_opyb.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/stralloc_opyb.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/stralloc_opys.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/stralloc_opys.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/stralloc_pend.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/stralloc_pend.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/strerr.h create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/strerr_die.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/strerr_die.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/strerr_sys.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/strerr_sys.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/subgetopt.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/subgetopt.h create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/subgetopt.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/systype create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tai.h create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tai_pack.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tai_pack.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/taia.h create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/taia_add.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/taia_add.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/taia_approx.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/taia_approx.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/taia_frac.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/taia_frac.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/taia_less.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/taia_less.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/taia_now.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/taia_now.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/taia_pack.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/taia_pack.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/taia_sub.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/taia_sub.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/taia_uint.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/taia_uint.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tcp-environ.5 create mode 100755 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tcpcat create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tcpcat.1 create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tcpcat.sh create mode 100755 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tcpclient create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tcpclient.1 create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tcpclient.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tcpclient.o create mode 100755 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tcprules create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tcprules.1 create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tcprules.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tcprules.o create mode 100755 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tcprulescheck create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tcprulescheck.1 create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tcprulescheck.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tcprulescheck.o create mode 100755 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tcpserver create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tcpserver.1 create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tcpserver.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tcpserver.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/time.a create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/timeoutconn.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/timeoutconn.h create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/timeoutconn6.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/timeoutconn6.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/trycpp.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tryip6.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/trylsock.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/trypoll.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/trysgact.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/trysgprm.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tryshsgr.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/trysysel.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tryulong32.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tryulong64.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tryvfork.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/trywaitp.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/uint16.h create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/uint16_pack.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/uint16_pack.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/uint16_unpack.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/uint16_unpack.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/uint32.h create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/uint32.h1 create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/uint32.h2 create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/uint32_pack.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/uint32_pack.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/uint32_unpack.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/uint32_unpack.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/uint64.h create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/uint64.h1 create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/uint64.h2 create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/unix.a create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/usr/local/man/man1/tcpclient.1 create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/usr/local/man/man1/tcpserver.1 create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/wait.h create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/wait_nohang.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/wait_nohang.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/wait_pid.c create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/wait_pid.o create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/warn-auto.sh create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/warn-shsgr create mode 100755 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/who@ create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/who@.1 create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/who@.sh create mode 100644 NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/x86cpuid.c create mode 100644 NONE-CKUBU/src/igmpproxy/igmpproxy.configure.txt diff --git a/NONE-CKUBU/bin/admin-stuff b/NONE-CKUBU/bin/admin-stuff index 6c91fc0..501aa95 160000 --- a/NONE-CKUBU/bin/admin-stuff +++ b/NONE-CKUBU/bin/admin-stuff @@ -1 +1 @@ -Subproject commit 6c91fc0987a1d4b55910523e167b3755ab1f6718 +Subproject commit 501aa95c7586d7db2ca0ab2f63d308647cf18c60 diff --git a/NONE-CKUBU/bin/manage-gw-config b/NONE-CKUBU/bin/manage-gw-config index 7127fbc..06b9750 160000 --- a/NONE-CKUBU/bin/manage-gw-config +++ b/NONE-CKUBU/bin/manage-gw-config @@ -1 +1 @@ -Subproject commit 7127fbca446673edb32b63936bb29804f2cc12d0 +Subproject commit 06b975094a3a3192070a996e5f03be38b23fa14d diff --git a/NONE-CKUBU/bin/monitoring b/NONE-CKUBU/bin/monitoring index 0611d0a..5badd41 160000 --- a/NONE-CKUBU/bin/monitoring +++ b/NONE-CKUBU/bin/monitoring @@ -1 +1 @@ -Subproject commit 0611d0a2ad1eefa0a9a094887a76bc5bc8532653 +Subproject commit 5badd41cb2f79ab47362f5f9a53a80b6e954c0f3 diff --git a/NONE-CKUBU/cron_root.NONE-CKUBU b/NONE-CKUBU/cron_root.NONE-CKUBU index 7e054ae..4b22a32 100644 --- a/NONE-CKUBU/cron_root.NONE-CKUBU +++ b/NONE-CKUBU/cron_root.NONE-CKUBU @@ -26,7 +26,7 @@ PATH=/root/bin/admin-stuff:/root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin -@reboot swapon -p 1 /dev/sda2 > /dev/null +@reboot swapon -p 1 /dev/sda5 > /dev/null @reboot systemctl stop isc-dhcp-server @reboot systemctl stop ipt-firewall diff --git a/NONE-CKUBU/hostname.NONE-CKUBU b/NONE-CKUBU/hostname.NONE-CKUBU index 895b6b0..7b87fc8 100644 --- a/NONE-CKUBU/hostname.NONE-CKUBU +++ b/NONE-CKUBU/hostname.NONE-CKUBU @@ -1 +1 @@ -gw-replacement +gw-replacement2 diff --git a/NONE-CKUBU/hosts.NONE-CKUBU b/NONE-CKUBU/hosts.NONE-CKUBU index d0047ee..9e8c77c 100644 --- a/NONE-CKUBU/hosts.NONE-CKUBU +++ b/NONE-CKUBU/hosts.NONE-CKUBU @@ -1,5 +1,5 @@ 127.0.0.1 localhost -127.0.1.1 gw-replacement.local.netz gw-replacement +127.0.1.1 gw-replacement2.local.netz gw-replacement2 # The following lines are desirable for IPv6 capable hosts ::1 ip6-localhost ip6-loopback diff --git a/NONE-CKUBU/interfaces.NONE-CKUBU b/NONE-CKUBU/interfaces.NONE-CKUBU index 59e8900..9c9193f 100644 --- a/NONE-CKUBU/interfaces.NONE-CKUBU +++ b/NONE-CKUBU/interfaces.NONE-CKUBU @@ -7,7 +7,7 @@ iface lo inet loopback auto eth1 iface eth1 inet static - address 192.168.63.253 + address 192.168.63.252 network 192.168.63.0 netmask 255.255.255.0 broadcast 192.168.63.255 diff --git a/NONE-CKUBU/ipt-firewall/interfaces_ipv6.conf b/NONE-CKUBU/ipt-firewall/interfaces_ipv6.conf new file mode 100644 index 0000000..b306637 --- /dev/null +++ b/NONE-CKUBU/ipt-firewall/interfaces_ipv6.conf @@ -0,0 +1,45 @@ +#!/usr/bin/env bash + +# ============= +# --- Define Network Interfaces / Ip-Adresses / Ports +# ============= + +# - Extern Interfaces DSL Lines +# - (blank separated list) +ext_if_dsl_1="" +ext_if_dsl_2="" +ext_if_dsl_3="" +ext_if_dsl_4="" + +ext_ifs_dsl="$ext_if_dsl_1 $ext_if_dsl_2 $ext_if_dsl_3 $ext_if_dsl_4" + +# - Extern Interfaces Static Lines +# - (blank separated list) +# - +# - Example: +# - ext_if_static_1="sixxs" +# - +ext_if_static_1="" +ext_if_static_2="" +ext_if_static_3="" + +ext_ifs_static="$ext_if_static_1 $ext_if_static_2 $ext_if_static_3" + +# - VPN Interfaces +# - (blank separated list) +vpn_ifs="tun+" + +# - Local Interfaces +local_if_1="" +local_if_2="" +local_if_3="" +local_if_4="" +local_if_5="" +local_if_6="" +local_if_7="" + +local_ifs="$local_if_1 $local_if_2 $local_if_3 $local_if_4 $local_if_5 $local_if_6 $local_if_7" + +# - Are local alias interfaces like eth0:0 defined" +# - +local_alias_interfaces=true diff --git a/NONE-CKUBU/ipt-firewall/load_modules_ipv4.conf b/NONE-CKUBU/ipt-firewall/load_modules_ipv4.conf index bc383f0..e80a671 100644 --- a/NONE-CKUBU/ipt-firewall/load_modules_ipv4.conf +++ b/NONE-CKUBU/ipt-firewall/load_modules_ipv4.conf @@ -21,7 +21,7 @@ iptable_raw # - Load base modules for tracking # - -nf_conntrack +nf_conntrack nf_conntrack_helper=0 nf_nat # - Load module for FTP Connection tracking and NAT diff --git a/NONE-CKUBU/ipt-firewall/main_ipv4.conf b/NONE-CKUBU/ipt-firewall/main_ipv4.conf index 561bd7f..6e4c9c1 100644 --- a/NONE-CKUBU/ipt-firewall/main_ipv4.conf +++ b/NONE-CKUBU/ipt-firewall/main_ipv4.conf @@ -256,6 +256,84 @@ allow_local_if_to_local_ip="" +# ============= +# - Allow local ip address from given local interface +# ============= + +# - allow_local_if_to_local_ip +# - +# - All traffic from the given network interface to the given ip address is allowed +# - +# - Example: +# - allow_local_if_to_local_ip="${local_if_1}:192.168.10.1 +# - ${local_if_2}:192.168.10.13" +# - +# - Blank separated list +# - +allow_local_if_to_local_ip="" + + + +# ============= +# - Allow extern service from given local interface +# ============= + +# - allow_local_if_to_ext_service +# - +# - allow_local_if_to_ext_service="::: [.." +# - +# - All traffic from the given (local) network interface to the given (extern) service is allowed +# - +# - Example: +# - allow_local_if_to_ext_service="${local_if_1}:83.223.86.98:3306:tcp +# - ${local_if_2}:83.223.86.98:3306:tcp" +# - +# - Blank separated list +# - +allow_local_if_to_ext_service="" + + + +# ============= +# - Allow extern network from given local interface +# ============= + +# - allow_local_if_to_ext_net +# - +# - allow_local_if_to_ext_net=":ext-network> [:ext-network> [.." +# - +# - All traffic from the given (local) network interface to the given (extern) network is allowed +# - +# - Example: +# - allow_local_if_to_ext_net="${local_if_1}:83.223.86.98/32 +# - ${local_if_2}:83.223.86.98/32" +# - +# - Blank separated list +# - +allow_local_if_to_ext_net="" + + + +# ============= +# - Allow extern service from given local network +# ============= + +# - allow_local_net_to_ext_service +# - +# - allow_local_net_to_ext_service=" [ [.." +# - +# - All traffic from the given (local) network to the given (extern) service is allowed +# - +# - Example: +# - allow_local_net_to_ext_service="192.168.63.0/24:83.223.86.98:3306:tcp +# - 192.168.64.0/24:83.223.86.98:3306:tcp" +# - +# - Blank separated list +# - +allow_local_net_to_ext_service="" + + + # ============= # --- Separate local Networks # ============= @@ -976,6 +1054,28 @@ tv_extern_if="eth2.8" tv_local_if="$local_if_1" +# ===== +# --- Allow special TCP Ports (OUT) +# ===== + +# - TCP Ports +# - +# - Blank separated list of tcp ports +# - +tcp_out_ports="" + + +# ===== +# --- Allow special UDP Ports (OUT) +# ===== + +# - UDP Ports +# - +# - Blank separated list udp ports +# - +udp_out_ports="" + + # ====== # - Other local Services diff --git a/NONE-CKUBU/ipt-firewall/post_decalrations.conf b/NONE-CKUBU/ipt-firewall/post_decalrations.conf index 7d0e9bf..f92b650 100644 --- a/NONE-CKUBU/ipt-firewall/post_decalrations.conf +++ b/NONE-CKUBU/ipt-firewall/post_decalrations.conf @@ -149,6 +149,38 @@ for _val in $allow_local_if_to_local_ip ; do allow_local_if_to_local_ip_arr+=("$_val") done +# --- +# - Allow extern service from given local interface +# --- +declare -a allow_local_if_to_ext_service_arr +for _val in $allow_local_if_to_ext_service ; do + allow_local_if_to_ext_service_arr+=("$_val") +done + +# --- +# - Allow extern network from given local interface +# --- +declare -a allow_local_if_to_ext_net_arr +for _val in $allow_local_if_to_ext_net ; do + allow_local_if_to_ext_net_arr+=("$_val") +done + +# --- +# - Allow extern service from given local network +# --- +declare -a allow_local_net_to_ext_service_arr +for _val in $allow_local_net_to_ext_service ; do + allow_local_net_to_ext_service_arr+=("$_val") +done + +# --- +# - Allow extern network from given local network +# --- +declare -a allow_local_net_to_ext_net_arr +for _val in $allow_local_net_to_ext_net ; do + allow_local_net_to_ext_net_arr+=("$_val") +done + # --- # - Separate local Networks # --- @@ -378,6 +410,24 @@ for _ip in $rsync_out_ips ; do rsync_out_ip_arr+=("$_ip") done +# --- +# - Special TCP Ports OUT +# --- +# local +declare -a tcp_out_port_arr +for _port in $tcp_out_ports ; do + tcp_out_port_arr+=("$_port") +done + +# --- +# - Special UDP Ports OUT +# --- +# local +declare -a udp_out_port_arr +for _port in $udp_out_ports ; do + udp_out_port_arr+=("$_port") +done + # --- # - Other local Services # --- diff --git a/NONE-CKUBU/mailname.NONE-CKUBU b/NONE-CKUBU/mailname.NONE-CKUBU index dae701f..98cd899 100644 --- a/NONE-CKUBU/mailname.NONE-CKUBU +++ b/NONE-CKUBU/mailname.NONE-CKUBU @@ -1 +1 @@ -gw-replacement.local.netz +gw-replacement2.local.netz diff --git a/NONE-CKUBU/main.cf.NONE-CKUBU b/NONE-CKUBU/main.cf.NONE-CKUBU index 8003a63..555bc76 100644 --- a/NONE-CKUBU/main.cf.NONE-CKUBU +++ b/NONE-CKUBU/main.cf.NONE-CKUBU @@ -32,13 +32,13 @@ alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases myorigin = /etc/mailname -mydestination = gw-replacement.local.netz, +mydestination = gw-replacement2.local.netz, localhost mynetworks = 127.0.0.0/8, #[::ffff:127.0.0.0]/104 #[::1]/128 - 192.168.63.253/32 + 192.168.63.252/32 mailbox_command = procmail -a "$EXTENSION" mailbox_size_limit = 0 recipient_delimiter = + @@ -48,7 +48,7 @@ inet_protocols = ipv4 inet_interfaces = 127.0.0.1, #[::ffff:127.0.0.0]/104, #[::1]/128, - 192.168.63.253 + 192.168.63.252 # Enable SASL authentication diff --git a/NONE-CKUBU/peers/dsl-provider.DSL b/NONE-CKUBU/peers/dsl-provider.DSL new file mode 100644 index 0000000..49d862f --- /dev/null +++ b/NONE-CKUBU/peers/dsl-provider.DSL @@ -0,0 +1,84 @@ +# Configuration file for PPP, using PPP over Ethernet +# to connect to a DSL provider. +# +# See the manual page pppd(8) for information on all the options. + +## +# Section 1 +# +# Stuff to configure... + +# MUST CHANGE: Uncomment the following line, replacing the user@provider.net +# by the DSL user name given to your by your DSL provider. +# (There should be a matching entry in /etc/ppp/pap-secrets with the password.) +#user myusername@myprovider.net + +# Use the pppoe program to send the ppp packets over the Ethernet link +# This line should work fine if this computer is the only one accessing +# the Internet through this DSL connection. This is the right line to use +# for most people. +#pty "/usr/sbin/pppoe -I eth0 -T 80 -m 1452" + +# An even more conservative version of the previous line, if things +# don't work using -m 1452... +#pty "/usr/sbin/pppoe -I eth0 -T 80 -m 1412" + +# If the computer connected to the Internet using pppoe is not being used +# by other computers as a gateway to the Internet, you can try the following +# line instead, for a small gain in speed: +#pty "/usr/sbin/pppoe -I eth0 -T 80" + + +# The following two options should work fine for most DSL users. + +# Assumes that your IP address is allocated dynamically +# by your DSL provider... +noipdefault +# Try to get the name server addresses from the ISP. +#usepeerdns +# Use this connection as the default route. +# Comment out if you already have the correct default route installed. +defaultroute + +## +# Section 2 +# +# Uncomment if your DSL provider charges by minute connected +# and you want to use demand-dialing. +# +# Disconnect after 300 seconds (5 minutes) of idle time. + +#demand +#idle 300 + +## +# Section 3 +# +# You shouldn't need to change these options... + +hide-password +lcp-echo-interval 20 +lcp-echo-failure 3 +# Override any connect script that may have been set in /etc/ppp/options. +connect /bin/true +noauth +persist + +## mtu 1492 +## - notwendig bei vergabe einer festen ip +## - von t-online: +## - mtu 1456 +## - +#mtu 1492 +mtu 1456 + +# RFC 2516, paragraph 7 mandates that the following options MUST NOT be +# requested and MUST be rejected if requested by the peer: +# Address-and-Control-Field-Compression (ACFC) +noaccomp +# Asynchronous-Control-Character-Map (ACCM) +default-asyncmap + +plugin rp-pppoe.so eth1 +#user "feste-ip7/9TB3EGVM46Z6@t-online-com.de" +user "0021920376975502683262730001@t-online.de" diff --git a/NONE-CKUBU/peers/dsl-provider.VDSL b/NONE-CKUBU/peers/dsl-provider.VDSL new file mode 100644 index 0000000..63b998a --- /dev/null +++ b/NONE-CKUBU/peers/dsl-provider.VDSL @@ -0,0 +1,84 @@ +# Configuration file for PPP, using PPP over Ethernet +# to connect to a DSL provider. +# +# See the manual page pppd(8) for information on all the options. + +## +# Section 1 +# +# Stuff to configure... + +# MUST CHANGE: Uncomment the following line, replacing the user@provider.net +# by the DSL user name given to your by your DSL provider. +# (There should be a matching entry in /etc/ppp/pap-secrets with the password.) +#user myusername@myprovider.net + +# Use the pppoe program to send the ppp packets over the Ethernet link +# This line should work fine if this computer is the only one accessing +# the Internet through this DSL connection. This is the right line to use +# for most people. +#pty "/usr/sbin/pppoe -I eth0 -T 80 -m 1452" + +# An even more conservative version of the previous line, if things +# don't work using -m 1452... +#pty "/usr/sbin/pppoe -I eth0 -T 80 -m 1412" + +# If the computer connected to the Internet using pppoe is not being used +# by other computers as a gateway to the Internet, you can try the following +# line instead, for a small gain in speed: +#pty "/usr/sbin/pppoe -I eth0 -T 80" + + +# The following two options should work fine for most DSL users. + +# Assumes that your IP address is allocated dynamically +# by your DSL provider... +noipdefault +# Try to get the name server addresses from the ISP. +#usepeerdns +# Use this connection as the default route. +# Comment out if you already have the correct default route installed. +defaultroute + +## +# Section 2 +# +# Uncomment if your DSL provider charges by minute connected +# and you want to use demand-dialing. +# +# Disconnect after 300 seconds (5 minutes) of idle time. + +#demand +#idle 300 + +## +# Section 3 +# +# You shouldn't need to change these options... + +hide-password +lcp-echo-interval 20 +lcp-echo-failure 3 +# Override any connect script that may have been set in /etc/ppp/options. +connect /bin/true +noauth +persist + +## mtu 1492 +## - notwendig bei vergabe einer festen ip +## - von t-online: +## - mtu 1456 +## - +#mtu 1492 +mtu 1456 + +# RFC 2516, paragraph 7 mandates that the following options MUST NOT be +# requested and MUST be rejected if requested by the peer: +# Address-and-Control-Field-Compression (ACFC) +noaccomp +# Asynchronous-Control-Character-Map (ACCM) +default-asyncmap + +plugin rp-pppoe.so eth1.7 +#user "feste-ip7/9TB3EGVM46Z6@t-online-com.de" +user "0021920376975502683262730001@t-online.de" diff --git a/NONE-CKUBU/sbin/check_net.sh b/NONE-CKUBU/sbin/check_net.sh new file mode 100755 index 0000000..e1607fa --- /dev/null +++ b/NONE-CKUBU/sbin/check_net.sh @@ -0,0 +1,623 @@ +#!/usr/bin/env bash + +## ------------------------------------------------------------------- +## --- All Configurations ill be done in /etc/check_net/check_net.conf +## ------------------------------------------------------------------- + +## - Load Configuration +## - +source /etc/check_net/check_net.conf + + +## ------------------ +## --- Some functions +## ------------------ + +## - Check if a given array (parameter 2) contains a given string (parameter 1) +## - +fatal(){ + echo "" + echo -e "[ \033[31m\033[1mError\033[m ]: $*" + echo "" + echo -e "\t\033[31m\033[1mScript is canceled\033[m\033[m" + echo "" + + echo "" >> $log_file + echo "[ Error ]: $*" >> $log_file + echo "" >> $log_file + echo " Script is canceled." >> $log_file + echo "" >> $log_file + + exit 1 +} +containsElement () { + local e + for e in "${@:2}"; do [[ "$e" == "$1" ]] && return 0; done + return 1 +} +set_ping_addresses () { + + if $DEBUG ; then + echo "`date +'%Y-%m-%d %H:%M:%S'` [ Info ] Try to set IP-Address(es) for ping test. This may take some time.." >> $log_file + fi + + ping_test_ip="" + unset ping_ip_arr + declare -i i=0 + for _host in $PING_TEST_HOSTS ; do + while [ $i -lt 2 ]; do + if dig +short $_host > /dev/null 2>&1 ; then + ping_test_ip=`dig +short $_host | head -1` + if ping -q -c2 $ping_test_ip >/dev/null 2>&1 ; then + ping_ip_arr+=("$ping_test_ip") + let i++ + break + fi + fi + break + done + done + + if [ ${#ping_ip_arr[@]} -lt 1 ]; then + echo "`date +'%Y-%m-%d %H:%M:%S'` [ Error ] Setting IP-Address(es) for ping test FAILED!" >> $log_file + else + if $DEBUG ; then + echo "`date +'%Y-%m-%d %H:%M:%S'` [ Info ] IP-Addresses for ping tests set to ${ping_ip_arr[@]}" >> $log_file + fi + fi +} +usage() { + echo + [ -n "$1" ] && echo -e "[ \033[1;31mError\033[m ] : $1\n" + +echo -e " Usage:" +echo -e " \033[1m`basename $0` [OPTIONS] ..\033[m" +echo "" +echo -e " This script checks the status (online/offline) of the given devices. Afterward another" +echo " script called \033[1m`basename $netconfig_script`\033[m will be triggered to configure" +echo " the routing depending on the status of the devices." +echo "" +echo -e " It is strongly recommend to put \033[1mall devices, which should have a connection to" +echo -e " the internet\033[m, on the command line." +echo "" +echo -e " \033[1mNotice\033[m" +echo -e " On static line devices \033[1mappend \":\"\033[m. This is very important," +echo -e " otherwise this script will \033[1mNOT work as expected\033[m." +echo -e " Example:" +echo -e " \033[1m`basename $0` -l \"eth0 ppp-light\" eth0:172.16.0.1 ppp-light\033[m" +echo "" +echo -e " The declaration of the device(s) is mandatory." +echo "" +echo -e " Options:" +echo "" +echo -e " \033[1m-h\033[m" +echo -e " Prints this help\033[m" +echo "" +echo -e " \033[1m-l \033[m" +echo -e " List of all (internet) devices known as online." +echo "" + +exit 1 +} + + +if [[ $EUID -ne 0 ]]; then + fatal "This script must be run as root" 1>&2 +fi + +if [[ ! -f "$netconfig_script" ]]; then + fatal "Netconfig script \"$netconfig_script\" not found!" +fi + + +## ------------------------------------------------- +## --- If script is already running, stop execution +## ------------------------------------------------- + +LOCK_DIR=/tmp/`basename $0`.LOCK +if mkdir "$LOCK_DIR" 2> /dev/null ; then + + ## - Remove lockdir when the script finishes, or when it receives a signal + trap 'rm -rf "$LOCK_DIR"' 0 2 15 + +else + + datum=`date +"%d.%m.%Y"` + msg="[ Error ]: A previos instance of script \"`basename $0`\" seems already be running.\n\n Exiting now.." + echo -e "To:${admin_email}\n${content_type}\nSubject:DSL Script Error $company -- $datum\n\n${msg}\n" | /usr/sbin/sendmail -F "DSL Monitoring $company" -f $from_address $admin_email 2> /dev/null + + if $LOGGING_CONSOLE ; then + echo "" + echo "[ Error ]: A previos instance script \"`basename $0`\" seems already be running." + echo "" + echo " Exiting now.." + echo "" + fi + exit 1 + +fi + + +## ------------- +## --- Configure +## ------------- + +while getopts l:h opt ; do + case $opt in + h) usage ;; + l) ONLINE_DEVICE_LIST=$OPTARG + ;; + esac +done + +shift `expr $OPTIND - 1` + +INITIAL_DEVICE_LIST="$@" +if [[ -z "$INITIAL_DEVICE_LIST" ]]; then + INITIAL_DEVICE_LIST=$_INITIAL_DEVICE_LIST +fi + +[[ -z "$INITIAL_DEVICE_LIST" ]] && usage "No device list given" + + +## - Define (non associative) array +## - +declare -a inet_devices_arr +declare -a dsl_devices_arr +declare -a static_devices_arr +declare -a online_devices_arr +declare -A static_gw_arr +declare -A dsl_gw_available_arr + +for _device in $INITIAL_DEVICE_LIST ; do + if [[ "$_device" =~ : ]]; then + static_gateway="${_device##*:}" + _device="${_device%:*}" + static_gw_arr[$_device]="$static_gateway" + + static_devices_arr+=("$_device") + + else + dsl_devices_arr+=("$_device") + fi + inet_devices_arr+=("$_device") +done + +for _online_device in $ONLINE_DEVICE_LIST ; do + online_devices_arr+=("$_online_device") +done + +## - Define associative array +## - +declare -A remote_gw_arr +declare -A filetime_PID_arr +for inet_device in "${online_devices_arr[@]}" ; do + + if containsElement "$inet_device" "${dsl_devices_arr[@]}" ; then + remote_gw_address=`ifconfig $inet_device 2> /dev/null | grep "inet Adresse" | cut -d":" -f3 | cut -d" " -f1` + else + remote_gw_address=${static_gw_arr[$inet_device]} + fi + + remote_gw_arr[$inet_device]=$remote_gw_address + _pid_file=/var/run/${inet_device}.pid + if [ -f $_pid_file ]; then + filetime_PID_arr[$inet_device]=`stat -c %Y /var/run/${inet_device}.pid` + else + filetime_PID_arr[$inet_device]="NOT FOUND" + fi +done + +declare -a ping_ip_arr; + + +#echo "--" +#for _key in "${!filetime_PID_arr[@]}" ; do +# echo "filetime_PID_arr[$_key]: ${filetime_PID_arr[$_key]}" +#done +# +#for _key in "${!remote_gw_arr[@]}" ; do +# echo "remote_gw_arr[$_key]: ${remote_gw_arr[$_key]}" +#done +# +#for _device in ${online_devices_arr[@]} ; do +# echo "$_device is online" +#done +#echo "--" +#exit + +echo "" >> $log_file +echo "" >> $log_file +echo "`date +'%Y-%m-%d %H:%M:%S'` [ Info ] ## ---" >> $log_file +echo "`date +'%Y-%m-%d %H:%M:%S'` [ Info ] ## --- Starting script `basename $0`" >> $log_file +echo "`date +'%Y-%m-%d %H:%M:%S'` [ Info ] ## ---" >> $log_file +echo "" >> $log_file +echo "`date +'%Y-%m-%d %H:%M:%S'` [ Info ] Devices configured..: ${inet_devices_arr[@]}" >> $log_file +echo "`date +'%Y-%m-%d %H:%M:%S'` [ Info ] Devices Online......: ${online_devices_arr[@]}" >> $log_file +echo "`date +'%Y-%m-%d %H:%M:%S'` [ Info ] DSL Devices.........: ${dsl_devices_arr[@]}" >> $log_file +echo "`date +'%Y-%m-%d %H:%M:%S'` [ Info ] Static Devices......: ${static_devices_arr[@]}" >> $log_file +echo "`date +'%Y-%m-%d %H:%M:%S'` [ Info ] Remote Gateways.....: ${remote_gw_arr[@]}" >> $log_file +echo "`date +'%Y-%m-%d %H:%M:%S'` [ Info ] ## ---" >> $log_file + +echo "" >> $log_file +echo "`date +'%Y-%m-%d %H:%M:%S'` [ Info ] ## --- Initial Setup:" >> $log_file + +## - Initial: get ping addresses +## - +set_ping_addresses +echo "" >> $log_file + +while true ; do + + changed=false + + for inet_device in "${inet_devices_arr[@]}" ; do + + if $DEBUG ; then + echo "`date +'%Y-%m-%d %H:%M:%S'` [ Debug ] ## --- Device $inet_device" >> $log_file + fi + + ## - Set interface name, routing tables name and, if available, remote gateway. + ## - + if containsElement "$inet_device" "${dsl_devices_arr[@]}" ; then + + ## - Is remote a remote gateway for this device knpn? + ## - + remote_gw_address=`ifconfig $inet_device 2> /dev/null | grep "inet Adresse" | cut -d":" -f3 | cut -d" " -f1` + iface_name="dsl-`echo $inet_device | cut -d '-' -f2`" + rt_name="dsl_`echo $inet_device | cut -d '-' -f2`" + if [[ -n "$remote_gw_address" ]]; then + if $DEBUG ; then + echo "`date +'%Y-%m-%d %H:%M:%S'` [ Debug ] Add $remote_gw_address to array dsl_gw_available_arr for DSL line $inet_device" >> $log_file + fi + dsl_gw_available_arr[$inet_device]=$remote_gw_address + else + if $DEBUG ; then + echo "`date +'%Y-%m-%d %H:%M:%S'` [ Debug ] No remote gateway found for DSL line $inet_device" >> $log_file + fi + if [[ ${dsl_gw_available_arr[$inet_device]+_} ]]; then + if $DEBUG; then + echo "`date +'%Y-%m-%d %H:%M:%S'` [ Debug ] Unset dsl_gw_available_arr for DSL line $inet_device" >> $log_file + fi + unset ${dsl_gw_available_arr[$inet_device]} + fi + fi + else + remote_gw_address=${static_gw_arr[$inet_device]} + iface_name=$inet_device + rt_name="static_`echo $inet_device | cut -d '-' -f1`" + fi + + + ## --- + ## --- Check if routing through this connection works + ## --- + + ## - Notice: + ## - if no remote gateway is known (remote_gw_address is empty), then we don't + ## - need to test here. + ## - + device_is_online=false + if [[ -n "$remote_gw_address" ]]; then + + + ## - Check if routing through this dsl connection realy works + ## - + if [ ${#ping_ip_arr[@]} -lt 1 ]; then + echo "`date +'%Y-%m-%d %H:%M:%S'` [ Warn ] No ip-address for ping-test is set. Skipping test.." >> $log_file + else + failed=true + for _key in ${!ping_ip_arr[@]} ; do + /sbin/ip rule add to ${ping_ip_arr[$_key]} table $rt_name + if ping -q -c2 ${ping_ip_arr[$_key]} >/dev/null 2>&1 ; then + if $DEBUG ; then + _local_gw=`curl -4 https://meine-ip.oopen.de 2> /dev/null` + if [ -n "$_local_gw" ]; then + echo "`date +'%Y-%m-%d %H:%M:%S'` [ Debug ] Using local gateway \"$_local_gw\" for ping test" >> $log_file + fi + echo "`date +'%Y-%m-%d %H:%M:%S'` [ Debug ] Ping test (to ${ping_ip_arr[$_key]}) for device \"${inet_device}\" was successful." >> $log_file + fi + /sbin/ip rule del to ${ping_ip_arr[$_key]} table $rt_name + failed=false + device_is_online=true + break + fi + /sbin/ip rule del to ${ping_ip_arr[$_key]} table $rt_name + done + if $failed ; then + echo "`date +'%Y-%m-%d %H:%M:%S'` [ Error ] Ping test for device \"${inet_device}\" failed" >> $log_file + #echo "`date +'%Y-%m-%d %H:%M:%S'` [ Error ] Status Devices \"$inet_device\" changed" >> $log_file + #echo "`date +'%Y-%m-%d %H:%M:%S'` [ Error ] Devices \"$inet_device\" is now OFFLINE" >> $log_file + + ## - Remote gateway is not reachable. So empty variable "remote_gw_address" + #remote_gw_address= + + fi # End: if $failed + + fi # End: if [ ${#ping_ip_arr[@]} -lt 1 ]; then + + fi # End: if [[ -n "$remote_gw_address" ]] + + + ## --- + ## --- Now check, if something has changed + ## --- + + if $device_is_online; then + + if containsElement "$inet_device" ${online_devices_arr[@]} ; then + + ## - + ## - + ## - online online + if $DEBUG ; then + echo "`date +'%Y-%m-%d %H:%M:%S'` [ Debug ] $inet_device is still online" >> $log_file + fi + + ## - Check if remote gateway has changed + ## - + if [ "$remote_gw_address" != "${remote_gw_arr[$inet_device]}" ]; then + echo "`date +'%Y-%m-%d %H:%M:%S'` [ WARN ] Remote Gateway on device \"$inet_device\" has changed: ${remote_gw_arr[$inet_device]} --> $remote_gw_address" >> $log_file + remote_gw_arr[$inet_device]=$remote_gw_address + + _pid_file=/var/run/${inet_device}.pid + if [ -f $_pid_file ]; then + filetime_PID_arr[$inet_device]=`stat -c %Y $_pid_file` + fi + changed=true + else + if $DEBUG ; then + echo "`date +'%Y-%m-%d %H:%M:%S'` [ Debug ] Remote Gateway on device \"$inet_device\": still ${remote_gw_arr[$inet_device]}" >> $log_file + fi + + ## - Test if pid-file's modify time hs changed + ## - + ## - Notice: that happens if your provider forces a reconnect (mostly one time a day + ## - or in other words after 1440 minutes) + ## - + _pid_file=/var/run/${inet_device}.pid + if [ -f $_pid_file ]; then + if [ "`stat -c %Y $_pid_file`" != "${filetime_PID_arr[$inet_device]}" ]; then + echo "`date +'%Y-%m-%d %H:%M:%S'` [ Warn ] Modify time for pid-file \"${inet_device}.pid\" has changed" >> $log_file + filetime_PID_arr[$inet_device]=`stat -c %Y $_pid_file` + changed=true + fi + fi + + fi + + else + ## - + ## - + ## - offline online + echo "`date +'%Y-%m-%d %H:%M:%S'` [ Warn ] Status Devices \"$inet_device\" changed" >> $log_file + echo "`date +'%Y-%m-%d %H:%M:%S'` [ Warn ] Devices \"$inet_device\" is now online" >> $log_file + + ## - Add device to array online_devices_arr + ## - + online_devices_arr+=("$inet_device") + ## - Add device to array remote_gw_arr + ## - + remote_gw_arr[$inet_device]=$remote_gw_address + + _pid=/var/run/${inet_device}.pid + if [ -f "$_pid" ]; then + filetime_PID_arr[$inet_device]=`stat -c %Y /var/run/${inet_device}.pid` + fi + changed=true + fi # END: if containsElement "$inet_device" ${online_devices_arr[@]} + + else # ELSE: if $device_is_online; then + + if containsElement "$inet_device" ${online_devices_arr[@]} ; then + + ## - + ## - + ## - online offline + echo "`date +'%Y-%m-%d %H:%M:%S'` [ Error ] Status Devices \"$inet_device\" changed" >> $log_file + echo "`date +'%Y-%m-%d %H:%M:%S'` [ Error ] Devices \"$inet_device\" is now OFFLINE" >> $log_file + + ## - In case of DSL Device, have a look at the ppp deamon + ## - + if containsElement "$inet_device" "${dsl_devices_arr[@]}" ; then + if ps -x | grep -E "/usr/sbin/pppd\s+call\s+$iface_name" > /dev/null 2>&1 ; then + echo "`date +'%Y-%m-%d %H:%M:%S'` [ Warn ] pppd for \"$iface_name\" is running: Waiting another period" >> $log_file + else + echo "`date +'%Y-%m-%d %H:%M:%S'` [ Info ] Trying to start pppd for \"$inet_device\".." >> $log_file + /usr/sbin/pppd call $iface_name > /dev/null 2>&1 + fi + fi + + ## - Remove device from array online_devices_arr + ## - + for _index in ${!online_devices_arr[@]} ; do + if [ "${online_devices_arr[$_index]}" = "$inet_device" ]; then + unset online_devices_arr[$_index] + break + fi + done + ## - Also remove device from remote_gw_arr + ## - + unset remote_gw_arr[$inet_device] + + ## - In case of DSL Device, kill the concerning the ppp deamon + ## - + if containsElement "$inet_device" "${dsl_devices_arr[@]}" ; then + _pid=`ps -ax | grep -e "pppd call $iface_name" | grep -v grep | awk '{print$1}'` + echo "`date +'%Y-%m-%d %H:%M:%S'` [ Info ] Kill ppp-daemon for $iface_name (pid $_pid)" >> $log_file + + kill -9 $_pid + fi + + changed=true + else + ## - + ## - + ## - offline offline + if $DEBUG ; then + echo "`date +'%Y-%m-%d %H:%M:%S'` [ Debug ] $inet_device is still offline" >> $log_file + fi + + ## - In case of DSL Device, have a look at the ppp deamon + ## - + if containsElement "$inet_device" "${dsl_devices_arr[@]}" ; then + if ps -x | grep -E "/usr/sbin/pppd\s+call\s+$iface_name" > /dev/null 2>&1 ; then + echo "`date +'%Y-%m-%d %H:%M:%S'` [ Warn ] pppd for \"$iface_name\" is running: Waiting another period" >> $log_file + else + echo "`date +'%Y-%m-%d %H:%M:%S'` [ Info ] Trying to start pppd for \"$inet_device\".." >> $log_file + /usr/sbin/pppd call $iface_name > /dev/null 2>&1 + fi + fi + + fi # END: if containsElement "$inet_device" ${online_devices_arr[@]} + + fi # END: if $device_is_online; then + + done # End: for inet_device in "${inet_devices_arr[@]}" + + + if $changed ; then + echo "`date +'%Y-%m-%d %H:%M:%S'` [ Warn ] Status Online Devices changed" >> $log_file + echo "`date +'%Y-%m-%d %H:%M:%S'` [ Warn ] Online Devices: ${online_devices_arr[@]}" >> $log_file + echo "`date +'%Y-%m-%d %H:%M:%S'` [ Warn ] Reconfigure Routing: invoking script \"$netconfig_script\".." >> $log_file + if [[ -z "${online_devices_arr[@]}" ]]; then + if $DEBUG ; then + echo "`date +'%Y-%m-%d %H:%M:%S'` [ Debug ] $netconfig_script $INITIAL_DEVICE_LIST" >> $log_file + fi + + $netconfig_script $INITIAL_DEVICE_LIST > /dev/null 2>&1 + else + + _LIST= + for _device in ${online_devices_arr[@]} ; do + _LIST="$_LIST $_device" + done + _LIST=`echo "${_LIST}" | sed -e 's/^[ \t]*//'` + if $DEBUG ; then + echo "`date +'%Y-%m-%d %H:%M:%S'` [ Debug ] $netconfig_script -l \"$_LIST\" $INITIAL_DEVICE_LIST" >> $log_file + fi + $netconfig_script -l "$_LIST" $INITIAL_DEVICE_LIST > /dev/null 2>&1 + fi + + datum=`date +"%d.%m.%Y"` + msg="[ `date +\"%H:%M:%S\"` ]: Status Online Devices changed..\n Online Devices: ${online_devices_arr[@]}\n\n Script \"$netconfig_script\" was invoked to reconfigure routing." + echo -e "To:${admin_email}\n${content_type}\nSubject:DSL Status changed $company -- $datum\n\n${msg}\n" | /usr/sbin/sendmail -F "DSL Monitoring $company" -f $from_address $admin_email 2> /dev/null + fi # END if $changed + + + ## - Set IP-adresses for Ping-Test at next run + ## - + if [[ ${#online_devices_arr[@]} -gt 0 ]]; then + + ## - Try to set IP-Addresses for ping test + ## - + set_ping_addresses + + elif [[ ${#dsl_gw_available_arr[@]} -gt 0 ]]; then + + echo "`date +'%Y-%m-%d %H:%M:%S'` [ Info ] Try to set default gateway to an existing DSL line .." >> $log_file + + __set_default_gatway=false + default_gw_deleted=false + + for _device in "${dsl_devices_arr[@]}" ; do + + if $DEBUG ; then + echo "`date +'%Y-%m-%d %H:%M:%S'` [ Info ] Device: $_device - Gateway: ${dsl_gw_available_arr[$_device]}" >> $log_file + fi + + if [[ -n "${dsl_gw_available_arr[$_device]}" ]]; then + + ## - Delete old default route + ## - + if ! $default_gw_deleted ; then + if $DEBUG ; then + echo "`date +'%Y-%m-%d %H:%M:%S'` [ Info ] /sbin/ip route delete default" >> $log_file + /sbin/ip route delete default >> $log_file 2>&1 + else + /sbin/ip route delete default > /dev/null 2>&1 + fi + default_gw_deleted=true + fi + + ## - Try to set default gateway to this DSL connection + ## - + if $DEBUG ; then + echo "`date +'%Y-%m-%d %H:%M:%S'` [ Info ] /sbin/ip route add default via ${dsl_gw_available_arr[$_device]} dev $_device" >> $log_file + /sbin/ip route add default via ${dsl_gw_available_arr[$_device]} dev $_device >> $log_file 2>&1 + else + /sbin/ip route add default via ${dsl_gw_available_arr[$_device]} dev $_device > /dev/null 2>&1 + fi + if [[ "$?" == "0" ]]; then + __set_default_gatway=true + break + fi + fi + + done # END: for _device in "${inet_devices_arr[@]}" + + if ! $__set_default_gatway ; then + echo "`date +'%Y-%m-%d %H:%M:%S'` [ Error ] No default gateway (for DSL Device ${_device}) is set!" >> $log_file + else + echo "`date +'%Y-%m-%d %H:%M:%S'` [ Info ] Default gateway on DSL Device $_device is set to ${inet_devices_arr[$_device]}" >> $log_file + + + ## - Try to set IP-Addresses for ping test + ## - + set_ping_addresses + fi + + elif [[ ${#static_devices_arr[@]} -gt 0 ]]; then + + echo "`date +'%Y-%m-%d %H:%M:%S'` [ Info ] Try to set default gateway to an existing static line .." >> $log_file + + __set_default_gatway=false + default_gw_deleted=false + + for _device in "${static_devices_arr[@]}" ; do + + ## - Delete old default route + ## - + if ! $default_gw_deleted ; then + if $DEBUG ; then + echo "`date +'%Y-%m-%d %H:%M:%S'` [ Info ] /sbin/ip route delete default" >> $log_file + /sbin/ip route delete default >> $log_file 2>&1 + else + /sbin/ip route delete default > /dev/null 2>&1 + fi + default_gw_deleted=true + fi + + ## - Set new default route + ## - + if $DEBUG ; then + echo "`date +'%Y-%m-%d %H:%M:%S'` [ Info ] /sbin/ip route add default via ${static_gw_arr[$_device]} dev $_device" >> $log_file + /sbin/ip route add default via ${static_gw_arr[$_device]} dev $_device >> $log_file 2>&1 + else + /sbin/ip route add default via ${static_gw_arr[$_device]} dev $_device > /dev/null 2>&1 + fi + + if [[ "$?" == 0 ]] ; then + __set_default_gatway=true + break + fi + done + + if ! $__set_default_gatway ; then + echo "`date +'%Y-%m-%d %H:%M:%S'` [ Error ] No default gateway is set!" >> $log_file + else + echo "`date +'%Y-%m-%d %H:%M:%S'` [ Info ] Default gateway is set to ${static_gw_arr[$_device]}" >> $log_file + + ## - Try to set IP-Addresses for ping test + ## - + set_ping_addresses + + fi + + fi # if [[ ${#online_devices_arr[@]} -gt 0 ]] + + sleep 30 + +done + +exit 0 diff --git a/NONE-CKUBU/sbin/ip6t-firewall-gateway b/NONE-CKUBU/sbin/ip6t-firewall-gateway new file mode 100755 index 0000000..b3990b3 --- /dev/null +++ b/NONE-CKUBU/sbin/ip6t-firewall-gateway @@ -0,0 +1,3852 @@ +#!/usr/bin/env bash + +### BEGIN INIT INFO +# Provides: ip6t-firewall +# Required-Start: $local_fs $remote_fs $syslog $network $time +# Required-Stop: $local_fs $remote_fs $syslog $network +# Should-Start: +# Should-Stop: +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: IPv6 Firewall +### END INIT INFO + + +# ------------- +# - Settings +# ------------- + +ipt_conf_dir="/etc/ipt-firewall" + +inc_functions_file="${ipt_conf_dir}/include_functions.conf" + +load_modules_file=${ipt_conf_dir}/load_modules_ipv6.conf + +conf_logging=${ipt_conf_dir}/logging_ipv6.conf +conf_interfaces=${ipt_conf_dir}/interfaces_ipv6.conf +conf_default_ports=${ipt_conf_dir}/default_ports.conf +conf_main=${ipt_conf_dir}/main_ipv6.conf +conf_post_declarations=${ipt_conf_dir}/post_decalrations.conf + +# ------------- +# - Some checks and preloads.. +# ------------- + +ip6t=$(which ip6tables) + +if [[ -z "$ip6t" ]] ; then + echo "" + echo -e "\tiptables was not found on this server!" + echo + echo -e "\tFirewall Script was stopped!" + echo + exit 1 +fi + +if [[ ! -f "$inc_functions_file" ]] ; then + echo "" + echo -e "\tMissing include file '$inc_functions_file'" + echo + echo -e "\tFirewall Script was stopped!" + echo + exit 1 +else + source $inc_functions_file +fi + +if [[ ! -f "$load_modules_file" ]]; then + warn "No modules for loading configured. Missing file '$load_modules_file'!" +else + + while read -r module ; do + if ! lsmod | grep -q -E "^$module\s+" ; then + /sbin/modprobe $module > /dev/null 2>&1 + if [[ "$?" != "0" ]]; then + warn "Loading module '$module' failed!" + fi + fi + done < <(sed -ne 's/^[[:space:]]*\([^#].*\)[[:space:]]*/\1/p' $load_modules_file) + +fi + +if [[ ! -f "$conf_logging" ]]; then + fatal "Missing configuration for logging - file '$conf_logging'" +else + source $conf_logging +fi + +if [[ ! -f "$conf_default_ports" ]]; then + fatal "Missing configuration for default_ports - file '$conf_default_ports'" +else + source $conf_default_ports +fi + +if [[ ! -f "$conf_interfaces" ]]; then + fatal "Missing interface configurations - file '$conf_interfaces'" +else + source $conf_interfaces +fi + +if [[ ! -f "$conf_main" ]]; then + fatal "Missing main configurations - file '$conf_main'" +else + source $conf_main +fi + +if [[ ! -f "$conf_post_declarations" ]]; then + fatal "Missing post declarations - file '$conf_post_declarations'" +else + source $conf_post_declarations +fi + + +echo +if $terminal ; then + echo -e "\033[37m\033[1m\tStarting firewall iptables (IPv6)..\033[m" +else + echo "Starting firewall iptables (IPv4).." +fi +echo + + + +# ------------- +# --- Activate IP Forwarding +# ------------- + +# --- +# - Enable/Disable ip forwarding between interfaces +# --- +if $kernel_forward_between_interfaces ; then + echononl "\tActivate Forwarding.." + echo 1 > /proc/sys/net/ipv6/conf/all/forwarding +else + echononl "\t\033[33m\033[1mDisable Forwarding..\033[m" + echo 0 > /proc/sys/net/ipv6/conf/all/forwarding +fi + +echo_done + + +# ------------- +# --- Adjust Kernel Parameters +# ------------- + +echononl "\tAdjust Kernel Parameters (Security/Tuning).." + +if $adjust_kernel_parameters ; then + + # --- + # - Deactivate Source Routed Packets + # --- + for asr in /proc/sys/net/ipv6/conf/*/accept_source_route; do + if $kernel_deactivate_source_route ; then + echo 0 > $asr + fi + done + + + # --- + # - Deactivate sending ICMP redirects + # --- + if $kernel_dont_accept_redirects ; then + echo "0" > /proc/sys/net/ipv6/conf/all/accept_redirects + fi + + echo_done # Adjust Kernel Parameters (Security/Tuning) +else + echo_skipped + +fi + + + +# ------------- +# --- Set default policies / Flush Rules +# ------------- + +echo +echononl "\tFlushing firewall iptable (IPv6).." + +# - default policies +# - +$ip6t -P INPUT ACCEPT +$ip6t -P OUTPUT ACCEPT +$ip6t -P FORWARD ACCEPT + +## - flush chains +## - +$ip6t -F +$ip6t -F INPUT +$ip6t -F OUTPUT +$ip6t -F FORWARD +$ip6t -F -t mangle +$ip6t -F -t nat +$ip6t -F -t raw +$ip6t -X +$ip6t -Z + +#$ip6t -t nat -A POSTROUTING -o $ext_if_static_1 -j MASQUERADE +$ip6t -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu + +echo_done # Flushing firewall iptable (IPv6).. +echo + + +# ------------- +# - Log given IP Addresses +# ------------- + +echononl "\tLog given IP Addresses" +if [[ ${#log_ip_arr[@]} -gt 0 ]]; then + for _ip in ${log_ip_arr[@]} ; do + $ip6t -A INPUT -s $_ip -j LOG --log-prefix "$_ip IN: " --log-level $log_level + $ip6t -A OUTPUT -d $_ip -j LOG --log-prefix "$_ip OUT: " --log-level $log_level + $ip6t -A FORWARD -s $_ip -j LOG --log-prefix "$_ip FORWARD FROM: " --log-level $log_level + $ip6t -A FORWARD -d $_ip -j LOG --log-prefix "$_ip FORWARD TO: " --log-level $log_level + done + + echo_done +else + echo_skipped +fi + + +# ------------- +# --- ICMP Traffic (i.e. ping requests) +# ------------- + +echononl "\tPermit all ICMP IPv6 traffic.." +if $permit_all_icmp_traffic ; then + $ip6t -A INPUT -p ipv6-icmp -j ACCEPT + $ip6t -A OUTPUT -p ipv6-icmp -j ACCEPT + $ip6t -A FORWARD -p ipv6-icmp -j ACCEPT + echo_done +else + echo_skipped +fi + + +# ------------- +# --- Stopping firewall if only flushing was requested (parameter flush) +# ------------- + +case $1 in + flush) + warn No firewall rules are active! + exit 0;; +esac + + +# --- +# - Stop here, if no extern interface is configured +# --- + +if [[ ${#ext_if_arr[@]} -lt 1 ]] ; then + fatal "No extern Interface is configured!" +fi + + + +# ------------- +# --- Pass through Devices Interfaces (not firewalled) +# ------------- + +if [[ ${#unprotected_if_arr[@]} -gt 0 ]]; then + echononl "\tPass through Devices (not firewalled)" + for _dev in ${unprotected_if_arr[@]} ; do + if $log_unprotected || $log_all ; then + $ip6t -A INPUT -i $_dev -j LOG --log-prefix "$log_prefix Not firewalled ${_dev}: " --log-level $log_level + $ip6t -A OUTPUT -o $_dev -j LOG --log-prefix "$log_prefix Not firewalled ${_dev}: " --log-level $log_level + if $kernel_forward_between_interfaces ; then + $ip6t -A FORWARD -i $_dev -j LOG --log-prefix "$log_prefix Not firewalled ${_dev}: " --log-level $log_level + $ip6t -A FORWARD -o $_dev -j LOG --log-prefix "$log_prefix Not firewalled ${_dev}: " --log-level $log_level + fi + fi + $ip6t -A INPUT -i $_dev -j ACCEPT + $ip6t -A OUTPUT -o $_dev -j ACCEPT + if $kernel_forward_between_interfaces ; then + $ip6t -A FORWARD -i $_dev -j ACCEPT + $ip6t -A FORWARD -o $_dev -j ACCEPT + fi + done + echo_done +fi + + + +# ------------- +# --- Block IPs / Networks / Interfaces +# ------------- +echononl "\tBlock IPs / Networks / Interfaces.." + + +# --- +# - Block IPs +# --- + +for _ip in $blocked_ips ; do + for _dev in ${ext_if_arr[@]} ; do + if $log_blocked_ip || $log_all ; then + $ip6t -A INPUT -i $_dev -s $_ip -j LOG --log-prefix "$log_prefix Blocked ${_ip}: " --log-level $log_level + if $kernel_forward_between_interfaces ; then + $ip6t -A FORWARD -i $_dev -s $_ip -j LOG --log-prefix "$log_prefix Blocked ${_ip}: " --log-level $log_level + fi + fi + $ip6t -A INPUT -i $_dev -s $_ip -j DROP + if $kernel_forward_between_interfaces ; then + $ip6t -A FORWARD -i $_dev -s $_ip -j DROP + fi + done +done + + +# --- +# - Block Interfaces +# --- + +for _if in ${blocked_if_arr[@]} ; do + if $log_blocked_if || $log_all ; then + if $kernel_forward_between_interfaces ; then + $ip6t -A FORWARD -i $_if -j LOG --log-prefix "$log_prefix Blocked IF ${_if}: " --log-level $log_level + $ip6t -A FORWARD -o $_if -j LOG --log-prefix "$log_prefix Blocked IF ${_if}: " --log-level $log_level + fi + $ip6t -A INPUT -i $_if -j LOG --log-prefix "$log_prefix Blocked IF ${_if}: " --log-level $log_level + $ip6t -A OUTPUT -o $_if -j LOG --log-prefix "$log_prefix Blocked IF ${_if}: " --log-level $log_level + fi + if $kernel_forward_between_interfaces ; then + $ip6t -A FORWARD -i $_if -j DROP + $ip6t -A FORWARD -o $_if -j DROP + fi + $ip6t -A INPUT -i $_if -j DROP + $ip6t -A OUTPUT -o $_if -j DROP +done + +echo_done # Block IPs / Networks / Interfaces.. + + +# --- +# - Allow Forwarding certain private Addresses +# --- + +echononl "\tAllow forwarding (private) IPs / IP-Ranges.." +if [[ ${#forward_private_ip_arr[@]} -gt 0 ]] ; then + for _ip in ${forward_private_ip_arr[@]}; do + if $kernel_forward_between_interfaces ; then + $ip6t -A FORWARD -d $_ip -j ACCEPT + $ip6t -A FORWARD -s $_ip -j ACCEPT + echo_done + else + echo_skipped + fi + done +else + echo_skipped +fi + + +# ------------- +# --- Protections against several attacks / unwanted packages +# ------------- +echo +echononl "\tProtections against several attacks / unwanted packages.." + +if $protect_against_several_attacks ; then + + # --- + # - Protection against syn-flooding + # --- + + $ip6t -N syn-flood + $ip6t -A syn-flood -m limit --limit 1/second --limit-burst 3 -j RETURN + if $log_syn_flood || $log_all ; then + $ip6t -A syn-flood -j LOG --log-prefix "$log_prefix SYN flood: " --log-level $log_level + fi + $ip6t -A syn-flood -j DROP + + + # --- + # - drop new packages without syn flag + # --- + + if $log_new_not_sync || $log_all ; then + $ip6t -A INPUT -p tcp ! --syn -m state --state NEW -j LOG --log-prefix "$log_prefix New but not SYN: " --log-level $log_level + $ip6t -A OUTPUT -p tcp ! --syn -m state --state NEW -j LOG --log-prefix "$log_prefix New but not SYN: " --log-level $log_level + if $kernel_forward_between_interfaces ; then + $ip6t -A FORWARD -p tcp ! --syn -m state --state NEW -j LOG --log-prefix "$log_prefix New but not SYN: " --log-level $log_level + fi + fi + $ip6t -A INPUT -p tcp ! --syn -m state --state NEW -j DROP + $ip6t -A OUTPUT -p tcp ! --syn -m state --state NEW -j DROP + if $kernel_forward_between_interfaces ; then + $ip6t -A FORWARD -p tcp ! --syn -m state --state NEW -j DROP + fi + + + # --- + # - drop invalid packages + # --- + + if $log_invalid_state || $log_all ; then + $ip6t -A INPUT -m state --state INVALID -j LOG --log-prefix "$log_prefix Invalid state: " --log-level $log_level + if $kernel_forward_between_interfaces ; then + $ip6t -A FORWARD -m state --state INVALID -j LOG --log-prefix "$log_prefix Invalid state: " --log-level $log_level + fi + fi + $ip6t -A INPUT -m state --state INVALID -j DROP + if $kernel_forward_between_interfaces ; then + $ip6t -A FORWARD -m state --state INVALID -j DROP + fi + + + # --- + # - ungewöhnliche Flags verwerfen + # --- + + for _dev in ${ext_if_arr[@]} ; do + if $log_invalid_flags || $log_all ; then + $ip6t -A INPUT -i $_dev -p tcp --tcp-flags ALL ACK,RST,SYN,FIN -j LOG --log-prefix "$log_prefix Invalid flags: " --log-level $log_level + $ip6t -A INPUT -i $_dev -p tcp --tcp-flags SYN,FIN SYN,FIN -j LOG --log-prefix "$log_prefix Invalid flags: " --log-level $log_level + $ip6t -A INPUT -i $_dev -p tcp --tcp-flags SYN,RST SYN,RST -j LOG --log-prefix "$log_prefix Invalid flags: " --log-level $log_level + if $kernel_forward_between_interfaces ; then + $ip6t -A FORWARD -i $_dev -p tcp --tcp-flags ALL ACK,RST,SYN,FIN -j LOG --log-prefix "$log_prefix Invalid flags: " --log-level $log_level + $ip6t -A FORWARD -i $_dev -p tcp --tcp-flags SYN,FIN SYN,FIN -j LOG --log-prefix "$log_prefix Invalid flags: " --log-level $log_level + $ip6t -A FORWARD -i $_dev -p tcp --tcp-flags SYN,RST SYN,RST -j LOG --log-prefix "$log_prefix Invalid flags: " --log-level $log_level + fi + fi + $ip6t -A INPUT -i $_dev -p tcp --tcp-flags ALL ACK,RST,SYN,FIN -j DROP + $ip6t -A INPUT -i $_dev -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP + $ip6t -A INPUT -i $_dev -p tcp --tcp-flags SYN,RST SYN,RST -j DROP + if $kernel_forward_between_interfaces ; then + $ip6t -A FORWARD -i $_dev -p tcp --tcp-flags ALL ACK,RST,SYN,FIN -j DROP + $ip6t -A FORWARD -i $_dev -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP + $ip6t -A FORWARD -i $_dev -p tcp --tcp-flags SYN,RST SYN,RST -j DROP + fi + done + + + # --- + # - Refuse private addresses on extern interfaces + # --- + + # - Refuse spoofed packets pretending to be from your IP address. + if $log_spoofed || $log_all ; then + for _ip in ${ext_ip_arr[@]} ; do + $ip6t -A INPUT -s $_ip -d $_ip -j LOG --log-prefix "$log_prefix Spoofed (own ip): " --log-level $log_level + if $kernel_forward_between_interfaces ; then + $ip6t -A FORWARD -s $_ip -d $_ip -j LOG --log-prefix "$log_prefix Spoofed (own ip): " --log-level $log_level + fi + done + fi + for _ip in ${ext_ip_arr[@]} ; do + $ip6t -A INPUT -i $_dev -s $_ip -d $_ip -j DROP + if $kernel_forward_between_interfaces ; then + $ipi6t -A FORWARD -s $_ip -d $_ip -j DROP + fi + done + + + # - private Adressen auf externen interface verwerfen + for _dev in ${dsl_device_arr[@]} ; do + if $log_spoofed || $log_all ; then + $ip6t -A INPUT -i $_dev -s $ula_block -j LOG --log-prefix "$log_prefix Private (ula_block): " --log-level $log_level + $ip6t -A INPUT -i $_dev -s $loopback -j LOG --log-prefix "$log_prefix (loopback): " --log-level $log_level + if $kernel_forward_between_interfaces ; then + $ip6t -A FORWARD -i $_dev -s $ula_block -j LOG --log-prefix "$log_prefix Private (ula_block): " --log-level $log_level + $ip6t -A FORWARD -i $_dev -s $loopback -j LOG --log-prefix "$log_prefix (loopback): " --log-level $log_level + fi + fi + $ip6t -A INPUT -i $_dev -s $ula_block -j DROP + $ip6t -A INPUT -i $_dev -s $loopback -j DROP + if $kernel_forward_between_interfaces ; then + $ip6t -A FORWARD -i $_dev -s $ula_block -j DROP + $ip6t -A FORWARD -i $_dev -s $loopback -j DROP + fi + + # Don't allow spoofing from that server + $ip6t -A OUTPUT -o $_dev -s $ula_block -j DROP + $ip6t -A OUTPUT -o $_dev -s $loopback -j DROP + if $kernel_forward_between_interfaces ; then + $ip6t -A FORWARD -o $_dev -s $ula_block -j DROP + $ip6t -A FORWARD -o $_dev -s $loopback -j DROP + fi + done + echo_done +else + echo_skipped +fi + + +# ------------- +# --- Log VoIP Traffic (local telephone systems ( ${tel_sys_ip_arr[@]}) +# ------------- + +if $log_voip || $log_all ; then + for _ip in ${tel_sys_ip_arr[@]} ; do + $ip6t -A FORWARD -d $_ip -j LOG --log-prefix "$log_prefix [VoIP] " --log-level $log_level + done +fi +#for _PORT in ${VOIP_PORTS} ; do +# $ip6t -A FORWARD -p udp --sport $_PORT -j LOG --log-prefix "$log_prefix [VoIP] " --log-level $log_level +#done + + +# ------------- +# ------------- Stopping firewall here if requested (parameter stop) +# ------------- + + +case $1 in + sto*) + echo + if $terminal ; then + echo -e "\t\033[37m\033[1mStop was requested. No more rules..\033[m" + else + echo "Stop was requested. No more firewall rules.." + fi + echo + exit 0;; +esac + + +echo + + +# ------------- +# --- iPerf +# ------------- + +# iPerf is a tool for active measurements of the maximum achievable bandwidth on IP networks. +# It supports tuning of various parameters related to timing, buffers and protocols (TCP, UDP, +# SCTP with IPv4 and IPv6). For each test it reports the bandwidth, loss, and other parameters. + +echononl "\tCreate \"iPerf\" rules.." +if $create_iperf_rules ; then + $ip6t -A INPUT -p tcp --dport 5001 -j ACCEPT + $ip6t -A INPUT -p tcp --sport 5001 -j ACCEPT + # + $ip6t -A OUTPUT -p tcp --dport 5001 -j ACCEPT + $ip6t -A OUTPUT -p tcp --sport 5001 -j ACCEPT + if $kernel_forward_between_interfaces ; then + $ip6t -A FORWARD -p tcp --dport 5001 -j ACCEPT + $ip6t -A FORWARD -p tcp --sport 5001 -j ACCEPT + fi + echo_done +else + echo_skipped +fi + + +# --- +# - Drop packets not wanted on gateway +# --- + +echononl "\tDrop packets not wanted on gateway" + +for _dev in ${local_if_arr[@]} ; do + if $log_not_wanted || $log_all ; then + if $not_wanted_ident ; then + $ip6t -A INPUT -i $_dev -p tcp --dport $standard_ident_port -j LOG --log-prefix "$log_prefix not wanted: " --log-level $log_level + fi + for _port in ${not_wanted_on_gw_tcp_port_arr[@]} ; do + $ip6t -A INPUT -i $_dev -p tcp --dport $_port -j LOG --log-prefix "$log_prefix not wanted: " --log-level $log_level + done + for _port in ${not_wanted_on_gw_udp_port_arr[@]} ; do + $ip6t -A INPUT -i $_dev -p udp --dport $_port -j LOG --log-prefix "$log_prefix not wanted: " --log-level $log_level + done + fi + if $not_wanted_ident ; then + $ip6t -A INPUT -i $_dev -p tcp --dport $standard_ident_port -j REJECT --reject-with tcp-reset + fi + for _port in ${not_wanted_on_gw_tcp_port_arr[@]} ; do + $ip6t -A INPUT -i $_dev -p tcp --dport $_port -j DROP + done + for _port in ${not_wanted_on_gw_udp_port_arr[@]} ; do + $ip6t -A INPUT -i $_dev -p udp --dport $_port -j DROP + done +done + +echo_done + + +# ------------- +# --- Generally prohibited from WAN +# ------------- + +echononl "\tGenerally prohibited from WAN" + +for _dev in ${ext_if_arr[@]} ; do + if $log_prohibited || $log_all ; then + if $block_ident ; then + $ip6t -A INPUT -p tcp -i $_dev --dport $standard_ident_port -j LOG --log-prefix "$log_prefix gen. prohibited: " --log-level $log_level + fi + for _port in ${block_tcp_port_arr[@]} ; do + $ip6t -A INPUT -p tcp -i $_dev --dport $_port -j LOG --log-prefix "$log_prefix gen. prohibited: " --log-level $log_level + done + for _port in ${block_udp_port_arr[@]} ; do + $ip6t -A INPUT -p udp -i $_dev --dport $_port -j LOG --log-prefix "$log_prefix gen. prohibited: " --log-level $log_level + done + if $kernel_forward_between_interfaces ; then + if $block_ident ; then + $ip6t -A FORWARD -p tcp -i $_dev --dport $standard_ident_port -j LOG --log-prefix "$log_prefix gen. prohibited: " --log-level $log_level + fi + for _port in ${block_tcp_port_arr[@]} ; do + $ip6t -A FORWARD -p tcp -i $_dev --dport $_port -j LOG --log-prefix "$log_prefix gen. prohibited: " --log-level $log_level + done + for _port in ${block_udp_port_arr[@]} ; do + $ip6t -A FORWARD -p udp -i $_dev --dport $_port -j LOG --log-prefix "$log_prefix gen. prohibited: " --log-level $log_level + done + fi + fi + if $block_ident ; then + $ip6t -A INPUT -p tcp -i $_dev --dport $standard_ident_port -j REJECT --reject-with tcp-reset + fi + for _port in ${block_tcp_port_arr[@]} ; do + $ip6t -A INPUT -p tcp -i $_dev --dport $_port -j DROP + done + for _port in ${block_udp_port_arr[@]} ; do + $ip6t -A INPUT -p udp -i $_dev --dport $_port -j DROP + done + if $kernel_forward_between_interfaces ; then + if $block_ident ; then + $ip6t -A FORWARD -p tcp -i $_dev --dport $standard_ident_port -j REJECT --reject-with tcp-reset + fi + for _port in ${block_tcp_port_arr[@]} ; do + $ip6t -A FORWARD -p tcp -i $_dev --dport $_port -j DROP + done + for _port in ${block_udp_port_arr[@]} ; do + $ip6t -A FORWARD -p udp -i $_dev --dport $_port -j DROP + done + fi +done + +echo_done +echo + + +# ------------- +# --- Traffic generally allowed +# ------------- + +echononl "\tLoopback device generally allowed.." + +# --- +# - Loopback device +# --- + +$ip6t -A INPUT -i lo -j ACCEPT +$ip6t -A OUTPUT -o lo -j ACCEPT + +echo_done + + +# --- +# - Allow all Traffic from source mac-address +# --- + +echononl "\tAllow all Traffic from MAC Source-Address" + +if [[ ${#allow_all_mac_src_address_arr[@]} -gt 0 ]] ; then + for _mac in ${allow_all_mac_src_address_arr[@]} ; do + for _dev in ${local_if_arr[@]} ; do + $ip6t -A INPUT -i $_dev -m mac --mac-source $_mac -j ACCEPT + if $kernel_forward_between_interfaces ; then + $ip6t -A FORWARD -i $_dev -m mac --mac-source $_mac -j ACCEPT + fi + done + done + echo_done +else + echo_skipped +fi + + +# --- +# - Allow local Traffic from source mac-address +# --- + +echononl "\tAllow local Traffic from MAC Source-Address" + + +if [[ ${#allow_local_mac_src_address_arr[@]} -gt 0 ]] ; then + for _mac in ${allow_local_mac_src_address_arr[@]} ; do + for _dev in ${local_if_arr[@]} ; do + $ip6t -A INPUT -i $_dev -m mac --mac-source $_mac -j ACCEPT + if $kernel_forward_between_interfaces ; then + $ip6t -A FORWARD -o $_dev -m mac --mac-source $_mac -j ACCEPT + fi + done + done + echo_done +else + echo_skipped +fi + + +# --- +# - Allow remote Traffic from source mac-address +# --- + +echononl "\tAllow remote Traffic from MAC Source-Address" + + +if [[ ${#allow_remote_mac_src_address_arr[@]} -gt 0 ]] ; then + for _mac in ${allow_remote_mac_src_address_arr[@]} ; do + for _dev in ${ext_if_arr[@]} ; do + if $kernel_forward_between_interfaces ; then + $ip6t -A FORWARD -o $_dev -m mac --mac-source $_mac -j ACCEPT + fi + done + done + echo_done +else + echo_skipped +fi + + +# --- +# - Already established connections +# --- + +echononl "\tAccept already established connections.." + +$ip6t -A INPUT -p ALL -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT +$ip6t -A OUTPUT -p ALL -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT +if $kernel_forward_between_interfaces ; then + $ip6t -A FORWARD -p ALL -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT +fi + +echo_done + + +# --- +# - Permit all traffic through VPN lines +# --- +echononl "\tPermit all traffic through VPN lines.." +for _vpn_if in ${vpn_if_arr[@]} ; do + $ip6t -A INPUT -i $_vpn_if -m conntrack --ctstate NEW -j ACCEPT + if $kernel_forward_between_interfaces ; then + for _local_dev in ${local_if_arr[@]} ; do + $ip6t -A FORWARD -i $_vpn_if -o $_local_dev -m conntrack --ctstate NEW -j ACCEPT + done + fi +done +echo_done + + + +# --- +# - Telefon Systems +# --- + +echononl "\tAllow all Traffic between Telefon Systems" +if [[ ${#tele_sys_ip_arr[@]} -gt 1 ]] && $allow_between_tele_systems && ! $permit_between_local_networks ; then + for _ip_1 in ${tele_sys_ip_arr[@]} ; do + for _ip_2 in ${tele_sys_ip_arr[@]} ; do + #[[ "$_ip_1" = "$_ip_2" ]] && continue + $ip6t -A FORWARD -s $_ip_1 -d $_ip_2 -p ALL -m conntrack --ctstate NEW -j ACCEPT + done + done + echo_done +else + echo_skipped +fi + + +# --- +# - Telefon Systems to remote SIP-Server +# --- + +echononl "\tTelefon System to remote SIP-Server" +if [[ ${#tele_sys_ip_arr[@]} -gt 0 ]] ; then + if [ -z "$tele_sys_remote_sip_server_port" -o -z "$tele_sys_local_sip_server_port" ] ; then + echo_failed + warn "Local or remote SIP Port not given"! + else + for _ip in ${tele_sys_ip_arr[@]} ; do + $ip6t -A FORWARD -p udp -s $_ip --sport $tele_sys_local_sip_server_port \ + --dport $tele_sys_remote_sip_server_port -m conntrack --ctstate NEW -j ACCEPT + done + fi + echo_done +else + echo_skipped +fi + + + +# --- +# - All request from local networks to the internet +# --- + +echononl "\tPermit all traffic from local networks to the internet.." +if $permit_local_net_to_inet ; then + for _dev in ${ext_if_arr[@]} ; do + $ip6t -A OUTPUT -o $_dev -p ALL -m conntrack --ctstate NEW -j ACCEPT + if $kernel_forward_between_interfaces ; then + $ip6t -A FORWARD -o $_dev -p ALL -m conntrack --ctstate NEW -j ACCEPT + fi + done + echo_done +else + echo_skipped +fi + + +# --- +# - Networks not firewalled through extern interfaces +# --- + +echononl "\tAllow these local networks any access to the internet" +if [[ ${#any_access_to_inet_network_arr[@]} -gt 0 ]] \ + && $kernel_forward_between_interfaces \ + && ! $permit_local_net_to_inet ; then + + for _net in ${any_access_to_inet_network_arr[@]}; do + for _dev in ${ext_if_arr[@]} ; do + $ip6t -A FORWARD -o $_dev -p ALL -s $_net -m conntrack --ctstate NEW -j ACCEPT + done + done + echo_done +else + echo_skipped +fi + + +echononl "\tAllow these local networks any access from the internet" +if [[ ${#any_access_from_inet_network_arr[@]} -gt 0 ]] \ + && $kernel_forward_between_interfaces ; then + + for _net in ${any_access_from_inet_network_arr[@]}; do + for _dev in ${ext_if_arr[@]} ; do + $ip6t -A FORWARD -i $_dev -p ALL -d $_net -m conntrack --ctstate NEW -j ACCEPT + done + done + echo_done +else + echo_skipped +fi + + + +# --- +# - Allow local services from given extern networks +# --- + +echononl "\tAllow local services from given extern networks" +if [[ ${#allow_ext_net_to_local_service_arr[@]} -gt 0 ]] \ + && $kernel_forward_between_interfaces ; then + + for _val in "${allow_ext_net_to_local_service_arr[@]}" ; do + IFS=',' read -a _val_arr <<< "${_val}" + for _dev in ${ext_if_arr[@]} ; do + + if containsElement "${_val_arr[1]}" "${gateway_ipv6_address_arr[@]}" ; then + $ip6t -A INPUT -i $_dev -p ${_val_arr[3]} -s ${_val_arr[0]} -d ${_val_arr[1]} --dport ${_val_arr[2]} -m conntrack --ctstate NEW -j ACCEPT + fi + + $ip6t -A FORWARD -i $_dev -p ${_val_arr[3]} -s ${_val_arr[0]} -d ${_val_arr[1]} --dport ${_val_arr[2]} -m conntrack --ctstate NEW -j ACCEPT + done + + done + + echo_done +else + echo_skipped +fi + + + +# --- +# - Allow all traffic from extern address/network to local address/network +# --- + +echononl "\tAllow all traffic from extern to local network/address" + +if [[ ${#allow_ext_net_to_local_net_arr[@]} -gt 0 ]] \ + && $kernel_forward_between_interfaces ; then + + for _val in ${allow_ext_net_to_local_net_arr[@]} ; do + IFS=',' read -a _val_arr <<< "${_val}" + for _dev in ${ext_if_arr[@]} ; do + $ip6t -A FORWARD -p ALL -i $_dev -s ${_val_arr[0]} -d ${_val_arr[1]} -m conntrack --ctstate NEW -j ACCEPT + done + done + echo_done +else + echo_skipped +fi + + + +# --- +# - Block all extern traffic to (given) local network +# --- + +echononl "\tBlock all extern traffic to (given) local network" +if [[ ${#block_all_ext_to_local_net_arr[@]} -gt 0 ]] \ + && $kernel_forward_between_interfaces ; then + + for _net in ${block_all_ext_to_local_net_arr[@]} ; do + for _dev in ${ext_if_arr[@]} ; do + $ip6t -A FORWARD -p ALL -i $_dev -d $_net -m conntrack --ctstate NEW -j DROP + done + done + echo_done +else + echo_skipped +fi + + + +# --- +# - Allow local services from given local networks +# --- + +echononl "\tAllow local services from given local networks" +if [[ ${#allow_local_net_to_local_service_arr[@]} -gt 0 ]] \ + && $kernel_forward_between_interfaces ; then + + for _val in "${allow_local_net_to_local_service_arr[@]}" ; do + IFS=',' read -a _val_arr <<< "${_val}" + $ip6t -A FORWARD -p ${_val_arr[3]} -s ${_val_arr[0]} -d ${_val_arr[1]} --dport ${_val_arr[2]} -m conntrack --ctstate NEW -j ACCEPT + + # - Note: + # - If (local) alias interfaces like eth1:0 in use, youe need a further + # - special rule. + # - + if $local_alias_interfaces ; then + if [[ "${_val_arr[3]}" = "tcp" ]]; then + $ip6t -A FORWARD -p ${_val_arr[3]} -d ${_val_arr[1]} --dport ${_val_arr[2]} --tcp-flag ACK ACK -j ACCEPT + $ip6t -A FORWARD -p ${_val_arr[3]} -s ${_val_arr[1]} --sport ${_val_arr[2]} --tcp-flag ACK ACK -j ACCEPT + fi + fi + done + + echo_done +else + echo_skipped +fi + + + +# --- +# - Allow all traffic from local network to local ip-address +# --- + +echononl "\tAllow all traffic from local network to local ip-address" + +if [[ ${#allow_local_net_to_local_ip_arr[@]} -gt 0 ]] \ + && $kernel_forward_between_interfaces ; then + + for _val in ${allow_local_net_to_local_ip_arr[@]} ; do + IFS=',' read -a _val_arr <<< "${_val}" + $ip6t -A FORWARD -p ALL -s ${_val_arr[0]} -d ${_val_arr[1]} -m conntrack --ctstate NEW -j ACCEPT + + # - Note: + # - If (local) alias interfaces like eth1:0 in use, youe need a further + # - special rule. + # - + if $local_alias_interfaces ; then + $ip6t -A FORWARD -p tcp -d ${_val_arr[1]} --tcp-flag ACK ACK -j ACCEPT + $ip6t -A FORWARD -p tcp -s ${_val_arr[1]} --tcp-flag ACK ACK -j ACCEPT + fi + done + echo_ok +else + echo_skipped +fi + + + +# --- +# - Allow all traffic from local ip-address to local network +# --- + +echononl "\tAllow all traffic from local ip-address to local network" + +if [[ ${#allow_local_ip_to_local_net_arr[@]} -gt 0 ]] \ + && $kernel_forward_between_interfaces ; then + + for _val in ${allow_local_ip_to_local_net_arr[@]} ; do + IFS=',' read -a _val_arr <<< "${_val}" + $ip6t -A FORWARD -p ALL -s ${_val_arr[0]} -d ${_val_arr[1]} -m conntrack --ctstate NEW -j ACCEPT + + # - Note: + # - If (local) alias interfaces like eth1:0 in use, youe need a further + # - special rule. + # - + if $local_alias_interfaces ; then + $ip6t -A FORWARD -p tcp -d ${_val_arr[1]} --tcp-flag ACK ACK -j ACCEPT + $ip6t -A FORWARD -p tcp -s ${_val_arr[1]} --tcp-flag ACK ACK -j ACCEPT + fi + done + echo_ok +else + echo_skipped +fi + + + +# --- +# - Allow all traffic from (one) local network to (another) local network +# --- + +echononl "\tAllow all traffic from local network to (another) local network" + +if [[ ${#allow_local_net_to_local_net_arr[@]} -gt 0 ]] \ + && $kernel_forward_between_interfaces ; then + + for _val in ${allow_local_net_to_local_net_arr[@]} ; do + IFS=',' read -a _val_arr <<< "${_val}" + $ip6t -A FORWARD -p ALL -s ${_val_arr[0]} -d ${_val_arr[1]} -m conntrack --ctstate NEW -j ACCEPT + + # - Note: + # - If (local) alias interfaces like eth1:0 in use, youe need a further + # - special rule. + # - + if $local_alias_interfaces ; then + $ip6t -A FORWARD -p tcp -d ${_val_arr[1]} --tcp-flag ACK ACK -j ACCEPT + $ip6t -A FORWARD -p tcp -s ${_val_arr[1]} --tcp-flag ACK ACK -j ACCEPT + fi + done + echo_ok +else + echo_skipped +fi + + + +# --- +# - Allow local ip address from given local interface +# --- + +echononl "\tAllow local ip address from given local interface" + +if [[ ${#allow_local_if_to_local_ip_arr[@]} -gt 0 ]] \ + && $kernel_forward_between_interfaces ; then + + for _val in ${allow_local_if_to_local_ip_arr[@]} ; do + IFS=',' read -a _val_arr <<< "${_val}" + $ip6t -A FORWARD -p ALL -i ${_val_arr[0]} -d ${_val_arr[1]} -m conntrack --ctstate NEW -j ACCEPT + + # - Note: + # - If (local) alias interfaces like eth1:0 in use, youe need a further + # - special rule. + # - + if $local_alias_interfaces ; then + $ip6t -A FORWARD -p tcp -i ${_val_arr[0]} -d ${_val_arr[1]} --tcp-flag ACK ACK -j ACCEPT + $ip6t -A FORWARD -p tcp -o ${_val_arr[0]} -s ${_val_arr[1]} --tcp-flag ACK ACK -j ACCEPT + fi + done + echo_done +else + echo_skipped +fi + + + +# --- +# - Allow extern service from given local interface +# --- + +echononl "\tAllow extern service from given local interface" + +if [[ ${#allow_local_if_to_ext_service_arr[@]} -gt 0 ]] \ + && $kernel_forward_between_interfaces ; then + + for _val in "${allow_local_if_to_ext_service_arr[@]}" ; do + IFS=',' read -a _val_arr <<< "${_val}" + $ip6t -A FORWARD -p ${_val_arr[3]} -i ${_val_arr[0]} -d ${_val_arr[1]} --dport ${_val_arr[2]} -m conntrack --ctstate NEW -j ACCEPT + + # - Note: + # - If (local) alias interfaces like eth1:0 in use, youe need a further + # - special rule. + # - + if $local_alias_interfaces ; then + if [[ "${_val_arr[3]}" = "tcp" ]]; then + $ip6t -A FORWARD -p tcp -i ${_val_arr[0]} -d ${_val_arr[1]} --tcp-flag ACK ACK -j ACCEPT + $ip6t -A FORWARD -p tcp -o ${_val_arr[0]} -s ${_val_arr[1]} --tcp-flag ACK ACK -j ACCEPT + fi + fi + done + + echo_done +else + echo_skipped +fi + + + +# --- +# - Allow extern network from given local interface +# --- + +echononl "\tAllow extern network from given local interface" + +if [[ ${#allow_local_if_to_ext_net_arr[@]} -gt 0 ]] \ + && $kernel_forward_between_interfaces ; then + + for _val in ${allow_local_if_to_ext_net_arr[@]} ; do + IFS=',' read -a _val_arr <<< "${_val}" + $ip6t -A FORWARD -p ALL -i ${_val_arr[0]} -d ${_val_arr[1]} -m conntrack --ctstate NEW -j ACCEPT + + # - Note: + # - If (local) alias interfaces like eth1:0 in use, youe need a further + # - special rule. + # - + if $local_alias_interfaces ; then + $ip6t -A FORWARD -p tcp -i ${_val_arr[0]} -d ${_val_arr[1]} --tcp-flag ACK ACK -j ACCEPT + $ip6t -A FORWARD -p tcp -o ${_val_arr[0]} -s ${_val_arr[1]} --tcp-flag ACK ACK -j ACCEPT + fi + done + echo_done +else + echo_skipped +fi + + + +# --- +# - Allow extern service from given local network +# --- + +echononl "\tAllow extern service from given local network" + +if [[ ${#allow_local_net_to_ext_service_arr[@]} -gt 0 ]] \ + && $kernel_forward_between_interfaces ; then + + for _val in "${allow_local_net_to_ext_service_arr[@]}" ; do + IFS=',' read -a _val_arr <<< "${_val}" + $ip6t -A FORWARD -p ${_val_arr[3]} -s ${_val_arr[0]} -d ${_val_arr[1]} --dport ${_val_arr[2]} -m conntrack --ctstate NEW -j ACCEPT + + # - Note: + # - If (local) alias interfaces like eth1:0 in use, youe need a further + # - special rule. + # - + if $local_alias_interfaces ; then + if [[ "${_val_arr[3]}" = "tcp" ]]; then + $ip6t -A FORWARD -p ${_val_arr[3]} -d ${_val_arr[1]} --dport ${_val_arr[2]} --tcp-flag ACK ACK -j ACCEPT + $ip6t -A FORWARD -p ${_val_arr[3]} -s ${_val_arr[1]} --sport ${_val_arr[2]} --tcp-flag ACK ACK -j ACCEPT + fi + fi + done + + echo_done +else + echo_skipped +fi + + + +# --- +# - Allow extern network from given local network +# --- + +echononl "\tAllow extern network from given local network" + +if [[ ${#allow_local_net_to_ext_net_arr[@]} -gt 0 ]] \ + && $kernel_forward_between_interfaces ; then + + for _val in ${allow_local_net_to_ext_net_arr[@]} ; do + IFS=',' read -a _val_arr <<< "${_val}" + $ip6t -A FORWARD -p ALL -s ${_val_arr[0]} -d ${_val_arr[1]} -m conntrack --ctstate NEW -j ACCEPT + + # - Note: + # - If (local) alias interfaces like eth1:0 in use, youe need a further + # - special rule. + # - + if $local_alias_interfaces ; then + $ip6t -A FORWARD -p tcp -d ${_val_arr[1]} -s ${_val_arr[0]} --tcp-flag ACK ACK -j ACCEPT + $ip6t -A FORWARD -p tcp -d ${_val_arr[0]} -s ${_val_arr[1]} --tcp-flag ACK ACK -j ACCEPT + fi + done + echo_done +else + echo_skipped +fi + + + +# --- +# - Separate local networks +# --- + +echononl "\tSeparate local networks.." +if [[ ${#separate_local_network_arr[@]} -gt 0 ]] && $kernel_forward_between_interfaces ; then + for _net in ${separate_local_network_arr[@]}; do + for _dev in ${local_if_arr[@]} ; do + $ip6t -A FORWARD -o $_dev -p all -s $_net -j DROP + done + done + echo_done +else + echo_skipped +fi + + + +# --- +# - Separate local interfaces +# --- + +echononl "\tSeparate local interfaces.." +if [[ ${#separate_local_if_arr[@]} -gt 0 ]] && $kernel_forward_between_interfaces ; then + for _dev_1 in ${separate_local_if_arr[@]}; do + for _dev_2 in ${local_if_arr[@]} ; do + [[ "$_dev_1" = "$_dev_2" ]] && continue + $ip6t -A FORWARD -i $_dev_1 -o $_dev_2 -p all -j DROP + $ip6t -A FORWARD -i $_dev_2 -o $_dev_1 -p all -j DROP + done + done + echo_done +else + echo_skipped +fi + + +# --- +# - Permit all traffic between local networks +# --- + +echononl "\tPermit all traffic between local networks.." +if $kernel_forward_between_interfaces ; then + if $permit_between_local_networks ; then + for _dev_1 in ${local_if_arr[@]} ; do + for _dev_2 in ${local_if_arr[@]} ; do + + # - Notice: + # - In case of routing multiple netwoks on the same interface or + # - using alias interfaces like eth0:0, you need a rule with + # - incomming- and outgoing interface are equal! + # - + # - So DON'T add statement like this: + # - [[ "$_dev_2" = "$_dev_1" ]] && continue + # - + $ip6t -A FORWARD -i $_dev_1 -o $_dev_2 -p ALL -m conntrack --ctstate NEW -j ACCEPT + + # - Note: + # - If (local) alias interfaces like eth1:0 in use, youe need a further + # - special rule. + # - + if [[ "$_dev_2" = "$_dev_1" ]] && $local_alias_interfaces ; then + $ip6t -A FORWARD -i $_dev_1 -o $_dev_2 -p tcp --tcp-flag ACK ACK -j ACCEPT + fi + + done + done + echo_done + else + echo_skipped + fi +else + echo_skipped +fi + + + +# ------------- +# --- Services +# ------------- + +echo +if $terminal ; then + echo -e "\t\033[37m\033[1mAdd Rules for Services..\033[m" +else + echo "Add Rules for Services.." +fi +echo -e "\t\033[37m\033[1mAdd Rules for Services..\033[m" + + +# --- +# - IPv4 over IPv6 +# --- + + +# --- +# - DHCP +# --- + +echononl "\t\tLocal DHCP Client" + +if [[ ${#dhcp_client_interfaces_arr[@]} -gt 0 ]] ; then + for _dev in ${dhcp_client_interfaces_arr[@]} ; do + $ip6t -A INPUT -i $_dev -p udp -m udp --dport 546 -j ACCEPT + $ip6t -A OUTPUT -o $_dev -p udp -m udp --dport 547 -j ACCEPT + done + + echo_done +else + echo_skipped +fi + + +echononl "\t\tDHCP Service (local network only)" + +if $local_dhcp_service ; then + for _dev in ${local_if_arr[@]} ; do + $ip6t -A INPUT -i $_dev -p icmpv6 --icmpv6-type router-advertisement -j ACCEPT + $ip6t -A INPUT -i $_dev -p icmpv6 --icmpv6-type router-solicitation -j ACCEPT + $ip6t -A INPUT -i $_dev -p icmpv6 --icmpv6-type echo-request -j ACCEPT + $ip6t -A INPUT -i $_dev -p icmpv6 --icmpv6-type echo-reply -j ACCEPT + + $ip6t -A INPUT -p udp -i $_dev --sport 546 --dport 547 -j ACCEPT + $ip6t -A OUTPUT -p udp -o $_dev --sport 547 --dport 546 -j ACCEPT + done + echo_done +else + echo_skipped +fi + + +# --- +# - DHCP Failover +# --- + +echononl "\t\tDHCP Failover Server" +if $local_dhcp_service && [[ ${#dhcp_failover_server_ip_arr[@]} -gt 0 ]] ; then + for _ip in ${dhcp_failover_server_ip_arr[@]} ; do + $ip6t -A INPUT -p tcp --dport $dhcp_failover_port -s $_ip -m conntrack --ctstate NEW -j ACCEPT + $ip6t -A OUTPUT -p tcp -d $_ip --dport $dhcp_failover_port -m conntrack --ctstate NEW -j ACCEPT + done + echo_done +else + echo_skipped +fi + + +# --- +# - DNS out only +# --- + +echononl "\t\tDNS out only" + +# - Nameservers on the INET must be reachable for the local recursiv nameserver +# - but also for all others +# - +for _dev in ${ext_if_arr[@]} ; do + # - out from local and virtual mashine(s) + $ip6t -A OUTPUT -o $_dev -p udp --dport 53 -m conntrack --ctstate NEW -j ACCEPT + $ip6t -A OUTPUT -o $_dev -p tcp --dport 53 -m conntrack --ctstate NEW -j ACCEPT + + # - Only useful (needed) if kernel forwarding is activated (kernel_forward_between_interfaces=true) + if $kernel_forward_between_interfaces && ! $permit_local_net_to_inet ; then + # - forward from virtual mashine(s) + $ip6t -A FORWARD -o $_dev -p udp --dport 53 -m conntrack --ctstate NEW -j ACCEPT + $ip6t -A FORWARD -o $_dev -p tcp --dport 53 -m conntrack --ctstate NEW -j ACCEPT + fi +done + +echo_done + + +# --- +# - DNS Service Gateway +# --- + +echononl "\t\tDNS Service Gateway" + +# - Local Nameservice +# - +if $local_dns_service ; then + + # dns requests + # + # Note: + # If the total size of the DNS record is larger than 512 bytes, + # it will be sent over TCP, not UDP. + # + + # - Allow requests from local networks + # - + for _dev in ${local_if_arr[@]} ; do + # - in + $ip6t -A INPUT -i $_dev -p udp --dport 53 -m conntrack --ctstate NEW -j ACCEPT + $ip6t -A INPUT -i $_dev -p tcp --dport 53 -m conntrack --ctstate NEW -j ACCEPT + done + + # - Zonetransfere (uses tcp/53) + # + for _ip in ${dns_server_ips[@]} ; do + # - out + # - + # - local master (here) gets request for a zone from slave ($_ip) + $ip6t -A INPUT -p tcp -s $_ip --sport $unprivports --dport 53 -m conntrack --ctstate NEW -j ACCEPT + + # - in + # - + # - local slave (here) requests zone from master ($_ip) + $ip6t -A OUTPUT -p tcp --sport $unprivports -d $_ip --dport 53 -m conntrack --ctstate NEW -j ACCEPT + done + + echo_done +else + echo_skipped +fi + + +# --- +# - DNS Services at local Network +# --- + +echononl "\t\tDNS Service local Network" + +# - Make nameservers at the local network area rechable for all +# - +if [[ ${#dns_server_ip_arr[@]} -gt 0 ]] ; then + + # dns requests + # + # Note: + # If the total size of the DNS record is larger than 512 bytes, + # it will be sent over TCP, not UDP. + # + + for _ip in ${dns_server_ip_arr[@]} ; do + $ip6t -A OUTPUT -p udp -d $_ip --dport 53 -m conntrack --ctstate NEW -j ACCEPT + $ip6t -A OUTPUT -p tcp -d $_ip --dport 53 -m conntrack --ctstate NEW -j ACCEPT + if $kernel_forward_between_interfaces && ! $permit_between_local_networks ; then + for _dev in ${local_if_arr[@]} ; do + $ip6t -A FORWARD -i $_dev -p udp -d $_ip --dport 53 -m conntrack --ctstate NEW -j ACCEPT + $ip6t -A FORWARD -i $_dev -p tcp -d $_ip --dport 53 -m conntrack --ctstate NEW -j ACCEPT + done + fi + done + + echo_done +else + echo_skipped +fi + + + +# --- +# - SSH out only +# --- + +echononl "\t\tSSH out only" + +if $allow_ssh_request_out && ! $permit_local_net_to_inet ; then + # - Provide SSH to everywhere (also LAN) + for _dev in ${ext_if_arr[@]} ; do + $ip6t -A OUTPUT -o $_dev -p tcp --dport $standard_ssh_port -m conntrack --ctstate NEW -j ACCEPT + if $kernel_forward_between_interfaces && ! $permit_local_net_to_inet ; then + $ip6t -A FORWARD -o $_dev -p tcp --dport $standard_ssh_port -m conntrack --ctstate NEW -j ACCEPT + fi + done + for _dev in ${local_if_arr[@]} ; do + $ip6t -A OUTPUT -o $_dev -p tcp --dport $standard_ssh_port -m conntrack --ctstate NEW -j ACCEPT + done + + echo_done +else + echo_skipped +fi + + +# --- +# - SSH Service Gateway +# --- + +echononl "\t\tSSH Service Gateway (also from WAN)" + +if $local_ssh_service ; then + # - Provides SSH in from everywhere + for _port in ${ssh_port_arr[@]} ; do + $ip6t -A INPUT -p tcp --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + echo_done +else + echo_skipped +fi + + +# --- +# - SSH Services only local Network +# --- + +echononl "\t\tSSH Services only local Network" + +if [[ ${#ssh_server_only_local_ip_arr[@]} -gt 0 ]] ; then + for _ip in ${ssh_server_only_local_ip_arr[@]} ; do + for _port in ${ssh_port_arr[@]} ; do + + $ip6t -A OUTPUT -p tcp -d $_ip --dport $_port -m conntrack --ctstate NEW -j ACCEPT + + if $kernel_forward_between_interfaces && ! $permit_between_local_networks ; then + for _dev in ${local_if_arr[@]} ; do + $ip6t -A FORWARD -i $_dev -p tcp -d $_ip -dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + fi + + # - Note: + # - If (local) alias interfaces like eth1:0 in use, youe need a further + # - special rule. + # - + if $kernel_forward_between_interfaces && $local_alias_interfaces ; then + $ip6t -A FORWARD -p tcp -d $_ip --dport $_port --tcp-flag ACK ACK -j ACCEPT + $ip6t -A FORWARD -p tcp -s $_ip --sport $_port --tcp-flag ACK ACK -j ACCEPT + fi + + done + done + + echo_done +else + echo_skipped +fi + + +# --- +# - SSH Services DMZ +# --- + +echononl "\t\tSSH Services DMZ" +unset no_if_for_ip_arr +declare -a no_if_for_ip_arr + +if [[ ${#ssh_server_dmz_arr[@]} -gt 0 ]] ; then + for _ip in "${!ssh_server_dmz_arr[@]}"; do + + # - Skip if no interface is given + # - + if [[ -z "${ssh_server_dmz_arr[$_ip]}" ]] ; then + no_if_for_ip_arr+=("$_ip") + continue + fi + + for _port in ${ssh_port_arr[@]} ; do + + $ip6t -A OUTPUT -p tcp -d $_ip --dport $_port -m conntrack --ctstate NEW -j ACCEPT + + if $kernel_forward_between_interfaces ; then + + $ip6t -A FORWARD -i ${ssh_server_dmz_arr[$_ip]} -p tcp --dport $_port -d $_ip -m conntrack --ctstate NEW -j ACCEPT + fi + + # - From intern + if $kernel_forward_between_interfaces && ! $permit_between_local_networks ; then + for _dev in ${local_if_arr[@]} ; do + $ip6t -A FORWARD -i $_dev -p tcp -d $_ip -m multiport --dports $_port -m conntrack --ctstate NEW -j ACCEPT + done + fi + + # - Rule is needed if (local) interface aliases in use (like eth0:1) + # - + if $kernel_forward_between_interfaces && $local_alias_interfaces ; then + for _port in ${ssh_port_arr[@]} ; do + $ip6t -A FORWARD -p tcp -d $_ip --dport $_port --tcp-flag ACK ACK -j ACCEPT + $ip6t -A FORWARD -p tcp -s $_ip --sport $_port --tcp-flag ACK ACK -j ACCEPT + done + fi + + done + + done + + if [[ ${#no_if_for_ip_arr[@]} -gt 0 ]] ; then + echo_warning + for _ip in ${no_if_for_ip_arr[@]} ; do + warn "No Interface given for ip '$_ip'" + done + else + echo_done + fi + +else + echo_skipped +fi + + +# --- +# - SSH Service between local Netwotks +# --- + +echononl "\t\tSSH Service between local Netwotks" +if $allow_ssh_between_local_nets ; then + if $kernel_forward_between_interfaces ; then + for _dev_1 in ${local_if_arr[@]} ; do + + for _port in ${ssh_port_arr[@]} ; do + $ip6t -A OUTPUT -o $_dev_1 -p tcp --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + + for _dev_2 in ${local_if_arr[@]} ; do + + if ! $permit_between_local_networks ; then + # - Notice: + # - In case of routing multiple netwoks on the same interface or + # - using alias interfaces like eth0:0, you need a rule with + # - incomming- and outgoing interface are equal! + # - + # - So DON'T add statement like this: + # - [[ "$_dev_2" = "$_dev_1" ]] && continue + # - + for _port in ${ssh_port_arr[@]} ; do + $ip6t -A FORWARD -i $_dev_1 -o $_dev_2 -p tcp --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + fi + + # - Note: + # - If (local) alias interfaces like eth1:0 in use, youe need a further + # - special rule. + # - + if [[ "$_dev_2" = "$_dev_1" ]] && $local_alias_interfaces ; then + for _port in ${ssh_port_arr[@]} ; do + $ip6t -A FORWARD -i $_dev_1 -o $_dev_2 -p tcp --sport $_port --tcp-flag ACK ACK -j ACCEPT + $ip6t -A FORWARD -i $_dev_1 -o $_dev_2 -p tcp --dport $_port --tcp-flag ACK ACK -j ACCEPT + done + fi + done + done + fi + + echo_done +else + echo_skipped +fi + + +# --- +# - Cisco kompartibles VPN (FRITZ!Box) +# --- + +echononl "\t\tCisco VPN Service (FRITZ\!Box) only out" + +if $allow_cisco_vpn_out && [[ ${#cisco_vpn_out_port_arr[@]} -gt 0 ]]; then + for _dev in ${ext_if_arr[@]} ; do + for _port in ${cisco_vpn_out_port_arr[@]} ; do + $ip6t -A OUTPUT -o $_dev -p udp --dport $_port -m conntrack --ctstate NEW -j ACCEPT + if $kernel_forward_between_interfaces && ! $permit_local_net_to_inet ; then + $ip6t -A FORWARD -o $_dev -p udp --dport $_port -m conntrack --ctstate NEW -j ACCEPT + fi + done + done + + for _vpn_if in ${vpn_if_arr[@]} ; do + $ip6t -A OUTPUT -o $_vpn_if -p $cisco_vpn_out_protocol -m conntrack --ctstate NEW -j ACCEPT + if $kernel_forward_between_interfaces ; then + $ip6t -A FORWARD -o $_vpn_if -p $cisco_vpn_out_protocol -m conntrack --ctstate NEW -j ACCEPT + fi + done + + echo_done +else + echo_skipped +fi + + +# --- +# - VPN Service only out +# --- + +echononl "\t\tVPN Service only out" + +if $allow_vpn_out && [[ ${#vpn_out_port_arr[@]} -gt 0 ]]; then + for _dev in ${ext_if_arr[@]} ; do + for _port in ${vpn_out_port_arr[@]} ; do + $ip6t -A OUTPUT -o $_dev -p udp --dport $_port -m conntrack --ctstate NEW -j ACCEPT + if $kernel_forward_between_interfaces && ! $permit_local_net_to_inet ; then + $ip6t -A FORWARD -o $_dev -p udp --dport $_port -m conntrack --ctstate NEW -j ACCEPT + fi + done + done + + for _vpn_if in ${vpn_if_arr[@]} ; do + $ip6t -A OUTPUT -o $_vpn_if -m conntrack --ctstate NEW -j ACCEPT + if $kernel_forward_between_interfaces ; then + $ip6t -A FORWARD -o $_vpn_if -m conntrack --ctstate NEW -j ACCEPT + fi + done + echo_done +else + echo_skipped +fi + + +# --- +# - VPN Service Gateway +# --- + +echononl "\t\tVPN Service Gateway" + +if $local_vpn_service ; then + + # - Cconnection establishment + # - + for _port in ${vpn_gw_port_arr[@]} ; do + $ip6t -A INPUT -p udp --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + echo_done + +else + echo_skipped +fi + + +# --- +# - VPN Service DMZ +# --- + +echononl "\t\tVPN Service DMZ" +unset no_if_for_ip_arr +declare -a no_if_for_ip_arr + +if [[ ${#vpn_server_dmz_arr[@]} -gt 0 ]] && $kernel_forward_between_interfaces ; then + for _ip in ${!vpn_server_dmz_arr[@]} ; do + + # - Skip if no interface is given + # - + if [[ -z "${vpn_server_dmz_arr[$_ip]}" ]] ; then + no_if_for_ip_arr+=("$_ip") + continue + fi + + for _port in ${vpn_local_net_port_arr[@]} ; do + $ip6t -A FORWARD -p udp -d $_ip --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + done + + if [[ ${#no_if_for_ip_arr[@]} -gt 0 ]] ; then + echo_warning + for _ip in ${no_if_for_ip_arr[@]} ; do + warn "No Interface given for ip '$_ip'" + done + else + echo_done + fi + +else + echo_skipped +fi + + +# --- +# - HTTP(S) OUT +# --- + +echononl "\t\tHTTP(S) out only" + +if $allow_http_request_out && ! $permit_local_net_to_inet ; then + for _dev in ${ext_if_arr[@]} ; do + $ip6t -A OUTPUT -o $_dev -p tcp -m multiport --dports $standard_http_ports -m conntrack --ctstate NEW -j ACCEPT + if $kernel_forward_between_interfaces && ! $permit_local_net_to_inet ; then + $ip6t -A FORWARD -o $_dev -p tcp -m multiport --dports $standard_http_ports -m conntrack --ctstate NEW -j ACCEPT + fi + done + echo_done +else + echo_skipped +fi + + + +# --- +# - HTTP(S) (local) Webserver +# --- + +echononl "\t\tHTTP(S) Services Gateway" +# - Access to the local Webservice +if $local_http_service ; then + $ip6t -A INPUT -p tcp -m multiport --dports $http_ports -m conntrack --ctstate NEW -j ACCEPT + echo_done +else + echo_skipped +fi + + +# --- +# - HTTP(S) Services only local Network +# --- + +echononl "\t\tHTTP(S) Services only local Network" +# - Access to the Webservices (LAN) +if [[ ${#http_server_only_local_ip_arr[@]} -gt 0 ]] ; then + for _ip in ${http_server_only_local_ip_arr[@]} ; do + $ip6t -A OUTPUT -p tcp -d $_ip -m multiport --dports $http_ports -m conntrack --ctstate NEW -j ACCEPT + if $kernel_forward_between_interfaces && ! $permit_between_local_networks ; then + for _dev in ${local_if_arr[@]} ; do + $ip6t -A FORWARD -i $_dev -p tcp -d $_ip -m multiport --dports $http_ports -m conntrack --ctstate NEW -j ACCEPT + done + fi + + # - Note: + # - If (local) alias interfaces like eth1:0 in use, youe need a further + # - special rule. + # - + if $kernel_forward_between_interfaces && $local_alias_interfaces ; then + $ip6t -A FORWARD -p tcp -d $_ip -m multiport --dports $http_ports --tcp-flag ACK ACK -j ACCEPT + $ip6t -A FORWARD -p tcp -s $_ip -m multiport --sports $http_ports --tcp-flag ACK ACK -j ACCEPT + fi + done + + echo_done +else + echo_skipped +fi + + +# --- +# - HTTP(S) Services DMZ +# --- + +echononl "\t\tHTTP(S) Services DMZ" +unset no_if_for_ip_arr +declare -a no_if_for_ip_arr + +if [[ ${#http_server_dmz_arr[@]} -gt 0 ]] ; then + http_port_arr=(${http_ports//,/ }) + for _ip in "${!http_server_dmz_arr[@]}"; do + + # - Skip if no interface is given + # - + if [[ -z "${http_server_dmz_arr[$_ip]}" ]] ; then + no_if_for_ip_arr+=("$_ip") + continue + fi + + for _port in ${http_port_arr[@]} ; do + $ip6t -A OUTPUT -p tcp -d $_ip --dport $_port -m conntrack --ctstate NEW -j ACCEPT + if $kernel_forward_between_interfaces ; then + $ip6t -A FORWARD -i ${http_server_dmz_arr[$_ip]} -p tcp --dport $_port -d $_ip -m conntrack --ctstate NEW -j ACCEPT + fi + done + if $kernel_forward_between_interfaces && ! $permit_between_local_networks ; then + for _dev in ${local_if_arr[@]} ; do + $ip6t -A FORWARD -i $_dev -p tcp -d $_ip -m multiport --dports $http_ports -m conntrack --ctstate NEW -j ACCEPT + done + fi + + # - Rule is needed if (local) interface aliases in use (like eth0:1) + # - + if $kernel_forward_between_interfaces && $local_alias_interfaces ; then + $ip6t -A FORWARD -p tcp -d $_ip -m multiport --dports $http_ports --tcp-flag ACK ACK -j ACCEPT + $ip6t -A FORWARD -p tcp -s $_ip -m multiport --sports $http_ports --tcp-flag ACK ACK -j ACCEPT + fi + + done + + if [[ ${#no_if_for_ip_arr[@]} -gt 0 ]] ; then + echo_warning + for _ip in ${no_if_for_ip_arr[@]} ; do + warn "No Interface given for ip '$_ip'" + done + else + echo_done + fi + +else + echo_skipped +fi + + +# --- +# - HTTPS Services DMZ (only port 443) +# --- + +echononl "\t\tHTTPS Services DMZ (only port $standard_https_port)" +unset no_if_for_ip_arr +declare -a no_if_for_ip_arr + +if [[ ${#http_ssl_server_dmz_arr[@]} -gt 0 ]] ; then + for _ip in "${!http_ssl_server_dmz_arr[@]}"; do + + # - Skip if no interface is given + # - + if [[ -z "${http_ssl_server_dmz_arr[$_ip]}" ]] ; then + no_if_for_ip_arr+=("$_ip") + continue + fi + + $ip6t -A OUTPUT -p tcp -d $_ip --dport $standard_https_port -m conntrack --ctstate NEW -j ACCEPT + + # - From extern + if $kernel_forward_between_interfaces ; then + $ip6t -t filter -A FORWARD -i ${http_ssl_server_dmz_arr[$_ip]} -p tcp --dport $standard_https_port -d $_ip -j ACCEPT + fi + + # - From intern + if $kernel_forward_between_interfaces && ! $permit_between_local_networks ; then + for _dev in ${local_if_arr[@]} ; do + $ip6t -A FORWARD -i $_dev -p tcp -d $_ip --dport $standard_https_port -m conntrack --ctstate NEW -j ACCEPT + done + fi + + # - Rule is needed if (local) interface aliases in use (like eth0:1) + # - + if $kernel_forward_between_interfaces && $local_alias_interfaces ; then + $ip6t -A FORWARD -p tcp -d $_ip --dport $standard_https_port --tcp-flag ACK ACK -j ACCEPT + $ip6t -A FORWARD -p tcp -s $_ip --sport $standard_https_port --tcp-flag ACK ACK -j ACCEPT + fi + done + + if [[ ${#no_if_for_ip_arr[@]} -gt 0 ]] ; then + echo_warning + for _ip in ${no_if_for_ip_arr[@]} ; do + warn "No Interface given for ip '$_ip'" + done + else + echo_done + fi + +else + echo_skipped +fi + + +# --- +# - Mail Service SMTP only out +# --- + +echononl "\t\tMail Services SMTP only out" + +if $allow_smtp_request_out && ! $permit_local_net_to_inet ; then + # - Provide SMTP out for all to WAN + for _dev in ${ext_if_arr[@]} ; do + $ip6t -A OUTPUT -p tcp -o $_dev --dport $standard_smtp_port -m conntrack --ctstate NEW -j ACCEPT + if $kernel_forward_between_interfaces && ! $permit_local_net_to_inet ; then + $ip6t -A FORWARD -p tcp -o $_dev --dport $standard_smtp_port -m conntrack --ctstate NEW -j ACCEPT + fi + done + + echo_done +else + echo_skipped +fi + + +# --- +# - SMTP (Relay) Service Gateway +# --- + +echononl "\t\tSMTP (Relay) Service Gateway (only on local network)" +if $local_smtp_service ; then + for _dev in ${local_if_arr[@]} ; do + $ip6t -A INPUT -p tcp -i $_dev --dport $standard_smtp_port -m conntrack --ctstate NEW -j ACCEPT + done + + echo_done +else + echo_skipped +fi + + +# --- +# - Mail User Services smtps/pop(s)/imap(s) only out +# --- + +echononl "\t\tMail Services smtps/pop(s)/imap(s) only out" + +if $allow_mail_request_out && ! $permit_local_net_to_inet ; then + # - Provide using Mailservices (WAN) from whole LAN + # - + # - Not needed from local machine. But for testing pupose (i.e. telnet ) + # - + # - + for _dev in ${ext_if_arr[@]} ; do + if $provide_mailservice_from_local ; then + # - Note! + # - this provides access both to LAN and WAN + $ip6t -A OUTPUT -p tcp -m multiport --dports $standard_mailuser_ports -m conntrack --ctstate NEW -j ACCEPT + fi + if $kernel_forward_between_interfaces && ! $permit_local_net_to_inet ; then + for _dev in ${ext_if_arr[@]} ; do + $ip6t -A FORWARD -o $_dev -p tcp -m multiport --dports $standard_mailuser_ports -m conntrack --ctstate NEW -j ACCEPT + done + fi + done + + echo_done +else + echo_skipped +fi + + +# --- +# - Mail Service SMTP only local Networks +# --- + +echononl "\t\tMail Service SMTP only local Networks" +if [[ ${#mail_server_only_local_ip_arr[@]} -gt 0 ]] ; then + for _ip in ${mail_server_only_local_ip_arr[@]} ; do + $ip6t -A OUTPUT -p tcp -d $_ip --dport $standard_smtp_port -m conntrack --ctstate NEW -j ACCEPT + if $kernel_forward_between_interfaces && ! $permit_between_local_networks ; then + for _dev in ${local_if_arr[@]} ; do + $ip6t -A FORWARD -i $_dev -p tcp -d $_ip --dport $standard_smtp_port -m conntrack --ctstate NEW -j ACCEPT + done + fi + + # - Note: + # - If (local) alias interfaces like eth1:0 in use, youe need a further + # - special rule. + # - + if $kernel_forward_between_interfaces && $local_alias_interfaces ; then + $ip6t -A FORWARD -p tcp -d $_ip --dport $standard_smtp_port --tcp-flag ACK ACK -j ACCEPT + $ip6t -A FORWARD -p tcp -s $_ip --sport $standard_smtp_port --tcp-flag ACK ACK -j ACCEPT + fi + + echo_done + done +else + echo_skipped +fi + + +# --- +# - Mail Services smtps/pop(s)/imap(s) only local Networks +# --- + +echononl "\t\tMail Services smtps/pop(s)/imap(s) only local Networks" + +if [[ ${#mail_server_only_local_ip_arr[@]} -gt 0 ]]; then + for _ip in ${mail_server_only_local_ip_arr[@]} ; do + $ip6t -A OUTPUT -p tcp -d $_ip -m multiport --dports $mail_user_ports -m conntrack --ctstate NEW -j ACCEPT + if $kernel_forward_between_interfaces && ! $permit_between_local_networks ; then + for _dev in ${local_if_arr[@]} ; do + $ip6t -A FORWARD -i $_dev -p tcp -d $_ip -m multiport --dports $mail_user_ports -m conntrack --ctstate NEW -j ACCEPT + done + fi + # - Note: + # - If (local) alias interfaces like eth1:0 in use, youe need a further + # - special rule. + # - + if $kernel_forward_between_interfaces && $local_alias_interfaces ; then + $ip6t -A FORWARD -p tcp -d $_ip -m multiport --dports $mail_user_ports --tcp-flag ACK ACK -j ACCEPT + $ip6t -A FORWARD -p tcp -s $_ip -m multiport --sports $mail_user_ports --tcp-flag ACK ACK -j ACCEPT + fi + done + + echo_done +else + echo_skipped +fi + + +# --- +# - Mail Server DMZ +# --- + +echononl "\t\tMail Server DMZ" +unset no_if_for_ip_arr +declare -a no_if_for_ip_arr + +if [[ ${#mail_server_dmz_arr[@]} -gt 0 ]] ; then + mail_port_arr=(${mail_user_ports//,/ }) + mail_port_arr+=("$mail_smtp_port") + for _ip in "${!mail_server_dmz_arr[@]}"; do + + # - Skip if no interface is given + # - + if [[ -z "${mail_server_dmz_arr[$_ip]}" ]] ; then + no_if_for_ip_arr+=("$_ip") + continue + fi + + for _port in ${mail_port_arr[@]} ; do + $ip6t -A OUTPUT -p tcp -d $_ip --dport $_port -m conntrack --ctstate NEW -j ACCEPT + $ip6t -A FORWARD -i ${mail_server_dmz_arr[$_ip]} -p tcp --dport $_port -d $_ip -m conntrack --ctstate NEW -j ACCEPT + done + if $kernel_forward_between_interfaces && ! $permit_between_local_networks ; then + for _dev in ${local_if_arr[@]} ; do + $ip6t -A FORWARD -i $_dev -p tcp -d $_ip -m multiport --dports $mail_smtp_port,$mail_user_ports -m conntrack --ctstate NEW -j ACCEPT + done + fi + + # - Note: + # - If (local) alias interfaces like eth1:0 in use, youe need a further + # - special rule. + # - + if $kernel_forward_between_interfaces && $local_alias_interfaces ; then + $ip6t -A FORWARD -p tcp -d $_ip -m multiport --dports $standard_smtp_port,$mail_user_ports --tcp-flag ACK ACK -j ACCEPT + $ip6t -A FORWARD -p tcp -s $_ip -m multiport --sports $standard_smtp_port,$mail_user_ports --tcp-flag ACK ACK -j ACCEPT + fi + done + + if [[ ${#no_if_for_ip_arr[@]} -gt 0 ]] ; then + echo_warning + for _ip in ${no_if_for_ip_arr[@]} ; do + warn "No Interface given for ip '$_ip'" + done + else + echo_done + fi + +else + echo_skipped +fi + + +# --- +# - FTP common +# --- +ftp_helper_output_defined=false +ftp_helper_prerouting_defined=false + +# --- +# - FTP out only +# --- + +echononl "\t\tFTP out only" + +if $allow_ftp_request_out ; then + + # - Used for different ftp6data recent lists 'ftp6data_$i' + # - + declare -i i=1 + + # - (Re)define helper + # - + if ! $ftp_helper_output_defined ; then + $ip6t -A OUTPUT -t raw -p tcp --dport 21 -j CT --helper ftp + ftp_helper_output_defined=true + fi + if $kernel_forward_between_interfaces && ! $ftp_helper_prerouting_defined ; then + $ip6t -A PREROUTING -t raw -p tcp --dport 21 -j CT --helper ftp + ftp_helper_prerouting_defined=true + fi + + for _dev in ${ext_if_arr[@]} ; do + + # - Open FTP connection and add the destination ip (--rdest) to ftp6data recent list 'ftp6data_$i'. + # - + $ip6t -A OUTPUT -o $_dev -p tcp --dport 21 -m state --state NEW \ + -m recent --name ftp6data_$i --rdest --set -j ACCEPT + + # - (2) + # - - Accept packets if the destination ip-address (--rdest) is in the 'ftp6data_$i' list (--update) + # - and the destination ip-address was seen within the last 1800 seconds (--seconds 1800). + # - + # - - If matched, the "last seen" timestamp of the destination address will be updated (--update). + # - + # - - Entries in the ftp6data list not seen in the last 1800 will be removed (--reap). + # - + $ip6t -A OUTPUT -o $_dev -p tcp -m state --state NEW --dport 1024: \ + -m recent --name ftp6data_$i --rdest --update --seconds 1800 --reap -j ACCEPT + + ((i++)) + + # - Accept (helper ftp) related connections + # - + $ip6t -A OUTPUT -m conntrack --ctstate RELATED -m helper --helper ftp -o $_dev -p tcp --dport 1024: -j ACCEPT + $ip6t -A INPUT -m conntrack --ctstate RELATED -m helper --helper ftp -i $_dev -p tcp --dport 1024: -j ACCEPT + + if $kernel_forward_between_interfaces && ! $permit_local_net_to_inet ; then + + # ===== + # - + # - ip_conntrack_ftp cannot see the TLS-encrypted traffic + # - ====================================================== + # - + # - Workaround: + # - (1) add (!) desitnatin ip to a 'recent list' named 'ftp6data_$i! if ftp control connections appear + # - (2) accept packets of the formaly created recent list 'ftp6data_$i! + # - + # - Note: + # - Use flag '--rdest' to match destination address + # - + # ===== + + # - (1) + # - + # - Open FTP connection and add the destination ip (--rdest) to ftp6data recent list 'ftp6data_$i'. + # - + $ip6t -A FORWARD -o $_dev -p tcp --dport 21 -m state --state NEW \ + -m recent --name ftp6data_$i --rdest --set -j ACCEPT + + # - (2) + # - - Accept packets if the destination ip-address (--rdest) is in the 'ftp6data_$i' list (--update) + # - and the destination ip-address was seen within the last 1800 seconds (--seconds 1800). + # - + # - - If matched, the "last seen" timestamp of the destination address will be updated (--update). + # - + # - - Entries in the ftp6data list not seen in the last 1800 will be removed (--reap). + # - + $ip6t -A FORWARD -o $_dev -p tcp -m state --state NEW --dport 1024: \ + -m recent --name ftp6data_$i --rdest --update --seconds 1800 --reap -j ACCEPT + + ((i++)) + + + # - Accept (helper ftp) related connections + # - + $ip6t -A FORWARD -m conntrack --ctstate RELATED -m helper --helper ftp -o $_dev -p tcp --dport 1024: -j ACCEPT + $ip6t -A FORWARD -m conntrack --ctstate RELATED -m helper --helper ftp -i $_dev -p tcp --dport 1024: -j ACCEPT + + fi + + done + + echo_done +else + echo_skipped +fi + +#if $allow_ftp_request_out ; then +# for _dev in ${ext_if_arr[@]} ; do +# $ip6t -A OUTPUT -o $_dev -p tcp --dport 21 -m conntrack --ctstate NEW -j ACCEPT +# $ip6t -A OUTPUT -o $_dev -p tcp --sport $unprivports --dport $unprivports -m conntrack --ctstate NEW -j ACCEPT +# # - Allow active FTP connections from local network +# # - +# #$ip6t -A INPUT -i $_dev -p tcp --sport 20 -m conntrack --ctstate NEW -j ACCEPT +# if $kernel_forward_between_interfaces && ! $permit_local_net_to_inet ; then +# $ip6t -A FORWARD -o $_dev -p tcp --dport 21 -m conntrack --ctstate NEW -j ACCEPT +# $ip6t -A FORWARD -o $_dev -p tcp --sport $unprivports --dport $unprivports -m conntrack --ctstate NEW -j ACCEPT +# fi +# # - Allow active FTP connections from local network +# # - +# $ip6t -A FORWARD -i $_dev -p tcp --sport 20 -m conntrack --ctstate NEW -j ACCEPT +# done +# +# echo_done +#else +# echo_done +#fi + + +# --- +# - FTP Service Gateway +# --- + +echononl "\t\tFTP Service Gateway" + +if $local_ftp_service ; then + + # ===== + # - + # - ip_conntrack_ftp cannot see the TLS-encrypted traffic + # - ====================================================== + # - + # - Workaround: + # - (1) add source ip to a 'recent list' named 'ftp6service! if ftp control connections appear + # - (2) accept packets of the formaly created recent list 'ftp6service! + # - + # ===== + + # - (Re)define helper + # - + # - !! Note: !! + # - for both, local FTP server (ftp_server_ip_arr) + # - and forward to (extern) FTP server (forward_ftp_server_ip_arr) + # - + if ! $ftp_helper_prerouting_defined ; then + $ip6t -A PREROUTING -t raw -p tcp --dport 21 -j CT --helper ftp + ftp_helper_prerouting_defined=true + fi + + # - (1) + # - + # - Accept initial FTP connection and add the source ip to ftpdata recent list 'ftp6service'. + # - + $ip6t -A INPUT -p tcp -m state --state NEW --dport 21 -m recent --name ftp6service --set -j ACCEPT + + # - (2) + # - - Accept packets if the source ip-address is in the 'ftp6service' list (--update) and the + # - source ip-address was seen within the last 1800 seconds (--seconds 1800). + # - + # - - If matched, the "last seen" timestamp of the source address will be updated (--update). + # - + # - - Entries in the ftpdata list not seen in the last 1800 will be removed (--reap). + # - + $ip6t -A INPUT -p tcp -m state --state NEW --sport 1024: --dport $ftp_passive_port_range \ + -m recent --name ftp6service --update --seconds 1800 --reap -j ACCEPT + + # - Accept (helper ftp) related connections + # - + $ip6t -A INPUT -m conntrack --ctstate RELATED -m helper --helper ftp -p tcp --dport 1024: -j ACCEPT + + echo_done +else + echo_skipped +fi + + +# --- +# - FTP Services only local Network +# --- + +echononl "\t\tFTP Service local Networks" + +if [[ ${#ftp_server_only_local_ip_arr[@]} -gt 0 ]] && $kernel_forward_between_interfaces ; then + + # - Used for different ftpdata recent lists 'ftp6data_local_$k' + # - + declare -i k=1 + + # - (Re)define helper + # - + if ! $ftp_helper_output_defined ; then + $ip6t -A OUTPUT -t raw -p tcp --dport 21 -j CT --helper ftp + ftp_helper_output_defined=true + fi + if $kernel_forward_between_interfaces && ! $permit_between_local_networks && ! $ftp_helper_prerouting_defined ; then + $ip6t -A PREROUTING -t raw -p tcp --dport 21 -j CT --helper ftp + ftp_helper_prerouting_defined=true + fi + + for _ip in ${ftp_server_only_local_ip_arr[@]} ; do + + # - (1) + # - + # - Open FTP connection and add the destination ip (--rdest) to ftpdata recent list 'ftpdata_$i'. + # - + $ip6t -A OUTPUT -p tcp -d $_ip --dport 21 --sport 1024: -m state --state NEW \ + -m recent --name ftp6data_local_$k --rdest --set -j ACCEPT + + $ip6t -A FORWARD -d $_ip -p tcp --dport 21 -m state --state NEW \ + -m recent --name ftp6data_local_$k --rdest --set -j ACCEPT + + # - (2) + # - - Accept packets if the destination ip-address (--rdest) is in the 'ftpdata_$i' list (--update) + # - and the destination ip-address was seen within the last 1800 seconds (--seconds 1800). + # - + # - - If matched, the "last seen" timestamp of the destination address will be updated (--update). + # - + # - - Entries in the ftpdata list not seen in the last 1800 will be removed (--reap). + # - + $ip6t -A OUTPUT -d $_ip -p tcp -m state --state NEW --dport 1024: \ + -m recent --name ftp6data_local_$k --rdest --update --seconds 1800 --reap -j ACCEPT + + if $kernel_forward_between_interfaces && ! $permit_between_local_networks ; then + $ip6t -A FORWARD -d $_ip -p tcp -m state --state NEW --dport 1024: \ + -m recent --name ftp6data_local_$k --rdest --update --seconds 1800 --reap -j ACCEPT + fi + + ((k++)) + + # - Accept (helper ftp) related connections + # - + $ip6t -A OUTPUT -m conntrack --ctstate RELATED -m helper --helper ftp -o $_dev -p tcp --dport 1024: -j ACCEPT + $ip6t -A INPUT -m conntrack --ctstate RELATED -m helper --helper ftp -i $_dev -p tcp --dport 1024: -j ACCEPT + + if $kernel_forward_between_interfaces && ! $permit_between_local_networks ; then + $ip6t -A FORWARD -m conntrack --ctstate RELATED -m helper --helper ftp -p tcp -d $_ip --dport 1024: -j ACCEPT + $ip6t -A FORWARD -m conntrack --ctstate RELATED -m helper --helper ftp -p tcp -s $_ip --dport 1024: -j ACCEPT + fi + + done + + echo_done +else + echo_skipped +fi + +#echononl "\t\tFTP Service local Networks" +#if [[ ${#ftp_server_only_local_ip_arr[@]} -gt 0 ]] && $kernel_forward_between_interfaces ; then +# for _ip in ${ftp_server_only_local_ip_arr[@]} ; do +# $ip6t -A OUTPUT -p tcp -d $_ip --dport 21 --sport $unprivports -m conntrack --ctstate NEW -j ACCEPT +# +# if ! $permit_between_local_networks ; then +# $ip6t -A FORWARD -p tcp -d $_ip --dport 21 --sport $unprivports -m conntrack --ctstate NEW -j ACCEPT +# fi +# +# if $local_alias_interfaces ; then +# # - Control Port +# $ip6t -A FORWARD -p tcp -d $_ip --dport 21 --tcp-flag ACK ACK -j ACCEPT +# $ip6t -A FORWARD -p tcp -s $_ip --sport 21 --tcp-flag ACK ACK -j ACCEPT +# # - Data Port activ +# $ip6t -A FORWARD -p tcp -d $_ip --dport 20 --tcp-flag ACK ACK -j ACCEPT +# $ip6t -A FORWARD -p tcp -s $_ip --sport 20 --tcp-flag ACK ACK -j ACCEPT +# # - Data Port passiv +# $ip6t -A FORWARD -p tcp -d $_ip --sport $unprivports --dport $unprivports --tcp-flag ACK ACK -j ACCEPT +# fi +# done +# +# echo_done +#else +# echo_skipped +#fi + + +# --- +# - FTP Services DMZ +# --- + +echononl "\t\tFTP Service DMZ" +unset no_if_for_ip_arr +declare -a no_if_for_ip_arr + +if [[ ${#ftp_server_dmz_arr[@]} -gt 0 ]] && [[ -n $ftp_passive_port_range ]]; then + IFS=':' read -a ftp_passive_port_arr <<< "${ftp_passive_port_range}" + for _ip in "${!ftp_server_dmz_arr[@]}"; do + + # - Skip if no interface is given + # - + if [[ -z "${ftp_server_dmz_arr[$_ip]}" ]] ; then + no_if_for_ip_arr+=("$_ip") + continue + fi + + $ip6t -A OUTPUT -p tcp -d $_ip --dport 21 -m conntrack --ctstate NEW -j ACCEPT + + # - From extern + if $kernel_forward_between_interfaces ; then + $ip6t -A FORWARD -i ${ftp_server_dmz_arr[$_ip]} -p tcp -d $_ip --dport 21 -m conntrack --ctstate NEW -j ACCEPT + fi + + # - From intern + if $kernel_forward_between_interfaces && ! $permit_between_local_networks ; then + for _dev in ${local_if_arr[@]} ; do + $ip6t -A FORWARD -i $_dev -p tcp -d $_ip --dport 21 -m conntrack --ctstate NEW -j ACCEPT + done + fi + + # - Rule is needed if (local) interface aliases in use (like eth0:1) + # - + if $kernel_forward_between_interfaces && $local_alias_interfaces ; then + + # - Control Port + $ip6t -A FORWARD -p tcp -d $_ip --dport 21 --tcp-flag ACK ACK -j ACCEPT + $ip6t -A FORWARD -p tcp -s $_ip --sport 21 --tcp-flag ACK ACK -j ACCEPT + # - Data Port activ + $ip6t -A FORWARD -p tcp -d $_ip --dport 20 --tcp-flag ACK ACK -j ACCEPT + $ip6t -A FORWARD -p tcp -s $_ip --sport 20 --tcp-flag ACK ACK -j ACCEPT + # - Data Port passiv + $ip6t -A FORWARD -p tcp -d $_ip --sport $unprivports --dport $ftp_passive_port_range --tcp-flag ACK ACK -j ACCEPT + + fi + done + + if [[ ${#no_if_for_ip_arr[@]} -gt 0 ]] ; then + echo_warning + for _ip in ${no_if_for_ip_arr[@]} ; do + warn "No Interface given for ip '$_ip'" + done + else + echo_done + fi + +else + echo_skipped +fi + + +# --- +# - TFTF Service out only +# --- + +echononl "\t\tTFTF Service out only" + +if $allow_tftp_request_out ; then + for _dev in ${ext_if_arr[@]} ; do + $ip6t -A OUTPUT -o $_dev -p udp --dport $standard_tftp_udp_port -m conntrack --ctstate NEW -j ACCEPT + done + + if $kernel_forward_between_interfaces && ! $permit_local_net_to_inet ; then + $ip6t -A FORWARD -o $_dev -p udp --dport $standard_tftp_udp_port -m conntrack --ctstate NEW -j ACCEPT + fi + echo_done +else + echo_skipped +fi + + +# --- +# - TFTP Service Gateway +# --- + +echononl "\t\tTFTF Service Gateway" + +if $local_tftp_service ; then + $ip6t -A INPUT -p udp --dport $tftp_udp_port -m conntrack --ctstate NEW -j ACCEPT + echo_done +else + echo_skipped +fi + + +# --- +# - Samba Service only out +# --- + +echononl "\t\tSamba Service only out" + +if $allow_samba_requests_out && ! $permit_local_net_to_inet ; then + for _dev in ${ext_if_arr[@]} ; do + + for _port in ${samba_udp_ports[@]} ; do + $ip6t -A OUTPUT -o $_dev -p udp --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + for _port in ${samba_tcp_ports[@]} ; do + $ip6t -A OUTPUT -o $_dev -p tcp --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + + if $kernel_forward_between_interfaces ; then + + for _port in ${samba_udp_ports[@]} ; do + $ip6t -A FORWARD -o $_dev -p udp --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + for _port in ${samba_tcp_ports[@]} ; do + $ip6t -A FORWARD -o $_dev -p tcp --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + fi + done + + echo_done +else + echo_skipped +fi + + + +# --- +# - Samba Service Gateway (only for local Networks) +# --- + +echononl "\t\tSamba Service Gateway (only for local Networks)" + +if $local_samba_service ; then + for _dev in ${local_if_arr[@]} ; do + for _port in ${samba_udp_port_arr[@]} ; do + $ip6t -A INPUT -i $_dev -p udp --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + for _port in ${samba_tcp_port_arr[@]} ; do + $ip6t -A INPUT -i $_dev -p tcp --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + done + + echo_done +else + echo_skipped +fi + + +# --- +# - Samba Service only between local Networks +# --- + +echononl "\t\tSamba Service only local Networks" + +if [[ ${#samba_server_local_ip_arr[@]} -gt 0 ]] ; then + for _dev in ${local_if_arr[@]} ; do + for _ip in ${samba_server_local_ip_arr[@]} ; do + for _port in ${samba_udp_port_arr[@]} ; do + $ip6t -A OUTPUT -o $_dev -p udp -d $_ip --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + for _port in ${samba_tcp_port_arr[@]} ; do + $ip6t -A OUTPUT -o $_dev -p tcp -d $_ip --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + if $kernel_forward_between_interfaces && $allow_samba_between_local_nets && ! $permit_between_local_networks ; then + for _port in ${samba_udp_port_arr[@]} ; do + $ip6t -A FORWARD -i $_dev -p udp -d $_ip --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + for _port in ${samba_tcp_port_arr[@]} ; do + $ip6t -A FORWARD -i $_dev -p tcp -d $_ip --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + + # - Rule is needed if (local) interface aliases in use (like eth0:1) + # - + if $local_alias_interfaces ; then + for _port in ${samba_tcp_port_arr[@]} ; do + $ip6t -A FORWARD -p tcp -d $_ip --dport $_port --tcp-flag ACK ACK -j ACCEPT + $ip6t -A FORWARD -p tcp -s $_ip --sport $_port --tcp-flag ACK ACK -j ACCEPT + done + fi + fi + done + done + echo_done +else + echo_skipped +fi + + +# --- +# - Samba Service DMZ +# --- + +echononl "\t\tSamba Service DMZ" +unset no_if_for_ip_arr +declare -a no_if_for_ip_arr + +if [[ ${#samba_server_dmz_arr[@]} -gt 0 ]] ; then + for _ip in "${!samba_server_dmz_arr[@]}"; do + + # - Skip if no interface is given + # - + if [[ -z "${samba_server_dmz_arr[$_ip]}" ]] ; then + no_if_for_ip_arr+=("$_ip") + continue + fi + + # - From extern + if $kernel_forward_between_interfaces ; then + for _port in ${samba_udp_port_arr[@]} ; do + $ip6t -A FORWARD -i ${samba_server_dmz_arr[$_ip]} -p udp -d $_ip --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + for _port in ${samba_tcp_port_arr[@]} ; do + $ip6t -A FORWARD -i ${samba_server_dmz_arr[$_ip]} -p tcp -d $_ip --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + fi + + # - From intern + for _dev in ${local_if_arr[@]} ; do + for _port in ${samba_udp_port_arr[@]} ; do + $ip6t -A OUTPUT -p udp -d $_ip --dport $_port -m conntrack --ctstate NEW -j ACCEPT + if $kernel_forward_between_interfaces && ! $permit_between_local_networks ; then + $ip6t -A FORWARD -i $_dev -p udp -d $_ip --dport $_port -m conntrack --ctstate NEW -j ACCEPT + fi + done + for _port in ${samba_tcp_port_arr[@]} ; do + $ip6t -A OUTPUT -p tcp -d $_ip --dport $_port -m conntrack --ctstate NEW -j ACCEPT + if $kernel_forward_between_interfaces && ! $permit_between_local_networks ; then + $ip6t -A FORWARD -i $_dev -p tcp -d $_ip --dport $_port -m conntrack --ctstate NEW -j ACCEPT + fi + done + + # - Rule is needed if (local) interface aliases in use (like eth0:1) + # - + if $kernel_forward_between_interfaces && $local_alias_interfaces ; then + for _port in ${samba_tcp_port_arr[@]} ; do + $ip6t -A FORWARD -p tcp -d $_ip --dport $_port --tcp-flag ACK ACK -j ACCEPT + $ip6t -A FORWARD -p tcp -s $_ip --sport $_port --tcp-flag ACK ACK -j ACCEPT + done + fi + done + + done + + if [[ ${#no_if_for_ip_arr[@]} -gt 0 ]] ; then + echo_warning + for _ip in ${no_if_for_ip_arr[@]} ; do + warn "No Interface given for ip '$_ip'" + done + else + echo_done + fi + +else + echo_skipped +fi + + +# --- +# - LDAP and LDAP SSL Service Gateway (only for local Networks) +# --- + +echononl "\t\tLDAP(S) Service Gateway (only for local Networks)" + +if $local_ldap_service ; then + for _dev in ${local_if_arr[@]} ; do + for _port in ${ldap_udp_port_arr[@]} ; do + $ip6t -A INPUT -i $_dev -p udp --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + for _port in ${ldap_tcp_port_arr[@]} ; do + $ip6t -A INPUT -i $_dev -p tcp --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + done + + echo_done +else + echo_skipped +fi + + +# --- +# - LDAP and LDAP SSL Service only between local Networks +# --- + +echononl "\t\tLDAP(S) Service only local Networks" + +if [[ ${#ldap_server_local_ip_arr[@]} -gt 0 ]] ; then + for _dev in ${local_if_arr[@]} ; do + for _ip in ${ldap_server_local_ip_arr[@]} ; do + for _port in ${ldap_udp_port_arr[@]} ; do + $ip6t -A OUTPUT -o $_dev -p udp -d $_ip --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + for _port in ${ldap_tcp_port_arr[@]} ; do + $ip6t -A OUTPUT -o $_dev -p tcp -d $_ip --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + if $kernel_forward_between_interfaces && $allow_ldap_between_local_nets && ! $permit_between_local_networks ; then + for _port in ${ldap_udp_port_arr[@]} ; do + $ip6t -A FORWARD -i $_dev -p udp -d $_ip --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + for _port in ${ldap_tcp_port_arr[@]} ; do + $ip6t -A FORWARD -i $_dev -p tcp -d $_ip --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + + # - Rule is needed if (local) interface aliases in use (like eth0:1) + # - + if $local_alias_interfaces ; then + for _port in ${ldap_tcp_port_arr[@]} ; do + $ip6t -A FORWARD -p tcp -d $_ip --dport $_port --tcp-flag ACK ACK -j ACCEPT + $ip6t -A FORWARD -p tcp -s $_ip --sport $_port --tcp-flag ACK ACK -j ACCEPT + done + fi + fi + done + done + echo_done +else + echo_skipped +fi + + +# --- +# - NTP out only +# --- + +echononl "\t\tNTP Service out only" + +if $allow_ntp_request_out ; then + for _dev in ${ext_if_arr[@]} ; do + $ip6t -A OUTPUT -o $_dev -p udp --dport $standard_ntp_port -m conntrack --ctstate NEW -j ACCEPT + if $kernel_forward_between_interfaces && ! $permit_local_net_to_inet ; then + $ip6t -A FORWARD -o $_dev -p udp --dport $standard_ntp_port -m conntrack --ctstate NEW -j ACCEPT + fi + done + + echo_done +else + echo_skipped +fi + + +# --- +# - NTP Service Gateway +# --- + +echononl "\t\tNTP Service Gateway" +if $local_ntp_service ; then + if ! $allow_ntp_request_out ; then + $ip6t -A OUTPUT -o $_dev -p udp --dport $standard_ntp_port -m conntrack --ctstate NEW -j ACCEPT + fi + $ip6t -A INPUT -p udp --dport $standard_ntp_port -m conntrack --ctstate NEW -j ACCEPT + echo_done +else + echo_skipped +fi + + +# --- +# - Timeserver (Port 37 NOT NTP!)" +# --- + +echononl "\t\tTimeserver (Port 37 NOT NTP!) out only" + +if $allow_timeserver_request_out ; then + for _dev in ${ext_if_arr[@]} ; do + $ip6t -A OUTPUT -o $_dev -p tcp --dport $standard_timeserver_port -m conntrack --ctstate NEW -j ACCEPT + if $kernel_forward_between_interfaces && ! $permit_local_net_to_inet ; then + $ip6t -A FORWARD -o $_dev -p tcp --dport $standard_timeserver_port -m conntrack --ctstate NEW -j ACCEPT + fi + done + + echo_done +else + echo_skipped +fi + + +# --- +# - PGP Keyserver out only +# --- + +echononl "\t\tPGP Keyserver out only" + +if $allow_pgpserver_request_out ; then + for _dev in ${ext_if_arr[@]} ; do + $ip6t -A OUTPUT -o $_dev -p tcp --dport $standard_pgp_keyserver_port -m conntrack --ctstate NEW -j ACCEPT + if $kernel_forward_between_interfaces && ! $permit_local_net_to_inet ; then + $ip6t -A FORWARD -o $_dev -p tcp --dport $standard_pgp_keyserver_port -m conntrack --ctstate NEW -j ACCEPT + fi + done + + echo_done +else + echo_skipped +fi + + +# --- +# - Telnet +# --- + +echononl "\t\tTelnet (only OUT)" + +if $allow_telnet_request_out ; then + for _dev in ${ext_if_arr[@]} ; do + $ip6t -A OUTPUT -o $_dev -p tcp --dport $standard_telnet_port -m conntrack --ctstate NEW -j ACCEPT + if $kernel_forward_between_interfaces && ! $permit_local_net_to_inet ; then + $ip6t -A FORWARD -o $_dev -p tcp --dport $standard_telnet_port -m conntrack --ctstate NEW -j ACCEPT + fi + done + + echo_done +else + echo_skipped +fi + + +# --- +# - Whois out only +# --- + +echononl "\t\tWhois out only" + +if $allow_whois_request_out ; then + for _dev in ${ext_if_arr[@]} ; do + $ip6t -A OUTPUT -o $_dev -p tcp --dport $standard_whois_port -m conntrack --ctstate NEW -j ACCEPT + if $kernel_forward_between_interfaces && ! $permit_local_net_to_inet ; then + $ip6t -A FORWARD -o $_dev -p tcp --dport $standard_whois_port -m conntrack --ctstate NEW -j ACCEPT + fi + done + + echo_done +else + echo_skipped +fi + + +# --- +# - CPAN Wait only out +# --- + +# - CPAN::WAIT adds some comands to the CPAN shell() to perform searches on +# - a WAIT server. It connects to a WAIT server using a simple protocoll +# - resembling NNTP as described in RFC977. + +echononl "\t\tCPAN Wait only out" + +if $allow_cpan_wait_request_out ; then + for _dev in ${ext_if_arr[@]} ; do + $ip6t -A OUTPUT -o $_dev -p tcp --dport $standard_cpan_wait_port -m conntrack --ctstate NEW -j ACCEPT + if $kernel_forward_between_interfaces && ! $permit_local_net_to_inet ; then + $ip6t -A FORWARD -o $_dev -p tcp --dport $standard_cpan_wait_port -m conntrack --ctstate NEW -j ACCEPT + fi + done + + echo_done +else + echo_skipped +fi + + +# --- +# - HBCI only out (only forward) +# --- + +echononl "\t\tHBCI only out (only forward)" + +if $allow_hbci_request_out ; then + for _dev in ${ext_if_arr[@]} ; do + if $kernel_forward_between_interfaces && ! $permit_local_net_to_inet ; then + $ip6t -A FORWARD -o $_dev -p tcp --dport $standard_hbci_port -m conntrack --ctstate NEW -j ACCEPT + fi + done + + echo_done +else + echo_skipped +fi + + +# --- +# - Jabber only out +# --- + +echononl "\t\tJabber only out" + +if $allow_jabber_request_out ; then + for _dev in ${ext_if_arr[@]} ; do + $ip6t -A OUTPUT -o $_dev -p tcp --dport $standard_jabber_port -m conntrack --ctstate NEW -j ACCEPT + $ip6t -A OUTPUT -o $_dev -p udp --dport $standard_jabber_port -m conntrack --ctstate NEW -j ACCEPT + if $kernel_forward_between_interfaces && ! $permit_local_net_to_inet ; then + $ip6t -A FORWARD -o $_dev -p tcp --dport $standard_jabber_port -m conntrack --ctstate NEW -j ACCEPT + $ip6t -A FORWARD -o $_dev -p udp --dport $standard_jabber_port -m conntrack --ctstate NEW -j ACCEPT + fi + done + + echo_done +else + echo_skipped +fi + + +# --- +# - Silc only out +# --- + +echononl "\t\tSilc only out" + +if $allow_silc_request_out ; then + for _dev in ${ext_if_arr[@]} ; do + $ip6t -A OUTPUT -p tcp -o $_dev --dport $standard_silc_port -m conntrack --ctstate NEW -j ACCEPT + if $kernel_forward_between_interfaces && ! $permit_local_net_to_inet ; then + $ip6t -A FORWARD -o $_dev -p tcp --dport $standard_silc_port -m conntrack --ctstate NEW -j ACCEPT + fi + done + + echo_done +else + echo_skipped +fi + + +# --- +# - IRC (Internet Relay Chat) only out +# --- + +echononl "\t\tIRC only out" + +if $allow_irc_request_out ; then + for _dev in ${ext_if_arr[@]} ; do + $ip6t -A OUTPUT -p tcp -o $_dev --dport $standard_irc_port -m conntrack --ctstate NEW -j ACCEPT + if $kernel_forward_between_interfaces && ! $permit_local_net_to_inet ; then + $ip6t -A FORWARD -o $_dev -p tcp --dport $standard_irc_port -m conntrack --ctstate NEW -j ACCEPT + fi + done + + echo_done +else + echo_skipped +fi + + +# --- +# - MySQL +# --- + +echononl "\t\tMySQL (only OUT)" + +if $allow_mysql_request_out ; then + for _dev in ${ext_if_arr[@]} ; do + $ip6t -A OUTPUT -o $_dev -p tcp --dport $standard_mysql_port -m conntrack --ctstate NEW -j ACCEPT + if $kernel_forward_between_interfaces ; then + $ip6t -A FORWARD -o $_dev -p tcp --dport $standard_mysql_port -m conntrack --ctstate NEW -j ACCEPT + fi + done + + echo_done +else + echo_skipped +fi + + +# --- +# - CUPS only between local Networks (IPP Port 631) +# --- + +echononl "\t\tCUPS/IPP (Port 631) only between local Networks" + +if $kernel_forward_between_interfaces && ! $permit_between_local_networks && $allow_printing_between_local_nets ; then + for _local_dev_1 in ${local_if_arr[@]} ; do + for _local_dev_2 in ${local_if_arr[@]} ; do + if ! $local_alias_interfaces ; then + [[ "$_local_dev_1" = "$_local_dev_2" ]] && continue + fi + $ip6t -A FORWARD -i $_local_dev_1 -o $_local_dev_2 -p tcp --dport $standard_cups_port -m conntrack --ctstate NEW -j ACCEPT + done + + if $local_alias_interfaces ; then + $ip6t -A FORWARD -o $_local_dev_1 -p tcp --dport $standard_cups_port --tcp-flag ACK ACK -j ACCEPT + $ip6t -A FORWARD -o $_local_dev_1 -p tcp --sport $standard_cups_port --tcp-flag ACK ACK -j ACCEPT + fi + + done + echo_done +else + echo_skipped +fi + + +# --- +# - Druck Port 9100 (RAW) only out between local Networks +# --- + +echononl "\t\tDruck Port 9100 only between local Networks" + +if $kernel_forward_between_interfaces && ! $permit_between_local_networks && $allow_printing_between_local_nets ; then + for _local_dev_1 in ${local_if_arr[@]} ; do + for _local_dev_2 in ${local_if_arr[@]} ; do + if ! $local_alias_interfaces ; then + [[ "$_local_dev_1" = "$_local_dev_2" ]] && continue + fi + $ip6t -A FORWARD -i $_local_dev_1 -o $_local_dev_2 -p tcp --dport $standard_print_port -m conntrack --ctstate NEW -j ACCEPT + done + + if $local_alias_interfaces ; then + $ip6t -A FORWARD -o $_local_dev_1 -p tcp --dport $standard_print_port --tcp-flag ACK ACK -j ACCEPT + $ip6t -A FORWARD -o $_local_dev_1 -p tcp --sport $standard_print_port --tcp-flag ACK ACK -j ACCEPT + fi + + done + echo_done +else + echo_skipped +fi + + +# --- +# - Druck LPD (Port 515) only out between local Networks +# --- + +echononl "\t\tDruck LPD (Port 515) only between local Networks" + +if $kernel_forward_between_interfaces && ! $permit_between_local_networks && $allow_printing_between_local_nets ; then + for _local_dev_1 in ${local_if_arr[@]} ; do + for _local_dev_2 in ${local_if_arr[@]} ; do + if ! $local_alias_interfaces ; then + [[ "$_local_dev_1" = "$_local_dev_2" ]] && continue + fi + $ip6t -A FORWARD -i $_local_dev_1 -o $_local_dev_2 -p tcp --dport $standard_print_raw_port -m conntrack --ctstate NEW -j ACCEPT + done + + if $local_alias_interfaces ; then + $ip6t -A FORWARD -o $_local_dev_1 -p tcp --dport $standard_print_raw_port --tcp-flag ACK ACK -j ACCEPT + $ip6t -A FORWARD -o $_local_dev_1 -p tcp --sport $standard_print_raw_port --tcp-flag ACK ACK -j ACCEPT + fi + + done + echo_done +else + echo_skipped +fi + + +# --- +# - Printer +# --- + +echononl "\t\tKnown Printers (Ports: 515/631/9100) only local Networks" +if [[ ${#printer_ip_arr[@]} -gt 0 ]] \ + && $kernel_forward_between_interfaces \ + && ! $permit_between_local_networks \ + && ! $allow_printing_between_local_nets ; then + for _ip in ${printer_ip_arr[@]} ; do + for _dev in ${local_if_arr[@]} ; do + $ip6t -A FORWARD -i $_dev -p tcp -d $_ip --dport $standard_print_port -m conntrack --ctstate NEW -j ACCEPT + $ip6t -A FORWARD -i $_dev -p tcp -d $_ip --dport $standard_ipp_port -m conntrack --ctstate NEW -j ACCEPT + $ip6t -A FORWARD -i $_dev -p tcp -d $_ip --dport $standard_print_raw_port -m conntrack --ctstate NEW -j ACCEPT + + # - Note: + # - If (local) alias interfaces like eth1:0 in use, youe need a further + # - special rule. + # - + if $local_alias_interfaces ; then + $ip6t -A FORWARD -o $_dev -p tcp -d $_ip --dport $standard_print_port --tcp-flag ACK ACK -j ACCEPT + $ip6t -A FORWARD -o $_dev -p tcp -s $_ip --sport $standard_print_port --tcp-flag ACK ACK -j ACCEPT + + $ip6t -A FORWARD -o $_dev -p tcp -d $_ip --dport $standard_ipp_port --tcp-flag ACK ACK -j ACCEPT + $ip6t -A FORWARD -o $_dev -p tcp -s $_ip --sport $standard_ipp_port --tcp-flag ACK ACK -j ACCEPT + + $ip6t -A FORWARD -o $_dev -p tcp -d $_ip --dport $standard_print_raw_port --tcp-flag ACK ACK -j ACCEPT + $ip6t -A FORWARD -o $_dev -p tcp -s $_ip --sport $standard_print_raw_port --tcp-flag ACK ACK -j ACCEPT + fi + done + done + echo_done +else + echo_skipped +fi + + +# --- +# - Scanner +# --- + +echononl "\t\tBrother Scanner (Port $brscan_port) only between local Networks" + +if [[ ${#brother_scanner_ip_arr[@]} -gt 0 ]] \ + && $kernel_forward_between_interfaces \ + && ! $permit_between_local_networks \ + && $allow_scanning_between_local_nets ; then + for _ip in ${brother_scanner_ip_arr[@]} ; do + for _dev in ${local_if_arr[@]} ; do + # - UDP + $ip6t -A FORWARD -i $_dev -p udp -d $_ip --dport $brscan_port -m conntrack --ctstate NEW -j ACCEPT + # - TCP + $ip6t -A FORWARD -i $_dev -p tcp -d $_ip --dport $brscan_port -m conntrack --ctstate NEW -j ACCEPT + + # - Note: + # - If (local) alias interfaces like eth1:0 in use, youe need a further + # - special rule. + # - + if $local_alias_interfaces ; then + $ip6t -A FORWARD -o $_dev -p tcp -d $_ip --dport $brscan_port --tcp-flag ACK ACK -j ACCEPT + $ip6t -A FORWARD -o $_dev -p tcp -s $_ip --sport $brscan_port --tcp-flag ACK ACK -j ACCEPT + fi + done + done + + echo_done +else + echo_skipped +fi + + + + +# --- +# - Special TCP Ports OUT +# --- + +echononl "\t\tSpecial TCP Ports OUT" + +if [[ ${#tcp_out_port_arr[@]} -gt 0 ]] ; then + + for _dev in ${ext_if_arr[@]} ; do + for _port in ${tcp_out_port_arr[@]} ; do + $ip6t -A OUTPUT -o $_dev -p tcp --dport $_port -m state --state NEW -j ACCEPT + if $kernel_forward_between_interfaces ; then + $ip6t -A FORWARD -o $_dev -p tcp --dport $_port -m state --state NEW -j ACCEPT + fi + done + done + + echo_done +else + echo_skipped +fi + + +# --- +# - Special UDP Ports OUT +# --- + +echononl "\t\tSpecial UDP Ports OUT" + +if [[ ${#udp_out_port_arr[@]} -gt 0 ]] ; then + + for _dev in ${ext_if_arr[@]} ; do + for _port in ${udp_out_port_arr[@]} ; do + $ip6t -A OUTPUT -o $_dev -p udp --dport $_port -m state --state NEW -j ACCEPT + if $kernel_forward_between_interfaces ; then + $ip6t -A FORWARD -o $_dev -p udp --dport $_port -m state --state NEW -j ACCEPT + fi + done + done + + echo_done +else + echo_skipped +fi + + +# --- +# - Other local Services +# --- + +echononl "\t\tOther local Services" + +if [[ ${#other_service_arr[@]} -gt 0 ]] && $kernel_forward_between_interfaces ; then + for _val in ${other_service_arr[@]} ; do + IFS=',' read -a _val_arr <<< "${_val}" + for _dev in ${local_if_arr[@]} ; do + $ip6t -A FORWARD -i $_dev -p ${_val_arr[2]} -d ${_val_arr[0]} --dport ${_val_arr[1]} -m conntrack --ctstate NEW -j ACCEPT + + # - Note: + # - If (local) alias interfaces like eth1:0 in use, youe need a further + # - special rule. + # - + if $local_alias_interfaces && [[ "${_val_arr[2]}" = "tcp" ]] ; then + $ip6t -A FORWARD -i $_dev -p tcp -d ${_val_arr[0]} --dport ${_val_arr[1]} --tcp-flag ACK ACK -j ACCEPT + $ip6t -A FORWARD -o $_dev -p tcp -s ${_val_arr[0]} --sport ${_val_arr[1]} --tcp-flag ACK ACK -j ACCEPT + fi + done + done + echo_ok +else + echo_skipped +fi + + +# --- +# - Rsync only Out Gateway +# --- + +echononl "\t\tRsync (only OUT) Gateway" + +if $local_rsync_out ; then + for _dev in ${ext_if_arr[@]} ; do + for _port in ${rsync_port_arr[@]} ; do + $ip6t -A OUTPUT -o $_dev -p tcp --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + done + + echo_done +else + echo_skipped +fi + + +# --- +# - Rsync only Out from given local machines +# --- + +echononl "\t\tRsync Out from given local machines" + +if [[ ${#rsync_out_ip_arr[@]} -gt 0 ]] && $kernel_forward_between_interfaces $$ ! $permit_local_net_to_inet; then + for _port in ${rsync_port_arr[@]} ; do + for _ip in ${rsync_out_ip_arr[@]} ; do + $ip6t -A FORWARD -p tcp -s $_ip --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + done + echo_done +else + echo_skipped +fi + + +# --- +# - SNMP Services local Networks +# --- + +echononl "\t\tSNMP Services local Networks" + +if [[ ${#snmp_server_ip_arr[@]} -gt 0 ]] ; then + for _ip in ${snmp_server_ip_arr[@]} ; do + $ip6t -A OUTPUT -p udp -d $_ip --dport $snmp_trap_port -m conntrack --ctstate NEW -j ACCEPT + if $kernel_forward_between_interfaces && ! $permit_between_local_networks ; then + for _dev in ${local_if_arr[@]} ; do + $ip6t -A FORWARD -i $_dev -p udp -s $_ip --dport $snmp_port -m conntrack --ctstate NEW -j ACCEPT + $ip6t -A FORWARD -i $_dev -p udp -d $_ip --dport $snmp_trap_port -m conntrack --ctstate NEW -j ACCEPT + done + fi + done + echo_done +else + echo_skipped +fi + + +# --- +# - WakeOnLan only out into local Networks +# --- + +echononl "\t\tWakeOnLan only out into local Networks" +$ip6t -A OUTPUT -p udp --dport 9 -j ACCEPT +echo_done + + +# --- +# - NFS Service (portmapper, mountd, nfs) +# --- + +if $terminal; then + echononl "\t\tNFS Service\t\t\t - \033[37m\033[1mNot yet implemented\033[m -" + echo -e "\033[75G[ \033[37mskipped\033[m ]" + + echononl "\t\tVoIP\t\t\t\t - \033[37m\033[1mNot yet implemented\033[m -" + echo -e "\033[75G[ \033[37mskipped\033[m ]" + + echononl "\t\tSip\t\t\t\t - \033[37m\033[1mNot yet implemented\033[m -" + echo -e "\033[75G[ \033[37mskipped\033[m ]" + + echononl "\t\tSkype\t\t\t\t - \033[37m\033[1mNot yet implemented\033[m -" + echo -e "\033[75G[ \033[37mskipped\033[m ]" +else + echo "NFS Service - Not yet implemented" + echo "VoIP - Not yet implemented" + echo "Sip - Not yet implemented" + echo "Skype - Not yet implemented" +fi + + +# --- +# - PowerChute Network Shutdown local Network +# --- + +echononl "\t\tPowerChute Network Shutdown local Network" + +if [[ ${#pcns_server_ip_arr[@]} -gt 0 ]] && [[ -n "$usv_ip" ]] ; then + + for _ip in ${pcns_server_ip_arr[@]} ; do + if containsElement "$_ip" "${gateway_ipv6_address_arr[@]}" ; then + $ip6t -A OUTPUT -p tcp -s $_ip -d $usv_ip -m multiport --dports $http_ports -m conntrack --ctstate NEW -j ACCEPT + $ip6t -A INPUT -p tcp -s $usv_ip --dport $pcns_tcp_port -m conntrack --ctstate NEW -j ACCEPT + $ip6t -A INPUT -p udp -s $usv_ip --dport $pcns_udp_port -m conntrack --ctstate NEW -j ACCEPT + $ip6t -A INPUT -p tcp --dport $pcns_web_port -m conntrack --ctstate NEW -j ACCEPT + fi + + if $kernel_forward_between_interfaces && ! $permit_between_local_networks ; then + $ip6t -A FORWARD -p tcp -s $usv_ip -d $_ip --dport $pcns_tcp_port -m conntrack --ctstate NEW -j ACCEPT + $ip6t -A FORWARD -p udp -s $usv_ip -d $_ip --dport $pcns_udp_port -m conntrack --ctstate NEW -j ACCEPT + $ip6t -A FORWARD -p tcp -d $_ip --dport $pcns_web_port -m conntrack --ctstate NEW -j ACCEPT + fi + + if $kernel_forward_between_interfaces && $local_alias_interfaces ; then + $ip6t -A FORWARD -p tcp -d $_ip --dport $pcns_tcp_port --tcp-flag ACK ACK -j ACCEPT + $ip6t -A FORWARD -p tcp -s $_ip --sport $pcns_tcp_port --tcp-flag ACK ACK -j ACCEPT + $ip6t -A FORWARD -p tcp -d $_ip --dport $pcns_web_port --tcp-flag ACK ACK -j ACCEPT + $ip6t -A FORWARD -p tcp -s $_ip --sport $pcns_web_port --tcp-flag ACK ACK -j ACCEPT + fi + done + echo_done +else + echo_skipped +fi + + +# --- +# - Ubiquiti Unifi Controller (Accesspoints) Gateway +# --- + + +echononl "\t\tUbiquiti Unifi Controller Gateway" +if $local_unifi_controller_service ; then + for _dev in ${local_if_arr[@]} ; do + $ip6t -A INPUT -p udp -i $_dev -m multiport --dports $unify_broadcast_udp_ports -m conntrack --ctstate NEW -j ACCEPT + + $ip6t -A INPUT -p tcp -i $_dev -m multiport --dports $unify_tcp_ports -m conntrack --ctstate NEW -j ACCEPT + $ip6t -A INPUT -p udp -i $_dev -m multiport --dports $unify_udp_ports -m conntrack --ctstate NEW -j ACCEPT + + done + echo_done +else + echo_skipped +fi + +echononl "\t\tUbiquiti Unifi Controller Gateway - STUN to Unifi APs" +if $local_unifi_controller_service ; then + + if [[ ${#unifi_ap_local_ip_arr[@]} -gt 0 ]] ; then + + for _ip_ap in ${unifi_ap_local_ip_arr[@]} ; do + + $ip6t -A OUTPUT -p udp -d $_ip_ap -m multiport --sports $unify_udp_ports -m conntrack --ctstate NEW -j ACCEPT + + done + + echo_done + else + echo_skipped + warn "Local Unifi Controller is defined, but no Unifi APs!" + fi +else + echo_skipped +fi + + +# --- +# - Ubiquiti Unifi Controller (Accesspoints) local Network +# --- + +echononl "\t\tUbiquiti Unifi Controller (Accesspoints) local Network" +if [[ ${#unify_controller_local_net_ip_arr[@]} -gt 0 ]] \ + && $kernel_forward_between_interfaces \ + && ! $permit_between_local_networks ; then + + for _ip_ctl in ${unify_controller_local_net_ip_arr[@]} ; do + for _dev in ${local_if_arr[@]} ; do + $ip6t -A FORWARD -i $_dev -p udp -d $_ip_ctl -m multiport --dports $unify_broadcast_udp_ports -m conntrack --ctstate NEW -j ACCEPT + + $ip6t -A FORWARD -i $_dev -p tcp -d $_ip_ctl -m multiport --dports $unify_tcp_ports -m conntrack --ctstate NEW -j ACCEPT + $ip6t -A FORWARD -i $_dev -p udp -d $_ip_ctl -m multiport --dports $unify_udp_ports -m conntrack --ctstate NEW -j ACCEPT + done + + # - Note: + # - If (local) alias interfaces like eth1:0 in use, youe need a further + # - special rule. + # - + if $local_alias_interfaces ; then + $ip6t -A FORWARD -p tcp -d $_ip_ctl -m multiport --dports $unify_tcp_ports --tcp-flag ACK ACK -j ACCEPT + $ip6t -A FORWARD -p tcp -s $_ip_ctl -m multiport --sports $unify_tcp_ports --tcp-flag ACK ACK -j ACCEPT + fi + + done + + echo_done +else + echo_skipped +fi + + +# --- +# - IPMI Tools (e.g. IPMIView) only out +# --- + +echononl "\t\tIPMI Tools (e.g. IPMIView) only out" + +if $allow_ipmi_request_out && ! $permit_local_net_to_inet ; then + for _dev in ${ext_if_arr[@]} ; do + + for _port in ${ipmi_udp_port_arr[@]} ; do + $ip6t -A OUTPUT -o $_dev -p udp --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + for _port in ${ipmi_tcp_port_arr[@]} ; do + $ip6t -A OUTPUT -o $_dev -p tcp --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + + if $kernel_forward_between_interfaces ; then + + for _port in ${ipmi_udp_port_arr[@]} ; do + $ip6t -A FORWARD -o $_dev -p udp --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + for _port in ${ipmi_tcp_port_arr[@]} ; do + $ip6t -A FORWARD -o $_dev -p tcp --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + fi + done + + echo_done +else + echo_skipped +fi + + +# --- +# - IPMI Tools (e.g. IPMIView) local Networks +# --- + +echononl "\t\tIPMI Tools (e.g. IPMIView) local Networks" + +if [[ ${#ipmi_server_ip_arr[@]} -gt 0 ]]; then + for _ip in ${ipmi_server_ip_arr[@]} ; do + + for _port in ${ipmi_udp_port_arr[@]} ; do + $ip6t -A OUTPUT -p udp -d $_ip --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + for _port in ${ipmi_tcp_port_arr[@]} ; do + $ip6t -A OUTPUT -p tcp -d $_ip --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + + if $kernel_forward_between_interfaces && ! $permit_between_local_networks ; then + for _port in ${ipmi_udp_port_arr[@]} ; do + $ip6t -A FORWARD -p udp -d $_ip --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + for _port in ${ipmi_tcp_port_arr[@]} ; do + $ip6t -A FORWARD -p tcp -d $_ip --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + + # - Rule is needed if (local) interface aliases in use (like eth0:1) + # - + if $local_alias_interfaces ; then + for _port in ${ipmi_udp_port_arr[@]} ; do + $ip6t -A FORWARD -p udp -s $_ip --sport $_port -m conntrack --ctstate NEW -j ACCEPT + done + for _port in ${ipmi_tcp_port_arr[@]} ; do + $ip6t -A FORWARD -p tcp -d $_ip --dport $_port --tcp-flag ACK ACK -j ACCEPT + $ip6t -A FORWARD -p tcp -s $_ip --sport $_port --tcp-flag ACK ACK -j ACCEPT + done + fi + fi + done + + echo_done +else + echo_skipped +fi + + +# --- +# - Remote Console (VNC) only out +# --- + +echononl "\t\tRemote Console (VNC) only out" + +if $allow_remote_console_request_out && ! $permit_local_net_to_inet ; then + for _dev in ${ext_if_arr[@]} ; do + $ip6t -A OUTPUT -o $_dev -p tcp --dport $standard_remote_console_port -m conntrack --ctstate NEW -j ACCEPT + + if $kernel_forward_between_interfaces ; then + $ip6t -A FORWARD -o $_dev -p tcp --dport $standard_remote_console_port -m conntrack --ctstate NEW -j ACCEPT + fi + done + + echo_done +else + echo_skipped +fi + + +# --- +# - Remote Console (VNC) local Networks +# --- + +echononl "\t\tRemote Console (VNC) local Networks" + + +if [[ ${#rm_server_ip_arr[@]} -gt 0 ]]; then + for _ip in ${rm_server_ip_arr[@]} ; do + + $ip6t -A OUTPUT -p tcp -d $_ip --dport $remote_console_port -m conntrack --ctstate NEW -j ACCEPT + + if $kernel_forward_between_interfaces && ! $permit_between_local_networks ; then + $ip6t -A FORWARD -p tcp -d $_ip --dport $remote_console_port -m conntrack --ctstate NEW -j ACCEPT + + # - Rule is needed if (local) interface aliases in use (like eth0:1) + # - + if $local_alias_interfaces ; then + $ip6t -A FORWARD -p tcp -d $_ip --dport $remote_console_port --tcp-flag ACK ACK -j ACCEPT + $ip6t -A FORWARD -p tcp -s $_ip --sport $remote_console_port --tcp-flag ACK ACK -j ACCEPT + fi + fi + done + + echo_done +else + echo_skipped +fi + + +# --- +# - Remote Console (VNC) DMZ +# --- + +echononl "\t\tRemote Console (VNC) DMZ" +unset no_if_for_ip_arr +declare -a no_if_for_ip_arr + +if [[ ${#rm_server_dmz_arr[@]} -gt 0 ]] ; then + for _ip in ${!rm_server_dmz_arr[@]} ; do + + # - Skip if no interface is given + # - + if [[ -z "${rm_server_dmz_arr[$_ip]}" ]] ; then + no_if_for_ip_arr+=("$_ip") + continue + fi + + # - From Gateway + $ip6t -A OUTPUT -p tcp -d $_ip --dport $remote_console_port -m conntrack --ctstate NEW -j ACCEPT + + if $kernel_forward_between_interfaces ; then + + # - From extern + $ip6t -A FORWARD -i ${rm_server_dmz_arr[$_ip]} -p tcp -d $_ip --dport $remote_console_port -m conntrack --ctstate NEW -j ACCEPT + + # - From intern + if ! $permit_between_local_networks ; then + for _dev in ${local_if_arr[@]} ; do + $ip6t -A FORWARD -i $_dev -p tcp -d $_ip --dport $remote_console_port -m conntrack --ctstate NEW -j ACCEPT + done + fi + + # - Rule is needed if (local) interface aliases in use (like eth0:1) + # - + if $local_alias_interfaces ; then + $ip6t -A FORWARD -p tcp -d $_ip --dport $remote_console_port --tcp-flag ACK ACK -j ACCEPT + $ip6t -A FORWARD -p tcp -s $_ip --sport $remote_console_port --tcp-flag ACK ACK -j ACCEPT + fi + fi + done + + if [[ ${#no_if_for_ip_arr[@]} -gt 0 ]] ; then + echo_warning + for _ip in ${no_if_for_ip_arr[@]} ; do + warn "No Interface given for ip '$_ip'" + done + else + echo_done + fi + +else + echo_skipped +fi + + +# --- +# - Munin Service Gateway +# --- + +echononl "\t\tMunin Service Gateway" + +if $local_munin_server ; then + + if $provide_munin_service_to_inet ; then + # - Provide Service for local and extern networks + # - + $ip6t -A OUTPUT -p tcp --dport $munin_remote_port -m conntrack --ctstate NEW -j ACCEPT + else + # - Provide Service only for for local network + # - + for _dev in ${local_if_arr[@]} ; do + $ip6t -A OUTPUT -o $_dev -p tcp --dport $munin_remote_port -m conntrack --ctstate NEW -j ACCEPT + done + fi + + echo_done +else + echo_skipped +fi + + +# --- +# - Munin Service local Networks +# --- + +echononl "\t\tMunin Service local Networks" +if [[ ${#munin_local_server_ip_arr[@]} -gt 0 ]] ; then + for _ip in ${munin_local_server_ip_arr[@]} ; do + $ip6t -A INPUT -s $_ip -p tcp --dport $munin_local_port -m conntrack --ctstate NEW -j ACCEPT + + if $kernel_forward_between_interfaces && ! $permit_between_local_networks ; then + for _dev in ${local_if_arr[@]} ; do + if ! $permit_between_local_networks ; then + $ip6t -A FORWARD -i $_dev -s $_ip -p tcp --dport $munin_local_port -m conntrack --ctstate NEW -j ACCEPT + fi + done + fi + + # - Rule is needed if (local) interface aliases in use (like eth0:1) + # - + if $kernel_forward_between_interfaces && $local_alias_interfaces ; then + $ip6t -A FORWARD -p tcp -d $_ip --sport $munin_local_port --tcp-flag ACK ACK -j ACCEPT + $ip6t -A FORWARD -p tcp -s $_ip --dport $munin_local_port --tcp-flag ACK ACK -j ACCEPT + fi + + done + + echo_done +else + echo_skipped +fi + + +# --- +# - Munin remote Server +# --- + +echononl "\t\tMunin remote Server" + +if [[ -n $munin_remote_server ]] && [[ ${#munin_local_client_ip_arr[@]} -gt 0 ]]; then + + for _ip in ${!munin_local_client_ip_arr[@]} ; do + if containsElement "$_ip" "${gateway_ipv6_address_arr[@]}" ; then + $ip6t -A INPUT -i ${munin_local_client_ip_arr[$_ip]} -p tcp -s $munin_remote_server --dport $munin_local_port -m conntrack --ctstate NEW -j ACCEPT + elif $kernel_forward_between_interfaces ; then + $ip6t -t nat -A PREROUTING -i ${munin_local_client_ip_arr[$_ip]} -p tcp -s $munin_remote_server --dport $munin_local_port -j DNAT --to $_ip:$munin_local_port + $ip6t -A FORWARD -i ${munin_local_client_ip_arr[$_ip]} -p tcp -s $munin_remote_server -d $_ip --dport $munin_local_port -m conntrack --ctstate NEW -j ACCEPT + fi + done + + echo_done +else + echo_skipped +fi + + +# --- +# - XyMon local service +# --- + +echononl "\t\tXyMon Service Gateway" + +if $local_xymon_server ; then + for _dev in ${local_if_arr[@]} ; do + $ip6t -A INPUT -i $_dev -p tcp --dport $xymon_port -m conntrack --ctstate NEW -j ACCEPT + done + echo_done +else + echo_skipped +fi + + +# --- +# - XyMon Service Intranet +# --- + +echononl "\t\tXyMon Service Intranet" + +if [[ ${#xymon_server_ip_arr[@]} -gt 0 ]] ; then + for _ip in ${xymon_server_ip_arr[@]} ; do + if $local_xymon_client ; then + $ip6t -A OUTPUT -p tcp -d $_ip --dport $xymon_port -m conntrack --ctstate NEW -j ACCEPT + fi + if $kernel_forward_between_interfaces && ! $permit_between_local_networks ; then + for _dev in ${local_if_arr[@]} ; do + $ip6t -A FORWARD -i $_dev -p tcp -d $_ip --dport $xymon_port -m conntrack --ctstate NEW -j ACCEPT + done + fi + + # - Rule is needed if (local) interface aliases in use (like eth0:1) + # - + if $kernel_forward_between_interfaces && $local_alias_interfaces ; then + $ip6t -A FORWARD -p tcp -d $_ip --dport $xymon_port --tcp-flag ACK ACK -j ACCEPT + $ip6t -A FORWARD -p tcp -s $_ip --sport $xymon_port --tcp-flag ACK ACK -j ACCEPT + fi + done + + echo_done +else + echo_skipped +fi + + + +# ------------- +# --- Portforwarding +# ------------- + +# --- +# - Portforwarding TCP +# --- + +echo +echononl "\tPortforwarding TCP" + +if [[ ${#portforward_tcp_arr[@]} -gt 0 ]] && $kernel_forward_between_interfaces ; then + for _val in "${portforward_tcp_arr[@]}" ; do + + # - Split value + # - + IFS=',' read -a _val_arr <<< "${_val}" + + # - DNAT + # - + if [[ "${_val_arr[1]}" = "${_val_arr[3]}" ]] ; then + $ip6t -t nat -A PREROUTING -i ${_val_arr[0]} -p tcp --dport ${_val_arr[1]} -m conntrack --ctstate NEW -j DNAT --to-destination ${_val_arr[2]} + else + $ip6t -t nat -A PREROUTING -i ${_val_arr[0]} -p tcp --dport ${_val_arr[1]} -m conntrack --ctstate NEW -j DNAT --to-destination [${_val_arr[2]}]:${_val_arr[3]} + fi + + # - Allow Packets + # - + $ip6t -A FORWARD -i ${_val_arr[0]} -p tcp -d ${_val_arr[2]} --dport ${_val_arr[3]} -m conntrack --ctstate NEW -j ACCEPT + + done + echo_done +else + echo_skipped +fi + + +# --- +# - Portforwarding UDP +# --- + +echononl "\tPortforwarding UDP" + +if [[ ${#portforward_udp_arr[@]} -gt 0 ]] && $kernel_forward_between_interfaces ; then + for _val in "${portforward_udp_arr[@]}" ; do + + # - Split value + # - + IFS=',' read -a _val_arr <<< "${_val}" + + # - DNAT + # - + if [[ "${_val_arr[1]}" = "${_val_arr[3]}" ]] ; then + $ip6t -t nat -A PREROUTING -i ${_val_arr[0]} -p udp --dport ${_val_arr[1]} -m conntrack --ctstate NEW -j DNAT --to-destination ${_val_arr[2]} + else + $ip6t -t nat -A PREROUTING -i ${_val_arr[0]} -p udp --dport ${_val_arr[1]} -m conntrack --ctstate NEW -j DNAT --to-destination [${_val_arr[2]}]:${_val_arr[3]} + fi + + # - Allow Packets + # - + $ip6t -A FORWARD -i ${_val_arr[0]} -p udp -d ${_val_arr[2]} --dport ${_val_arr[3]} -m conntrack --ctstate NEW -j ACCEPT + + done + echo_done +else + echo_skipped +fi + + +# --- +# - UNIX Traceroute +# --- + +echo +echononl "\tUNIX Traceroute" + +# versendet udp packete im gegensatz zu tracert von windows +# der icmp-echo-request pakete versendet +# einige implementierungen von traceroute (linux) erm�lichens +# die option -I und versenden dann ebenfalls icmp-echo-request pakete + +for _dev in ${ext_if_arr[@]} ; do + $ip6t -A OUTPUT -o $_dev -p udp -m conntrack --ctstate NEW --dport 33434:33530 -j ACCEPT + $ip6t -A INPUT -i $_dev -p udp -m conntrack --ctstate NEW --dport 33434:33530 -j ACCEPT + if $kernel_forward_between_interfaces ; then + $ip6t -A FORWARD -o $_dev -p udp -m conntrack --ctstate NEW --dport 33434:33530 -j ACCEPT + $ip6t -A FORWARD -i $_dev -p udp -m conntrack --ctstate NEW --dport 33434:33530 -j ACCEPT + fi +done + +echo_done + + +# ------------- +# --- ICMP Traffic (i.e. ping requests) +# ------------- + +# --- +# - ICMP is configured above.. +# --- + + + +# --- +# - Deny between local networks +# --- + +echo +echononl "\tDeny all traffic between local networks.." +if $kernel_forward_between_interfaces ; then + if ! $permit_between_local_networks ; then + for _dev_1 in ${local_if_arr[@]} ; do + for _dev_2 in ${local_if_arr[@]} ; do + if $log_rejected || $log_all ; then + $ip6t -A FORWARD -i $_dev_1 -o $_dev_2 -j LOG --log-prefix "$log_prefix Rejected local NET: " --log-level $log_level + fi + $ip6t -A FORWARD -i $_dev_1 -o $_dev_2 -p ALL -m conntrack --ctstate NEW -j DROP + done + done + echo_done + else + echo_skipped + fi +else + echo_skipped +fi + + +# ------------- +# --- Log traffic not matched so far +# ------------- +echo + +echononl "\tLog traffic not matched so far.." +if $log_rejected || $log_all ; then + $ip6t -A OUTPUT -j LOG --log-prefix "$log_prefix OUT Rejected: " --log-level $log_level + $ip6t -A INPUT -j LOG --log-prefix "$log_prefix IN Rejected: " --log-level $log_level + $ip6t -A FORWARD -j LOG --log-prefix "$log_prefix FORWARD Rejected: " --log-level $log_level + #$ip6t -A OUTPUT -m limit --limit-burst 5 -j LOG --log-prefix "$log_prefix OUT Rejected: " --log-level $log_level + #$ip6t -A INPUT -m limit --limit-burst 5 -j LOG --log-prefix "$log_prefix IN Rejected: " --log-level $log_level + #$ip6t -A FORWARD -m limit --limit-burst 5 -j LOG --log-prefix "$log_prefix FORWARD Rejected: " --log-level $log_level + echo_done +else + echo_skipped +fi + + +# ------------- +# --- DROP traffic not matched so far +# ------------- +echononl "\tDROP traffic not matched so far.." + +# - drop all other for all interfaces.. +# +$ip6t -A INPUT -j DROP +$ip6t -A OUTPUT -j DROP +$ip6t -A FORWARD -j DROP +# +# ---------- Ende: DROP ---------- + +echo_done + + +# --- +# - Warning, if no intern (local) interface is configured +# --- + +if [[ ${#local_if_arr[@]} -lt 1 ]] ; then + echo "" + echo "" + if $terminal ; then + echo -e "\t\033[33m\033[1m----------\033[m" + else + echo "----------" + fi + warn "No local Interface is configured!" + if $terminal ; then + echo -e "\t\033[33m\033[1m----------\033[m" + else + echo "----------" + fi +fi + +echo +exit 0 + diff --git a/NONE-CKUBU/sbin/ipt-firewall-gateway b/NONE-CKUBU/sbin/ipt-firewall-gateway index 223a537..4936776 100755 --- a/NONE-CKUBU/sbin/ipt-firewall-gateway +++ b/NONE-CKUBU/sbin/ipt-firewall-gateway @@ -258,9 +258,9 @@ if [[ ${#nat_network_arr[@]} -gt 0 ]] && $kernel_activate_forwarding ; then continue fi - # - ?? - Don't know which rule is the right one + # - ?? - Don't know which rule is the right one , maybe both.. # - - #$ipt -t nat -A POSTROUTING -o ${_val_arr[1]} -d ${_val_arr[0]} -j MASQUERADE + $ipt -t nat -A POSTROUTING -o ${_val_arr[1]} -d ${_val_arr[0]} -j MASQUERADE $ipt -t nat -A POSTROUTING -o ${_val_arr[1]} -s ${_val_arr[0]} -j MASQUERADE done fi @@ -1644,6 +1644,7 @@ fi + # --- # - Allow local ip address from given local interface # --- @@ -1676,6 +1677,126 @@ fi +# --- +# - Allow extern service from given local interface +# --- + +echononl "\tAllow extern service from given local interface" + +if [[ ${#allow_local_if_to_ext_service_arr[@]} -gt 0 ]] \ + && $kernel_activate_forwarding ; then + + for _val in "${allow_local_if_to_ext_service_arr[@]}" ; do + IFS=':' read -a _val_arr <<< "${_val}" + $ipt -A FORWARD -p ${_val_arr[3]} -i ${_val_arr[0]} -d ${_val_arr[1]} --dport ${_val_arr[2]} -m conntrack --ctstate NEW -j ACCEPT + + # - Note: + # - If (local) alias interfaces like eth1:0 in use, youe need a further + # - special rule. + # - + if $local_alias_interfaces ; then + if [[ "${_val_arr[3]}" = "tcp" ]]; then + $ipt -A FORWARD -p tcp -i ${_val_arr[0]} -d ${_val_arr[1]} --tcp-flag ACK ACK -j ACCEPT + $ipt -A FORWARD -p tcp -o ${_val_arr[0]} -s ${_val_arr[1]} --tcp-flag ACK ACK -j ACCEPT + fi + fi + done + + echo_done +else + echo_skipped +fi + + + +# --- +# - Allow extern network from given local interface +# --- + +echononl "\tAllow extern network from given local interface" + +if [[ ${#allow_local_if_to_ext_net_arr[@]} -gt 0 ]] \ + && $kernel_activate_forwarding ; then + + for _val in ${allow_local_if_to_ext_net_arr[@]} ; do + IFS=':' read -a _val_arr <<< "${_val}" + $ipt -A FORWARD -p ALL -i ${_val_arr[0]} -d ${_val_arr[1]} -m conntrack --ctstate NEW -j ACCEPT + + # - Note: + # - If (local) alias interfaces like eth1:0 in use, youe need a further + # - special rule. + # - + if $local_alias_interfaces ; then + $ipt -A FORWARD -p tcp -i ${_val_arr[0]} -d ${_val_arr[1]} --tcp-flag ACK ACK -j ACCEPT + $ipt -A FORWARD -p tcp -o ${_val_arr[0]} -s ${_val_arr[1]} --tcp-flag ACK ACK -j ACCEPT + fi + done + echo_done +else + echo_skipped +fi + + + +# --- +# - Allow extern service from given local network +# --- + +echononl "\tAllow extern service from given local network" +if [[ ${#allow_local_net_to_ext_service_arr[@]} -gt 0 ]] \ + && $kernel_activate_forwarding ; then + + for _val in "${allow_local_net_to_ext_service_arr[@]}" ; do + IFS=':' read -a _val_arr <<< "${_val}" + $ipt -A FORWARD -p ${_val_arr[3]} -s ${_val_arr[0]} -d ${_val_arr[1]} --dport ${_val_arr[2]} -m conntrack --ctstate NEW -j ACCEPT + + # - Note: + # - If (local) alias interfaces like eth1:0 in use, youe need a further + # - special rule. + # - + if $local_alias_interfaces ; then + if [[ "${_val_arr[3]}" = "tcp" ]]; then + $ipt -A FORWARD -p tcp -d ${_val_arr[1]} --dport ${_val_arr[2]} --tcp-flag ACK ACK -j ACCEPT + $ipt -A FORWARD -p tcp -s ${_val_arr[1]} --sport ${_val_arr[2]} --tcp-flag ACK ACK -j ACCEPT + fi + fi + done + + echo_done +else + echo_skipped +fi + + + +# --- +# - Allow extern network from given local network +# --- + +echononl "\tAllow extern network from given local network" +if [[ ${#allow_local_net_to_ext_net_arr[@]} -gt 0 ]] \ + && $kernel_activate_forwarding ; then + + for _val in ${allow_local_net_to_ext_net_arr[@]} ; do + IFS=':' read -a _val_arr <<< "${_val}" + $ipt -A FORWARD -p ALL -s ${_val_arr[0]} -d ${_val_arr[1]} -m conntrack --ctstate NEW -j ACCEPT + + # - Note: + # - If (local) alias interfaces like eth1:0 in use, youe need a further + # - special rule. + # - + if $local_alias_interfaces ; then + $ipt -A FORWARD -p tcp -d ${_val_arr[1]} -s ${_val_arr[0]} --tcp-flag ACK ACK -j ACCEPT + $ipt -A FORWARD -p tcp -d ${_val_arr[0]} -s ${_val_arr[1]} --tcp-flag ACK ACK -j ACCEPT + fi + done + echo_done +else + echo_skipped +fi + + + # --- # - Separate local networks # --- @@ -2640,6 +2761,12 @@ else fi +# --- +# - FTP common +# --- +ftp_helper_output_defined=false +ftp_helper_prerouting_defined=false + # --- # - FTP out only # --- @@ -2647,20 +2774,116 @@ fi echononl "\t\tFTP out only" if $allow_ftp_request_out ; then + + # - Used for different ftpdata recent lists 'ftpdata_$i' + # - + declare -i i=1 + + if ! $ftp_helper_output_defined ; then + $ipt -A OUTPUT -t raw -p tcp --dport 21 -j CT --helper ftp + ftp_helper_output_defined=true + fi + if $kernel_activate_forwarding && ! $ftp_helper_prerouting_defined ; then + $ipt -A PREROUTING -t raw -p tcp --dport 21 -j CT --helper ftp + ftp_helper_prerouting_defined=true + fi + for _dev in ${ext_if_arr[@]} ; do - $ipt -A OUTPUT -o $_dev -p tcp --dport 21 -m conntrack --ctstate NEW -j ACCEPT - $ipt -A OUTPUT -o $_dev -p tcp --sport $unprivports --dport $unprivports -m conntrack --ctstate NEW -j ACCEPT + + # - Open FTP connection and add the destination ip (--rdest) to ftpdata recent list 'ftpdata_$i'. + # - + $ipt -A OUTPUT -o $_dev -p tcp --dport 21 -m state --state NEW -m recent --name ftpdata_$i --rdest --set -j ACCEPT + + # - (2) + # - - Accept packets if the destination ip-address (--rdest) is in the 'ftpdata_$i' list (--update) + # - and the destination ip-address was seen within the last 1800 seconds (--seconds 1800). + # - + # - - If matched, the "last seen" timestamp of the destination address will be updated (--update). + # - + # - - Entries in the ftpdata list not seen in the last 1800 will be removed (--reap). + # - + $ipt -A OUTPUT -o $_dev -p tcp -m state --state NEW --dport 1024: \ + -m recent --name ftpdata_$i --rdest --update --seconds 1800 --reap -j ACCEPT + + ((i++)) + + # - Accept (helper ftp) related connections + # - + $ipt -A OUTPUT -m conntrack --ctstate RELATED -m helper --helper ftp -o $_dev -p tcp --dport 1024: -j ACCEPT + $ipt -A INPUT -m conntrack --ctstate RELATED -m helper --helper ftp -i $_dev -p tcp --dport 1024: -j ACCEPT + if $kernel_activate_forwarding && ! $permit_local_net_to_inet ; then - $ipt -A FORWARD -o $_dev -p tcp --dport 21 -m conntrack --ctstate NEW -j ACCEPT - $ipt -A FORWARD -o $_dev -p tcp --sport $unprivports --dport $unprivports -m conntrack --ctstate NEW -j ACCEPT + + # ===== + # - + # - ip_conntrack_ftp cannot see the TLS-encrypted traffic + # - ====================================================== + # - + # - Workaround: + # - (1) add (!) desitnatin ip to a 'recent list' named 'ftpdata_$i! if ftp control connections appear + # - (2) accept packets of the formaly created recent list 'ftpdata_$i! + # - + # - Note: + # - Use flag '--rdest' to match destination address + # - + # ===== + + # - (1) + # - + # - Open FTP connection and add the destination ip (--rdest) to ftpdata recent list 'ftpdata_$i'. + # - + $ipt -A FORWARD -o $_dev -p tcp --dport 21 -m state --state NEW \ + -m recent --name ftpdata_$i --rdest --set -j ACCEPT + + # - (2) + # - - Accept packets if the destination ip-address (--rdest) is in the 'ftpdata_$i' list (--update) + # - and the destination ip-address was seen within the last 1800 seconds (--seconds 1800). + # - + # - - If matched, the "last seen" timestamp of the destination address will be updated (--update). + # - + # - - Entries in the ftpdata list not seen in the last 1800 will be removed (--reap). + # - + $ipt -A FORWARD -o $_dev -p tcp -m state --state NEW --dport 1024: \ + -m recent --name ftpdata_$i --rdest --update --seconds 1800 --reap -j ACCEPT + + ((i++)) + + + # - Accept (helper ftp) related connections + # - + $ipt -A FORWARD -m conntrack --ctstate RELATED -m helper --helper ftp -o $_dev -p tcp --dport 1024: -j ACCEPT + $ipt -A FORWARD -m conntrack --ctstate RELATED -m helper --helper ftp -i $_dev -p tcp --dport 1024: -j ACCEPT + fi + done echo_done else - echo_done + echo_skipped fi +#if $allow_ftp_request_out ; then +# for _dev in ${ext_if_arr[@]} ; do +# $ipt -A OUTPUT -o $_dev -p tcp --dport 21 -m conntrack --ctstate NEW -j ACCEPT +# $ipt -A OUTPUT -o $_dev -p tcp --sport $unprivports --dport $unprivports -m conntrack --ctstate NEW -j ACCEPT +# # - Allow active FTP connections from local network +# # - +# $ipt -A INPUT -i $_dev -p tcp --sport 20 -m conntrack --ctstate NEW -j ACCEPT +# if $kernel_activate_forwarding && ! $permit_local_net_to_inet ; then +# $ipt -A FORWARD -o $_dev -p tcp --dport 21 -m conntrack --ctstate NEW -j ACCEPT +# $ipt -A FORWARD -o $_dev -p tcp --sport $unprivports --dport $unprivports -m conntrack --ctstate NEW -j ACCEPT +# fi +# # - Allow active FTP connections from local network +# # - +# $ipt -A FORWARD -i $_dev -p tcp --sport 20 -m conntrack --ctstate NEW -j ACCEPT +# done +# +# echo_done +#else +# echo_done +#fi + # --- # - FTP Service Gateway @@ -2669,7 +2892,50 @@ fi echononl "\t\tFTP Service Gateway" if $local_ftp_service ; then - $ipt -A INPUT -p tcp --dport $standard_ftp_port --sport $unprivports -m conntrack --ctstate NEW -j ACCEPT + + # ===== + # - + # - ip_conntrack_ftp cannot see the TLS-encrypted traffic + # - ====================================================== + # - + # - Workaround: + # - (1) add source ip to a 'recent list' named 'ftpservice! if ftp control connections appear + # - (2) accept packets of the formaly created recent list 'ftpservice! + # - + # ===== + + # - (Re)define helper + # - + # - !! Note: !! + # - for both, local FTP server (ftp_server_ip_arr) + # - and forward to (extern) FTP server (forward_ftp_server_ip_arr) + # - + if ! $ftp_helper_prerouting_defined ; then + $ipt -A PREROUTING -t raw -p tcp --dport 21 -j CT --helper ftp + ftp_helper_prerouting_defined=true + fi + + # - (1) + # - + # - Accept initial FTP connection and add the source ip to ftpdata recent list 'ftpservice'. + # - + $ipt -A INPUT -p tcp -m state --state NEW --dport 21 -m recent --name ftpservice --set -j ACCEPT + + # - (2) + # - - Accept packets if the source ip-address is in the 'ftpservice' list (--update) and the + # - source ip-address was seen within the last 1800 seconds (--seconds 1800). + # - + # - - If matched, the "last seen" timestamp of the source address will be updated (--update). + # - + # - - Entries in the ftpdata list not seen in the last 1800 will be removed (--reap). + # - + $ipt -A INPUT -p tcp -m state --state NEW --sport 1024: --dport $ftp_passive_port_range \ + -m recent --name ftpservice --update --seconds 1800 --reap -j ACCEPT + + # - Accept (helper ftp) related connections + # - + $ipt -A INPUT -m conntrack --ctstate RELATED -m helper --helper ftp -p tcp --dport 1024: -j ACCEPT + echo_done else echo_skipped @@ -2681,32 +2947,100 @@ fi # --- echononl "\t\tFTP Service local Networks" + if [[ ${#ftp_server_only_local_ip_arr[@]} -gt 0 ]] && $kernel_activate_forwarding ; then + + # - Used for different ftpdata recent lists 'ftpdata_local_$k' + # - + declare -i k=1 + + # - (Re)define helper + # - + if ! $ftp_helper_output_defined ; then + $ipt -A OUTPUT -t raw -p tcp --dport 21 -j CT --helper ftp + ftp_helper_output_defined=true + fi + if $kernel_activate_forwarding && ! $permit_between_local_networks && ! $ftp_helper_prerouting_defined ; then + $ipt -A PREROUTING -t raw -p tcp --dport 21 -j CT --helper ftp + ftp_helper_prerouting_defined=true + fi + for _ip in ${ftp_server_only_local_ip_arr[@]} ; do - $ipt -A OUTPUT -p tcp -d $_ip --dport 21 --sport $unprivports -m conntrack --ctstate NEW -j ACCEPT - if ! $permit_between_local_networks ; then - $ipt -A FORWARD -p tcp -d $_ip --dport 21 --sport $unprivports -m conntrack --ctstate NEW -j ACCEPT + # - (1) + # - + # - Open FTP connection and add the destination ip (--rdest) to ftpdata recent list 'ftpdata_$i'. + # - + $ipt -A OUTPUT -p tcp -d $_ip --dport 21 --sport 1024: -m state --state NEW \ + -m recent --name ftpdata_local_$k --rdest --set -j ACCEPT + + $ipt -A FORWARD -d $_ip -p tcp --dport 21 -m state --state NEW \ + -m recent --name ftpdata_local_$k --rdest --set -j ACCEPT + + # - (2) + # - - Accept packets if the destination ip-address (--rdest) is in the 'ftpdata_$i' list (--update) + # - and the destination ip-address was seen within the last 1800 seconds (--seconds 1800). + # - + # - - If matched, the "last seen" timestamp of the destination address will be updated (--update). + # - + # - - Entries in the ftpdata list not seen in the last 1800 will be removed (--reap). + # - + $ipt -A OUTPUT -d $_ip -p tcp -m state --state NEW --dport 1024: \ + -m recent --name ftpdata_local_$k --rdest --update --seconds 1800 --reap -j ACCEPT + + if $kernel_activate_forwarding && ! $permit_between_local_networks ; then + $ipt -A FORWARD -d $_ip -p tcp -m state --state NEW --dport 1024: \ + -m recent --name ftpdata_local_$k --rdest --update --seconds 1800 --reap -j ACCEPT fi - if $local_alias_interfaces ; then - # - Control Port - $ipt -A FORWARD -p tcp -d $_ip --dport 21 --tcp-flag ACK ACK -j ACCEPT - $ipt -A FORWARD -p tcp -s $_ip --sport 21 --tcp-flag ACK ACK -j ACCEPT - # - Data Port activ - $ipt -A FORWARD -p tcp -d $_ip --dport 20 --tcp-flag ACK ACK -j ACCEPT - $ipt -A FORWARD -p tcp -s $_ip --sport 20 --tcp-flag ACK ACK -j ACCEPT - # - Data Port passiv - $ipt -A FORWARD -p tcp -d $_ip --sport $unprivports --dport $unprivports --tcp-flag ACK ACK -j ACCEPT + ((k++)) + + # - Accept (helper ftp) related connections + # - + $ipt -A OUTPUT -m conntrack --ctstate RELATED -m helper --helper ftp -o $_dev -p tcp --dport 1024: -j ACCEPT + $ipt -A INPUT -m conntrack --ctstate RELATED -m helper --helper ftp -i $_dev -p tcp --dport 1024: -j ACCEPT + + if $kernel_activate_forwarding && ! $permit_between_local_networks ; then + $ipt -A FORWARD -m conntrack --ctstate RELATED -m helper --helper ftp -p tcp -d $_ip --dport 1024: -j ACCEPT + $ipt -A FORWARD -m conntrack --ctstate RELATED -m helper --helper ftp -p tcp -s $_ip --dport 1024: -j ACCEPT fi + done - + echo_done else echo_skipped fi + +#echononl "\t\tFTP Service local Networks" +#if [[ ${#ftp_server_only_local_ip_arr[@]} -gt 0 ]] && $kernel_activate_forwarding ; then +# for _ip in ${ftp_server_only_local_ip_arr[@]} ; do +# $ipt -A OUTPUT -p tcp -d $_ip --dport 21 --sport $unprivports -m conntrack --ctstate NEW -j ACCEPT +# +# if ! $permit_between_local_networks ; then +# $ipt -A FORWARD -p tcp -d $_ip --dport 21 --sport $unprivports -m conntrack --ctstate NEW -j ACCEPT +# fi +# +# if $local_alias_interfaces ; then +# # - Control Port +# $ipt -A FORWARD -p tcp -d $_ip --dport 21 --tcp-flag ACK ACK -j ACCEPT +# $ipt -A FORWARD -p tcp -s $_ip --sport 21 --tcp-flag ACK ACK -j ACCEPT +# # - Data Port activ +# $ipt -A FORWARD -p tcp -d $_ip --dport 20 --tcp-flag ACK ACK -j ACCEPT +# $ipt -A FORWARD -p tcp -s $_ip --sport 20 --tcp-flag ACK ACK -j ACCEPT +# # - Data Port passiv +# $ipt -A FORWARD -p tcp -d $_ip --sport $unprivports --dport $unprivports --tcp-flag ACK ACK -j ACCEPT +# fi +# done +# +# echo_done +#else +# echo_skipped +#fi + + # --- # - FTP Services DMZ # --- @@ -2812,6 +3146,38 @@ else fi +# --- +# - Samba Service only out +# --- + +echononl "\t\tSamba Service only out" + +if $allow_samba_requests_out && ! $permit_local_net_to_inet ; then + for _dev in ${ext_if_arr[@]} ; do + + for _port in ${samba_udp_ports[@]} ; do + $ipt -A OUTPUT -o $_dev -p udp --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + for _port in ${samba_tcp_ports[@]} ; do + $ipt -A OUTPUT -o $_dev -p tcp --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + + if $kernel_activate_forwarding ; then + + for _port in ${samba_udp_ports[@]} ; do + $ipt -A FORWARD -o $_dev -p udp --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + for _port in ${samba_tcp_ports[@]} ; do + $ipt -A FORWARD -o $_dev -p tcp --dport $_port -m conntrack --ctstate NEW -j ACCEPT + done + fi + done + + echo_done +else + echo_skipped +fi + # --- # - Samba Service Gateway (only for local Networks) @@ -3418,6 +3784,52 @@ else fi +# --- +# - Special TCP Ports OUT +# --- + +echononl "\t\tSpecial TCP Ports OUT" + +if [[ ${#tcp_out_port_arr[@]} -gt 0 ]] ; then + + for _dev in ${ext_if_arr[@]} ; do + for _port in ${tcp_out_port_arr[@]} ; do + $ipt -A OUTPUT -o $_dev -p tcp --dport $_port -m state --state NEW -j ACCEPT + if $kernel_activate_forwarding ; then + $ipt -A FORWARD -o $_dev -p tcp --dport $_port -m state --state NEW -j ACCEPT + fi + done + done + + echo_done +else + echo_skipped +fi + + +# --- +# - Special UDP Ports OUT +# --- + +echononl "\t\tSpecial UDP Ports OUT" + +if [[ ${#udp_out_port_arr[@]} -gt 0 ]] ; then + + for _dev in ${ext_if_arr[@]} ; do + for _port in ${udp_out_port_arr[@]} ; do + $ipt -A OUTPUT -o $_dev -p udp --dport $_port -m state --state NEW -j ACCEPT + if $kernel_activate_forwarding ; then + $ipt -A FORWARD -o $_dev -p udp --dport $_port -m state --state NEW -j ACCEPT + fi + done + done + + echo_done +else + echo_skipped +fi + + # --- # - Other local Services # --- @@ -3548,12 +3960,14 @@ if [[ ${#pcns_server_ip_arr[@]} -gt 0 ]] && [[ -n "$usv_ip" ]] ; then for _ip in ${pcns_server_ip_arr[@]} ; do if containsElement "$_ip" "${gateway_ipv4_address_arr[@]}" ; then + $ipt -A OUTPUT -p tcp -s $_ip -d $usv_ip -m multiport --dports $http_ports -m conntrack --ctstate NEW -j ACCEPT $ipt -A INPUT -p tcp -s $usv_ip --dport $pcns_tcp_port -m conntrack --ctstate NEW -j ACCEPT $ipt -A INPUT -p udp -s $usv_ip --dport $pcns_udp_port -m conntrack --ctstate NEW -j ACCEPT $ipt -A INPUT -p tcp --dport $pcns_web_port -m conntrack --ctstate NEW -j ACCEPT fi if $kernel_activate_forwarding && ! $permit_between_local_networks ; then + $ipt -A FORWARD -p tcp -s $_ip -d $usv_ip -m multiport --dports $http_ports -m conntrack --ctstate NEW -j ACCEPT $ipt -A FORWARD -p tcp -s $usv_ip -d $_ip --dport $pcns_tcp_port -m conntrack --ctstate NEW -j ACCEPT $ipt -A FORWARD -p udp -s $usv_ip -d $_ip --dport $pcns_udp_port -m conntrack --ctstate NEW -j ACCEPT $ipt -A FORWARD -p tcp -d $_ip --dport $pcns_web_port -m conntrack --ctstate NEW -j ACCEPT @@ -3573,11 +3987,11 @@ fi # --- -# - Ubiquiti Unifi Controler (Accesspoints) Gateway +# - Ubiquiti Unifi Controller Gateway # --- -echononl "\t\tUbiquiti Unifi Controler (Accesspoints) Gateway" +echononl "\t\tUbiquiti Unifi Controller Gateway" if $local_unifi_controller_service ; then for _dev in ${local_if_arr[@]} ; do $ipt -A INPUT -p udp -i $_dev -m multiport --dports $unify_broadcast_udp_ports -m conntrack --ctstate NEW -j ACCEPT @@ -3592,11 +4006,32 @@ else fi +echononl "\t\tUbiquiti Unifi Controller Gateway - STUN to Unifi APs" +if $local_unifi_controller_service ; then + + if [[ ${#unifi_ap_local_ip_arr[@]} -gt 0 ]] ; then + + for _ip_ap in ${unifi_ap_local_ip_arr[@]} ; do + + $ipt -A OUTPUT -p udp -d $_ip_ap -m multiport --sports $unify_udp_ports -m conntrack --ctstate NEW -j ACCEPT + + done + + echo_done + else + echo_skipped + warn "Local Unifi Controller is defined, but no Unifi APs!" + fi +else + echo_skipped +fi + + # --- -# - Ubiquiti Unifi Controler (Accesspoints) local Network +# - Ubiquiti Unifi Controller local Network # --- -echononl "\t\tUbiquiti Unifi Controler (Accesspoints) local Network" +echononl "\t\tUbiquiti Unifi Controller local Network" if [[ ${#unify_controller_local_net_ip_arr[@]} -gt 0 ]] \ && $kernel_activate_forwarding \ && ! $permit_between_local_networks ; then diff --git a/NONE-CKUBU/sbin/netconfig.sh b/NONE-CKUBU/sbin/netconfig.sh new file mode 100755 index 0000000..bce0dee --- /dev/null +++ b/NONE-CKUBU/sbin/netconfig.sh @@ -0,0 +1,993 @@ +#!/usr/bin/env bash + +## ------------------------------------------------------------------- +## --- All Configurations ill be done in /etc/check_net/check_net.conf +## ------------------------------------------------------------------- + +## - Load Configuration +## - +source /etc/check_net/check_net.conf + + +## ------------------ +## --- Some functions +## ------------------ + +## - Check if a given array (parameter 2) contains a given string (parameter 1) +## - +fatal(){ + echo "" + echo -e "[ \033[31m\033[1mError\033[m ]: $*" + echo "" + echo -e "\t\033[31m\033[1mScript is canceled\033[m\033[m" + echo "" + + echo "" >> $log_file + echo "[ Error ]: $*" >> $log_file + echo "" >> $log_file + echo " Script is canceled." >> $log_file + echo "" >> $log_file + + exit 1 +} +containsElement () { + local e + for e in "${@:2}"; do [[ "$e" == "$1" ]] && return 0; done + return 1 +} + +usage() { + echo + [ -n "$1" ] && echo -e "[ \033[1;31mError\033[m ] : $1\n" + +echo -e " Usage:" +echo -e " \033[1m`basename $0` [OPTIONS] ..\033[m" +echo "" +echo -e " This script configures the default route, especially if more than one" +echo -e " route to the internet exists. Also the routing tables are managed by this" +echo -e " script." +echo "" +echo -e " The Parameter \033[1mdevice list\033[m contains all network devices, which should have" +echo -e " a connection to the Internet. Tha can be DSL lines as well as static lines." +echo -e " The declaration of the device list is mandatory." +echo "" +echo -e " \033[1mNotice\033[m" +echo -e " Declare the device list in the order of your preferred default gatway devices." +echo "" +echo -e " \033[1mNotice\033[m" +echo -e " On static line devices \033[1mappend \":\033[m. This is very important," +echo -e " otherwise this script will \033[1mNOT work as expected\033[m." +echo "" +echo -e " If this script is invoked with option \033[1m-m\033[m, another script called \033[1m`basename $check_script`\033[m" +echo -e " will be triigered to monitor the devices and informs about changes (online/offline" +echo -e " status) of the given devices. If the status of a line has changed, this script" +echo -e " is reinvoked by the monitoring script \033[1m`basename $check_script`\033[m to reconfigure" +echo -e " the routing." +echo "" +echo -e " Options:" +echo "" +echo -e " \033[1m-h\033[m" +echo -e " Prints this help\033[m" +echo "" +echo -e " \033[1m-l \033[m" +echo -e " List of all (internet) devices known as online. Usually, this option will" +echo -e " be used by triggering this script from check script \033[1m`basename $check_script`\033[m." +echo "" +echo -e " \033[1m-m\033[m" +echo -e " Activates monitoring of the given network devices." +echo "" +echo -e " Example:" +echo -e " - Simply configure routing for devices \"$_INITIAL_DEVICE_LIST\"" +echo -e " \033[1m`basename $0` $_INITIAL_DEVICE_LIST\033[m" +echo "" +echo -e " - Configure routing for devices \"$_INITIAL_DEVICE_LIST\" and activate monitoring" +echo -e " \033[1m`basename $0` -m $_INITIAL_DEVICE_LIST\033[m" +echo "" + +exit 1 +} + +if [[ ! -f "$check_script" ]] ; then + fatal "Check script \033[1m$check_script\033[m not found!" +fi + +if [[ "`which sipcalc`" == "" ]]; then + fatal "\033[1msipcalc\033[m must be installed to run this script" +fi + +if [[ $EUID -ne 0 ]]; then + fatal "This script must be run as root" 1>&2 +fi + +## --- +## --- Configure +## --- + +_monitoring=false +ONLINE_DEVICE_LIST= +while getopts hl:m opt ; do + case $opt in + h) usage + ;; + l) ONLINE_DEVICE_LIST=$OPTARG + ;; + m) _monitoring=true + ;; + esac +done + +shift `expr $OPTIND - 1` + +INITIAL_DEVICE_LIST="$@" +if [[ -z "$INITIAL_DEVICE_LIST" ]]; then + INITIAL_DEVICE_LIST=$_INITIAL_DEVICE_LIST +fi + +[[ -z "$INITIAL_DEVICE_LIST" ]] && usage "No device list given" + +## - Define (non associative) array +## - +declare -a inet_devices_arr +declare -a dsl_devices_arr +declare -a static_devices_arr +declare -a online_devices_arr +declare -A static_gw_arr + +for _device in $INITIAL_DEVICE_LIST ; do + if [[ "$_device" =~ : ]]; then + static_gateway="${_device##*:}" + _device="${_device%:*}" + static_gw_arr[$_device]="$static_gateway" + + static_devices_arr+=("$_device") + + else + dsl_devices_arr+=("$_device") + fi + inet_devices_arr+=("$_device") +done + +for _online_device in $ONLINE_DEVICE_LIST ; do + online_devices_arr+=("$_online_device") +done + + +#echo "All Devices:" +#for _device in "${inet_devices_arr[@]}" ; do +# echo -e "\t$_device" +#done +#echo "Online Devices:" +#for _device in "${online_devices_arr[@]}" ; do +# echo -e "\t$_device" +#done +# +#for inet_device in "${inet_devices_arr[@]}" ; do +# if [ -n "$ONLINE_DEVICE_LIST" ]; then +# if ! containsElement "$inet_device" "${online_devices_arr[@]}" ; then +# echo "$inet_device is offline" +# continue +# fi +# fi +#done +# +#echo "" +#exit + + +## - Define associative arrays +## - +declare -A default_gw_arr +declare -A gw_connection_arr + +declare -i number_rt_table=0 + + +## --- +## --- Start +## --- + +#echo "" >> $log_file +#echo "" >> $log_file +#echo "#############################" >> $log_file +#echo "### ---" >> $log_file +#echo "### --- [ `date +'%Y-%m-%d %H:%M'` ]: Starting Script `basename $0`.." >> $log_file +#echo "### --- Devices all: $INITIAL_DEVICE_LIST" >> $log_file +#echo "### --- Devices online: $ONLINE_DEVICE_LIST" >> $log_file +#echo "### ---" >> $log_file +#echo "### ---" >> $log_file +#echo "#############################" >> $log_file + +echo "" >> $log_file +echo "`date +'%Y-%m-%d %H:%M:%S'` [ Info ] Starting Script `basename $0`.." >> $log_file +echo " Devices all: $INITIAL_DEVICE_LIST" >> $log_file +echo " Devices online: $ONLINE_DEVICE_LIST" >> $log_file + +configured=false +if $_monitoring ; then + max_attempts=20 +else + max_attempts=1 +fi +declare -i _try_number=0 +declare -i prio=0 + +while ! $configured && [ $_try_number -lt $max_attempts ] ; do + + let _try_number++ + + if [ $_try_number -gt 1 ]; then + echo "" >> $log_file + echo "# --- sleeping 2 seconds before attempt number $_try_number" >> $log_file + sleep 2 + fi + + number_rt_table=0 + + #for inet_device in "${dsl_devices_arr[@]}" ; do + for inet_device in "${inet_devices_arr[@]}" ; do + + ## - Create routing table name + ## - + if containsElement "$inet_device" "${dsl_devices_arr[@]}" ; then + __name=`echo $inet_device | cut -d '-' -f2` + rt_name="dsl_$__name" + else + __name=`echo $inet_device | cut -d '-' -f1` + rt_name="static_$__name" + fi + + if ! $_monitoring ; then + + ## - Check if device was reported (from check script) as offline + ## - + _offline=false + if [ -n "$ONLINE_DEVICE_LIST" ]; then + if ! containsElement "$inet_device" "${online_devices_arr[@]}" ; then + _offline=true + fi + else + _offline=true + fi + + ## - Cleanup routing tables + ## - + if $_offline ; then + + if $LOGGING_CONSOLE ; then + echo -e "\n\t[ Error ]: Connection at interface \"$inet_device\" was reported to be down !" + echo -e "\t So device \"$inet_device\" will be excluded from routing." + fi + + echo -e "\n\t[ Error ]: Connection at interface \"$inet_device\" was reported to be down !" >> $log_file + echo -e "\t So device \"$inet_device\" will be excluded from routing." >> $log_file + + ## - Delete all existing entries of this routing table + ## - + echo "" >> $log_file + echo "## - Delete all existing entries of routing table \"$rt_name\"" >> $log_file + echo "## -" >> $log_file + echo "/sbin/ip route flush table $rt_name" >> $log_file + /sbin/ip route flush table $rt_name >> $log_file 2>&1 + + if /sbin/ip rule | grep $rt_name > /dev/null 2>&1 ; then + ## - Delete all rules concerning table $rt_name + ## - + echo "" >> $log_file + echo "## - Delete all rules concerning routing table $rt_name" >> $log_file + echo "## -" >> $log_file + while read line ; do + direction=`echo $line | awk '{print$2}'` + ip=`echo $line | awk '{print$3}'` + echo "/sbin/ip rule delete $direction $ip table $rt_name" >> $log_file + /sbin/ip rule delete $direction $ip table $rt_name + done < <(/sbin/ip rule | grep $rt_name) + echo "" >> $log_file + fi # End: if /sbin/ip rule | grep $rt_name > /dev/null 2>&1 + + continue + + fi # End: if $_offline + fi # End: if ! $_monitoring ; then + + let number_rt_table="$number_rt_table+100" + prio=0 + + + ## - Add new routing table to /etc/iproute2/rt_tables + ## - if not yet exists + ## - + if ! grep $rt_name /etc/iproute2/rt_tables > /dev/null 2>&1 ; then + + echo "" >> $log_file + echo "## - Add new routing table to /etc/iproute2/rt_tables" >> $log_file + echo "## -" >> $log_file + echo "echo \"$number_rt_table $rt_name\" >> /etc/iproute2/rt_tables" >> $log_file + + echo -e "$number_rt_table\t$rt_name" >> /etc/iproute2/rt_tables + fi + + ## - Is the device present and has local Address ? + ## - + local_gw_address=`ifconfig $inet_device 2> /dev/null | grep "inet Adresse" | cut -d":" -f2 | cut -d" " -f1` + if [ -z $local_gw_address ]; then + if $LOGGING_CONSOLE ; then + echo -e "\n\t[ Error ]: Connection at interface \"$inet_device\" seems to be down !" + echo -e "\t No local address was found." + fi + + echo -e "\n\t[ Error ]: Connection at interface \"$inet_device\" seems to be down !" >> $log_file + echo -e "\t No local address was found." >> $log_file + + + ## - Cleanup routing tables + ## - + ## - Delete all existing entries of this routing table + ## - + echo "" >> $log_file + echo "## - Delete all existing entries of this routing table" >> $log_file + echo "## -" >> $log_file + echo "/sbin/ip route flush table $rt_name" >> $log_file + /sbin/ip route flush table $rt_name >> $log_file 2>&1 + + if /sbin/ip rule | grep $rt_name > /dev/null 2>&1 ; then + ## - Delete all rules concerning table $rt_name + ## - + echo "" >> $log_file + echo "## - Delete all rules concerning routing table $rt_name" >> $log_file + echo "## -" >> $log_file + while read line ; do + direction=`echo $line | awk '{print$2}'` + ip=`echo $line | awk '{print$3}'` + echo "/sbin/ip rule delete $direction $ip table $rt_name" >> $log_file + /sbin/ip rule delete $direction $ip table $rt_name + done < <(/sbin/ip rule | grep $rt_name) + echo "" >> $log_file + fi + + continue + fi # End: if [ -z $local_gw_address ] + + ## - Is the DSL-device known and has remote Address ? + ## - + if containsElement "$inet_device" "${dsl_devices_arr[@]}" ; then + remote_gw_address=`ifconfig $inet_device 2> /dev/null | grep "inet Adresse" | cut -d":" -f3 | cut -d" " -f1` + remote_gw_net="$remote_gw_address/32" + else + net_address=`sipcalc $inet_device 2> /dev/null | grep -i -e "^network\s*address\s*-" | awk '{print$4}'` + remote_gw_address=${static_gw_arr[$inet_device]} + _netmask_bits=`sipcalc $inet_device 2> /dev/null | grep -i -e "Network\s*mask\s*(bits)" | awk '{print$5}'` + remote_gw_net="${net_address}/$_netmask_bits" + fi + if [ -z $remote_gw_address ]; then + if $LOGGING_CONSOLE ; then + echo -e "\n\t[ Error ]: Connection at interface \"$inet_device\" seems to be down !" + echo -e "\t No remote gateway was found." + fi + + + echo -e "\n\t[ Error ]: Connection at interface \"$inet_device\" seems to be down !" >> $log_file + echo -e "\t No remote gateway was found." >> $log_file + + ## - Cleanup routing tables + ## - + ## - Delete all existing entries of this routing table + ## - + echo "" >> $log_file + echo "## - Delete all existing entries of this routing table" >> $log_file + echo "## -" >> $log_file + echo "/sbin/ip route flush table $rt_name" >> $log_file + /sbin/ip route flush table $rt_name >> $log_file 2>&1 + + if /sbin/ip rule | grep $rt_name > /dev/null 2>&1 ; then + ## - Delete all rules concerning table $rt_name + ## - + echo "" >> $log_file + echo "## - Delete all rules concerning routing table $rt_name" >> $log_file + echo "## -" >> $log_file + while read line ; do + direction=`echo $line | awk '{print$2}'` + ip=`echo $line | awk '{print$3}'` + echo "/sbin/ip rule delete $direction $ip table $rt_name" >> $log_file + /sbin/ip rule delete $direction $ip table $rt_name + done < <(/sbin/ip rule | grep $rt_name) + echo "" >> $log_file + fi + + continue + fi + + ## - Device already configured by that script? + ## - + if [ ${default_gw_arr[$inet_device]+_} ] ; then + continue + fi + + + # - + # - Ready to start configuration for that device + # - + echo "" >> $log_file + echo "# ---" >> $log_file + if containsElement "$inet_device" "${dsl_devices_arr[@]}" ; then + echo "# --- Routing Table for (DSL) network device \"$inet_device\" was created" >> $log_file + else + echo "# --- Routing Table for (static line) network device \"$inet_device\"" >> $log_file + fi + echo "# ---" >> $log_file + + if $LOGGING_CONSOLE ; then + echo + echo + if containsElement "$inet_device" "${dsl_devices_arr[@]}" ; then + echo -e "\t--- DSL Connection at interface $inet_device" + else + echo -e "\t--- Static Connection at interface $inet_device" + fi + echo -e "\t---" + echo -e "\tRouting Table Name..: $rt_name" + echo + echo -e "\tInterface...........: $inet_device" + echo + echo -e "\tLocal GW address....: $local_gw_address" + echo -e "\tRemote GW address...: $remote_gw_address" + echo -e "\tRemote network......: $remote_gw_net" + echo + fi + echo "# --- Routing Table Name..: $rt_name" >> $log_file + echo "# --- " >> $log_file + echo "# --- Interface...........: $inet_device" >> $log_file + echo "# --- " >> $log_file + echo "# --- Local GW address....: $local_gw_address" >> $log_file + echo "# --- Remote GW address...: $remote_gw_address" >> $log_file + echo "# --- Remote network......: $remote_gw_net" >> $log_file + echo "# --- " >> $log_file + + ## - Read routing table from output of "netstat -rn" + ## - + routing_table_main_arr=() + while read _destination _gateway _genmask _flags _mss _window _irtt _iface; do + if [ "$_destination" = "Destination" -o "$_destination" = "Kernel" \ + -o "$_destination" = "Ziel" -o "$_destination" = "Kernel-IP-Routentabelle" ]; then + continue + fi + routing_table_main_arr+=("$_destination $_gateway $_genmask $_iface") + done < <(netstat -rn) + + ## - First delete all existing entries of this routing table + ## - + echo "" >> $log_file + echo "## - First delete all existing entries of this routing table" >> $log_file + echo "## -" >> $log_file + echo "/sbin/ip route flush table $rt_name" >> $log_file + /sbin/ip route flush table $rt_name >> $log_file 2>&1 + + + ## - Add loopback device to routing table $rt_name + ## - + echo "" >> $log_file + echo "## - Add loopback device to routing table $rt_name " >> $log_file + echo "## -" >> $log_file + echo "/sbin/ip route add 127.0.0.0/8 dev lo table table $rt_name" >> $log_file + /sbin/ip route add 127.0.0.0/8 dev lo table $rt_name >> $log_file 2>&1 + + + ## - Add routing tables of all (local) network interfaces + ## - + echo "" >> $log_file + echo "## - Add routing tables of all (local) network interfaces" >> $log_file + echo "## -" >> $log_file + for _entry in "${routing_table_main_arr[@]}" ; do + dest=`echo $_entry | cut -d " " -f1` + gateway=`echo $_entry | cut -d " " -f2` + genmask=`echo $_entry | cut -d " " -f3` + iface=`echo $_entry | cut -d " " -f4` + + ## - We will set default route later.. + ## - + if [ "$dest" = "0.0.0.0" ]; then + continue + fi + + ## - Is this a "ppp"-device ? + ## - + if [[ "$iface" =~ "ppp" ]]; then + continue + fi + + if [ "$dest" = "$remote_gw_address" ]; then + continue + fi + + if [ "$gateway" = "0.0.0.0" ]; then + echo "/sbin/ip route add ${dest}/$genmask dev $iface table $rt_name" >> $log_file + /sbin/ip route add ${dest}/$genmask dev $iface table $rt_name >> $log_file 2>&1 + else + echo "/sbin/ip route add ${dest}/$genmask via $gateway table $rt_name" >> $log_file + /sbin/ip route add ${dest}/$genmask via $gateway table $rt_name >> $log_file 2>&1 + fi + done + + ## - Add this connection to the routing table + ## - + echo "" >> $log_file + echo "## - Add this connection to the routing table $rt_name" >> $log_file + echo "## -" >> $log_file + + if $USE_REMOTE_GATEWAY_ADDRESS ; then + ## - Remote Network: $remote_gw_net + ## - + echo "/sbin/ip route add $remote_gw_net dev $inet_device src $local_gw_address table $rt_name" >> $log_file + /sbin/ip route add $remote_gw_net dev $inet_device src $local_gw_address table $rt_name >> $log_file 2>&1 + else + ## - Remote Network: 0.0.0.0 + ## - + echo "/sbin/ip route add 0.0.0.0 dev $inet_device src $local_gw_address table $rt_name" >> $log_file + /sbin/ip route add 0.0.0.0 dev $inet_device src $local_gw_address table $rt_name >> $log_file 2>&1 + fi + + if $SET_MULTIPLE_DEFAULT_GW ; then + if /sbin/ip route show table main | grep -e "^$remote_gw_address" | grep $inet_device > /dev/null 2>&1 ; then + echo "" >> $log_file + echo "## - Delete route via (dsl remote) host $remote_gw_address" >> $log_file + echo "## -" + echo "/sbin/ip route delete $remote_gw_address dev $inet_device" >> $log_file + /sbin/ip route delete $remote_gw_address dev $inet_device >> $log_file 2>&1 + fi + + echo "" >> $log_file + echo "## - Add this connection also to the main routing table" >> $log_file + echo "## -" >> $log_file + echo "/sbin/ip route add $remote_gw_net dev $inet_device src $local_gw_address" >> $log_file + /sbin/ip route add $remote_gw_net dev $inet_device src $local_gw_address >> $log_file 2>&1 + fi + + ## - Remeber that route in order to add it to the routing table + ## - of other connections + ## - + gw_connection_arr[$inet_device]="$remote_gw_net $local_gw_address" + + + ## - Add the connections associated gateway as default gateway for this + ## - routing table + ## - + echo "" >> $log_file + echo "## - Add the connections associated gateway as default gateway for this" >> $log_file + echo "## - routing table" >> $log_file + echo "## -" >> $log_file + + if $USE_REMOTE_GATEWAY_ADDRESS ; then + ## - Default Gatway: $remote_gw_address + ## - + #echo "/sbin/ip route add default via $remote_gw_address dev $inet_device table $rt_name" >> $log_file + #/sbin/ip route add default via $remote_gw_address dev $inet_device table $rt_name >> $log_file 2>&1 + echo "/sbin/ip route add default via $remote_gw_address table $rt_name" >> $log_file + /sbin/ip route add default via $remote_gw_address table $rt_name >> $log_file 2>&1 + else + ## - Default Gatway: 0.0.0.0 + ## - + echo "/sbin/ip route add default via 0.0.0.0 dev $inet_device table $rt_name" >> $log_file + /sbin/ip route add default via 0.0.0.0 dev $inet_device table $rt_name >> $log_file 2>&1 + fi + + + ## - Make sure that a reply goes out over the same connection as came in + ## - + echo "" >> $log_file + echo "## - Make sure that a reply goes out over the same connection as came in" >> $log_file + echo "## -" >> $log_file + + if ! /sbin/ip rule | grep "from $local_gw_address" > /dev/null 2>&1 ; then + let prio="$number_rt_table" + echo "/sbin/ip rule add from $local_gw_address table $rt_name prio $prio" >> $log_file + /sbin/ip rule add from $local_gw_address table $rt_name prio $prio >> $log_file 2>&1 + #let prio="10+$prio" + #echo "/sbin/ip rule add to $local_gw_address table $rt_name prio $prio" >> $log_file + #/sbin/ip rule add to $local_gw_address table $rt_name prio $prio >> $log_file 2>&1 + else + let prio="1010+$number_rt_table" + echo -e "#\t[ info ]: Rule already exists.." >> $log_file + fi + + + ## --- + ## --- Special Routing (local) IP-Address OUT + ## --- + + if [[ ${#rule_local_ip_arr[@]} -gt 0 ]] ; then + + let prio="1000+${number_rt_table}+10" + + for _val in "${rule_local_ip_arr[@]}" ; do + + IFS=':' read -a _val_arr <<< "${_val}" + + if [[ "${_val_arr[0]}" = "$inet_device" ]]; then + + echo "" >> $log_file + echo "## - Rule ${prio}: from ${_val_arr[1]} through ${_val_arr[0]}" >> $log_file + echo "## -" >> $log_file + if ! /sbin/ip rule | grep "from ${_val_arr[1]} " > /dev/null 2>&1 ; then + echo "/sbin/ip rule add from ${_val_arr[1]} table $rt_name prio $prio" >> $log_file + /sbin/ip rule add from ${_val_arr[1]} table $rt_name prio $prio >> $log_file 2>&1 + else + echo "# Rule already exists" >> $log_file + fi + prio="10+$prio" + fi + done + fi + + + + ## --- + ## --- Special Routing (remote) Services + ## --- + + if [[ ${#rule_remote_ip_arr[@]} -gt 0 ]] ; then + + let prio="5000+${number_rt_table}+10" + + for _val in "${rule_remote_ip_arr[@]}" ; do + + IFS=':' read -a _val_arr <<< "${_val}" + + if [[ "${_val_arr[0]}" = "$inet_device" ]]; then + + echo "" >> $log_file + echo "## - Rule ${prio}: to ${_val_arr[1]} through ${_val_arr[0]}" >> $log_file + echo "## -" >> $log_file + if ! /sbin/ip rule | grep "to ${_val_arr[1]} " > /dev/null 2>&1 ; then + echo "/sbin/ip rule add to ${_val_arr[1]} table $rt_name prio $prio" >> $log_file + /sbin/ip rule add to ${_val_arr[1]} table $rt_name prio $prio >> $log_file 2>&1 + else + echo "# Rule already exists" >> $log_file + fi + prio="10+$prio" + fi + done + fi + + + ## --- + ## --- Special Routing Networks + ## --- + + if [[ ${#rule_local_net_arr[@]} -gt 0 ]] ; then + + let prio="10000+${number_rt_table}+10" + + for _val in "${rule_local_net_arr[@]}" ; do + + IFS=':' read -a _val_arr <<< "${_val}" + + if [[ "${_val_arr[0]}" = "$inet_device" ]]; then + + echo "" >> $log_file + echo "## - Rule ${prio}: from ${_val_arr[1]} through ${_val_arr[0]}" >> $log_file + echo "## -" >> $log_file + if ! /sbin/ip rule | grep "from ${_val_arr[1]} " > /dev/null 2>&1 ; then + echo "/sbin/ip rule add from ${_val_arr[1]} table $rt_name prio $prio" >> $log_file + /sbin/ip rule add from ${_val_arr[1]} table $rt_name prio $prio >> $log_file 2>&1 + else + echo "# Rule already exists" >> $log_file + fi + prio="10+$prio" + fi + done + fi + + + ## - Add this connection to the routing tables of other already configured dsl-connections + ## - + ## - Note: + ## - Connections which will be configured later at this loop will + ## - not have that connection in their routing tables. So you have + ## - to add missing routes at the end (after that loop has finisched). + ## - + ## - _key is eqal to the ppp-device + ## - + for _key in "${!gw_connection_arr[@]}"; do + + if containsElement "$_key" "${dsl_devices_arr[@]}" ; then + __name=`echo $_key | cut -d '-' -f2` + _rt_name="dsl_$__name" + else + __name=`echo $_key | cut -d '-' -f1` + _rt_name="static_$__name" + fi + if [[ "$_rt_name" == "$rt_name" ]]; then + continue + fi + + _local_gw_address=`echo ${gw_connection_arr[$_key]} | cut -d " " -f2` + _remote_gw_net=`echo ${gw_connection_arr[$_key]} | cut -d " " -f1` + echo "" >> $log_file + echo "## - Add this connection to the routing table \"$_rt_name\"" >> $log_file + echo "## -" >> $log_file + + if $USE_REMOTE_GATEWAY_ADDRESS ; then + ## - Remote Network: $_remote_gw_net + ## - + if ! /sbin/ip route show table $_rt_name | egrep "^$_remote_gw_net\s+dev\s+$_key" >/dev/null 2>&1 ; then + _remote_gw=`echo $_remote_gw_net | cut -d "/" -f1` + if ! /sbin/ip route show table $_rt_name | egrep "^$_remote_gw\s+dev\s+$_key" >/dev/null 2>&1 ; then + echo "/sbin/ip route add $_remote_gw_net dev $_key src $_local_gw_address table $_rt_name" >> $log_file + /sbin/ip route add $_remote_gw_net dev $_key src $_local_gw_address table $_rt_name >> $log_file 2>&1 + else + echo -e "#\t[ info ]: Connection through $_key is already part of table $_rt_name" >> $log_file + fi + fi + else + ## - Remote Network: 0.0.0.0 + ## - + if ! /sbin/ip route show table $_rt_name | egrep "^0.0.0.0\s+dev\s+$_key" >/dev/null 2>&1 ; then + _remote_gw=`echo $_remote_gw_net | cut -d "/" -f1` + if ! /sbin/ip route show table $_rt_name | egrep "^0.0.0.0\s+dev\s+$_key" >/dev/null 2>&1 ; then + echo "/sbin/ip route add 0.0.0.0 dev $_key src $_local_gw_address table $_rt_name" >> $log_file + /sbin/ip route add 0.0.0.0 dev $_key src $_local_gw_address table $_rt_name >> $log_file 2>&1 + else + echo -e "#\t[ info ]: Connection through $_key is already part of table $_rt_name" >> $log_file + fi + fi + fi + done + + + ## - Add this gateway data to the array concerning all outgoing gatways + ## - + #default_gw_arr[$inet_device]="$local_gw_address" + default_gw_arr[$inet_device]="$remote_gw_address" + + + if $SET_MULTIPLE_DEFAULT_GW ; then + + default_gw_arg="" + for _key in "${!default_gw_arr[@]}"; do + + if $USE_DEFAULT_GW_ADDRESS ; then + ## - Default Gateway: $remote_gw_address + ## - + default_gw_arg="$default_gw_arg nexthop via ${default_gw_arr[$_key]} dev $_key weight 1" + else + ## - Default Gateway: 0.0.0.0 + ## - + default_gw_arg="$default_gw_arg nexthop via 0.0.0.0 dev $_key weight 1" + fi + + done + if [ -n "$default_gw_arg" ] ; then + echo "" >> $log_file + echo "## - Add multiple default gateways" >> $log_file + echo "## -" >> $log_file + echo "/sbin/ip route delete default" >> $log_file + /sbin/ip route delete default >> $log_file 2>&1 + echo "/sbin/ip route add default scope global $default_gw_arg" >> $log_file + /sbin/ip route add default scope global $default_gw_arg >> $log_file 2>&1 + else + echo "" >> $log_file + echo "## -" >> $log_file + echo "## - [ Warning]: No default gateway found!" >> $log_file + echo "## -" >> $log_file + fi + + fi + + + + ## - Notice: + ## - It is possible to first make a number of changes and then flush + ## - the cache so that all of the changes will be implemented simultaneously. + ## - This is actually convenient when working on an active router. + ## - + echo "" >> $log_file + echo "## - Flush table cache" >> $log_file + echo "## -" >> $log_file + echo "/sbin/ip route flush table cache" >> $log_file + /sbin/ip route flush table cache >> $log_file 2>&1 + + echo "" >> $log_file + + if [ ${#default_gw_arr[@]} -eq ${#inet_devices_arr[@]} ]; then + configured=true + fi + + done + +done + + +## - Some dsl-connections maybe not known to all routing tables. So add +## - the missing routes to the appropriate tables.. +## - +echo "" >> $log_file +echo "" >> $log_file +echo "## - Some dsl-connections maybe not known to all routing tables. So add" >> $log_file +echo "## - the missing routes to the appropriate tables.." >> $log_file +echo "## -" >> $log_file +_changed=false + +if $USE_REMOTE_GATEWAY_ADDRESS ; then + ## - Remote Network: $_remote_gw_net + ## - + for _key in "${!gw_connection_arr[@]}"; do + + if containsElement "$_key" "${dsl_devices_arr[@]}" ; then + __name=`echo $_key | cut -d '-' -f2` + _rt_name="dsl_$__name" + else + __name=`echo $_key | cut -d '-' -f1` + _rt_name="static_$__name" + fi + + echo "# Routing Table \"$_rt_name\"" >> $log_file + for __key in "${!gw_connection_arr[@]}"; do + _local_gw_address=`echo ${gw_connection_arr[$__key]} | cut -d " " -f2` + _remote_gw_net=`echo ${gw_connection_arr[$__key]} | cut -d " " -f1` + if ! /sbin/ip route show table $_rt_name | egrep "^$_remote_gw_net\s+dev\s+$__key" >/dev/null 2>&1 ; then + _remote_gw=`echo $_remote_gw_net | cut -d "/" -f1` + if ! /sbin/ip route show table $_rt_name | egrep "^$_remote_gw\s+dev\s+$__key" >/dev/null 2>&1 ; then + #echo "/sbin/ip route add $_remote_gw_net dev $_key src $_local_gw_address table $_rt_name" >> $log_file + #/sbin/ip route add $_remote_gw_net dev $__key src $_local_gw_address table $_rt_name >> $log_file 2>&1 + echo "/sbin/ip route add $_remote_gw dev $__key table $_rt_name" >> $log_file + /sbin/ip route add $_remote_gw dev $__key table $_rt_name >> $log_file 2>&1 + _changed=true + else + echo -e "#\t[ info ]: Connection through $__key is already part of table $_rt_name" >> $log_file + fi + fi + done + done +else + ## - Remote Network: 0.0.0.0 + ## - + for _key in "${!gw_connection_arr[@]}"; do + + + if containsElement "$_key" "${dsl_devices_arr[@]}" ; then + __name=`echo $_key | cut -d '-' -f2` + _rt_name="dsl_$__name" + else + __name=`echo $_key | cut -d '-' -f1` + _rt_name="static_$__name" + fi + + echo "# Routing Table \"$_rt_name\"" >> $log_file + for __key in "${!gw_connection_arr[@]}"; do + _local_gw_address=`echo ${gw_connection_arr[$__key]} | cut -d " " -f2` + _remote_gw_net=`echo ${gw_connection_arr[$__key]} | cut -d " " -f1` + if ! /sbin/ip route show table $_rt_name | egrep "^0.0.0.0\s+dev\s+$__key" >/dev/null 2>&1 ; then + _remote_gw=`echo $_remote_gw_net | cut -d "/" -f1` + if ! /sbin/ip route show table $_rt_name | egrep "^0.0.0.0\s+dev\s+$__key" >/dev/null 2>&1 ; then + echo "/sbin/ip route add 0.0.0.0 dev $_key src $_local_gw_address table $_rt_name" >> $log_file + /sbin/ip route add 0.0.0.0 dev $__key src $_local_gw_address table $_rt_name >> $log_file 2>&1 + _changed=true + else + echo -e "#\t[ info ]: Connection through $__key is already part of table $_rt_name" >> $log_file + fi + fi + done + done +fi + + +## - If not using multiple default gatways, set the default gateway here +## - +if ! $SET_MULTIPLE_DEFAULT_GW ; then + + __set_default_gatway=false + + echo "" >> $log_file + echo "" >> $log_file + echo "## ---" >> $log_file + echo "## --- Add default gateway" >> $log_file + echo "## ---" >> $log_file + + ## - Note: the first online device will become default route + ## - + for _device in "${inet_devices_arr[@]}" ; do + ## - Device online ? + if [ -n "${default_gw_arr[$_device]}" ]; then + echo "/sbin/ip route delete default" >> $log_file + /sbin/ip route delete default >> $log_file 2>&1 + if $USE_REMOTE_GATEWAY_ADDRESS ; then + echo "/sbin/ip route add default via ${default_gw_arr[$_device]} dev $_device" >> $log_file + /sbin/ip route add default via ${default_gw_arr[$_device]} dev $_device >> $log_file 2>&1 + else + echo "/sbin/ip route add default via 0.0.0.0 dev $_device" >> $log_file + /sbin/ip route add default via 0.0.0.0 dev $_device >> $log_file 2>&1 + fi + __set_default_gatway=true + _changed=true + break + else + echo "" >> $log_file + echo -e "\t[ Warning ]: $_device is OFFLINE ! Trying next.." >> $log_file + fi + done + if ! $__set_default_gatway ; then + + echo "" >> $log_file + echo -e "\t[ Error ]: No connection is online!" >> $log_file + echo -e "\t Try to set default gateway from an existing static line .." >> $log_file + + ## - Notice: + ## - + ## - If no connection is available (the machine is fully offline), the check script will not + ## - recognize, if the static line becomes online. A way to handle this is to let the + ## - default gateway active. + ## - + default_gw_deleted=false + for _device in "${inet_devices_arr[@]}" ; do + if containsElement "$_device" "${static_devices_arr[@]}" ; then + + ## - Delete old default route + ## - + if ! $default_gw_deleted ; then + echo "" >> $log_file + echo "## - Delete existing default gatewy" >> $log_file + echo "## - " >> $log_file + echo "/sbin/ip route delete default" >> $log_file + /sbin/ip route delete default >> $log_file 2>&1 + default_gw_deleted=true + fi + + ## - Set new default route + ## - + + echo "" >> $log_file + echo "## - Try to set default gateway to ${static_gw_arr[$_device]}.." >> $log_file + echo "## - " >> $log_file + echo "/sbin/ip route add default via ${static_gw_arr[$_device]} dev $_device" >> $log_file + /sbin/ip route add default via ${static_gw_arr[$_device]} dev $_device >> $log_file 2>&1 + + if [[ "$?" == 0 ]] ; then + __set_default_gatway=true + break + fi + fi + done + + if ! $__set_default_gatway ; then + echo "" >> $log_file + echo -e "\t[ Error ]: No default gateway is set!" >> $log_file + fi + fi +fi + +## - Flush the routing tables cache if somethimg has changed +## - +if $_changed ; then + echo "" >> $log_file + echo "" >> $log_file + echo "## - Some Routing tables has changed, so flush table cache" >> $log_file + echo "## -" >> $log_file + echo "/sbin/ip route flush table cache" >> $log_file + /sbin/ip route flush table cache >> $log_file 2>&1 +fi + +if $_monitoring ; then + echo "" >> $log_file + echo "" >> $log_file + echo "## - Starting monitoring script to check dsl connections.." >> $log_file + echo "## -" >> $log_file + + if [[ -z "${!default_gw_arr[@]}" ]] ; then + echo "$check_script $INITIAL_DEVICE_LIST &" >> $log_file 2>&1 + $check_script $INITIAL_DEVICE_LIST & + else + + _LIST= + for _device in ${!default_gw_arr[@]} ; do + _LIST="$_LIST $_device" + done + _LIST=`echo "${_LIST}" | sed -e 's/^[ \t]*//'` + + echo "$check_script -l \"$_LIST\" $INITIAL_DEVICE_LIST &" >> $log_file 2>&1 + $check_script -l "$_LIST" $INITIAL_DEVICE_LIST & + fi +fi + +echo "" >> $log_file +echo "### -------------------------" >> $log_file + +exit 0 diff --git a/NONE-CKUBU/src/check_net b/NONE-CKUBU/src/check_net index 6bde0e7..0e55b1a 160000 --- a/NONE-CKUBU/src/check_net +++ b/NONE-CKUBU/src/check_net @@ -1 +1 @@ -Subproject commit 6bde0e7c07c4d0ee8cc6f6aa37c49608fe924a5b +Subproject commit 0e55b1a6c5f700e8a233fc950ddb49a5b33a8b93 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/CHANGES b/NONE-CKUBU/src/djbdns/djbdns-1.05/CHANGES new file mode 100644 index 0000000..2442a0c --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/CHANGES @@ -0,0 +1,376 @@ +19991129 + version: dnscache 0.50, alpha. not released yet. +19991223 + version: dnscache 0.60, alpha. +19991224 + internal: dns_sortip() takes length argument. + api: dns_ip4() sorts output. currently this means just random. + api: added socket_bind4_reuse(). removed reuse from bind4(). + ui: used bind4_reuse() for port 53, bind4() otherwise. + internal: eliminated some unused variables. + internal: prototypes in cdb.h, cdbmake.h, cdbmss.h. + internal: prototypes in case.h, env.h, fmt.h, scan.h, str.h. + internal: prototypes in stralloc.h. + internal: prototypes in error.h, strerr.h. + internal: prototypes in ndelay.h, open.h, seek.h. + internal: prototypes in sgetopt.h, subgetopt.h. + internal: prototypes in tai.h, taia.h. + internal: added some missing declarations. + bug: query.c checked void response_finishanswer() return code. + impact: cached responses were dropped on systems that + didn't follow the traditional C return behavior. fix: + obvious. tnx Giles Lean. + internal: switched from taia_addsec() to taia_uint(). + api: switched to uint16 for socket_* port numbers. + internal: integrated uint16_pack() and friends. + ui: dnscache allows (recursive) queries from port 53. + ui: dnscache has 10-second idle timer on TCP read/write. + ui: dnscache limits itself to 20 concurrent TCP connections. + internal: moved dns_domain_fromdot() to separate file. + ui: supported \X, \1, \12, \123 in dns_domain_fromdot(). + ui: supported \123 in dns_domain_todot_append(). + version: dnscache 0.61, alpha. +19991230 + api: added dns_ip4_qualify(). + api: added dns_resolvconfrewrite(). + ui: added dnsipq. + api: dns_ip4() checks for (strings of) IP addresses. +20000106 + port: Solaris needs /dev/udp, not just /dev/tcp. impact: + dnscache and tinydns would stop immediately under + Solaris. fix: create /dev/udp in configure; and have + tinydns create socket before chroot. tnx Louis Theran. + internal: moved dns_name4_domain() to dns_nd.c. + ui: tinydns no longer excludes screwy queries from its log. + internal: moved respond() to tdlookup.c under new name. + ui: added tinydns-get. + ui: rewrote tinydns-data for new data format. + internal: expanded rts to cover tinydns-data using tinydns-get. +20000107 + ui: tinydns-data allows arbitrary case in domain names. + ui: dnscache supports preconfigured servers for non-root + domains. + ui: dnscache uses textual addresses for preconfigured servers. +20000108 + ui: tinydns-data excludes the additional and authority sections + if doing so helps meet the 512-byte UDP limit. + version: dnscache 0.70, beta. +20000114 + internal: in log.c, ulong() now prints a uint64. + internal: added cache_motion, query_count, log_stats. + ui: dnscache now prints queries/motion stats after typical + response packets. +20000115 + internal: added droproot.c. used in tinydns and dnscache. + internal: moved tinydns log() to qlog.c under new name. + ui: added walldns, configure-wd. + ui: configure-td now creates an empty root/data. + ui: added tinydns-edit. + ui: configure-td now sets up root/add-{ns,childns,host,mx}. +20000116 + ui: renamed configure* as *-conf. + ui: added axfrdns, axfrdns-conf. + ui: added axfr-get. + ui: dnscache-conf 10.* or 192.168.* now sets IPSEND=0.0.0.0. +20000117 + ui: added pickdns, pickdns-conf, pickdns-data. + version: dnscache 0.75, beta. +20000118 + internal: address* -> address_* in pickdns-data.c. + internal: start writing cdb earlier in pickdns-data.c. + internal: keep track of namelen in pickdns-data.c. + ui: added client-location variability to pickdns, pickdns-data. + ui: qlog logs short packets. + ui: qlog logs header if RD or other unusual bits are set. + ui: qlog logs non-Internet classes. + api: dns_domain_todot_append() -> dns_domain_todot_cat(). + ui: axfr-get prints A records more nicely. tnx Russ Nelson. + ui: tinydns, pickdns, and walldns respond REFUSED to multiple + queries, strange classes, and strange header bits. + pickdns and walldns also respond REFUSED to unrecognized + domain names. +20000120 + ui: dns_resolvconfip() and dns_resolvconfrewrite() reread after + 10 minutes or 10000 uses. + ui: dns_resolvconfrewrite() treats "domain" like "search". + ui: dns_resolvconfrewrite() supports $LOCALDOMAIN. + ui: dns_resolvconfrewrite() supports gethostname(). + api: dns_ip4_qualify() -> dns_ip4_qualify_rules(). new function + under the old name uses dns_resolvconfrewrite(). + internal: cleaned up log.h. +20000121 + port: the gcc 2.95.2 -O2 optimizer can destroy parameters in a + function that calls another function with a long long + argument. impact: gcc 2.95.2 kills dnscache in + log_query(). fix: pass log_stats() inputs by reference, + and pass uint64's through a variable inside log.c. + internal: introduced x_* in axfr-get. + internal: more format verification in axfr-get. + ui: minimal Z support in tinydns-data. + ui: axfr-get prints Z lines. + ui: juggled axfr-get to support BIND 8's many-answers option. + ui: axfr-get prints common characters readably rather than in + octal. tnx Karsten Thygesen. + ui: install copies VERSION into .../etc. +20000122 + ui: dns_domain_todot_cat() now lowercases everything. + internal: split printrecord.c out of tinydns-get. + ui: added dnstrace. +20000123 + version: dnscache 0.76, beta. +20000124 + port: Solaris needs socket libraries for dnstrace. impact: + couldn't compile under Solaris. fix: use socket.lib. + tnx Karsten Thygesen. +20000126 + ui: dns_resolvconfip() supports $DNSCACHEIP. + ui: changed tinydns-get arg order. + internal: split printpacket.c out of tinydns-get. + ui: added dnsquery. + internal: merged case.a, fs.a, str.a, uint.a, ip4.a into byte.a. + internal: merged strerr.a into buffer.a. + internal: merged stralloc.a, getln.a into alloc.a. + internal: merged error.a, open.a, seek.a, ndelay.a, socket.a + into unix.a. + internal: used catulong in axfr-get.c. + ui: packet-parsing errors produce error_proto. + ui: axfr-get goes out of its way to reject wildcards. + internal: introduced generic-conf.c. + internal: upgraded timeoutread and timeoutwrite to iopause. +20000127 + ui: revamped details of the log formats. + ui: full Z support in tinydns-data. + ui: axfr-get accepts authority records and additional records. + ui: axfrdns tries to imitate BIND's handling of glue. + internal: expanded rts to try out the servers and *-conf. + ui: added rbldns. +20000128 + ui: increased MAXNS to 16 in query.h. +20000129 + version: DNScache 0.80, beta. +20000205 + ui: tinydns-data supports ^, for the benefit of people stuck + behind reverse CNAMEs. tnx Petr Novotny. +20000206 + ui: rbldns supports $. + ui: tinydns-data supports C. CNAME is overridden by NS; CNAME + overrides other records; no multiple CNAMEs. + ui: axfr-get supports C. + ui: axfr-get no longer rejects wildcards, except for NS. + internal: eliminated flagempty from tinydns-data. + internal: cleaned up delegation/NXDOMAIN loops in tinydns-data. + internal: reorganized packet_start interface in tinydns-data. + ui: tinydns-data supports BIND-style wildcards, except for NS. + version: DNScache 0.81, beta. +20000207 + ui: renamed dnsquery as dnsq, to eliminate name conflict with + Beecher dnsquery program. tnx Anand Buddhdev. +20000208 + ui: tinydns-edit supports add alias. + ui: tinydns-conf sets up root/add-alias. +20000209 + ui: dnscache-conf now sets IPSEND=0.0.0.0 in all cases. + ui: dnsq and dnstrace allow server names. + ui: dnsq and dnstrace allow type names. +20000210 + internal: response_tc() reduces len, simplifying udprespond(). + ui: response_tc() now truncates immediately after query. this + should work around the Squid parsing bug reported by + Stuart Henderson. +20000211 + ui: tinydns-get allows type names. + ui: tinydns-data prints query name for >512 error. tnx Uwe Ohse. + version: DNScache 0.82, beta. +20000212 + ui: dns_transmit starts with loop 1 for recursive queries. + ui: dnscache tries to allocate 128K of incoming UDP buffer + space. tnx Jeremy Hansen. +20000213 + ui: tinydns tries to allocate 64K of incoming UDP buffer space. + internal: renamed response_*answer as response_r*. + internal: expanded response_rfinish to allow au and ar. + internal: expanded response_rstart to allow any ttl. + internal: rewrote tinydns-data, tinydns, tinydns-get, axfrdns + for compact new data.cdb format. a few ui effects: empty + nodes produce NXDOMAIN; wildcards affect empty nodes. + ui: response_addname() tries more extensive compression. +20000215 + ui: tinydns-edit takes fn arguments. tnx Jason R. Mastaler. +20000218 + internal: upgraded to new cdb library. + internal: added globalip(). + ui: dnscache assigns IP addresses to dotted-decimal domain + names in canonical form. + internal: merged handling of C and ^ in tinydns-data. + port: FreeBSD 3.4-RELEASE poll() doesn't think that regular + files are readable. impact: under FreeBSD 3.4-RELEASE, + dnsfilter hangs waiting to read from regular files. tnx + Kenji Rikitake. fix: check for this bug in trypoll.c. +20000219 + ui: tinydns-data supports time-to-die. + ui: changed home directory from /usr/local/dnscache to + /usr/local; moved @ from home/etc to home/etc/dnscache. + internal: reorganized response.c. +20000220 + ui: tinydns-data allows omitted numeric fields in Z lines. tnx + Timothy L. Mayo. + version: DNScache 0.85, beta. +20000222 + ui: dns_transmit_get() pauses after server failure, if udploop + is 2. + internal: sped up name handling in response.c. +20000223 + ui: dnscache ignores some garbage in queries: AA, !RD, RA, Z, + RCODE, AN, AU, AR. (note that responses still say RD.) + this allows bogus queries from Ultrix versions of BIND. + internal: split dd.c out of query.c. + internal: split server.c out of tinydns. + internal: rewrote walldns, pickdns, rbldns to use server.c. + ui: server.c allows some garbage in queries: RA, Z, RCODE, AN, + AU, AR. + ui: axfrdns logs packets. + ui: walldns supports dotted-decimal IP addresses. +20000224 + ui: revamped qlog, again. + ui: better error message in dnscache-conf.c. tnx Chris Johnson. +20000225 + version: DNScache 0.90, gamma. +20000226 + internal: dnscache-conf sets up dnscache/run to avoid env. tnx + Chris Cappuccio. +20000227 + ui: tinydns-data uses server name instead of a.ns.domain for + automatic primary in SOA. tnx Frank Tegtmeyer. +20000228 + bug: axfrdns doesn't set aa bit in responses. impact: named-xfer + refuses to do zone transfers from axfrdns. fix: set aa + bit. tnx Peter Hunter. + ui: server.c now accepts packets from low ports. sigh. +20000229 + version: DNScache 0.91, gamma. +20000307 + internal: switched from slurp to openreadclose. +20000308 + ui: dns_transmit_get() pauses after recv() failure (such as + connection-refused), if udploop is 2. + ui: tinydns-data uses refresh 16384, retry 2048, expire 1048576. + tnx Frank Tegtmeyer. + version: DNScache 0.92, gamma. +20000314 + portability problem: the poll() emulation in RedHat 5.1 doesn't + clear revents when select() returns 0. tnx Petr Novotny. + impact: dns_transmit_get() never times out; + dns_resolve() busy-loops. fix: clear revents before + poll(). +20000315 + ui: axfr-get grabs zones when serials drop. tnx Frank Tegtmeyer. + version: DNScache 0.93, gamma. +20000323 + ui: dns_rcip() accepts 0.0.0.0 in /etc/resolv.conf as 127.0.0.1. + tnx Chris Saia. +20000325 + version: DNScache 1.00. +20000914 + ui: axfr-get decodes PTR. tnx to various people. + ui: added dnsqr. +20000915 + portability problem: on some buggy kernels, accept() fails to + copy O_NONBLOCK. tnx Pavel Kankovsky. impact: with these + kernels, dnscache hangs if a TCP connection times out. + fix: ndelay_on() after accept(). + ui: dnscache discards non-recursive queries. + ui: *-conf use envdir in */run. + internal: reorganized seed_addtime() calls in dnscache-conf. + ui: tinydns-data prohibits PTR in generic records. +20000917 + ui: dns_transmit_get() does not pause after most recv() errors. + still pauses after connection-refused when udploop is 2. + version: djbdns 1.01. +20000922 + portability problem: Linux distributions use bash as /bin/sh; + bash destroys $UID. dorks. impact: dnscache and axfrdns + run as root. fix: envdir, then sh, then envuidgid. but + /bin/sh really has to stop polluting the environment. +20000923 + ui: install /etc/dnsroots.global. dnscache-conf tries + dnsroots.local, then dnsroots.global. + ui: no longer install home/etc/dnscache. + version: djbdns 1.02. +20001224 + ui: new dnstrace output format. + ui: dnstrace shows all servers providing each ns/a line. + ui: added dnstracesort. +20001225 + internal: response_rstart() and response_cname() use uint32 ttl. + internal: added response_hidettl(). + internal: cache_get() returns ttl. + internal: dnscache keeps track of ttls for aliases. + ui: dnscache returns ttl unless $HIDETTL is set. + ui: dnscache returns ttl 655360 for localhost et al. +20001226 + ui: dnscache supports $FORWARDONLY. tnx to several people for + the suggestion. tnx Dan Peterson for sample code. + ui: dnscache now logs sequential query numbers, not indices. + internal: revamped dnscache to separate udp from tcp. + ui: dnscache reports uactive, tactive separately. + ui: dnscache reports tcpopen/tcpclose by port and ip. + ui: dnscache artificially times out oldest UDP query if UDP + table is full, and oldest TCP connection if TCP table is + full. + ui: dnscache reports broken pipe when a TCP client sends FIN. +20001228 + ui: dnstrace supports dd. + ui: dnscache logs stats when it handles 1.0.0.127.in-addr.arpa. + ui: pickdns actively refuses queries for unknown types. + ui: pickdns responds to MX queries. tnx Mike Batchelor. + internal: added const at various places. + internal: removed some unused variables. + internal: used time_t in tai_now.c. + internal: used stdlib.h in alloc.c. + api: split dns_domain_suffix() into suffix(), suffixpos(). + internal: switched to buffer_unix*. + internal: included unistd.h for various declarations. +20010103 + ui: increased maximum data size from 512 bytes to 32767 bytes in + tinydns, tinydns-get, axfrdns. allows big TXT records. + ui: dnsmx reformats name when it prints an artificial 0 MX. +20010105 + ui: increased MAXLEVEL to 5. the Internet is becoming more + glueless every day. +20010106 + version: djbdns 1.03. +20010113 + ui: increased MAXALIAS to 16. + ui: dnscache no longer caches SERVFAIL. per-ip is obviously the + way to go. + ui: tinydns et al. now respond FORMERR to non-Internet-class + queries. + ui: tdlookup now returns A records in a random order in the + answer section, and truncates the list after 8 records. + ui: tinydns-data skips lines starting -. +20010114 + internal: documented the tinydns data.cdb format. + ui: tinydns-data, tinydns, tinydns-get, axfrdns support client + differentiation. + ui: dnsqr aborts if it is given an extra argument. +20010117 + ui: dnstracesort removes duplicate lines. + ui: dnstracesort prints glue. + ui: dnstrace uses a ``start'' IP address for the root glue. +20010121 + version: djbdns 1.04. +20010206 + internal: response_query() takes a class argument. + internal: query_start() takes a class argument. + internal: packetquery() takes a class argument. + ui: tinydns et al., axfrdns, and dnscache repeat qclass * in + response to bogus * queries. tnx Mike Batchelor. + ui: axfrdns rejects queries for weird classes. + ui: axfrdns uses query ID instead of ID 0 in the series of AXFR + response messages between the SOAs, to support the AXFR + client in BIND 9. + ui: axfrdns sets AA in the series of AXFR response messages. +20010211 + ui: servers print starting message. + internal: some respond() declarations. + version: djbdns 1.05. diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/FILES b/NONE-CKUBU/src/djbdns/djbdns-1.05/FILES new file mode 100644 index 0000000..27a4e26 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/FILES @@ -0,0 +1,254 @@ +README +TODO +CHANGES +VERSION +FILES +SYSDEPS +TARGETS +Makefile +dnsroots.global +TINYDNS +conf-cc +conf-ld +conf-home +rts.sh +rts.tests +rts.exp +dnscache-conf.c +hasdevtcp.h1 +hasdevtcp.h2 +dnscache.c +server.c +walldns-conf.c +walldns.c +rbldns-conf.c +rbldns.c +rbldns-data.c +pickdns-conf.c +pickdns.c +pickdns-data.c +dnsipq.c +tinydns-conf.c +tinydns.c +tdlookup.c +tinydns-get.c +tinydns-data.c +tinydns-edit.c +axfrdns-conf.c +axfrdns.c +axfr-get.c +dnsip.c +dnsname.c +dnstxt.c +dnsmx.c +dnsfilter.c +random-ip.c +dnsqr.c +dnsq.c +dnstrace.c +dnstracesort.sh +utime.c +cachetest.c +generic-conf.h +generic-conf.c +dd.h +dd.c +droproot.h +droproot.c +response.h +response.c +query.h +query.c +cache.h +cache.c +log.h +log.c +okclient.h +okclient.c +roots.h +roots.c +qlog.h +qlog.c +printrecord.h +printrecord.c +printpacket.h +printpacket.c +parsetype.h +parsetype.c +dns.h +dns_dfd.c +dns_domain.c +dns_dtda.c +dns_ip.c +dns_ipq.c +dns_mx.c +dns_name.c +dns_nd.c +dns_packet.c +dns_random.c +dns_rcip.c +dns_rcrw.c +dns_resolve.c +dns_sortip.c +dns_transmit.c +dns_txt.c +choose.sh +warn-auto.sh +find-systype.sh +trycpp.c +x86cpuid.c +alloc.c +alloc.h +alloc_re.c +auto-str.c +auto_home.h +buffer.c +buffer.h +buffer_1.c +buffer_2.c +buffer_copy.c +buffer_get.c +buffer_put.c +byte.h +byte_chr.c +byte_copy.c +byte_cr.c +byte_diff.c +byte_zero.c +case.h +case_diffb.c +case_diffs.c +case_lowerb.c +cdb.c +cdb.h +cdb_hash.c +cdb_make.c +cdb_make.h +chkshsgr.c +direntry.h1 +direntry.h2 +env.c +env.h +error.c +error.h +error_str.c +exit.h +fmt.h +fmt_ulong.c +fmt_xlong.c +gen_alloc.h +gen_allocdefs.h +getln.c +getln.h +getln2.c +hasshsgr.h1 +hasshsgr.h2 +hier.c +install.c +instcheck.c +iopause.c +iopause.h1 +iopause.h2 +ip4.h +ip4_fmt.c +ip4_scan.c +ip6.h +ip6_fmt.c +ip6_scan.c +ndelay.h +ndelay_off.c +ndelay_on.c +open.h +open_read.c +open_trunc.c +openreadclose.c +openreadclose.h +prot.c +prot.h +readclose.c +readclose.h +scan.h +scan_0x.c +scan_ulong.c +seek.h +seek_set.c +select.h1 +select.h2 +sgetopt.c +sgetopt.h +socket.h +socket_accept.c +socket_bind.c +socket_conn.c +socket_listen.c +socket_recv.c +socket_send.c +socket_tcp.c +socket_udp.c +str.h +str_chr.c +str_diff.c +str_len.c +str_rchr.c +str_start.c +stralloc.h +stralloc_cat.c +stralloc_catb.c +stralloc_cats.c +stralloc_copy.c +stralloc_eady.c +stralloc_num.c +stralloc_opyb.c +stralloc_opys.c +stralloc_pend.c +strerr.h +strerr_die.c +strerr_sys.c +subgetopt.c +subgetopt.h +tai.h +tai_add.c +tai_now.c +tai_pack.c +tai_sub.c +tai_uint.c +tai_unpack.c +taia.h +taia_add.c +taia_approx.c +taia_frac.c +taia_less.c +taia_now.c +taia_pack.c +taia_sub.c +taia_tai.c +taia_uint.c +timeoutread.c +timeoutread.h +timeoutwrite.c +timeoutwrite.h +trydrent.c +trylsock.c +trypoll.c +tryshsgr.c +trysysel.c +tryulong32.c +tryulong64.c +uint16.h +uint16_pack.c +uint16_unpack.c +uint32.h1 +uint32.h2 +uint32_pack.c +uint32_unpack.c +uint64.h1 +uint64.h2 +warn-shsgr +buffer_read.c +buffer_write.c +dns_nd6.c +socket_udp6.c +socket_getifidx.c +tryn2i.c +haven2i.h1 +haven2i.h2 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/Makefile b/NONE-CKUBU/src/djbdns/djbdns-1.05/Makefile new file mode 100644 index 0000000..44bd989 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/Makefile @@ -0,0 +1,1226 @@ +# Don't edit Makefile! Use conf-* for configuration. + +SHELL=/bin/sh + +default: it + +alloc.a: \ +makelib alloc.o alloc_re.o getln.o getln2.o stralloc_cat.o \ +stralloc_catb.o stralloc_cats.o stralloc_copy.o stralloc_eady.o \ +stralloc_num.o stralloc_opyb.o stralloc_opys.o stralloc_pend.o + ./makelib alloc.a alloc.o alloc_re.o getln.o getln2.o \ + stralloc_cat.o stralloc_catb.o stralloc_cats.o \ + stralloc_copy.o stralloc_eady.o stralloc_num.o \ + stralloc_opyb.o stralloc_opys.o stralloc_pend.o + +alloc.o: \ +compile alloc.c alloc.h error.h + ./compile alloc.c + +alloc_re.o: \ +compile alloc_re.c alloc.h byte.h + ./compile alloc_re.c + +auto-str: \ +load auto-str.o buffer.a unix.a byte.a + ./load auto-str buffer.a unix.a byte.a + +auto-str.o: \ +compile auto-str.c buffer.h exit.h + ./compile auto-str.c + +auto_home.c: \ +auto-str conf-home + ./auto-str auto_home `head -1 conf-home` > auto_home.c + +auto_home.o: \ +compile auto_home.c + ./compile auto_home.c + +axfr-get: \ +load axfr-get.o iopause.o timeoutread.o timeoutwrite.o dns.a libtai.a \ +alloc.a buffer.a unix.a byte.a + ./load axfr-get iopause.o timeoutread.o timeoutwrite.o \ + dns.a libtai.a alloc.a buffer.a unix.a byte.a + +axfr-get.o: \ +compile axfr-get.c uint32.h uint16.h stralloc.h gen_alloc.h error.h \ +strerr.h getln.h buffer.h stralloc.h buffer.h exit.h open.h scan.h \ +byte.h str.h ip4.h timeoutread.h timeoutwrite.h dns.h stralloc.h \ +iopause.h taia.h tai.h uint64.h taia.h + ./compile axfr-get.c + +axfrdns: \ +load axfrdns.o iopause.o droproot.o tdlookup.o response.o qlog.o \ +prot.o timeoutread.o timeoutwrite.o dns.a libtai.a alloc.a env.a \ +cdb.a buffer.a unix.a byte.a + ./load axfrdns iopause.o droproot.o tdlookup.o response.o \ + qlog.o prot.o timeoutread.o timeoutwrite.o dns.a libtai.a \ + alloc.a env.a cdb.a buffer.a unix.a byte.a + +axfrdns-conf: \ +load axfrdns-conf.o generic-conf.o auto_home.o buffer.a unix.a byte.a + ./load axfrdns-conf generic-conf.o auto_home.o buffer.a \ + unix.a byte.a + +axfrdns-conf.o: \ +compile axfrdns-conf.c strerr.h exit.h auto_home.h generic-conf.h \ +buffer.h + ./compile axfrdns-conf.c + +axfrdns.o: \ +compile axfrdns.c droproot.h exit.h env.h uint32.h uint16.h ip4.h \ +tai.h uint64.h buffer.h timeoutread.h timeoutwrite.h open.h seek.h \ +cdb.h uint32.h stralloc.h gen_alloc.h strerr.h str.h byte.h case.h \ +dns.h stralloc.h iopause.h taia.h tai.h taia.h scan.h qlog.h uint16.h \ +response.h uint32.h + ./compile axfrdns.c + +buffer.a: \ +makelib buffer.o buffer_1.o buffer_2.o buffer_copy.o buffer_get.o \ +buffer_put.o strerr_die.o strerr_sys.o + ./makelib buffer.a buffer.o buffer_1.o buffer_2.o \ + buffer_copy.o buffer_get.o buffer_put.o strerr_die.o \ + strerr_sys.o + +buffer.o: \ +compile buffer.c buffer.h + ./compile buffer.c + +buffer_1.o: \ +compile buffer_1.c buffer.h + ./compile buffer_1.c + +buffer_2.o: \ +compile buffer_2.c buffer.h + ./compile buffer_2.c + +buffer_copy.o: \ +compile buffer_copy.c buffer.h + ./compile buffer_copy.c + +buffer_get.o: \ +compile buffer_get.c buffer.h byte.h error.h + ./compile buffer_get.c + +buffer_put.o: \ +compile buffer_put.c buffer.h str.h byte.h error.h + ./compile buffer_put.c + +buffer_read.o: \ +compile buffer_read.c buffer.h + ./compile buffer_read.c + +buffer_write.o: \ +compile buffer_write.c buffer.h + ./compile buffer_write.c + +byte.a: \ +makelib byte_chr.o byte_copy.o byte_cr.o byte_diff.o byte_zero.o \ +case_diffb.o case_diffs.o case_lowerb.o fmt_ulong.o ip4_fmt.o \ +ip4_scan.o scan_ulong.o str_chr.o str_diff.o str_len.o str_rchr.o \ +str_start.o uint16_pack.o uint16_unpack.o uint32_pack.o \ +uint32_unpack.o ip6_fmt.o ip6_scan.o fmt_xlong.o \ +scan_xlong.o + ./makelib byte.a byte_chr.o byte_copy.o byte_cr.o \ + byte_diff.o byte_zero.o case_diffb.o case_diffs.o \ + case_lowerb.o fmt_ulong.o ip4_fmt.o ip4_scan.o scan_ulong.o \ + str_chr.o str_diff.o str_len.o str_rchr.o str_start.o \ + uint16_pack.o uint16_unpack.o uint32_pack.o uint32_unpack.o \ + ip6_fmt.o ip6_scan.o fmt_xlong.o scan_xlong.o + +byte_chr.o: \ +compile byte_chr.c byte.h + ./compile byte_chr.c + +byte_copy.o: \ +compile byte_copy.c byte.h + ./compile byte_copy.c + +byte_cr.o: \ +compile byte_cr.c byte.h + ./compile byte_cr.c + +byte_diff.o: \ +compile byte_diff.c byte.h + ./compile byte_diff.c + +byte_zero.o: \ +compile byte_zero.c byte.h + ./compile byte_zero.c + +cache.o: \ +compile cache.c alloc.h byte.h uint32.h exit.h tai.h uint64.h cache.h \ +uint32.h uint64.h + ./compile cache.c + +cachetest: \ +load cachetest.o cache.o libtai.a buffer.a alloc.a unix.a byte.a + ./load cachetest cache.o libtai.a buffer.a alloc.a unix.a \ + byte.a + +cachetest.o: \ +compile cachetest.c buffer.h exit.h cache.h uint32.h uint64.h str.h + ./compile cachetest.c + +case_diffb.o: \ +compile case_diffb.c case.h + ./compile case_diffb.c + +case_diffs.o: \ +compile case_diffs.c case.h + ./compile case_diffs.c + +case_lowerb.o: \ +compile case_lowerb.c case.h + ./compile case_lowerb.c + +cdb.a: \ +makelib cdb.o cdb_hash.o cdb_make.o + ./makelib cdb.a cdb.o cdb_hash.o cdb_make.o + +cdb.o: \ +compile cdb.c error.h seek.h byte.h cdb.h uint32.h + ./compile cdb.c + +cdb_hash.o: \ +compile cdb_hash.c cdb.h uint32.h + ./compile cdb_hash.c + +cdb_make.o: \ +compile cdb_make.c seek.h error.h alloc.h cdb.h uint32.h cdb_make.h \ +buffer.h uint32.h + ./compile cdb_make.c + +check: \ +it instcheck + ./instcheck + +chkshsgr: \ +load chkshsgr.o + ./load chkshsgr + +chkshsgr.o: \ +compile chkshsgr.c exit.h + ./compile chkshsgr.c + +choose: \ +warn-auto.sh choose.sh conf-home + cat warn-auto.sh choose.sh \ + | sed s}HOME}"`head -1 conf-home`"}g \ + > choose + chmod 755 choose + +compile: \ +warn-auto.sh conf-cc + ( cat warn-auto.sh; \ + echo exec "`head -1 conf-cc`" '-c $${1+"$$@"}' \ + ) > compile + chmod 755 compile + +dd.o: \ +compile dd.c dns.h stralloc.h gen_alloc.h iopause.h taia.h tai.h \ +uint64.h taia.h dd.h + ./compile dd.c + +direntry.h: \ +choose compile trydrent.c direntry.h1 direntry.h2 + ./choose c trydrent direntry.h1 direntry.h2 > direntry.h + +dns.a: \ +makelib dns_dfd.o dns_domain.o dns_dtda.o dns_ip.o dns_ipq.o dns_mx.o \ +dns_name.o dns_nd.o dns_packet.o dns_random.o dns_rcip.o dns_rcrw.o \ +dns_resolve.o dns_sortip.o dns_transmit.o dns_txt.o dns_ip6.o \ +dns_sortip6.o dns_nd6.o dns_ipq6.o + ./makelib dns.a dns_dfd.o dns_domain.o dns_dtda.o dns_ip.o \ + dns_ipq.o dns_mx.o dns_name.o dns_nd.o dns_packet.o \ + dns_random.o dns_rcip.o dns_rcrw.o dns_resolve.o \ + dns_sortip.o dns_transmit.o dns_txt.o dns_ip6.o dns_sortip6.o \ + dns_nd6.o dns_ipq6.o + +dns_dfd.o: \ +compile dns_dfd.c error.h alloc.h byte.h dns.h stralloc.h gen_alloc.h \ +iopause.h taia.h tai.h uint64.h taia.h + ./compile dns_dfd.c + +dns_domain.o: \ +compile dns_domain.c error.h alloc.h case.h byte.h dns.h stralloc.h \ +gen_alloc.h iopause.h taia.h tai.h uint64.h taia.h + ./compile dns_domain.c + +dns_dtda.o: \ +compile dns_dtda.c stralloc.h gen_alloc.h dns.h stralloc.h iopause.h \ +taia.h tai.h uint64.h taia.h + ./compile dns_dtda.c + +dns_ip.o: \ +compile dns_ip.c stralloc.h gen_alloc.h uint16.h byte.h dns.h \ +stralloc.h iopause.h taia.h tai.h uint64.h taia.h + ./compile dns_ip.c + +dns_ip6.o: \ +compile dns_ip6.c stralloc.h gen_alloc.h uint16.h byte.h dns.h \ +stralloc.h iopause.h taia.h tai.h uint64.h taia.h + ./compile dns_ip6.c + +dns_ipq.o: \ +compile dns_ipq.c stralloc.h gen_alloc.h case.h byte.h str.h dns.h \ +stralloc.h iopause.h taia.h tai.h uint64.h taia.h + ./compile dns_ipq.c + +dns_ipq6.o: \ +compile dns_ipq6.c stralloc.h gen_alloc.h case.h byte.h str.h dns.h \ +stralloc.h iopause.h taia.h tai.h uint64.h taia.h + ./compile dns_ipq6.c + +dns_mx.o: \ +compile dns_mx.c stralloc.h gen_alloc.h byte.h uint16.h dns.h \ +stralloc.h iopause.h taia.h tai.h uint64.h taia.h + ./compile dns_mx.c + +dns_name.o: \ +compile dns_name.c stralloc.h gen_alloc.h uint16.h byte.h dns.h \ +stralloc.h iopause.h taia.h tai.h uint64.h taia.h + ./compile dns_name.c + +dns_nd.o: \ +compile dns_nd.c byte.h fmt.h dns.h stralloc.h gen_alloc.h iopause.h \ +taia.h tai.h uint64.h taia.h + ./compile dns_nd.c + +dns_nd6.o: \ +compile dns_nd6.c byte.h fmt.h dns.h stralloc.h gen_alloc.h iopause.h \ +taia.h tai.h uint64.h taia.h + ./compile dns_nd6.c + +dns_packet.o: \ +compile dns_packet.c error.h dns.h stralloc.h gen_alloc.h iopause.h \ +taia.h tai.h uint64.h taia.h + ./compile dns_packet.c + +dns_random.o: \ +compile dns_random.c dns.h stralloc.h gen_alloc.h iopause.h taia.h \ +tai.h uint64.h taia.h taia.h uint32.h + ./compile dns_random.c + +dns_rcip.o: \ +compile dns_rcip.c taia.h tai.h uint64.h openreadclose.h stralloc.h \ +gen_alloc.h byte.h ip4.h env.h dns.h stralloc.h iopause.h taia.h \ +taia.h + ./compile dns_rcip.c + +dns_rcrw.o: \ +compile dns_rcrw.c taia.h tai.h uint64.h env.h byte.h str.h \ +openreadclose.h stralloc.h gen_alloc.h dns.h stralloc.h iopause.h \ +taia.h taia.h + ./compile dns_rcrw.c + +dns_resolve.o: \ +compile dns_resolve.c iopause.h taia.h tai.h uint64.h taia.h byte.h \ +dns.h stralloc.h gen_alloc.h iopause.h taia.h + ./compile dns_resolve.c + +dns_sortip.o: \ +compile dns_sortip.c byte.h dns.h stralloc.h gen_alloc.h iopause.h \ +taia.h tai.h uint64.h taia.h + ./compile dns_sortip.c + +dns_sortip6.o: \ +compile dns_sortip6.c byte.h dns.h stralloc.h gen_alloc.h iopause.h \ +taia.h tai.h uint64.h taia.h + ./compile dns_sortip6.c + +dns_transmit.o: \ +compile dns_transmit.c socket.h uint16.h alloc.h error.h byte.h \ +uint16.h dns.h stralloc.h gen_alloc.h iopause.h taia.h tai.h uint64.h \ +taia.h + ./compile dns_transmit.c + +dns_txt.o: \ +compile dns_txt.c stralloc.h gen_alloc.h uint16.h byte.h dns.h \ +stralloc.h iopause.h taia.h tai.h uint64.h taia.h + ./compile dns_txt.c + +dnscache: \ +load dnscache.o droproot.o okclient.o log.o cache.o query.o \ +response.o dd.o roots.o iopause.o prot.o dns.a env.a alloc.a buffer.a \ +libtai.a unix.a byte.a socket.lib + ./load dnscache droproot.o okclient.o log.o cache.o \ + query.o response.o dd.o roots.o iopause.o prot.o dns.a \ + env.a alloc.a buffer.a libtai.a unix.a byte.a `cat \ + socket.lib` + +dnscache-conf: \ +load dnscache-conf.o generic-conf.o auto_home.o libtai.a buffer.a \ +unix.a byte.a + ./load dnscache-conf generic-conf.o auto_home.o libtai.a \ + buffer.a unix.a byte.a + +dnscache-conf.o: \ +compile dnscache-conf.c hasdevtcp.h strerr.h buffer.h uint32.h taia.h \ +tai.h uint64.h str.h open.h error.h exit.h auto_home.h generic-conf.h \ +buffer.h + ./compile dnscache-conf.c + +dnscache.o: \ +compile dnscache.c env.h exit.h scan.h strerr.h error.h ip4.h \ +uint16.h uint64.h socket.h uint16.h dns.h stralloc.h gen_alloc.h \ +iopause.h taia.h tai.h uint64.h taia.h taia.h byte.h roots.h fmt.h \ +iopause.h query.h dns.h uint32.h alloc.h response.h uint32.h cache.h \ +uint32.h uint64.h ndelay.h log.h uint64.h okclient.h droproot.h + ./compile dnscache.c + +dnsfilter: \ +load dnsfilter.o iopause.o getopt.a dns.a env.a libtai.a alloc.a \ +buffer.a unix.a byte.a socket.lib + ./load dnsfilter iopause.o getopt.a dns.a env.a libtai.a \ + alloc.a buffer.a unix.a byte.a `cat socket.lib` + +dnsfilter.o: \ +compile dnsfilter.c strerr.h buffer.h stralloc.h gen_alloc.h alloc.h \ +dns.h stralloc.h iopause.h taia.h tai.h uint64.h taia.h ip4.h byte.h \ +scan.h taia.h sgetopt.h subgetopt.h iopause.h error.h exit.h + ./compile dnsfilter.c + +dnsip: \ +load dnsip.o iopause.o dns.a env.a libtai.a alloc.a buffer.a unix.a \ +byte.a socket.lib + ./load dnsip iopause.o dns.a env.a libtai.a alloc.a \ + buffer.a unix.a byte.a `cat socket.lib` + +dnsip.o: \ +compile dnsip.c buffer.h exit.h strerr.h ip4.h dns.h stralloc.h \ +gen_alloc.h iopause.h taia.h tai.h uint64.h taia.h + ./compile dnsip.c + +dnsip6: \ +load dnsip6.o iopause.o dns.a env.a libtai.a alloc.a buffer.a unix.a \ +byte.a socket.lib + ./load dnsip6 iopause.o dns.a env.a libtai.a alloc.a \ + buffer.a unix.a byte.a `cat socket.lib` + +dnsip6.o: \ +compile dnsip6.c buffer.h exit.h strerr.h ip6.h dns.h stralloc.h \ +gen_alloc.h iopause.h taia.h tai.h uint64.h + ./compile dnsip6.c + +dnsipq: \ +load dnsipq.o iopause.o dns.a env.a libtai.a alloc.a buffer.a unix.a \ +byte.a socket.lib + ./load dnsipq iopause.o dns.a env.a libtai.a alloc.a \ + buffer.a unix.a byte.a `cat socket.lib` + +dnsipq.o: \ +compile dnsipq.c buffer.h exit.h strerr.h ip4.h dns.h stralloc.h \ +gen_alloc.h iopause.h taia.h tai.h uint64.h taia.h + ./compile dnsipq.c + +dnsip6q: \ +load dnsip6q.o iopause.o dns.a env.a libtai.a alloc.a buffer.a unix.a \ +byte.a socket.lib + ./load dnsip6q iopause.o dns.a env.a libtai.a alloc.a \ + buffer.a unix.a byte.a `cat socket.lib` + +dnsip6q.o: \ +compile dnsip6q.c buffer.h exit.h strerr.h ip4.h dns.h stralloc.h \ +gen_alloc.h iopause.h taia.h tai.h uint64.h taia.h + ./compile dnsip6q.c + +dnsmx: \ +load dnsmx.o iopause.o dns.a env.a libtai.a alloc.a buffer.a unix.a \ +byte.a socket.lib + ./load dnsmx iopause.o dns.a env.a libtai.a alloc.a \ + buffer.a unix.a byte.a `cat socket.lib` + +dnsmx.o: \ +compile dnsmx.c buffer.h exit.h strerr.h uint16.h byte.h str.h fmt.h \ +dns.h stralloc.h gen_alloc.h iopause.h taia.h tai.h uint64.h taia.h + ./compile dnsmx.c + +dnsname: \ +load dnsname.o iopause.o dns.a env.a libtai.a alloc.a buffer.a unix.a \ +byte.a socket.lib + ./load dnsname iopause.o dns.a env.a libtai.a alloc.a \ + buffer.a unix.a byte.a `cat socket.lib` + +dnsname.o: \ +compile dnsname.c buffer.h exit.h strerr.h ip4.h dns.h stralloc.h \ +gen_alloc.h iopause.h taia.h tai.h uint64.h taia.h ip6.h + ./compile dnsname.c + +dnsq: \ +load dnsq.o iopause.o printrecord.o printpacket.o parsetype.o dns.a \ +env.a libtai.a buffer.a alloc.a unix.a byte.a socket.lib + ./load dnsq iopause.o printrecord.o printpacket.o \ + parsetype.o dns.a env.a libtai.a buffer.a alloc.a unix.a \ + byte.a `cat socket.lib` + +dnsq.o: \ +compile dnsq.c uint16.h strerr.h buffer.h scan.h str.h byte.h error.h \ +ip4.h iopause.h taia.h tai.h uint64.h printpacket.h stralloc.h \ +gen_alloc.h parsetype.h dns.h stralloc.h iopause.h taia.h + ./compile dnsq.c + +dnsqr: \ +load dnsqr.o iopause.o printrecord.o printpacket.o parsetype.o dns.a \ +env.a libtai.a buffer.a alloc.a unix.a byte.a socket.lib + ./load dnsqr iopause.o printrecord.o printpacket.o \ + parsetype.o dns.a env.a libtai.a buffer.a alloc.a unix.a \ + byte.a `cat socket.lib` + +dnsqr.o: \ +compile dnsqr.c uint16.h strerr.h buffer.h scan.h str.h byte.h \ +error.h iopause.h taia.h tai.h uint64.h printpacket.h stralloc.h \ +gen_alloc.h parsetype.h dns.h stralloc.h iopause.h taia.h + ./compile dnsqr.c + +dnstrace: \ +load dnstrace.o dd.o iopause.o printrecord.o parsetype.o dns.a env.a \ +libtai.a alloc.a buffer.a unix.a byte.a socket.lib + ./load dnstrace dd.o iopause.o printrecord.o parsetype.o \ + dns.a env.a libtai.a alloc.a buffer.a unix.a byte.a `cat \ + socket.lib` + +dnstrace.o: \ +compile dnstrace.c uint16.h uint32.h fmt.h str.h byte.h ip4.h \ +gen_alloc.h gen_allocdefs.h exit.h buffer.h stralloc.h gen_alloc.h \ +error.h strerr.h iopause.h taia.h tai.h uint64.h printrecord.h \ +stralloc.h alloc.h parsetype.h dd.h dns.h stralloc.h iopause.h taia.h + ./compile dnstrace.c + +dnstracesort: \ +warn-auto.sh dnstracesort.sh conf-home + cat warn-auto.sh dnstracesort.sh \ + | sed s}HOME}"`head -1 conf-home`"}g \ + > dnstracesort + chmod 755 dnstracesort + +dnstxt: \ +load dnstxt.o iopause.o dns.a env.a libtai.a alloc.a buffer.a unix.a \ +byte.a socket.lib + ./load dnstxt iopause.o dns.a env.a libtai.a alloc.a \ + buffer.a unix.a byte.a `cat socket.lib` + +dnstxt.o: \ +compile dnstxt.c buffer.h exit.h strerr.h dns.h stralloc.h \ +gen_alloc.h iopause.h taia.h tai.h uint64.h taia.h + ./compile dnstxt.c + +droproot.o: \ +compile droproot.c env.h scan.h prot.h strerr.h + ./compile droproot.c + +env.a: \ +makelib env.o + ./makelib env.a env.o + +env.o: \ +compile env.c str.h env.h + ./compile env.c + +error.o: \ +compile error.c error.h + ./compile error.c + +error_str.o: \ +compile error_str.c error.h + ./compile error_str.c + +fmt_ulong.o: \ +compile fmt_ulong.c fmt.h + ./compile fmt_ulong.c + +fmt_xlong.o: \ +compile fmt_xlong.c scan.h + ./compile fmt_xlong.c + +generic-conf.o: \ +compile generic-conf.c strerr.h buffer.h open.h generic-conf.h \ +buffer.h + ./compile generic-conf.c + +getln.o: \ +compile getln.c byte.h getln.h buffer.h stralloc.h gen_alloc.h + ./compile getln.c + +getln2.o: \ +compile getln2.c byte.h getln.h buffer.h stralloc.h gen_alloc.h + ./compile getln2.c + +getopt.a: \ +makelib sgetopt.o subgetopt.o + ./makelib getopt.a sgetopt.o subgetopt.o + +hasdevtcp.h: \ +systype hasdevtcp.h1 hasdevtcp.h2 + ( case "`cat systype`" in \ + sunos-5.*) cat hasdevtcp.h2 ;; \ + *) cat hasdevtcp.h1 ;; \ + esac ) > hasdevtcp.h + +hasshsgr.h: \ +choose compile load tryshsgr.c hasshsgr.h1 hasshsgr.h2 chkshsgr \ +warn-shsgr + ./chkshsgr || ( cat warn-shsgr; exit 1 ) + ./choose clr tryshsgr hasshsgr.h1 hasshsgr.h2 > hasshsgr.h + +hier.o: \ +compile hier.c auto_home.h + ./compile hier.c + +install: \ +load install.o hier.o auto_home.o buffer.a unix.a byte.a + ./load install hier.o auto_home.o buffer.a unix.a byte.a + +install.o: \ +compile install.c buffer.h strerr.h error.h open.h exit.h + ./compile install.c + +instcheck: \ +load instcheck.o hier.o auto_home.o buffer.a unix.a byte.a + ./load instcheck hier.o auto_home.o buffer.a unix.a byte.a + +instcheck.o: \ +compile instcheck.c strerr.h error.h exit.h + ./compile instcheck.c + +iopause.h: \ +choose compile load trypoll.c iopause.h1 iopause.h2 + ./choose clr trypoll iopause.h1 iopause.h2 > iopause.h + +iopause.o: \ +compile iopause.c taia.h tai.h uint64.h select.h iopause.h taia.h + ./compile iopause.c + +ip4_fmt.o: \ +compile ip4_fmt.c fmt.h ip4.h + ./compile ip4_fmt.c + +ip6_fmt.o: \ +compile ip6_fmt.c fmt.h ip6.h + ./compile ip6_fmt.c + +ip4_scan.o: \ +compile ip4_scan.c scan.h ip4.h + ./compile ip4_scan.c + +ip6_scan.o: \ +compile ip6_scan.c scan.h ip6.h + ./compile ip6_scan.c + +it: \ +prog install instcheck + +libtai.a: \ +makelib tai_add.o tai_now.o tai_pack.o tai_sub.o tai_uint.o \ +tai_unpack.o taia_add.o taia_approx.o taia_frac.o taia_less.o \ +taia_now.o taia_pack.o taia_sub.o taia_tai.o taia_uint.o + ./makelib libtai.a tai_add.o tai_now.o tai_pack.o \ + tai_sub.o tai_uint.o tai_unpack.o taia_add.o taia_approx.o \ + taia_frac.o taia_less.o taia_now.o taia_pack.o taia_sub.o \ + taia_tai.o taia_uint.o + +load: \ +warn-auto.sh conf-ld + ( cat warn-auto.sh; \ + echo 'main="$$1"; shift'; \ + echo exec "`head -1 conf-ld`" \ + '-o "$$main" "$$main".o $${1+"$$@"}' \ + ) > load + chmod 755 load + +log.o: \ +compile log.c buffer.h uint32.h uint16.h error.h byte.h log.h \ +uint64.h + ./compile log.c + +makelib: \ +warn-auto.sh systype + ( cat warn-auto.sh; \ + echo 'main="$$1"; shift'; \ + echo 'rm -f "$$main"'; \ + echo 'ar cr "$$main" $${1+"$$@"}'; \ + case "`cat systype`" in \ + sunos-5.*) ;; \ + unix_sv*) ;; \ + irix64-*) ;; \ + irix-*) ;; \ + dgux-*) ;; \ + hp-ux-*) ;; \ + sco*) ;; \ + *) echo 'ranlib "$$main"' ;; \ + esac \ + ) > makelib + chmod 755 makelib + +ndelay_off.o: \ +compile ndelay_off.c ndelay.h + ./compile ndelay_off.c + +ndelay_on.o: \ +compile ndelay_on.c ndelay.h + ./compile ndelay_on.c + +okclient.o: \ +compile okclient.c str.h ip4.h okclient.h + ./compile okclient.c + +open_read.o: \ +compile open_read.c open.h + ./compile open_read.c + +open_trunc.o: \ +compile open_trunc.c open.h + ./compile open_trunc.c + +openreadclose.o: \ +compile openreadclose.c error.h open.h readclose.h stralloc.h \ +gen_alloc.h openreadclose.h stralloc.h + ./compile openreadclose.c + +parsetype.o: \ +compile parsetype.c scan.h byte.h case.h dns.h stralloc.h gen_alloc.h \ +iopause.h taia.h tai.h uint64.h taia.h uint16.h parsetype.h + ./compile parsetype.c + +pickdns: \ +load pickdns.o server.o iopause.o response.o droproot.o qlog.o prot.o dns.a \ +env.a libtai.a cdb.a alloc.a buffer.a unix.a byte.a socket.lib + ./load pickdns server.o iopause.o response.o droproot.o qlog.o \ + prot.o dns.a env.a libtai.a cdb.a alloc.a buffer.a unix.a \ + byte.a `cat socket.lib` + +pickdns-conf: \ +load pickdns-conf.o generic-conf.o auto_home.o buffer.a unix.a byte.a + ./load pickdns-conf generic-conf.o auto_home.o buffer.a \ + unix.a byte.a + +pickdns-conf.o: \ +compile pickdns-conf.c strerr.h exit.h auto_home.h generic-conf.h \ +buffer.h + ./compile pickdns-conf.c + +pickdns-data: \ +load pickdns-data.o cdb.a dns.a alloc.a buffer.a unix.a byte.a + ./load pickdns-data cdb.a dns.a alloc.a buffer.a unix.a \ + byte.a + +pickdns-data.o: \ +compile pickdns-data.c buffer.h exit.h cdb_make.h buffer.h uint32.h \ +open.h alloc.h gen_allocdefs.h stralloc.h gen_alloc.h getln.h \ +buffer.h stralloc.h case.h strerr.h str.h byte.h scan.h fmt.h ip4.h \ +dns.h stralloc.h iopause.h taia.h tai.h uint64.h taia.h + ./compile pickdns-data.c + +pickdns.o: \ +compile pickdns.c byte.h case.h dns.h stralloc.h gen_alloc.h \ +iopause.h taia.h tai.h uint64.h taia.h open.h cdb.h uint32.h \ +response.h uint32.h + ./compile pickdns.c + +printpacket.o: \ +compile printpacket.c uint16.h uint32.h error.h byte.h dns.h \ +stralloc.h gen_alloc.h iopause.h taia.h tai.h uint64.h taia.h \ +printrecord.h stralloc.h printpacket.h stralloc.h + ./compile printpacket.c + +printrecord.o: \ +compile printrecord.c uint16.h uint32.h error.h byte.h dns.h \ +stralloc.h gen_alloc.h iopause.h taia.h tai.h uint64.h taia.h \ +printrecord.h stralloc.h + ./compile printrecord.c + +prog: \ +dnscache-conf dnscache walldns-conf walldns rbldns-conf rbldns \ +rbldns-data pickdns-conf pickdns pickdns-data tinydns-conf tinydns \ +tinydns-data tinydns-get tinydns-edit axfr-get axfrdns-conf axfrdns \ +dnsip dnsipq dnsname dnstxt dnsmx dnsfilter random-ip dnsqr dnsq \ +dnstrace dnstracesort cachetest utime rts dnsip6 dnsip6q + +prot.o: \ +compile prot.c hasshsgr.h prot.h + ./compile prot.c + +qlog.o: \ +compile qlog.c buffer.h qlog.h uint16.h + ./compile qlog.c + +query.o: \ +compile query.c error.h roots.h log.h uint64.h case.h cache.h \ +uint32.h uint64.h byte.h dns.h stralloc.h gen_alloc.h iopause.h \ +taia.h tai.h uint64.h taia.h uint64.h uint32.h uint16.h dd.h alloc.h \ +response.h uint32.h query.h dns.h uint32.h + ./compile query.c + +random-ip: \ +load random-ip.o dns.a libtai.a buffer.a unix.a byte.a + ./load random-ip dns.a libtai.a buffer.a unix.a byte.a + +random-ip.o: \ +compile random-ip.c buffer.h exit.h fmt.h scan.h dns.h stralloc.h \ +gen_alloc.h iopause.h taia.h tai.h uint64.h taia.h + ./compile random-ip.c + +rbldns: \ +load rbldns.o server.o iopause.o response.o dd.o droproot.o qlog.o prot.o dns.a \ +env.a libtai.a cdb.a alloc.a buffer.a unix.a byte.a socket.lib + ./load rbldns server.o iopause.o response.o dd.o droproot.o qlog.o \ + prot.o dns.a env.a libtai.a cdb.a alloc.a buffer.a unix.a \ + byte.a `cat socket.lib` + +rbldns-conf: \ +load rbldns-conf.o generic-conf.o auto_home.o buffer.a unix.a byte.a + ./load rbldns-conf generic-conf.o auto_home.o buffer.a \ + unix.a byte.a + +rbldns-conf.o: \ +compile rbldns-conf.c strerr.h exit.h auto_home.h generic-conf.h \ +buffer.h + ./compile rbldns-conf.c + +rbldns-data: \ +load rbldns-data.o cdb.a alloc.a buffer.a unix.a byte.a + ./load rbldns-data cdb.a alloc.a buffer.a unix.a byte.a + +rbldns-data.o: \ +compile rbldns-data.c buffer.h exit.h cdb_make.h buffer.h uint32.h \ +open.h stralloc.h gen_alloc.h getln.h buffer.h stralloc.h strerr.h \ +byte.h scan.h fmt.h ip4.h + ./compile rbldns-data.c + +rbldns.o: \ +compile rbldns.c str.h byte.h ip4.h open.h env.h cdb.h uint32.h dns.h \ +stralloc.h gen_alloc.h iopause.h taia.h tai.h uint64.h taia.h dd.h \ +strerr.h response.h uint32.h + ./compile rbldns.c + +readclose.o: \ +compile readclose.c error.h readclose.h stralloc.h gen_alloc.h + ./compile readclose.c + +response.o: \ +compile response.c dns.h stralloc.h gen_alloc.h iopause.h taia.h \ +tai.h uint64.h taia.h byte.h uint16.h response.h uint32.h + ./compile response.c + +roots.o: \ +compile roots.c open.h error.h str.h byte.h error.h direntry.h ip4.h \ +dns.h stralloc.h gen_alloc.h iopause.h taia.h tai.h uint64.h taia.h \ +openreadclose.h stralloc.h roots.h + ./compile roots.c + +rts: \ +warn-auto.sh rts.sh conf-home + cat warn-auto.sh rts.sh \ + | sed s}HOME}"`head -1 conf-home`"}g \ + > rts + chmod 755 rts + +scan_ulong.o: \ +compile scan_ulong.c scan.h + ./compile scan_ulong.c + +scan_xlong.o: \ +compile scan_xlong.c scan.h + ./compile scan_xlong.c + +seek_set.o: \ +compile seek_set.c seek.h + ./compile seek_set.c + +select.h: \ +choose compile trysysel.c select.h1 select.h2 + ./choose c trysysel select.h1 select.h2 > select.h + +server.o: \ +compile server.c byte.h case.h env.h buffer.h strerr.h ip4.h uint16.h \ +ndelay.h socket.h uint16.h droproot.h qlog.h uint16.h response.h \ +uint32.h dns.h stralloc.h gen_alloc.h iopause.h taia.h tai.h uint64.h \ +taia.h iopause.h alloc.h str.h + ./compile server.c + +setup: \ +it install + ./install + +sgetopt.o: \ +compile sgetopt.c buffer.h sgetopt.h subgetopt.h subgetopt.h + ./compile sgetopt.c + +socket.lib: \ +trylsock.c compile load + ( ( ./compile trylsock.c && \ + ./load trylsock -lsocket -lnsl ) >/dev/null 2>&1 \ + && echo -lsocket -lnsl || exit 0 ) > socket.lib + rm -f trylsock.o trylsock + +socket_accept.o: \ +compile socket_accept.c byte.h socket.h uint16.h + ./compile socket_accept.c + +socket_accept6.o: \ +compile socket_accept6.c byte.h socket.h uint16.h + ./compile socket_accept6.c + +socket_bind.o: \ +compile socket_bind.c byte.h socket.h uint16.h + ./compile socket_bind.c + +socket_bind6.o: \ +compile socket_bind6.c sockaddr_in6.h haveip6.h byte.h socket.h uint16.h uint32.h ip6.h error.h + ./compile socket_bind6.c + +socket_conn.o: \ +compile socket_conn.c byte.h socket.h uint16.h + ./compile socket_conn.c + +socket_connect6.o: \ +compile socket_connect6.c byte.h socket.h uint16.h uint32.h + ./compile socket_connect6.c + +socket_listen.o: \ +compile socket_listen.c socket.h uint16.h + ./compile socket_listen.c + +socket_recv.o: \ +compile socket_recv.c byte.h socket.h uint16.h + ./compile socket_recv.c + +socket_recv6.o: \ +compile socket_recv6.c sockaddr_in6.h haveip6.h byte.h socket.h uint16.h uint32.h ip6.h error.h + ./compile socket_recv6.c + +socket_send.o: \ +compile socket_send.c byte.h socket.h uint16.h + ./compile socket_send.c + +socket_send6.o: \ +compile socket_send6.c byte.h socket.h uint16.h uint32.h ip6.h haveip6.h error.h + ./compile socket_send6.c + +socket_tcp.o: \ +compile socket_tcp.c ndelay.h socket.h uint16.h + ./compile socket_tcp.c + +socket_tcp6.o: \ +compile socket_tcp6.c ndelay.h socket.h uint16.h uint32.h haveip6.h + ./compile socket_tcp6.c + +socket_udp.o: \ +compile socket_udp.c ndelay.h socket.h uint16.h + ./compile socket_udp.c + +socket_udp6.o: \ +compile socket_udp6.c ndelay.h socket.h uint16.h uint32.h haveip6.h + ./compile socket_udp6.c + +socket_noipv6.o: \ +compile socket_noipv6.c haveip6.h + ./compile socket_noipv6.c + +socket_getifidx.o: \ +compile socket_getifidx.c socket.h uint16.h uint32.h haven2i.h + ./compile socket_getifidx.c + +haven2i.h: \ +tryn2i.c choose compile load socket.lib haven2i.h1 haven2i.h2 + cp /dev/null haven2i.h + ./choose cL tryn2i haven2i.h1 haven2i.h2 socket > haven2i.h + +str_chr.o: \ +compile str_chr.c str.h + ./compile str_chr.c + +str_diff.o: \ +compile str_diff.c str.h + ./compile str_diff.c + +str_len.o: \ +compile str_len.c str.h + ./compile str_len.c + +str_rchr.o: \ +compile str_rchr.c str.h + ./compile str_rchr.c + +str_start.o: \ +compile str_start.c str.h + ./compile str_start.c + +stralloc_cat.o: \ +compile stralloc_cat.c byte.h stralloc.h gen_alloc.h + ./compile stralloc_cat.c + +stralloc_catb.o: \ +compile stralloc_catb.c stralloc.h gen_alloc.h byte.h + ./compile stralloc_catb.c + +stralloc_cats.o: \ +compile stralloc_cats.c byte.h str.h stralloc.h gen_alloc.h + ./compile stralloc_cats.c + +stralloc_copy.o: \ +compile stralloc_copy.c byte.h stralloc.h gen_alloc.h + ./compile stralloc_copy.c + +stralloc_eady.o: \ +compile stralloc_eady.c alloc.h stralloc.h gen_alloc.h \ +gen_allocdefs.h + ./compile stralloc_eady.c + +stralloc_num.o: \ +compile stralloc_num.c stralloc.h gen_alloc.h + ./compile stralloc_num.c + +stralloc_opyb.o: \ +compile stralloc_opyb.c stralloc.h gen_alloc.h byte.h + ./compile stralloc_opyb.c + +stralloc_opys.o: \ +compile stralloc_opys.c byte.h str.h stralloc.h gen_alloc.h + ./compile stralloc_opys.c + +stralloc_pend.o: \ +compile stralloc_pend.c alloc.h stralloc.h gen_alloc.h \ +gen_allocdefs.h + ./compile stralloc_pend.c + +strerr_die.o: \ +compile strerr_die.c buffer.h exit.h strerr.h + ./compile strerr_die.c + +strerr_sys.o: \ +compile strerr_sys.c error.h strerr.h + ./compile strerr_sys.c + +subgetopt.o: \ +compile subgetopt.c subgetopt.h + ./compile subgetopt.c + +systype: \ +find-systype.sh conf-cc conf-ld trycpp.c x86cpuid.c + ( cat warn-auto.sh; \ + echo CC=\'`head -1 conf-cc`\'; \ + echo LD=\'`head -1 conf-ld`\'; \ + cat find-systype.sh; \ + ) | sh > systype + +tai_add.o: \ +compile tai_add.c tai.h uint64.h + ./compile tai_add.c + +tai_now.o: \ +compile tai_now.c tai.h uint64.h + ./compile tai_now.c + +tai_pack.o: \ +compile tai_pack.c tai.h uint64.h + ./compile tai_pack.c + +tai_sub.o: \ +compile tai_sub.c tai.h uint64.h + ./compile tai_sub.c + +tai_uint.o: \ +compile tai_uint.c tai.h uint64.h + ./compile tai_uint.c + +tai_unpack.o: \ +compile tai_unpack.c tai.h uint64.h + ./compile tai_unpack.c + +taia_add.o: \ +compile taia_add.c taia.h tai.h uint64.h + ./compile taia_add.c + +taia_approx.o: \ +compile taia_approx.c taia.h tai.h uint64.h + ./compile taia_approx.c + +taia_frac.o: \ +compile taia_frac.c taia.h tai.h uint64.h + ./compile taia_frac.c + +taia_less.o: \ +compile taia_less.c taia.h tai.h uint64.h + ./compile taia_less.c + +taia_now.o: \ +compile taia_now.c taia.h tai.h uint64.h + ./compile taia_now.c + +taia_pack.o: \ +compile taia_pack.c taia.h tai.h uint64.h + ./compile taia_pack.c + +taia_sub.o: \ +compile taia_sub.c taia.h tai.h uint64.h + ./compile taia_sub.c + +taia_tai.o: \ +compile taia_tai.c taia.h tai.h uint64.h + ./compile taia_tai.c + +taia_uint.o: \ +compile taia_uint.c taia.h tai.h uint64.h + ./compile taia_uint.c + +tdlookup.o: \ +compile tdlookup.c uint16.h open.h tai.h uint64.h cdb.h uint32.h \ +byte.h case.h dns.h stralloc.h gen_alloc.h iopause.h taia.h tai.h \ +taia.h seek.h response.h uint32.h ip6.h + ./compile tdlookup.c + +timeoutread.o: \ +compile timeoutread.c error.h iopause.h taia.h tai.h uint64.h \ +timeoutread.h + ./compile timeoutread.c + +timeoutwrite.o: \ +compile timeoutwrite.c error.h iopause.h taia.h tai.h uint64.h \ +timeoutwrite.h + ./compile timeoutwrite.c + +tinydns: \ +load tinydns.o server.o iopause.o droproot.o tdlookup.o response.o qlog.o \ +prot.o dns.a libtai.a env.a cdb.a alloc.a buffer.a unix.a byte.a \ +socket.lib + ./load tinydns server.o iopause.o droproot.o tdlookup.o response.o \ + qlog.o prot.o dns.a libtai.a env.a cdb.a alloc.a buffer.a \ + unix.a byte.a `cat socket.lib` + +tinydns-conf: \ +load tinydns-conf.o generic-conf.o auto_home.o buffer.a unix.a byte.a + ./load tinydns-conf generic-conf.o auto_home.o buffer.a \ + unix.a byte.a + +tinydns-conf.o: \ +compile tinydns-conf.c strerr.h exit.h auto_home.h generic-conf.h \ +buffer.h + ./compile tinydns-conf.c + +tinydns-data: \ +load tinydns-data.o cdb.a dns.a alloc.a buffer.a unix.a byte.a + ./load tinydns-data cdb.a dns.a alloc.a buffer.a unix.a \ + byte.a + +tinydns-data.o: \ +compile tinydns-data.c uint16.h uint32.h str.h byte.h fmt.h ip4.h \ +exit.h case.h scan.h buffer.h strerr.h getln.h buffer.h stralloc.h \ +gen_alloc.h cdb_make.h buffer.h uint32.h stralloc.h open.h dns.h \ +stralloc.h iopause.h taia.h tai.h uint64.h taia.h ip6.h + ./compile tinydns-data.c + +tinydns-edit: \ +load tinydns-edit.o dns.a alloc.a buffer.a unix.a byte.a + ./load tinydns-edit dns.a alloc.a buffer.a unix.a byte.a + +tinydns-edit.o: \ +compile tinydns-edit.c stralloc.h gen_alloc.h buffer.h exit.h open.h \ +getln.h buffer.h stralloc.h strerr.h scan.h byte.h str.h fmt.h ip4.h \ +dns.h stralloc.h iopause.h taia.h tai.h uint64.h taia.h + ./compile tinydns-edit.c + +tinydns-get: \ +load tinydns-get.o tdlookup.o response.o printpacket.o printrecord.o \ +parsetype.o dns.a libtai.a cdb.a buffer.a alloc.a unix.a byte.a + ./load tinydns-get tdlookup.o response.o printpacket.o \ + printrecord.o parsetype.o dns.a libtai.a cdb.a buffer.a \ + alloc.a unix.a byte.a + +tinydns-get.o: \ +compile tinydns-get.c str.h byte.h scan.h exit.h stralloc.h \ +gen_alloc.h buffer.h strerr.h uint16.h response.h uint32.h case.h \ +printpacket.h stralloc.h parsetype.h ip4.h dns.h stralloc.h iopause.h \ +taia.h tai.h uint64.h taia.h + ./compile tinydns-get.c + +tinydns.o: \ +compile tinydns.c dns.h stralloc.h gen_alloc.h iopause.h taia.h tai.h \ +uint64.h taia.h + ./compile tinydns.c + +uint16_pack.o: \ +compile uint16_pack.c uint16.h + ./compile uint16_pack.c + +uint16_unpack.o: \ +compile uint16_unpack.c uint16.h + ./compile uint16_unpack.c + +uint32.h: \ +tryulong32.c compile load uint32.h1 uint32.h2 + ( ( ./compile tryulong32.c && ./load tryulong32 && \ + ./tryulong32 ) >/dev/null 2>&1 \ + && cat uint32.h2 || cat uint32.h1 ) > uint32.h + rm -f tryulong32.o tryulong32 + +uint32_pack.o: \ +compile uint32_pack.c uint32.h + ./compile uint32_pack.c + +uint32_unpack.o: \ +compile uint32_unpack.c uint32.h + ./compile uint32_unpack.c + +uint64.h: \ +choose compile load tryulong64.c uint64.h1 uint64.h2 + ./choose clr tryulong64 uint64.h1 uint64.h2 > uint64.h + +unix.a: \ +makelib buffer_read.o buffer_write.o error.o error_str.o ndelay_off.o \ +ndelay_on.o open_read.o open_trunc.o openreadclose.o readclose.o \ +seek_set.o socket_accept.o socket_bind.o socket_conn.o \ +socket_listen.o socket_recv.o socket_send.o socket_tcp.o socket_udp.o \ +socket_udp6.o socket_getifidx.o socket_recv6.o socket_send6.o \ +socket_bind6.o socket_noipv6.o socket_tcp6.o socket_connect6.o \ +socket_accept6.o + ./makelib unix.a buffer_read.o buffer_write.o error.o \ + error_str.o ndelay_off.o ndelay_on.o open_read.o \ + open_trunc.o openreadclose.o readclose.o seek_set.o \ + socket_accept.o socket_bind.o socket_conn.o socket_listen.o \ + socket_recv.o socket_send.o socket_tcp.o socket_udp.o \ + socket_udp6.o socket_getifidx.o socket_recv6.o socket_send6.o \ + socket_bind6.o socket_noipv6.o socket_tcp6.o socket_connect6.o \ + socket_accept6.o + +utime: \ +load utime.o byte.a + ./load utime byte.a + +utime.o: \ +compile utime.c scan.h exit.h + ./compile utime.c + +walldns: \ +load walldns.o server.o iopause.o response.o droproot.o qlog.o prot.o dd.o \ +dns.a env.a cdb.a alloc.a buffer.a unix.a byte.a socket.lib + ./load walldns server.o iopause.o response.o droproot.o qlog.o \ + prot.o dd.o dns.a libtai.a env.a cdb.a alloc.a buffer.a unix.a \ + byte.a `cat socket.lib` + +walldns-conf: \ +load walldns-conf.o generic-conf.o auto_home.o buffer.a unix.a byte.a + ./load walldns-conf generic-conf.o auto_home.o buffer.a \ + unix.a byte.a + +walldns-conf.o: \ +compile walldns-conf.c strerr.h exit.h auto_home.h generic-conf.h \ +buffer.h + ./compile walldns-conf.c + +walldns.o: \ +compile walldns.c byte.h dns.h stralloc.h gen_alloc.h iopause.h \ +taia.h tai.h uint64.h taia.h dd.h response.h uint32.h + ./compile walldns.c + +haveip6.h: \ +tryip6.c choose compile haveip6.h1 haveip6.h2 + ./choose c tryip6 haveip6.h1 haveip6.h2 > haveip6.h + +sockaddr_in6.h: \ +trysa6.c choose compile sockaddr_in6.h1 sockaddr_in6.h2 haveip6.h + ./choose c trysa6 sockaddr_in6.h1 sockaddr_in6.h2 > sockaddr_in6.h + +clean: + rm -f `cat TARGETS` diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/README b/NONE-CKUBU/src/djbdns/djbdns-1.05/README new file mode 100644 index 0000000..a9617eb --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/README @@ -0,0 +1,7 @@ +djbdns 1.05 +20010211 +Copyright 2001 +D. J. Bernstein + +djbdns home page: http://cr.yp.to/djbdns.html +Installation instructions: http://cr.yp.to/djbdns/install.html diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/SYSDEPS b/NONE-CKUBU/src/djbdns/djbdns-1.05/SYSDEPS new file mode 100644 index 0000000..060bbc0 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/SYSDEPS @@ -0,0 +1,10 @@ +VERSION +systype +uint32.h +uint64.h +select.h +iopause.h +direntry.h +hasshsgr.h +hasdevtcp.h +socket.lib diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/TARGETS b/NONE-CKUBU/src/djbdns/djbdns-1.05/TARGETS new file mode 100644 index 0000000..afc4c49 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/TARGETS @@ -0,0 +1,241 @@ +load +compile +systype +hasdevtcp.h +uint32.h +choose +uint64.h +dnscache-conf.o +generic-conf.o +auto-str.o +makelib +buffer.o +buffer_1.o +buffer_2.o +buffer_copy.o +buffer_get.o +buffer_put.o +strerr_die.o +strerr_sys.o +buffer.a +buffer_read.o +buffer_write.o +error.o +error_str.o +ndelay_off.o +ndelay_on.o +open_read.o +open_trunc.o +openreadclose.o +readclose.o +seek_set.o +socket_accept.o +socket_bind.o +socket_conn.o +socket_listen.o +socket_recv.o +socket_send.o +socket_tcp.o +socket_udp.o +unix.a +byte_chr.o +byte_copy.o +byte_cr.o +byte_diff.o +byte_zero.o +case_diffb.o +case_diffs.o +case_lowerb.o +fmt_ulong.o +ip4_fmt.o +ip4_scan.o +scan_ulong.o +str_chr.o +str_diff.o +str_len.o +str_rchr.o +str_start.o +uint16_pack.o +uint16_unpack.o +uint32_pack.o +uint32_unpack.o +byte.a +auto-str +auto_home.c +auto_home.o +tai_add.o +tai_now.o +tai_pack.o +tai_sub.o +tai_uint.o +tai_unpack.o +taia_add.o +taia_approx.o +taia_frac.o +taia_less.o +taia_now.o +taia_pack.o +taia_sub.o +taia_tai.o +taia_uint.o +libtai.a +dnscache-conf +iopause.h +dnscache.o +droproot.o +okclient.o +log.o +cache.o +query.o +response.o +dd.o +direntry.h +roots.o +select.h +iopause.o +chkshsgr.o +chkshsgr +hasshsgr.h +prot.o +dns_dfd.o +dns_domain.o +dns_dtda.o +dns_ip.o +dns_ipq.o +dns_ipq6.o +dns_mx.o +dns_name.o +dns_nd.o +dns_packet.o +dns_random.o +dns_rcip.o +dns_rcrw.o +dns_resolve.o +dns_sortip.o +dns_transmit.o +dns_txt.o +dns.a +env.o +env.a +alloc.o +alloc_re.o +getln.o +getln2.o +stralloc_cat.o +stralloc_catb.o +stralloc_cats.o +stralloc_copy.o +stralloc_eady.o +stralloc_num.o +stralloc_opyb.o +stralloc_opys.o +stralloc_pend.o +alloc.a +socket.lib +dnscache +walldns-conf.o +walldns-conf +walldns.o +server.o +qlog.o +cdb.o +cdb_hash.o +cdb_make.o +cdb.a +walldns +rbldns-conf.o +rbldns-conf +rbldns.o +rbldns +rbldns-data.o +rbldns-data +pickdns-conf.o +pickdns-conf +pickdns.o +pickdns +pickdns-data.o +pickdns-data +tinydns-conf.o +tinydns-conf +tinydns.o +tdlookup.o +tinydns +tinydns-data.o +tinydns-data +tinydns-get.o +printpacket.o +printrecord.o +parsetype.o +tinydns-get +tinydns-edit.o +tinydns-edit +axfr-get.o +timeoutread.o +timeoutwrite.o +axfr-get +axfrdns-conf.o +axfrdns-conf +axfrdns.o +axfrdns +dnsip.o +dnsip +dnsipq.o +dnsipq +dnsip6q.o +dnsip6q +dnsname.o +dnsname +dnstxt.o +dnstxt +dnsmx.o +dnsmx +dnsfilter.o +sgetopt.o +subgetopt.o +getopt.a +dnsfilter +random-ip.o +random-ip +dnsqr.o +dnsqr +dnsq.o +dnsq +dnstrace.o +dnstrace +dnstracesort +cachetest.o +cachetest +utime.o +utime +rts +prog +install.o +hier.o +install +instcheck.o +instcheck +it +setup +check +scan_0x.o +fmt_xlong.o +ip6_scan.o +ip6_fmt.o +dnsip6.o +dns_ip6.o +dns_sortip6.o +dnsip6 +dns_nd6.o +socket_udp6.o +socket_getifidx.o +socket_bind6.o +socket_noipv6.o +socket_recv6.o +socket_send6.o +haveip6.h +haven2i.h +sockaddr_in6.h +scan_xlong.o +socket_accept6.o +socket_connect6.o +socket_tcp6.o diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/TINYDNS b/NONE-CKUBU/src/djbdns/djbdns-1.05/TINYDNS new file mode 100644 index 0000000..2e41a9a --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/TINYDNS @@ -0,0 +1,25 @@ +The tinydns data.cdb format is subject to change. If you want to write +code that relies on something here, let me know. + +Keys starting with the two bytes \000\045 are locations. The rest of the +key is an IP prefix, normally between 0 and 4 bytes long. The data is a +2-byte location. + +Other keys are owner names for DNS records. The data begins with a +header in the following format: + + * a 2-byte type; + * either \075, or \076 with a 2-byte location; + * a 4-byte TTL; + * an 8-byte timestamp. + +(Exception: Wildcard records replace \075 with \052 and \076 with \053; +also, the owner name omits the wildcard.) The data continues in a +type-specific format: + + * SOA: first domain name, second domain name, 20-byte miscellany. + * NS or PTR or CNAME: domain name. + * MX: 2-byte preference, domain name. + * Other types: no special structure. + +Domain names, types, and numbers are in DNS packet format. diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/TODO b/NONE-CKUBU/src/djbdns/djbdns-1.05/TODO new file mode 100644 index 0000000..8931a9a --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/TODO @@ -0,0 +1,12 @@ +end-to-end nym-based security +link-level security + +try to get the root authorities to set up a secure, usable NS-list system +have dnscache-conf keep track of copies of dnsroots.global +incorporate automatic NS-list upgrades + +consider dead-server table in dnscache or in kernel + +IPv6 lookups +maybe reverse IPv6 lookups; what a mess +DNS over IPv6 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/VERSION b/NONE-CKUBU/src/djbdns/djbdns-1.05/VERSION new file mode 100644 index 0000000..835d795 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/VERSION @@ -0,0 +1 @@ +djbdns 1.05 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/alloc.a b/NONE-CKUBU/src/djbdns/djbdns-1.05/alloc.a new file mode 100644 index 0000000000000000000000000000000000000000..53a037e24acc8cadb169a4c044c35d08a2205d14 GIT binary patch literal 21880 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 bt?PMnsI=fN?|%egFfJs&XLUAO-k;7GAJ literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/alloc.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/alloc.c new file mode 100644 index 0000000..b94e23a --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/alloc.c @@ -0,0 +1,31 @@ +#include +#include "alloc.h" +#include "error.h" + +#define ALIGNMENT 16 /* XXX: assuming that this alignment is enough */ +#define SPACE 2048 /* must be multiple of ALIGNMENT */ + +typedef union { char irrelevant[ALIGNMENT]; double d; } aligned; +static aligned realspace[SPACE / ALIGNMENT]; +#define space ((char *) realspace) +static unsigned int avail = SPACE; /* multiple of ALIGNMENT; 0<=avail<=SPACE */ + +/*@null@*//*@out@*/char *alloc(n) +unsigned int n; +{ + char *x; + n = ALIGNMENT + n - (n & (ALIGNMENT - 1)); /* XXX: could overflow */ + if (n <= avail) { avail -= n; return space + avail; } + x = malloc(n); + if (!x) errno = error_nomem; + return x; +} + +void alloc_free(x) +char *x; +{ + if (x >= space) + if (x < space + SPACE) + return; /* XXX: assuming that pointers are flat */ + free(x); +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/alloc.h b/NONE-CKUBU/src/djbdns/djbdns-1.05/alloc.h new file mode 100644 index 0000000..1b1d893 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/alloc.h @@ -0,0 +1,8 @@ +#ifndef ALLOC_H +#define ALLOC_H + +extern /*@null@*//*@out@*/char *alloc(); +extern void alloc_free(); +extern int alloc_re(); + +#endif diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/alloc.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/alloc.o new file mode 100644 index 0000000000000000000000000000000000000000..9378e82687859878c438b15e65248e526147059d GIT binary patch literal 1920 zcmbW1&1(}u6u{p$)ixU2_yvkW77=N{u12e<2MJV76e(iyARfYGozP%*w`|rLJ@`TO z5TxMIWB-(54qkik&||@aiWkMJP~V$-!(SD)?rt-XA>vtemt#zxe$VhQ=wpvmD}(^Xx7-y`qyVjE%p; zXCZ!^V<(Jq;xp{ek-jxiTpmGPo1MMlPF<7Dwg}xB@4R49pNRimw@+BBm%r24zYN4%5&S1y*) z(e1WcRM~%S@uKA)Lx0p_vCCf5%a zWZ%`C^+nXQFFHa~Hrc705N*AGjVox_d!pE#u{7gss(_w<7yfj;e*P*lTHlr_h9xUt z=ibD)&8Vc71v7H@BeQ2`*54<`5W6k;_UtHqm51_@3-%(T8Q9OCN0zm|%lBs<Zd z^^y|QpUQ(ERgH#><1lJqsYu#U2aJmO1)Q8s4eO$Cj=v|4CuFvZa DVyLd( literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/alloc_re.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/alloc_re.c new file mode 100644 index 0000000..feb8b49 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/alloc_re.c @@ -0,0 +1,17 @@ +#include "alloc.h" +#include "byte.h" + +int alloc_re(x,m,n) +char **x; +unsigned int m; +unsigned int n; +{ + char *y; + + y = alloc(n); + if (!y) return 0; + byte_copy(y,m,*x); + alloc_free(*x); + *x = y; + return 1; +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/alloc_re.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/alloc_re.o new file mode 100644 index 0000000000000000000000000000000000000000..11b8364f23607d728394adb4e729609ef4e52bab GIT binary patch literal 1544 zcmbtT!HN?>5Ut5XH>*Liq7ZP=In0WJ+c+ws9wf5Sv=9V^g%y-AndxQ4Ng|UuB!YMd z3d4BtBRuRUcnqxn;K75QWDg!z@ZdpNt1{i%X~v5dbXV1TRb5rxGtY0fZb z{&)%n*wDbn3~oRb7J;V^++ChV?w&Vor=k0ur$71ROFeymBmK5Zfjr&uru@Z+WQAwz z&`dw`^rJV;sq7gjGkpkesRqxMU7kg5rJaRtjZfaycj%O3w4qo}?}0U{S$1`y@*3lp z5u-&C(suV%>7_j>w~jdE0kqcEt~qC#qWj42JD1o+c45_H-r3v)V8d}Q@w=##IM-Xs zibdqJM2r$(p`ZA`y2Bx`87j6qo3Y;$z=A=qC;AxDA0&dc?yRp46F+#I*Zz;)!CbnI zgT@&R>Ca}>xSD2@c>-72z{uS`kb_)uhfq_UiuCJJpO&~SeWl(g!_a1}bI8+~|C)ap zbE&TqE?u^zb43TyR{bm3L&NNexIH<)nv>=yNaZWMff&^{<&y+X8H5>o8+j9>lzk&l zxn}GV66W1etjfQy5~Vit$v5wgLO0~4I5OcdVl=xs{~}^V^+)pl&LgjjSzqULo8rpw zRgIxjSg-gLyRZ}Lujqvdmrc%{PPm$Kp0HtI9zd^(>!{XGC?k%eHvcuE=zlB1SN?*7 zA4P+p6AKpnHgf~I<3x0V!IQBhHe(^+Bo#rSH>J1vv7gIT0#OL3Z&~3@0#OL3H&(cV KHVMV*-^VWy_llBkRTqW2F@WiS8mnacJNMn2 zENhth!Orx9H{5sb`FHO*=bn4seap@@p}QQ4!en!>?=!-NojNDkPsSz}a8%HiGdI&& zDZ7ysfZ{^eIftM&-M>3~ji>W1|u> zrf~x4k*%zlqkxU}K)@kkN16=dP2*1@lU|w7D--e(J|zs3Q2Ix{Q7;wqmO6A`gzE%^ zRWp#s0`$7GW;2b?%_S*<`W3K`V~j~C_3nWl_fPQu8<2M1-qF5!+0xrPnkzcmBk`V! zp5@CbmM!(iy8Mf|{p2>eSabIVKBbI@)TeM2qSKztwm#{Sj@)mlPjp)z6cJm(=RLZA z2f$Su>1nfYmw`4vhn^xqw1w!o^g2#uY*8M4o}e3f^j<-~fzz*LPq}nXxmD0vL&KKN zu1G`73`fm|28M7pQS_Fv?zkCa4J|$GCS+Qo(MVTAM^{tWZ10MIKypHMmhcv;bh`iisPFJC)37;fdleZb-vbm`9Z^a$4H!+s9Rrq zER~+4GvnBi2@Z~px^$L#9155A?j_rdr0aB%#*F@y>Bx?9)Ar`J4Tg1g9SQcX9L9ny z{)0m$IO0a~y59peDvAj?GN~Ga_hpUhH)4yt3wy~BV{nyXSgw8uWfwfprIOceCza|q zqVK%mYQj*V;@yT^65EP2=QoK%# z*j92Mtf|8~;-B#%9Ep@-y0{;QyP#c_%KT|6n{Acz2i9*OcZ!YVgKne$l(+9`GBz10 zHu}$d`bm0p@p9(`NcL#kAP6o|JmBH1OyPdww8ZjA7)ORZW?BRE5n%ikH?#ZuV2t0|G zNGHx+2CLb2D2;Jd7M{J1LGET@9QbjqH5J$pus#f|ueDy?V7;_%{3h>0#KC$$Wc@Q} zeGth0Ju#WJM$E4p`^w*}RgU(bkDsneJ+LWIAJ`Ola3u2!%$j5?T;aJIGvBdJj-Scd zpX86+hBeuLB3@9H8o|8BYTPi2CATA@__woU>=8IIv!8}l@5>lghi}5LJ`GvTzDY#C zq}IA*y_TW8g(>E3$rw~0EwRQz$lGM8&q#Lo+@WN%uNWIyGFC>x68Z6YHl@#%>rL3} zSQqW3J~OP3Grz*gF|4;j)_X>>UQBNNl~4Z@GI)A^*qbJMGuCS%fJvHb0uz-5lUs_C z8{z$@wbqA0D_uTXorzXjuN&%$s#M5&-@1_bBaW-G)m@e1YmgVk&NdD=LZV}%g@#-&sT3PihVm!eNMzE=&d=6 z#e&x9%shLh_^XHDKz2OI^D(*3&EZ%R4;p-~_stfMKA3uyczkljc|j_@MyYfOmEbb3 z1mknD@7BoxPoCr&cXCrv`ADGp&23ApV}|+|QVrW^y_NYL@KU|3)zjyMw+oTi5;DyPbq>?t+e7R+)ux*_8Htp$cR4e^ z+1o>N)hY46S)=8X7ja5ar)Ws$70>Bd(BL9JKDpUk+GPI1$E?%PI;^X6`45Z2x()wCWVqY3yvsx)8KJ4rCX+ zZ6rn%qk260{%q$Xlr(*1q2vx@cWceB(K~o^rp8#JC&pt)xnf z_`i65(Yt~6Iddo3Lc2`wd*F_$)LK%qYXHN zp0Zu8)ldbMUJ`DbMIe);BP-{FI zjnRmI27Lnjmx!=-mowq2^HdI~gERy2o$xp1o?YJuz7KqMjc(uZ;m08PF`x!L+Ai{g z9Cy(?A;|58+-!D`e;weDg3kjf;z@MczclFEFqVzz`$2ESH7X{FfJCPz_v^;|{X#z2 zk+J2-{-x;qK(~mr_HoCqf>w{7DBPnCItN@t`>OrlL;%N*hrU?l=x zC!hrMp+Id^e80$?Y~<9LJT4UY^#Z2F`jUQJ;QZDH8M)pyLSEu1Yuuj$LLPDBxFX~x z1pcJp3-bRQ$loRM7mA2|`k8=x1pKXl`SM>BPmAwDE)VCW|5SIVQ65mP(0 z=n-_PGqkVNHFVOYJSsr1L8m?DL9JQ6`g>Yguw`?5IHE1}FYzy~sPb2p+e65H#s2cc z;*Yh(%%~aO%>3;UvnATi{E;rR#UEHzTVaN`F#ncF+}{?CwK0G5!;#p-oi;S1HfLK) zG)BL4a4~^2fER7)2$O;sb$6IFKYkSLu=Fowm z2?D*JbDKODlJ+$WsOCuhQil$Vejnt3p9gznKV?0Yv_%-uS(5s?LkGrCZ#iIvFds_^zTa$m})@CG+F#$8n*5vs4sN+Aqod806~D{LXGm^hrSh^Yx#|)9)_Qxn#Gv7!^sw zgudKAfwJFVKh0!gj-3+n#?vbpQi&yUnJp`X8AK0XXt z$~|enym!d|CwYn{N0a#}^`&3Wf|t9#{QdekT@KKsyp7G^lKvMka`olCZ&c_nmx=;P zJqeHH>1*>FxuiDVR>D!LxlK!WJ{*chug#S`OlLG-?0n8KO9I0>SG4s$X Se9xV_M0~KF$|cUS)_(vMMETqR literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/auto-str.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/auto-str.c new file mode 100644 index 0000000..374af92 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/auto-str.c @@ -0,0 +1,40 @@ +#include "buffer.h" +#include "exit.h" + +char bspace[256]; +buffer b = BUFFER_INIT(buffer_unixwrite,1,bspace,sizeof bspace); + +void puts(const char *s) +{ + if (buffer_puts(&b,s) == -1) _exit(111); +} + +int main(int argc,char **argv) +{ + char *name; + char *value; + unsigned char ch; + char octal[4]; + + name = argv[1]; + if (!name) _exit(100); + value = argv[2]; + if (!value) _exit(100); + + puts("const char "); + puts(name); + puts("[] = \"\\\n"); + + while (ch = *value++) { + puts("\\"); + octal[3] = 0; + octal[2] = '0' + (ch & 7); ch >>= 3; + octal[1] = '0' + (ch & 7); ch >>= 3; + octal[0] = '0' + (ch & 7); + puts(octal); + } + + puts("\\\n\";\n"); + if (buffer_flush(&b) == -1) _exit(111); + _exit(0); +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/auto-str.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/auto-str.o new file mode 100644 index 0000000000000000000000000000000000000000..a80c6c5a41502a2fdfcf6c1a4b3798537ea46fed GIT binary patch literal 2560 zcmbtUO=uHQ5PsW48*5Ecf3Tp^MdLp%O%)YIX>HU+MDY&kZ6;XWP{O*N@8iK zf=BVxn^#YYrxyIdi=bW=i+=P?+UU0kish3ZW19SDx0Kd1m=>;L%hL)abN}CPQ5nw2Hoy zr%pgj*qk^UFt5*qDt7@iC$eGl`sYyP4k-0hX7#NbTt`Cp2SsJZIcAohXpk}{dsp8~ zfApEv_vLr3Ph$}uG}1jDi?p~fV4kYo?C&1;N8GfS3=>smiVy20>Jpr!*eM@kY8cw1 z14U~j0QAoUgH>mn$Yl$To=91FU7Q)z_vot!+QfhuXj{Fz4f8IgG@CE3;^j|IcXBJkUW0?-LR(pmh{ z>Ph$L;@Uw)F+dKT#5WV}Bc0hfiqjb&uIlRmZ&ZJBffvwCaabQ~sP&_Ssr9c?eF~pt zYOU>HLD!yH4^QCuRSM2&nI8f>%F;98Mof~!X(gWfXLvsdYENi;(ct`eB^=N5KM5H3 zf^keg2<&2jxavCyxQe0ca`iw>;yVCWXD`QRD2|z03-v~&0<_S#DPR%!;Yif;Bi5+? zB<=4}u*;;@mu<3)etz+_CSxr78cq!RXw(Vf^Eh-4_x<(NdS;)X=I3~09`|WfP{e6j zBny5oi={r-lMU~yL+Vo}dve* zKJD1`y}=2}Q^dVO!W~=)zn?Xa)*uLkIL?ys69@uf4*6F3J4b)K4fa0=GLnizOD=I9 ztbugiV}JQyBb@!0kv`VM|3MS{nUZHY>Cc<^zmoj1Hq&bo@LWOo@p(T;xIDM-P4Hh$ faDv?p4zU89-#uI(d2e*`!5*ynECdR?)&A^Jc3nNg6^a$yW=9!V}RjcaN6F# zNaH7+xBKc?9d&xDcVH=is@^iAV?jRqB06{xbXA}O*g&9RmjCRM|` z`%Yza^5Pw4PP&aby62+EM?$k~GI6+zNcm9skbQAm&K*RE;DA%pBa!-Djv_n89%Wp4}X^6nJj{Ovz^T2J1cA}4OqPnTaor0-0V z#+C&jzi$5x_eX8IJ_dPy_9aqZ6TZHsPdcpqV&vD|g#5Y_k}qGA-7Wm{n%Q5l#QR-G V-tyL&z85_)#lxt`QkB4z!w(R_Hb?*f literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/axfr-get b/NONE-CKUBU/src/djbdns/djbdns-1.05/axfr-get new file mode 100755 index 0000000000000000000000000000000000000000..c38dc1c4ff9e12ea2ff3af8ba2f770981083e99c GIT binary patch literal 29256 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 +#include +#include "uint32.h" +#include "uint16.h" +#include "stralloc.h" +#include "error.h" +#include "strerr.h" +#include "getln.h" +#include "buffer.h" +#include "exit.h" +#include "open.h" +#include "scan.h" +#include "byte.h" +#include "str.h" +#include "ip4.h" +#include "ip6.h" +#include "timeoutread.h" +#include "timeoutwrite.h" +#include "dns.h" + +#define FATAL "axfr-get: fatal: " + +void die_usage(void) +{ + strerr_die1x(100,"axfr-get: usage: axfr-get zone fn fn.tmp"); +} +void die_generate(void) +{ + strerr_die2sys(111,FATAL,"unable to generate AXFR query: "); +} +void die_parse(void) +{ + strerr_die2sys(111,FATAL,"unable to parse AXFR results: "); +} +unsigned int x_copy(char *buf,unsigned int len,unsigned int pos,char *out,unsigned int outlen) +{ + pos = dns_packet_copy(buf,len,pos,out,outlen); + if (!pos) die_parse(); + return pos; +} +unsigned int x_getname(char *buf,unsigned int len,unsigned int pos,char **out) +{ + pos = dns_packet_getname(buf,len,pos,out); + if (!pos) die_parse(); + return pos; +} +unsigned int x_skipname(char *buf,unsigned int len,unsigned int pos) +{ + pos = dns_packet_skipname(buf,len,pos); + if (!pos) die_parse(); + return pos; +} + +static char *zone; +unsigned int zonelen; +char *fn; +char *fntmp; + +void die_netread(void) +{ + strerr_die2sys(111,FATAL,"unable to read from network: "); +} +void die_netwrite(void) +{ + strerr_die2sys(111,FATAL,"unable to write to network: "); +} +void die_read(void) +{ + strerr_die4sys(111,FATAL,"unable to read ",fn,": "); +} +void die_write(void) +{ + strerr_die4sys(111,FATAL,"unable to write ",fntmp,": "); +} + +int saferead(int fd,char *buf,unsigned int len) +{ + int r; + r = timeoutread(60,fd,buf,len); + if (r == 0) { errno = error_proto; die_parse(); } + if (r <= 0) die_netread(); + return r; +} +int safewrite(int fd,char *buf,unsigned int len) +{ + int r; + r = timeoutwrite(60,fd,buf,len); + if (r <= 0) die_netwrite(); + return r; +} +char netreadspace[1024]; +buffer netread = BUFFER_INIT(saferead,6,netreadspace,sizeof netreadspace); +char netwritespace[1024]; +buffer netwrite = BUFFER_INIT(safewrite,7,netwritespace,sizeof netwritespace); + +void netget(char *buf,unsigned int len) +{ + int r; + + while (len > 0) { + r = buffer_get(&netread,buf,len); + buf += r; len -= r; + } +} + +int fd; +buffer b; +char bspace[1024]; + +void put(char *buf,unsigned int len) +{ + if (buffer_put(&b,buf,len) == -1) die_write(); +} + +int printable(char ch) +{ + if (ch == '.') return 1; + if ((ch >= 'a') && (ch <= 'z')) return 1; + if ((ch >= '0') && (ch <= '9')) return 1; + if ((ch >= 'A') && (ch <= 'Z')) return 1; + if (ch == '-') return 1; + return 0; +} + +static char *d1; +static char *d2; +static char *d3; + +stralloc line; +int match; + +int numsoa; + +unsigned int doit(char *buf,unsigned int len,unsigned int pos) +{ + char data[20]; + uint32 ttl; + uint16 dlen; + uint16 typenum; + uint32 u32; + int i; + + pos = x_getname(buf,len,pos,&d1); + pos = x_copy(buf,len,pos,data,10); + uint16_unpack_big(data,&typenum); + uint32_unpack_big(data + 4,&ttl); + uint16_unpack_big(data + 8,&dlen); + if (len - pos < dlen) { errno = error_proto; return 0; } + len = pos + dlen; + + if (!dns_domain_suffix(d1,zone)) return len; + if (byte_diff(data + 2,2,DNS_C_IN)) return len; + + if (byte_equal(data,2,DNS_T_SOA)) { + if (++numsoa >= 2) return len; + pos = x_getname(buf,len,pos,&d2); + pos = x_getname(buf,len,pos,&d3); + x_copy(buf,len,pos,data,20); + uint32_unpack_big(data,&u32); + if (!stralloc_copys(&line,"#")) return 0; + if (!stralloc_catulong0(&line,u32,0)) return 0; + if (!stralloc_cats(&line," auto axfr-get\n")) return 0; + if (!stralloc_cats(&line,"Z")) return 0; + if (!dns_domain_todot_cat(&line,d1)) return 0; + if (!stralloc_cats(&line,":")) return 0; + if (!dns_domain_todot_cat(&line,d2)) return 0; + if (!stralloc_cats(&line,".:")) return 0; + if (!dns_domain_todot_cat(&line,d3)) return 0; + if (!stralloc_cats(&line,".")) return 0; + for (i = 0;i < 5;++i) { + uint32_unpack_big(data + 4 * i,&u32); + if (!stralloc_cats(&line,":")) return 0; + if (!stralloc_catulong0(&line,u32,0)) return 0; + } + } + else if (byte_equal(data,2,DNS_T_NS)) { + if (!stralloc_copys(&line,"&")) return 0; + if (byte_equal(d1,2,"\1*")) { errno = error_proto; return 0; } + if (!dns_domain_todot_cat(&line,d1)) return 0; + if (!stralloc_cats(&line,"::")) return 0; + x_getname(buf,len,pos,&d1); + if (!dns_domain_todot_cat(&line,d1)) return 0; + if (!stralloc_cats(&line,".")) return 0; + } + else if (byte_equal(data,2,DNS_T_CNAME)) { + if (!stralloc_copys(&line,"C")) return 0; + if (!dns_domain_todot_cat(&line,d1)) return 0; + if (!stralloc_cats(&line,":")) return 0; + x_getname(buf,len,pos,&d1); + if (!dns_domain_todot_cat(&line,d1)) return 0; + if (!stralloc_cats(&line,".")) return 0; + } + else if (byte_equal(data,2,DNS_T_PTR)) { + if (!stralloc_copys(&line,"^")) return 0; + if (!dns_domain_todot_cat(&line,d1)) return 0; + if (!stralloc_cats(&line,":")) return 0; + x_getname(buf,len,pos,&d1); + if (!dns_domain_todot_cat(&line,d1)) return 0; + if (!stralloc_cats(&line,".")) return 0; + } + else if (byte_equal(data,2,DNS_T_MX)) { + uint16 dist; + if (!stralloc_copys(&line,"@")) return 0; + if (!dns_domain_todot_cat(&line,d1)) return 0; + if (!stralloc_cats(&line,"::")) return 0; + pos = x_copy(buf,len,pos,data,2); + uint16_unpack_big(data,&dist); + x_getname(buf,len,pos,&d1); + if (!dns_domain_todot_cat(&line,d1)) return 0; + if (!stralloc_cats(&line,".:")) return 0; + if (!stralloc_catulong0(&line,dist,0)) return 0; + } + else if (byte_equal(data,2,DNS_T_A) && (dlen == 4)) { + char ipstr[IP4_FMT]; + if (!stralloc_copys(&line,"+")) return 0; + if (!dns_domain_todot_cat(&line,d1)) return 0; + if (!stralloc_cats(&line,":")) return 0; + x_copy(buf,len,pos,data,4); + if (!stralloc_catb(&line,ipstr,ip4_fmt(ipstr,data))) return 0; + } + else if (byte_equal(data,2,DNS_T_AAAA)) { + char ipstr[IP6_FMT]; + if (!stralloc_copys(&line,"3")) return 0; + if (!dns_domain_todot_cat(&line,d1)) return 0; + if (!stralloc_cats(&line,":")) return 0; + x_copy(buf,len,pos,data,16); + if (!stralloc_catb(&line,ipstr,ip6_fmt_flat(ipstr,data))) return 0; + } + else { + unsigned char ch; + unsigned char ch2; + if (!stralloc_copys(&line,":")) return 0; + if (!dns_domain_todot_cat(&line,d1)) return 0; + if (!stralloc_cats(&line,":")) return 0; + if (!stralloc_catulong0(&line,typenum,0)) return 0; + if (!stralloc_cats(&line,":")) return 0; + for (i = 0;i < dlen;++i) { + pos = x_copy(buf,len,pos,data,1); + ch = data[0]; + if (printable(ch)) { + if (!stralloc_catb(&line,&ch,1)) return 0; + } + else { + if (!stralloc_cats(&line,"\\")) return 0; + ch2 = '0' + ((ch >> 6) & 7); + if (!stralloc_catb(&line,&ch2,1)) return 0; + ch2 = '0' + ((ch >> 3) & 7); + if (!stralloc_catb(&line,&ch2,1)) return 0; + ch2 = '0' + (ch & 7); + if (!stralloc_catb(&line,&ch2,1)) return 0; + } + } + } + if (!stralloc_cats(&line,":")) return 0; + if (!stralloc_catulong0(&line,ttl,0)) return 0; + if (!stralloc_cats(&line,"\n")) return 0; + put(line.s,line.len); + + return len; +} + +stralloc packet; + +int main(int argc,char **argv) +{ + char out[20]; + unsigned long u; + uint16 dlen; + unsigned int pos; + uint32 oldserial = 0; + uint32 newserial = 0; + uint16 numqueries; + uint16 numanswers; + + if (!*argv) die_usage(); + + if (!*++argv) die_usage(); + if (!dns_domain_fromdot(&zone,*argv,str_len(*argv))) die_generate(); + zonelen = dns_domain_length(zone); + + if (!*++argv) die_usage(); + fn = *argv; + if (!*++argv) die_usage(); + fntmp = *argv; + + fd = open_read(fn); + if (fd == -1) { + if (errno != error_noent) die_read(); + } + else { + buffer_init(&b,buffer_unixread,fd,bspace,sizeof bspace); + if (getln(&b,&line,&match,'\n') == -1) die_read(); + if (!stralloc_0(&line)) die_read(); + if (line.s[0] == '#') { + scan_ulong(line.s + 1,&u); + oldserial = u; + } + close(fd); + } + + if (!stralloc_copyb(&packet,"\0\0\0\0\0\1\0\0\0\0\0\0",12)) die_generate(); + if (!stralloc_catb(&packet,zone,zonelen)) die_generate(); + if (!stralloc_catb(&packet,DNS_T_SOA DNS_C_IN,4)) die_generate(); + uint16_pack_big(out,packet.len); + buffer_put(&netwrite,out,2); + buffer_put(&netwrite,packet.s,packet.len); + buffer_flush(&netwrite); + + netget(out,2); + uint16_unpack_big(out,&dlen); + if (!stralloc_ready(&packet,dlen)) die_parse(); + netget(packet.s,dlen); + packet.len = dlen; + + pos = x_copy(packet.s,packet.len,0,out,12); + uint16_unpack_big(out + 4,&numqueries); + uint16_unpack_big(out + 6,&numanswers); + + while (numqueries) { + --numqueries; + pos = x_skipname(packet.s,packet.len,pos); + pos += 4; + } + + if (!numanswers) { errno = error_proto; die_parse(); } + pos = x_getname(packet.s,packet.len,pos,&d1); + if (!dns_domain_equal(zone,d1)) { errno = error_proto; die_parse(); } + pos = x_copy(packet.s,packet.len,pos,out,10); + if (byte_diff(out,4,DNS_T_SOA DNS_C_IN)) { errno = error_proto; die_parse(); } + pos = x_skipname(packet.s,packet.len,pos); + pos = x_skipname(packet.s,packet.len,pos); + pos = x_copy(packet.s,packet.len,pos,out,4); + + uint32_unpack_big(out,&newserial); + + + if (oldserial && newserial) /* allow 0 for very recently modified zones */ + if (oldserial == newserial) /* allow serial numbers to move backwards */ + _exit(0); + + + fd = open_trunc(fntmp); + if (fd == -1) die_write(); + buffer_init(&b,buffer_unixwrite,fd,bspace,sizeof bspace); + + if (!stralloc_copyb(&packet,"\0\0\0\0\0\1\0\0\0\0\0\0",12)) die_generate(); + if (!stralloc_catb(&packet,zone,zonelen)) die_generate(); + if (!stralloc_catb(&packet,DNS_T_AXFR DNS_C_IN,4)) die_generate(); + uint16_pack_big(out,packet.len); + buffer_put(&netwrite,out,2); + buffer_put(&netwrite,packet.s,packet.len); + buffer_flush(&netwrite); + + numsoa = 0; + while (numsoa < 2) { + netget(out,2); + uint16_unpack_big(out,&dlen); + if (!stralloc_ready(&packet,dlen)) die_parse(); + netget(packet.s,dlen); + packet.len = dlen; + + pos = x_copy(packet.s,packet.len,0,out,12); + uint16_unpack_big(out + 4,&numqueries); + + while (numqueries) { + --numqueries; + pos = x_skipname(packet.s,packet.len,pos); + pos += 4; + } + while (pos < packet.len) { + pos = doit(packet.s,packet.len,pos); + if (!pos) die_parse(); + } + } + + if (buffer_flush(&b) == -1) die_write(); + if (fsync(fd) == -1) die_write(); + if (close(fd) == -1) die_write(); /* NFS dorks */ + if (rename(fntmp,fn) == -1) + strerr_die6sys(111,FATAL,"unable to move ",fntmp," to ",fn,": "); + _exit(0); +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/axfr-get.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/axfr-get.o new file mode 100644 index 0000000000000000000000000000000000000000..51f5bd5b8a4364a13228f3b4032698e04155d429 GIT binary patch literal 24296 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 Qxcom(>4*3u{~z&x0EbYPga7~l literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/axfrdns b/NONE-CKUBU/src/djbdns/djbdns-1.05/axfrdns new file mode 100755 index 0000000000000000000000000000000000000000..e189227592486a894edc0c89474c5bd5c1289a3d GIT binary patch literal 41792 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 ZOl(IXQ`bFqw~uFM*yt5EiF&5}e*@Je_YeR8 literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/axfrdns-conf.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/axfrdns-conf.c new file mode 100644 index 0000000..4dc8657 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/axfrdns-conf.c @@ -0,0 +1,71 @@ +#include +#include +#include "strerr.h" +#include "exit.h" +#include "auto_home.h" +#include "generic-conf.h" + +#define FATAL "axfrdns-conf: fatal: " + +void usage(void) +{ + strerr_die1x(100,"axfrdns-conf: usage: axfrdns-conf acct logacct /axfrdns /tinydns myip"); +} + +char *dir; +char *user; +char *loguser; +struct passwd *pw; +char *myip; +char *tinydns; + +int main(int argc,char **argv) +{ + user = argv[1]; + if (!user) usage(); + loguser = argv[2]; + if (!loguser) usage(); + dir = argv[3]; + if (!dir) usage(); + if (dir[0] != '/') usage(); + tinydns = argv[4]; + if (!tinydns) usage(); + if (tinydns[0] != '/') usage(); + myip = argv[5]; + if (!myip) usage(); + + pw = getpwnam(loguser); + if (!pw) + strerr_die3x(111,FATAL,"unknown account ",loguser); + + init(dir,FATAL); + makelog(loguser,pw->pw_uid,pw->pw_gid); + + makedir("env"); + perm(02755); + start("env/ROOT"); outs(tinydns); outs("/root\n"); finish(); + perm(0644); + start("env/IP"); outs(myip); outs("\n"); finish(); + perm(0644); + + start("run"); + outs("#!/bin/sh\nexec 2>&1\nexec envdir ./env sh -c '\n exec envuidgid "); outs(user); + outs(" softlimit -d300000 tcpserver -vDRHl0 -x tcp.cdb -- \"$IP\" 53 "); + outs(auto_home); outs("/bin/axfrdns\n'\n"); + finish(); + perm(0755); + + start("Makefile"); + outs("tcp.cdb: tcp\n"); + outs("\ttcprules tcp.cdb tcp.tmp < tcp\n"); + finish(); + perm(0644); + + start("tcp"); + outs("# sample line: 1.2.3.4:allow,AXFR=\"heaven.af.mil/3.2.1.in-addr.arpa\"\n"); + outs(":deny\n"); + finish(); + perm(0644); + + _exit(0); +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/axfrdns-conf.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/axfrdns-conf.o new file mode 100644 index 0000000000000000000000000000000000000000..d028696bd7fe198bb798dcb0b44ef295babfafe8 GIT binary patch literal 5520 zcmbuDUu+ab9LJ}WKjpyoK-3~ehSC5cx5u?8>-KK1xAt!Lvb)zm z#E3~zA*YD((P)e@5+C%%#1M@_lmtn9!3SP^@x=%c641mKHTCzKo$38Ly-jHNC3`dT zneXp6znR^c-S))3XZjX2H8EvPY&Wa76lLtx;(9$Jsu|YGma**A&Gvn%EBjIxQ&&wzVe_u;;R;|AH9tY^|>)`})P~=|xD} zPIfK;*IG}UvP{U@DSKWp;q=;$WUzT2xzu_%jkNb(B5k6PHi<~Pa3bNX$-H*f`@~{} zf|{5>wkCXP1FLG4xahbr6XU`ykZ4TmH5xWQft#px%u`+;yRl=vzg`PRyft_1x};u< zOtdbk*EDfzT7bgYyT9KzKL2ledOrGh=c%vGQ~%C9^`D_WTe}aRiE!FqV>R4!F4P+D zxf^eTA2TNkUf%H&IoBzqdDS;ZtTd;Po4H)TOYVp$ld_8^1KXJdM_!(^D=^0Tb;)7d zN&3Z@HDTp=*X|9eux2@9dE4Vg5-Qv;@Js3ftm7@(PeZS+tOyK}D^9Uo*(6Y-|zanoOnBh;B19KS4 zzzfTws(Dt)Gy-cPU`8J1&5U8+XNKou1LY}W$LwYbn&@K{hYFrqwwRG~%Vo=f0FE12 z#{OrIB>ce4jbdK+XdL|Uy+vMAB4S4TGIkEvf>@l?vAPDXg&M==fY@$~#aqJ8L_?$7!VB9>JfE z;Jv^b<#{MVKM~C9j%NnV=PRP8`CK9#pDz{vY6SmHay`DFJK^*kxJfwG-_hcqlJWnJ(Emg9_^mr*xKY5cpz#+;uAWn##uvn=C=}H2*H5$MyeF>bFPe@&7VtSkV0Y2&efUlw9TG z3UBy(f#_-eM~EKtxh?g_h@R#@MD%!G`BI;c(A$L5{C&b{{>KT&zZuoJQIj0!g?TFb zl<4XE;+qKlwFvzm5&FgQ;}yGU{56v6`8*k+KNz7eMCg6O>3RMtiG%B}Y)a$mJ@O%m TL-Xg-5%ZT*7i5RVGqU|ZzY_W= literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/axfrdns.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/axfrdns.c new file mode 100644 index 0000000..7079850 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/axfrdns.c @@ -0,0 +1,378 @@ +#include +#include "droproot.h" +#include "exit.h" +#include "env.h" +#include "uint32.h" +#include "uint16.h" +#include "ip4.h" +#include "tai.h" +#include "buffer.h" +#include "timeoutread.h" +#include "timeoutwrite.h" +#include "open.h" +#include "seek.h" +#include "cdb.h" +#include "stralloc.h" +#include "strerr.h" +#include "str.h" +#include "byte.h" +#include "case.h" +#include "dns.h" +#include "scan.h" +#include "qlog.h" +#include "response.h" + +extern int respond(char *,char *,char *); + +#define FATAL "axfrdns: fatal: " + +void nomem() +{ + strerr_die2x(111,FATAL,"out of memory"); +} +void die_truncated() +{ + strerr_die2x(111,FATAL,"truncated request"); +} +void die_netwrite() +{ + strerr_die2sys(111,FATAL,"unable to write to network: "); +} +void die_netread() +{ + strerr_die2sys(111,FATAL,"unable to read from network: "); +} +void die_outside() +{ + strerr_die2x(111,FATAL,"unable to locate information in data.cdb"); +} +void die_cdbread() +{ + strerr_die2sys(111,FATAL,"unable to read data.cdb: "); +} +void die_cdbformat() +{ + strerr_die3x(111,FATAL,"unable to read data.cdb: ","format error"); +} + +int safewrite(int fd,char *buf,unsigned int len) +{ + int w; + + w = timeoutwrite(60,fd,buf,len); + if (w <= 0) die_netwrite(); + return w; +} + +char netwritespace[1024]; +buffer netwrite = BUFFER_INIT(safewrite,1,netwritespace,sizeof netwritespace); + +void print(char *buf,unsigned int len) +{ + char tcpheader[2]; + uint16_pack_big(tcpheader,len); + buffer_put(&netwrite,tcpheader,2); + buffer_put(&netwrite,buf,len); + buffer_flush(&netwrite); +} + +char *axfr; +static char *axfrok; + +void axfrcheck(char *q) +{ + int i; + int j; + + if (!axfr) return; + + i = j = 0; + for (;;) { + if (!axfr[i] || (axfr[i] == '/')) { + if (i > j) { + if (!dns_domain_fromdot(&axfrok,axfr + j,i - j)) nomem(); + if (dns_domain_equal(q,axfrok)) return; + } + j = i + 1; + } + if (!axfr[i]) break; + ++i; + } + + strerr_die2x(111,FATAL,"disallowed zone transfer request"); +} + +static char *zone; +unsigned int zonelen; +char typeclass[4]; + +int fdcdb; +buffer bcdb; +char bcdbspace[1024]; + +void get(char *buf,unsigned int len) +{ + int r; + + while (len > 0) { + r = buffer_get(&bcdb,buf,len); + if (r < 0) die_cdbread(); + if (!r) die_cdbformat(); + buf += r; + len -= r; + } +} + +char ip[4]; +unsigned long port; +char clientloc[2]; + +struct tai now; +char data[32767]; +uint32 dlen; +uint32 dpos; + +void copy(char *buf,unsigned int len) +{ + dpos = dns_packet_copy(data,dlen,dpos,buf,len); + if (!dpos) die_cdbread(); +} + +void doname(stralloc *sa) +{ + static char *d; + dpos = dns_packet_getname(data,dlen,dpos,&d); + if (!dpos) die_cdbread(); + if (!stralloc_catb(sa,d,dns_domain_length(d))) nomem(); +} + +int build(stralloc *sa,char *q,int flagsoa,char id[2]) +{ + unsigned int rdatapos; + char misc[20]; + char type[2]; + char recordloc[2]; + char ttl[4]; + char ttd[8]; + struct tai cutoff; + + dpos = 0; + copy(type,2); + if (flagsoa) if (byte_diff(type,2,DNS_T_SOA)) return 0; + if (!flagsoa) if (byte_equal(type,2,DNS_T_SOA)) return 0; + + if (!stralloc_copyb(sa,id,2)) nomem(); + if (!stralloc_catb(sa,"\204\000\0\0\0\1\0\0\0\0",10)) nomem(); + copy(misc,1); + if ((misc[0] == '=' + 1) || (misc[0] == '*' + 1)) { + --misc[0]; + copy(recordloc,2); + if (byte_diff(recordloc,2,clientloc)) return 0; + } + if (misc[0] == '*') { + if (flagsoa) return 0; + if (!stralloc_catb(sa,"\1*",2)) nomem(); + } + if (!stralloc_catb(sa,q,dns_domain_length(q))) nomem(); + if (!stralloc_catb(sa,type,2)) nomem(); + + copy(ttl,4); + copy(ttd,8); + if (byte_diff(ttd,8,"\0\0\0\0\0\0\0\0")) { + tai_unpack(ttd,&cutoff); + if (byte_equal(ttl,4,"\0\0\0\0")) { + if (tai_less(&cutoff,&now)) return 0; + uint32_pack_big(ttl,2); + } + else + if (!tai_less(&cutoff,&now)) return 0; + } + + if (!stralloc_catb(sa,DNS_C_IN,2)) nomem(); + if (!stralloc_catb(sa,ttl,4)) nomem(); + if (!stralloc_catb(sa,"\0\0",2)) nomem(); + rdatapos = sa->len; + + if (byte_equal(type,2,DNS_T_SOA)) { + doname(sa); + doname(sa); + copy(misc,20); + if (!stralloc_catb(sa,misc,20)) nomem(); + } + else if (byte_equal(type,2,DNS_T_NS) || byte_equal(type,2,DNS_T_PTR) || byte_equal(type,2,DNS_T_CNAME)) { + doname(sa); + } + else if (byte_equal(type,2,DNS_T_MX)) { + copy(misc,2); + if (!stralloc_catb(sa,misc,2)) nomem(); + doname(sa); + } + else + if (!stralloc_catb(sa,data + dpos,dlen - dpos)) nomem(); + + if (sa->len > 65535) die_cdbformat(); + uint16_pack_big(sa->s + rdatapos - 2,sa->len - rdatapos); + return 1; +} + +static struct cdb c; +static char *q; +static stralloc soa; +static stralloc message; + +void doaxfr(char id[2]) +{ + char key[512]; + uint32 klen; + char num[4]; + uint32 eod; + uint32 pos; + int r; + + axfrcheck(zone); + + tai_now(&now); + cdb_init(&c,fdcdb); + + byte_zero(clientloc,2); + key[0] = 0; + key[1] = '%'; + byte_copy(key + 2,4,ip); + r = cdb_find(&c,key,6); + if (!r) r = cdb_find(&c,key,5); + if (!r) r = cdb_find(&c,key,4); + if (!r) r = cdb_find(&c,key,3); + if (!r) r = cdb_find(&c,key,2); + if (r == -1) die_cdbread(); + if (r && (cdb_datalen(&c) == 2)) + if (cdb_read(&c,clientloc,2,cdb_datapos(&c)) == -1) die_cdbread(); + + cdb_findstart(&c); + for (;;) { + r = cdb_findnext(&c,zone,zonelen); + if (r == -1) die_cdbread(); + if (!r) die_outside(); + dlen = cdb_datalen(&c); + if (dlen > sizeof data) die_cdbformat(); + if (cdb_read(&c,data,dlen,cdb_datapos(&c)) == -1) die_cdbformat(); + if (build(&soa,zone,1,id)) break; + } + + cdb_free(&c); + print(soa.s,soa.len); + + seek_begin(fdcdb); + buffer_init(&bcdb,buffer_unixread,fdcdb,bcdbspace,sizeof bcdbspace); + + pos = 0; + get(num,4); pos += 4; + uint32_unpack(num,&eod); + while (pos < 2048) { get(num,4); pos += 4; } + + while (pos < eod) { + if (eod - pos < 8) die_cdbformat(); + get(num,4); pos += 4; + uint32_unpack(num,&klen); + get(num,4); pos += 4; + uint32_unpack(num,&dlen); + if (eod - pos < klen) die_cdbformat(); + pos += klen; + if (eod - pos < dlen) die_cdbformat(); + pos += dlen; + + if (klen > sizeof key) die_cdbformat(); + get(key,klen); + if (dlen > sizeof data) die_cdbformat(); + get(data,dlen); + + if ((klen > 1) && (key[0] == 0)) continue; /* location */ + if (klen < 1) die_cdbformat(); + if (dns_packet_getname(key,klen,0,&q) != klen) die_cdbformat(); + if (!dns_domain_suffix(q,zone)) continue; + if (!build(&message,q,0,id)) continue; + print(message.s,message.len); + } + + print(soa.s,soa.len); +} + +void netread(char *buf,unsigned int len) +{ + int r; + + while (len > 0) { + r = timeoutread(60,0,buf,len); + if (r == 0) _exit(0); + if (r < 0) die_netread(); + buf += r; len -= r; + } +} + +char tcpheader[2]; +char buf[512]; +uint16 len; + +static char seed[128]; + +int main() +{ + unsigned int pos; + char header[12]; + char qtype[2]; + char qclass[2]; + const char *x; + + droproot(FATAL); + dns_random_init(seed); + + axfr = env_get("AXFR"); + + x = env_get("TCPREMOTEIP"); + if (x && ip4_scan(x,ip)) + ; + else + byte_zero(ip,4); + + x = env_get("TCPREMOTEPORT"); + if (!x) x = "0"; + scan_ulong(x,&port); + + for (;;) { + netread(tcpheader,2); + uint16_unpack_big(tcpheader,&len); + if (len > 512) strerr_die2x(111,FATAL,"excessively large request"); + netread(buf,len); + + pos = dns_packet_copy(buf,len,0,header,12); if (!pos) die_truncated(); + if (header[2] & 254) strerr_die2x(111,FATAL,"bogus query"); + if (header[4] || (header[5] != 1)) strerr_die2x(111,FATAL,"bogus query"); + + pos = dns_packet_getname(buf,len,pos,&zone); if (!pos) die_truncated(); + zonelen = dns_domain_length(zone); + pos = dns_packet_copy(buf,len,pos,qtype,2); if (!pos) die_truncated(); + pos = dns_packet_copy(buf,len,pos,qclass,2); if (!pos) die_truncated(); + + if (byte_diff(qclass,2,DNS_C_IN) && byte_diff(qclass,2,DNS_C_ANY)) + strerr_die2x(111,FATAL,"bogus query: bad class"); + + qlog(ip,port,header,zone,qtype," "); + + if (byte_equal(qtype,2,DNS_T_AXFR)) { + case_lowerb(zone,zonelen); + fdcdb = open_read("data.cdb"); + if (fdcdb == -1) die_cdbread(); + doaxfr(header); + close(fdcdb); + } + else { + if (!response_query(zone,qtype,qclass)) nomem(); + response[2] |= 4; + case_lowerb(zone,zonelen); + response_id(header); + response[3] &= ~128; + if (!(header[2] & 1)) response[2] &= ~1; + if (!respond(zone,qtype,ip)) die_outside(); + print(response,response_len); + } + } +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/axfrdns.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/axfrdns.o new file mode 100644 index 0000000000000000000000000000000000000000..b27132862914ae49a661ba798081630b5e130b36 GIT binary patch literal 22536 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 literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/buffer.a b/NONE-CKUBU/src/djbdns/djbdns-1.05/buffer.a new file mode 100644 index 0000000000000000000000000000000000000000..492ae93ffbecbec4bed30ba0e9dcc7eddc327019 GIT binary patch literal 16434 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 literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/buffer.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/buffer.c new file mode 100644 index 0000000..f44a697 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/buffer.c @@ -0,0 +1,10 @@ +#include "buffer.h" + +void buffer_init(buffer *s,int (*op)(),int fd,char *buf,unsigned int len) +{ + s->x = buf; + s->fd = fd; + s->op = op; + s->p = 0; + s->n = len; +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/buffer.h b/NONE-CKUBU/src/djbdns/djbdns-1.05/buffer.h new file mode 100644 index 0000000..fcdc253 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/buffer.h @@ -0,0 +1,59 @@ +#ifndef BUFFER_H +#define BUFFER_H + +typedef struct buffer { + char *x; + unsigned int p; + unsigned int n; + int fd; + int (*op)(); +} buffer; + +#define BUFFER_INIT(op,fd,buf,len) { (buf), 0, (len), (fd), (op) } +#define BUFFER_INSIZE 8192 +#define BUFFER_OUTSIZE 8192 + +extern void buffer_init(buffer *,int (*)(),int,char *,unsigned int); + +extern int buffer_flush(buffer *); +extern int buffer_put(buffer *,const char *,unsigned int); +extern int buffer_putalign(buffer *,const char *,unsigned int); +extern int buffer_putflush(buffer *,const char *,unsigned int); +extern int buffer_puts(buffer *,const char *); +extern int buffer_putsalign(buffer *,const char *); +extern int buffer_putsflush(buffer *,const char *); + +#define buffer_PUTC(s,c) \ + ( ((s)->n != (s)->p) \ + ? ( (s)->x[(s)->p++] = (c), 0 ) \ + : buffer_put((s),&(c),1) \ + ) + +extern int buffer_get(buffer *,char *,unsigned int); +extern int buffer_bget(buffer *,char *,unsigned int); +extern int buffer_feed(buffer *); + +extern char *buffer_peek(buffer *); +extern void buffer_seek(buffer *,unsigned int); + +#define buffer_PEEK(s) ( (s)->x + (s)->n ) +#define buffer_SEEK(s,len) ( ( (s)->p -= (len) ) , ( (s)->n += (len) ) ) + +#define buffer_GETC(s,c) \ + ( ((s)->p > 0) \ + ? ( *(c) = (s)->x[(s)->n], buffer_SEEK((s),1), 1 ) \ + : buffer_get((s),(c),1) \ + ) + +extern int buffer_copy(buffer *,buffer *); + +extern int buffer_unixread(int,char *,unsigned int); +extern int buffer_unixwrite(int,const char *,unsigned int); + +extern buffer *buffer_0; +extern buffer *buffer_0small; +extern buffer *buffer_1; +extern buffer *buffer_1small; +extern buffer *buffer_2; + +#endif diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/buffer.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/buffer.o new file mode 100644 index 0000000000000000000000000000000000000000..0f1c901e04d58e07d05437f8887e22faa385d7b6 GIT binary patch literal 1224 zcmbVL!AiqG5S_HeRxMaXq@Z9usbCkYo)o0eYI+b4qUfz8bxVsTg=EF*#jCw}^bfrH z34#ZI!Qb!;bSB-^IL)aGVP@XEH?uQI9uAHUQp|HZ$`uljJJX@>C+6qV6h1^#?f{aE$w|=eFe4DKZQ^H znEsn_5dG*K$FL3b`JE{Js==b>PHLXf8+;FO>d()k29{ZZbL*Jr7)f53&V-yhiwV9v z;u`&_5o*iz6!YB?^-UN3)Ve9OG&`T4_L9{9S?`a3KfJ##KVpcNfv@k81On;AjS-$S x3E@dMBs}TO6P`_Ki#Y#F0BA3BvHSea>)y26G7v2oI?b-%Rmd&r%A||m_6N~fKtKQh literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/buffer_1.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/buffer_1.c new file mode 100644 index 0000000..2b6464a --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/buffer_1.c @@ -0,0 +1,5 @@ +#include "buffer.h" + +char buffer_1_space[BUFFER_OUTSIZE]; +static buffer it = BUFFER_INIT(buffer_unixwrite,1,buffer_1_space,sizeof buffer_1_space); +buffer *buffer_1 = ⁢ diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/buffer_1.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/buffer_1.o new file mode 100644 index 0000000000000000000000000000000000000000..9c5679546c9361cd6e92e2a1680feae13f56236e GIT binary patch literal 1272 zcma)4O-sW-5S=ttYZ0_J!GrPQ2iS$E2kAiqRVyOiJeMS<7_@0gwpdU4Py7r1H1!YE z8M70^G(s1W_vX!;+0ATTFK#YtmIb^lID@~4Re;Yw3f?dGpb0A_bph(YeD7Yj+i~{K zqagMZ=R_T=qqeKugPa1W>}9C^08ytoJ}}eKRD(*RCtuzB+6NV68K`hH97YKyl97&7 z@Aj^pX+L~i;B*UFw$MfMSr%?j#2nU{7~DmqdRyq8i5WTVFfq7;D0@=s!-!YL*Fdb{ zLr7~g2RK9|P453@@)G1;E*h%-53b)94Wzg8PyM^7<51SOFd@%QUar69LW8oNVw#Iw zW7D)@3RclTbCUBTy=wod8Put0EcX}bA|ziOzGj6`B6j7(=^RyGLb|*)fHmxAq2Dom z87Z{q{^s0d!%|L4?{(y@(!S;SwBUQ@u-A}1j5k;-V=x&EqO|X-5Mm7+6{Mey{V?Ki flEl;JG}ckkf#yZ`;24FGbh;y6d>^DYSw#E+MOu9t;Q51Qlb9H_xQ4B{oVS?Go`MZ{jQXXzB~# zjNO6Fz`?kOen0cq&i3u{_NwGKz{i1em@9SxKIattU+zN{)-3lA6dRXhTBqG^d50Hq zm;|YJs!mk1-cXIBf&!@gwXcH^QD+4{GSl%`gUaIPKs^LH02SsrsA$md$0-KVfsR$@ z?!KPuAbOHx|EqVfkoL1G8u&u9EHg2$ zh~CgNt(by!^k`3Vf8;NlKQ@ax!?=Cqd^=`y$}7Xy)b^OWOE*UEvFuC8m$wG6fz2Gu z_e@hplJ3IaTqL=$QV{F8iM(dbwf9ql@2SVR=EDzAZ?R`%IO_G{tlLx(BpO)FNH-q_ iQOt6bCgYbZ(ebPUwWoXVjKfGi-4P$Y5Av&QBK`oZ$U@%$ literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/buffer_copy.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/buffer_copy.c new file mode 100644 index 0000000..dc4d4b1 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/buffer_copy.c @@ -0,0 +1,16 @@ +#include "buffer.h" + +int buffer_copy(buffer *bout,buffer *bin) +{ + int n; + char *x; + + for (;;) { + n = buffer_feed(bin); + if (n < 0) return -2; + if (!n) return 0; + x = buffer_PEEK(bin); + if (buffer_put(bout,x,n) == -1) return -3; + buffer_SEEK(bin,n); + } +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/buffer_copy.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/buffer_copy.o new file mode 100644 index 0000000000000000000000000000000000000000..a5fa9c5bc7d7172bef25c4bfc7f37e1cb45d5405 GIT binary patch literal 1504 zcmbtUL2DCH5T4COn`%g+cqk}ly@&<-Fl`a_P&T&O6p9D6P^qPE(zmw6BqjR_tsovM z!lDO{{sfO6J&Gdu1H9`^!IOCLP+ey>Z|KWoPde~2Gv7D!X6C(pd3*QJ2Tt1*ctX z#Gf?;@rOsBR#xBqNs^>~_kAeJ)hFq$E337)1RVIUf1?j4QWn5@coUqRisKeX3NNsy zQ;5?dxlcb=OO@xjxzbp@pPvB@;xO`)9a@hTRi!ANBk^C(Ta~=QHjjM)hs^qJgSK*s%-9+Zd%J zRvx={>@g(lv!htfzr%@I+xg_%XGfvS`cMiw;V5D>yFLFXVp;X?>GPXJ-W0pO$(c6A z<>3d9VNzHxdlxse6Y4MPh6&eA4((1jPdQAuFft6FSH^YR=!f4My({~zQ8K-kEF7BK zVJQ1+t=`tIXqg_{Tic4wP|9`M4CVAdrFTeov5$Y0B=lXA(B0Cv%eaR&31Q~F{{=?@ Bgzx|W literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/buffer_get.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/buffer_get.c new file mode 100644 index 0000000..937b75e --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/buffer_get.c @@ -0,0 +1,67 @@ +#include "buffer.h" +#include "byte.h" +#include "error.h" + +static int oneread(int (*op)(),int fd,char *buf,unsigned int len) +{ + int r; + + for (;;) { + r = op(fd,buf,len); + if (r == -1) if (errno == error_intr) continue; + return r; + } +} + +static int getthis(buffer *s,char *buf,unsigned int len) +{ + if (len > s->p) len = s->p; + s->p -= len; + byte_copy(buf,len,s->x + s->n); + s->n += len; + return len; +} + +int buffer_feed(buffer *s) +{ + int r; + + if (s->p) return s->p; + r = oneread(s->op,s->fd,s->x,s->n); + if (r <= 0) return r; + s->p = r; + s->n -= r; + if (s->n > 0) byte_copyr(s->x + s->n,r,s->x); + return r; +} + +int buffer_bget(buffer *s,char *buf,unsigned int len) +{ + int r; + + if (s->p > 0) return getthis(s,buf,len); + if (s->n <= len) return oneread(s->op,s->fd,buf,s->n); + r = buffer_feed(s); if (r <= 0) return r; + return getthis(s,buf,len); +} + +int buffer_get(buffer *s,char *buf,unsigned int len) +{ + int r; + + if (s->p > 0) return getthis(s,buf,len); + if (s->n <= len) return oneread(s->op,s->fd,buf,len); + r = buffer_feed(s); if (r <= 0) return r; + return getthis(s,buf,len); +} + +char *buffer_peek(buffer *s) +{ + return s->x + s->n; +} + +void buffer_seek(buffer *s,unsigned int len) +{ + s->n += len; + s->p -= len; +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/buffer_get.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/buffer_get.o new file mode 100644 index 0000000000000000000000000000000000000000..08b4ee8e4ab360934843f9176df66a21ad3e87e8 GIT binary patch literal 2608 zcmb_d-D@0G6u-NZHd`ID>j!1QKn58l0Xw)_q#u4HH0#dBp%oz&p}Nd&?zW-(5oRZ* z5p2M1LNC)w#D5?UKJ-QKPZ->SAox%eSp;kGK~oisppXZf@tm1^lk3guL-E4yIp=qN z=j-0PcUOweE9q28?6;}to9=eRdW+dj z%p8!D2T=OovA!KN%#0n3noclh<{Yr{PT-q{-Mu;9tK+gnJ}k3^O>9G&%w^r5$=9}FN*L?VLg@zl6v=blDd>jY5H(x9WEl`que*lB?`ok za$Clc>u}sdIdg4j?SS(^`nq;zQf%@AYiy9>imces=vUA?}J}nYJJ%! z>&P1-zl-NZc0s+tS+s$jV1N5hcmy)0A&O9%1a z;e2ua@tX-4sV>&*)T^AQzEvab7WJq*C%^?tFABYbdZj`=uhp(J+BMgoZ?_1TZLc!l z@;$+;Qws6RKCRT+3(LDOcZ$Kp; + if (!p) return 0; + s->p = 0; + return allwrite(s->op,s->fd,s->x,p); +} + +int buffer_putalign(buffer *s,const char *buf,unsigned int len) +{ + unsigned int n; + + while (len > (n = s->n - s->p)) { + byte_copy(s->x + s->p,n,buf); s->p += n; buf += n; len -= n; + if (buffer_flush(s) == -1) return -1; + } + /* now len <= s->n - s->p */ + byte_copy(s->x + s->p,len,buf); + s->p += len; + return 0; +} + +int buffer_put(buffer *s,const char *buf,unsigned int len) +{ + unsigned int n; + + n = s->n; + if (len > n - s->p) { + if (buffer_flush(s) == -1) return -1; + /* now s->p == 0 */ + if (n < BUFFER_OUTSIZE) n = BUFFER_OUTSIZE; + while (len > s->n) { + if (n > len) n = len; + if (allwrite(s->op,s->fd,buf,n) == -1) return -1; + buf += n; + len -= n; + } + } + /* now len <= s->n - s->p */ + byte_copy(s->x + s->p,len,buf); + s->p += len; + return 0; +} + +int buffer_putflush(buffer *s,const char *buf,unsigned int len) +{ + if (buffer_flush(s) == -1) return -1; + return allwrite(s->op,s->fd,buf,len); +} + +int buffer_putsalign(buffer *s,const char *buf) +{ + return buffer_putalign(s,buf,str_len(buf)); +} + +int buffer_puts(buffer *s,const char *buf) +{ + return buffer_put(s,buf,str_len(buf)); +} + +int buffer_putsflush(buffer *s,const char *buf) +{ + return buffer_putflush(s,buf,str_len(buf)); +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/buffer_put.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/buffer_put.o new file mode 100644 index 0000000000000000000000000000000000000000..1810bdd8d4de8b5ca386d95c65246019ed52c6f1 GIT binary patch literal 3224 zcmbtW-)~b@96#Odph(jeG_Hxn^`SAHO0znnnIzh}J9dkWF3$NQZkDcV*|M%B?XCPU z2&QA92;iBT`M!tMocc;+S$psw@X~;lnQc3E%>dD^y#s zo31*{U9nH@G&%`6K>~#6-knQ3rri5FR$uXU9>Ibjf!=i`?)b5H%3XRo)_aZ5NcRq0 zfn++pxV+_Vqfx0k%4bi&d>X5kw^N7v8FDeYl4e6A4?7QBrE|DSH-`=S&kzj4wYnMZ zoi4`M@>u;YYt-FUi}jxWu!o*9v_r6JaEpFs+J%wr#On(hhAVjntm z(T;K4{Dsmg4jJg{dnpjoGh>sfeBk+TPx!g*k#MBTW(f(G4osV=F`#DArW1lIW^$>p znb~iW@Oa8hk?>flM8XWsOeC|#)O3b~(}n5jOdd?~1v3*Kczt+#$xNlEc;)|}1i%&B z;@8v+6y;op)`S@2yH_Mnfb3K-6puY(gM)l#C?e~!VdCc$cL8xF4S81uxV@SS_Yh;M z=Kt0I1@OiE_O=1TkMIxi`UNiP7jgs`wIUacqK*+CO5g@-LzS z&bKyceyjPL3WY&CC;79Xz)aLyP7Ld4RSDwv57PsY+N3z_9mtbu?56L}tTns8SEms^ zED7!aUVYY39eM!X1Nc^`XE#th;vE|W9`OYP;iPRs27w|jT43)qz*6vOm3NZcNBIS? zcP(J%1MENM_CCHGBL1fwALRH9$aubl57x7!*psnxHk&CX_m<6Ynxt~MeZ@&LLz2l% zv6wF;bA@!uoGj!Ch=pQuGH(`zM>bb3O$Y(pRk>sX@D@(yGI`06j2$pD$#h}w0SPQg zd@47&M|LRL0PCZVecR6juJ9fF9|O*75{~Zzfqy6A_>2hL&*zNez+DsgAqmHO68P5= zF2@P+d8%XGXOC2mTdK29viC~(qx{iB^;QWF0FMV}#$A~_ q$iCO{-CUkf@C7a(Q*g2O#}!=c_fHBg_IO#r#UA^3zoJgD$NvJt$xe;{ literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/buffer_read.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/buffer_read.c new file mode 100644 index 0000000..286a06c --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/buffer_read.c @@ -0,0 +1,7 @@ +#include +#include "buffer.h" + +int buffer_unixread(int fd,char *buf,unsigned int len) +{ + return read(fd,buf,len); +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/buffer_read.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/buffer_read.o new file mode 100644 index 0000000000000000000000000000000000000000..fda989fe64b4f6ca153f9b1d68c9f8529cdd64bf GIT binary patch literal 1344 zcmbVLyGjF55S?{>#0MJ1LQpV;h=REo6$=Xq#3zV|U|}Vj-)ov1P>0js^8oDRamJ;SCO7dm?JaSZDpL-_em7rq} zQP&)$JgYo$b?hVxdUq5n`R9_zsPoC!yQ9!AzVw6hMiFUtJ^wIrN%h;j)CJBL(DjAa zNOAq}`J;LA-NcO%pVSHQNiR%1Ke8&~{!RH`aAD{_f!+juQ(gU}IfC9@Y^Gu;HY*hy mTm;rDn-Z|stX;N(EqXf-F^XG>QSly literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/buffer_write.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/buffer_write.c new file mode 100644 index 0000000..fbd26d0 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/buffer_write.c @@ -0,0 +1,7 @@ +#include +#include "buffer.h" + +int buffer_unixwrite(int fd,const char *buf,unsigned int len) +{ + return write(fd,buf,len); +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/buffer_write.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/buffer_write.o new file mode 100644 index 0000000000000000000000000000000000000000..ecd5af0dd8e4bcef6f000fb9b3cfc9c75e78545d GIT binary patch literal 1344 zcmbVMyGjF55S`6N6CX$v3qiryXasXHDi#(Jh>r*&B3M|-CT>X3Y+!eT(MBPaoqyoR z=ok1E78crB2s*QSCz}jgW#I0aIWu$TaY-Kbj}H=t0W1dWLS!)u@Dr&}4D=#Q!Wfjh zpXsOf4`RyQxAg05-~%x3&%o$p40AG-e#Q%lU(mh`;oejLa9AqsWOI9VrC~YQEw!mO z@`4OIZ;-8Fryg6O*;)>(7y8%z0i#|L#~`4*^(=Ya}XyM9@7t)>mC+G;j!2Sc2e zZ>z(T^StL<)ob0!@Q}q++S91GqNwd~xX3B(d2}TscTdZVgzB7T#u2GbTHDMoYu?m6 z!zn8QWvw;z)1AZSZ(}a?mB7<4Tz|cvM4kI*x`2x8iF~=3`HA9up1+73)tB<9iACX% zu}A2a9HqR7JT_(QG&t<8 literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/byte.a b/NONE-CKUBU/src/djbdns/djbdns-1.05/byte.a new file mode 100644 index 0000000000000000000000000000000000000000..96d7b70066c04f0d04385f9f6348af3397ea9681 GIT binary patch literal 38338 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 literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/byte.h b/NONE-CKUBU/src/djbdns/djbdns-1.05/byte.h new file mode 100644 index 0000000..de06c69 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/byte.h @@ -0,0 +1,13 @@ +#ifndef BYTE_H +#define BYTE_H + +extern unsigned int byte_chr(); +extern unsigned int byte_rchr(); +extern void byte_copy(); +extern void byte_copyr(); +extern int byte_diff(); +extern void byte_zero(); + +#define byte_equal(s,n,t) (!byte_diff((s),(n),(t))) + +#endif diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/byte_chr.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/byte_chr.c new file mode 100644 index 0000000..f81dde8 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/byte_chr.c @@ -0,0 +1,20 @@ +#include "byte.h" + +unsigned int byte_chr(s,n,c) +char *s; +register unsigned int n; +int c; +{ + register char ch; + register char *t; + + ch = c; + t = s; + for (;;) { + if (!n) break; if (*t == ch) break; ++t; --n; + if (!n) break; if (*t == ch) break; ++t; --n; + if (!n) break; if (*t == ch) break; ++t; --n; + if (!n) break; if (*t == ch) break; ++t; --n; + } + return t - s; +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/byte_chr.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/byte_chr.o new file mode 100644 index 0000000000000000000000000000000000000000..eabada6294246af1ce9277a832d19c1019a53215 GIT binary patch literal 1392 zcmbVLK}#D!6n?XtHqi>3N=t=GH$6xz)WOsWO9ffbnjA_SiY4B{CT`eL6Ezt@y|l1; z@KEqCc(XsDmm>Hl`WK{^dMOPQ+xN0Fb~8>dKG^-{`}TeB&Ai?H@Z#l?#TckyFc1Hj zQUQ)rqTiQ&xCJ@b|LN>~M(*8n_Kpza3s(MAVq(*)GRO5nMDc}%iY01Z)oLD!m4kDn zc6?@UEjccHFE<@`5q&-MZ7@;wDv57C?xAnP60=@~d_3;i$ZavGwOOB#b)=0NZ^7Y&*~Fk!*G$JM~J(6D0bc==sWxBx@`I7(%2xbda z=XY2773lqyt|R4T;QWuS6Ss{MBi(co(oH)g-Sp;3&zjnzuKy(fBbYgw+Rx?xQr{6_ Utr2y21Jsg=7U+gS^GxsdFPF-6O8@`> literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/byte_copy.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/byte_copy.c new file mode 100644 index 0000000..eaad11b --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/byte_copy.c @@ -0,0 +1,14 @@ +#include "byte.h" + +void byte_copy(to,n,from) +register char *to; +register unsigned int n; +register char *from; +{ + for (;;) { + if (!n) return; *to++ = *from++; --n; + if (!n) return; *to++ = *from++; --n; + if (!n) return; *to++ = *from++; --n; + if (!n) return; *to++ = *from++; --n; + } +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/byte_copy.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/byte_copy.o new file mode 100644 index 0000000000000000000000000000000000000000..1114acf1b5a601cda24acb6b21ec4903763ac172 GIT binary patch literal 1320 zcmbVL&r2IY6n>N0{7|bKMQEV~(~}B181-a9VqJ}hc#!t2o47$~lSnd(@#0}Au_i>f#sg#fDEscXN2s9O;p*hmMb8q~h8 zeNdHl8&oU!?5p5lx7PCO0jO%TUJn|W(rD^HmA606wzXgV6fge#_%&K-^ci+U$?$*f zh+3ZIy+uxb$@ELcEp=>Qa1t?x-*f#%^ius4e(`1N&&5TIsaAZ=AmKgHem)&#y@~(^ z5Gl|4t^N)*s?XQ05hmCM&&6Lg(Vyjs<{U1MqRwYWsn-9&_$+WgaXvfBEtsL)7~>!! z-JRc`=8{zZxADI;eha+5)j3k01NVQpPFyBVjP#_Nke<{b>843mL_(G+5taYF5`bac e8jJPw_+Ba<9qd+{M;%p##~9~oPNsRryZsB!Y+~R5 literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/byte_cr.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/byte_cr.c new file mode 100644 index 0000000..3e7a1d5 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/byte_cr.c @@ -0,0 +1,16 @@ +#include "byte.h" + +void byte_copyr(to,n,from) +register char *to; +register unsigned int n; +register char *from; +{ + to += n; + from += n; + for (;;) { + if (!n) return; *--to = *--from; --n; + if (!n) return; *--to = *--from; --n; + if (!n) return; *--to = *--from; --n; + if (!n) return; *--to = *--from; --n; + } +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/byte_cr.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/byte_cr.o new file mode 100644 index 0000000000000000000000000000000000000000..598d18a9233884123a88cf290cb1cec118c257e5 GIT binary patch literal 1328 zcmbVM-)j>=5T4CN8(Z<(Qly~J_+$mU^lG0hNZLd%lp-SfTrTNJiY6(S6%rrXheL=D zh5j{pE-Hxsf&YRCr6LIZ!JRX`U0sKJ>ca8O_w6@3vvb_-J>Gay5CY5+@Cg1fqXM)n zv2r0-U;;|;{25@zpeLnHC}*Utv)Qz*TTkj&?zs=2Xbk_lis~71dzQ!TLle7 z6=m2mkqY|?P8hDbh>Z}b(^s6JoET9{)S+*`wau2G7cC+2vkP~)?+^Is6L7C)9a zpB>rf^-#X)+;K#@JHJ28C9gi{`Q6m{26%m=b0l98ex_U}?&MC4^t_vpp4%a+d2gQl qV|is!=U)lnzY1X5>gVtG(io_4vl+=IWKnl#5TUoMPo{a=-TnbtHg#wK literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/byte_diff.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/byte_diff.c new file mode 100644 index 0000000..cdbd760 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/byte_diff.c @@ -0,0 +1,16 @@ +#include "byte.h" + +int byte_diff(s,n,t) +register char *s; +register unsigned int n; +register char *t; +{ + for (;;) { + if (!n) return 0; if (*s != *t) break; ++s; ++t; --n; + if (!n) return 0; if (*s != *t) break; ++s; ++t; --n; + if (!n) return 0; if (*s != *t) break; ++s; ++t; --n; + if (!n) return 0; if (*s != *t) break; ++s; ++t; --n; + } + return ((int)(unsigned int)(unsigned char) *s) + - ((int)(unsigned int)(unsigned char) *t); +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/byte_diff.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/byte_diff.o new file mode 100644 index 0000000000000000000000000000000000000000..e34690c56c3fb14c80d4dc3ce10a74430d9d7785 GIT binary patch literal 1392 zcmbW0&rcIU6vyA}ZhwG~L1Q9D6Us#-feEV~j3lJB#S%lr7&P9wj}!+PN*JKuSqeQ(~Ix7iPi%g-#vKpTSv z_~&T~a1?|25a;080Rn7(I%uY#+HlKAwK#6M*GTdG~nw1YPV7ZqkCr-oFC2Gsf(ZO!g4(O8jp4 z2H=a*P|C&PlidB1U)k`QxkuumcrfbF-Do>z?#LRN8G2 zEq~J!etoUh@)|yf>QDLC5Tg-oH&nQR9)o5Guv# ze9h;PsZuI3k~sw@2I%G3(tq+-k`7IXy^hSB9hKDitK`JYJeK@RvqM%_Lpf8q!>Dw3 z^ZqoKr22U^zgsF_i&6lp41`nq%TiAlT;SD`Ii8UV&sij cKmGru(vkk!`bMoLs?gs9_g0SlFTkpKVy literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/byte_zero.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/byte_zero.c new file mode 100644 index 0000000..92009ba --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/byte_zero.c @@ -0,0 +1,13 @@ +#include "byte.h" + +void byte_zero(s,n) +char *s; +register unsigned int n; +{ + for (;;) { + if (!n) break; *s++ = 0; --n; + if (!n) break; *s++ = 0; --n; + if (!n) break; *s++ = 0; --n; + if (!n) break; *s++ = 0; --n; + } +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/byte_zero.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/byte_zero.o new file mode 100644 index 0000000000000000000000000000000000000000..5af28f448ba3d329dcea6e208f50a2af188030b4 GIT binary patch literal 1296 zcmbVL&uddb5T1P-OsW-YX;Emg@uUU2G;N_!K_0gC1r!hdICv^AaZ5#$K(d9lmmZ!T zJP7^)9{f{;!aIAkx1Q@kR1nFbI+M)S&6racmYMIH?|U;l@b=dq+>4X~e-zw-f5@`{ z)qsq9bPN}u1aE%1$JvR>i{S2OCsCd#aChJS$dd@NW9^o!?-KoWcGFy%dEIkm-6)Sy zb1m!YJdVIkX2*p**5F2~*{4F*RXM=+;m-qZJ;71!Jp#2eru1mB^d4s+ewu5~IQBxa zy1G)nxn^rG(q?(dESiP6imA-@QvlQ1ZMd|C(Y5<=%V*B+I55vsmx8HvI$+xNRch?k z#%4QhSTOZgqhXsUX||j-$-}2}9hcT$hRx5OPob4od`^5KW<2ml>VI%4u`!G93g z!-7vZ-oRMGdscr1z0^O#8=j90=0g&5>J^?_2;@vu|IOr87LTyb`#pafdFn6EXC`Ju zL2B2qE;+J%6Fv{6_A(aa?nvwXPrQ+%^b?l5BWa1>|Al?$iQ`L@e?RSISpOsTUm+Hs! SZMRGvPIG`Vf0_0fPWu-U+Fknq literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/cache.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/cache.c new file mode 100644 index 0000000..6302428 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/cache.c @@ -0,0 +1,207 @@ +#include "alloc.h" +#include "byte.h" +#include "uint32.h" +#include "exit.h" +#include "tai.h" +#include "cache.h" + +uint64 cache_motion = 0; + +static char *x = 0; +static uint32 size; +static uint32 hsize; +static uint32 writer; +static uint32 oldest; +static uint32 unused; + +/* +100 <= size <= 1000000000. +4 <= hsize <= size/16. +hsize is a power of 2. + +hsize <= writer <= oldest <= unused <= size. +If oldest == unused then unused == size. + +x is a hash table with the following structure: +x[0...hsize-1]: hsize/4 head links. +x[hsize...writer-1]: consecutive entries, newest entry on the right. +x[writer...oldest-1]: free space for new entries. +x[oldest...unused-1]: consecutive entries, oldest entry on the left. +x[unused...size-1]: unused. + +Each hash bucket is a linked list containing the following items: +the head link, the newest entry, the second-newest entry, etc. +Each link is a 4-byte number giving the xor of +the positions of the adjacent items in the list. + +Entries are always inserted immediately after the head and removed at the tail. + +Each entry contains the following information: +4-byte link; 4-byte keylen; 4-byte datalen; 8-byte expire time; key; data. +*/ + +#define MAXKEYLEN 1000 +#define MAXDATALEN 1000000 + +static void cache_impossible(void) +{ + _exit(111); +} + +static void set4(uint32 pos,uint32 u) +{ + if (pos > size - 4) cache_impossible(); + uint32_pack(x + pos,u); +} + +static uint32 get4(uint32 pos) +{ + uint32 result; + if (pos > size - 4) cache_impossible(); + uint32_unpack(x + pos,&result); + return result; +} + +static unsigned int hash(const char *key,unsigned int keylen) +{ + unsigned int result = 5381; + + while (keylen) { + result = (result << 5) + result; + result ^= (unsigned char) *key; + ++key; + --keylen; + } + result <<= 2; + result &= hsize - 4; + return result; +} + +char *cache_get(const char *key,unsigned int keylen,unsigned int *datalen,uint32 *ttl) +{ + struct tai expire; + struct tai now; + uint32 pos; + uint32 prevpos; + uint32 nextpos; + uint32 u; + unsigned int loop; + double d; + + if (!x) return 0; + if (keylen > MAXKEYLEN) return 0; + + prevpos = hash(key,keylen); + pos = get4(prevpos); + loop = 0; + + while (pos) { + if (get4(pos + 4) == keylen) { + if (pos + 20 + keylen > size) cache_impossible(); + if (byte_equal(key,keylen,x + pos + 20)) { + tai_unpack(x + pos + 12,&expire); + tai_now(&now); + if (tai_less(&expire,&now)) return 0; + + tai_sub(&expire,&expire,&now); + d = tai_approx(&expire); + if (d > 604800) d = 604800; + *ttl = d; + + u = get4(pos + 8); + if (u > size - pos - 20 - keylen) cache_impossible(); + *datalen = u; + + return x + pos + 20 + keylen; + } + } + nextpos = prevpos ^ get4(pos); + prevpos = pos; + pos = nextpos; + if (++loop > 100) return 0; /* to protect against hash flooding */ + } + + return 0; +} + +void cache_set(const char *key,unsigned int keylen,const char *data,unsigned int datalen,uint32 ttl) +{ + struct tai now; + struct tai expire; + unsigned int entrylen; + unsigned int keyhash; + uint32 pos; + + if (!x) return; + if (keylen > MAXKEYLEN) return; + if (datalen > MAXDATALEN) return; + + if (!ttl) return; + if (ttl > 604800) ttl = 604800; + + entrylen = keylen + datalen + 20; + + while (writer + entrylen > oldest) { + if (oldest == unused) { + if (writer <= hsize) return; + unused = writer; + oldest = hsize; + writer = hsize; + } + + pos = get4(oldest); + set4(pos,get4(pos) ^ oldest); + + oldest += get4(oldest + 4) + get4(oldest + 8) + 20; + if (oldest > unused) cache_impossible(); + if (oldest == unused) { + unused = size; + oldest = size; + } + } + + keyhash = hash(key,keylen); + + tai_now(&now); + tai_uint(&expire,ttl); + tai_add(&expire,&expire,&now); + + pos = get4(keyhash); + if (pos) + set4(pos,get4(pos) ^ keyhash ^ writer); + set4(writer,pos ^ keyhash); + set4(writer + 4,keylen); + set4(writer + 8,datalen); + tai_pack(x + writer + 12,&expire); + byte_copy(x + writer + 20,keylen,key); + byte_copy(x + writer + 20 + keylen,datalen,data); + + set4(keyhash,writer); + writer += entrylen; + cache_motion += entrylen; +} + +int cache_init(unsigned int cachesize) +{ + if (x) { + alloc_free(x); + x = 0; + } + + if (cachesize > 1000000000) cachesize = 1000000000; + if (cachesize < 100) cachesize = 100; + size = cachesize; + + hsize = 4; + while (hsize <= (size >> 5)) hsize <<= 1; + + x = alloc(size); + if (!x) return 0; + byte_zero(x,size); + + writer = hsize; + oldest = size; + unused = size; + + return 1; +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/cache.h b/NONE-CKUBU/src/djbdns/djbdns-1.05/cache.h new file mode 100644 index 0000000..f5306c5 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/cache.h @@ -0,0 +1,12 @@ +#ifndef CACHE_H +#define CACHE_H + +#include "uint32.h" +#include "uint64.h" + +extern uint64 cache_motion; +extern int cache_init(unsigned int); +extern void cache_set(const char *,unsigned int,const char *,unsigned int,uint32); +extern char *cache_get(const char *,unsigned int,unsigned int *,uint32 *); + +#endif diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/cache.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/cache.o new file mode 100644 index 0000000000000000000000000000000000000000..51f5bd764cebe21aca491bea540a82ac9d0b3b12 GIT binary patch literal 5888 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 Y;oiDi9^USW-|=v7e}ar-FR=!fe`9wyLI3~& literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/case.h b/NONE-CKUBU/src/djbdns/djbdns-1.05/case.h new file mode 100644 index 0000000..8293a04 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/case.h @@ -0,0 +1,13 @@ +#ifndef CASE_H +#define CASE_H + +extern void case_lowers(char *); +extern void case_lowerb(char *,unsigned int); +extern int case_diffs(const char *,const char *); +extern int case_diffb(const char *,unsigned int,const char *); +extern int case_starts(const char *,const char *); +extern int case_startb(const char *,unsigned int,const char *); + +#define case_equals(s,t) (!case_diffs((s),(t))) + +#endif diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/case_diffb.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/case_diffb.c new file mode 100644 index 0000000..b62a4b2 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/case_diffb.c @@ -0,0 +1,18 @@ +#include "case.h" + +int case_diffb(register const char *s,register unsigned int len,register const char *t) +{ + register unsigned char x; + register unsigned char y; + + while (len > 0) { + --len; + x = *s++ - 'A'; + if (x <= 'Z' - 'A') x += 'a'; else x += 'A'; + y = *t++ - 'A'; + if (y <= 'Z' - 'A') y += 'a'; else y += 'A'; + if (x != y) + return ((int)(unsigned int) x) - ((int)(unsigned int) y); + } + return 0; +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/case_diffb.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/case_diffb.o new file mode 100644 index 0000000000000000000000000000000000000000..ff586369b5b53951aab6c08bb6530916fd56d88e GIT binary patch literal 1296 zcmbVL&r2Io5T4BjjlcS|cu*7)Pgbapt`=HtkzEoK0wOAU4x3~{q$Wc49c(W>6b~K( zJ@zljRa7X}gN2^_4|?duUP5o}O!A)DjydJQ^3C_nd~fCr?8nWmY|OI291Av}$BYW# zMntzGyD$a`IBn<8eyIGW^X=D!NV<^!bYW%IZq=)-XvIZZw8lrhrhD!+cT#U>o8Eaw zWG|b$7>n$U_xf6W7p)6VwCZM$jE6a{_mbxK;4Byw3Uqn=mE>=yXf)fR@>?Y7 zj2jv^fyPC|1b&119rRNF7=F=X`oD;Z7*nt4d5(n7MEO5joYBQ2y3Y8G{swjG&(F0M zk}Sb%GnnTZS$;B~p}ckq6MT16YyA7hsFC}L^WAky_51I%ZxoT<&fiaa>DT{G`)9S^ z0Pk;fj#L+i-+#GI-0r(E()+#y^?nmly&jS^v0<1gU1~r2O8}l=>S<)2hySJIhe4ry TSg90c33|j_oYDd9H9GY_+e2Rf literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/case_diffs.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/case_diffs.c new file mode 100644 index 0000000..683977a --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/case_diffs.c @@ -0,0 +1,17 @@ +#include "case.h" + +int case_diffs(register const char *s,register const char *t) +{ + register unsigned char x; + register unsigned char y; + + for (;;) { + x = *s++ - 'A'; + if (x <= 'Z' - 'A') x += 'a'; else x += 'A'; + y = *t++ - 'A'; + if (y <= 'Z' - 'A') y += 'a'; else y += 'A'; + if (x != y) break; + if (!x) break; + } + return ((int)(unsigned int) x) - ((int)(unsigned int) y); +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/case_diffs.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/case_diffs.o new file mode 100644 index 0000000000000000000000000000000000000000..b53b2a7441768c3e228e248b041e588e975cb922 GIT binary patch literal 1280 zcmbVL!7c+)6uqMjMbkknG$d+;gqIczL8L=FA`wAY%e1CxL))Y?5^OA3uxR3I8au@X z8?5*QOTK`6+xK+b%*sn9=brQKne*Ol=QO=$wrLuurNJV!m{I}a9x>UFlh6$zNGBfk z;S_+W*MjGS&GbL#Te&}((Q z_B#G@56~~8w398+j(W5}xFd9hnWPWNJyT)>R+g9NVq+;gQ?N?088I!UCKDnt-Yfxx zb6j+-45C|UVqR6QedL1Jvs?>A#&JMY>;p^K`Q2Q_D%v2jq4Zv^ZV0W{PG{<{G!sYfafcnBlQL0>znJu1HKa@-R~x(`<;+< tzh9p84!>B``BwrE!OlL 0) { + --len; + x = *s - 'A'; + if (x <= 'Z' - 'A') *s = x + 'a'; + ++s; + } +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/case_lowerb.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/case_lowerb.o new file mode 100644 index 0000000000000000000000000000000000000000..ebd53cca2d46408b2d252d500143242df954b80f GIT binary patch literal 1256 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 SxQr)T9k`4G83!)U`+ot(hCPb_ literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/cdb.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/cdb.c new file mode 100644 index 0000000..3ba1ea3 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/cdb.c @@ -0,0 +1,136 @@ +/* Public domain. */ + +#include +#include +#include +#include +#include "error.h" +#include "seek.h" +#include "byte.h" +#include "cdb.h" + +void cdb_free(struct cdb *c) +{ + if (c->map) { + munmap(c->map,c->size); + c->map = 0; + } +} + +void cdb_findstart(struct cdb *c) +{ + c->loop = 0; +} + +void cdb_init(struct cdb *c,int fd) +{ + struct stat st; + char *x; + + cdb_free(c); + cdb_findstart(c); + c->fd = fd; + + if (fstat(fd,&st) == 0) + if (st.st_size <= 0xffffffff) { + x = mmap(0,st.st_size,PROT_READ,MAP_SHARED,fd,0); + if (x + 1) { + c->size = st.st_size; + c->map = x; + } + } +} + +int cdb_read(struct cdb *c,char *buf,unsigned int len,uint32 pos) +{ + if (c->map) { + if ((pos > c->size) || (c->size - pos < len)) goto FORMAT; + byte_copy(buf,len,c->map + pos); + } + else { + if (seek_set(c->fd,pos) == -1) return -1; + while (len > 0) { + int r; + do + r = read(c->fd,buf,len); + while ((r == -1) && (errno == error_intr)); + if (r == -1) return -1; + if (r == 0) goto FORMAT; + buf += r; + len -= r; + } + } + return 0; + + FORMAT: + errno = error_proto; + return -1; +} + +static int match(struct cdb *c,const char *key,unsigned int len,uint32 pos) +{ + char buf[32]; + int n; + + while (len > 0) { + n = sizeof buf; + if (n > len) n = len; + if (cdb_read(c,buf,n,pos) == -1) return -1; + if (byte_diff(buf,n,key)) return 0; + pos += n; + key += n; + len -= n; + } + return 1; +} + +int cdb_findnext(struct cdb *c,const char *key,unsigned int len) +{ + char buf[8]; + uint32 pos; + uint32 u; + + if (!c->loop) { + u = cdb_hash(key,len); + if (cdb_read(c,buf,8,(u << 3) & 2047) == -1) return -1; + uint32_unpack(buf + 4,&c->hslots); + if (!c->hslots) return 0; + uint32_unpack(buf,&c->hpos); + c->khash = u; + u >>= 8; + u %= c->hslots; + u <<= 3; + c->kpos = c->hpos + u; + } + + while (c->loop < c->hslots) { + if (cdb_read(c,buf,8,c->kpos) == -1) return -1; + uint32_unpack(buf + 4,&pos); + if (!pos) return 0; + c->loop += 1; + c->kpos += 8; + if (c->kpos == c->hpos + (c->hslots << 3)) c->kpos = c->hpos; + uint32_unpack(buf,&u); + if (u == c->khash) { + if (cdb_read(c,buf,8,pos) == -1) return -1; + uint32_unpack(buf,&u); + if (u == len) + switch(match(c,key,len,pos + 8)) { + case -1: + return -1; + case 1: + uint32_unpack(buf + 4,&c->dlen); + c->dpos = pos + 8 + len; + return 1; + } + } + } + + return 0; +} + +int cdb_find(struct cdb *c,const char *key,unsigned int len) +{ + cdb_findstart(c); + return cdb_findnext(c,key,len); +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/cdb.h b/NONE-CKUBU/src/djbdns/djbdns-1.05/cdb.h new file mode 100644 index 0000000..65d0b1a --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/cdb.h @@ -0,0 +1,37 @@ +/* Public domain. */ + +#ifndef CDB_H +#define CDB_H + +#include "uint32.h" + +#define CDB_HASHSTART 5381 +extern uint32 cdb_hashadd(uint32,unsigned char); +extern uint32 cdb_hash(const char *,unsigned int); + +struct cdb { + char *map; /* 0 if no map is available */ + int fd; + uint32 size; /* initialized if map is nonzero */ + uint32 loop; /* number of hash slots searched under this key */ + uint32 khash; /* initialized if loop is nonzero */ + uint32 kpos; /* initialized if loop is nonzero */ + uint32 hpos; /* initialized if loop is nonzero */ + uint32 hslots; /* initialized if loop is nonzero */ + uint32 dpos; /* initialized if cdb_findnext() returns 1 */ + uint32 dlen; /* initialized if cdb_findnext() returns 1 */ +} ; + +extern void cdb_free(struct cdb *); +extern void cdb_init(struct cdb *,int fd); + +extern int cdb_read(struct cdb *,char *,unsigned int,uint32); + +extern void cdb_findstart(struct cdb *); +extern int cdb_findnext(struct cdb *,const char *,unsigned int); +extern int cdb_find(struct cdb *,const char *,unsigned int); + +#define cdb_datapos(c) ((c)->dpos) +#define cdb_datalen(c) ((c)->dlen) + +#endif diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/cdb.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/cdb.o new file mode 100644 index 0000000000000000000000000000000000000000..bb09e7988c177f926ac17f8c953de6af5de1fe23 GIT binary patch literal 3728 zcmbW3U2IcT9KcW4Aw_3z#Ysk-tPeM2OQftoggK+_+OacM(YOs!2DRJTY+-Ge_Ac2J z1=1CBycDO=ga@NMXu^XrMiT|1vB1U{4~CFnctXV>A7y|a(HWif|3CMh?RZ&VILUg> z`JMmg`S{=MZVqiMv)PDfHu5Byp9xCH*rNHdj}LvMf-E7EEiRm$RBA>!rL0T+fwBSh zDrJ9%Sg(3J1e2Lo_B+kosHOUPcAjSc&^q*%iiXo^?^RUNAHrYeI#Ps2^)A&x^#Rot z(tFja5RBY3GhTZ#rql!psXN_pHZ{f0c=I84h2|=kv76k6H(!|0cRSd(e3r@EwAI;Z zt!>QDrn#Q}iX+6XhuF`?`b=?Xnc^31f0+UBi=l&NRaO-&82H;X0m*4YasaQT(Hc+0_qXG-i0Zu?}9`6j^+l;Bgj=uzydKh z`zFKyxzfEq78esDLQzIF$N;RnY3^0idb>M&ZjM(|c1t*=-g7KadHky5&$RpaB|BUQ zYHzQGbGUY6wpdhZ_MkiS{anK_=EJX%{uIp?HAPQXa9ecJj?3F1VYmie>TP^qGwe6I z_r_u1l+ALn$!7i(*>(qIm)ON`Fi*aa%?~LQ&ZgdYU=62UTTb=&)Ptz2f2VzFZk z)R0&66+#?lj~%jg=KM1DoA#Aw7CoIS+i!1i)*EXb=6XXJ44Ry-CTCTX)7|8(^*ihR z&JCHx`|jDlC|7>K{$^Q=6P-arfBX4}KwX+|$Uiivk6`b2x-wuF`RU#0m)er4vTOLH;I-)D?`cqY*9g+KHo&bA66w3YCO+~S7#7BUKQR{SV1 zw0XDskAW`wH^YRH(S-jC0+_vsUtli`tTFL5ry((B3S$2F;Sl;Fe;+XPZ*5ilD?><) zWx*=j3hP#eD(g*si~1e14}gGm?_~WKEC#H;aBkf@R2ef99W)p5Iv}#UpNw=3!X6Wg*Vwgm*xMx+X;LcEDgz0DIT#u z_%9A}@!l?*dMlt8%tX9fU4l23;LRoY<`TTU1m6Li$8R1Cuff2uGA$J6NC}=P!Ldf8 zeV=(rM6G_;1cFkI33jpS2AS!6IyD{ zYy!UqLx9$<2@fR(vCwnv-u_sO3-v|PeRI;rAQg?0_)sDq8RYZ+M85{{#D*b6jl>aS z^YLHf&0EP+B^ykjf}vfpt@UXkPj=6ynW ztWm;FT;fc?}jlpJVP^NKHtE9=eci_@% literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/cdb_hash.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/cdb_hash.c new file mode 100644 index 0000000..71102e1 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/cdb_hash.c @@ -0,0 +1,21 @@ +/* Public domain. */ + +#include "cdb.h" + +uint32 cdb_hashadd(uint32 h,unsigned char c) +{ + h += (h << 5); + return h ^ c; +} + +uint32 cdb_hash(const char *buf,unsigned int len) +{ + uint32 h; + + h = CDB_HASHSTART; + while (len) { + h = cdb_hashadd(h,*buf++); + --len; + } + return h; +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/cdb_hash.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/cdb_hash.o new file mode 100644 index 0000000000000000000000000000000000000000..3dd100e7ebae881fd7194f9d242613636c01040f GIT binary patch literal 1360 zcmbtUK}#D^5T556v$nycrJ~S+@l*wUbgc)gAOX{457L9^SzeNrNSg$*Pq4ix*n&9( z{51iOBD5a0zd*e7*!EJ37dw-EPuFQqI`DSp`)0nKc>}vUZF1LQPPL3)6j2>v>(+Y^~jBrv(_W*km|Du}#7&4w5@v{b7--X4crTOec zJ}7OfdUjU6mNV0y^d_SaK!zV{T9wf2X5_0j(!sU{Sy5VnEQKM+X7EADpt`=%RJ8zP zxlyYHbu6hjbRdiG)}}+P%J0n(4|LB_Pb(f^@5vdQXMBd?am1u|82_1J3;S(g{7dvM zp8M)O)KdRGJaOAMz>kv{Q?Iy9A>cDnKAVWDUPTTD(Nmq(j~adfJ@w~yYKSqG;I()Q__j2>E gC|64BRTWlc8EmL3m7CZ$&YFPs9>3KbR(9{>OV literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/cdb_make.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/cdb_make.c new file mode 100644 index 0000000..278420f --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/cdb_make.c @@ -0,0 +1,152 @@ +/* Public domain. */ + +#include "seek.h" +#include "error.h" +#include "alloc.h" +#include "cdb.h" +#include "cdb_make.h" + +int cdb_make_start(struct cdb_make *c,int fd) +{ + c->head = 0; + c->split = 0; + c->hash = 0; + c->numentries = 0; + c->fd = fd; + c->pos = sizeof c->final; + buffer_init(&c->b,buffer_unixwrite,fd,c->bspace,sizeof c->bspace); + return seek_set(fd,c->pos); +} + +static int posplus(struct cdb_make *c,uint32 len) +{ + uint32 newpos = c->pos + len; + if (newpos < len) { errno = error_nomem; return -1; } + c->pos = newpos; + return 0; +} + +int cdb_make_addend(struct cdb_make *c,unsigned int keylen,unsigned int datalen,uint32 h) +{ + struct cdb_hplist *head; + + head = c->head; + if (!head || (head->num >= CDB_HPLIST)) { + head = (struct cdb_hplist *) alloc(sizeof(struct cdb_hplist)); + if (!head) return -1; + head->num = 0; + head->next = c->head; + c->head = head; + } + head->hp[head->num].h = h; + head->hp[head->num].p = c->pos; + ++head->num; + ++c->numentries; + if (posplus(c,8) == -1) return -1; + if (posplus(c,keylen) == -1) return -1; + if (posplus(c,datalen) == -1) return -1; + return 0; +} + +int cdb_make_addbegin(struct cdb_make *c,unsigned int keylen,unsigned int datalen) +{ + char buf[8]; + + if (keylen > 0xffffffff) { errno = error_nomem; return -1; } + if (datalen > 0xffffffff) { errno = error_nomem; return -1; } + + uint32_pack(buf,keylen); + uint32_pack(buf + 4,datalen); + if (buffer_putalign(&c->b,buf,8) == -1) return -1; + return 0; +} + +int cdb_make_add(struct cdb_make *c,const char *key,unsigned int keylen,const char *data,unsigned int datalen) +{ + if (cdb_make_addbegin(c,keylen,datalen) == -1) return -1; + if (buffer_putalign(&c->b,key,keylen) == -1) return -1; + if (buffer_putalign(&c->b,data,datalen) == -1) return -1; + return cdb_make_addend(c,keylen,datalen,cdb_hash(key,keylen)); +} + +int cdb_make_finish(struct cdb_make *c) +{ + char buf[8]; + int i; + uint32 len; + uint32 u; + uint32 memsize; + uint32 count; + uint32 where; + struct cdb_hplist *x; + struct cdb_hp *hp; + + for (i = 0;i < 256;++i) + c->count[i] = 0; + + for (x = c->head;x;x = x->next) { + i = x->num; + while (i--) + ++c->count[255 & x->hp[i].h]; + } + + memsize = 1; + for (i = 0;i < 256;++i) { + u = c->count[i] * 2; + if (u > memsize) + memsize = u; + } + + memsize += c->numentries; /* no overflow possible up to now */ + u = (uint32) 0 - (uint32) 1; + u /= sizeof(struct cdb_hp); + if (memsize > u) { errno = error_nomem; return -1; } + + c->split = (struct cdb_hp *) alloc(memsize * sizeof(struct cdb_hp)); + if (!c->split) return -1; + + c->hash = c->split + c->numentries; + + u = 0; + for (i = 0;i < 256;++i) { + u += c->count[i]; /* bounded by numentries, so no overflow */ + c->start[i] = u; + } + + for (x = c->head;x;x = x->next) { + i = x->num; + while (i--) + c->split[--c->start[255 & x->hp[i].h]] = x->hp[i]; + } + + for (i = 0;i < 256;++i) { + count = c->count[i]; + + len = count + count; /* no overflow possible */ + uint32_pack(c->final + 8 * i,c->pos); + uint32_pack(c->final + 8 * i + 4,len); + + for (u = 0;u < len;++u) + c->hash[u].h = c->hash[u].p = 0; + + hp = c->split + c->start[i]; + for (u = 0;u < count;++u) { + where = (hp->h >> 8) % len; + while (c->hash[where].p) + if (++where == len) + where = 0; + c->hash[where] = *hp++; + } + + for (u = 0;u < len;++u) { + uint32_pack(buf,c->hash[u].h); + uint32_pack(buf + 4,c->hash[u].p); + if (buffer_putalign(&c->b,buf,8) == -1) return -1; + if (posplus(c,8) == -1) return -1; + } + } + + if (buffer_flush(&c->b) == -1) return -1; + if (seek_begin(c->fd) == -1) return -1; + return buffer_putflush(&c->b,c->final,sizeof c->final); +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/cdb_make.h b/NONE-CKUBU/src/djbdns/djbdns-1.05/cdb_make.h new file mode 100644 index 0000000..49ea719 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/cdb_make.h @@ -0,0 +1,39 @@ +/* Public domain. */ + +#ifndef CDB_MAKE_H +#define CDB_MAKE_H + +#include "buffer.h" +#include "uint32.h" + +#define CDB_HPLIST 1000 + +struct cdb_hp { uint32 h; uint32 p; } ; + +struct cdb_hplist { + struct cdb_hp hp[CDB_HPLIST]; + struct cdb_hplist *next; + int num; +} ; + +struct cdb_make { + char bspace[8192]; + char final[2048]; + uint32 count[256]; + uint32 start[256]; + struct cdb_hplist *head; + struct cdb_hp *split; /* includes space for hash */ + struct cdb_hp *hash; + uint32 numentries; + buffer b; + uint32 pos; + int fd; +} ; + +extern int cdb_make_start(struct cdb_make *,int); +extern int cdb_make_addbegin(struct cdb_make *,unsigned int,unsigned int); +extern int cdb_make_addend(struct cdb_make *,unsigned int,unsigned int,uint32); +extern int cdb_make_add(struct cdb_make *,const char *,unsigned int,const char *,unsigned int); +extern int cdb_make_finish(struct cdb_make *); + +#endif diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/cdb_make.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/cdb_make.o new file mode 100644 index 0000000000000000000000000000000000000000..c8d65304fd04969fdb671eea30d8f1781e299562 GIT binary patch literal 4288 zcmbVP-ESP#6~F79#GBOYZi7=SLFE;i7FUo}CW&a=lCtBB@!e>k2_0P+KowE(5t{WTbe*a|8mWBbDGz|x35ftfh$v!v&YijT zc;bEGNaH#8ch5cF_ssf8zy3g5C`1H>$ZyE>A~z`e zpU#Hm&vjVbP}#q!^;r+KkCM%Vu&-72Us^dAo2tN3dy;k&vST4k$dL(pTx0Sa%{`Bp zZKY6J`;TOCnUD)uRu{k_s~WLxw8y3y=wMtj)F>TsISp9TWtD2IJ4L8HC`YJ0BFA-m zSnkq+OHk`<&zV^FU(kJ}dU`ilY#>kB+-prB@X)MN+d`M?+yQrYG6j;9*@!FE#WaZK zW8G7@=_;@{BFo}j%ay5oKA#l(n4bpEOPYPhQ-gWIbg+f=f@x>bv zP)FIPI$PjtR#U1NP~7^qxg1VRtMQ1y+_F9O4@y=2y}DO@Wbf~wB4BKLtXqS4royBL zy#&QpRiZnHL`Zp&+B_mIib#^yn-Gt_9*5y#_@6wz#Wub-;_<-jaPfF!n z`JLCXUz7`w60l=W-O8n^y>qd?d1}=pI{7WP^$D8~^Fr=`{B_4>PQWo%hrs3*!aPb^ zsZv&>%!)u#VpB>RHUw6lI#Nx!02^^$0B$GzB9Di`>z)-MeM;>&u~4+qG=FQ)U|T^n zy}HfSI)|`y;3v(!Yh8o5I^Uy{HS!}cB^|RGA?y1lla5il^F3Bgv(9Sy18SdkBW;%d zMjaix$g!|$SlF(9rP;4sr`DWAnI^|6)3NC^xywG80-0UTsb7->A)5VHObU+@F$u7p z&ONeM?#fkjlhfaX5S@;G-FuN|kE4 zLG5!7#6sS4?HrWPX$BSlY&*LKH#*JU(bySbqpY}dWR=;Y+os&3 zg9n>2jc1nT$Aiu(8QY0n*4cHPHH9kkRd!Kl*Zj!Kxcr6-u#3nqEDt$0w>%eCnp(t` z@y9oaVGPSR-09Fo>oa&=kbuQ@@>pynr1}irK_r!ZRiDAW#^h1wH23=?rkS#j*q7>S znAv}zBzMxi1DfY1`WJ`TySPK76UBf+e}0&RCgP!RM|5C(h=L{DyAL;ka`B zOqe7&oHer~IW#^_k{mS-Wb&o#s6mpsvC&bZ2qMKX(?||Hw0G0Enav#()_?FD{l|2# z4QNPt>t6;o;sLqaVa;b$0RQ|J7x<%F9LqHz6U6w}z$4C!_)~zP{UGi3es{rV zYy|~n)36)F@W7bwcbi{9Q1-{L8O)vk{G4Y@vj4X zHTw~-e?CDaJ__3RZLMHYP9k44SAgCkd{Y$eMtD_E(7)9xj5t>GW(qG=dF5W1++36n z5ZU1KhtEF1aNY#(8fv?<1-`Wfem~%-Kj9@V2WzA~@T{hPUkiK`aMXjd8i~(Xcs~u# zYI>e&fgfvuzYI9)KkucQ&tkw{X(9i*C;y690zQ)gn{OfiQ45^phKDkv*@H$hx5Q?$ z!^1{#m}Eyr#&RT+F-oQ4SO)m4Sr{u4SdNu4#j#Oibj6V&V}GGY%7vo2bxYD-rfx;eJXtE3hR_0rObDG+@edGQN4#_2!LJ`A@h>3acx46N?$sG_yt@L|d^lcFf$wR7 zXMK3oCqICSfr9>Q@`eH8e*LKy_(dP?_y3X)_xr!m>#v~xyIbJ*`*6Si(>@&gU*zE> zAC9wC;BWcx4L*FW*T3iw&H^F7$A|mv=33w-ACAAVgq{uFcNBB;6Lzd5plt{COgPi+OT9fQva$4dCLw{~y2Nn(_bu literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/chkshsgr b/NONE-CKUBU/src/djbdns/djbdns-1.05/chkshsgr new file mode 100755 index 0000000000000000000000000000000000000000..8bc31847958712290e145132ac9928ddd744225b GIT binary patch literal 4664 zcmdT{Z){Ul6u*7#{(!hG2yu=jt4WuDy2m!gQbhC(CcH^wCWvArcHP>p)vc}VD-MIP zNuA-POq)m|F)`T(Kaj`=KF*j($NI{(_#iTt8)`)6As^HRO z4{EE$xt|dP=Xb-j(0u;?^kZ!gth+zq5h#KQ9ibhRKhifd8wGdtjAP;kmQGcvv zK;o<$DUY?B5Ao1MUXgf3;<28@fk9aF{BUk~HPd*_iUt~U>;i114KJZ1NE2LkykDY1+~dGo z3HSa5E`q_~(PSc+F+yo07!**hA*@cf2u8-@hR8&W;dC;a%822GRxpTOL>Udm6Jkf8 zZ|k;Tr`oA*l<^d(75=amE`c@13nkkWUxt<3ZkeKe*???ejcIDq?k60#C2cW@@3rCf zx)0cJ-ZMyu*>L;X>G{jGj?BgD}2r)#Gx8<$skMWuBG-0NF3XrUd$q2|t4 zKw1^FG1a+QY5(p48&jMsN&6?XF}1l9V0T>UGe3JqH!tYIW;TQ zObS%_O>q3BSj3$4Le&8nKp!s|N@Z52RJ6+;-MqLP9dlbI!B1p&PUUI_gkD(v7Sh_r z&^R^k)+hE>^i5|ot@SNA$VKQATV1+Yl?A8Dst=`CVf8RlHl0mh_^4_(G+h|(=`+*O zXjH9lc?D@=kDlN1km7{_%!@|T6hfF=!^uMssLz}}(^L5d>vU$?%5rx{=_D2hQf$!8 z@1irkKB!G}#^Zx3e|n=*882m5LWguJe*!?h<_HF-ecbAGq35VuDkop zFUoEhSRcP)GS~X?DN4=jQAP?g|M$N04;Bz zVEEPs3I~1dP$oZ3x45t#uyFGN%9)?97JfN8VA0$G%91fZAg_uns zJt+)1ZN_nLpzwLH!ZJmpN0Y7F$v#?b*&ebr#j>y6s3Z|ek1|+&z{~EIIBt1p(8J{GZpCcR(4nHYuLwV(Va^w$n zleUZeu9BUmeuDpV#m|3dpzX9yPmqq1-cQ=;FLrF(cE5LRZ)7kYN_e}}4QgjwhuX2u zYQl5(f7`8QVi_ZCga(BgPZ*JON~npX5m9@#_O%(IVWAEuvT7`pi3v4)AdxvRYH1^F z_3V$NGx20%i4lapbYvui1Zt&53>+Vx#HtY)gL@PV=u3t}Mo6fUSTLFnjYfj8FmTxt z>X4C4XCR=Zo*jZt7&9~)AA*2M7zS>t9NQXaFazF0$HY|d(7waCPe_}&*u;GX;^VDG_VHD=kusYK#?4)LF3$+&*#Dh!0;?$zSpgR zC4`p_C_c|52sa$VE}Ox?vxND4ex!-d=Pu{ZeynxiiT^J6;`(uXeBDJkM0{sFr+or^ajMMc=P7?@PvYPpRE~xH z%Xz&AefIeLozzY*5YBjPv;M%r=l2;u@%KOsfN>Vl6yI~Hl<&o z7mD}s4S2)4=hx;J#@OIGGI~h1>Gf=>{%R>0VY5QEHa6CSJDa-Mi~GTvdZ-?(hAO;U zm;fp}N=)2DZPG$_*-G_?SQ$Mup!Q-DgKB0OsGREVPCJbg4XQOr65Yp?{=jIp_4?gv zX5!X9cR#ldu#(R2qF5oae!f>HR(EVNui;Y>jNI{s0`3+H7Ex251?yk6`nKi1^;vyo zLulFSKE`Ry^VUDYTAFKik7$#O3k8p@X2tWfAEF^=qS$Y{f8HnUpAgqGkC0J+Dc>!) zDFQP0CB`MAlAofEU733s1M=)Bm+Rkiq1CdUe0g@18ree$Y{4aDw0F7xDzdWvyY~F< zVcZqj-;KF8kJO9?ta$II;mofe`T XPTw-~Cl04OX5Ki12bR+s?sxMKk!F7l literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/choose b/NONE-CKUBU/src/djbdns/djbdns-1.05/choose new file mode 100755 index 0000000..56e77a1 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/choose @@ -0,0 +1,20 @@ +#!/bin/sh +# WARNING: This file was auto-generated. Do not edit! + +result="$4" + +case "$1" in + *c*) ./compile $2.c >/dev/null 2>&1 || result="$3" ;; +esac + +case "$1" in + *l*) ./load $2 >/dev/null 2>&1 || result="$3" ;; +esac + +case "$1" in + *r*) ./$2 >/dev/null 2>&1 || result="$3" ;; +esac + +rm -f $2.o $2 + +exec cat "$result" diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/choose.sh b/NONE-CKUBU/src/djbdns/djbdns-1.05/choose.sh new file mode 100644 index 0000000..feff2da --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/choose.sh @@ -0,0 +1,18 @@ + +result="$4" + +case "$1" in + *c*) ./compile $2.c >/dev/null 2>&1 || result="$3" ;; +esac + +case "$1" in + *l*) ./load $2 >/dev/null 2>&1 || result="$3" ;; +esac + +case "$1" in + *r*) ./$2 >/dev/null 2>&1 || result="$3" ;; +esac + +rm -f $2.o $2 + +exec cat "$result" diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/compile b/NONE-CKUBU/src/djbdns/djbdns-1.05/compile new file mode 100755 index 0000000..5263385 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/compile @@ -0,0 +1,3 @@ +#!/bin/sh +# WARNING: This file was auto-generated. Do not edit! +exec gcc -O2 -Wimplicit -Wunused -Wcomment -Wchar-subscripts -Wuninitialized -Wshadow -Wcast-qual -Wcast-align -Wwrite-strings -c ${1+"$@"} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/conf-cc b/NONE-CKUBU/src/djbdns/djbdns-1.05/conf-cc new file mode 100644 index 0000000..b315ecb --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/conf-cc @@ -0,0 +1,3 @@ +gcc -O2 -Wimplicit -Wunused -Wcomment -Wchar-subscripts -Wuninitialized -Wshadow -Wcast-qual -Wcast-align -Wwrite-strings + +This will be used to compile .c files. diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/conf-home b/NONE-CKUBU/src/djbdns/djbdns-1.05/conf-home new file mode 100644 index 0000000..e5e30ed --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/conf-home @@ -0,0 +1,4 @@ +/usr/local + +This is the dnscache home directory. Programs will be installed in +.../bin. diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/conf-ld b/NONE-CKUBU/src/djbdns/djbdns-1.05/conf-ld new file mode 100644 index 0000000..59a0de7 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/conf-ld @@ -0,0 +1,3 @@ +gcc -s + +This will be used to link .o files into an executable. diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/dd.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/dd.c new file mode 100644 index 0000000..778cbdc --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/dd.c @@ -0,0 +1,36 @@ +#include "dns.h" +#include "dd.h" + +int dd(const char *q,const char *base,char ip[4]) +{ + int j; + unsigned int x; + + for (j = 0;;++j) { + if (dns_domain_equal(q,base)) return j; + if (j >= 4) return -1; + + if (*q <= 0) return -1; + if (*q >= 4) return -1; + if ((q[1] < '0') || (q[1] > '9')) return -1; + x = q[1] - '0'; + if (*q == 1) { + ip[j] = x; + q += 2; + continue; + } + if (!x) return -1; + if ((q[2] < '0') || (q[2] > '9')) return -1; + x = x * 10 + (q[2] - '0'); + if (*q == 2) { + ip[j] = x; + q += 3; + continue; + } + if ((q[3] < '0') || (q[3] > '9')) return -1; + x = x * 10 + (q[3] - '0'); + if (x > 255) return -1; + ip[j] = x; + q += 4; + } +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/dd.h b/NONE-CKUBU/src/djbdns/djbdns-1.05/dd.h new file mode 100644 index 0000000..c090358 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/dd.h @@ -0,0 +1,6 @@ +#ifndef DD_H +#define DD_H + +extern int dd(const char *,const char *,char *); + +#endif diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/dd.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/dd.o new file mode 100644 index 0000000000000000000000000000000000000000..a41ad1a39f273300831e7927f8bbc63341c8ca6b GIT binary patch literal 1544 zcmbW1&1(}u6u@V*sZH9FjgmuAApwh2uuG%TgZPnc(k8(o!L|p{5;olpEj9@z8(KZs zz^Zh?h2p>9AK;|~F9x+$>d7D;^yI}uAu9FYp{UgNk{P=l_tXdB&HKHtc{7<^9-A2V z2m)aukV|CGVw8|g2aL6GjPwydQKr+@Ph~1?eVC4Zn@m~1Qs!6Rg!MgTecr;b2QR8= z^N-iKEY*AOzs;}S8>#JxQkX2uQhideN1GS?izlSUtJ;oWXPVVvWhFF_GS@xkYawlJ z2(2|KT*ErgcR^C-hR@o%F{9j6X4dmkI05zF8(*Y)#bb|SrB8O~aZGBwsqJ{|DJa)N z%ZaV0QvHf(D;Tr}K~m$ToyasV?n3FsC(4Q!n|fOo31Kr3;qEmeECmIzuiLi@vkw3} z-u4jk4)tgtXnV#2{g1>%Ao9=~4-A@J$-pp4#^dKBg9$x1uNEWc=yLMv z^iai6XK&G+9b82q6|eXZS0YC3_RJ1n(6PqlG5C2ohUUkv4(zAC9?;mwM{UMWQZ7=? zRM7FiV+=Ll>ohQ|dC>e3$i-G3_&J63k2xW%+5Q=h!h+uu`nFx>N5t~k{4ro|qh=@! zgWoB9Y#N+A!}yXLbcsC-j6XYP{&h4Q!k0yxKRXQHq=&Lib9+JK?EL(GU~c`N(epb> z^O@rNGtO&_^O7I<&i@n9^~7)=ZaYElcEiZ&Cb^oIY4R-5G@=zNS*=u1=ZjhWc2!+yJNLd-cqdrnH-0}sBGixX(0N~f0miqZH2?qr literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/direntry.h b/NONE-CKUBU/src/djbdns/djbdns-1.05/direntry.h new file mode 100644 index 0000000..d1628a9 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/direntry.h @@ -0,0 +1,10 @@ +#ifndef DIRENTRY_H +#define DIRENTRY_H + +/* sysdep: +dirent */ + +#include +#include +#define direntry struct dirent + +#endif diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/direntry.h1 b/NONE-CKUBU/src/djbdns/djbdns-1.05/direntry.h1 new file mode 100644 index 0000000..446d5c7 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/direntry.h1 @@ -0,0 +1,10 @@ +#ifndef DIRENTRY_H +#define DIRENTRY_H + +/* sysdep: -dirent */ + +#include +#include +#define direntry struct direct + +#endif diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/direntry.h2 b/NONE-CKUBU/src/djbdns/djbdns-1.05/direntry.h2 new file mode 100644 index 0000000..d1628a9 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/direntry.h2 @@ -0,0 +1,10 @@ +#ifndef DIRENTRY_H +#define DIRENTRY_H + +/* sysdep: +dirent */ + +#include +#include +#define direntry struct dirent + +#endif diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/dns.a b/NONE-CKUBU/src/djbdns/djbdns-1.05/dns.a new file mode 100644 index 0000000000000000000000000000000000000000..eceb279d1d520daa96ddda3c08496b33c9aa30c7 GIT binary patch literal 67094 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 sizeof name) return 0; + name[namelen++] = labellen; + byte_copy(name + namelen,labellen,label); + namelen += labellen; + labellen = 0; + } + continue; + } + if (ch == '\\') { + if (!n) break; + ch = *buf++; --n; + if ((ch >= '0') && (ch <= '7')) { + ch -= '0'; + if (n && (*buf >= '0') && (*buf <= '7')) { + ch <<= 3; + ch += *buf - '0'; + ++buf; --n; + if (n && (*buf >= '0') && (*buf <= '7')) { + ch <<= 3; + ch += *buf - '0'; + ++buf; --n; + } + } + } + } + if (labellen >= sizeof label) return 0; + label[labellen++] = ch; + } + + if (labellen) { + if (namelen + labellen + 1 > sizeof name) return 0; + name[namelen++] = labellen; + byte_copy(name + namelen,labellen,label); + namelen += labellen; + labellen = 0; + } + + if (namelen + 1 > sizeof name) return 0; + name[namelen++] = 0; + + x = alloc(namelen); + if (!x) return 0; + byte_copy(x,namelen,name); + + if (*out) alloc_free(*out); + *out = x; + return 1; +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/dns_dfd.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/dns_dfd.o new file mode 100644 index 0000000000000000000000000000000000000000..cb53c2ee201d6aae9e74396017d5a17497941a99 GIT binary patch literal 2144 zcmbVM+iw(Q6hG5l*dldjB$zbO*o|&XxeW|7NVL|Sc2{QOhM=}6a@kCGr=g*{Lw1Ki zwTW%I3w)_lcp&jn-{cQ41mjD?#p{EO@qs6K(F7vfXcH5Hm-U?4Z_3xt?F%QFIp_PG z-?`4^!%Xh=4n=`b6c~U|3$4GM|aNuJgEhGDyjYUg4&aU>4!(v+Q&$p{b%6J z2kh?bE#<=HD3LJAd(%{}j(|CPU&*3l`k{XMhkC>N)lY9xUTtE~nXG?UVc)Q&)P;$t zmSfAt0=tv-`(F!s@VmAd4NPi|$yMqKT9Y^zT&X`|!~Jl6rAFYTsL2 zq{e9gwyf5=MdC(Ij1Y17_Z8y3<$n=)5680n%fY&W;n)(pZTVAC%~)s+w|N_qX8xiz zsOJYT30q`$zDh?m93@~_^#zOFQftqn&+>40_+mL(-ja6xz={X zDCgtG@5NZ^OD-4IKZrh2!u~_dKtt|{d=@8$bJG0l@CxHYJcSt5mt~qa)FU}$ZWjGA zMj@Zb1MxgE_bJ5X-HGvsd0eREcsjQ$^?-&&ImiPxqD`~Q^KU?`U44tcKZnpSid2qjbwYT%CrmgWQmPPHnR2xw0(>X|roC(u`U$_c=Ma~_H459g z2L8$#cxDa!jWuv6maF;VSWz#uEVpEjm+>d$mWr+i`Mgu9l->Mc$Yh}ZcG eAmg72c$dJxDd1wB+XDWiz)zq}LcLIpQ2qla@?M$% literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/dns_domain.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/dns_domain.c new file mode 100644 index 0000000..b931f1d --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/dns_domain.c @@ -0,0 +1,74 @@ +#include "error.h" +#include "alloc.h" +#include "case.h" +#include "byte.h" +#include "dns.h" + +unsigned int dns_domain_length(const char *dn) +{ + const char *x; + unsigned char c; + + x = dn; + while (c = *x++) + x += (unsigned int) c; + return x - dn; +} + +void dns_domain_free(char **out) +{ + if (*out) { + alloc_free(*out); + *out = 0; + } +} + +int dns_domain_copy(char **out,const char *in) +{ + unsigned int len; + char *x; + + len = dns_domain_length(in); + x = alloc(len); + if (!x) return 0; + byte_copy(x,len,in); + if (*out) alloc_free(*out); + *out = x; + return 1; +} + +int dns_domain_equal(const char *dn1,const char *dn2) +{ + unsigned int len; + + len = dns_domain_length(dn1); + if (len != dns_domain_length(dn2)) return 0; + + if (case_diffb(dn1,len,dn2)) return 0; /* safe since 63 < 'A' */ + return 1; +} + +int dns_domain_suffix(const char *big,const char *little) +{ + unsigned char c; + + for (;;) { + if (dns_domain_equal(big,little)) return 1; + c = *big++; + if (!c) return 0; + big += c; + } +} + +unsigned int dns_domain_suffixpos(const char *big,const char *little) +{ + const char *orig = big; + unsigned char c; + + for (;;) { + if (dns_domain_equal(big,little)) return big - orig; + c = *big++; + if (!c) return 0; + big += c; + } +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/dns_domain.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/dns_domain.o new file mode 100644 index 0000000000000000000000000000000000000000..ae908a2d111d87dacbabf88d74dcf9a9ae997b55 GIT binary patch literal 2552 zcmbuAUuYaf7{F(K)mpv1_e`Yt3 z2x8!pz|dUDgW#LbeawS|J}!-a^58?rgNO(fA6lWc{-Y3RCH=nHncj4AR?rW2XTIO} zXTJG%Ztjye&b~Qd7(|LeUL`$EQbO8hZ=UDVJUL7blJv$f?Y?C!?L@=rQICLrm3C7` zdLu)-6!6?_ww2x8tffbncogm28tTP7xwhXwy>ZlKTeN%5aI?FQ%$wWE{_egMM~B!p z?R+`3nI6p(%Kr4&*T3Lext--W{pnRSv28FeB6Kel*u4qL?z~Ic-J2O$-&~5LY^5cBc=&Q0{mi~Emb~mw?j(dK^%qOI7}N**k*RQBH;>f*B_Gyu1>0LJVG8IM zl3Wa`tZxE$USNN_7bc*@zmk3(eMBEz_AQi@{n2ALc-@qJm5b@}uThq=-(bdm@Yr>3 zDO~)R(B-{oFc&8}YY<)y7Evs@lWu7f+d?nChHjQ{qu=mvU);q0J%uk2up{Kpa0?;Ni4h0nr-isDrUz_UhHOwY1ADYVy-gB0-P zTA3BJcg%6iCgfQ_tH?nX@dfeSfr2&STDEH)?;Kc3t%BzmuKxwvL3n+Tr!xS`_?a^= z+sD12GUGSx)6VnGsgpS;mrbUGIN?Gg@+&Y#v&lFuXR|@wccNfEBF>Z_`NXM&A#pej zrpvWizY!3p+G;d{Cb%?PQQ(Z9n>ZOpe)R)h$NzcR5R3=tF)c}6=(n^VFK@Qu`!vi` ziY}+|P%^tLz~eAtDuKy};Ku}4t^;m4fj#Xb`dTNz2Xp?{_!l4+>(ZAS6JQH$s>u2! z%fUpi32oB{6OXlIAh`bn@W^<%|2#0Q#Xtzz73+_3t@qM>@hs~My@&ONh!nc-5#aq? zW&C?0P7ZoJ>U!_cw=E9Tx(GM~4EL_@AKTP#eOoww4t7=a^;MfXN52&LV^3vrZuadM z*3qvLDXc!SjStkG$(_!N*`k;ddR3c;58iAlhGn2lK3> z0>bY=7~h76=NFCRcOS5-;O7Nj1RW)Wr(b?tzaQ`X1HS|u*WDKR`CSQ&Of|#uRIB07 zG@YuVlp{LS9mOXNF*Ajt8|N`6f2Pv@5uj^9}NUsiZp;rxFSbj*W& smj2fif0f(dgMu|;jFcC}MDj7ApV#=h(Ayf9M{!N#@|;}Jxct8N0gy9+2><{9 literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/dns_dtda.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/dns_dtda.c new file mode 100644 index 0000000..ba1db4f --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/dns_dtda.c @@ -0,0 +1,35 @@ +#include "stralloc.h" +#include "dns.h" + +int dns_domain_todot_cat(stralloc *out,const char *d) +{ + char ch; + char ch2; + unsigned char ch3; + char buf[4]; + + if (!*d) + return stralloc_append(out,"."); + + for (;;) { + ch = *d++; + while (ch--) { + ch2 = *d++; + if ((ch2 >= 'A') && (ch2 <= 'Z')) + ch2 += 32; + if (((ch2 >= 'a') && (ch2 <= 'z')) || ((ch2 >= '0') && (ch2 <= '9')) || (ch2 == '-') || (ch2 == '_')) { + if (!stralloc_append(out,&ch2)) return 0; + } + else { + ch3 = ch2; + buf[3] = '0' + (ch3 & 7); ch3 >>= 3; + buf[2] = '0' + (ch3 & 7); ch3 >>= 3; + buf[1] = '0' + (ch3 & 7); + buf[0] = '\\'; + if (!stralloc_catb(out,buf,4)) return 0; + } + } + if (!*d) return 1; + if (!stralloc_append(out,".")) return 0; + } +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/dns_dtda.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/dns_dtda.o new file mode 100644 index 0000000000000000000000000000000000000000..0664b70c21e0b4810a6b817a3e93819a22f77773 GIT binary patch literal 1904 zcmbtU&1(}u6rateO`6$WMRxcJ3 zr3*&#ALxJJK?vf(23ke%(u*F&lV7z$5qcBKA4^Ne((3*n|U*{4~8Na z9fCkC5y*Mcuq>329!EnD7;1p*B^@MqJvbH|9nrVPu7&mA;lfXkRB4TrQa))!|5B_< z#rHrC7nTM6&DssAo0OE*f%dzz3tPQ(W??H@rnmLg>JKrZZx%kgBKp_2PTxeK+P4_; ziG~AE({z-SzE@621}@ao5m)Ntl=Y+@@3Ubh#h;aWZ5#~LD*y(C31L*|dN0`rzL5ka>xVsd$_p!4iK5>NH zJwbP0q4iPAuseXf;laVP-ky*an^rU4)AA{~zt=DOkDDsg%il{=H3l=ynRC+8a#~82 zsWwlEoKUGs>sw& zins8~fLUt+wJy&X*j-0Vh3Ad~%wx!0Y6dpp?gNbPy*)mOhE4diX!E^8da}g~^0I(V zFxz49`$w!<{Y7^FE|_WRU%r0b!70ddl8qV%8>ZN_W4MlHD?z;32_w!n$rTZIyhf8C z8Xe%sV2bswGvH$=8 literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/dns_ip.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/dns_ip.c new file mode 100644 index 0000000..e7c3a9a --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/dns_ip.c @@ -0,0 +1,75 @@ +#include "stralloc.h" +#include "uint16.h" +#include "byte.h" +#include "dns.h" + +int dns_ip4_packet(stralloc *out,const char *buf,unsigned int len) +{ + unsigned int pos; + char header[12]; + uint16 numanswers; + uint16 datalen; + + if (!stralloc_copys(out,"")) return -1; + + pos = dns_packet_copy(buf,len,0,header,12); if (!pos) return -1; + uint16_unpack_big(header + 6,&numanswers); + pos = dns_packet_skipname(buf,len,pos); if (!pos) return -1; + pos += 4; + + while (numanswers--) { + pos = dns_packet_skipname(buf,len,pos); if (!pos) return -1; + pos = dns_packet_copy(buf,len,pos,header,10); if (!pos) return -1; + uint16_unpack_big(header + 8,&datalen); + if (byte_equal(header,2,DNS_T_A)) + if (byte_equal(header + 2,2,DNS_C_IN)) + if (datalen == 4) { + if (!dns_packet_copy(buf,len,pos,header,4)) return -1; + if (!stralloc_catb(out,header,4)) return -1; + } + pos += datalen; + } + + dns_sortip(out->s,out->len); + return 0; +} + +static char *q = 0; + +int dns_ip4(stralloc *out,const stralloc *fqdn) +{ + unsigned int i; + char code; + char ch; + + if (!stralloc_copys(out,"")) return -1; + code = 0; + for (i = 0;i <= fqdn->len;++i) { + if (i < fqdn->len) + ch = fqdn->s[i]; + else + ch = '.'; + + if ((ch == '[') || (ch == ']')) continue; + if (ch == '.') { + if (!stralloc_append(out,&code)) return -1; + code = 0; + continue; + } + if ((ch >= '0') && (ch <= '9')) { + code *= 10; + code += ch - '0'; + continue; + } + + if (!dns_domain_fromdot(&q,fqdn->s,fqdn->len)) return -1; + if (dns_resolve(q,DNS_T_A) == -1) return -1; + if (dns_ip4_packet(out,dns_resolve_tx.packet,dns_resolve_tx.packetlen) == -1) return -1; + dns_transmit_free(&dns_resolve_tx); + dns_domain_free(&q); + return 0; + } + + out->len &= ~3; + return 0; +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/dns_ip.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/dns_ip.o new file mode 100644 index 0000000000000000000000000000000000000000..d5fb16e85235147c000d552678f26d35e865fead GIT binary patch literal 3600 zcmbtWU2GIZ9G~l5%VF`h5|tWB+lSQ@l?#VR_%wHL!j>#Xv=tIcuGik4J-ILMrdYJm zCf5=+%W9vD#1}svd?7|(Ea9OPDu-8VU9PpPlJV$L^E=WOrtM z|KI;>W_D&@f6Cm|5C{+<0rDiNj|57{x=_6zXWcl7kY-}oz51+S=k-g5{f}v9^s6Qe zu65bJn>N*dGwl)m?3I;t>D4<8C$FzFos7Q8gkIcqsBW0f zi2jUG`~1L+=~BHVb}?~!1sK{lP5WolzQw&H?DKTe076@r`&ttNllCu+#2NNE`j$4? zt+%;5=Ck7$vvyK%)5fsCE_YYh-4`<55q-4*a2S9F!w%^;I<@vBA)vw%Fcv1V59h#ofWJIp9HeFn&6s)3pO#T^YD zGn{RDT_gOD9|rqu4YCbs<0%#kR|H}yC2M2v-I>n09tO2X*W1!U9gz=uI4&$uj*}oCEHEXrH$$fF(E+hBHL$ zOWLO^nnvdi(oaU`4$)Jib5ZKJiP>$-vlA~*X;Y9C3*&}H-DG0+IE=O0091S9xZ!Na z0IU=ir8XU)C!PBcG@K`}fh{F8+SsdLRZpqji%nm*K!tqo>$n%YAc0q&C4u3VKybyf z@C2xIz*aL2AzvbO&#|W3vb}ETMC0?3zBe1*2zpB7B{{DRc{?I4J0h(of^I`H(s3-* z73oYy;ER479S72W-G&)OJ?j=bH*} zjT-AQz|p5l7xp5aaIB7FpuoJ=3j%M2J?dl;W6{PziG5|7NQ@_><|XWe&%HkOo4Dbi zAo5nt-vC^l6Qo|f+cQ|_H3a8>89c&X%>RDC)SS@dT^_$32a>4VKG3Nc($A`eBM72$ z?*VKns<1CJtNKf|$FVy1$o?3M1u1hSP6uvDwf^OREfv25Zw`S$aV%ZUGxevt3?nS1PRXC zV!{2jQmTucwSeLIpq?3M`G^m`#RoTi@ID{>MIU_F2d@E+`OosDVRryvjt~DGAN(U9 z9RDDenujlZ@GCwz$rP)pTsb;GUgF&isWRLI7A0_nr1SaGKx&{=K3Zj3Ps0E*lq=HM z#?(*|!Bl_l1({JjoGTacrs+RQtyCtL%}Valw4ZUSr3%fJMc6taT`pV248t>}LONH3 zTdP#alqiELR<)ErV#)m!9cDvFxL7UZDDW+huwV~kCJ%WH+llgS7v~y&-njQ}!`}eP z5za>(zj=Y=zV`;+h3JrW=Hg^0V~ zhoAQ0I}$F}`+X7bHI33nK2<9LM~TFXXbs i$GcPTznA!Oy+2C)2PA$6cZmKug&}y4qX=A_L;nJ0(|{ZR literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/dns_ip6.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/dns_ip6.c new file mode 100644 index 0000000..30ce699 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/dns_ip6.c @@ -0,0 +1,103 @@ +#include "stralloc.h" +#include "uint16.h" +#include "byte.h" +#include "dns.h" +#include "ip4.h" +#include "ip6.h" + +static int dns_ip6_packet_add(stralloc *out,char *buf,unsigned int len) +{ + unsigned int pos; + char header[16]; + uint16 numanswers; + uint16 datalen; + + pos = dns_packet_copy(buf,len,0,header,12); if (!pos) return -1; + uint16_unpack_big(header + 6,&numanswers); + pos = dns_packet_skipname(buf,len,pos); if (!pos) return -1; + pos += 4; + + while (numanswers--) { + pos = dns_packet_skipname(buf,len,pos); if (!pos) return -1; + pos = dns_packet_copy(buf,len,pos,header,10); if (!pos) return -1; + uint16_unpack_big(header + 8,&datalen); + if (byte_equal(header,2,DNS_T_AAAA)) { + if (byte_equal(header + 2,2,DNS_C_IN)) + if (datalen == 16) { + if (!dns_packet_copy(buf,len,pos,header,16)) return -1; + if (!stralloc_catb(out,header,16)) return -1; + } + } else if (byte_equal(header,2,DNS_T_A)) + if (byte_equal(header + 2,2,DNS_C_IN)) + if (datalen == 4) { + byte_copy(header,12,V4mappedprefix); + if (!dns_packet_copy(buf,len,pos,header+12,4)) return -1; + if (!stralloc_catb(out,header,16)) return -1; + } + pos += datalen; + } + + dns_sortip6(out->s,out->len); + return 0; +} + +int dns_ip6_packet(stralloc *out,char *buf,unsigned int len) { + if (!stralloc_copys(out,"")) return -1; + return dns_ip6_packet_add(out,buf,len); +} + +static char *q = 0; + +int dns_ip6(stralloc *out,stralloc *fqdn) +{ + unsigned int i; + char code; + char ch; + char ip[16]; + + if (!stralloc_copys(out,"")) return -1; + if (!stralloc_readyplus(fqdn,1)) return -1; + fqdn->s[fqdn->len]=0; + if ((i=ip6_scan(fqdn->s,ip))) { + if (fqdn->s[i]) return -1; + stralloc_copyb(out,ip,16); + return 0; + } + code = 0; + for (i = 0;i <= fqdn->len;++i) { + if (i < fqdn->len) + ch = fqdn->s[i]; + else + ch = '.'; + + if ((ch == '[') || (ch == ']')) continue; + if (ch == '.') { + if (!stralloc_append(out,&code)) return -1; + code = 0; + continue; + } + if ((ch >= '0') && (ch <= '9')) { + code *= 10; + code += ch - '0'; + continue; + } + + if (!dns_domain_fromdot(&q,fqdn->s,fqdn->len)) return -1; + if (!stralloc_copys(out,"")) return -1; + if (dns_resolve(q,DNS_T_AAAA) != -1) + if (dns_ip6_packet_add(out,dns_resolve_tx.packet,dns_resolve_tx.packetlen) != -1) { + dns_transmit_free(&dns_resolve_tx); + dns_domain_free(&q); + } + if (!dns_domain_fromdot(&q,fqdn->s,fqdn->len)) return -1; + if (dns_resolve(q,DNS_T_A) != -1) + if (dns_ip6_packet_add(out,dns_resolve_tx.packet,dns_resolve_tx.packetlen) != -1) { + dns_transmit_free(&dns_resolve_tx); + dns_domain_free(&q); + } + return out->a>0?0:-1; + } + + out->len &= ~3; + return 0; +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/dns_ip6.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/dns_ip6.o new file mode 100644 index 0000000000000000000000000000000000000000..8e5bb3d202c2671547c3c3c5a8ad542fe8d01c6a GIT binary patch literal 4840 zcmbtXZ)_Ar6rbxIP^5M%|11c$F)Kj=E5$;<0QRKFmMjDi5fweIy*qm0dUxJ!fhxqt zyF)k2K@FzgdGmH=@0GR26BRxmlg-Cgv+_uyjMYpm%S~KtV%2O4)2$uq1>H)hm#hK9il~P|iPMf;hUQrFCwUNlv$rFdW>w_ttC4N7aL%ukhL zTUD+2_(-g9F=jQZnv!pYWwjL7Rune}HWUw3>VQ_lxJtJI>a}f3U7oK>2S1g^QS7UL zPFU=m5zFmY7uE!OYXF3}mHc-ga3{(!LtQw^(=b<^Do*#)sFeI{SYWXCF2{m(nkua` zO8(XzSU)Ulp<#`1zYYE6Kn&{_5sQ-F4t6|rg*Z>*cxzA!8$id`5l{+2kR9u|9n!jP zSE<3?03f3?s^njQ;Ep?shpqcl#!|Qm_)ri!rLG&Mv7o)Dvc+EABNoszv;cImm{!U! z)C<%|M7;quf^{>91vA`-bD>al-MS@gcdDg|n2!~)7%O5qRzwrjfiCKx4~rFQNlY@o z3ffy?U+sXZTUX8nYFLZCQWZ+;tWt;o|6H?L2Y~_)%d+m;0;LX2T-U81q?H2Ka-LXM z?yPUc)y%3D1KEKVyHT|UmCvdscHex?ywZL1dGp8ao0@r|7`(7@vf%HXtMq}JVxYU& z9K7&4h}TZ!+A421^bak7)PIia72cHmG(emTltNJQcOY@Py$Xq3$Jx1lpQ+h15Y+9Z z`~g$;-X0l2&GfR_vLq7HsFtBZzmh-t-_6(ln|b@ms)qi;MJ2xx3=Uz(-%sl_?m_p; z8m1H)0pzsHOG+}df`bfoLzoSDA97ntFpX(3$ za{;5e{t%L(ty{C^(faw#(bjl4S>LEVqAgj}pfxU63t`0NY3QsfRJlmy|i6+9D z8Qo_xEfO}vOl!?%nU+a81Luj;z#PCxj<$zlnQ%vxX>F;Fj%X5QCR1iqTetD4MOic4 zw%ZBm|Mc}R8DB|qU2txNh|rET0$HFxwNf-0b)xi2=ZSdP&Z$W z<#U6W@Al6oI0n0&N2zzmuY<;&6C}SU0!KYI%>N|#$@wz>PXi`n0kPD&h5xz|;s|c; zPJrDQGLMS+DAVTV-UCYa-XUMkPt(aDyXWJ0Ozr^dnJgv><5-UPbFUw15g(i6DPXFC*ym>-|T@$J@AwV-sOS6 z=7GNf_*BT;Vo_xL&H(Hk5B^6U_(>1^oCp4m2R`J1|KWiLpb*E)^GpwXo(H}ZaLhxK zC<%Tyf=?DnW<&AxGObNYp)_1fQ8N^dMA){*j&M31jifWtSbQIQk#mH;EtT$Ko$;jE zuq@P>L@?AE-$fbO-SKo1ufNtVGa8D-V=+hKGvT5PClaZ)P+Qn+<+HM>j0us*I9Qnh zp0ed(CK`@(r4yZ52JBF_Eu1XtFxq5u@13&@&nftX3XXaMI$G-!TZxMVZ!9O7Q zy#)W7;CP2iJIh4^(QoL8tPY9ppt)JjD4`+!T`re%< ze42*=g3~;F@4{sst`qw-55EyU&BHL^(>(l5_%siVf`oN~-wHCH&kEdK&tbx+by5#= Wu_0fSDj(~-FXQq)ZFk}Fe)$JpsjHp< literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/dns_ipq.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/dns_ipq.c new file mode 100644 index 0000000..5b65e23 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/dns_ipq.c @@ -0,0 +1,71 @@ +#include "stralloc.h" +#include "case.h" +#include "byte.h" +#include "str.h" +#include "dns.h" + +static int doit(stralloc *work,const char *rule) +{ + char ch; + unsigned int colon; + unsigned int prefixlen; + + ch = *rule++; + if ((ch != '?') && (ch != '=') && (ch != '*') && (ch != '-')) return 1; + colon = str_chr(rule,':'); + if (!rule[colon]) return 1; + + if (work->len < colon) return 1; + prefixlen = work->len - colon; + if ((ch == '=') && prefixlen) return 1; + if (case_diffb(rule,colon,work->s + prefixlen)) return 1; + if (ch == '?') { + if (byte_chr(work->s,prefixlen,'.') < prefixlen) return 1; + if (byte_chr(work->s,prefixlen,'[') < prefixlen) return 1; + if (byte_chr(work->s,prefixlen,']') < prefixlen) return 1; + } + + work->len = prefixlen; + if (ch == '-') work->len = 0; + return stralloc_cats(work,rule + colon + 1); +} + +int dns_ip4_qualify_rules(stralloc *out,stralloc *fqdn,const stralloc *in,const stralloc *rules) +{ + unsigned int i; + unsigned int j; + unsigned int plus; + unsigned int fqdnlen; + + if (!stralloc_copy(fqdn,in)) return -1; + + for (j = i = 0;j < rules->len;++j) + if (!rules->s[j]) { + if (!doit(fqdn,rules->s + i)) return -1; + i = j + 1; + } + + fqdnlen = fqdn->len; + plus = byte_chr(fqdn->s,fqdnlen,'+'); + if (plus >= fqdnlen) + return dns_ip4(out,fqdn); + + i = plus + 1; + for (;;) { + j = byte_chr(fqdn->s + i,fqdnlen - i,'+'); + byte_copy(fqdn->s + plus,j,fqdn->s + i); + fqdn->len = plus + j; + if (dns_ip4(out,fqdn) == -1) return -1; + if (out->len) return 0; + i += j; + if (i >= fqdnlen) return 0; + ++i; + } +} + +int dns_ip4_qualify(stralloc *out,stralloc *fqdn,const stralloc *in) +{ + static stralloc rules; + if (dns_resolvconfrewrite(&rules) == -1) return -1; + return dns_ip4_qualify_rules(out,fqdn,in,&rules); +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/dns_ipq.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/dns_ipq.o new file mode 100644 index 0000000000000000000000000000000000000000..5dea5efa3c8ed7b55e4ec143d742b0185a4fb58c GIT binary patch literal 2832 zcmbtVUuauZ7(cg3+icd{ILoNGkqFnZy7k)3BJ1p2ZvNOC7l*o5JGw4Q(;He$n=ZL& z*HJOpe;l%C*^>`L!DpXko1lT(Iv)h5C@Kj0;uhzsf=VCC;`iO0+nnAe_}~Y*=R3de z_x-)+p1cu?Jl7xy#1w%%OR75)C1k@^)qRHQBQ0bXQC?MEQTmm>F#SuV-}bBYi__}d zZ*3}_l^hXz`wmhUisHNkLG%5Ng|BqU`}s$h;ck=Y_7S?G=KDz@P|o!<5dEd@Ax9w~ zOqW7=U2=r;J(9P0;}DR8^dBRX(!Hk8&%~uoz|=hCQ0G2vi_l*Nhm^C*kaA9mmcT+1 zvgn>ih0vRk!r_LH_+gePx%(${H$0E)kHGT@{b6`^i0&Nn#D(|anOJ_I@VfBvF;FA4 zT**j_f!u7PK*aeRz)HSPa&&(=J+07hl=f94S~N(14cl5Jx&}@WYL{5ok-S~Xo&w4V zasC$iLb_|P5=9KHDl{lLP8RfLp*p7QW6RgdAlOv3qm|IYJ^d=HlYU?N?tZyUi=jeF zP$7ov?tYx3nulm{3v_7fYW+j(_Lx5+D>B3}OoWRr!Pe63 zScc=;1^7N@8)^W>?{xW{ZGNZ6?>u<9v0#78_I5+BvvaX2=sX&9zBt!hA)`+p^NZv9 z{Gx5n9&vguV-S$uK;W3?U{D(#i%odCEv+SE zvaVg!i98b1V?-X#WQc5_+GsS9j*V+Xj;F@QwF#h1q;yU0J=Ncl(PQz~D!Kp1(*wTv z6*pO8_}G4hwP%`Lroz@oVYOQ@+@9Z60dp7}WHIf1t+J2oDLL(@J+Sz*?_$|1|hweoLFg^q&M9FJ}EF<^{!C6WV^lhCw`?7Ud(=WV=>JUjWb%wwi*t2uG3qgEw|?|j49kHF#lxv~*_(>uks)%|vxjj&6G zgZF~IhpW@Ls{q6E&gU{+@UN~G9;kz#tb?DfgP*H|C+px-fMfmV*@qQ}J<1~dYSl?b zCNj~n$qRCvq_asaBOmb|?POqA^g=e4981hZ4HJQjGnP!I;?a0&a)u1g=vp*Bnl{O3 zHumvYMvIP&B@)A&M@-K!5A>}h-HLDQ(^@8#oQkI=5@~HZJ*I0$-5%pvxhL?`-h@9m z6!QkgHt|fD_>Ua_K@Q)`4lwea9Nx>}B8Ok+a6bMm4##<#d2e%g3y1G!@4;Hlen < colon) return 1; + prefixlen = work->len - colon; + if ((ch == '=') && prefixlen) return 1; + if (case_diffb(rule,colon,work->s + prefixlen)) return 1; + if (ch == '?') { + if (byte_chr(work->s,prefixlen,'.') < prefixlen) return 1; + if (byte_chr(work->s,prefixlen,':') < prefixlen) return 1; + if (byte_chr(work->s,prefixlen,'[') < prefixlen) return 1; + if (byte_chr(work->s,prefixlen,']') < prefixlen) return 1; + } + + work->len = prefixlen; + if (ch == '-') work->len = 0; + return stralloc_cats(work,rule + colon + 1); +} + +int dns_ip6_qualify_rules(stralloc *out,stralloc *fqdn,const stralloc *in,const stralloc *rules) +{ + unsigned int i; + unsigned int j; + unsigned int plus; + unsigned int fqdnlen; + + if (!stralloc_copy(fqdn,in)) return -1; + + for (j = i = 0;j < rules->len;++j) + if (!rules->s[j]) { + if (!doit(fqdn,rules->s + i)) return -1; + i = j + 1; + } + + fqdnlen = fqdn->len; + plus = byte_chr(fqdn->s,fqdnlen,'+'); + if (plus >= fqdnlen) + return dns_ip6(out,fqdn); + + i = plus + 1; + for (;;) { + j = byte_chr(fqdn->s + i,fqdnlen - i,'+'); + byte_copy(fqdn->s + plus,j,fqdn->s + i); + fqdn->len = plus + j; + if (dns_ip6(out,fqdn) == -1) return -1; + if (out->len) return 0; + i += j; + if (i >= fqdnlen) return 0; + ++i; + } +} + +int dns_ip6_qualify(stralloc *out,stralloc *fqdn,const stralloc *in) +{ + static stralloc rules; + if (dns_resolvconfrewrite(&rules) == -1) return -1; + return dns_ip6_qualify_rules(out,fqdn,in,&rules); +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/dns_ipq6.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/dns_ipq6.o new file mode 100644 index 0000000000000000000000000000000000000000..4a63250d05a18962c61b0674722fab78b9e9d20a GIT binary patch literal 2888 zcmbtV|7#m%7=N!x+icccoJAu}n!!0%x1P-$W!*ZLOA~w1IQ-ITN7sdGdZER%>5|L3 zO2t6im6uzz_|q5)vOhw$30t6cPEc@)qJkg@ZgH+EsO*Qb_&j&-CD&_$Kls4i^SqzW z^X+}|-kZ0h@#mU2j#$ExXGv{kp@jI|H9KUOA<{;+5$Sd5HEBp1jM2Yj`t6WRzj#$% z_{}fVdBGE>w{D~BQi)#_AgMm&S^7#7f}eei74Ed~9U($jWqpVg`zwXMCZfIEJL)O+ zbF<~Bt_hx)-X{c0SN4K)g#Kfsl6tR8^izI$129>K8uG#?{y6<*WK=pKjY=n_L>U;8 z68VlrGzh&BFYarK@*m}iRJeas>wxzW?J;;ir9BMqF219He*Dr!c&AogEWX8EJp^W) zR?LdD)L)oy<_N!709euo1yApnv$GQYM(SKMvLzz)*O;qapw}TNPTd0AbzFA~`D5U6 zlwZ7wu~6<3Xd>~^HHk(9&kIGZm8*>@ziZ`E1q3%$+tF%t>8|!Z>yv(8{_cLILQBzN zhLa(O@6HoAM_Gq-ddRa>$}8cbdoK*?^l+p&!A0m@7@jdinf@Mg^$C&A^8t3qG8(t!HD;zg;vuU zV+L7V67}D|KptY>2 zCoC(grWH|B&uBy(S2Tr)W4Rm=4OE>-q_WDCO2lMlYD%33m+6eAiUY@nx^kM5e8a5$ zKi&a|#jm`@kt4*`KeO#ww9hh_ejK#z%Bix2ZKio1lY?xB2TczyK>Vg6yFnxFVrxqY zPJj{4TKfRUoKE*{1~~h5u6rOB>pQkdtoRw=>|*tAVL>pQJt60R!1U-gm9hV3u&sD& z{~^HGh?u9TK4krOY(lsC#u~(5a}I>%an^bW@OrLR{PF*&UvG98;%DE@4OS4xfk(o* zf5ht5|A{$%0K8qC{o6Uajec(OXT^?LwyW;Mv5$J4Ainh%Zi8f;4Y!{w7r|e8tGKGW z-^{rP8j_FrHhRua}I z%kb38PsXQniOHE$Jz|n%^Jz6F?hhUeGPEagDzBs`Q*#M}B5-pm>2xNUNM>f{$k?2w zCXy3b%Nc27om6saVtg`{8nZ3vtXZ|1-&kkWTqb=wnVC*y)!FQ%refa#e1YJ0 z@GjecKRFcZ21XpuxP|`+HVWbo!eil&umg;^*M<++aNdSrw&C{tH*Gl1)5?F#hT|Ev z@aO=D!0ttDmb4{NKYSL6Elh|G6y>-WgV&0N5y4 Pm$?}0VdGuH3yl01AbJk; literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/dns_mx.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/dns_mx.c new file mode 100644 index 0000000..8d38a7f --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/dns_mx.c @@ -0,0 +1,49 @@ +#include "stralloc.h" +#include "byte.h" +#include "uint16.h" +#include "dns.h" + +static char *q = 0; + +int dns_mx_packet(stralloc *out,const char *buf,unsigned int len) +{ + unsigned int pos; + char header[12]; + char pref[2]; + uint16 numanswers; + uint16 datalen; + + if (!stralloc_copys(out,"")) return -1; + + pos = dns_packet_copy(buf,len,0,header,12); if (!pos) return -1; + uint16_unpack_big(header + 6,&numanswers); + pos = dns_packet_skipname(buf,len,pos); if (!pos) return -1; + pos += 4; + + while (numanswers--) { + pos = dns_packet_skipname(buf,len,pos); if (!pos) return -1; + pos = dns_packet_copy(buf,len,pos,header,10); if (!pos) return -1; + uint16_unpack_big(header + 8,&datalen); + if (byte_equal(header,2,DNS_T_MX)) + if (byte_equal(header + 2,2,DNS_C_IN)) { + if (!dns_packet_copy(buf,len,pos,pref,2)) return -1; + if (!dns_packet_getname(buf,len,pos + 2,&q)) return -1; + if (!stralloc_catb(out,pref,2)) return -1; + if (!dns_domain_todot_cat(out,q)) return -1; + if (!stralloc_0(out)) return -1; + } + pos += datalen; + } + + return 0; +} + +int dns_mx(stralloc *out,const stralloc *fqdn) +{ + if (!dns_domain_fromdot(&q,fqdn->s,fqdn->len)) return -1; + if (dns_resolve(q,DNS_T_MX) == -1) return -1; + if (dns_mx_packet(out,dns_resolve_tx.packet,dns_resolve_tx.packetlen) == -1) return -1; + dns_transmit_free(&dns_resolve_tx); + dns_domain_free(&q); + return 0; +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/dns_mx.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/dns_mx.o new file mode 100644 index 0000000000000000000000000000000000000000..3ff422bffc4af12f9ec9e69b4aa81e182b2bc994 GIT binary patch literal 3560 zcmbtWU1%It6uz6^)wG#d|Edk?K8%v09o$x96eC%hwv#$lQQH(+n9lCbc9-m*yOWSe zP-Hj7aa;{Phz~+v1t0XON&8Tj#DaYgL@0oz=g9*z_uTJ% z=iGD8y>supanL%{6^Sq@5%w%=_aw^L$K7pxlB<(!kPR@?Kc#*1Kzq>&JpF_f zEa|7s+85aktKsQG@oy4q+rZKP)$)I`{F@?5!oTdTnm`ztZoJ;d!72X+CkckX?tP%G zPU$0=<)&6QVPdt-NNv5xYAor)86OPOjYClrlqe`&rr)FgJgV)UVoY1L^bvF&&MaTi z>f6CpTWuy9uk^A;VvD=dfwcM~FrUQQoscCY=&w^F~rkO zSw;DJpWIk6g9*fWbZ)FQBi^;(UIdj)(DG$FN?VIJPj0|+Fx;s3pd(1+wU=0AVJOnQ ztv|W~xDMDbw=mX=(>`*xuhxIG(eqC4@xk(YUGIwhjQ+6PT(bC13=Y+hfB3+Gr(>g2 zZZhW-V~-pAjeUFLMto08Wz4897Ca{jtygKaS*carykmIog2#-s<2lSoR;$dYl(2(z z2qU}DBH7K_nTk_znUN|L3T_cRizUxB4nKcvZ`E^Bvpl{3^@@Qvl!f&vQ6@!y0q0C) zi0G*9f~QBpu*-KmDx#kFnc_H6#6Who8ul=>h?8T4Tli)c9NMU3JqkvQ8Rjp?lQGnO z91J-AK1mR*93O2|WM8(EU_@Oh6T2V)wXV`n#ylG0-xU5QBvG_#{wCmRO^~{_z2)#& zt6^CGet4w6tp5yPYEI~~QxtSJc8I9l(_m9Eq(7-H2!bFg_b$LXQKf&Gd$nJxKlaty zBYPAl3-XpQVmSujQRjaLV4cSQ3=JTC%799@Me6WIUJtvu)xiYgb&k^AF%!(M(+VTr z+bKNY>aJr9FQ5pCBkOVnW)d?5HAtu~kJIK8F*$UW$@Tg}7y6p+Up9;aB z3&HIWJQsp5h2U?8;O9c{PXWjI4vGDhg+9u8cskAZN(g>61phGv|04uv>0;F`EEp;F zs!;7RToA6u;AV01`BKVGmCB1%ZfsdNz~*vAFFt0^6%n+Pxigeeoz0btcmX9BJ=ad> zG8t+;<9giK9>MXFoRBURoLtfNO6ihkryP=mQ!cy3G$$1nC^u6n6@bm5id!w^=UuAX zUW*NrDOL+P4=zTxMG#~0K4T9-eNb?})2~CGgScF{SO13JCX{*5Q4q&7LgE2}Aczmb zBk>Or1VJ4BH2%fqud<4dh)-ROKSppGe?s7xKmCf25I*iNna_;EmuHz1!he(CbiVJC zIP|pni16{OmgAl$_zr?!COF2C{I3XpH^ILXxVm1~2p|8&WSm`CND$=HJYxdK=012N ze?P%#KI0?~t@8xo-%sM01joBm{$IYJ;JCL?W(bb=j?BjqIOZ?!VB}{A{{h0EC44&H ZGU4MHE91vNN5S}l!uuwFw{dxH{R7OmR@(po literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/dns_name.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/dns_name.c new file mode 100644 index 0000000..518a0c0 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/dns_name.c @@ -0,0 +1,70 @@ +#include "stralloc.h" +#include "uint16.h" +#include "byte.h" +#include "dns.h" +#include "ip6.h" + +static char *q = 0; + +int dns_name_packet(stralloc *out,const char *buf,unsigned int len) +{ + unsigned int pos; + char header[12]; + uint16 numanswers; + uint16 datalen; + + if (!stralloc_copys(out,"")) return -1; + + pos = dns_packet_copy(buf,len,0,header,12); if (!pos) return -1; + uint16_unpack_big(header + 6,&numanswers); + pos = dns_packet_skipname(buf,len,pos); if (!pos) return -1; + pos += 4; + + while (numanswers--) { + pos = dns_packet_skipname(buf,len,pos); if (!pos) return -1; + pos = dns_packet_copy(buf,len,pos,header,10); if (!pos) return -1; + uint16_unpack_big(header + 8,&datalen); + if (byte_equal(header,2,DNS_T_PTR)) + if (byte_equal(header + 2,2,DNS_C_IN)) { + if (!dns_packet_getname(buf,len,pos,&q)) return -1; + if (!dns_domain_todot_cat(out,q)) return -1; + return 0; + } + pos += datalen; + } + + return 0; +} + +int dns_name4(stralloc *out,const char ip[4]) +{ + char name[DNS_NAME4_DOMAIN]; + + dns_name4_domain(name,ip); + if (dns_resolve(name,DNS_T_PTR) == -1) return -1; + if (dns_name_packet(out,dns_resolve_tx.packet,dns_resolve_tx.packetlen) == -1) return -1; + dns_transmit_free(&dns_resolve_tx); + dns_domain_free(&q); + return 0; +} + +int dns_name6_inner(stralloc *out,const char ip[16],int t) +{ + char name[DNS_NAME6_DOMAIN]; + + dns_name6_domain(name,ip,t); + if (dns_resolve(name,DNS_T_PTR) == -1) return -1; + if (dns_name_packet(out,dns_resolve_tx.packet,dns_resolve_tx.packetlen) == -1) return -1; + dns_transmit_free(&dns_resolve_tx); + dns_domain_free(&q); + return 0; +} + +int dns_name6(stralloc *out,const char ip[16]) +{ + if (ip6_isv4mapped(ip)) + return dns_name4(out,ip+12); + if (dns_name6_inner(out,ip,DNS_IP6_ARPA)) return -1; + if (!out->len) return dns_name6_inner(out,ip,DNS_IP6_INT); + return 0; +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/dns_name.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/dns_name.o new file mode 100644 index 0000000000000000000000000000000000000000..72d1f062a64973f1130a8a4ce1c2283ce9240655 GIT binary patch literal 4192 zcmb_fUrbw77(b;9I){`^QJjqNaHANdStk-=rYRY07jh+LQQ?8u7J54x`p@=u0VNvK zLUOHjXrfv6;FBgk&S(PeVKyM~&(nrJ>`C_~b4Irrqb76sednIjew?+5F@8yV&i6aN z@9#PH-1fC$<5+{s#iY2{)2ymVl(DZGtMdS#23RZG!*qL6yQtf7?XqtFZrBm+iUG>j z1*90ZrCm4d1?^8g|MSF%earrK3-QHru4i={L@!QiJ$f;&9Wsg$ZNPw8z$jXpZWI@^ zXZ8FS6YECF(%Sr+gR3oIXn(KUzZ&)p;bqX?uvT;+bd8i=ZQ|gN{Szk%hP`IJ=Uo}n zx}u9^Z{Zhkk>7IV*BXt|g4P+eVPT|n%%j7^1Cs{bZq%;zcn=OS=3OzgE;Q|oE`IGT zd;+H4mGWTexm~O@xXn#zAaCJOsAq8XF5p3e_8MJ;JiUcIyxs-PW7xNOcK-5tAhQb% z+~g0Dac)U39?_~R0`@M>g8gS`pp@t>e0&=_`2?;R_K(t_a28;H`RW-MqEVmsU;zoR zUvbzD*tF}gCo{VJw=PWhj!7k7cIDbDTQq@N6oT!TSzj);b1zOf*bN>I=+>prae=GV znZJDPLKLNT{DFTL-#H=>f8hU!kEPqc@jm#=(1Z?1!s$02G2Q+_bTFssrECk7h^N$p zEog%jI<8`w)q2k3!=lsOJ`WqUo!ea;_V_m!%hq1|;!X$a4!a8aH!FV8H)KH{!0l}W z*}eQ5mR>%=Tyt$McT2Np8F(7tonq}nv>RP&$~T8vL#G?wa+ez4+$Gk~9*#Aa41SNb zrt|Kl2E->h%9y|dh@($S;P2x&oOh44b}!*+<#PP!(I>lmhRms0IN9Cjd)#-p*YEQ` z;!GLyW#*<73bFX07n_tW4^^kKJI3?Q2q81cW~3-nr1WQ)Lf=-l$-x_TZrc zxh(8a#W)@WK{}j)Jp?1-N*K1R0)nr`dJJ&%snVsrj3>-1@ulvE3C2Gx0WnH@T%#g& zIR;=6=ausz$Zv~;_6c1M(oX8nz@(P_N5Xzt62++2qXVw?gj2;vg@hgUzZpK#UiN<+ zFf}JM84yknqC!OFhG0#_kUm~BsXMuQfvfHvwNIl$M2&^I+IytyqR>^bcsF3!1GWC$ zfYpi*uXrvGD*+YNA=UUsUL(8VTw=<)yJp8QkD8ePTDzHUCU3c&0o->y%}(tu;z#zO z6--^gm(M@;NQ#@E7^zi9H^bNco#JNL&7E=p)P1C0epdt53m^3^LCYg`aH9_XVjUds z^jiKG>fopA;2!{v`JWRT&)*e*eOiaVQ3t})KJaoE(nWd{C2{p z{n=0W4-oz^!ST11^fOBQ(0x2X__W>(!D+qo3NGt?o#3?IqQKR9mkFQN`!3xX`E(%xbiU>Y=2z+O-6sg6N?THrcHSW;bQCl}3af z0@5W$`ZYXwE#g50{Se;tSfPh{5DE(Qz18+Y*p9v{|^85iP>lsBIA5CrHSLS*9%3xcsWu5^mfPb%_`2m7tM99d3Mv( zeS6&p-7^lG~ey4Q+~&}-K#E1v1tpx0WCW4jpYwtQP(xc{)w_RZQ;+QEN`hS_wb z$D}GHW`}1Md>KI}^(>C0#K<&Q!7b)Hfita>Vs@6z7a0$G$rw$0f-b7^T366XHUBlg zh`F?{1P)R7`e_lOPO+lQpb?kP1EdkGe4jN%V+rHPj^mKePb_ZzEbHG@ z^ot^|FZx8C;*#*=KxAB3V>?Fsh}#MAxEm%u!b=X!>XFwNxz(@(1EHaz{_V=4Zw%Gb z!an&sruQnpVamENgoEX_E3T#2A_f18rYcs;F&i$dIDTcV*>ayiwd32BT5GifaEXec q(4EpAejh|a?}S9=k0X49dqenZ#;La0y*ENUy%oN$#yG``zq3CmWVV?A literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/dns_nd6.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/dns_nd6.c new file mode 100644 index 0000000..6dbeb89 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/dns_nd6.c @@ -0,0 +1,35 @@ +#include "byte.h" +#include "fmt.h" +#include "dns.h" + +/* RFC1886: + * 4321:0:1:2:3:4:567:89ab + * -> + * b.a.9.8.7.6.5.0.4.0.0.0.3.0.0.0.2.0.0.0.1.0.0.0.0.0.0.0.1.2.3.4.IP6.INT. + * b.a.9.8.7.6.5.0.4.0.0.0.3.0.0.0.2.0.0.0.1.0.0.0.0.0.0.0.1.2.3.4.IP6.ARPA. + */ + +extern char tohex(char num); + +unsigned int mkint(unsigned char a,unsigned char b) { + return ((unsigned int)a << 8) + (unsigned int)b; +} + +int dns_name6_domain(char name[DNS_NAME6_DOMAIN],const char ip[16],int t) +{ + unsigned int j; + + for (j=0; j<16; j++) { + name[j*4]=1; + name[j*4+1]=tohex(ip[15-j] & 15); + name[j*4+2]=1; + name[j*4+3]=tohex((unsigned char)ip[15-j] >> 4); + } + if (t==DNS_IP6_INT) + byte_copy(name + 4*16,9,"\3ip6\3int\0"); + else if (t==DNS_IP6_ARPA) + byte_copy(name + 4*16,10,"\3ip6\4arpa\0"); + else return 0; + return 4*16+9+t; +} + diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/dns_nd6.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/dns_nd6.o new file mode 100644 index 0000000000000000000000000000000000000000..515937a8e55e915f30fb727b568c7011fdce007f GIT binary patch literal 1920 zcmbtUPiqrF6n~rDwz1aTC<+BD4IU(dU7A`#wNiF%)+8WO|5OjQ4Vz>op(ZKG3atk{ zEJ_1Ld+`JK3B2_nT2rb8Pu}zcc&K1OJm{&q&fA^MF5`O92RrlL@BQAJnYVA|zIO3K zgyX;y4yM4jJQN@n@pZ*f6*vI>ph)XB`F?EfMBBpD)|z@lZGBX)=UTti*<9}cf_Ut>G+5_7hN_JGs=FD?h>rM3LygH}Os|#v=OBzlCa72uX*96!((T_c4;e2Dt+pq`8q z1wWM6IGh(_Pa>K)_?Xwkcw5lK#G{^!IQpHr%=FX$|AHE}O=(335p{b&w0qCdiGtYdBt`oWIr3s|Lu$ zdbMhhW6HIyNvm;GYFD|-!_>VD8VzGaEnH&nW-!piOv5yj4U@$a0G~pWc?I$y? z6Q%Ybolj7lr?xl6kQ^fHTBisHbN*|5lEmUtf$Ksna)0RhM;yx^*lkS_S6F<463c$5 zqj~4|;4?&F&xF1i+FzrTi1ovgdhuTUvIJxIgdy1LD8ug59a-*W;$bl)KMw;#xCaTw z);<`oqY)4`E!u4Dkv`Mo22Id_0b=3{!JZ$nu=Q7I|Bbn6x+A-O*TE>r6X2W8z>dj> zRt)zMwiCp|{xIV7kjx_dAGgsZ@JLqzu-?Pj<0^OTF(M}>9rs~PI2S~`*4E6y&C)mzB9&p literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/dns_packet.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/dns_packet.c new file mode 100644 index 0000000..6d66eeb --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/dns_packet.c @@ -0,0 +1,77 @@ +/* +DNS should have used LZ77 instead of its own sophomoric compression algorithm. +*/ + +#include "error.h" +#include "dns.h" + +unsigned int dns_packet_copy(const char *buf,unsigned int len,unsigned int pos,char *out,unsigned int outlen) +{ + while (outlen) { + if (pos >= len) { errno = error_proto; return 0; } + *out = buf[pos++]; + ++out; --outlen; + } + return pos; +} + +unsigned int dns_packet_skipname(const char *buf,unsigned int len,unsigned int pos) +{ + unsigned char ch; + + for (;;) { + if (pos >= len) break; + ch = buf[pos++]; + if (ch >= 192) return pos + 1; + if (ch >= 64) break; + if (!ch) return pos; + pos += ch; + } + + errno = error_proto; + return 0; +} + +unsigned int dns_packet_getname(const char *buf,unsigned int len,unsigned int pos,char **d) +{ + unsigned int loop = 0; + unsigned int state = 0; + unsigned int firstcompress = 0; + unsigned int where; + unsigned char ch; + char name[255]; + unsigned int namelen = 0; + + for (;;) { + if (pos >= len) goto PROTO; ch = buf[pos++]; + if (++loop >= 1000) goto PROTO; + + if (state) { + if (namelen + 1 > sizeof name) goto PROTO; name[namelen++] = ch; + --state; + } + else { + while (ch >= 192) { + where = ch; where -= 192; where <<= 8; + if (pos >= len) goto PROTO; ch = buf[pos++]; + if (!firstcompress) firstcompress = pos; + pos = where + ch; + if (pos >= len) goto PROTO; ch = buf[pos++]; + if (++loop >= 1000) goto PROTO; + } + if (ch >= 64) goto PROTO; + if (namelen + 1 > sizeof name) goto PROTO; name[namelen++] = ch; + if (!ch) break; + state = ch; + } + } + + if (!dns_domain_copy(d,name)) return 0; + + if (firstcompress) return firstcompress; + return pos; + + PROTO: + errno = error_proto; + return 0; +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/dns_packet.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/dns_packet.o new file mode 100644 index 0000000000000000000000000000000000000000..84e1b310dbdbeed8407b510e9272036a0e864da6 GIT binary patch literal 2280 zcmbtVOK1~O6n)b~oBGK_tsq)#1StwSm?}b~Xhx?tqKNndzj2yQv}iJ6GA8QAmT7AT z4c3+0E?v4Rib8Aa!i9^NMJ+D;Y_uAS=*BO^dnfPNmucMSh0MF}+~2u(-n?9G-?zI? z5C{{2Y$vljh7z*LGpk1&H9{7V1|lEcV?RA|DBAlG!@^%gs|Z%RkUuVjii$Ymtq;w} z4=`hYQNE9>oZnk+x5rII?)_PYy?AXHp7s;#gP;t0z2TSQz)f_s9trl8Y)uGq@Ar35 z-AR_q0nlHBcuaHgq1^LrR2;Yp{^6I|6S6omrsR7f<#Jhm^x9Wiofv8xmF;mLlRXU% z+p6vMRQ{0AKZ7Ji8QKL^GPO%4k-Ah< zB~oW5LnH^)&czajn$(CC*ON&t1uiMw)TEC6M>b|mHGaNApub*)_2Q2N~qaoaQp57yBouh=kA7R9=Goj zz}>Us9GrXTs6D(6oIX7#L|Xt z>W+Vxo>aS2vACYT%*SWWcc+~Mvjr+XKm_D{WpU0Do{3-Z2Zi#9!|@wpcq`?NXAjR7 r!*6jopXWA*^LajVIPd?J!+HN8)IvdwKll81jyRk58PHLfKb!Y&YdLRb literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/dns_random.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/dns_random.c new file mode 100644 index 0000000..2158ed4 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/dns_random.c @@ -0,0 +1,63 @@ +#include +#include "dns.h" +#include "taia.h" +#include "uint32.h" + +static uint32 seed[32]; +static uint32 in[12]; +static uint32 out[8]; +static int outleft = 0; + +#define ROTATE(x,b) (((x) << (b)) | ((x) >> (32 - (b)))) +#define MUSH(i,b) x = t[i] += (((x ^ seed[i]) + sum) ^ ROTATE(x,b)); + +static void surf(void) +{ + uint32 t[12]; uint32 x; uint32 sum = 0; + int r; int i; int loop; + + for (i = 0;i < 12;++i) t[i] = in[i] ^ seed[12 + i]; + for (i = 0;i < 8;++i) out[i] = seed[24 + i]; + x = t[11]; + for (loop = 0;loop < 2;++loop) { + for (r = 0;r < 16;++r) { + sum += 0x9e3779b9; + MUSH(0,5) MUSH(1,7) MUSH(2,9) MUSH(3,13) + MUSH(4,5) MUSH(5,7) MUSH(6,9) MUSH(7,13) + MUSH(8,5) MUSH(9,7) MUSH(10,9) MUSH(11,13) + } + for (i = 0;i < 8;++i) out[i] ^= t[i + 4]; + } +} + +void dns_random_init(const char data[128]) +{ + int i; + struct taia t; + char tpack[16]; + + for (i = 0;i < 32;++i) + uint32_unpack(data + 4 * i,seed + i); + + taia_now(&t); + taia_pack(tpack,&t); + for (i = 0;i < 4;++i) + uint32_unpack(tpack + 4 * i,in + 4 + i); + + in[8] = getpid(); + in[9] = getppid(); + /* more space in 10 and 11, but this is probably enough */ +} + +unsigned int dns_random(unsigned int n) +{ + if (!n) return 0; + + if (!outleft) { + if (!++in[0]) if (!++in[1]) if (!++in[2]) ++in[3]; + surf(); + outleft = 8; + } + + return out[--outleft] % n; +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/dns_random.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/dns_random.o new file mode 100644 index 0000000000000000000000000000000000000000..7c7d1a47500168f52e6c5d9ba5a075e005107c85 GIT binary patch literal 3376 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 +#include "taia.h" +#include "env.h" +#include "byte.h" +#include "str.h" +#include "openreadclose.h" +#include "dns.h" + +static stralloc data = {0}; + +static int init(stralloc *rules) +{ + char host[256]; + const char *x; + int i; + int j; + int k; + + if (!stralloc_copys(rules,"")) return -1; + + x = env_get("DNSREWRITEFILE"); + if (!x) x = "/etc/dnsrewrite"; + + i = openreadclose(x,&data,64); + if (i == -1) return -1; + + if (i) { + if (!stralloc_append(&data,"\n")) return -1; + i = 0; + for (j = 0;j < data.len;++j) + if (data.s[j] == '\n') { + if (!stralloc_catb(rules,data.s + i,j - i)) return -1; + while (rules->len) { + if (rules->s[rules->len - 1] != ' ') + if (rules->s[rules->len - 1] != '\t') + if (rules->s[rules->len - 1] != '\r') + break; + --rules->len; + } + if (!stralloc_0(rules)) return -1; + i = j + 1; + } + return 0; + } + + x = env_get("LOCALDOMAIN"); + if (x) { + if (!stralloc_copys(&data,x)) return -1; + if (!stralloc_append(&data," ")) return -1; + if (!stralloc_copys(rules,"?:")) return -1; + i = 0; + for (j = 0;j < data.len;++j) + if (data.s[j] == ' ') { + if (!stralloc_cats(rules,"+.")) return -1; + if (!stralloc_catb(rules,data.s + i,j - i)) return -1; + i = j + 1; + } + if (!stralloc_0(rules)) return -1; + if (!stralloc_cats(rules,"*.:")) return -1; + if (!stralloc_0(rules)) return -1; + return 0; + } + + i = openreadclose("/etc/resolv.conf",&data,64); + if (i == -1) return -1; + + if (i) { + if (!stralloc_append(&data,"\n")) return -1; + i = 0; + for (j = 0;j < data.len;++j) + if (data.s[j] == '\n') { + if (byte_equal("search ",7,data.s + i) || byte_equal("search\t",7,data.s + i) || byte_equal("domain ",7,data.s + i) || byte_equal("domain\t",7,data.s + i)) { + if (!stralloc_copys(rules,"?:")) return -1; + i += 7; + while (i < j) { + k = byte_chr(data.s + i,j - i,' '); + k = byte_chr(data.s + i,k,'\t'); + if (!k) { ++i; continue; } + if (!stralloc_cats(rules,"+.")) return -1; + if (!stralloc_catb(rules,data.s + i,k)) return -1; + i += k; + } + if (!stralloc_0(rules)) return -1; + if (!stralloc_cats(rules,"*.:")) return -1; + if (!stralloc_0(rules)) return -1; + return 0; + } + i = j + 1; + } + } + + host[0] = 0; + if (gethostname(host,sizeof host) == -1) return -1; + host[(sizeof host) - 1] = 0; + i = str_chr(host,'.'); + if (host[i]) { + if (!stralloc_copys(rules,"?:")) return -1; + if (!stralloc_cats(rules,host + i)) return -1; + if (!stralloc_0(rules)) return -1; + } + if (!stralloc_cats(rules,"*.:")) return -1; + if (!stralloc_0(rules)) return -1; + + return 0; +} + +static int ok = 0; +static unsigned int uses; +static struct taia deadline; +static stralloc rules = {0}; /* defined if ok */ + +int dns_resolvconfrewrite(stralloc *out) +{ + struct taia now; + + taia_now(&now); + if (taia_less(&deadline,&now)) ok = 0; + if (!uses) ok = 0; + + if (!ok) { + if (init(&rules) == -1) return -1; + taia_uint(&deadline,600); + taia_add(&deadline,&now,&deadline); + uses = 10000; + ok = 1; + } + + --uses; + if (!stralloc_copy(out,&rules)) return -1; + return 0; +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/dns_rcrw.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/dns_rcrw.o new file mode 100644 index 0000000000000000000000000000000000000000..6903dc902c3651a5eb71d068bf1acebb56be7879 GIT binary patch literal 5840 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 RegB;xGyfRH(I0a$`Ue}hA>jZ3 literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/dns_sortip.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/dns_sortip.c new file mode 100644 index 0000000..af9b235 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/dns_sortip.c @@ -0,0 +1,20 @@ +#include "byte.h" +#include "dns.h" + +/* XXX: sort servers by configurable notion of closeness? */ +/* XXX: pay attention to competence of each server? */ + +void dns_sortip(char *s,unsigned int n) +{ + unsigned int i; + char tmp[4]; + + n >>= 2; + while (n > 1) { + i = dns_random(n); + --n; + byte_copy(tmp,4,s + (i << 2)); + byte_copy(s + (i << 2),4,s + (n << 2)); + byte_copy(s + (n << 2),4,tmp); + } +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/dns_sortip.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/dns_sortip.o new file mode 100644 index 0000000000000000000000000000000000000000..3e8ba86698c27de0c9107b520dc8f2992e78adda GIT binary patch literal 1600 zcmbu8&1(}u6u{qR6Ps#Tqj-oYGzXCgb}%Xm9%MKDN+5brBZzI|CRu6GWXtZNjTeQ0 zuwtY~@1Fe^Bt;J%Jb3n^^imHN@!-u;-`kzh>2!P12g`f!_de#$%+BNK+DuB*K!^sH z;jbqsz^Vkz2%9hlqhQ^%>eX<|x={~*u5G5SSNh*_{VnZ5`{4K!N(;aDH?^;1t$j(o zNu#cW8{x1zn9D$ESP4Hxu|fJZrSSOYaCl|Vrg$w}kK&ZM9z|>6MnrIphp#IAce&g1 z)|@qOExe@$07qg4+M{crt>iR)Y$QvwpGJP1$DWZc8@aNPALuVq(?-EEicd4o(=*1I zDZ}jVqxkIP=$@RC$ zkwk4vzIt|)zRC|J%L@)5qrI#9A4Qh5{!9M!xig@{$WDNsf!|?i9`W9eB3IuU6`$CHL%ZuYeAf$>mRU=3BGa?G yZMOr>Uf?uZ?s5-%(7Pj{yQ4e!wH-^DAPRB%X9aH(L{WJV<6XSKIrX3#A-@5GPN0YY literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/dns_sortip6.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/dns_sortip6.c new file mode 100644 index 0000000..7e752e9 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/dns_sortip6.c @@ -0,0 +1,20 @@ +#include "byte.h" +#include "dns.h" + +/* XXX: sort servers by configurable notion of closeness? */ +/* XXX: pay attention to competence of each server? */ + +void dns_sortip6(char *s,unsigned int n) +{ + unsigned int i; + char tmp[16]; + + n >>= 4; + while (n > 1) { + i = dns_random(n); + --n; + byte_copy(tmp,16,s + (i << 4)); + byte_copy(s + (i << 4),16,s + (n << 4)); + byte_copy(s + (n << 4),16,tmp); + } +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/dns_sortip6.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/dns_sortip6.o new file mode 100644 index 0000000000000000000000000000000000000000..b653abc6c657d8af8b7ccca55e11300b675d6442 GIT binary patch literal 1592 zcmbu8PiqrF6u@V*8=Gp`uHvDf&^<{7J2qB&@F3arUjosC8bNGLH_4V3-K6X;+IUe| zkSrMKm+)&yiXQw7UX)(igGD@ev()!yXLLI5Ngpilz2AFp-n^Ne7mKx}oTd>W8o5dS zc!CnrmtcwE5*Z_-#JTU(tI3gbub%waJv8oC;;&YGq&;npPrk&oizDH=Q>-$~@QaatpqszDJ(_!Sc9%JYK5*w=Vir5U&N+oWy*(HuQAk2Hm`{y0?wwK9b6CZ4)5USaVlkmAjt8b6?_eB6qN@l{)^k3;~H2a +#include +#include +#include "socket.h" +#include "alloc.h" +#include "error.h" +#include "byte.h" +#include "uint16.h" +#include "dns.h" +#include "ip6.h" + +static int serverwantstcp(const char *buf,unsigned int len) +{ + char out[12]; + + if (!dns_packet_copy(buf,len,0,out,12)) return 1; + if (out[2] & 2) return 1; + return 0; +} + +static int serverfailed(const char *buf,unsigned int len) +{ + char out[12]; + unsigned int rcode; + + if (!dns_packet_copy(buf,len,0,out,12)) return 1; + rcode = out[3]; + rcode &= 15; + if (rcode && (rcode != 3)) { errno = error_again; return 1; } + return 0; +} + +static int irrelevant(const struct dns_transmit *d,const char *buf,unsigned int len) +{ + char out[12]; + char *dn; + unsigned int pos; + + pos = dns_packet_copy(buf,len,0,out,12); if (!pos) return 1; + if (byte_diff(out,2,d->query + 2)) return 1; + if (out[4] != 0) return 1; + if (out[5] != 1) return 1; + + dn = 0; + pos = dns_packet_getname(buf,len,pos,&dn); if (!pos) return 1; + if (!dns_domain_equal(dn,d->query + 14)) { alloc_free(dn); return 1; } + alloc_free(dn); + + pos = dns_packet_copy(buf,len,pos,out,4); if (!pos) return 1; + if (byte_diff(out,2,d->qtype)) return 1; + if (byte_diff(out + 2,2,DNS_C_IN)) return 1; + + return 0; +} + +static void packetfree(struct dns_transmit *d) +{ + if (!d->packet) return; + alloc_free(d->packet); + d->packet = 0; +} + +static void queryfree(struct dns_transmit *d) +{ + if (!d->query) return; + alloc_free(d->query); + d->query = 0; +} + +static void socketfree(struct dns_transmit *d) +{ + if (!d->s1) return; + close(d->s1 - 1); + d->s1 = 0; +} + +void dns_transmit_free(struct dns_transmit *d) +{ + queryfree(d); + socketfree(d); + packetfree(d); +} + +static int randombind(struct dns_transmit *d) +{ + int j; + + for (j = 0;j < 10;++j) + if (socket_bind6(d->s1 - 1,d->localip,1025 + dns_random(64510),d->scope_id) == 0) + return 0; + if (socket_bind6(d->s1 - 1,d->localip,0,d->scope_id) == 0) + return 0; + return -1; +} + +static const int timeouts[4] = { 1, 3, 11, 45 }; + +static int thisudp(struct dns_transmit *d) +{ + const char *ip; + + socketfree(d); + + while (d->udploop < 4) { + for (;d->curserver < 16;++d->curserver) { + ip = d->servers + 16 * d->curserver; + if (byte_diff(ip,16,V6any)) { + d->query[2] = dns_random(256); + d->query[3] = dns_random(256); + + d->s1 = 1 + socket_udp6(); + if (!d->s1) { dns_transmit_free(d); return -1; } + if (randombind(d) == -1) { dns_transmit_free(d); return -1; } + + if (socket_connect6(d->s1 - 1,ip,53,d->scope_id) == 0) + if (send(d->s1 - 1,d->query + 2,d->querylen - 2,0) == d->querylen - 2) { + struct taia now; + taia_now(&now); + taia_uint(&d->deadline,timeouts[d->udploop]); + taia_add(&d->deadline,&d->deadline,&now); + d->tcpstate = 0; + return 0; + } + + socketfree(d); + } + } + + ++d->udploop; + d->curserver = 0; + } + + dns_transmit_free(d); return -1; +} + +static int firstudp(struct dns_transmit *d) +{ + d->curserver = 0; + return thisudp(d); +} + +static int nextudp(struct dns_transmit *d) +{ + ++d->curserver; + return thisudp(d); +} + +static int thistcp(struct dns_transmit *d) +{ + struct taia now; + const char *ip; + + socketfree(d); + packetfree(d); + + for (;d->curserver < 16;++d->curserver) { + ip = d->servers + 16 * d->curserver; + if (byte_diff(ip,16,V6any)) { + d->query[2] = dns_random(256); + d->query[3] = dns_random(256); + + d->s1 = 1 + socket_tcp6(); + if (!d->s1) { dns_transmit_free(d); return -1; } + if (randombind(d) == -1) { dns_transmit_free(d); return -1; } + + taia_now(&now); + taia_uint(&d->deadline,10); + taia_add(&d->deadline,&d->deadline,&now); + if (socket_connect6(d->s1 - 1,ip,53,d->scope_id) == 0) { + d->tcpstate = 2; + return 0; + } + if ((errno == error_inprogress) || (errno == error_wouldblock)) { + d->tcpstate = 1; + return 0; + } + + socketfree(d); + } + } + + dns_transmit_free(d); return -1; +} + +static int firsttcp(struct dns_transmit *d) +{ + d->curserver = 0; + return thistcp(d); +} + +static int nexttcp(struct dns_transmit *d) +{ + ++d->curserver; + return thistcp(d); +} + +int dns_transmit_start(struct dns_transmit *d,const char servers[256],int flagrecursive,const char *q,const char qtype[2],const char localip[16]) +{ + unsigned int len; + + dns_transmit_free(d); + errno = error_io; + + len = dns_domain_length(q); + d->querylen = len + 18; + d->query = alloc(d->querylen); + if (!d->query) return -1; + + uint16_pack_big(d->query,len + 16); + byte_copy(d->query + 2,12,flagrecursive ? "\0\0\1\0\0\1\0\0\0\0\0\0" : "\0\0\0\0\0\1\0\0\0\0\0\0gcc-bug-workaround"); + byte_copy(d->query + 14,len,q); + byte_copy(d->query + 14 + len,2,qtype); + byte_copy(d->query + 16 + len,2,DNS_C_IN); + + byte_copy(d->qtype,2,qtype); + d->servers = servers; + byte_copy(d->localip,16,localip); + + d->udploop = flagrecursive ? 1 : 0; + + if (len + 16 > 512) return firsttcp(d); + return firstudp(d); +} + +void dns_transmit_io(struct dns_transmit *d,iopause_fd *x,struct taia *deadline) +{ + x->fd = d->s1 - 1; + + switch(d->tcpstate) { + case 0: case 3: case 4: case 5: + x->events = IOPAUSE_READ; + break; + case 1: case 2: + x->events = IOPAUSE_WRITE; + break; + } + + if (taia_less(&d->deadline,deadline)) + *deadline = d->deadline; +} + +int dns_transmit_get(struct dns_transmit *d,const iopause_fd *x,const struct taia *when) +{ + char udpbuf[513]; + unsigned char ch; + int r; + int fd; + + errno = error_io; + fd = d->s1 - 1; + + if (!x->revents) { + if (taia_less(when,&d->deadline)) return 0; + errno = error_timeout; + if (d->tcpstate == 0) return nextudp(d); + return nexttcp(d); + } + + if (d->tcpstate == 0) { +/* +have attempted to send UDP query to each server udploop times +have sent query to curserver on UDP socket s +*/ + r = recv(fd,udpbuf,sizeof udpbuf,0); + if (r <= 0) { + if (errno == error_connrefused) if (d->udploop == 2) return 0; + return nextudp(d); + } + if (r + 1 > sizeof udpbuf) return 0; + + if (irrelevant(d,udpbuf,r)) return 0; + if (serverwantstcp(udpbuf,r)) return firsttcp(d); + if (serverfailed(udpbuf,r)) { + if (d->udploop == 2) return 0; + return nextudp(d); + } + socketfree(d); + + d->packetlen = r; + d->packet = alloc(d->packetlen); + if (!d->packet) { dns_transmit_free(d); return -1; } + byte_copy(d->packet,d->packetlen,udpbuf); + queryfree(d); + return 1; + } + + if (d->tcpstate == 1) { +/* +have sent connection attempt to curserver on TCP socket s +pos not defined +*/ + if (!socket_connected(fd)) return nexttcp(d); + d->pos = 0; + d->tcpstate = 2; + return 0; + } + + if (d->tcpstate == 2) { +/* +have connection to curserver on TCP socket s +have sent pos bytes of query +*/ + r = write(fd,d->query + d->pos,d->querylen - d->pos); + if (r <= 0) return nexttcp(d); + d->pos += r; + if (d->pos == d->querylen) { + struct taia now; + taia_now(&now); + taia_uint(&d->deadline,10); + taia_add(&d->deadline,&d->deadline,&now); + d->tcpstate = 3; + } + return 0; + } + + if (d->tcpstate == 3) { +/* +have sent entire query to curserver on TCP socket s +pos not defined +*/ + r = read(fd,&ch,1); + if (r <= 0) return nexttcp(d); + d->packetlen = ch; + d->tcpstate = 4; + return 0; + } + + if (d->tcpstate == 4) { +/* +have sent entire query to curserver on TCP socket s +pos not defined +have received one byte of packet length into packetlen +*/ + r = read(fd,&ch,1); + if (r <= 0) return nexttcp(d); + d->packetlen <<= 8; + d->packetlen += ch; + d->tcpstate = 5; + d->pos = 0; + d->packet = alloc(d->packetlen); + if (!d->packet) { dns_transmit_free(d); return -1; } + return 0; + } + + if (d->tcpstate == 5) { +/* +have sent entire query to curserver on TCP socket s +have received entire packet length into packetlen +packet is allocated +have received pos bytes of packet +*/ + r = read(fd,d->packet + d->pos,d->packetlen - d->pos); + if (r <= 0) return nexttcp(d); + d->pos += r; + if (d->pos < d->packetlen) return 0; + + socketfree(d); + if (irrelevant(d,d->packet,d->packetlen)) return nexttcp(d); + if (serverwantstcp(d->packet,d->packetlen)) return nexttcp(d); + if (serverfailed(d->packet,d->packetlen)) return nexttcp(d); + + queryfree(d); + return 1; + } + + return 0; +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/dns_transmit.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/dns_transmit.o new file mode 100644 index 0000000000000000000000000000000000000000..6cd6cae8734d05baec25f5b70df2db0adca48c0f GIT binary patch literal 8672 zcmcIodvIJ;89$rdlu%)BC=XYybc+{Ag@!C`Gp*r~CE50d*+O^(D{Vw2`-MYEk zhfQtECMnn34RI7u2gZ(~!zcqfI;D1`EF=&aDrCyww2VN+u_P2}Ew4x)@%Np3PI9v3 z{-KU%=I*)Y_kHJkp7Wh^cY7qdyujmOvU%7IY-%J?#`gH9-YfZQB|D$ZW_5=3+8u^< z%E-J|WUrW;8TDARGTVcNn=UaLZw>AvQO2tyk1aFHn}?SBJj}>$Eia_#?kIga<(o7#aHmJ?3WZ}AKHn}Q%XN`5bF7%H(NUb)n znz3ijo?$w9?!rh)+x^OiRmfbwTkrHj!VNjkO@$D!12WU>%8jO15wV_

>S}tjJugdnY6r*74E$vlA1U@d;}{>;5T+ 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 kAIZbz_o@8g^ezW@LL literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/dns_txt.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/dns_txt.c new file mode 100644 index 0000000..44deafe --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/dns_txt.c @@ -0,0 +1,59 @@ +#include "stralloc.h" +#include "uint16.h" +#include "byte.h" +#include "dns.h" + +int dns_txt_packet(stralloc *out,const char *buf,unsigned int len) +{ + unsigned int pos; + char header[12]; + uint16 numanswers; + uint16 datalen; + char ch; + unsigned int txtlen; + int i; + + if (!stralloc_copys(out,"")) return -1; + + pos = dns_packet_copy(buf,len,0,header,12); if (!pos) return -1; + uint16_unpack_big(header + 6,&numanswers); + pos = dns_packet_skipname(buf,len,pos); if (!pos) return -1; + pos += 4; + + while (numanswers--) { + pos = dns_packet_skipname(buf,len,pos); if (!pos) return -1; + pos = dns_packet_copy(buf,len,pos,header,10); if (!pos) return -1; + uint16_unpack_big(header + 8,&datalen); + if (byte_equal(header,2,DNS_T_TXT)) + if (byte_equal(header + 2,2,DNS_C_IN)) { + if (pos + datalen > len) return -1; + txtlen = 0; + for (i = 0;i < datalen;++i) { + ch = buf[pos + i]; + if (!txtlen) + txtlen = (unsigned char) ch; + else { + --txtlen; + if (ch < 32) ch = '?'; + if (ch > 126) ch = '?'; + if (!stralloc_append(out,&ch)) return -1; + } + } + } + pos += datalen; + } + + return 0; +} + +static char *q = 0; + +int dns_txt(stralloc *out,const stralloc *fqdn) +{ + if (!dns_domain_fromdot(&q,fqdn->s,fqdn->len)) return -1; + if (dns_resolve(q,DNS_T_TXT) == -1) return -1; + if (dns_txt_packet(out,dns_resolve_tx.packet,dns_resolve_tx.packetlen) == -1) return -1; + dns_transmit_free(&dns_resolve_tx); + dns_domain_free(&q); + return 0; +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/dns_txt.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/dns_txt.o new file mode 100644 index 0000000000000000000000000000000000000000..d874765356be634da6c3af1556c13eb1e4d2451f GIT binary patch literal 3272 zcmbtWO>7%Q6rPRU#PlZ{Acabehz~0iRO;4k2{fd{R-AT&7AWPXks8U_#A|HDf7qMK zfv82;MywW>o~oWXA#PlnfKag#pzRH{7bGM=TnK~+azI3)BD^;{6OShLi6?pAd*A!s zn>VvF21~{uX zkzzQu_NU=2Xq$TF_wu-N-?_Jnc&#xvu(SoDyOWx(yBY1Q;U=^R1FR{-wY8MtE@%b4 z@>O}osM}gFd^ftZ7ZRNxbmtGl*OM$O7nh^;-mZFd zi>8V7)#?eDMs#U6o$ZFREC!>_Ew$Q9r@5d7u+JgdR=DvwuENa@n)Ekob*`qn!-w#j)`Ml&9*e0rRw><$X?=PHaHY~v zPA;og`hg2z4@|l*rfiPY*3}!aUF7|kHe%ly?!R6+?(NBOYhim&efV3!xfe3%ZE6h5QfJr(4i866!84#ceKw3!Q@2pta{I~)#$ zpYTjVLZ$hvZBB!>i=Iw#t7v7+kZqN15=xl1NkY@55(yRa=pY@+a2GU^tyDZ&G_w{7 z&E&ILD+igmylsWfy!hJTl5Nh+()Rw>BM8~BETmJa5@CKB=PU@_OM-t8Y`@@hGlE+m zWP;`6F~xBL2!b5&6nPvp;=(mTBTLe_jJ{*6Cn10}+vW4|c)sk1A%No_;{>Mp_!tv~ z`&>sLh_>ABXAF?nmFMxAFSN;Tu>1*5WLoZD2fWq#U&jRpIqE5bZWsJ`K41UyfXO{! z$^o{Z{pbiHbEhCCV@Q8mejx~g$lM13YenVx1)9}-$oc5YYme*!oGeI$1^0oy2Y&MW z9{{Y?_$ds4-1F4-QyzaiAQ{N>lZ`D2rmkP+6@I_q4ib0iQ7=r-EZ#}? z;nM@w_^80g{lfb^C-M26 zGTDazy@2B#$m<+r`x3_$PkoT#s2&#h#|0euyv{R19kKsY0w2F|IA0fV{OID}PcKP0 z`&%LB1sv~HUdLoO_D?_FK%*oD{v+UX{;a?k=UWi?j|%)C*eF<^QK+xeXA|e=`#+hb B6g>a{ literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/dnscache b/NONE-CKUBU/src/djbdns/djbdns-1.05/dnscache new file mode 100755 index 0000000000000000000000000000000000000000..b0b6a5e437c9902944cd673a268ed1fcc8cfd373 GIT binary patch literal 66440 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 literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/dnscache-conf b/NONE-CKUBU/src/djbdns/djbdns-1.05/dnscache-conf new file mode 100755 index 0000000000000000000000000000000000000000..61bf5205685496d757ea1a62eb63a902149f7cef GIT binary patch literal 20072 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 +#include +#include +#include "hasdevtcp.h" +#ifdef HASDEVTCP +#include +#endif +#include +#include "strerr.h" +#include "buffer.h" +#include "uint32.h" +#include "taia.h" +#include "str.h" +#include "open.h" +#include "error.h" +#include "exit.h" +#include "auto_home.h" +#include "generic-conf.h" + +#define FATAL "dnscache-conf: fatal: " + +void usage(void) +{ + strerr_die1x(100,"dnscache-conf: usage: dnscache-conf acct logacct /dnscache [ myip ]"); +} + +int fdrootservers; +char rootserversbuf[64]; +buffer ssrootservers; + +char *dir; +char *user; +char *loguser; +struct passwd *pw; +const char *myip; + +uint32 seed[32]; +int seedpos = 0; + +void seed_adduint32(uint32 u) +{ + int i; + + seed[seedpos] += u; + if (++seedpos == 32) { + for (i = 0;i < 32;++i) { + u = ((u ^ seed[i]) + 0x9e3779b9) ^ (u << 7) ^ (u >> 25); + seed[i] = u; + } + seedpos = 0; + } +} + +void seed_addtime(void) +{ + struct taia t; + char tpack[TAIA_PACK]; + int i; + + taia_now(&t); + taia_pack(tpack,&t); + for (i = 0;i < TAIA_PACK;++i) + seed_adduint32(tpack[i]); +} + +int main(int argc,char **argv) +{ + seed_addtime(); + seed_adduint32(getpid()); + seed_adduint32(getppid()); + seed_adduint32(getuid()); + seed_adduint32(getgid()); + + user = argv[1]; + if (!user) usage(); + loguser = argv[2]; + if (!loguser) usage(); + dir = argv[3]; + if (!dir) usage(); + if (dir[0] != '/') usage(); + myip = argv[4]; + if (!myip) myip = "127.0.0.1"; + + pw = getpwnam(loguser); + seed_addtime(); + if (!pw) + strerr_die3x(111,FATAL,"unknown account ",loguser); + + if (chdir(auto_home) == -1) + strerr_die4sys(111,FATAL,"unable to switch to ",auto_home,": "); + + fdrootservers = open_read("/etc/dnsroots.local"); + if (fdrootservers == -1) { + if (errno != error_noent) + strerr_die2sys(111,FATAL,"unable to open /etc/dnsroots.local: "); + fdrootservers = open_read("/etc/dnsroots.global"); + if (fdrootservers == -1) + strerr_die2sys(111,FATAL,"unable to open /etc/dnsroots.global: "); + } + + init(dir,FATAL); + + seed_addtime(); makedir("log"); + seed_addtime(); perm(02755); + seed_addtime(); makedir("log/main"); + seed_addtime(); owner(pw->pw_uid,pw->pw_gid); + seed_addtime(); perm(02755); + seed_addtime(); start("log/status"); finish(); + seed_addtime(); owner(pw->pw_uid,pw->pw_gid); + seed_addtime(); perm(0644); + seed_addtime(); makedir("env"); + seed_addtime(); perm(02755); + seed_addtime(); start("env/ROOT"); outs(dir); outs("/root\n"); finish(); + seed_addtime(); perm(0644); + seed_addtime(); start("env/IP"); outs(myip); outs("\n"); finish(); + seed_addtime(); perm(0644); + seed_addtime(); start("env/IPSEND"); outs("0.0.0.0\n"); finish(); + seed_addtime(); perm(0644); + seed_addtime(); start("env/CACHESIZE"); outs("1000000\n"); finish(); + seed_addtime(); perm(0644); + seed_addtime(); start("env/DATALIMIT"); outs("3000000\n"); finish(); + seed_addtime(); perm(0644); + seed_addtime(); start("run"); + outs("#!/bin/sh\nexec 2>&1\nexec v%gT=%ovQ%CJakLfPZgy{ym1OUB_pSt| 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 IKW_Mc0j}PfTmS$7 literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/dnscache.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/dnscache.c new file mode 100644 index 0000000..abcba69 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/dnscache.c @@ -0,0 +1,479 @@ +#include +#include "env.h" +#include "exit.h" +#include "scan.h" +#include "strerr.h" +#include "error.h" +#include "ip4.h" +#include "ip6.h" +#include "uint16.h" +#include "uint64.h" +#include "socket.h" +#include "dns.h" +#include "taia.h" +#include "byte.h" +#include "roots.h" +#include "fmt.h" +#include "iopause.h" +#include "query.h" +#include "alloc.h" +#include "response.h" +#include "cache.h" +#include "ndelay.h" +#include "log.h" +#include "okclient.h" +#include "droproot.h" + +long interface; + +stralloc ignoreip = {0}; + +static int packetquery(char *buf,unsigned int len,char **q,char qtype[2],char qclass[2],char id[2]) +{ + unsigned int pos; + char header[12]; + + errno = error_proto; + pos = dns_packet_copy(buf,len,0,header,12); if (!pos) return 0; + if (header[2] & 128) return 0; /* must not respond to responses */ + if (!(header[2] & 1)) return 0; /* do not respond to non-recursive queries */ + if (header[2] & 120) return 0; + if (header[2] & 2) return 0; + if (byte_diff(header + 4,2,"\0\1")) return 0; + + pos = dns_packet_getname(buf,len,pos,q); if (!pos) return 0; + pos = dns_packet_copy(buf,len,pos,qtype,2); if (!pos) return 0; + pos = dns_packet_copy(buf,len,pos,qclass,2); if (!pos) return 0; + if (byte_diff(qclass,2,DNS_C_IN) && byte_diff(qclass,2,DNS_C_ANY)) return 0; + + byte_copy(id,2,header); + return 1; +} + + +static char myipoutgoing[16]; +static char myipincoming[16]; +static char buf[1024]; +uint64 numqueries = 0; + + +static int udp53; + +#define MAXUDP 200 +static struct udpclient { + struct query q; + struct taia start; + uint64 active; /* query number, if active; otherwise 0 */ + iopause_fd *io; + char ip[16]; + uint16 port; + char id[2]; + uint32 scope_id; +} u[MAXUDP]; +int uactive = 0; + +void u_drop(int j) +{ + if (!u[j].active) return; + log_querydrop(&u[j].active); + u[j].active = 0; --uactive; +} + +void u_respond(int j) +{ + if (!u[j].active) return; + response_id(u[j].id); + if (response_len > 512) response_tc(); + socket_send6(udp53,response,response_len,u[j].ip,u[j].port,u[j].scope_id); + log_querydone(&u[j].active,response_len); + u[j].active = 0; --uactive; +} + +void u_new(void) +{ + int j; + int i; + struct udpclient *x; + int len; + static char *q = 0; + char qtype[2]; + char qclass[2]; + + for (j = 0;j < MAXUDP;++j) + if (!u[j].active) + break; + + if (j >= MAXUDP) { + j = 0; + for (i = 1;i < MAXUDP;++i) + if (taia_less(&u[i].start,&u[j].start)) + j = i; + errno = error_timeout; + u_drop(j); + } + + x = u + j; + taia_now(&x->start); + + len = socket_recv6(udp53,buf,sizeof buf,x->ip,&x->port,&x->scope_id); + if (len == -1) return; + if (len >= sizeof buf) return; + if (x->port < 1024) if (x->port != 53) return; + if (!okclient(x->ip)) return; + + if (!packetquery(buf,len,&q,qtype,qclass,x->id)) return; + + x->active = ++numqueries; ++uactive; + log_query(&x->active,x->ip,x->port,x->id,q,qtype); + switch(query_start(&x->q,q,qtype,qclass,myipoutgoing,interface)) { + case -1: + u_drop(j); + return; + case 1: + u_respond(j); + } +} + +static int tcp53; + +#define MAXTCP 20 +struct tcpclient { + struct query q; + struct taia start; + struct taia timeout; + uint64 active; /* query number or 1, if active; otherwise 0 */ + iopause_fd *io; + char ip[16]; /* send response to this address */ + uint16 port; /* send response to this port */ + char id[2]; + int tcp; /* open TCP socket, if active */ + int state; + char *buf; /* 0, or dynamically allocated of length len */ + unsigned int len; + unsigned int pos; + uint32 scope_id; +} t[MAXTCP]; +int tactive = 0; + +/* +state 1: buf 0; normal state at beginning of TCP connection +state 2: buf 0; have read 1 byte of query packet length into len +state 3: buf allocated; have read pos bytes of buf +state 0: buf 0; handling query in q +state -1: buf allocated; have written pos bytes +*/ + +void t_free(int j) +{ + if (!t[j].buf) return; + alloc_free(t[j].buf); + t[j].buf = 0; +} + +void t_timeout(int j) +{ + struct taia now; + if (!t[j].active) return; + taia_now(&now); + taia_uint(&t[j].timeout,10); + taia_add(&t[j].timeout,&t[j].timeout,&now); +} + +void t_close(int j) +{ + if (!t[j].active) return; + t_free(j); + log_tcpclose(t[j].ip,t[j].port); + close(t[j].tcp); + t[j].active = 0; --tactive; +} + +void t_drop(int j) +{ + log_querydrop(&t[j].active); + errno = error_pipe; + t_close(j); +} + +void t_respond(int j) +{ + if (!t[j].active) return; + log_querydone(&t[j].active,response_len); + response_id(t[j].id); + t[j].len = response_len + 2; + t_free(j); + t[j].buf = alloc(response_len + 2); + if (!t[j].buf) { t_close(j); return; } + uint16_pack_big(t[j].buf,response_len); + byte_copy(t[j].buf + 2,response_len,response); + t[j].pos = 0; + t[j].state = -1; +} + +void t_rw(int j) +{ + struct tcpclient *x; + char ch; + static char *q = 0; + char qtype[2]; + char qclass[2]; + int r; + + x = t + j; + if (x->state == -1) { + r = write(x->tcp,x->buf + x->pos,x->len - x->pos); + if (r <= 0) { t_close(j); return; } + x->pos += r; + if (x->pos == x->len) { + t_free(j); + x->state = 1; /* could drop connection immediately */ + } + return; + } + + r = read(x->tcp,&ch,1); + if (r == 0) { errno = error_pipe; t_close(j); return; } + if (r < 0) { t_close(j); return; } + + if (x->state == 1) { + x->len = (unsigned char) ch; + x->len <<= 8; + x->state = 2; + return; + } + if (x->state == 2) { + x->len += (unsigned char) ch; + if (!x->len) { errno = error_proto; t_close(j); return; } + x->buf = alloc(x->len); + if (!x->buf) { t_close(j); return; } + x->pos = 0; + x->state = 3; + return; + } + + if (x->state != 3) return; /* impossible */ + + x->buf[x->pos++] = ch; + if (x->pos < x->len) return; + + if (!packetquery(x->buf,x->len,&q,qtype,qclass,x->id)) { t_close(j); return; } + + x->active = ++numqueries; + log_query(&x->active,x->ip,x->port,x->id,q,qtype); + switch(query_start(&x->q,q,qtype,qclass,myipoutgoing,interface)) { + case -1: + t_drop(j); + return; + case 1: + t_respond(j); + return; + } + t_free(j); + x->state = 0; +} + +void t_new(void) +{ + int i; + int j; + struct tcpclient *x; + + for (j = 0;j < MAXTCP;++j) + if (!t[j].active) + break; + + if (j >= MAXTCP) { + j = 0; + for (i = 1;i < MAXTCP;++i) + if (taia_less(&t[i].start,&t[j].start)) + j = i; + errno = error_timeout; + if (t[j].state == 0) + t_drop(j); + else + t_close(j); + } + + x = t + j; + taia_now(&x->start); + + x->tcp = socket_accept6(tcp53,x->ip,&x->port,&x->scope_id); + if (x->tcp == -1) return; + if (x->port < 1024) if (x->port != 53) { close(x->tcp); return; } + if (!okclient(x->ip)) { close(x->tcp); return; } + if (ndelay_on(x->tcp) == -1) { close(x->tcp); return; } /* Linux bug */ + + x->active = 1; ++tactive; + x->state = 1; + t_timeout(j); + + log_tcpopen(x->ip,x->port); +} + + +iopause_fd io[3 + MAXUDP + MAXTCP]; +iopause_fd *udp53io; +iopause_fd *tcp53io; + +static void doit(void) +{ + int j; + struct taia deadline; + struct taia stamp; + int iolen; + int r; + + for (;;) { + taia_now(&stamp); + taia_uint(&deadline,120); + taia_add(&deadline,&deadline,&stamp); + + iolen = 0; + + udp53io = io + iolen++; + udp53io->fd = udp53; + udp53io->events = IOPAUSE_READ; + + tcp53io = io + iolen++; + tcp53io->fd = tcp53; + tcp53io->events = IOPAUSE_READ; + + for (j = 0;j < MAXUDP;++j) + if (u[j].active) { + u[j].io = io + iolen++; + query_io(&u[j].q,u[j].io,&deadline); + } + for (j = 0;j < MAXTCP;++j) + if (t[j].active) { + t[j].io = io + iolen++; + if (t[j].state == 0) + query_io(&t[j].q,t[j].io,&deadline); + else { + if (taia_less(&t[j].timeout,&deadline)) deadline = t[j].timeout; + t[j].io->fd = t[j].tcp; + t[j].io->events = (t[j].state > 0) ? IOPAUSE_READ : IOPAUSE_WRITE; + } + } + + iopause(io,iolen,&deadline,&stamp); + + for (j = 0;j < MAXUDP;++j) + if (u[j].active) { + r = query_get(&u[j].q,u[j].io,&stamp); + if (r == -1) u_drop(j); + if (r == 1) u_respond(j); + } + + for (j = 0;j < MAXTCP;++j) + if (t[j].active) { + if (t[j].io->revents) + t_timeout(j); + if (t[j].state == 0) { + r = query_get(&t[j].q,t[j].io,&stamp); + if (r == -1) t_drop(j); + if (r == 1) t_respond(j); + } + else + if (t[j].io->revents || taia_less(&t[j].timeout,&stamp)) + t_rw(j); + } + + if (udp53io) + if (udp53io->revents) + u_new(); + + if (tcp53io) + if (tcp53io->revents) + t_new(); + } +} + +#define FATAL "dnscache: fatal: " + +char seed[128]; + +int main() +{ + char *x; + unsigned int i, j, k; + unsigned long cachesize; + static stralloc sa = {0}; + + x = env_get("INTERFACE"); + if (x) scan_ulong(x,&interface); + + x = env_get("IP"); + if (!x) + strerr_die2x(111,FATAL,"$IP not set"); + if (!ip6_scan(x,myipincoming)) + strerr_die3x(111,FATAL,"unable to parse IP address ",x); + +#if 0 + /* if if IP is a mapped-IPv4 address, disable IPv6 functionality */ + /* this is actually a bad idea */ + if (ip6_isv4mapped(myipincoming)) + noipv6 = 1; +#endif + + udp53 = socket_udp6(); + if (udp53 == -1) + strerr_die2sys(111,FATAL,"unable to create UDP socket: "); + if (socket_bind6_reuse(udp53,myipincoming,53,interface) == -1) + strerr_die2sys(111,FATAL,"unable to bind UDP socket: "); + + tcp53 = socket_tcp6(); + if (tcp53 == -1) + strerr_die2sys(111,FATAL,"unable to create TCP socket: "); + if (socket_bind6_reuse(tcp53,myipincoming,53,interface) == -1) + strerr_die2sys(111,FATAL,"unable to bind TCP socket: "); + + droproot(FATAL); + + socket_tryreservein(udp53,131072); + + byte_zero(seed,sizeof seed); + read(0,seed,sizeof seed); + dns_random_init(seed); + close(0); + + x = env_get("IPSEND"); + if (!x) + strerr_die2x(111,FATAL,"$IPSEND not set"); + if (!ip6_scan(x,myipoutgoing)) + strerr_die3x(111,FATAL,"unable to parse IP address ",x); + + x = env_get("CACHESIZE"); + if (!x) + strerr_die2x(111,FATAL,"$CACHESIZE not set"); + scan_ulong(x,&cachesize); + if (!cache_init(cachesize)) + strerr_die3x(111,FATAL,"not enough memory for cache of size ",x); + + if (openreadclose("ignoreip",&sa,64) < 0) + strerr_die2x(111,FATAL,"trouble reading ignoreip"); + for(j = k = i = 0; i < sa.len; i++) + if (sa.s[i] == '\n') { + sa.s[i] = '\0'; + if (!stralloc_readyplus(&ignoreip,16)) + strerr_die2x(111,FATAL,"out of memory parsing ignoreip"); + if (!ip6_scan(sa.s+k,ignoreip.s+j)) + strerr_die3x(111,FATAL,"unable to parse address in ignoreip ",ignoreip.s+k); + j += 16; + k = i + 1; + } + ignoreip.len = j; + + if (env_get("HIDETTL")) + response_hidettl(); + if (env_get("FORWARDONLY")) + query_forwardonly(); + + if (!roots_init()) + strerr_die2sys(111,FATAL,"unable to read servers: "); + + if (socket_listen(tcp53,20) == -1) + strerr_die2sys(111,FATAL,"unable to listen on TCP socket: "); + + log_startup(); + doit(); +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/dnscache.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/dnscache.o new file mode 100644 index 0000000000000000000000000000000000000000..21e90f110b9435d3e312fbf1d86960ba00f91cb5 GIT binary patch literal 17648 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 WKN}sm{z;(e!1eEO`kgowlKdwopezRf literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/dnsfilter b/NONE-CKUBU/src/djbdns/djbdns-1.05/dnsfilter new file mode 100755 index 0000000000000000000000000000000000000000..d08b59534437aed11809661bff4d60ba225bef5e GIT binary patch literal 35192 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 R20!1ZVeiEf5gwlY{{UzK#lQdn literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/dnsfilter.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/dnsfilter.c new file mode 100644 index 0000000..822ff1e --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/dnsfilter.c @@ -0,0 +1,215 @@ +#include +#include "strerr.h" +#include "buffer.h" +#include "stralloc.h" +#include "alloc.h" +#include "dns.h" +#include "ip4.h" +#include "byte.h" +#include "scan.h" +#include "taia.h" +#include "sgetopt.h" +#include "iopause.h" +#include "error.h" +#include "exit.h" +#include "ip6.h" + +#define FATAL "dnsfilter: fatal: " + +void nomem(void) +{ + strerr_die2x(111,FATAL,"out of memory"); +} + +struct line { + stralloc left; + stralloc middle; + stralloc right; + struct dns_transmit dt; + int flagactive; + iopause_fd *io; +} *x; +struct line tmp; +unsigned int xmax = 1000; +unsigned int xnum = 0; +unsigned int numactive = 0; +unsigned int maxactive = 10; + +static stralloc partial; + +char inbuf[1024]; +int inbuflen = 0; +iopause_fd *inio; +int flag0 = 1; + +iopause_fd *io; +int iolen; + +char servers[256]; +char ip[4]; +char name[DNS_NAME4_DOMAIN]; + +void errout(int i) +{ + int j; + + if (!stralloc_copys(&x[i].middle,":")) nomem(); + if (!stralloc_cats(&x[i].middle,error_str(errno))) nomem(); + for (j = 0;j < x[i].middle.len;++j) + if (x[i].middle.s[j] == ' ') + x[i].middle.s[j] = '-'; +} + +int main(int argc,char **argv) +{ + struct taia stamp; + struct taia deadline; + int opt; + unsigned long u; + int i; + int j; + int r; + + while ((opt = getopt(argc,argv,"c:l:")) != opteof) + switch(opt) { + case 'c': + scan_ulong(optarg,&u); + if (u < 1) u = 1; + if (u > 1000) u = 1000; + maxactive = u; + break; + case 'l': + scan_ulong(optarg,&u); + if (u < 1) u = 1; + if (u > 1000000) u = 1000000; + xmax = u; + break; + default: + strerr_die1x(111,"dnsfilter: usage: dnsfilter [ -c concurrency ] [ -l lines ]"); + } + + x = (struct line *) alloc(xmax * sizeof(struct line)); + if (!x) nomem(); + byte_zero(x,xmax * sizeof(struct line)); + + io = (iopause_fd *) alloc((xmax + 1) * sizeof(iopause_fd)); + if (!io) nomem(); + + if (!stralloc_copys(&partial,"")) nomem(); + + + while (flag0 || inbuflen || partial.len || xnum) { + taia_now(&stamp); + taia_uint(&deadline,120); + taia_add(&deadline,&deadline,&stamp); + + iolen = 0; + + if (flag0) + if (inbuflen < sizeof inbuf) { + inio = io + iolen++; + inio->fd = 0; + inio->events = IOPAUSE_READ; + } + + for (i = 0;i < xnum;++i) + if (x[i].flagactive) { + x[i].io = io + iolen++; + dns_transmit_io(&x[i].dt,x[i].io,&deadline); + } + + iopause(io,iolen,&deadline,&stamp); + + if (flag0) + if (inbuflen < sizeof inbuf) + if (inio->revents) { + r = read(0,inbuf + inbuflen,(sizeof inbuf) - inbuflen); + if (r <= 0) + flag0 = 0; + else + inbuflen += r; + } + + for (i = 0;i < xnum;++i) + if (x[i].flagactive) { + r = dns_transmit_get(&x[i].dt,x[i].io,&stamp); + if (r == -1) { + errout(i); + x[i].flagactive = 0; + --numactive; + } + else if (r == 1) { + if (dns_name_packet(&x[i].middle,x[i].dt.packet,x[i].dt.packetlen) == -1) + errout(i); + if (x[i].middle.len) + if (!stralloc_cats(&x[i].left,"=")) nomem(); + x[i].flagactive = 0; + --numactive; + } + } + + for (;;) { + + if (xnum && !x[0].flagactive) { + buffer_put(buffer_1,x[0].left.s,x[0].left.len); + buffer_put(buffer_1,x[0].middle.s,x[0].middle.len); + buffer_put(buffer_1,x[0].right.s,x[0].right.len); + buffer_flush(buffer_1); + --xnum; + tmp = x[0]; + for (i = 0;i < xnum;++i) x[i] = x[i + 1]; + x[xnum] = tmp; + continue; + } + + if ((xnum < xmax) && (numactive < maxactive)) { + i = byte_chr(inbuf,inbuflen,'\n'); + if (inbuflen && (i == inbuflen)) { + if (!stralloc_catb(&partial,inbuf,inbuflen)) nomem(); + inbuflen = 0; + continue; + } + + if ((i < inbuflen) || (!flag0 && partial.len)) { + if (i < inbuflen) ++i; + if (!stralloc_catb(&partial,inbuf,i)) nomem(); + inbuflen -= i; + for (j = 0;j < inbuflen;++j) inbuf[j] = inbuf[j + i]; + + if (partial.len) { + i = byte_chr(partial.s,partial.len,'\n'); + i = byte_chr(partial.s,i,'\t'); + i = byte_chr(partial.s,i,' '); + + if (!stralloc_copyb(&x[xnum].left,partial.s,i)) nomem(); + if (!stralloc_copys(&x[xnum].middle,"")) nomem(); + if (!stralloc_copyb(&x[xnum].right,partial.s + i,partial.len - i)) nomem(); + x[xnum].flagactive = 0; + + partial.len = i; + if (!stralloc_0(&partial)) nomem(); + if (ip4_scan(partial.s,ip)) { + dns_name4_domain(name,ip); + if (dns_resolvconfip(servers) == -1) + strerr_die2sys(111,FATAL,"unable to read /etc/resolv.conf: "); + if (dns_transmit_start(&x[xnum].dt,servers,1,name,DNS_T_PTR,V6any) == -1) + errout(xnum); + else { + x[xnum].flagactive = 1; + ++numactive; + } + } + ++xnum; + } + + partial.len = 0; + continue; + } + } + + break; + } + } + + _exit(0); +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/dnsfilter.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/dnsfilter.o new file mode 100644 index 0000000000000000000000000000000000000000..70c3819eab3a2647f674cef8a28a48b29afd489c GIT binary patch literal 11632 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 QyjGTkSfz5!?{Zn-KhcScivR!s literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/dnsip b/NONE-CKUBU/src/djbdns/djbdns-1.05/dnsip new file mode 100755 index 0000000000000000000000000000000000000000..25bd4cbfb4070d794c64ad527f7962db4cf1d964 GIT binary patch literal 30752 zcmeHwe|%F_w(rR=C{UZI{HTf;nZUFvwNcboiY7Frrx>sfAUOPLX;bJ>+S;B_P}E}D z+H*socg8!Hnd{u)jy|t<#+k?5nO8A7kW!?8sI{VlKdFw&3FSuz0V@i5-?h#;Nm{{s z@8|R0e;!TOS!=Jo_u6Z%z4p(9#|peNjRu3DKStp$fw0<}nz zQdL>)Upr-O&h1lfpPE%)lXVNrZ$p99w8A;6K)OEk{Ffu`YJ7-~9xFa$_)YzD1;B88 z(lpvw4Wm7l2O%=jbc-QqnIv9lyJtP~+KAI3bx~tJU z<)!i{o$`>`BZ7-*R31Ige)#mNS7b}uD=$9fV!}oK{0uZ|qyAKBFI28wCnmv%@Se;+ zNlR-PLZ7D59~eS!)adm?=pRvqc%H#0x%`MmFB?KXNX&RL@k!<{W~v~p974~~=r<3c z->T7H9zuUtqc0soC;8~P9-riT8;OXAd?}f(>nDE*ooq|bUHByP>+QOI2wnG^c|+)W z`RzmKjlk*oSA3GoXNLjp7enZc!0GA4=X!XgePs!uaev)~_lwaxK)?JV{KB$jD^}N3 zFRPbI>!fAN1a#9f>Xo+(^)+Rye3DRBQ(f&VlZ0iywUv^v!Y9>MmNOt&@2f6H3BJ0z z>Y8O$HD#qzWlgoPyb{zpUun5eTT@kqx3V?hl&HX(T1i-4S_M`v!{@83E?w=Tcd2r< zuco5Bbe&LERa5U1YHEGeLPc4%RD}viDow=IrIpn}LtUlh6DsO_KB~QXO=TUbE%X-6 z$X|9#)-74Lkw&N&8vjTCQ7!}iqZp&d8UNLl2mwanRZ7I;swiPdeL1vph!uJ>zV zEYbKWHfddi$im7bI>iY6sZFBmv4+ytCebZAGhky9on+FV)+9RBtv_u^blq1eZA%iJ zVxInNO`=mA)t~2*=z1Kav~5XrioN=?J&B$igCj|FJ$6%`y-9S6_4?DDMAvOZX@`>N zdY>hFZxTJZe0#!io~kN;=lZ93qH;V=2nhu()yy+(h|3 z;))p9ozfY*ZN?J25S!$|U+Z-)yb(@OP>A-%@JzasaB`JsH{-VuPOcV>Fn$B!n0&NjQlct!3OuIJrW!gztrjFVfe~)l7an#0m58-6msKEGs!pWr3{tF;X+C?~-GTO^{m~b*- zw43q&B%DkajWGUO!pUUOZH)hha57bND{w%5oX3mgHT@jntC5T-e zb_QJ~qg;aW1~Qy(Ya?5ULCY@|*#)sVA{k@dY^t{8XTB(ZHkTM1r!R!U1phtT+saD> zF*xQ&K*cGogmes;#L&W+nEPJ+BG1pO+-1q7}*<%@n zR|8eIXkTYVMMakNx+cmd%ohXGmpx!d0rF?k)!T_gve|ZSK}AJ!=RSArZ{$DwI#ns> z?{r}#m@CR(K*)6E5g1SmOcSh4FH_E7eTo=bl_EBuwKn|@go?JE5wI&24nb&+SeyO; z+76=Z>?ZPNxK|)zur|F8dSLoE$Y@$K&)M@5xmjNd)hoXzcZy}FMAL2LA3OW&k*zg{ zs+xWu^eFGz!K8x8Ou7rC9oNl<%FRC%giyXY*V2h>^)G^bBBfoAG%@f>it;IE@T0M3 zt<4MIAK(zcpj5zm&&B(dq3jEnw1L4FjkAuUS*kwlB z1VMQ#1D-*iSz*1-qcPZ@ECHv=fP%!}Y{9*K0?G(y3@T0eIc5GDUee~CUnIZno>wG) zBg%iBFP{-6^g0oG%zdSyUq0cLk0?97 zL4yLjGZrmzFLp2Kv|a~&nc$>e`GhDR5oNPO4CbeZG8%yw8@uy{ zcG*{V3qp9_469IK&FW~_c*^=f$0_SV%TbU|S#Ro&HlVR>qP*DAEy`7nL!$h(S1xz- zdVwfK@@cOuIr_cwddI*H(;OEBJho7NTUk7jJi(u_9hsr?#f}UySmns}2Fo2eUc9-y zLCGO{gX0Z41MHZSA4sFR?sc#|*J zB>6Y^QCLkpE6RtJci}eZe9f826>UNy`3?2d;IxW1W!i8Or7c>^34(h*J0HT(88#cm zqIBh1I~5_7?D06p3Bma(-cXfeob!G7Rqk7Li{Vw|bR8MngS$M^Ls#kzZ=V=pzenCEDZBHH6_|+omkBwg~k)Ch-DoYB6 z+}(L2D%u)$Sa(1ut|nw|40+t$t-!5;GPJg@6}@`@LiBsmv{H=G3f)BdMR3eO)dn8)@gj{JG+WW8_7-r>ub1)ds>qk-jw$iH1&8|N1LS)5UM9S86t`D z=cL=;V$6i^yo8E9eSPg1e3Hi>xK~Q1xOq8f}Ak{-Z(52WV(;p5wG9IQ?zBdV;t0FqrZNgGmP{eae3Nd+lEOJADr)T-(WDOoYK@ ze_>z=10d$^c1Gkqp-pZ7((tz+uni{)TlSVZyF2z@W9WBwn>>!a2$=ZWvG*#E^PJ(7 zbC+qJ7z?*oeim+*#&4Mh=%Am=3;+Apgup>`99n{N1b+o6uOSaS>D6!DlibUHr)vm1_liNr?L^B zqE2841Jv`2+~ly|<4#X5S8J7`pfR^&)gXt4!@ z3hGtDH)5u0{ykCzE&Z?@nH?&pbg%r0@=K%>=O>&>61IYZIvSpa4Q%R2>0YYO&qeud zOc=kWxECxOPl0Dx;4!L!Xz)6E*!yFuSW&~a_1kR82A7CbT(Cb*~>;WIK9LH?D zITD7hV}7Gk3-8+Gfa{ryMxwcxJXjXdxD;9&Q*3{a#k%sxlSUWOVkddLVci7p7Mo*I z8YcPE;VNPmMq9GWVdW2~M+`n}qhu?RCvb8;Zvas7Xs;USsnl25N($Q-UZ=;DI<#Efqy(V8VS^kJ( zzk&60KnyMsc9N$no4%sy3Eo=sjYL%*0iiYDq)dV;)j^|RytQcqH|M0X3~>UkD|cF( ze#4|A$_H5C?idNgi;i*_(=K&YK$sg{HTcN*;Ov#*+nC{VvOrKZ(t72W{TK*^X_hr} z?1JQ)W~n0xA33S4MKy!k)sjJ4LCPkiz;o=}`Qx5Sdh9B&vo9i1pAo``DbJ6!Jo2G< z1~AhsnM#V&wEh(+%rHb(Ad7~hBgSphOCj?ShspW`9SEt`SYy}XDQ)P&Uk1tj#BLBT zZI3pr(%`R2_PBt_!617a2Z8M2pO|cq$4PiJ?F}r;GL20k;h9%@XJEi2ol>$+pjBf=dudXqjsjQ{ z(7djV#v6m5Yf#s{uTx2BkJWmNu=dxHNjjq4p|!QT#GF|_&rAcnk- zbZk@58i=+9(n%l6!7tPrrAr>c=d`v-vc^Nu(Z&$~KkF`>iLKfHB zbT3R<6q;X^5JX93A*{_)sfS_lY7E!HFf6Ci&)#GGrwFFb(R5;{e1#Fy&a#s;XOKa0(U~&ijSni^~DDV7$Jn9i}#84s>q1wX=duZ)13i&bao>Y!u zpMw_br_f=8mSIJ4RYSY}Tik(y3JZf%PoPty($115r0+(``V|iN8dfi@FL(o0?^B zOUQ3_OtVxJVu{v#7nO&246nKsuiU=q2+WvA}OBT|SW;-nU z4PE4ckEAQVfe`ROcE9F7A)-_3FM~FC@QpqV3i=^(@~}XO*+`5AK~LHbzQlf>D8H82 z&qI{OxIfh~TYhD>{Dxb8M|l=eU0DaAgJbTQX-987Dch7%*ctN~h=(|Jh5T@e5*wv; z5)<~z&BGX6Md` zNB-O+e+F`zvX;o9N76*oG@3XaRioi@m1<*ZQj|pWqFFD3YMk{BE*G1kp@$cG<#Rj} z6XkqN!<6wzaz-E(!m6C_aEGu{I$eOjH{8~h&zgjv(@dwTdC&hO(`JkVT71x!PpE<`yHq`$?gi?K_*fKc0 z$78mkDax4?7=wlj>a4MI)_#w!$EtJGB8b6=P=RZ5Tgz8 zbDS8u*U;1>jpKM?ZQmt^%m!;af}9Al|Af3ZbD$H0fjVBI@1`X3T#5Wc`K|3^-PE=@ z26yJbcb4ny$?SLMMx;^k4LKJ)?372|qcm$r71k$r!To7VPV?jV?lLXJ`fRA*)D)32 zF=G)!i%mGf!U4r$<$kCHvx!e=Lh8xvFM z;h`5xS#^9Q3Qb(&^3A7~t1Ehx`-Q5nvEQKww|oF1Wq#nn;5PxA#;_@T72O~cVUULZ z_YkU-gV)4o0Blb>vni5StHT8ep}KYFkoD=Wz^1KF7x4<8Pggh;7s(eA!CE_c!C?yo zUP;^YJouf!kcyS`&TX`#{f|JP)RA45x%qbVC`|4zTaCBoeg4ue%iS7nXEy?`(riS% z>SU_v7vOXr@4JHi3wugftmj!bUx}{RI4w&$;Vt_NCM!bd=%re|zK&~ICT;~?ZgF2Um%DQ>a0j~?E5&Mt|K=SE2Ru;*h}i)Cj-LzlQ=59{YP3eWRxkgeco zf&5L>ueT3+Z~8qV4>wXQdnNNkbO%rx7e|R(Q1S4-;WTcDa=*2GB-Tv^F;r`4{K_sJ zZ~SV6|H;13MbouMTy`j1m3M&T#WvWjEUf>h(I26z#QwUrG~q=G?=SYN>l2)ZA~gE# z=wLMN4jB~TC>iL{9s%dMu&BHX3NzkihZZ=X?uV{lLO{jz%P6NfZ#wrF1Qw-u1VZTZcgJ9$2HECjCcp@d`3vFjl z)d|HTF*r_a?pZtjlxV$S*D34eW`{y^PaMu-3WHFBmP4i8flmzLn~FH1oA@F~#fNyI z=p^2Rs`*U}F2G(^&)S>0a9}Ao3Ldj#B4v4C7o|+0l>I0Ur@;^G(&Oeu>+9Qz_4;5r z_9ElHcxK#*2o4i-hu38^+%5*8tlYwsy7A;c4U>V}fZMD;rS+^{4@YmbPsg1RHIC~_ zn(M@wC+&V>UU@{B{2_)`K9oh9U7`v4=~8#|MA@Vcr`(xPslcKFGZ;WLshCj(1_ExJOj7wNi!g#|dZ+f^ zX!KIsgL5GBaIYK@Z-ncR+h7>J5uTIVK`v7dm#KlvSdv|)C^u3Mf4Mn99^xHLB3AJ71Zt(Lnnx}KKbmhKJt4ay2Mn=eje z1Ruuv`zHt*rfKNbcVn|wR!lH@@Jg6oj_ffTf6Oas%xHq+aY>>|ozm0xcRF0o1?vwb zM>F9$nl)8<`YC9|<$ya%MRLEXFeO-%n)^!Kwd}%)sKrIc^@TH}6CFoQp?S6mm@6+x zm3tIAMaJTPue>U?Z?9%dxgizFUn&%eSvMwi+o$i}FS5UL5qU_IGj&&ALKMVJnyRxL zV<%u{%W^nXIbJ0>Ue)b8M4oGh%JZAJX4Dt9m;4r=6v0BFdQAD~@Q92ipI2rhkg}yF zir6k;Q^_AG|BOLh3>MI3pd~4L%(m~a5tWZ2g3h7TD@uHm=1XNX?c~cJ(H@fhl2P(I7~opXPI+!h+->yHi0#Vd zVQURdr1d6?b)Fh4|J5y@R!(5?jUk5Si|_Yu87$b2Jfe7s}(xH>lWr(qRkb* z<$#IK2>IRjV_t~EXc-H@A}j#q*XH(3K)i&v(2{XPhK>FQZ^s5drr>>_ChZRd??qS|z?5;AlVY-<*+1BT^)LQ^EIs-V)R|b% zvAtCjtM`MrUvS@4wt*9(NH+%Sk@ewpIZAs)-)di!P7`#0`*t!1n8bebrR>i~9T&C# z10-;~eB|#Xc@^4UMmHv-k$Yx%f-6!n9Kscfgx3*3~1)j{$iVUyh zu1c-H!JT_d(~-wo_!;&sJo3j1?Vq6}|3RK)_65~>Hhh!jJyE*Rbl4|7Ni81q-J)yb3a^jD<-BU@>rM=z4qfYXk!T! zc2e1cO)gm4zYj{#S30PI;tXd&29JCKuKs)E@fcR~D5?7-8Th}n?^HgSxTt+|p^11D zaxa)IcTp#KJ$}uC*V#k@K5Ry$O6Lir=~G8>y7L>mJdx|8xN zrm1`erkzk^rk!QJkSl z(nYQ2vr;OOw^H(rl#84}BL;~$RwbtE#5F`TF!36M7C+s8Tn-v9LKFqo0O39m683N} zbuWufK&0UTB(Cqdm`urEit;<6yx%K#pd;93V_Jfp2yAY7af*V20Oj9N69=tf2a{CI zI!A^SvCFbyDZCtyG7lWV9EA=TL4F8iz8ol9R^b(tTAf1kSc=EUk1=owvXQKv&9Sf@ zt2k@ZTV_F+HvKiHT?l6~VHXo3M4-Ex)}}u);ZH;VvS4$b{ic za1!Ap6V75vI&Hdx2Q^+R>jy4!VBk7txFk83;zeF6*FcH{~yL?FlGzy zWo#;ASA-8THkq+2!)v*ebjC)9Kj$<)2a1gipJnVDtgr*IapB>`RNo24(!*OhUoT@< zg(q=Z4`bJaZ)R*aW8=eljI}d%ZFml2&oMS3T+Y}p8M`k05Mvt|yFM&4_9$Z$!%s0* z%UE4_8)M5ETNr+wv3ZO=5PqMrnT-87Jiu5EV~fHg?xQx`z}VvO^^DQ?=K`@M;T*=& z7+V^?moeH_4#bv)D;Yb55EO`&gf}quDPyJKUo-X&W6Q%YGq#tpvhbUX(L^K=D-R!G z?0Lp~;nR%$D`OSmlpm2~ZH%o5k7ev}##V+i8Iu^R4ByFE1!F%6&tYsKW2?d?jLl-K zDqPK29%HM+k1>|TSVs6~jM0gIAm#`^%h(l+)rMbW3|CQ*_F%Y^v9kydf!Ghj2N_cs zTM$+ldylb)!e26WfH5gNYA&^C2V*nB5%!mDj71}Bsc4PR@^foULbA`L;ZB`(bAO48mT!EM; z+(&P>2Vw=`uj%ckKx}4s1SFCs24Z6PT6#+lX9EOcbGF|FC|W(;+PIJP@}T+Lx8|er zTS^W#1!*+>fimn3nv>FG?Z8dA7nniImcjE+I{Q3K;}iIZRGJa=V;O~w-XkI%4tBrBqdSh*-&Ca6 z)yd;j$Rq8eJ<-RJnsk>VKEFBg62|42QZ_hQn=gLBQ%0UJ>$k^o&WAhkhjAR8ewufO z9WveOA|bv#Wu)^#o?nmz0;=FS(zh8qX?(*y9@>A$0_1Z#zqdhE$_EE{a>e?RM)C%? z9m~=-x^8}*I@dp}{1r@mDakH()Ab+^2DSM7QJwF{x2tm8@_Ednuq(m4k!Xg2HjC*9 z-}=It3VchzC@4!us3csIQm=bqO7u${_(3wv+`}x{DO5^U##JpoW-6zV7+2^qJmz$^ z;c7Bg7eUKGOy03*tabMAY1mG>@}qQ7qv$@6G!2{V9TbLvy&~1o9fr~BHH0vBMui=j z_#+>NHn2iQ#=DRa#~WBJVW(Va0~SQqvC`#%fl_rI=kHaaULQi4pe)eq>$12Y54yPE zZ|Q5NbuuCDtkejy(6?2cqLJNu$?jM*ouLUh6eu|cpghtnL^y^$xG!(RUMOa8 z@L34(!V>=RZxoXMd;T#28590d3+y}mgX?4e zxI?e6%VLK-lrYFY3io}7f2ixTi@C?4TkW*_0}p|F^nn)cj(irSE7 zqcrMRl=cTLO+9dodjk1Ka!-XL{8@7j+D_6O0XBheVg14m@Hez3$t#p;Xv=py1p8kR z;!7$FN^ZFgR}T7KRs95{9d?LH^esgHliFYA;^x%XJ0Kt0qL9Ai!;J@0_^Rk4c^7U{ z+zOh?%71szonnx0(#W{8&UZyOT!^6%NN#@AO}B*2eb|OYJi`ftS?=x_uw?GqaE@3W zornv~X8p=iG>qa@mqbJvx0eF5AKzBu%cANzfWDsoFXQ3gp|NBwBOcCyLWz_d5BW4B zDIVT}N-rG`sed7qAdV!qA2KKoBjTlAv|pu?8!Fx|?pIjjpHfab zHqcN9*GG)S5K+o!qM3+hB2I&(QWg^}M6?ibG6{MW6NeFzg{OqeAd3Gvy5L9qMX0VD z+xfKX%kv!QZ!Q@23>Tz(P}iP9gCNb2Pwgo*3W1|0=?*beXzI&M%tr#}jC)+*nGiT< z+T$_`(wM+e^B$K8w+RvW&4F`~#>R;jSLTc<`6z-aVS*8aTQq_* z*0&?k0B5A}ZbABS<70Fce1Sn)(1@FBcr!|~8y_>_tO!x=yXrmsz7FX*X z6&)v1T&)cTRPPe#MJ1@GAl7#39pmUCRdi8s%7os;TFfs#P4BCsD0~vtk2P!dC?L#~F;Lhk<%x3u*&sdi>8Iu`*^#kbp$iS(`Ib1x7>GgFJ?FWvWx z@*eeDQRo>oZ&SZzdLzaVd?AwVRN)B!HO`H3#=XZp9J^84)a~yD&a=33kb(I&2B4e* z16Cj1?$&uY=i+lT^Ue4YFRn$O$4$$}Q3T@q_{M2>;=tB_g*&jv(D<<7PH(6TA&}O9 zG-uDD;r$JScJ*tcIrL4+RQevqc(easJhDPBxX$3;EaJ9-jhG+DTmXXRhdj68meFyK zwLn2T5%)!~CtX5P^-v(6>H8a{@GY$vK{_3XuWwBqY4 zc>m?@R`WPMDG!`W^`Gc_%8RkdUJ$B4%vfb~zK{L3#z%xZtxZp%Ky2n!7Rkr8CY|)+ zYg3qlq&k!@C^6!e_ju`+kT;m>P?y8d-}sRE%D_PCqxBxSzbI5?fsh_YPN36RV8D80 z7mZ9}$59+l+CU!jTH zDdwGEKaKA>;5yZAL-fbI0>gYotr9KB@;~8)cyf}^6WAbeiTzjcwe8G9Xw~>AT>_$; zS$z2bUuAL|c1M2#+Mpg(B!A`X!51I({Za(;?mTP5%^ja$yoyk?#Fq%I?N)Rjj7=SR zBi4L~D39JT44nJ=4u;(1|CftpyF_`IJmAUP3r{A047vWJubuWEFN_f7zvEhyn?uW* ziQVAu$ox~$ z5D_ywaIzk9XN&Tit;789Bd;DOX#Ubo^Or;DMYKS`;%MmitEqEoSAI??ud*Lt1R70N zw!uOUS;3VsQ)5n+gnoXpsS@3=!3FsB@eAE*DpPWLRSLo3qbFu<-_q5j`_ zLu-lGE60@CYVDoU&*Q8{`A|{FJRH^gH;5{yGFfHA-Mm#WXq?rAYb04F!y!X=biQV2 zOluG#o%;exHf9d2-yg8vLuQ#3A4;78b-^o#Cs@{eEXrxB5{I5Yvnu&p>0)R~emZvN zL(}sJ#8u0et5mh)o~t+Wyj#A2HJI3O-h=}+CHOJ~#>v2V`uejA`RGga9>lxY=)-h5 zO3dx6J4#B%p)%dV!esGc7eaOWV#7uKy$397w~wWi^2T2v3+;+So!Vo-CSr|Wve#7DSNm4i)U6ZBtLrOk@3dExN~KkI z+WAMS!0WFrU0&t0OEvb2%Ib1^QL(+Wyu8j=UvICdsk3W^xi-7hx2Y~(oN44ifM(13 zqrI;vE1R<1zhX*5P2H-}x*9)zr3WWL{J+k5Nk~Otgy7%2ngZyVGdJIzFBTLP3pe|u zvYR1dP1Tw#{8~_jKtJhI@2gwmgTRS*Y@rN(SgL<|XR+-v*YwY+Hp_)3OvRcB6 zzgF^<+w0fWOTN|iGW=kWP*DlBl-Ky`?bS7s9Y01?FA0)wtz=*BuV05;wSMVlC>TI1 zh%=N{(eDtgQ~B!!`jMe>JJ{&wh3fd%itLru_S(9d6{KSnxVpBcuC#6)%u-q9uk#Hq zxS_^hRc>F7UoToEEU&9s7nkH~SzS6v73IGAvbxGz6wZS1?<=9ivXzx+lUAg! zURYjQuDcv6lpqtg7fqoy2wGEE>1A~__4QLU3VzmYm6jpVh|20UrB#(EP?J=MTeOGL3_dt}73x;&lcaU3wW&qRD_7|Kro6I#mA$^U6jJ!B>wUge+*1yfjlbqQ3;>eA|U&{FlPdexxh0@M}jN~>4kr>0c58BB}&hwehjexeGh{X!NbkSeQH zXVN=so$oe?!m|X9#g?plB zXg|(nr<`ofL`uT3sh|WsUVcUC>Po0+aH=l%cP8qZU}w~G3>LTACsA}kM{TGUbi`kc zPFS{*+oRLa-4Z`8MowP3Ty5DPzb78eEX(~B6$mJ*{dGw+X6_r3J%Oo~vDdGJnOT&$ z6QD2o>U`DcKk&uX%WJAC%h)l{b!uu=x1*4iu-D2O^erxf-;&!B_j6VzLI)f-UJ;a3 zS1+*7KIpHJN)dv}e7wQ{atFK#)u||(YWi_i;`>QL}pNi8s zR{N`@%9S;>_EL!=FgdutdQ~-iNMoStC7&Lb5VNS?(&&{G$JO9mRtm+VU8Ut5rS*6f zA2_rQL7_*D|Js7sPQW0xF; zFUl_%t}#uc-{xG7!foxbSPtH6Ux>vP0@Bxd8v*-YjK!V+V>r7H}J2 zE1+vnEVd1>4R9}DFZS#dz<%t#r{Iii8_s>Q0k`6mjDDG{8?X_uxEu8n9dJ8fKj0z2 z+BcyCZ1A@MrUN$O(t!&w`|Vh)gy?{40s8^l088FMy8*WWMgWDs#$vrh2c&J*2w*y3 zFJLyH9T%%az+%7>z^#C50khwQJb)3vZIu2V+5@-^Pyy@*Ou@9q^?od72iyke0gU?dPyRU@zc8!0aQCA8;Gs7D~q#z_tUHM3En`8*l)y?I`q+iuU#)KVUat zF<>ts{i2)e7~}wq06qt3KMwf;w*vM8mf+jK1C$PEyA0_k;TM3tfFfW?KlBM00bC2% z4cJEMfX@N;14aM^e9P|;U^ZYsUkPUk`NDH-JwmeCBP zAM~y2?*NsD^oJ>(?SU3-G_n5jNq^Y^3+aWfiuZ%>dg4Pl0Z2sjR6u*Wi|wk@Nlu*X z3MHV+RKF@G^rFc~5~E~KS~1H><w1?Eq59bmm!`SM1<4yhqGu{TqsfDQ;1W&@YOiYeg0zf{ z7PPlzSU!1#H?57`jrHfnYrn%K{E!OL9%@fH==MqQE23$BNb;@+eJkjNM29}uk6XxI z0W+mPMdcyAh|(`&@0XG8nymRB+q;PS0W1@+w3w+UW>fv2f-eF-DpR*B>Ej#FdqMvk zdJ$%k8WyG1ZZ>YTP!}a$Jd}ry1-mm{!f%N%i;BK4En8J9x7&mC#v5G1JWAIds+aDX z^@4sM(USU~1iI@+mr$+o5+MGKpl<`6+pDEf{m+0d+@$G={k2GS3Xmy%H`0rd{s7+N zdJIq;Qp^36%0>E6`Mv?&HpMmQ_ee>O(Qt-r(C?t~w1?<7fnE#xM4bpobPwoTL7zkP zS!#bGx$qM?LO0TY$?B&Sz-G%hm)cok*#cA0zLI9`q14y^sdhz@Yq#r|iG18kTKlc|N zuQ)!U9ULF2oY8Rp-b<7-73ouvZpW6=L@hpSCVgxoeT2-3_~1#)p|GZPBr3NG@5Q&d zgj?{g_QM~g+36h*>1`v@+mJq;2uc0r8PK~yw+*4c40NqSoDsE z@-IeuBhoQv7la?DxhP~%R3?9<6L=`JBm1mwqfKoVezp{74Y^&|Z#rO(=EZn4bX zWDJ=Q?*qdq|I0|e{c8JW_nklu#$OX*`H(rq&|yK(=x z2mYOi7tbTT7U^qHmi~}DyFu@t;SyffiGW1^0Q7D7T3po9h<=*t@o4>7qmz88m@C(U z-cB_5hd!^OIThu*3F+AdE}@>%wTI{)(6@ok@i&RS7DOrUbfS~(4q*+WdJ1u=^PQ=H-Jr`vn6=s1GOU6E(xCYcCDDW9 z3Vu}V+qh0wTMxTx1icURr?{AMnMPNBe}imab+0{|@wj4`paY6Gph0l%>JDG&o0tOEp-n z!ACW?NrV5Y!9QqlhX!BQ;71xfp}`9pOdF}zJ3)h48oWz`b2PYAgG1%MB%U%jrDR3P zV8Rg0E+wVg6PrmizS6VxzsT=;vV{5g4~(q)m!98@1nLt+r<@3d!le9J3KtL;;>Zq2%7iZjcZslI~u`{eJ{^1VBJ-wnQx z4&O(`??;302g&5gL00`r9A-+T%Y`hyB2p`4;S|)D<(^SAMJin(WUZ+7XRR!)Unyjj zudBw{t_r0(H3dhKbU$MdvJ7c;zN%8npuN>rNmM@mrK>EuTq0!Q7EUG7YRYjdge`Bh91Zo~`eK+mtQ zvof@W6Mbit9-5O<+x7hVdgoTqh*i(8uiLh075)`z$+7!PwET9;jAy9)Dpe2`;DvOl=hxSHd$s(R(x2Y`(jocvb>o1R zUtedE{Im`js=rmBkxn#rL0>obYm9n5VBtr%yN*}jB{_e}2p1=%XbaPlAqv;?>+AIg zhvcsvsphZ6-UvNwXQ)vBtLM}42D~KKudnkJuga08Gip$;Unf6;7s{{eUzqJulV+=+ zSXY>e#`hUCRA|Oaa(?~a;ne?q&hh#NfRDqFYW2nA{G)H)5NPha4uIOp~Z|46Uc$4d=f98swEn5De^$o?hftP$w zmtWr}*sA5Rm{Zr4cx9dfuCD-q&C?R(Idw&eRr7u0d4(S`t$@%qt8d1w1QHzQH z)${4FYe;_kiW26vuTZmms)G1md;Cp(c@2Qd(%WxeS;7hCl?(*?6cy@!?fQ!bdjK^R f4NB4T=jnoKsY7{_+n!v2t5(I{PbT7hX#W2TE7c&$ literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/dnsip.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/dnsip.c new file mode 100644 index 0000000..60c5d3d --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/dnsip.c @@ -0,0 +1,40 @@ +#include "buffer.h" +#include "exit.h" +#include "strerr.h" +#include "ip4.h" +#include "dns.h" + +#define FATAL "dnsip: fatal: " + +static char seed[128]; + +static stralloc fqdn; +static stralloc out; +char str[IP4_FMT]; + +int main(int argc,char **argv) +{ + int i; + + dns_random_init(seed); + + if (*argv) ++argv; + + while (*argv) { + if (!stralloc_copys(&fqdn,*argv)) + strerr_die2x(111,FATAL,"out of memory"); + if (dns_ip4(&out,&fqdn) == -1) + strerr_die4sys(111,FATAL,"unable to find IP address for ",*argv,": "); + + for (i = 0;i + 4 <= out.len;i += 4) { + buffer_put(buffer_1,str,ip4_fmt(str,out.s + i)); + buffer_puts(buffer_1," "); + } + buffer_puts(buffer_1,"\n"); + + ++argv; + } + + buffer_flush(buffer_1); + _exit(0); +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/dnsip.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/dnsip.o new file mode 100644 index 0000000000000000000000000000000000000000..bdb702d2313e9e31b239238173d27cff142c841d GIT binary patch literal 3160 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 Ee?(yZZvX%Q literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/dnsip6.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/dnsip6.c new file mode 100644 index 0000000..5b65823 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/dnsip6.c @@ -0,0 +1,40 @@ +#include "buffer.h" +#include "exit.h" +#include "strerr.h" +#include "ip6.h" +#include "dns.h" + +#define FATAL "dnsip: fatal: " + +static char seed[128]; + +static stralloc fqdn; +static stralloc out; +char str[IP6_FMT]; + +main(int argc,char **argv) +{ + int i; + + dns_random_init(seed); + + if (*argv) ++argv; + + while (*argv) { + if (!stralloc_copys(&fqdn,*argv)) + strerr_die2x(111,FATAL,"out of memory"); + if (dns_ip6(&out,&fqdn) == -1) + strerr_die4sys(111,FATAL,"unable to find IPv6 address for ",*argv,": "); + + for (i = 0;i + 16 <= out.len;i += 16) { + buffer_put(buffer_1,str,ip6_fmt(str,out.s + i)); + buffer_puts(buffer_1," "); + } + buffer_puts(buffer_1,"\n"); + + ++argv; + } + + buffer_flush(buffer_1); + _exit(0); +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/dnsip6.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/dnsip6.o new file mode 100644 index 0000000000000000000000000000000000000000..2905f6a0fef629fa2eab3d5a3bea6f9c092571f4 GIT binary patch literal 3176 zcmbtWU1%It6h51ccC|H|*1w2KMkx}(3~tp>;}2VtG$XVcv{eLgne5J(rMo-p%xp~x z(!wS}h?PYJ@kI*02!iOFf9Rq}+ZP{v6kmMv??EdFqI5mqoqMv^$?lVf+?;d1^PTVB znYnXkPcIxfJd(+fScV>^ekLeUccdQ|Ram4k+D*s5K=P!s`G?c~b>c@PPWu7MuYZPU zE6O=%Pvo49KlAJFG2nL;UC}nW`Stf1`~90&UU9nyzY2`|F%;Xc3mW@pP}( z(+pK8^a@=S_??Bq#f3t*aPbr9BufuCa?a21&jE7IkM4(8^q(vi^7E7P0|+eSY#pUT zAAy}xOPc?_-0M-$imkx6>Rvqv*QnBns?Ax;cVo9UYZ3ohbTtI1)o_<2w-D}@tADAxKg*%gw$d1@YwAI?MbwJ;*6~yp@t4x^<82a!{{(4Hjqwv1cznc6>UD-SP=6_J5ki{kYsK zQ#wVRt9xP8uoF$YnUhfy(DBk$I>;t|4?E1GHVONQ1g1MQu4x)2ItTIqOV4!|bD%k_ z|6EGLO63L4G1Y+-F7vC+Y}8~~;)`4x)PF$}ZZmoj%JobCG2L$*FRJ4=O*p8s{y*s# zi+;BFz&q#Oikbc3RV@%e<;kHfb1x;=vNs#6~&u|(8b1{8EN&61&UdGeU z&g_3t_lZl-g?!LdMZKY$x_AxqFw)nLZ8~WF4>a*DuA7#g->jK2c%$@t&%`9o?zjs{ zB|C5>Sl^&03|yV&BD?LgJKkner)0*^IiuNm_P`~V_Z#OV@Q&sQjx?)wk}eo7tIuKs zQel?lFz8pX|MnU8LC%?588_#Wj_D!zgG2Cn#`n^tp2Z$El{j+P57J*6fIt~)JxSyH75SJxV2hPE|r7k zTBOR=<_utBU-IiQEw_B%3rhtFnyjTU4kL;ES}R(ilDC?udSO_qR6Qsmj96Toyo>lM zo4XeK42Jp`kAL`=0SxCaO!#M1Ml_>6_~;e>oW|39JXe_Dog}5B+CvA=U38u`aIEun zou5kKuju@=_RzpoDZZ)yy@8uLKN$E89LsusHt-t_ z{4b5mygH@JDI9wUc9TAkv3{H>qCc(i-Qe&Ldqm@+kMjn$XyE2=p(6&4`ylf^rSbH< L7R1<~kDA!O02hQn literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/dnsip6q b/NONE-CKUBU/src/djbdns/djbdns-1.05/dnsip6q new file mode 100755 index 0000000000000000000000000000000000000000..8c890d168f171f9e9faca89734a677a7e2a01845 GIT binary patch literal 35352 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 z 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 xiaKb7poXwDLo|4`NAz84^(Ayv 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 P`*98XFp-Gx(DeTY;4+mU literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/dnsip6q.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/dnsip6q.c new file mode 100644 index 0000000..82ab04e --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/dnsip6q.c @@ -0,0 +1,43 @@ +#include "buffer.h" +#include "exit.h" +#include "strerr.h" +#include "ip6.h" +#include "dns.h" + +#define FATAL "dnsipq: fatal: " + +static char seed[128]; + +static stralloc in; +static stralloc fqdn; +static stralloc out; +char str[IP6_FMT]; + +int main(int argc,char **argv) +{ + int i; + + dns_random_init(seed); + + if (*argv) ++argv; + + while (*argv) { + if (!stralloc_copys(&in,*argv)) + strerr_die2x(111,FATAL,"out of memory"); + if (dns_ip6_qualify(&out,&fqdn,&in) == -1) + strerr_die4sys(111,FATAL,"unable to find IP6 address for ",*argv,": "); + + buffer_put(buffer_1,fqdn.s,fqdn.len); + buffer_puts(buffer_1," "); + for (i = 0;i + 16 <= out.len;i += 16) { + buffer_put(buffer_1,str,ip6_fmt(str,out.s + i)); + buffer_puts(buffer_1," "); + } + buffer_puts(buffer_1,"\n"); + + ++argv; + } + + buffer_flush(buffer_1); + _exit(0); +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/dnsip6q.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/dnsip6q.o new file mode 100644 index 0000000000000000000000000000000000000000..af7ec245609b4c5617a2ade36d1ab4663829fd5d GIT binary patch literal 3456 zcmbuBU1%It6vxkIqupxECbep;Vn?i+f*stdp+=OHB+V48mTDe+&~>sq<1XFZNoHnk zqJ;)FDTcLlAAAxY3Mz;%`rw0F&`^=k7b*H83Zid*6x0e*L0r%O&b{u<&F+(jY|c5q z^Kn1+&Ye9q{rI82REm_O=rQVeiV|Jz>(~>*oS;Fvo@PIV^OUpphts$`@*^Cl@d#yC zF2ia@8RyLLjI;V@cI8_JeoLf_wAJ>f1OxkJ(XSgi&66?1f1qWiFy<& z8Kfy}Q71q{_}Ld{b6=hx;;dh`XLnB#t$nlhnNzspq(z6$2u@PJcA?Wjq7FDSIrQ)~ z7%}=tk2#IcGja}f!qQgnZMWMpLj-c|+`2IQ)^zUTbZ$L&QCnre9i5G-JsGriHv0EK zi}as<`={OZ#k{v9a3iOAgbsd)Y@=IJe2I$@+$2FgwgTU(detCYqGBy7&o7Kyz8kxh zaf|rRqU%slueoy-&x!-fFV~9J;iF@gTP%iN6j^={TC`JkO}%uCQj0^W^uV@Eix0}} z%<+Mo#lbl^ICN-mq>(<|H#2xY`!kc1 z<1o=BWrbeFwPSBFCcDV&NvSIECVx=3B47JbL|84wH<179gGc}i_BKiNk9DlbCyX3ym zg`wn>xgbCmbF5)z=68oYReu7GCT2bSZbL1~1O18&Vmk);W3C^^wA=V3&+pqD*To!P zkLfn@`sw$r7a8;PmR(3H)7@vnwA(j~KH^r_hZS~u%hOE!hQr=>`Yg*TJkQ{|kI;>h zx8Sg-=N{(<`R4#x6o;J_Ck)nRNheqHX2@PzZL$`@9lS%^A9erS$y^^xmEig9#wU94 zqdoXDJ$SJPpJzTySK1b9$Y`P{X5DQ*CwuU<9{g+%{(29dyb{M2>;greSEO={{DoqT z_`OM0mpy)E=0mqu466BZtsE1-c-%@QDC7&l{8A*s<@vGvLfx&D{Uw^K`@R?EbIO?K zK9aE+p`4KKSO4RFr5=?i?=2?Xy)eud%N{aeMmz|MdRFnW?wm%VEP^bE!~UCpia_xF zLR9{;@QB8wMn3ji*R;BQF(J*m-O{8p9z z2U24`H}gmJKd*6po);uH`)p|W`g*_6xZdY0t&hImueE%Ay+3Fi>wQc5KWkj?|EuJf zC;Hzd{i{-Ay?XzFR1z@1mtl?H!YOKhc4-`Urs8`gSK}sK`S+v2@ved#*81GazUuR= pz&j%_Cbw%T5_ycAJ>xoFn`39{0r??xwHTP literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/dnsipq b/NONE-CKUBU/src/djbdns/djbdns-1.05/dnsipq new file mode 100755 index 0000000000000000000000000000000000000000..2959dc053bbee973fe40838158f68e349b07c275 GIT binary patch literal 34104 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 E1BOD{@Bjb+ literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/dnsipq.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/dnsipq.c new file mode 100644 index 0000000..8e34928 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/dnsipq.c @@ -0,0 +1,43 @@ +#include "buffer.h" +#include "exit.h" +#include "strerr.h" +#include "ip4.h" +#include "dns.h" + +#define FATAL "dnsipq: fatal: " + +static char seed[128]; + +static stralloc in; +static stralloc fqdn; +static stralloc out; +char str[IP4_FMT]; + +int main(int argc,char **argv) +{ + int i; + + dns_random_init(seed); + + if (*argv) ++argv; + + while (*argv) { + if (!stralloc_copys(&in,*argv)) + strerr_die2x(111,FATAL,"out of memory"); + if (dns_ip4_qualify(&out,&fqdn,&in) == -1) + strerr_die4sys(111,FATAL,"unable to find IP address for ",*argv,": "); + + buffer_put(buffer_1,fqdn.s,fqdn.len); + buffer_puts(buffer_1," "); + for (i = 0;i + 4 <= out.len;i += 4) { + buffer_put(buffer_1,str,ip4_fmt(str,out.s + i)); + buffer_puts(buffer_1," "); + } + buffer_puts(buffer_1,"\n"); + + ++argv; + } + + buffer_flush(buffer_1); + _exit(0); +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/dnsipq.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/dnsipq.o new file mode 100644 index 0000000000000000000000000000000000000000..67376dfb93f6ea066b1dfacda7479c2bc8c14850 GIT binary patch literal 3456 zcmbuBU1%It6vyvoqutt=P3l*yVn?jnf*rcGN{y%~Nt!8Gm1@8jU1xV^%+lSRWM}Mv`rw0F&`^=k7b*H83Zid*6x0e*L0r%O&bjXG&CZjDojv#b z&d2@OJNNGK$;S`&WimoZMm#FImZCyj>Fc(~WOGamiY;RLQy5P>D}OkxOCvwRa9R(G z{L&?~+ELCqbu{NJ|CwLOVfof&-GK(FPrn*Cxlq}X5}-deA&s$3f&%@B!A_6w*sRsI5pn? z&^72W`bhUVtk~V2DDABG z?|_!!KmGPkr{l|UZwR15PW!Mp@FAj&YDw}%N`~_)37WAL_*UJk2jPOKG@|P4+^FTd zv0EFp1br-V9TJ)iw^Z}2II#R`qhcL;%5p1}(2F9=4?;_b8@X!c^QmI0puY4i1jAvM2hc2KSIXH9kIS?VRvRRkva7v+uX}?k?DcT}e|2J6fp6 zZi#dpCVED-La*l9u{R$JyF%j?b}5R49R@HEPGzn(_mhbnZ>H#nZru}hIjGmY1{G)o zv1d;`F}*vA-SSZk_J4{+`IzptMx8OXvceWQkD*afl?y4T<;|89e;VJSUE{$BYxK4-QY z`D*?u{~6BLjwP9~lfnL!e1)H+hPfv2&0L>EsCCBrZ=y%_ulV!C)L4>?S~@h^htJNIR@!5=Z|gLtAD}!_YC=UG5gnj zdK+>5;`faQ8S!k-6$kG*5~96+VZ_T*UGG-5vm4%KArHrlR%em3@}$9)t={jg%vU*1 z@mrXmHaN_z++pm{R5m%9HIg*5YLPV$&XcX$`l$2ABCf`ug^N8Y{IL{{_oY{zXH$4N zh2!!Y7MDA!mbzD>l=xRt_{kLhdJ2Clh4YnYmqp}x6;W*nf3DIHbZv^dOBUUj#n5e3 zf_kyqsK$cs9k*5s%EfXpyAVltb#`BIuIbjQ{(>kqecua<1=X0PI?SjUAzdKeum8vW zS~HpvMQ=W-?uB8oQuPptW<;Gp)VqqyTHn>!hYfoJHbz(pg@Ehn+9Qy=f z#xF{mtOMTqJK0`ljd<)qRi~|SjPo6~-!=H#Y`@1E>n8uJvi$*T)W4Y?RsWpE^?99V zZq`}X;`RA{p>e&=S6Ur?zF%wc`h0)TIOcnX?VmNS*Z-9{#)Q>r*{IfMo5pe1D!z-k>X%$nY=h&jf*jK7+)B2p^BnUn#I_-jB{b^X!TgxU_5XUW XY8>mJ`aQuM^VR#cxE{t2pOSw8+yl7j literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/dnsmx b/NONE-CKUBU/src/djbdns/djbdns-1.05/dnsmx new file mode 100755 index 0000000000000000000000000000000000000000..8ae6717a0dd7bed52e53a565812abc722d137517 GIT binary patch literal 31456 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 G|NjDbmkj#= literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/dnsmx.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/dnsmx.c new file mode 100644 index 0000000..5d75d39 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/dnsmx.c @@ -0,0 +1,64 @@ +#include "buffer.h" +#include "exit.h" +#include "strerr.h" +#include "uint16.h" +#include "byte.h" +#include "str.h" +#include "fmt.h" +#include "dns.h" + +#define FATAL "dnsmx: fatal: " + +void nomem(void) +{ + strerr_die2x(111,FATAL,"out of memory"); +} + +static char seed[128]; + +static stralloc fqdn; +static char *q; +static stralloc out; +char strnum[FMT_ULONG]; + +int main(int argc,char **argv) +{ + int i; + int j; + uint16 pref; + + dns_random_init(seed); + + if (*argv) ++argv; + + while (*argv) { + if (!stralloc_copys(&fqdn,*argv)) nomem(); + if (dns_mx(&out,&fqdn) == -1) + strerr_die4sys(111,FATAL,"unable to find MX records for ",*argv,": "); + + if (!out.len) { + if (!dns_domain_fromdot(&q,*argv,str_len(*argv))) nomem(); + if (!stralloc_copys(&out,"0 ")) nomem(); + if (!dns_domain_todot_cat(&out,q)) nomem(); + if (!stralloc_cats(&out,"\n")) nomem(); + buffer_put(buffer_1,out.s,out.len); + } + else { + i = 0; + while (i + 2 < out.len) { + j = byte_chr(out.s + i + 2,out.len - i - 2,0); + uint16_unpack_big(out.s + i,&pref); + buffer_put(buffer_1,strnum,fmt_ulong(strnum,pref)); + buffer_puts(buffer_1," "); + buffer_put(buffer_1,out.s + i + 2,j); + buffer_puts(buffer_1,"\n"); + i += j + 3; + } + } + + ++argv; + } + + buffer_flush(buffer_1); + _exit(0); +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/dnsmx.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/dnsmx.o new file mode 100644 index 0000000000000000000000000000000000000000..a8fb8be23ef082e5d47cb0f0725ad514d9cfbb1c GIT binary patch literal 4960 zcmbtXZERCj7(QJGD>7R?LXDML+_92o87+W zea>^9^PJP$bMIbii#%55@dyTX|=h{LOp>v-A zKZTFe7JY=zw$}Jih0m7PAYZbJfzPWxO9lhggQ!IFj?;G9-rU)|t#fO5OeE!0>Tu+B)I*g>Z2rRbn)EBQhE<3!M*5tol9T`PK2_U4g#H$c^Ta zFIq;^_1^Hv4|Y%B<3dgCvlmdjCFLUfrxh{#3Z$KhvMh9;fwN57d!sH5m_9*1A; z#1#BS zu|h1}XbAdiFvKmw5TZ95>q?tO!7`GmY{Gc_86#)Ltz05+B&{6v-v%)X&)%nnr*DDB zTUp^7qdNllopz59>yTUh2GUx2q21`Ej~4%ec7Iii-)QmIHTxTy{p$xRhUXrfGg|(d z_fT28e;1e(?VC3@8g;E^S1Oh@)&?I8uBi_NL#v#o5W#$ZrV#6*T*x`OTeWg#Iu

    %a|eI8IYb%0)@ZmIf3Jpvi%_{qw)OFsC+GUJ` zrcW-kTgSEf399uy0i|KFLu_!8!2VazrRG=r{~Te;i=^7AM~dqHb?$DL@rO#8D#2Yy znEu_tfExb-3KshOrS=Z=SL8w)r1-6b`RUTvKaa3d^N-J`4vK%AH1(;^Kh>c%z$+Km zUXypD4Zd9VRTtqXdu+MHPa33lUst@@-y1;KjL1CZilpmn0 z6#r2de2WX->4M{TQ%b*w@P*>~q(K=`=OlsqxD1|OQ)@PG;a0u=k4xHpXll@n9+E5PV}a-h0wZaZ?=b?j?u2vZVbrwW<)Ymi1wzf z>~7K3n@pOyXh=1BXm*KFGq2jobZ@>}M9n^D(rDUr%#aiEMbBj`lduZ50SOf>0;2I4 zHyI;AxuiVVrNB9az%PRTdKcN~G>+dTqTWgN^C3X(zv)d6v038K;itn6#>d&J__)sy zioegUgcz0?&mVYD{5K@7^WW6)qq2TWX6WGTP&&sM4xh(l{gs9vk@e3E$2*+Txx#Sh zD84$MG4B$_uaHLw{NGNOib{!tkF!kaFJ?HNjS9!VaR^)pg~uHV6M?&nE{bAG49u`c+zhc3jkjL-e-VmSXE4=|kTzszvF zBdT@b-5i1a$NRa$k1%`%!{3uQd}7`)x)2{Q{#{fnopHv;x(vDypE4XeM*&itVLJT& z|CZt4AGFy*eCML`J>%n9rTkoCe7?_D8P5G&XF3Mc@nFL!kib{>e}#r01Bqf0!}<5J zl;Qk7*&uOsKR7BvY|?ObF70GG{9MXN9IsDzD-p{3H647%h+&5F|3Qij$G)j~4@(@0 z&-=c{hc@DbhAW+OE;>JHd`CryiyE$UJo1$d-Q3SIiR=4$mxe2y4K6xQX?*2pyM`;B UJuW(i90)&hDK@fR!<%INFBP`n761SM literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/dnsname b/NONE-CKUBU/src/djbdns/djbdns-1.05/dnsname new file mode 100755 index 0000000000000000000000000000000000000000..9d6495e915b6a7266cca9d1d3b8c38c5fbc3cbd8 GIT binary patch literal 31040 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 Zo;sR0we6_|ETfKz=WPun{*KQ7e*tF5Xwv`y literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/dnsname.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/dnsname.c new file mode 100644 index 0000000..ff9166d --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/dnsname.c @@ -0,0 +1,41 @@ +#include "buffer.h" +#include "exit.h" +#include "strerr.h" +#include "ip4.h" +#include "ip6.h" +#include "dns.h" + +#define FATAL "dnsname: fatal: " + +static char seed[128]; + +char ip[4]; +char ip6[16]; +static stralloc out; + +int main(int argc,char **argv) +{ + dns_random_init(seed); + + if (*argv) ++argv; + + while (*argv) { + if (ip6_scan(*argv,ip6)) { + if (dns_name6(&out,ip6) == -1) + strerr_die4sys(111,FATAL,"unable to find host name for ",*argv,": "); + } else { + if (!ip4_scan(*argv,ip)) + strerr_die3x(111,FATAL,"unable to parse IP address ",*argv); + if (dns_name4(&out,ip) == -1) + strerr_die4sys(111,FATAL,"unable to find host name for ",*argv,": "); + } + + buffer_put(buffer_1,out.s,out.len); + buffer_puts(buffer_1,"\n"); + + ++argv; + } + + buffer_flush(buffer_1); + _exit(0); +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/dnsname.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/dnsname.o new file mode 100644 index 0000000000000000000000000000000000000000..e06ae8dbdfc2451e5bac5126b2c74ee93899ed38 GIT binary patch literal 3016 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 256) ip.len = 256; + byte_zero(servers,256); + byte_copy(servers,ip.len,ip.s); + + if (!stralloc_copys(&out,"")) oops(); + uint16_unpack_big(type,&u16); + if (!stralloc_catulong0(&out,u16,0)) oops(); + if (!stralloc_cats(&out," ")) oops(); + if (!dns_domain_todot_cat(&out,q)) oops(); + if (!stralloc_cats(&out,":\n")) oops(); + + if (resolve(q,type,servers) == -1) { + if (!stralloc_cats(&out,error_str(errno))) oops(); + if (!stralloc_cats(&out,"\n")) oops(); + } + else { + if (!printpacket_cat(&out,tx.packet,tx.packetlen)) oops(); + } + + buffer_putflush(buffer_1,out.s,out.len); + _exit(0); +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/dnsq.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/dnsq.o new file mode 100644 index 0000000000000000000000000000000000000000..7dc0cd9b2359cedd0a62d353669b6a6c12f5e91c GIT binary patch literal 7848 zcmbuDe{7pa8OP6c*SSB4v$8>eLEdhrq=TBeW6_ksa9Ps4lcF(ozeQW`P5e5s=J<8| zzHXDEEu|AJq(+iQxXMeK@#h%%oxZj>B zBpw}@$tE7Rr;m;tnYH&964t=}Y$BbDclKiJKV{hAafr2R@5qi_`O@~^A$8)nnD1fy zn)l$#KGvI%t6(2noccfb^H5rxxPXXQC+C3z8k7WF91;#Y`nu`(0y+P<@M3 z`=I=Hyt)IF&6nR?CInjmoSU?Q`xmc146)z)2C_x?>{@l~I&9;ElUg{8Rm01kxd|`L z+=1Vzg~o+&ZIE7>Kqri8?++5|8>;y0&`q6g08D)zMraXU0&Ir^HS0TD>rcYi_KciH zW2Q98pf60kg<-H$MKvj8U}{lTjr%FPGk3~LCIvqR*}-}A!+e*_qjKP?p1*nt9^A%w zR~LKvGQ`T?+114zyvDel*BBSS#<+tYUfcYl*BJN8C4IdAy$96q4TGxqQxI2oAI6uA z*LaXWV$Z67f64qlMxIapXK`^h{d$&CR3V0)4YsQK4v2_%PT{=dW8R3I&jK?=`muUR zM)nHv@yFX6tG7cG4#rBQ=nNKIEAXt6Q}*2+OJs}wSdW!+0;d2yVTqnqVwIv5-x&rC zN~~a_!Q`WpuwIh4BiO6_+B)aDM*eq-}Hv`8HmbdWhv9{8_Wlu+^ zVWY)@abK4$A-b{dZL_dK{vbA>+>T$0qgMg@P`2Q1yQQstYg@;3^yy{&ZE5KD-*Zoo z)z#|`=AEMTwdC!|%^Oq6)P}GrMADxa4V*!!gK}7pP^;_~oMhmR2O^n;RT0TS-xtZU zhaHrIO>_57>OzgN?nowAhJ_NzA#ZflErL1s2Krd7)(%6u)`Wq_)#9{47awVT{wsmC8vla2 zQHQhvwQe{_i*M8|7w_rYu2e>stU_oIZJ7z?xAYF!FQ8q6XCadU`yT>W& z)h5-9fv?ht5D6e_AtNgC9RwZRhj5Lt;2={DMBwC| zOwrpNHY#~I>qz8ev(56nC-Pp&srZ`Bup0=^EBOKrR&KeR@h7e{vw2s@1E?5v@*6iaYy%M9j+nVAz*3SMz|Qxgj9RRVzr!)Jz^ zK$Oa0gdT3#AFSkZZaI?@s!^&0xkAMs5gB(J=9bC8S`@tuB<%!wuPC7F!QupEdb};w zz?}~Fekxt6fqXeZs5h!M{!Tv$ANWH_mMr6V)+Rp2IR3+e_$1@_P9XlQ;`+EhVERup z{Q<`DOhP`dDz5vy#`K?I`nQ?B@m3V#jK=W{faOA1$u|d{fvJ3`8n{0A?xK8fKfr?d z&^r(NJ&Nmk{M}=r{1;?Thz!$r0we!Prni(9t18p4gFfjGFn$Z;uQDIJ@3Zj1@*30Q znU;M1py}sO4CNHlC!kOIKO6La)%X;eKsm4RQi#PrnEw}nk^d#eF@Ms>aDky<#d(L~ zxX$ZQpvvc&{!75fKfyTq6qNopjR%US4F26rkH0nYzl-VdIkc2dnsFR=PVqkGlK@6O zk1)NZv{-Ft`VG)0{Rq=@|52vDjp_F=J?6O%K3FCh=RQ^D^JUP{xIbhZ_508S%8v~` zKVf=2bCJ)>Opp1{-(3e8=lT4K`S5&>FwXNi&V2ZD@)qM3j7#M-^T9oX@_d_d^vAst z%UO-D39+a%f1dxlOpkjq`G3H8lJP~x(dQ-Qze4@-f|rrMsQ7BezY2`}*D}6|@pX)+ z81G_yGvgZ-r~PdXu3@=@>G^&67SrSXrF+oNIA5OugU=48M;|JK8mE1}r1)wO@_l|U z^XL2g3z`r4|5W4T|BAu?4TJwF&4>K|q;c{;Yw&;1;J*?V5enWHzCLXlC;yuj*Vku* z;`m(g_1U8N;8<9;YMlHZH26CP{|U_}bQj`Djg$XAgZ~Q#|3jJ&`TttuLU>%vHV{clwq?=L@x+-=Z5#`OGo*r{>Kr=Yn0JWLq;pVNG3zRzo% z{9iKoA2RsA$$a>H&l&WW4f-2bv|i5*itFonpFv+V=&J_3r4|JJ)fOÐ_~G|51(8 N-{*7=A|Lwu{J$*7#i{@R literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/dnsqr b/NONE-CKUBU/src/djbdns/djbdns-1.05/dnsqr new file mode 100755 index 0000000000000000000000000000000000000000..4a8a4704471b819598d11d7a079d60fcd5be4cd9 GIT binary patch literal 37176 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 J3O*qGe*p0sk!%0} literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/dnsroots.global b/NONE-CKUBU/src/djbdns/djbdns-1.05/dnsroots.global new file mode 100644 index 0000000..3b567e1 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/dnsroots.global @@ -0,0 +1,13 @@ +198.41.0.4 +128.9.0.107 +192.33.4.12 +128.8.10.90 +192.203.230.10 +192.5.5.241 +192.112.36.4 +128.63.2.53 +192.36.148.17 +198.41.0.10 +193.0.14.129 +198.32.64.12 +202.12.27.33 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/dnstrace b/NONE-CKUBU/src/djbdns/djbdns-1.05/dnstrace new file mode 100755 index 0000000000000000000000000000000000000000..34fc7b118c4914bc744f11ff8fd7f323de9980a3 GIT binary patch literal 49264 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�LFyM# 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 F{|!8t0w@3g literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/dnstrace.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/dnstrace.c new file mode 100644 index 0000000..1d331bd --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/dnstrace.c @@ -0,0 +1,486 @@ +#include "uint16.h" +#include "uint32.h" +#include "fmt.h" +#include "str.h" +#include "byte.h" +#include "ip4.h" +#include "ip6.h" +#include "gen_alloc.h" +#include "gen_allocdefs.h" +#include "exit.h" +#include "buffer.h" +#include "stralloc.h" +#include "error.h" +#include "strerr.h" +#include "iopause.h" +#include "printrecord.h" +#include "alloc.h" +#include "parsetype.h" +#include "dd.h" +#include "dns.h" + +#define FATAL "dnstrace: fatal: " + +void nomem(void) +{ + strerr_die2x(111,FATAL,"out of memory"); +} +void usage(void) +{ + strerr_die1x(100,"dnstrace: usage: dnstrace type name rootip ..."); +} + +static stralloc querystr; +char ipstr[IP6_FMT]; +static stralloc tmp; + +void printdomain(const char *d) +{ + if (!stralloc_copys(&tmp,"")) nomem(); + if (!dns_domain_todot_cat(&tmp,d)) nomem(); + buffer_put(buffer_1,tmp.s,tmp.len); +} + +static struct dns_transmit tx; + +int resolve(char *q,char qtype[2],char ip[16]) +{ + struct taia start; + struct taia stamp; + struct taia deadline; + char servers[256]; + iopause_fd x[1]; + int r; + + taia_now(&start); + + byte_zero(servers,256); + byte_copy(servers,16,ip); + + if (dns_transmit_start(&tx,servers,0,q,qtype,"\0\0\0\0") == -1) return -1; + + for (;;) { + taia_now(&stamp); + taia_uint(&deadline,120); + taia_add(&deadline,&deadline,&stamp); + dns_transmit_io(&tx,x,&deadline); + iopause(x,1,&deadline,&stamp); + r = dns_transmit_get(&tx,x,&stamp); + if (r == -1) return -1; + if (r == 1) break; + } + + taia_now(&stamp); + taia_sub(&stamp,&stamp,&start); + taia_uint(&deadline,1); + if (taia_less(&deadline,&stamp)) { + buffer_put(buffer_1,querystr.s,querystr.len); + buffer_puts(buffer_1,"ALERT:took more than 1 second\n"); + } + + return 0; +} + +struct address { + char *owner; + char ip[16]; +} ; + +GEN_ALLOC_typedef(address_alloc,struct address,s,len,a) +GEN_ALLOC_readyplus(address_alloc,struct address,s,len,a,i,n,x,30,address_alloc_readyplus) +GEN_ALLOC_append(address_alloc,struct address,s,len,a,i,n,x,30,address_alloc_readyplus,address_alloc_append) + +static address_alloc address; + +struct ns { + char *owner; + char *ns; +} ; + +GEN_ALLOC_typedef(ns_alloc,struct ns,s,len,a) +GEN_ALLOC_readyplus(ns_alloc,struct ns,s,len,a,i,n,x,30,ns_alloc_readyplus) +GEN_ALLOC_append(ns_alloc,struct ns,s,len,a,i,n,x,30,ns_alloc_readyplus,ns_alloc_append) + +static ns_alloc ns; + +struct query { + char *owner; + char type[2]; +} ; + +GEN_ALLOC_typedef(query_alloc,struct query,s,len,a) +GEN_ALLOC_readyplus(query_alloc,struct query,s,len,a,i,n,x,30,query_alloc_readyplus) +GEN_ALLOC_append(query_alloc,struct query,s,len,a,i,n,x,30,query_alloc_readyplus,query_alloc_append) + +static query_alloc query; + +struct qt { + char *owner; + char type[2]; + char *control; + char ip[16]; +} ; + +GEN_ALLOC_typedef(qt_alloc,struct qt,s,len,a) +GEN_ALLOC_readyplus(qt_alloc,struct qt,s,len,a,i,n,x,30,qt_alloc_readyplus) +GEN_ALLOC_append(qt_alloc,struct qt,s,len,a,i,n,x,30,qt_alloc_readyplus,qt_alloc_append) + +static qt_alloc qt; + +void qt_add(const char *q,const char type[2],const char *control,const char ip[16]) +{ + struct qt x; + int i; + + if (!*q) return; /* don't ask the roots about our artificial . host */ + + for (i = 0;i < qt.len;++i) + if (dns_domain_equal(qt.s[i].owner,q)) + if (dns_domain_equal(qt.s[i].control,control)) + if (byte_equal(qt.s[i].type,2,type)) + if (byte_equal(qt.s[i].ip,16,ip)) + return; + + byte_zero(&x,sizeof x); + if (!dns_domain_copy(&x.owner,q)) nomem(); + if (!dns_domain_copy(&x.control,control)) nomem(); + byte_copy(x.type,2,type); + byte_copy(x.ip,16,ip); + if (!qt_alloc_append(&qt,&x)) nomem(); +} + +void query_add(const char *owner,const char type[2]) +{ + struct query x; + int i; + int j; + + for (i = 0;i < query.len;++i) + if (dns_domain_equal(query.s[i].owner,owner)) + if (byte_equal(query.s[i].type,2,type)) + return; + + byte_zero(&x,sizeof x); + if (!dns_domain_copy(&x.owner,owner)) nomem(); + byte_copy(x.type,2,type); + if (!query_alloc_append(&query,&x)) nomem(); + + for (i = 0;i < ns.len;++i) + if (dns_domain_suffix(owner,ns.s[i].owner)) + for (j = 0;j < address.len;++j) + if (dns_domain_equal(ns.s[i].ns,address.s[j].owner)) + qt_add(owner,type,ns.s[i].owner,address.s[j].ip); +} + +void ns_add(const char *owner,const char *server) +{ + struct ns x; + int i; + int j; + + buffer_put(buffer_1,querystr.s,querystr.len); + buffer_puts(buffer_1,"NS:"); + printdomain(owner); + buffer_puts(buffer_1,":"); + printdomain(server); + buffer_puts(buffer_1,"\n"); + + for (i = 0;i < ns.len;++i) + if (dns_domain_equal(ns.s[i].owner,owner)) + if (dns_domain_equal(ns.s[i].ns,server)) + return; + + query_add(server,DNS_T_A); + + byte_zero(&x,sizeof x); + if (!dns_domain_copy(&x.owner,owner)) nomem(); + if (!dns_domain_copy(&x.ns,server)) nomem(); + if (!ns_alloc_append(&ns,&x)) nomem(); + + for (i = 0;i < query.len;++i) + if (dns_domain_suffix(query.s[i].owner,owner)) + for (j = 0;j < address.len;++j) + if (dns_domain_equal(server,address.s[j].owner)) + qt_add(query.s[i].owner,query.s[i].type,owner,address.s[j].ip); +} + +void address_add(const char *owner,const char ip[16]) +{ + struct address x; + int i; + int j; + + buffer_put(buffer_1,querystr.s,querystr.len); + buffer_puts(buffer_1,"A:"); + printdomain(owner); + buffer_puts(buffer_1,":"); + if (ip6_isv4mapped(ip)) + buffer_put(buffer_1,ipstr,ip4_fmt(ipstr,ip+12)); + else + buffer_put(buffer_1,ipstr,ip6_fmt(ipstr,ip)); + buffer_puts(buffer_1,"\n"); + + for (i = 0;i < address.len;++i) + if (dns_domain_equal(address.s[i].owner,owner)) + if (byte_equal(address.s[i].ip,16,ip)) + return; + + byte_zero(&x,sizeof x); + if (!dns_domain_copy(&x.owner,owner)) nomem(); + byte_copy(x.ip,16,ip); + if (!address_alloc_append(&address,&x)) nomem(); + + for (i = 0;i < ns.len;++i) + if (dns_domain_equal(ns.s[i].ns,owner)) + for (j = 0;j < query.len;++j) + if (dns_domain_suffix(query.s[j].owner,ns.s[i].owner)) + qt_add(query.s[j].owner,query.s[j].type,ns.s[i].owner,ip); +} + +char seed[128]; + +static char *t1; +static char *t2; +static char *referral; +static char *cname; + +static int typematch(const char rtype[2],const char qtype[2]) +{ + return byte_equal(qtype,2,rtype) || byte_equal(qtype,2,DNS_T_ANY); +} + +void parsepacket(const char *buf,unsigned int len,const char *d,const char dtype[2],const char *control) +{ + char misc[20]; + char header[12]; + unsigned int pos; + uint16 numanswers; + unsigned int posanswers; + uint16 numauthority; + unsigned int posauthority; + uint16 numglue; + unsigned int posglue; + uint16 datalen; + unsigned int rcode; + int flagout; + int flagcname; + int flagreferral; + int flagsoa; + int j; + const char *x; + + pos = dns_packet_copy(buf,len,0,header,12); if (!pos) goto DIE; + pos = dns_packet_skipname(buf,len,pos); if (!pos) goto DIE; + pos += 4; + + uint16_unpack_big(header + 6,&numanswers); + uint16_unpack_big(header + 8,&numauthority); + uint16_unpack_big(header + 10,&numglue); + + rcode = header[3] & 15; + if (rcode && (rcode != 3)) { errno = error_proto; goto DIE; } /* impossible */ + + flagout = 0; + flagcname = 0; + flagreferral = 0; + flagsoa = 0; + posanswers = pos; + for (j = 0;j < numanswers;++j) { + pos = dns_packet_getname(buf,len,pos,&t1); if (!pos) goto DIE; + pos = dns_packet_copy(buf,len,pos,header,10); if (!pos) goto DIE; + if (dns_domain_equal(t1,d)) + if (byte_equal(header + 2,2,DNS_C_IN)) + if (typematch(header,dtype)) + flagout = 1; + else if (typematch(header,DNS_T_CNAME)) { + if (!dns_packet_getname(buf,len,pos,&cname)) goto DIE; + flagcname = 1; + } + uint16_unpack_big(header + 8,&datalen); + pos += datalen; + } + posauthority = pos; + for (j = 0;j < numauthority;++j) { + pos = dns_packet_getname(buf,len,pos,&t1); if (!pos) goto DIE; + pos = dns_packet_copy(buf,len,pos,header,10); if (!pos) goto DIE; + if (typematch(header,DNS_T_SOA)) + flagsoa = 1; + else if (typematch(header,DNS_T_NS)) { + flagreferral = 1; + if (!dns_domain_copy(&referral,t1)) goto DIE; + } + uint16_unpack_big(header + 8,&datalen); + pos += datalen; + } + posglue = pos; + + if (!flagcname && !rcode && !flagout && flagreferral && !flagsoa) + if (dns_domain_equal(referral,control) || !dns_domain_suffix(referral,control)) { + buffer_put(buffer_1,querystr.s,querystr.len); + buffer_puts(buffer_1,"ALERT:lame server; refers to "); + printdomain(referral); + buffer_puts(buffer_1,"\n"); + return; + } + + pos = posanswers; + for (j = 0;j < numanswers + numauthority + numglue;++j) { + pos = dns_packet_getname(buf,len,pos,&t1); if (!pos) goto DIE; + pos = dns_packet_copy(buf,len,pos,header,10); if (!pos) goto DIE; + uint16_unpack_big(header + 8,&datalen); + if (dns_domain_suffix(t1,control)) + if (byte_equal(header + 2,2,DNS_C_IN)) { + if (typematch(header,DNS_T_NS)) { + if (!dns_packet_getname(buf,len,pos,&t2)) goto DIE; + ns_add(t1,t2); + } + else if (typematch(header,DNS_T_A) && datalen == 4) { + if (!dns_packet_copy(buf,len,pos,misc+12,4)) goto DIE; + byte_copy(misc,12,V4mappedprefix); + address_add(t1,misc); + } + else if (typematch(header,DNS_T_AAAA) && datalen == 16) { + if (!dns_packet_copy(buf,len,pos,misc,16)) goto DIE; + address_add(t1,misc); + } + } + pos += datalen; + } + + + if (flagcname) { + query_add(cname,dtype); + buffer_put(buffer_1,querystr.s,querystr.len); + buffer_puts(buffer_1,"CNAME:"); + printdomain(cname); + buffer_puts(buffer_1,"\n"); + return; + } + if (rcode == 3) { + buffer_put(buffer_1,querystr.s,querystr.len); + buffer_puts(buffer_1,"NXDOMAIN\n"); + return; + } + if (flagout || flagsoa || !flagreferral) { + if (!flagout) { + buffer_put(buffer_1,querystr.s,querystr.len); + buffer_puts(buffer_1,"NODATA\n"); + return; + } + pos = posanswers; + for (j = 0;j < numanswers + numauthority + numglue;++j) { + pos = printrecord(&tmp,buf,len,pos,d,dtype); + if (!pos) goto DIE; + if (tmp.len) { + buffer_put(buffer_1,querystr.s,querystr.len); + buffer_puts(buffer_1,"answer:"); + buffer_put(buffer_1,tmp.s,tmp.len); /* includes \n */ + } + } + return; + } + + if (!dns_domain_suffix(d,referral)) goto DIE; + buffer_put(buffer_1,querystr.s,querystr.len); + buffer_puts(buffer_1,"see:"); + printdomain(referral); + buffer_puts(buffer_1,"\n"); + return; + + DIE: + x = error_str(errno); + buffer_put(buffer_1,querystr.s,querystr.len); + buffer_puts(buffer_1,"ALERT:unable to parse response packet; "); + buffer_puts(buffer_1,x); + buffer_puts(buffer_1,"\n"); +} + +int main(int argc,char **argv) +{ + static stralloc out; + static stralloc fqdn; + static stralloc udn; + static char *q; + char *control; + char type[2]; + char ip[64]; + int i; + uint16 u16; + + dns_random_init(seed); + + if (!stralloc_copys(&querystr,"0:.:.:start:")) nomem(); + + if (!address_alloc_readyplus(&address,1)) nomem(); + if (!query_alloc_readyplus(&query,1)) nomem(); + if (!ns_alloc_readyplus(&ns,1)) nomem(); + if (!qt_alloc_readyplus(&qt,1)) nomem(); + + if (!*argv) usage(); + if (!*++argv) usage(); + if (!parsetype(*argv,type)) usage(); + + if (!*++argv) usage(); + if (!dns_domain_fromdot(&q,*argv,str_len(*argv))) nomem(); + + query_add(q,type); + ns_add("",""); + + while (*++argv) { + if (!stralloc_copys(&udn,*argv)) nomem(); + if (dns_ip6_qualify(&out,&fqdn,&udn) == -1) nomem(); /* XXX */ + for (i = 0;i + 16 <= out.len;i += 16) + address_add("",out.s + i); + } + + for (i = 0;i < qt.len;++i) { + if (!dns_domain_copy(&q,qt.s[i].owner)) nomem(); + control = qt.s[i].control; + if (!dns_domain_suffix(q,control)) continue; + byte_copy(type,2,qt.s[i].type); + byte_copy(ip,16,qt.s[i].ip); + + if (!stralloc_copys(&querystr,"")) nomem(); + uint16_unpack_big(type,&u16); + if (!stralloc_catulong0(&querystr,u16,0)) nomem(); + if (!stralloc_cats(&querystr,":")) nomem(); + if (!dns_domain_todot_cat(&querystr,q)) nomem(); + if (!stralloc_cats(&querystr,":")) nomem(); + if (!dns_domain_todot_cat(&querystr,control)) nomem(); + if (!stralloc_cats(&querystr,":")) nomem(); + if (ip6_isv4mapped(ip)) { + if (!stralloc_catb(&querystr,ipstr,ip4_fmt(ipstr,ip+12))) nomem(); + } else + if (!stralloc_catb(&querystr,ipstr,ip6_fmt(ipstr,ip))) nomem(); + if (!stralloc_cats(&querystr,":")) nomem(); + + buffer_put(buffer_1,querystr.s,querystr.len); + buffer_puts(buffer_1,"tx\n"); + buffer_flush(buffer_1); + + if (resolve(q,type,ip) == -1) { + const char *x = error_str(errno); + buffer_put(buffer_1,querystr.s,querystr.len); + buffer_puts(buffer_1,"ALERT:query failed; "); + buffer_puts(buffer_1,x); + buffer_puts(buffer_1,"\n"); + } + else + parsepacket(tx.packet,tx.packetlen,q,type,control); + + if (dns_domain_equal(q,"\011localhost\0")) { + buffer_put(buffer_1,querystr.s,querystr.len); + buffer_puts(buffer_1,"ALERT:some caches do not handle localhost internally\n"); + address_add(q,"\177\0\0\1"); + } + if (dd(q,"",ip) == 4) { + buffer_put(buffer_1,querystr.s,querystr.len); + buffer_puts(buffer_1,"ALERT:some caches do not handle IP addresses internally\n"); + address_add(q,ip); + } + + buffer_flush(buffer_1); + } + + _exit(0); +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/dnstrace.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/dnstrace.o new file mode 100644 index 0000000000000000000000000000000000000000..a6940d8840fafc46b7ca7470b23bddaffb9cc76f GIT binary patch literal 27904 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 A6aWAK literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/dnstracesort b/NONE-CKUBU/src/djbdns/djbdns-1.05/dnstracesort new file mode 100755 index 0000000..27ec8e9 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/dnstracesort @@ -0,0 +1,53 @@ +#!/bin/sh +# WARNING: This file was auto-generated. Do not edit! +awk -F: ' + BEGIN { OFS=":" } + { + if ($5 == "tx") next + if ($5 == "A") { + print "glue",$6,$3,$4,"answer",$6" A "$7 + next + } + if ($5 == "NS") { + print "glue",$6,$3,$4,"answer",$6" NS "$7 + next + } + print + } +' | sort -t: +0 -2 +4 +3 -4 +2 -3 | uniq | awk -F: ' + { + type = $1 + q = $2 + c = $3 + ip = sprintf("%-16s",$4) + + if (q != lastq) { print ""; lastq = q } + + if ($5 == "ALERT") { + result = "A\bAL\bLE\bER\bRT\bT:\b: " $6 + } + else if ($5 == "answer") { + if (index($6,q" ") == 1) + $6 = substr($6,length(q) + 2) + result = $6 + } + else if ($5 == "see") { + result = "see " $6 + } + else if ($5 == "CNAME") { + result = "CNAME "$6 + } + else + result = $5 + + if (c != ".") { + q = substr(q,1,length(q) - length(c)) + for (i = 1;i <= length(c);++i) { + ci = substr(c,i,1) + q = q "_\b" ci + } + } + + print type,q,ip,result + } +' diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/dnstracesort.sh b/NONE-CKUBU/src/djbdns/djbdns-1.05/dnstracesort.sh new file mode 100644 index 0000000..e57359c --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/dnstracesort.sh @@ -0,0 +1,51 @@ +awk -F: ' + BEGIN { OFS=":" } + { + if ($5 == "tx") next + if ($5 == "A") { + print "glue",$6,$3,$4,"answer",$6" A "$7 + next + } + if ($5 == "NS") { + print "glue",$6,$3,$4,"answer",$6" NS "$7 + next + } + print + } +' | sort -t: +0 -2 +4 +3 -4 +2 -3 | uniq | awk -F: ' + { + type = $1 + q = $2 + c = $3 + ip = sprintf("%-16s",$4) + + if (q != lastq) { print ""; lastq = q } + + if ($5 == "ALERT") { + result = "A\bAL\bLE\bER\bRT\bT:\b: " $6 + } + else if ($5 == "answer") { + if (index($6,q" ") == 1) + $6 = substr($6,length(q) + 2) + result = $6 + } + else if ($5 == "see") { + result = "see " $6 + } + else if ($5 == "CNAME") { + result = "CNAME "$6 + } + else + result = $5 + + if (c != ".") { + q = substr(q,1,length(q) - length(c)) + for (i = 1;i <= length(c);++i) { + ci = substr(c,i,1) + q = q "_\b" ci + } + } + + print type,q,ip,result + } +' diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/dnstxt b/NONE-CKUBU/src/djbdns/djbdns-1.05/dnstxt new file mode 100755 index 0000000000000000000000000000000000000000..25743d04053cff782e2e1f51a641c0c87301dead GIT binary patch literal 29632 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 E2D_w|2><{9 literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/dnstxt.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/dnstxt.c new file mode 100644 index 0000000..0880b30 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/dnstxt.c @@ -0,0 +1,33 @@ +#include "buffer.h" +#include "exit.h" +#include "strerr.h" +#include "dns.h" + +#define FATAL "dnstxt: fatal: " + +static char seed[128]; + +static stralloc fqdn; +static stralloc out; + +int main(int argc,char **argv) +{ + dns_random_init(seed); + + if (*argv) ++argv; + + while (*argv) { + if (!stralloc_copys(&fqdn,*argv)) + strerr_die2x(111,FATAL,"out of memory"); + if (dns_txt(&out,&fqdn) == -1) + strerr_die4sys(111,FATAL,"unable to find TXT records for ",*argv,": "); + + buffer_put(buffer_1,out.s,out.len); + buffer_puts(buffer_1,"\n"); + + ++argv; + } + + buffer_flush(buffer_1); + _exit(0); +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/dnstxt.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/dnstxt.o new file mode 100644 index 0000000000000000000000000000000000000000..41ce5ba11249771bd350a2c18af299a0897085bb GIT binary patch literal 2872 zcmbuB&u<$=6vvfj?=!SDN%o7U#}{)N@bd&jUQpuKELr+ZSc?BU&Q)7q`iF&CM1y0xRM)5Ya!X)jdOHSaWUT4W6{(CTU?1f&V z<2z~O1nscptZ%M6vEPj1R^kLv?9d~UuW;c_D)eUx#e)Y*yZoS@V2%cv#e+Lhp80g* zRC#Wt{NkX<_Q~btCFi*nztQ$W=Oy=;dvu}VR-VsPA~)IYre1^lG|u`ht;K%Fb5p;c zlH20>lG{iUa^naF+&RtN<|3Pj@we(h>~(!|n^CvxhnygcQr|tfwy}_;Uh_Rn_J4}Q z@mTKtR-UTZYA=kj8AFHqIJZfQ!TedhB}AL@z8_?UI)Z5qPAt!I1IHGdvI&?YcC8oK z2RZHdGZO!emBX>@3fpi!YH=O^jK%e|bYJE1y!cDv;8^i`{W^YK;*DcLMO+bw#WC?3 zzrl*VCm3_4G7r7a*#86EbbZZFGt+a)BC_A#1kRf<$M@YFhLBNS(j4DI%WjHGpXaTVC316m}&08wXMHzoRi?Y;-@*xqI#2L!03wl5H=XpB4L;B z7QBCljeXGP%#+N`S~_ZB496Xp=YM<*KQ)GLjNz>@9G78U-3w#*XJfcrWp0xa-)~WH zt`!pBb=39RA;#*l7q+5qy&bkwW%Ip9jb0G=alN9Ivm79d)r9y`@j9KTS#L&Xx0UI~ zalO^{F#SnP|Q% z_OkTIgPc0gn!!=`OR@1>An*tO0tU+&^_y`#2c5?^IL;Q$I|euX&k4so@ijdy_Ic@1 z_b@k|XCPd!Ye(!$(!>8@ZrcAV;X1#V^tHvYr;zWmPOTT;pw9EFa2)HiqNDp=be;bx xvHvu +#include "env.h" +#include "scan.h" +#include "prot.h" +#include "strerr.h" + +void droproot(const char *fatal) +{ + char *x; + unsigned long id; + + x = env_get("ROOT"); + if (!x) + strerr_die2x(111,fatal,"$ROOT not set"); + if (chdir(x) == -1) + strerr_die4sys(111,fatal,"unable to chdir to ",x,": "); + if (chroot(".") == -1) + strerr_die4sys(111,fatal,"unable to chroot to ",x,": "); + + x = env_get("GID"); + if (!x) + strerr_die2x(111,fatal,"$GID not set"); + scan_ulong(x,&id); + if (prot_gid((int) id) == -1) + strerr_die2sys(111,fatal,"unable to setgid: "); + + x = env_get("UID"); + if (!x) + strerr_die2x(111,fatal,"$UID not set"); + scan_ulong(x,&id); + if (prot_uid((int) id) == -1) + strerr_die2sys(111,fatal,"unable to setuid: "); +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/droproot.h b/NONE-CKUBU/src/djbdns/djbdns-1.05/droproot.h new file mode 100644 index 0000000..b8a53a7 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/droproot.h @@ -0,0 +1,6 @@ +#ifndef DROPROOT_H +#define DROPROOT_H + +extern void droproot(const char *); + +#endif diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/droproot.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/droproot.o new file mode 100644 index 0000000000000000000000000000000000000000..3563c875b835e37ea20f62bc6ead702a0ce10391 GIT binary patch literal 3192 zcmbtWU1(ED6h3LHR;@|>CE!Xg7=O`=@drd$Ni?xnEEcO>gevhixwgS3DL1!bWzmPI zklhu0TiDlq+P8g_eb9o1+Sh&S!{S@9AcBbaVmF>M_e?UGP>?xT`b zdnK^yY$*ER84e0=6MEkQ$;fGp9DJOQ$1r@bwj}7k{v3~eEv`s$wI!KU4e@%d>YOop zJ$3Cxv>&JSHj`M$BxVx}|In15m+@iEr{g`;v*x?w)QWUUSQ0QO^;A%5iy{z(z7X5G z*oRx|_4>_de;QV+v%L6!y&mls`J0pea_;5-Fs5aZU*TU`C4Y34{2cO!hlZ{|oSsIh z>=_lugHr}fm+Y}g$MDKVZX#cB$pNzkb<4;mc;I{*;`nHUH)Bz3ypTt^5#r#ZGiO?G zXb;i0`3;2b4nycpUntzWuIC9JBHI2Rce*6G{?UF}Z#TCDGB>L}NF4>DjCk)sOZ_#>@H*AtvX7Zo`tC zzrTU_j?TS`u#OQks~6M{Z{u!8yc1Q%PjH-U^jy?$s~uuJ>->nnIe^MRM@nBmVV&|n zW#V;Trt#GCHwH9^c-`=>uEC-kZmWXN3U{0d&9BoA6TYUCJmUIol=^(Bw5V{SD$N0^ z*A``-@*ZzTT))Ei?nOs{Wq}9z|c~onu_;-{$_m+){1SbN7mIsvFf->U>~a>TKoyiiYpt zeuOWyuD_FUUEg3_>K|mCJqlmlmmf90oKHr>53$ZqjO+8sDf;SqXEYr;_hi2W==>g_ q^OvS0-z@V1{6&qQ@zcV`0RDO^B$}*S!SBL8#@p)5aHm${0DOgbG2tm?f*KCu9Aho2nwbKv;#U6x0yGd44%m*Y}iCz>+ z3rj5Mf6#*`{{=6_dh+7Qi+J$hp<z&x1Gv^)q9Q$sLiTU@VHu5ES5|ps8$kt zlC}QF3)$;k29;}z0W*Ga=}W!)mjY=YOv3>50ryIg1MaOvK5_3?)+5^_nJ3*$l%QsX1Q+{tk18)=+AoZ zzmEF6KZNNKzB3ml){7@hg6-O1=IV7Yebgzg-mTeX2h4o6Ty`o* zsZ?FZT)eS7QFrb9eH!_{gkd%v-3hHqTKN82mDrGClX(tXw}z2>I(G@F^sFCkFUm5n|R&uU3}GQgvJZ55(=CN@qsW6`Rp+`-IE}`|M=&r_kRWW=B$>S3i<1`Y6Zy0hot6GZIaox p^3Rmc<|n?4BpC&#yDV|}0?{2%@oj}qXD|8B6/dev/null + +sys="`uname -s | tr '/:[A-Z]' '..[a-z]'`" +if [ x"$sys" != x ] +then + unamer="`uname -r | tr /: ..`" + unamem="`uname -m | tr /: ..`" + unamev="`uname -v | tr /: ..`" + + case "$sys" in + bsd.os|freebsd|netbsd|openbsd) + # in bsd 4.4, uname -v does not have useful info. + # in bsd 4.4, uname -m is arch, not chip. + oper="$sys-$unamer" + arch="$unamem" + syst="" + chip="`sysctl -n hw.model`" # hopefully + kern="" + ;; + linux) + # as in bsd 4.4, uname -v does not have useful info. + oper="$sys-$unamer" + syst="" + chip="$unamem" + kern="" + case "$chip" in + i386|i486|i586|i686) + arch="i386" + ;; + alpha) + arch="alpha" + ;; + esac + ;; + aix) + # naturally IBM has to get uname -r and uname -v backwards. dorks. + oper="$sys-$unamev-$unamer" + arch="`arch | tr /: ..`" + syst="" + chip="$unamem" + kern="" + ;; + sunos) + oper="$sys-$unamer-$unamev" + arch="`(uname -p || mach) | tr /: ..`" + syst="`arch | tr /: ..`" + chip="$unamem" # this is wrong; is there any way to get the real info? + kern="`arch -k | tr /: ..`" + ;; + unix_sv) + oper="$sys-$unamer-$unamev" + arch="`uname -m`" + syst="" + chip="$unamem" + kern="" + ;; + *) + oper="$sys-$unamer-$unamev" + arch="`arch | tr /: ..`" + syst="" + chip="$unamem" + kern="" + ;; + esac +else + gcc -c trycpp.c + gcc -o trycpp trycpp.o + case `./trycpp` in + nextstep) + oper="nextstep-`hostinfo | sed -n 's/^[ ]*NeXT Mach \([^:]*\):.*$/\1/p'`" + arch="`hostinfo | sed -n 's/^Processor type: \(.*\) (.*)$/\1/p' | tr /: ..`" + syst="" + chip="`hostinfo | sed -n 's/^Processor type: .* (\(.*\))$/\1/p' | tr ' /:' '...'`" + kern="" + ;; + *) + oper="unknown" + arch="" + syst="" + chip="" + kern="" + ;; + esac + rm -f trycpp.o trycpp +fi + +case "$chip" in +80486) + # let's try to be consistent here. (BSD/OS) + chip=i486 + ;; +i486DX) + # respect the hyphen hierarchy. (FreeBSD) + chip=i486-dx + ;; +i486.DX2) + # respect the hyphen hierarchy. (FreeBSD) + chip=i486-dx2 + ;; +Intel.586) + # no, you nitwits, there is no such chip. (NeXTStep) + chip=pentium + ;; +i586) + # no, you nitwits, there is no such chip. (Linux) + chip=pentium + ;; +i686) + # STOP SAYING THAT! (Linux) + chip=ppro +esac + +if gcc -c x86cpuid.c +then + if gcc -o x86cpuid x86cpuid.o + then + x86cpuid="`./x86cpuid | tr /: ..`" + case "$x86cpuid" in + ?*) + chip="$x86cpuid" + ;; + esac + fi +fi +rm -f x86cpuid x86cpuid.o + +echo "$oper-:$arch-:$syst-:$chip-:$kern-" | tr ' [A-Z]' '.[a-z]' diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/fmt.h b/NONE-CKUBU/src/djbdns/djbdns-1.05/fmt.h new file mode 100644 index 0000000..b0bfce5 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/fmt.h @@ -0,0 +1,25 @@ +#ifndef FMT_H +#define FMT_H + +#define FMT_ULONG 40 /* enough space to hold 2^128 - 1 in decimal, plus \0 */ +#define FMT_LEN ((char *) 0) /* convenient abbreviation */ + +extern unsigned int fmt_uint(char *,unsigned int); +extern unsigned int fmt_uint0(char *,unsigned int,unsigned int); +extern unsigned int fmt_xint(char *,unsigned int); +extern unsigned int fmt_nbbint(char *,unsigned int,unsigned int,unsigned int,unsigned int); +extern unsigned int fmt_ushort(char *,unsigned short); +extern unsigned int fmt_xshort(char *,unsigned short); +extern unsigned int fmt_nbbshort(char *,unsigned int,unsigned int,unsigned int,unsigned short); +extern unsigned int fmt_ulong(char *,unsigned long); +extern unsigned int fmt_xlong(char *,unsigned long); +extern unsigned int fmt_nbblong(char *,unsigned int,unsigned int,unsigned int,unsigned long); + +extern unsigned int fmt_plusminus(char *,int); +extern unsigned int fmt_minus(char *,int); +extern unsigned int fmt_0x(char *,int); + +extern unsigned int fmt_str(char *,const char *); +extern unsigned int fmt_strn(char *,const char *,unsigned int); + +#endif diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/fmt_ulong.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/fmt_ulong.c new file mode 100644 index 0000000..db48bfd --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/fmt_ulong.c @@ -0,0 +1,13 @@ +#include "fmt.h" + +unsigned int fmt_ulong(register char *s,register unsigned long u) +{ + register unsigned int len; register unsigned long q; + len = 1; q = u; + while (q > 9) { ++len; q /= 10; } + if (s) { + s += len; + do { *--s = '0' + (u % 10); u /= 10; } while(u); /* handles u == 0 */ + } + return len; +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/fmt_ulong.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/fmt_ulong.o new file mode 100644 index 0000000000000000000000000000000000000000..05dfe4de74e27976649501f715d3b57ef5aff69a GIT binary patch literal 1328 zcmbVLK}#D!6n<+`lh~H12nq^`y;PwNMm<@P1f$MDJd}EtO}c4BH-Tid+Di{Xa1Vjf zU(-X;h!+ofu%|+Ay$D5$dMS9QeJ?ws>tjz2EZ=+IeBZn`Z+Ab? z1twqX$UDv6gq*7ImSX^Eit1G*>9xVR&co3~L z-%fT!R_71yh+H?*4P#FJ2;;x8+@w(xXnctn$LF#B40@@42R^~o(#d#`#F%OY*DFkT zPqaVq#8(aY00~6W8NcCQBS-c5y3|C9ZE!7qnxXzA7wU63-Ge-z9Z8M>M+*&FER?tdw{YISp?T6r&ua2Erl^~p5PV7LDP3G;Oa literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/fmt_xlong.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/fmt_xlong.c new file mode 100644 index 0000000..332fc9a --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/fmt_xlong.c @@ -0,0 +1,22 @@ +#include "fmt.h" + +char tohex(char num) { + if (num<10) + return num+'0'; + else if (num<16) + return num-10+'a'; + else + return -1; +} + +unsigned int fmt_xlong(register char *s,register unsigned long u) +{ + register unsigned int len; register unsigned long q; + len = 1; q = u; + while (q > 15) { ++len; q /= 16; } + if (s) { + s += len; + do { *--s = tohex(u % 16); u /= 16; } while(u); /* handles u == 0 */ + } + return len; +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/fmt_xlong.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/fmt_xlong.o new file mode 100644 index 0000000000000000000000000000000000000000..31f6ce268772fd943002887e610f91d11fddab69 GIT binary patch literal 1416 zcmbW1&ubGw6vy8*sZIRB#vh=dlJulPJ0`Vg!&fWaRXxQ7Uc00G0-VHF2W}L;|x3ASGxRZSoxkT{K5n+Gs zEuHt$>5APi$+=*MiQtd3{!45PjjeTELs$n#;Y~O10_w9`H)T z_q{rn)Em;{3-_K(wxnBGHJcxPeIBhe(j(RpMU@8@&saIlhWrVOzqfLoCiOz;CDasN zhxHfGOZ`XiGNY#wVM1I}FEb`Ev7d?dmq&+H`Jq4>mFl$roZ_>n)ZdPbf>~?Bt}Wrd z&B$^!4#w1;L}t&<^gpJ=2>V#d?b%VeP($e}?@?5Gcl-TmE^+;5)ch_gzZSc{=C)E@ z5`GSBPI)4BV#MR#gm~N&5|8`jiI2s#MQ;B}08U`#DdTy@mGiXX`uns0Us3htN_(wQ df5s~y8#S*D`-H4Hx?#|~&9|9}=mFQ~{s%cZcFzC+ literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/gen_alloc.h b/NONE-CKUBU/src/djbdns/djbdns-1.05/gen_alloc.h new file mode 100644 index 0000000..b94a956 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/gen_alloc.h @@ -0,0 +1,7 @@ +#ifndef GEN_ALLOC_H +#define GEN_ALLOC_H + +#define GEN_ALLOC_typedef(ta,type,field,len,a) \ + typedef struct ta { type *field; unsigned int len; unsigned int a; } ta; + +#endif diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/gen_allocdefs.h b/NONE-CKUBU/src/djbdns/djbdns-1.05/gen_allocdefs.h new file mode 100644 index 0000000..5e136c0 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/gen_allocdefs.h @@ -0,0 +1,34 @@ +#ifndef GEN_ALLOC_DEFS_H +#define GEN_ALLOC_DEFS_H + +#define GEN_ALLOC_ready(ta,type,field,len,a,i,n,x,base,ta_ready) \ +int ta_ready(register ta *x,register unsigned int n) \ +{ register unsigned int i; \ + if (x->field) { \ + i = x->a; \ + if (n > i) { \ + x->a = base + n + (n >> 3); \ + if (alloc_re(&x->field,i * sizeof(type),x->a * sizeof(type))) return 1; \ + x->a = i; return 0; } \ + return 1; } \ + x->len = 0; \ + return !!(x->field = (type *) alloc((x->a = n) * sizeof(type))); } + +#define GEN_ALLOC_readyplus(ta,type,field,len,a,i,n,x,base,ta_rplus) \ +int ta_rplus(register ta *x,register unsigned int n) \ +{ register unsigned int i; \ + if (x->field) { \ + i = x->a; n += x->len; \ + if (n > i) { \ + x->a = base + n + (n >> 3); \ + if (alloc_re(&x->field,i * sizeof(type),x->a * sizeof(type))) return 1; \ + x->a = i; return 0; } \ + return 1; } \ + x->len = 0; \ + return !!(x->field = (type *) alloc((x->a = n) * sizeof(type))); } + +#define GEN_ALLOC_append(ta,type,field,len,a,i,n,x,base,ta_rplus,ta_append) \ +int ta_append(register ta *x,register const type *i) \ +{ if (!ta_rplus(x,1)) return 0; x->field[x->len++] = *i; return 1; } + +#endif diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/generic-conf.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/generic-conf.c new file mode 100644 index 0000000..db4aa1d --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/generic-conf.c @@ -0,0 +1,99 @@ +#include +#include +#include +#include "strerr.h" +#include "buffer.h" +#include "open.h" +#include "generic-conf.h" + +static const char *fatal; +static const char *dir; +static const char *fn; + +static int fd; +static char buf[1024]; +static buffer ss; + +void init(const char *d,const char *f) +{ + dir = d; + fatal = f; + umask(022); + if (mkdir(dir,0700) == -1) + strerr_die4sys(111,fatal,"unable to create ",dir,": "); + if (chmod(dir,03755) == -1) + strerr_die4sys(111,fatal,"unable to set mode of ",dir,": "); + if (chdir(dir) == -1) + strerr_die4sys(111,fatal,"unable to switch to ",dir,": "); +} + +void fail(void) +{ + strerr_die6sys(111,fatal,"unable to create ",dir,"/",fn,": "); +} + +void makedir(const char *s) +{ + fn = s; + if (mkdir(fn,0700) == -1) fail(); +} + +void start(const char *s) +{ + fn = s; + fd = open_trunc(fn); + if (fd == -1) fail(); + buffer_init(&ss,buffer_unixwrite,fd,buf,sizeof buf); +} + +void outs(const char *s) +{ + if (buffer_puts(&ss,s) == -1) fail(); +} + +void out(const char *s,unsigned int len) +{ + if (buffer_put(&ss,s,len) == -1) fail(); +} + +void copyfrom(buffer *b) +{ + if (buffer_copy(&ss,b) < 0) fail(); +} + +void finish(void) +{ + if (buffer_flush(&ss) == -1) fail(); + if (fsync(fd) == -1) fail(); + close(fd); +} + +void perm(int mode) +{ + if (chmod(fn,mode) == -1) fail(); +} + +void owner(int uid,int gid) +{ + if (chown(fn,uid,gid) == -1) fail(); +} + +void makelog(const char *user,int uid,int gid) +{ + makedir("log"); + perm(02755); + makedir("log/main"); + owner(uid,gid); + perm(02755); + start("log/status"); + finish(); + owner(uid,gid); + perm(0644); + + start("log/run"); + outs("#!/bin/sh\nexec"); + outs(" setuidgid "); outs(user); + outs(" multilog t ./main\n"); + finish(); + perm(0755); +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/generic-conf.h b/NONE-CKUBU/src/djbdns/djbdns-1.05/generic-conf.h new file mode 100644 index 0000000..41dbeea --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/generic-conf.h @@ -0,0 +1,20 @@ +#ifndef GENERIC_CONF_H +#define GENERIC_CONF_H + +#include "buffer.h" + +extern void init(const char *,const char *); + +extern void makedir(const char *); + +extern void start(const char *); +extern void outs(const char *); +extern void out(const char *,unsigned int); +extern void copyfrom(buffer *); +extern void finish(void); + +extern void perm(int); +extern void owner(int,int); +extern void makelog(const char *,int,int); + +#endif diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/generic-conf.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/generic-conf.o new file mode 100644 index 0000000000000000000000000000000000000000..10e20b868a2831ae4a6fdc5d55565cb99a74efce GIT binary patch literal 8312 zcmb`Le{5S<6~}Lyuw-f1gwnFYI`X!rkPhn5Ze!CXs%%X+(?(q>;+Hy6JN9$qCblE{ znKV^lg>FJ7Wf~I_6Z@g6AW`u%e@xmysOjjWmGZ|bhBSdDls`ag$EuBL(gtD+=X>8d z@yUrTbuCx&z4v_X_nv#seed08`+==P_bh2?aZ*~`W>>d_Iycf$?+^IyfV;+Zy5!;4 zR}W2H1Co^HR#QlK~F45KVAZ+iicCq$e za_X}%z3A}CmZ&{eKC*DFc#-6kU-6RGLcEK;U+ukj^$fWGhyR%ckylM7t701~o`*2k z)idbKy77+1X{n8DyoZ-TEy1GuJ0Vcpa!bjf9#bH73N1S-FiSl?g#E4iQl z`BYbre_l?Uq$f66s|SJQuktxwiGS}PS-ZdY+)yps`)2K>q1ssQJGfwt?t z5Z_vtbVlJEy3G0Kclc-b^5^%_d|X2*{jOR}508aGR0=ZXFdc<~yCZO8rM>v{7t;Bn z?^L36RIT`Kxmt8URrA@s`E1~VLUk<4)8rru65c_lT7!f^ zp_C1SQZCSVA|GW&5CjLdlG~O8yIjlu?v~bN?H!NM#Rp%*WAu1CH@G}N1AYrSR8puE zAA(IKg-Y=(Y$~TwDSi+(l@uz)e*l|G3YFr&fK4TZO7Z7mQ~3re#b1F0xT4a@>wcuN;o06H&N7a*1p@O1s2xrQ#Ch5)8=64Ve&yBYSe?bRl$!OsP-^ zi!`HHio(RbJHEJqZj8*R59^AmfMz4DtBjWcw*TzU-TGj6z3Y3|QQc-3%%dzkyF4CT zN)6WOh)uVe+mADEWm}q+HXt6bYki71eA@W|&mS-o0`?=#M(QB0O#--;`Hvb7EsC^T zxgXyxe#lqP^7?%u# z3CBAZ@f_lZG(|Sb-|5pR{?~~6{bBuc5L3BGAMk0uFa5ii*xU4J5Cs*%{^)Frc`Y%H5D z6CMwXdm{S!myyA0F~5JJoR2~Qw0PtS>Cq6$6h?hb7QRmUp=u#r8Kp=u;ENpZxJ|I7 zIA2ltb?wh&aNcg`e{+#7`v21RSrokgQ99|PPqP4!ig3OiT_VN~$Gg66pHUosRN54|JRLP^8F8Uo9_}n@4$7w z?aVP>=evqI;z5i72l`Q^$GcDBS*JLpa{t_@sN-*M$1@kp64dhvhI=-G7N<&MqwQN?w> zKV*(Z=X;#F&G(l|kKZy9&nd-qzGn=Ve9tQXI^UO#Ui`me^lZA=WC1cFVE37!)2d$ zDnELkzijlf&-WWWZ*{BZ}*N{=VYtC|`-^$BJwH&kUD*r-~8~adg>qrwo_)Pb=Q1 z@_JEmblG%&QCvSq|4>}(-%wnCU!7B2>)UYCQ^9?^o<0)ib&6~KjfRWG$;nU1VxD_t{106Damg9cR@Bv<2{E45V%;o+wtXm^)5=fp(#y@*$#&bPZyUmxqm4!oV2Z{~Y5^WN^hT)KU;U|FQZq8s$r zQz+4z2D%CC(iBb7iZ}W?Kl*gf8~yZ#-)r9XVx#J9FE>iw=-n>zhOs42ZY?*en_r%t z{kW7+o!A?Gs6BZ2etit%?H&tz(=#r4TN2!zgu5Bb9j2hP6My>*ZZ+9}$a-;?tc{9g zPZdjJPB_gt79_%BzFc`#XqIb3yIH=(esf{rdj0%j*m~l3>sQ2OF*oZ7=R#@{iNW)Z z^joZDKh}(R`S;;yVr~oHJUgVXWrtGA2uB&i?B@KFjOEpDXXn@8xGrXW zJ*L~po1h$F+Xc_cqPA`K^I` z;vYCY4rSC8L8{Z|9Puy4kD^|%8u+pWI-N7AkWFZ>%>)IH-a@vbVo&Nc*?e$T%F DqVs=> literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/getln2.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/getln2.c new file mode 100644 index 0000000..bf622a4 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/getln2.c @@ -0,0 +1,24 @@ +#include "byte.h" +#include "getln.h" + +int getln2(buffer *ss,stralloc *sa,char **cont,unsigned int *clen,int sep) +{ + register char *x; + register unsigned int i; + int n; + + if (!stralloc_ready(sa,0)) return -1; + sa->len = 0; + + for (;;) { + n = buffer_feed(ss); + if (n < 0) return -1; + if (n == 0) { *clen = 0; return 0; } + x = buffer_PEEK(ss); + i = byte_chr(x,n,sep); + if (i < n) { buffer_SEEK(ss,*clen = i + 1); *cont = x; return 0; } + if (!stralloc_readyplus(sa,n)) return -1; + i = sa->len; + sa->len = i + buffer_get(ss,sa->s + i,n); + } +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/getln2.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/getln2.o new file mode 100644 index 0000000000000000000000000000000000000000..2e2928be95c378ae1597251bd8ed46c9939ab1e5 GIT binary patch literal 1864 zcmbW1&1(};5WwGdQ=4iuQHlf-z1gbx0U|||IB>5mxYcS5Ep375&Xf|=ow5=!oT3snz=|7=t@Intf-jyUKN|Ea zeVdg>6gMEPX%s2~blv7Ap)bRWCD>HsiMFx}J0)7-7}=Nvq&eweb6L{p!GTqcri0*z zz>$`9C!lC_BBax3qO~yyseQN-M7n;CNOKWM4)p}@!@(-R4!aRTqIl5h#qNu@cQt$N zb={Tk1Ty=QESMP^I~ng!S@|nwH9n#qQ-=o=YGR;m5~9}UE4G;jZP(g*hFdkOY^t_3 zXA`w(+9px+^*T{qYR%+IHM3$7wJ=+$SXD@=&f1omIXf{}x6Q&;)_mtG4oh(?_vC~! zNoKn<3p^s&XdZ%Jz{Aj8Vg=_|Y&U4^6J&mr=_8EG%;#znlYPY7>nP-4&7H144r{TM z@VbCU2=AYCz3o4~e@+r$c=v>{p`LaIpA+Zrh96(gc@mi4sE-(oL0lAXZWe-GhWStZ zpil08VBWJ6*Iz(K5N}!Zy=RB%5gZm|oGsV`HqP#yzZaNa|4Z!toQJq5-u_}tv@tJ0 zzHf<)+p_P8;XeF!g52*3BWFYM!c5Emru;u36Lu*CjQ8Szupj=u;dAl6Yq%`lfe&=x zr#kRV2Tm?qcDXvN7MMZcD`l3;vxQvEGK=#hKW|&P!c5J>uaz5hl5dnsRxJk=xLLBS vA~XUSZ7cV#;4}XX-&~Xj0>`u9{IS6C?r{E0;30v(7WiI)#~H`k;ywKfkWKOT literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/getopt.a b/NONE-CKUBU/src/djbdns/djbdns-1.05/getopt.a new file mode 100644 index 0000000000000000000000000000000000000000..c721c80526694d85508bc55a9b4ef2ebc803c74c GIT binary patch literal 5276 zcmc&&O>7%g5PqAue`(03rO+Ti*@8ubgx%OlOcI6GR^4`k0&SrnAr)H3aelywjlG5v z32Mo9VPyi9;J^ihIPi1fz@g$tirf^^_Qa)v8z88lReJ~mp;RpjGjHE`UtVkhY6T;$ zcjkNZ_vZcV$Xf~|-DzJi%Ll!!W;y9?8!C@@4YTlN$0@x%k6MndS?)o>EOWQ>QLonYipR^{m2crA z@j0_FaEe*$B7Nud*N?f%vpCE(g|%t_{5eiW#yEd5yR@`qmREBNvs5wlT??ko1M4SR zif8p=2o+{_YnR$a_4XnW}%|tXd8^?uWZX*Hf=t^OF!xDl(L(}#T=+Hx5oX( zL^7EeizN-%IuofW!{;-=Z$F8d#Iw1HOd@Ng<1GwCb;kOyfrsn~e+n?l z1=uRly0upkhf#IM09G;7+^kN>F<+s(0dRHgWc%lZ9lg|8DAx+rDmL^F!r&&*!;+}; z#}8Gl_zPGppqHIj^;eBw9Z(q5^RQpx=2}UOE2`k=G}g=n^Q*POi1T}MMS#W?rfqCL@M^OVC$4t8;`S&`ud=Lhfv$%4A;Y=R(M0A@kO?N8v!reX`xtkC*wJJz zJI>f`kRKB6bzFn1@Kr?eBM5{zp7CoAyc9wZ2yxu|gkxQh5O0Bp@CgKg5J&%nrx64~ zT!)A77ZC(P9M_ld0)jw@Ud;kP;>L^``Q_PX`dNC8L`ho-#gE& zozQFY96j^-USF=;(Z@y5XTw@y(We(nAe1VRPdQjR00+x;s<%g>*XCg%qR2Bpt@Y;? za3(YRr340NJPo$fbvqNw_p;nsGd|b%ty%WWi|$u{jd#mfA0LE@%tRVQ8QuY2bNGwX zFvM?PJm#AqK_s=8MVxxsqqMden-rBYiOCMBg%!>-DH-ggvbz>8t+mE=N`AIC538?<7Oafj^_26%tt z+|~Kl>k%trLq3VlBvRu`L(5py`~P}Gn&q;Tpd%B9LW1#{lY2foZ`AXVCwhB9zgBPO z^nC74ByKy`_f*d<;d_N2lIiXKpW}zF%0 literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/hasdevtcp.h b/NONE-CKUBU/src/djbdns/djbdns-1.05/hasdevtcp.h new file mode 100644 index 0000000..65e880e --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/hasdevtcp.h @@ -0,0 +1 @@ +/* sysdep: -devtcp */ diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/hasdevtcp.h1 b/NONE-CKUBU/src/djbdns/djbdns-1.05/hasdevtcp.h1 new file mode 100644 index 0000000..65e880e --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/hasdevtcp.h1 @@ -0,0 +1 @@ +/* sysdep: -devtcp */ diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/hasdevtcp.h2 b/NONE-CKUBU/src/djbdns/djbdns-1.05/hasdevtcp.h2 new file mode 100644 index 0000000..b12ffe8 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/hasdevtcp.h2 @@ -0,0 +1,2 @@ +/* sysdep: +devtcp */ +#define HASDEVTCP 1 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/hasshsgr.h b/NONE-CKUBU/src/djbdns/djbdns-1.05/hasshsgr.h new file mode 100644 index 0000000..d11c988 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/hasshsgr.h @@ -0,0 +1 @@ +/* sysdep: -shortsetgroups */ diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/hasshsgr.h1 b/NONE-CKUBU/src/djbdns/djbdns-1.05/hasshsgr.h1 new file mode 100644 index 0000000..d11c988 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/hasshsgr.h1 @@ -0,0 +1 @@ +/* sysdep: -shortsetgroups */ diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/hasshsgr.h2 b/NONE-CKUBU/src/djbdns/djbdns-1.05/hasshsgr.h2 new file mode 100644 index 0000000..db6a830 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/hasshsgr.h2 @@ -0,0 +1,2 @@ +/* sysdep: +shortsetgroups */ +#define HASSHORTSETGROUPS 1 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/haveip6.h b/NONE-CKUBU/src/djbdns/djbdns-1.05/haveip6.h new file mode 100644 index 0000000..5564de9 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/haveip6.h @@ -0,0 +1 @@ +#define LIBC_HAS_IP6 1 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/haveip6.h1 b/NONE-CKUBU/src/djbdns/djbdns-1.05/haveip6.h1 new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/haveip6.h1 @@ -0,0 +1 @@ + diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/haveip6.h2 b/NONE-CKUBU/src/djbdns/djbdns-1.05/haveip6.h2 new file mode 100644 index 0000000..5564de9 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/haveip6.h2 @@ -0,0 +1 @@ +#define LIBC_HAS_IP6 1 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/haven2i.h b/NONE-CKUBU/src/djbdns/djbdns-1.05/haven2i.h new file mode 100644 index 0000000..fd50644 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/haven2i.h @@ -0,0 +1 @@ +#define HAVE_N2I diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/haven2i.h1 b/NONE-CKUBU/src/djbdns/djbdns-1.05/haven2i.h1 new file mode 100644 index 0000000..732c485 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/haven2i.h1 @@ -0,0 +1 @@ +#undef HAVE_N2I diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/haven2i.h2 b/NONE-CKUBU/src/djbdns/djbdns-1.05/haven2i.h2 new file mode 100644 index 0000000..fd50644 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/haven2i.h2 @@ -0,0 +1 @@ +#define HAVE_N2I diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/hier.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/hier.c new file mode 100644 index 0000000..f154ccf --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/hier.c @@ -0,0 +1,44 @@ +#include "auto_home.h" + +void hier() +{ + c("/","etc","dnsroots.global",-1,-1,0644); + + h(auto_home,-1,-1,02755); + d(auto_home,"bin",-1,-1,02755); + + c(auto_home,"bin","dnscache-conf",-1,-1,0755); + c(auto_home,"bin","tinydns-conf",-1,-1,0755); + c(auto_home,"bin","walldns-conf",-1,-1,0755); + c(auto_home,"bin","rbldns-conf",-1,-1,0755); + c(auto_home,"bin","pickdns-conf",-1,-1,0755); + c(auto_home,"bin","axfrdns-conf",-1,-1,0755); + + c(auto_home,"bin","dnscache",-1,-1,0755); + c(auto_home,"bin","tinydns",-1,-1,0755); + c(auto_home,"bin","walldns",-1,-1,0755); + c(auto_home,"bin","rbldns",-1,-1,0755); + c(auto_home,"bin","pickdns",-1,-1,0755); + c(auto_home,"bin","axfrdns",-1,-1,0755); + + c(auto_home,"bin","tinydns-get",-1,-1,0755); + c(auto_home,"bin","tinydns-data",-1,-1,0755); + c(auto_home,"bin","tinydns-edit",-1,-1,0755); + c(auto_home,"bin","rbldns-data",-1,-1,0755); + c(auto_home,"bin","pickdns-data",-1,-1,0755); + c(auto_home,"bin","axfr-get",-1,-1,0755); + + c(auto_home,"bin","dnsip",-1,-1,0755); + c(auto_home,"bin","dnsip6",-1,-1,0755); + c(auto_home,"bin","dnsipq",-1,-1,0755); + c(auto_home,"bin","dnsip6q",-1,-1,0755); + c(auto_home,"bin","dnsname",-1,-1,0755); + c(auto_home,"bin","dnstxt",-1,-1,0755); + c(auto_home,"bin","dnsmx",-1,-1,0755); + c(auto_home,"bin","dnsfilter",-1,-1,0755); + c(auto_home,"bin","random-ip",-1,-1,0755); + c(auto_home,"bin","dnsqr",-1,-1,0755); + c(auto_home,"bin","dnsq",-1,-1,0755); + c(auto_home,"bin","dnstrace",-1,-1,0755); + c(auto_home,"bin","dnstracesort",-1,-1,0755); +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/hier.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/hier.o new file mode 100644 index 0000000000000000000000000000000000000000..bb319ede96fd408686be9fbdedefa16921c3ea63 GIT binary patch literal 6240 zcmeH~ZHQD=7{|{#rt8a^mRM=lelZN2$@Pui+w~nO6Dt&~^zQ7eGdMe=cdocfp(RBN zeJ}{J$f8h+g2*rBN~D$)Ek#05P#{GiN?I5NeGu&Y?|q(`KhMtnQlAz)FmulHJJ0jG z=bkxpcXs!(2bPa&X>r`iQ>Kz^c4_C{Smspe!TaV%26S7 zVNmI*_GOduZ6RjjnkWqNNf8FMY8d%_oEq<@b1l2px|aUQEt!d9Tle{gI{1w;cY3rR zteP}A4p%H$a##E8rG@TNP-$O~o1dGP?Z|c9nhc%G)pqtpLAURtFzJgr3Jc{R7Zv=9 zbMd|Ax@$F;3#$l_?lnF{QlYr9H^d$0^3}e+Ld929s!<`gV)dihS`_5B$in_d*Y0ca z_jHVLbV?lGGtDJ8-vBfG5ZhwgsR;?`pP2Lrah=vAbk|FNi|~xZ+O_+?x6PWp)@?os z&i`89;cKz3dH%&sufH6V)HKw7nV-XW6y;!8lntG0xZc0wPCu~sgt?WnLAp=aKPa_c z`9q%RTKury_RIBeu9IY7bJu%p88SbT`lPDyZgZ#jDZBT`*7{hJdY^$9aT-e`C6vcYkfX}V)rN3)fHH~WOan;-Jb zuy13sicGu%!&j84?@D71`*aPhQ@_V;p4;y*s;*AqH>7ZU@0)pCu~Z0i`M7g=7i^EJ z8;e!{2rIfCUs8Y0;^XDJ$92$@tNW$|*SS8YX9>sILCq!nO!sX8<;xL>$-TmnkF%ut z4+_`oPLuc%;_TTV93JeYddifK`qVKU$`wt1X z{tqc1{)H09|IGNY-Jj1WpZ!C^t^Y^LhkvoezZkCTKTDkbe+ajJJ?gs7)sojLUwGx} zZzInBslu&)7Ug68dJeLNtA8GG_TQP}Uq$)w7iIlx4Ojm<;_QDS#b2d-__v9FhvDjf zk~sVKrubi?eE9Wzzh=1l-z3idcT)U=ln?*Yvi=i>tN(N2?EhN0{d`YTKK##%|BT`4 z|BX2N|4i{`a6#Yn9PUd(H^FfAPbSX(>x83&OP@cpDIe?KFaEiPtA8PJ_TM8M9sAc( zKKuv8zs_*=KSrGWfpB!}4=Er1!{Xm%xcYY!Xa94;(Xsz!%7o$ z3|IfP#MwVxxb@GWeE84AcIW0BuKqiSv;Y1S{~F4N|AP3}8?OGxiL<{a#lM~M;r~ng zPZ_TMXNa?ZAjSVG<->nT{BIeq{)qgi}_AgHHKTP@X z>+gvThO2)QarSRc@%K|c{Bvaedkk0qv&7l|LW=(Y<-lbeDdoej bzmtXxSN}J}+5ba|zui00aDL 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 NQj2@R4x;YV{~s1eu{8hy literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/install.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/install.c new file mode 100644 index 0000000..62f0e7f --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/install.c @@ -0,0 +1,151 @@ +#include +#include +#include +#include "buffer.h" +#include "strerr.h" +#include "error.h" +#include "open.h" +#include "exit.h" + +extern void hier(); + +#define FATAL "install: fatal: " + +int fdsourcedir = -1; + +void h(home,uid,gid,mode) +char *home; +int uid; +int gid; +int mode; +{ + if (mkdir(home,0700) == -1) + if (errno != error_exist) + strerr_die4sys(111,FATAL,"unable to mkdir ",home,": "); + if (chown(home,uid,gid) == -1) + strerr_die4sys(111,FATAL,"unable to chown ",home,": "); + if (chmod(home,mode) == -1) + strerr_die4sys(111,FATAL,"unable to chmod ",home,": "); +} + +void d(home,subdir,uid,gid,mode) +char *home; +char *subdir; +int uid; +int gid; +int mode; +{ + if (chdir(home) == -1) + strerr_die4sys(111,FATAL,"unable to switch to ",home,": "); + if (mkdir(subdir,0700) == -1) + if (errno != error_exist) + strerr_die6sys(111,FATAL,"unable to mkdir ",home,"/",subdir,": "); + if (chown(subdir,uid,gid) == -1) + strerr_die6sys(111,FATAL,"unable to chown ",home,"/",subdir,": "); + if (chmod(subdir,mode) == -1) + strerr_die6sys(111,FATAL,"unable to chmod ",home,"/",subdir,": "); +} + +char inbuf[BUFFER_INSIZE]; +char outbuf[BUFFER_OUTSIZE]; +buffer ssin; +buffer ssout; + +void c(home,subdir,file,uid,gid,mode) +char *home; +char *subdir; +char *file; +int uid; +int gid; +int mode; +{ + int fdin; + int fdout; + + if (fchdir(fdsourcedir) == -1) + strerr_die2sys(111,FATAL,"unable to switch back to source directory: "); + + fdin = open_read(file); + if (fdin == -1) + strerr_die4sys(111,FATAL,"unable to read ",file,": "); + buffer_init(&ssin,buffer_unixread,fdin,inbuf,sizeof inbuf); + + if (chdir(home) == -1) + strerr_die4sys(111,FATAL,"unable to switch to ",home,": "); + if (chdir(subdir) == -1) + strerr_die6sys(111,FATAL,"unable to switch to ",home,"/",subdir,": "); + + fdout = open_trunc(file); + if (fdout == -1) + strerr_die6sys(111,FATAL,"unable to write .../",subdir,"/",file,": "); + buffer_init(&ssout,buffer_unixwrite,fdout,outbuf,sizeof outbuf); + + switch(buffer_copy(&ssout,&ssin)) { + case -2: + strerr_die4sys(111,FATAL,"unable to read ",file,": "); + case -3: + strerr_die6sys(111,FATAL,"unable to write .../",subdir,"/",file,": "); + } + + close(fdin); + if (buffer_flush(&ssout) == -1) + strerr_die6sys(111,FATAL,"unable to write .../",subdir,"/",file,": "); + if (fsync(fdout) == -1) + strerr_die6sys(111,FATAL,"unable to write .../",subdir,"/",file,": "); + if (close(fdout) == -1) /* NFS silliness */ + strerr_die6sys(111,FATAL,"unable to write .../",subdir,"/",file,": "); + + if (chown(file,uid,gid) == -1) + strerr_die6sys(111,FATAL,"unable to chown .../",subdir,"/",file,": "); + if (chmod(file,mode) == -1) + strerr_die6sys(111,FATAL,"unable to chmod .../",subdir,"/",file,": "); +} + +void z(home,subdir,file,len,uid,gid,mode) +char *home; +char *subdir; +char *file; +int len; +int uid; +int gid; +int mode; +{ + int fdout; + + if (chdir(home) == -1) + strerr_die4sys(111,FATAL,"unable to switch to ",home,": "); + if (chdir(subdir) == -1) + strerr_die6sys(111,FATAL,"unable to switch to ",home,"/",subdir,": "); + + fdout = open_trunc(file); + if (fdout == -1) + strerr_die6sys(111,FATAL,"unable to write .../",subdir,"/",file,": "); + buffer_init(&ssout,buffer_unixwrite,fdout,outbuf,sizeof outbuf); + + while (len-- > 0) + if (buffer_put(&ssout,"",1) == -1) + strerr_die6sys(111,FATAL,"unable to write .../",subdir,"/",file,": "); + + if (buffer_flush(&ssout) == -1) + strerr_die6sys(111,FATAL,"unable to write .../",subdir,"/",file,": "); + if (fsync(fdout) == -1) + strerr_die6sys(111,FATAL,"unable to write .../",subdir,"/",file,": "); + if (close(fdout) == -1) /* NFS silliness */ + strerr_die6sys(111,FATAL,"unable to write .../",subdir,"/",file,": "); + + if (chown(file,uid,gid) == -1) + strerr_die6sys(111,FATAL,"unable to chown .../",subdir,"/",file,": "); + if (chmod(file,mode) == -1) + strerr_die6sys(111,FATAL,"unable to chmod .../",subdir,"/",file,": "); +} + +int main() +{ + fdsourcedir = open_read("."); + if (fdsourcedir == -1) + strerr_die2sys(111,FATAL,"unable to open current directory: "); + + umask(077); + hier(); + _exit(0); +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/install.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/install.o new file mode 100644 index 0000000000000000000000000000000000000000..590dbed1594865856f408ec19c72b6e2dc8ed10e GIT binary patch literal 11224 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 f8}JJf^KQ2~_Wu&h`SnMpEcG81R+K(JQB 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 f;Sy! +#include +#include +#include "strerr.h" +#include "error.h" +#include "exit.h" + +extern void hier(); + +#define FATAL "instcheck: fatal: " +#define WARNING "instcheck: warning: " + +void perm(prefix1,prefix2,prefix3,file,type,uid,gid,mode) +char *prefix1; +char *prefix2; +char *prefix3; +char *file; +int type; +int uid; +int gid; +int mode; +{ + struct stat st; + + if (stat(file,&st) == -1) { + if (errno == error_noent) + strerr_warn6(WARNING,prefix1,prefix2,prefix3,file," does not exist",0); + else + strerr_warn4(WARNING,"unable to stat .../",file,": ",&strerr_sys); + return; + } + + if ((uid != -1) && (st.st_uid != uid)) + strerr_warn6(WARNING,prefix1,prefix2,prefix3,file," has wrong owner",0); + if ((gid != -1) && (st.st_gid != gid)) + strerr_warn6(WARNING,prefix1,prefix2,prefix3,file," has wrong group",0); + if ((st.st_mode & 07777) != mode) + strerr_warn6(WARNING,prefix1,prefix2,prefix3,file," has wrong permissions",0); + if ((st.st_mode & S_IFMT) != type) + strerr_warn6(WARNING,prefix1,prefix2,prefix3,file," has wrong type",0); +} + +void h(home,uid,gid,mode) +char *home; +int uid; +int gid; +int mode; +{ + perm("","","",home,S_IFDIR,uid,gid,mode); +} + +void d(home,subdir,uid,gid,mode) +char *home; +char *subdir; +int uid; +int gid; +int mode; +{ + if (chdir(home) == -1) + strerr_die4sys(111,FATAL,"unable to switch to ",home,": "); + perm("",home,"/",subdir,S_IFDIR,uid,gid,mode); +} + +void p(home,fifo,uid,gid,mode) +char *home; +char *fifo; +int uid; +int gid; +int mode; +{ + if (chdir(home) == -1) + strerr_die4sys(111,FATAL,"unable to switch to ",home,": "); + perm("",home,"/",fifo,S_IFIFO,uid,gid,mode); +} + +void c(home,subdir,file,uid,gid,mode) +char *home; +char *subdir; +char *file; +int uid; +int gid; +int mode; +{ + if (chdir(home) == -1) + strerr_die4sys(111,FATAL,"unable to switch to ",home,": "); + if (chdir(subdir) == -1) + strerr_die6sys(111,FATAL,"unable to switch to ",home,"/",subdir,": "); + perm(".../",subdir,"/",file,S_IFREG,uid,gid,mode); +} + +void z(home,file,len,uid,gid,mode) +char *home; +char *file; +int len; +int uid; +int gid; +int mode; +{ + if (chdir(home) == -1) + strerr_die4sys(111,FATAL,"unable to switch to ",home,": "); + perm("",home,"/",file,S_IFREG,uid,gid,mode); +} + +int main() +{ + hier(); + _exit(0); +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/instcheck.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/instcheck.o new file mode 100644 index 0000000000000000000000000000000000000000..3557139483ca54bbe98415876bc26c8353f6aef1 GIT binary patch literal 5416 zcmc(hYiLwQ6o6+Cf*;>Hnl!4#)W zaVjjrd`38Ph+hLFCrD>~{yq*G>AN|nV&NLT#9z(){THFXKAp?8`m4i?Ikn-1Jv_AA z;q~7_2Wt?QEb*HqE?eT}5d`M3QjVoGnOVi_#PH0VpRvV#{1#xR26RUc9cSFOiws;_ zyo%3oI2j#1Fh8f9%glVh526E^{X7e$mD$UW%W^*-mgQIctSk@l3s9QdhH%`V8`n6N zX<|9U$c=lsoWHskMyc@F;xcSF!AS6jNH8liVv5U$5suBq$XmJmcrxtHJ2D%3#;osI zT;B_(xQpuxX>RA&B4P;F_ZDoAx(0Ex9@p`dbPiU}SrHKKHHGHa>Y3Ef|riB|8)M~7Z!{?dlp}IkTb%;SgU<1Sy=cE}orUa5>VO}n~ zyi0v0J;r}`f12X2!u~YHKc4-WzG^mzGxg$hL>!HXlN5))??XB9`8=p*&dP|mZi(AP zV+%umAh_B>a8(!_#MOdvwexuxT%DDHoeL3~gRQ$8#5sy@A@w+pFdB2?sI(Y zsPTAyi>z#zsF4>6s~Js>PzZi-(_ zaXXkb#Tl7**e_Lsj2SHnJ7vTZj$wDjQVxs7Q%-Z6-Mn#;(HTv~WAP1(3L-sH>4a;yPY$(R? z?p}ZukRS22Sh0O#dQ#&+>CUoMmDhalPS{l<`*7?US!3)=ELUtVOHXVZDA`$RRfcv= zKs!CE|B1YvwUw`-1+=F6(9T{}FJ=e(hyJ4<_m2e1rR8nU^3>C#0;P1s%^i^h!w zffoYv=L7@6*=`l`lj`npqU)h_l5W{XwWQr14LEj}!vZakP!?F9O0hsPfelm#GtfjO zyRE4;8SSuHpgGaeVaH(v><~M!eC3;SVELOjN>3i>2ZO=%P1LM}RC^aCQnlqGdUT(H zda0*PRio0aty6{{g(l8Zt`w?NIZJVO)fI$dSeuu6^to!G18x4_@j)1ie$9u^D>VPt zUI=y6MWHgH>Jua_{OnM1-zp$kqxcDjprXfweZA^n?ZXBL<_}HMc*@_az{nS<=B0O% zTdmF$x1#H=2COsG{78*=M-_f`-N&Fy&pm3>__o4OS<}a3ThARTniw$1YSlRf>W{#u z$B(So{Cg^(1Ekw6^1u50`3|judZp}oPQ$WUQZ!@eM=?*37h7TE#W#7$nA7NbQ6e)i z)}xYqRtkL>{xpxD@(z}aG5rkVs3+ko#-EmBe9V9nMc&y^J_BDd{pZHvFOI{PkHg;> zhpz=L<5K%V-s!;BjicW>4&MwM?PQf5`Gx>XDSkmMCE4Gi_#U;C#5)yVr@&$z&70^1z@PPc*eBnxhUp(F~f2WK%qW zcfV3hb*I=?*4)+-OA=~{*{qpuVl6Cx-01jXc$4A#8~!^)QP;9Ob9lsv<3HXgsE>Px z_+Eq{XahrR#0Ci6i^OR!eD8KkJ2)5FIj=bB<2s`J=@xnWWap0J=#SSP3x!;0&EUe@f8{v1>U!QyfF$j@bpQ=Si?638nW|IEegZI2zitI1Bkrcdz> zXuMz9c~9f-E51i@J>CO~V}Va5&3nVcy>U%c=Nh}c{29gdc%Rky=gOa#Ja)YC+L}J) ztwZA!Z&KqFZ?EEdygNL+41CGwQ*k{HpJ?_;|A5BHpD#2{{$v%`{W+z$K5vD(C-pqf zQe4mT^BSjpwa8;v5g(aPR*4L$gooensOH*By@? zZ(K9W+zm$gp}6K~oZ_0Vaf&OXxE@!d;(A=0H9O>IzenHer=iXP`iZtk>Qsfeq1x*- aPJ?j*7X`J5U;~J;;_>#uyJ^mLAzLi`6 literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/iopause.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/iopause.c new file mode 100644 index 0000000..b8034de --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/iopause.c @@ -0,0 +1,76 @@ +#include "taia.h" +#include "select.h" +#include "iopause.h" + +void iopause(iopause_fd *x,unsigned int len,struct taia *deadline,struct taia *stamp) +{ + struct taia t; + int millisecs; + double d; + int i; + + if (taia_less(deadline,stamp)) + millisecs = 0; + else { + t = *stamp; + taia_sub(&t,deadline,&t); + d = taia_approx(&t); + if (d > 1000.0) d = 1000.0; + millisecs = d * 1000.0 + 20.0; + } + + for (i = 0;i < len;++i) + x[i].revents = 0; + +#ifdef IOPAUSE_POLL + + poll(x,len,millisecs); + /* XXX: some kernels apparently need x[0] even if len is 0 */ + /* XXX: how to handle EAGAIN? are kernels really this dumb? */ + /* XXX: how to handle EINVAL? when exactly can this happen? */ + +#else +{ + + struct timeval tv; + fd_set rfds; + fd_set wfds; + int nfds; + int fd; + + FD_ZERO(&rfds); + FD_ZERO(&wfds); + + nfds = 1; + for (i = 0;i < len;++i) { + fd = x[i].fd; + if (fd < 0) continue; + if (fd >= 8 * sizeof(fd_set)) continue; /*XXX*/ + + if (fd >= nfds) nfds = fd + 1; + if (x[i].events & IOPAUSE_READ) FD_SET(fd,&rfds); + if (x[i].events & IOPAUSE_WRITE) FD_SET(fd,&wfds); + } + + tv.tv_sec = millisecs / 1000; + tv.tv_usec = 1000 * (millisecs % 1000); + + if (select(nfds,&rfds,&wfds,(fd_set *) 0,&tv) <= 0) + return; + /* XXX: for EBADF, could seek out and destroy the bad descriptor */ + + for (i = 0;i < len;++i) { + fd = x[i].fd; + if (fd < 0) continue; + if (fd >= 8 * sizeof(fd_set)) continue; /*XXX*/ + + if (x[i].events & IOPAUSE_READ) + if (FD_ISSET(fd,&rfds)) x[i].revents |= IOPAUSE_READ; + if (x[i].events & IOPAUSE_WRITE) + if (FD_ISSET(fd,&wfds)) x[i].revents |= IOPAUSE_WRITE; + } + +} +#endif + +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/iopause.h b/NONE-CKUBU/src/djbdns/djbdns-1.05/iopause.h new file mode 100644 index 0000000..2cf5cf8 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/iopause.h @@ -0,0 +1,18 @@ +#ifndef IOPAUSE_H +#define IOPAUSE_H + +/* sysdep: +poll */ +#define IOPAUSE_POLL + +#include +#include + +typedef struct pollfd iopause_fd; +#define IOPAUSE_READ POLLIN +#define IOPAUSE_WRITE POLLOUT + +#include "taia.h" + +extern void iopause(iopause_fd *,unsigned int,struct taia *,struct taia *); + +#endif diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/iopause.h1 b/NONE-CKUBU/src/djbdns/djbdns-1.05/iopause.h1 new file mode 100644 index 0000000..dae0a33 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/iopause.h1 @@ -0,0 +1,19 @@ +#ifndef IOPAUSE_H +#define IOPAUSE_H + +/* sysdep: -poll */ + +typedef struct { + int fd; + short events; + short revents; +} iopause_fd; + +#define IOPAUSE_READ 1 +#define IOPAUSE_WRITE 4 + +#include "taia.h" + +extern void iopause(iopause_fd *,unsigned int,struct taia *,struct taia *); + +#endif diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/iopause.h2 b/NONE-CKUBU/src/djbdns/djbdns-1.05/iopause.h2 new file mode 100644 index 0000000..2cf5cf8 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/iopause.h2 @@ -0,0 +1,18 @@ +#ifndef IOPAUSE_H +#define IOPAUSE_H + +/* sysdep: +poll */ +#define IOPAUSE_POLL + +#include +#include + +typedef struct pollfd iopause_fd; +#define IOPAUSE_READ POLLIN +#define IOPAUSE_WRITE POLLOUT + +#include "taia.h" + +extern void iopause(iopause_fd *,unsigned int,struct taia *,struct taia *); + +#endif diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/iopause.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/iopause.o new file mode 100644 index 0000000000000000000000000000000000000000..2863302323d5641c20af3b104486214d9e7dc0ff GIT binary patch literal 1912 zcmbuAUrQ8G6u{58Yi_1Hn^XuD?t|0@dTGs|dXQOH-4V8k(kM!7cAG_M*Ijl-w0bC5 zj0TPT41Iy#dr~qAf{-A3@5O==Tj))&b7t<%yW{v$7k17$zkB}Nd+wdt$HUo?CPe`; z6c~VAOHhFK64YF*K|8cUYJAlBoEjT-wsq&rxbs_gK3>|S8uJ>)tk+P>uS&X_qm;&9Wns4 z7n&=fUpwL{pgg<=%6v=-wY5Z+aj)ITPw=@{BnP9h=S{=W&ZST$8h;udi6&~zndnu> zq|=w;i6JvLZOp{`**VtNn`Fr|o(jOM2PNCcp|q=>oDy2qEE>!<=WSs34BG&fvn*iM zG8rsy*%#0t7jtT|P&G;>uza~xGH1|#rfi!mb7j2OvW@(GzRdp;ag3%T#-nK%8n@gY zNHZ}>C-pe~!ahdkI#0OF=MJHyIuUMna(RmL5VwWc5{ggyYxUqf<^0$9B*xOZI`AhC zQQyB`v3?=b7)0?+axm!xacJ&y_aWj089>FqCz`w4;(3TZQU9o=B3|&z$apC)fIl@3 zyBg?T-y8eHPX;9o@I8#o-+L-4;tOO*!=IMyJ-tH~ao=BnCp@4H8TG)w|AWYa>ObT6 zFNO2+@Yk2;WS#uN@QZ&qv67ml^Vd8v~jp>o|#qZ&?+r~jXfq*>Ty>0&6 zFF7g{K#!tBhqN#8-k(J7e+MYn>3ul8k3s(D_u(*It{AhH$@0Lm>9h1m3I?_@ZA=zT z{5)35#iD0gvpG*ODwS$^9@Dx*e6#5;(Oucbk3NkNZ`!?M^iLu9BZ)^PUX!>g@kNQ# U9Ta(9N}Ntd@HpqKDCPV82gUEt2mk;8 literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/ip4.h b/NONE-CKUBU/src/djbdns/djbdns-1.05/ip4.h new file mode 100644 index 0000000..923d0ed --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/ip4.h @@ -0,0 +1,9 @@ +#ifndef IP4_H +#define IP4_H + +extern unsigned int ip4_scan(const char *,char *); +extern unsigned int ip4_fmt(char *,const char *); + +#define IP4_FMT 20 + +#endif diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/ip4_fmt.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/ip4_fmt.c new file mode 100644 index 0000000..bbad4c7 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/ip4_fmt.c @@ -0,0 +1,18 @@ +#include "fmt.h" +#include "ip4.h" + +unsigned int ip4_fmt(char *s,const char ip[4]) +{ + unsigned int len; + unsigned int i; + + len = 0; + i = fmt_ulong(s,(unsigned long) (unsigned char) ip[0]); len += i; if (s) s += i; + if (s) *s++ = '.'; ++len; + i = fmt_ulong(s,(unsigned long) (unsigned char) ip[1]); len += i; if (s) s += i; + if (s) *s++ = '.'; ++len; + i = fmt_ulong(s,(unsigned long) (unsigned char) ip[2]); len += i; if (s) s += i; + if (s) *s++ = '.'; ++len; + i = fmt_ulong(s,(unsigned long) (unsigned char) ip[3]); len += i; if (s) s += i; + return len; +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/ip4_fmt.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/ip4_fmt.o new file mode 100644 index 0000000000000000000000000000000000000000..041d748041d28c5ded36dde6814ba4d48345fbb0 GIT binary patch literal 1632 zcmbu8Pis>_5Wr{Oi>B3*#6O3EN^=m2U>BpMhzCh*w67o*)QVyyyu?>q%u7nLV%39( zs_?)-kNORYA0T)VL2SQ*;GtK+i-HG1A5Vk^RyUd4(3Lyg>Q)Nuc6t7NcI>I_DlS&+ zOD`3Xz%f9v|K%;fK^YCe9$f*pl4I^jdT0&Lco;c-w0iV&K9hUlR5GLGOnx=>+=c0> zsk8Y)C8#a=&HMyE%}H23(h`R1y<02|{ zPvrB|K=nE4{4^4suXza>)wkD41;;Fh9Xo@5n^DSa5=@BQhs>UxnSYZEW7*r1ZO@Lv z*VRzIs@%OO>FoCThmj@Kf2rQj5tXlnU0-usQd|nY^=(eJn>aDzNu3Z+x?$p~Nvnvv zeaf8<7t%WcS~QpaMnC%hb^y8kUz5p8%M;awQ1Ch^4bZCIZ?u|s$)Axy@tx3YfA!-< e@01qZmC3J5`Zs?(fWI2RUk~7U#p(T<@8ma~dABD3 literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/ip4_scan.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/ip4_scan.c new file mode 100644 index 0000000..e9538ec --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/ip4_scan.c @@ -0,0 +1,19 @@ +#include "scan.h" +#include "ip4.h" + +unsigned int ip4_scan(const char *s,char ip[4]) +{ + unsigned int i; + unsigned int len; + unsigned long u; + + len = 0; + i = scan_ulong(s,&u); if (!i) return 0; ip[0] = u; s += i; len += i; + if (*s != '.') return 0; ++s; ++len; + i = scan_ulong(s,&u); if (!i) return 0; ip[1] = u; s += i; len += i; + if (*s != '.') return 0; ++s; ++len; + i = scan_ulong(s,&u); if (!i) return 0; ip[2] = u; s += i; len += i; + if (*s != '.') return 0; ++s; ++len; + i = scan_ulong(s,&u); if (!i) return 0; ip[3] = u; s += i; len += i; + return len; +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/ip4_scan.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/ip4_scan.o new file mode 100644 index 0000000000000000000000000000000000000000..587f8c861aefb3f7331712dcd9a01d8c0fe323eb GIT binary patch literal 1664 zcmbVMPiqrF6rateO{&F4sZda84uiB{7o$arh-_)JQyE2tf`XC#|R=7JQOU%_ck-_W?V0QF#F#7y?^uG%EJ)g`BaRr%t+DzP?PK*4&GPyz9pE6H;&nksczuPstoD(u z_w>7j1vf27$K+R)aa4X5?^Vh?weoUHC0%;UgJtyPvZ<@Di`ToZ3As5DBvVj+=@Dyr zYPSzPkLR1s=B}$f8sr_@+O#&lPXdmu^x_A|dT@hS%Nfh=PNiSLtSDf|Lkl50$S*(b ztfj65$>$x{4_$kicwsB!_}JLF>_Fb1ne!^yVdsozC62;UjMIyqDoUSVDp-#^Pj zC|-$9BZaHUgIucajmW@upjJEGJPk& zXkzI9CJv18Jq(yRyJ-9^R3c=iMcteox^JtYY^m6Tz_E9;|1QAd>Njv$K-uuS_c815 zS=uG^OOjvV+itgDz4$D4>`u@>?t~Fnn=}g8yIr;$Y?5jRKyL C1kJPn literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/ip6.h b/NONE-CKUBU/src/djbdns/djbdns-1.05/ip6.h new file mode 100644 index 0000000..c1135e9 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/ip6.h @@ -0,0 +1,28 @@ +#ifndef IP6_H +#define IP6_H + +extern unsigned int ip6_scan(const char *,char *); +extern unsigned int ip6_fmt(char *,const char *); + +extern unsigned int ip6_scan_flat(const char *,char *); +extern unsigned int ip6_fmt_flat(char *,char *); + +/* + ip6 address syntax: (h = hex digit), no leading '0' required + 1. hhhh:hhhh:hhhh:hhhh:hhhh:hhhh:hhhh:hhhh + 2. any number of 0000 may be abbreviated as "::", but only once + flat ip6 address syntax: + hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh + */ + +#define IP6_FMT 40 + +const static unsigned char V4mappedprefix[12]={0,0,0,0,0,0,0,0,0,0,0xff,0xff}; +const static unsigned char V6loopback[16]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1}; +const static unsigned char V6any[16]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; + +#define ip6_isv4mapped(ip) (byte_equal(ip,12,V4mappedprefix)) + +const static char ip4loopback[4] = {127,0,0,1}; + +#endif diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/ip6_fmt.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/ip6_fmt.c new file mode 100644 index 0000000..b2444bb --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/ip6_fmt.c @@ -0,0 +1,60 @@ +#include "fmt.h" +#include "byte.h" +#include "ip4.h" +#include "ip6.h" +#include + +extern char tohex(char num); + +unsigned int ip6_fmt(char *s,const char ip[16]) +{ + unsigned int len; + unsigned int i; + unsigned int temp; + unsigned int compressing; + unsigned int compressed; + int j; + + len = 0; compressing = 0; compressed = 0; + for (j=0; j<16; j+=2) { + if (j==12 && ip6_isv4mapped(ip)) { + temp=ip4_fmt(s,ip+12); + len+=temp; + break; + } + temp = ((unsigned long) (unsigned char) ip[j] << 8) + + (unsigned long) (unsigned char) ip[j+1]; + if (temp == 0 && !compressed) { + if (!compressing) { + compressing=1; + if (j==0) { + if (s) *s++=':'; ++len; + } + } + } else { + if (compressing) { + compressing=0; ++compressed; + if (s) *s++=':'; ++len; + } + i = fmt_xlong(s,temp); len += i; if (s) s += i; + if (j<14) { + if (s) *s++ = ':'; + ++len; + } + } + } + if (compressing) { *s++=':'; ++len; } + +/* if (s) *s=0; */ + return len; +} + +unsigned int ip6_fmt_flat(char *s,char ip[16]) +{ + int i; + for (i=0; i<16; i++) { + *s++=tohex((unsigned char)ip[i] >> 4); + *s++=tohex((unsigned char)ip[i] & 15); + } + return 32; +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/ip6_fmt.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/ip6_fmt.o new file mode 100644 index 0000000000000000000000000000000000000000..39218fda339789a32325fc294c5237cff6eb5909 GIT binary patch literal 2192 zcmbtV-A~g{6u(`E8wxENOo(6XNgVr{PgZ_5}8}}N95VkA`;aH{(gBD zQ2UcifoQ*=+eKI_b>nZZ49tX()?dVUwXe(hsrG8&A8L;lUQ)ZY@JC4h2h!{Im*BKM zSXAYw-2nlf{=mx*!70Dbc@?exHhv0Xw8BTZa1XM9UU;v*z>|#M)C)^ia6u!-b$eb= zag`m<@kl`Y{6uaf5NU1ahzn)1v!FZ6ZsWo{GOC<8U6_Zy?3LPydM;*OKu6JMugDW8 z?3Eh1aIRD;h3B3@EizjJkC@}mr7$NK6!3LT-Kt?K$c>Xo#eT{?W52rnIv8~puMDXD z>VSGxjTezZrBp(to?614OGL=m31UqkI1R_&1voC07(UKObq{?}so}mDl|r_^4WN^V zgY3g`f&Z~jlNuh0niQJyYf{t0s;Ja@e^XRCY6m){2r@y=c61yMHAT%t$`}o`DTkDU zEny|x?5cz)W4F_mk$~OGx%;rE<;)R7vCO{o^BT6pg8fC9J98czqv`Lh~ zOge3j0(CTFnabJoJuPFFF?hr6;Xj@sh{fY>;&Mc&eG8q8)G<1$J7M`b49#}|7o4WP zEwE#%AhjFlzL(-6wY_bItLx!>t^MG@oc|ghhFC1ceAZyWcTVf$O=X2|s~wz`;@?nW zmJJ5oJHH1X1BE{m`mRx8D<$Im@Ev*a-u!gH_?|H2C_PXk8jSGVi{Rrir1$Xyp*eW& zR>1k$v+)Lv^EN&n?MkJ7Rk;z9GyvbjW?20Bs{yN2KTq!;o{ts2KI>z3T&8;_9^4d^DCN0p7I%PEy$;@nqUk21##Q+Q??jp={1frt+R6o*XeO zVr7QSRfqsTo*&7KUMGp$mKh&PC6hpJ!#q%?EPLpVcME6z8~$NX4s3ugGI%Y+Z>ARp i?;iUbd4%GaUt;*@7+hxX5a=kFhrRC+1VKF9oAX~Fo*a+> literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/ip6_scan.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/ip6_scan.c new file mode 100644 index 0000000..f355d46 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/ip6_scan.c @@ -0,0 +1,115 @@ +#include "scan.h" +#include "ip4.h" +#include "ip6.h" +#include "byte.h" + +/* + * IPv6 addresses are really ugly to parse. + * Syntax: (h = hex digit) + * 1. hhhh:hhhh:hhhh:hhhh:hhhh:hhhh:hhhh:hhhh + * 2. any number of 0000 may be abbreviated as "::", but only once + * 3. The last two words may be written as IPv4 address + */ + +unsigned int ip6_scan(const char *s,char ip[16]) +{ + unsigned int i; + unsigned int len=0; + unsigned long u; + + char suffix[16]; + int prefixlen=0; + int suffixlen=0; + + if ((i=ip4_scan(s,ip+12))) { + const char *c=V4mappedprefix; + if (byte_equal(ip+12,4,V6any)) c=V6any; + for (len=0; len<12; ++len) ip[len]=c[len]; + return i; + } + for (i=0; i<16; i++) ip[i]=0; + for (;;) { + if (*s == ':') { + len++; + if (s[1] == ':') { /* Found "::", skip to part 2 */ + s+=2; + len++; + break; + } + s++; + } + i = scan_xlong(s,&u); + if (!i) return 0; + if (prefixlen==12 && s[i]=='.') { + /* the last 4 bytes may be written as IPv4 address */ + i=ip4_scan(s,ip+12); + if (i) + return i+len; + else + return 0; + } + ip[prefixlen++] = (u >> 8); + ip[prefixlen++] = (u & 255); + s += i; len += i; + if (prefixlen==16) + return len; + } + +/* part 2, after "::" */ + for (;;) { + if (*s == ':') { + if (suffixlen==0) + break; + s++; + len++; + } else if (suffixlen!=0) + break; + i = scan_xlong(s,&u); + if (!i) { + len--; + break; + } + if (suffixlen+prefixlen<=12 && s[i]=='.') { + int j=ip4_scan(s,suffix+suffixlen); + if (j) { + suffixlen+=4; + len+=j; + break; + } else + prefixlen=12-suffixlen; /* make end-of-loop test true */ + } + suffix[suffixlen++] = (u >> 8); + suffix[suffixlen++] = (u & 255); + s += i; len += i; + if (prefixlen+suffixlen==16) + break; + } + for (i=0; i='0' && c<='9') + return c-'0'; + else if (c>='A' && c<='F') + return c-'A'+10; + else if (c>='a' && c<='f') + return c-'a'+10; + return -1; +} + +unsigned int ip6_scan_flat(const char *s,char ip[16]) +{ + int i; + for (i=0; i<16; i++) { + int tmp; + tmp=fromhex(*s++); + if (tmp<0) return 0; + ip[i]=tmp << 4; + tmp=fromhex(*s++); + if (tmp<0) return 0; + ip[i]+=tmp; + } + return 32; +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/ip6_scan.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/ip6_scan.o new file mode 100644 index 0000000000000000000000000000000000000000..d12cd333b17dd35c2ed029f95917e4d9b266c169 GIT binary patch literal 2728 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 4),1); + buffer_put(buffer_2,"0123456789abcdef" + (c & 15),1); +} + +static void string(const char *s) +{ + buffer_puts(buffer_2,s); +} + +static void line(void) +{ + string("\n"); + buffer_flush(buffer_2); +} + +static void space(void) +{ + string(" "); +} + +static void ip(const char i[16]) +{ + int j; + for (j=0; j<16; ++j) hex(i[j]); +} + +static void logid(const char id[2]) +{ + hex(id[0]); + hex(id[1]); +} + +static void logtype(const char type[2]) +{ + uint16 u; + + uint16_unpack_big(type,&u); + number(u); +} + +static void name(const char *q) +{ + char ch; + int state; + + if (!*q) { + string("."); + return; + } + while (state = *q++) { + while (state) { + ch = *q++; + --state; + if ((ch <= 32) || (ch > 126)) ch = '?'; + if ((ch >= 'A') && (ch <= 'Z')) ch += 32; + buffer_put(buffer_2,&ch,1); + } + string("."); + } +} + +void log_startup(void) +{ + string("starting"); + line(); +} + +void log_query(uint64 *qnum,const char client[16],unsigned int port,const char id[2],const char *q,const char qtype[2]) +{ + string("query "); number(*qnum); space(); + ip(client); string(":"); hex(port >> 8); hex(port & 255); + string(":"); logid(id); space(); + logtype(qtype); space(); name(q); + line(); +} + +void log_querydone(uint64 *qnum,unsigned int len) +{ + string("sent "); number(*qnum); space(); + number(len); + line(); +} + +void log_querydrop(uint64 *qnum) +{ + const char *x = error_str(errno); + + string("drop "); number(*qnum); space(); + string(x); + line(); +} + +void log_tcpopen(const char client[16],unsigned int port) +{ + string("tcpopen "); + ip(client); string(":"); hex(port >> 8); hex(port & 255); + line(); +} + +void log_tcpclose(const char client[16],unsigned int port) +{ + const char *x = error_str(errno); + string("tcpclose "); + ip(client); string(":"); hex(port >> 8); hex(port & 255); space(); + string(x); + line(); +} + +void log_tx(const char *q,const char qtype[2],const char *control,const char servers[256],unsigned int gluelessness) +{ + int i; + + string("tx "); number(gluelessness); space(); + logtype(qtype); space(); name(q); space(); + name(control); + for (i = 0;i < 256;i += 16) + if (byte_diff(servers + i,16,V6any)) { + space(); + ip(servers + i); + } + line(); +} + +void log_cachedanswer(const char *q,const char type[2]) +{ + string("cached "); logtype(type); space(); + name(q); + line(); +} + +void log_cachedcname(const char *dn,const char *dn2) +{ + string("cached cname "); name(dn); space(); name(dn2); + line(); +} + +void log_cachedns(const char *control,const char *ns) +{ + string("cached ns "); name(control); space(); name(ns); + line(); +} + +void log_cachednxdomain(const char *dn) +{ + string("cached nxdomain "); name(dn); + line(); +} + +void log_nxdomain(const char server[16],const char *q,unsigned int ttl) +{ + string("nxdomain "); ip(server); space(); number(ttl); space(); + name(q); + line(); +} + +void log_nodata(const char server[16],const char *q,const char qtype[2],unsigned int ttl) +{ + string("nodata "); ip(server); space(); number(ttl); space(); + logtype(qtype); space(); name(q); + line(); +} + +void log_lame(const char server[16],const char *control,const char *referral) +{ + string("lame "); ip(server); space(); + name(control); space(); name(referral); + line(); +} + +void log_servfail(const char *dn) +{ + const char *x = error_str(errno); + + string("servfail "); name(dn); space(); + string(x); + line(); +} + +void log_rr(const char server[16],const char *q,const char type[2],const char *buf,unsigned int len,unsigned int ttl) +{ + int i; + + string("rr "); ip(server); space(); number(ttl); space(); + logtype(type); space(); name(q); space(); + + for (i = 0;i < len;++i) { + hex(buf[i]); + if (i > 30) { + string("..."); + break; + } + } + line(); +} + +void log_rrns(const char server[16],const char *q,const char *data,unsigned int ttl) +{ + string("rr "); ip(server); space(); number(ttl); + string(" ns "); name(q); space(); + name(data); + line(); +} + +void log_rrcname(const char server[16],const char *q,const char *data,unsigned int ttl) +{ + string("rr "); ip(server); space(); number(ttl); + string(" cname "); name(q); space(); + name(data); + line(); +} + +void log_rrptr(const char server[16],const char *q,const char *data,unsigned int ttl) +{ + string("rr "); ip(server); space(); number(ttl); + string(" ptr "); name(q); space(); + name(data); + line(); +} + +void log_rrmx(const char server[16],const char *q,const char *mx,const char pref[2],unsigned int ttl) +{ + uint16 u; + + string("rr "); ip(server); space(); number(ttl); + string(" mx "); name(q); space(); + uint16_unpack_big(pref,&u); + number(u); space(); name(mx); + line(); +} + +void log_rrsoa(const char server[16],const char *q,const char *n1,const char *n2,const char misc[20],unsigned int ttl) +{ + uint32 u; + int i; + + string("rr "); ip(server); space(); number(ttl); + string(" soa "); name(q); space(); + name(n1); space(); name(n2); + for (i = 0;i < 20;i += 4) { + uint32_unpack_big(misc + i,&u); + space(); number(u); + } + line(); +} + +void log_stats(void) +{ + extern uint64 numqueries; + extern uint64 cache_motion; + extern int uactive; + extern int tactive; + + string("stats "); + number(numqueries); space(); + number(cache_motion); space(); + number(uactive); space(); + number(tactive); + line(); +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/log.h b/NONE-CKUBU/src/djbdns/djbdns-1.05/log.h new file mode 100644 index 0000000..fe62fa3 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/log.h @@ -0,0 +1,36 @@ +#ifndef LOG_H +#define LOG_H + +#include "uint64.h" + +extern void log_startup(void); + +extern void log_query(uint64 *,const char *,unsigned int,const char *,const char *,const char *); +extern void log_querydrop(uint64 *); +extern void log_querydone(uint64 *,unsigned int); + +extern void log_tcpopen(const char *,unsigned int); +extern void log_tcpclose(const char *,unsigned int); + +extern void log_cachedanswer(const char *,const char *); +extern void log_cachedcname(const char *,const char *); +extern void log_cachednxdomain(const char *); +extern void log_cachedns(const char *,const char *); + +extern void log_tx(const char *,const char *,const char *,const char *,unsigned int); + +extern void log_nxdomain(const char *,const char *,unsigned int); +extern void log_nodata(const char *,const char *,const char *,unsigned int); +extern void log_servfail(const char *); +extern void log_lame(const char *,const char *,const char *); + +extern void log_rr(const char *,const char *,const char *,const char *,unsigned int,unsigned int); +extern void log_rrns(const char *,const char *,const char *,unsigned int); +extern void log_rrcname(const char *,const char *,const char *,unsigned int); +extern void log_rrptr(const char *,const char *,const char *,unsigned int); +extern void log_rrmx(const char *,const char *,const char *,const char *,unsigned int); +extern void log_rrsoa(const char *,const char *,const char *,const char *,const char *,unsigned int); + +extern void log_stats(void); + +#endif diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/log.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/log.o new file mode 100644 index 0000000000000000000000000000000000000000..5e38462c31b68306775cd4b02b5b4ff47fd509d3 GIT binary patch literal 15432 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 literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/makelib b/NONE-CKUBU/src/djbdns/djbdns-1.05/makelib new file mode 100755 index 0000000..f94bcf3 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/makelib @@ -0,0 +1,6 @@ +#!/bin/sh +# WARNING: This file was auto-generated. Do not edit! +main="$1"; shift +rm -f "$main" +ar cr "$main" ${1+"$@"} +ranlib "$main" diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/ndelay.h b/NONE-CKUBU/src/djbdns/djbdns-1.05/ndelay.h new file mode 100644 index 0000000..60b788c --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/ndelay.h @@ -0,0 +1,7 @@ +#ifndef NDELAY_H +#define NDELAY_H + +extern int ndelay_on(int); +extern int ndelay_off(int); + +#endif diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/ndelay_off.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/ndelay_off.c new file mode 100644 index 0000000..9daa8cd --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/ndelay_off.c @@ -0,0 +1,12 @@ +#include +#include +#include "ndelay.h" + +#ifndef O_NONBLOCK +#define O_NONBLOCK O_NDELAY +#endif + +int ndelay_off(int fd) +{ + return fcntl(fd,F_SETFL,fcntl(fd,F_GETFL,0) & ~O_NONBLOCK); +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/ndelay_off.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/ndelay_off.o new file mode 100644 index 0000000000000000000000000000000000000000..56564a12503ad62ab4d50cdd24681879b81ffc52 GIT binary patch literal 1384 zcmbVMJxjx25WX0-ewHW>ih^;dDCmn(ad41`UkD6GaB>-jnIL!gmrr!nqvj<*aep zf_h_RWzn2i^$JH$V9v8SHal%GYceqbSa@2FoC4~on&^_Ss@{piBCi$!D>{(_tPqC4 zV$>_;{i;*;fVq`&*$Xfvs6-yy*xsKGBgZ}Fo%~;!m`bZ^S6*RrKb}$I49O;Q7#~`m zDrQ@P%y6O$HPz|h{vg-m9H)!OQj#6XR%=ZmNALV^{sQJwUvxrQM19e};6(qzx6n{~ zB5sGzFXp8A2@?4Nw-KZIs$6qmR3X&ZP2^RKQf`zy;i|EHNT|D`Sdo7q61i6M$yawr zp$1>dGtcWrO|z@>cOsTnKVBAcf6b2}sX~3V!plb*si$s?`bg~r(XxJAMNGI$g;C literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/ndelay_on.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/ndelay_on.c new file mode 100644 index 0000000..eccd8c8 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/ndelay_on.c @@ -0,0 +1,12 @@ +#include +#include +#include "ndelay.h" + +#ifndef O_NONBLOCK +#define O_NONBLOCK O_NDELAY +#endif + +int ndelay_on(int fd) +{ + return fcntl(fd,F_SETFL,fcntl(fd,F_GETFL,0) | O_NONBLOCK); +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/ndelay_on.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/ndelay_on.o new file mode 100644 index 0000000000000000000000000000000000000000..7bba01b3d54dec187b02faa80a3f9b3a679518d3 GIT binary patch literal 1384 zcmbVMJ4*vW5T46LllbBkK|#f{P!x3WR4gnc;v)zmqF9K9T;fT@mHqiPvuUm|&rcM?7>xoOfH1J+#( zb!KyO&7R%zvX`!JuZU%_wBQJ5E;0c`rB)2wEb5>f>AbSaUcnWCR}Da%yMYTLTd9Bu zQ7?aXQFeqSko^Z8SVwW}X43%LnAy72lsr`r@4hp(oNDcfwjG3ujjCy2ItVTzZJtS*+? zY)$!}Fd^|DK(8Oqkk-$%j2J=9e`_J-pX1*}?X2XB9JFk>$oWBmc)E{--h_7h(~M+_ PKopMKAqqg>r~Zz=ix6A^ literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/okclient.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/okclient.c new file mode 100644 index 0000000..9a0d3c6 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/okclient.c @@ -0,0 +1,36 @@ +#include +#include +#include "str.h" +#include "ip4.h" +#include "ip6.h" +#include "byte.h" +#include "okclient.h" + +static char fn[3 + IP6_FMT]; + +int okclient(char ip[16]) +{ + struct stat st; + int i; + char sep; + + fn[0] = 'i'; + fn[1] = 'p'; + fn[2] = '/'; + if (byte_equal(ip,12,V4mappedprefix)) { + fn[3 + ip4_fmt(fn + 3,ip+12)] = 0; + sep='.'; + } else { + fn[3 + ip6_fmt(fn + 3,ip)] = 0; + sep=':'; + } + + for (;;) { + if (!fn[3]) return 0; + if (stat(fn,&st) == 0) return 1; + /* treat temporary error as rejection */ + i = str_rchr(fn,sep); + if (!fn[i]) return 0; + fn[i] = 0; + } +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/okclient.h b/NONE-CKUBU/src/djbdns/djbdns-1.05/okclient.h new file mode 100644 index 0000000..e9b7dd6 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/okclient.h @@ -0,0 +1,6 @@ +#ifndef OKCLIENT_H +#define OKCLIENT_H + +extern int okclient(char *); + +#endif diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/okclient.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/okclient.o new file mode 100644 index 0000000000000000000000000000000000000000..6e43a70f0ac414c9c77ec2dffdf5c1e584ccdc9d GIT binary patch literal 2328 zcmbtVO-NKx6h6y?3v3xjx%;;J$m#cfNDaxxeqpwHw##41=T? zG(a^=qC|~#H9hXBacZF^8jr2Nfw|hupF7s#wl(`>iPg=0Kr?<<@Vj&0fX%N*=AUzK zJu5Y@0r1ed_0VPo7Oj~4sa*1O_g-Z6c3S*g<629V72n+_VkEuOTKu{S*Ba&^ z(mmR+X5XTwW#hrajYxZiRT5Ba-Gky}sR@)~`kA|xt5&NB`ltAmBZ6Z*9wVdNYJ{2_ z8eecR#~DY1Y~gby+&UU=n+rXy8woEnVR&$`KiVTwW2d^o32xK$(*oVo6KaXL}oGX8=lvhOr(o;)*&;M&t{z*Q*(LOF^6xC zcb8l{HHC`)OQIZ&HQ%p|5*M~NXT{g5=unSwtJg4?y$wG24ui8Ca)mMJLz7jdA+*sqG7U-hXvc=hx%@c9S@t{CbFss#A% z9maeN5|dB{Hwj-fkx7T-tNF1Uaro`nc)*L5TJ*>=2-uu&x>vtYe zxHmyK&T|lcbq{=G51jH-sp$;AcxH<3_GIls!I>x&oph#5>D-Q!k~6N8n8>8llqvKi z(pi`IbxjmglSN7-%KSvS?6~MTI1!87i6+*?6XoGYy{~^3!P(|t2jrxN|MKB#hlc+a zIDUc D(p&T- literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/open.h b/NONE-CKUBU/src/djbdns/djbdns-1.05/open.h new file mode 100644 index 0000000..1fcd99f --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/open.h @@ -0,0 +1,10 @@ +#ifndef OPEN_H +#define OPEN_H + +extern int open_read(const char *); +extern int open_excl(const char *); +extern int open_append(const char *); +extern int open_trunc(const char *); +extern int open_write(const char *); + +#endif diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/open_read.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/open_read.c new file mode 100644 index 0000000..2a63a25 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/open_read.c @@ -0,0 +1,6 @@ +#include +#include +#include "open.h" + +int open_read(const char *fn) +{ return open(fn,O_RDONLY | O_NDELAY); } diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/open_read.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/open_read.o new file mode 100644 index 0000000000000000000000000000000000000000..c596b905af25e2ecbaca256e52820da28f2d1f69 GIT binary patch literal 1336 zcmbVL!AiqG5S^H6Tdhz_62JkZA2*w_>0E00EC&CVtpa}0!0I)y4 zSYA@Vc)A3mUpCBAzVM1062GRj5(ks5RjY^A=CN$vx?O8u?1|lqE$por0*K(z3*9E# z(2s40kuUFE5z2lDqV0w*h-MIgh*;Ta-1x31L9}|FC%YKZ?S)d*&aWy#=(g^X6-y zY5oD`()m;PCD(;=c9JAwuAgZefnF17R!09saX$C&AV=rx>qQaknxMy?p{{e3@}}jn ztH&;&pwEtCIscjymDTgf*Jnqe1GVY5%9}$=z3crKk;^*&Qw^2hn%X9_SJsl2>dL{- zFv&4C|JlXNtc2>zx?$qgCG*D0nxih$f(iLFf!;iRi-~&py)7fJzqKg2_aM6sU%GA4 af)S2TB=dafPH48j!+2Sd3PA5Ld0&67i%J;) literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/open_trunc.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/open_trunc.c new file mode 100644 index 0000000..9d0f1dc --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/open_trunc.c @@ -0,0 +1,6 @@ +#include +#include +#include "open.h" + +int open_trunc(const char *fn) +{ return open(fn,O_WRONLY | O_NDELAY | O_TRUNC | O_CREAT,0644); } diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/open_trunc.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/open_trunc.o new file mode 100644 index 0000000000000000000000000000000000000000..f24e85f0bf25eaabb625a2c48f508e7e1c4c5140 GIT binary patch literal 1344 zcmbW0!AiqG5QZnF+E%Mn@t`Q0lT@&aQSsnGB2|kZ9z;P;C5@4aCY2;Y_2Si|4mx2R_{WcNp@{IQGvCag-I-;d4~`EEw4qG(glim?SHD8k1ZCO-GZ z0nD%ORQas*wWm|iI%Q2SJJlDa_Tx1rXt* z7uij;QIOb{@&fnH7LnVDKwR084Wb!_AY$sa8rOmCxgeaj=ea(X`0dCQ^^@~z7}?Hk z`UFGy2C8T@V@z$yc%VmQWmdO}N#2=G zg}j#Tm(PxBmHtu*rR92x`Rw9SIh3x{O`xUTdH+RZS^IaTeo5+;;rlDjE!E}Vr^h+P zdgjE4XPtz2)(sPvm&`WN|GOMa=#U=-7){|flRA%jZ}Z6cTZ_f*d)IG7!GrGz2l_$m XV!>owl-vo;_P3WTLvnhD>HGQvq>xKa literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/openreadclose.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/openreadclose.c new file mode 100644 index 0000000..cbc5c6c --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/openreadclose.c @@ -0,0 +1,16 @@ +#include "error.h" +#include "open.h" +#include "readclose.h" +#include "openreadclose.h" + +int openreadclose(const char *fn,stralloc *sa,unsigned int bufsize) +{ + int fd; + fd = open_read(fn); + if (fd == -1) { + if (errno == error_noent) return 0; + return -1; + } + if (readclose(fd,sa,bufsize) == -1) return -1; + return 1; +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/openreadclose.h b/NONE-CKUBU/src/djbdns/djbdns-1.05/openreadclose.h new file mode 100644 index 0000000..2d4042e --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/openreadclose.h @@ -0,0 +1,8 @@ +#ifndef OPENREADCLOSE_H +#define OPENREADCLOSE_H + +#include "stralloc.h" + +extern int openreadclose(const char *,stralloc *,unsigned int); + +#endif diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/openreadclose.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/openreadclose.o new file mode 100644 index 0000000000000000000000000000000000000000..7054f9cdb3a2a87da5e9f3bd9271853c8bf6e8e4 GIT binary patch literal 1608 zcmbW1-)j>=5Xa|o)utLGiVp!r0|rUKE{%#v1qoE!6{LvZgHSoI=}L>qom?(ZeNhMq zM_&3T^zZ1Cpx|rN7x6C;6n{JjeGuY&FT3%wBrhE}X67?9yR&n9_wx4Lm7L>{5r=Nl zf6q`NnSu2b*Qr2rB$M^ZFPSte2eSLUB$GeMr>_Wi4+fnJsa5;fqZ>!SI@P2vd+U|F z>@_Pz*?m`fyPJHG$&cjyu;z`kk8L`i_XjNBKCpcng)GjC`{e8t9k(!>-{mCmvuT9r z5%k)L^6OmJrPbx-rE>L_+SvAk@>Ov~TwbV&+WgQY67A=$*xz6sM?<}3tVlI|5v!e; z#HJtnBsSV@5-C+%-jm30DH4sa)lvbc1YxYi>e_>acI-Ev>P`-?%3O-GAGMaKYd<|> zCRWVYFwgKaV==h>bn--xb?g{x?334iN$ZQ6yV^Hu&lr}r_qxP!ta;e_Yg~)Ia{Odv zPdkfQ$hPU<;2IltPlzq*ftqvT{1}O;H@waa``gmj;Jg*EbMJ86W+?e-)fv~$J;?!k zcE~mL4^5%gc0GK1c1V?aDA#qtab`HXef~LSllFh5@6SDsXT{z>8_U|ro1x!>EHkz{ zaboCWQYYY(-Y~ds(k!gCJ38ffz@^!7z#is*D$|eo-tgY-Zwzzh5sUS=DDH4roM4=R_Ru>b%7 literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/parsetype.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/parsetype.c new file mode 100644 index 0000000..167aaa4 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/parsetype.c @@ -0,0 +1,31 @@ +#include "scan.h" +#include "byte.h" +#include "case.h" +#include "dns.h" +#include "uint16.h" +#include "parsetype.h" + +int parsetype(char *s,char type[2]) +{ + unsigned long u; + + if (!s[scan_ulong(s,&u)]) uint16_pack_big(type,u); + else if (case_equals(s,"any")) byte_copy(type,2,DNS_T_ANY); + else if (case_equals(s,"a")) byte_copy(type,2,DNS_T_A); + else if (case_equals(s,"ns")) byte_copy(type,2,DNS_T_NS); + else if (case_equals(s,"mx")) byte_copy(type,2,DNS_T_MX); + else if (case_equals(s,"ptr")) byte_copy(type,2,DNS_T_PTR); + else if (case_equals(s,"txt")) byte_copy(type,2,DNS_T_TXT); + else if (case_equals(s,"cname")) byte_copy(type,2,DNS_T_CNAME); + else if (case_equals(s,"soa")) byte_copy(type,2,DNS_T_SOA); + else if (case_equals(s,"hinfo")) byte_copy(type,2,DNS_T_HINFO); + else if (case_equals(s,"rp")) byte_copy(type,2,DNS_T_RP); + else if (case_equals(s,"sig")) byte_copy(type,2,DNS_T_SIG); + else if (case_equals(s,"key")) byte_copy(type,2,DNS_T_KEY); + else if (case_equals(s,"aaaa")) byte_copy(type,2,DNS_T_AAAA); + else if (case_equals(s,"axfr")) byte_copy(type,2,DNS_T_AXFR); + else + return 0; + + return 1; +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/parsetype.h b/NONE-CKUBU/src/djbdns/djbdns-1.05/parsetype.h new file mode 100644 index 0000000..4851725 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/parsetype.h @@ -0,0 +1,6 @@ +#ifndef PARSETYPE_H +#define PARSETYPE_H + +extern int parsetype(char *,char *); + +#endif diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/parsetype.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/parsetype.o new file mode 100644 index 0000000000000000000000000000000000000000..643b2ae24ae48a11c9bcf49edbfb6be7069c82e3 GIT binary patch literal 3896 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 literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/pickdns-conf b/NONE-CKUBU/src/djbdns/djbdns-1.05/pickdns-conf new file mode 100755 index 0000000000000000000000000000000000000000..9137da18683307c3373285a535482f7187eceb58 GIT binary patch literal 15784 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 f)PHu7_Pb +#include +#include "strerr.h" +#include "exit.h" +#include "auto_home.h" +#include "generic-conf.h" + +#define FATAL "pickdns-conf: fatal: " + +void usage(void) +{ + strerr_die1x(100,"pickdns-conf: usage: pickdns-conf acct logacct /pickdns myip"); +} + +char *dir; +char *user; +char *loguser; +struct passwd *pw; +char *myip; + +int main(int argc,char **argv) +{ + user = argv[1]; + if (!user) usage(); + loguser = argv[2]; + if (!loguser) usage(); + dir = argv[3]; + if (!dir) usage(); + if (dir[0] != '/') usage(); + myip = argv[4]; + if (!myip) usage(); + + pw = getpwnam(loguser); + if (!pw) + strerr_die3x(111,FATAL,"unknown account ",loguser); + + init(dir,FATAL); + makelog(loguser,pw->pw_uid,pw->pw_gid); + + makedir("env"); + perm(02755); + start("env/ROOT"); outs(dir); outs("/root\n"); finish(); + perm(0644); + start("env/IP"); outs(myip); outs("\n"); finish(); + perm(0644); + + start("run"); + outs("#!/bin/sh\nexec 2>&1\nexec envuidgid "); outs(user); + outs(" envdir ./env softlimit -d250000 "); + outs(auto_home); outs("/bin/pickdns\n"); + finish(); + perm(0755); + + makedir("root"); + perm(02755); + start("root/data"); + finish(); + perm(0644); + start("root/Makefile"); + outs("data.cdb: data\n"); + outs("\t"); outs(auto_home); outs("/bin/pickdns-data\n"); + finish(); + perm(0644); + + _exit(0); +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/pickdns-conf.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/pickdns-conf.o new file mode 100644 index 0000000000000000000000000000000000000000..7a4bff1c4e2f7009a0d21df02e42d49c1a4a53c8 GIT binary patch literal 5176 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 vK!~Ltx_~6=- literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/pickdns-data.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/pickdns-data.c new file mode 100644 index 0000000..60cabb0 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/pickdns-data.c @@ -0,0 +1,230 @@ +#include +#include +#include +#include +#include "buffer.h" +#include "exit.h" +#include "cdb_make.h" +#include "open.h" +#include "alloc.h" +#include "gen_allocdefs.h" +#include "stralloc.h" +#include "getln.h" +#include "case.h" +#include "strerr.h" +#include "str.h" +#include "byte.h" +#include "scan.h" +#include "fmt.h" +#include "ip4.h" +#include "dns.h" + +#define FATAL "pickdns-data: fatal: " + +void nomem(void) +{ + strerr_die2x(111,FATAL,"out of memory"); +} + +void ipprefix_cat(stralloc *out,char *s) +{ + unsigned long u; + char ch; + unsigned int j; + + for (;;) + if (*s == '.') + ++s; + else { + j = scan_ulong(s,&u); + if (!j) return; + s += j; + ch = u; + if (!stralloc_catb(out,&ch,1)) nomem(); + } +} + +struct address { + char *name; + unsigned int namelen; + char ip[4]; + char location[2]; +} ; + +int address_diff(struct address *p,struct address *q) +{ + int r; + + r = byte_diff(p->location,2,q->location); + if (r < 0) return -1; + if (r > 0) return 1; + if (p->namelen < q->namelen) return -1; + if (p->namelen > q->namelen) return 1; + return case_diffb(p->name,p->namelen,q->name); +} + +void address_sort(struct address *z,unsigned int n) +{ + unsigned int i; + unsigned int j; + unsigned int p; + unsigned int q; + struct address t; + + i = j = n; + --z; + + while (j > 1) { + if (i > 1) { --i; t = z[i]; } + else { t = z[j]; z[j] = z[i]; --j; } + q = i; + while ((p = q * 2) < j) { + if (address_diff(&z[p + 1],&z[p]) >= 0) ++p; + z[q] = z[p]; q = p; + } + if (p == j) { + z[q] = z[p]; q = p; + } + while ((q > i) && (address_diff(&t,&z[p = q/2]) > 0)) { + z[q] = z[p]; q = p; + } + z[q] = t; + } +} + +GEN_ALLOC_typedef(address_alloc,struct address,s,len,a) +GEN_ALLOC_readyplus(address_alloc,struct address,s,len,a,i,n,x,30,address_alloc_readyplus) +GEN_ALLOC_append(address_alloc,struct address,s,len,a,i,n,x,30,address_alloc_readyplus,address_alloc_append) + +static address_alloc x; + +int fd; +buffer b; +char bspace[1024]; + +int fdcdb; +struct cdb_make cdb; +static stralloc key; +static stralloc result; + +static stralloc line; +int match = 1; +unsigned long linenum = 0; + +#define NUMFIELDS 3 +static stralloc f[NUMFIELDS]; + +char strnum[FMT_ULONG]; + +void syntaxerror(const char *why) +{ + strnum[fmt_ulong(strnum,linenum)] = 0; + strerr_die4x(111,FATAL,"unable to parse data line ",strnum,why); +} +void die_datatmp(void) +{ + strerr_die2sys(111,FATAL,"unable to create data.tmp: "); +} + +int main() +{ + struct address t; + int i; + int j; + int k; + char ch; + + umask(022); + + if (!address_alloc_readyplus(&x,0)) nomem(); + + fd = open_read("data"); + if (fd == -1) strerr_die2sys(111,FATAL,"unable to open data: "); + buffer_init(&b,buffer_unixread,fd,bspace,sizeof bspace); + + fdcdb = open_trunc("data.tmp"); + if (fdcdb == -1) die_datatmp(); + if (cdb_make_start(&cdb,fdcdb) == -1) die_datatmp(); + + while (match) { + ++linenum; + if (getln(&b,&line,&match,'\n') == -1) + strerr_die2sys(111,FATAL,"unable to read line: "); + + while (line.len) { + ch = line.s[line.len - 1]; + if ((ch != ' ') && (ch != '\t') && (ch != '\n')) break; + --line.len; + } + if (!line.len) continue; + + j = 1; + for (i = 0;i < NUMFIELDS;++i) { + if (j >= line.len) { + if (!stralloc_copys(&f[i],"")) nomem(); + } + else { + k = byte_chr(line.s + j,line.len - j,':'); + if (!stralloc_copyb(&f[i],line.s + j,k)) nomem(); + j += k + 1; + } + } + + switch(line.s[0]) { + default: + syntaxerror(": unrecognized leading character"); + case '#': + break; + case '-': + break; + case '+': + byte_zero(&t,sizeof t); + if (!dns_domain_fromdot(&t.name,f[0].s,f[0].len)) nomem(); + t.namelen = dns_domain_length(t.name); + case_lowerb(t.name,t.namelen); + if (!stralloc_0(&f[1])) nomem(); + if (!ip4_scan(f[1].s,t.ip)) syntaxerror(": malformed IP address"); + if (!stralloc_0(&f[2])) nomem(); + if (!stralloc_0(&f[2])) nomem(); + byte_copy(t.location,2,f[2].s); + if (!address_alloc_append(&x,&t)) nomem(); + break; + case '%': + if (!stralloc_0(&f[0])) nomem(); + if (!stralloc_0(&f[0])) nomem(); + if (!stralloc_copyb(&result,f[0].s,2)) nomem(); + if (!stralloc_0(&f[1])) nomem(); + if (!stralloc_copys(&key,"%")) nomem(); + ipprefix_cat(&key,f[1].s); + if (cdb_make_add(&cdb,key.s,key.len,result.s,result.len) == -1) + die_datatmp(); + break; + } + } + + close(fd); + address_sort(x.s,x.len); + + i = 0; + while (i < x.len) { + for (j = i + 1;j < x.len;++j) + if (address_diff(x.s + i,x.s + j)) + break; + if (!stralloc_copys(&key,"+")) nomem(); + if (!stralloc_catb(&key,x.s[i].location,2)) nomem(); + if (!stralloc_catb(&key,x.s[i].name,x.s[i].namelen)) nomem(); + if (!stralloc_copys(&result,"")) nomem(); + while (i < j) + if (!stralloc_catb(&result,x.s[i++].ip,4)) nomem(); + if (cdb_make_add(&cdb,key.s,key.len,result.s,result.len) == -1) + die_datatmp(); + } + + if (cdb_make_finish(&cdb) == -1) die_datatmp(); + if (fsync(fdcdb) == -1) die_datatmp(); + if (close(fdcdb) == -1) die_datatmp(); /* NFS stupidity */ + if (rename("data.tmp","data.cdb") == -1) + strerr_die2sys(111,FATAL,"unable to move data.tmp to data.cdb: "); + + _exit(0); +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/pickdns-data.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/pickdns-data.o new file mode 100644 index 0000000000000000000000000000000000000000..fa39dfa570b4be0352781c1ff5c44d9e8ada7ac4 GIT binary patch literal 14320 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 EANc4&Qvd(} literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/pickdns.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/pickdns.c new file mode 100644 index 0000000..28c4ba5 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/pickdns.c @@ -0,0 +1,101 @@ +#include +#include "byte.h" +#include "case.h" +#include "dns.h" +#include "open.h" +#include "cdb.h" +#include "response.h" + +const char *fatal = "pickdns: fatal: "; +const char *starting = "starting pickdns\n"; + +static char seed[128]; + +void initialize(void) +{ + dns_random_init(seed); +} + +static struct cdb c; +static char key[258]; +static char data[512]; + +static int doit(char *q,char qtype[2],char ip[4]) +{ + int r; + uint32 dlen; + unsigned int qlen; + int flaga; + int flagmx; + + qlen = dns_domain_length(q); + if (qlen > 255) return 0; /* impossible */ + + flaga = byte_equal(qtype,2,DNS_T_A); + flagmx = byte_equal(qtype,2,DNS_T_MX); + if (byte_equal(qtype,2,DNS_T_ANY)) flaga = flagmx = 1; + if (!flaga && !flagmx) goto REFUSE; + + key[0] = '%'; + byte_copy(key + 1,4,ip); + + r = cdb_find(&c,key,5); + if (!r) r = cdb_find(&c,key,4); + if (!r) r = cdb_find(&c,key,3); + if (!r) r = cdb_find(&c,key,2); + if (r == -1) return 0; + + key[0] = '+'; + byte_zero(key + 1,2); + if (r && (cdb_datalen(&c) == 2)) + if (cdb_read(&c,key + 1,2,cdb_datapos(&c)) == -1) return 0; + + byte_copy(key + 3,qlen,q); + case_lowerb(key + 3,qlen + 3); + + r = cdb_find(&c,key,qlen + 3); + if (!r) { + byte_zero(key + 1,2); + r = cdb_find(&c,key,qlen + 3); + } + if (!r) goto REFUSE; + if (r == -1) return 0; + dlen = cdb_datalen(&c); + + if (dlen > 512) dlen = 512; + if (cdb_read(&c,data,dlen,cdb_datapos(&c)) == -1) return 0; + + if (flaga) { + dns_sortip(data,dlen); + if (dlen > 12) dlen = 12; + while (dlen >= 4) { + dlen -= 4; + if (!response_rstart(q,DNS_T_A,5)) return 0; + if (!response_addbytes(data + dlen,4)) return 0; + response_rfinish(RESPONSE_ANSWER); + } + } + + return 1; + + + REFUSE: + response[2] &= ~4; + response[3] &= ~15; + response[3] |= 5; + return 1; +} + +int respond(char *q,char qtype[2],char ip[4]) +{ + int fd; + int result; + + fd = open_read("data.cdb"); + if (fd == -1) return 0; + cdb_init(&c,fd); + result = doit(q,qtype,ip); + cdb_free(&c); + close(fd); + return result; +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/pickdns.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/pickdns.o new file mode 100644 index 0000000000000000000000000000000000000000..1d94ea0648f7936770a4e8b5bdc1ab53792826fb GIT binary patch literal 5000 zcmbtXZ){Ul6u(^u3>~}yqKJRi#9}Z&L%|?okWC6Jriv1c5RuWfudJ?Xm$nEaC^c<~ z&xsP{i-{o^Nc4jrFfk;KeL#Qw6ofU$iC)Ahq&JFeL^eznMPcI#a`HbcQ#)16) z?8o**9sKx9(gk2vz*}DvACRcOB>Bg&64IntGKyFwe<@^LKY_K7nVp>gJuyd8`muik z$JL~ZC2PPaG=O1#v|<$IS1J{9t(ecVBMfGzs)ol)2X7Oi_;abvif0qbhjqxGZG zzj#|Xqi`KON~y1IFs%fc3k~Kw4Q~RlH&p>mh@q z@Cc(hhj!&OD2!&|zmnhStrsoEzBB$(anRUTnmlY2FQM{?43?XN^igS>AG(%5KjAHj zm;Jzr?d`|fRg<9NLY0aaLErCo(jG%CuAydY4U|6ym0Yg>sLaby{qoO1HkwOWly&!hu&nMG-u%VV)-THSU_y15b1I|5+7b97yh}{*!m+9@! zhC86mrtP+qducNf_GQiOS>cmioSN`;WHK;L$$0`3eDRQIW@mdW9qu-TFOur+Hj`kU zOl3`9+p{k&fEq-)s=57-o(F94b-;yGrG*BsVyzTuQu^4v4<6k5x{Tny0$E6o@g>DL z4G4nFvKuiETEw+5;xGYvJhmru@i261#h*LFW-KHk#z&WI&++|)>G4Yh3~34v@Ksp? z1I&Ms3PPXl=W94}QMg@2eLMnGxlC~GmUJzn+QI^86Wo20FFsx4uUG z(3b7Fej5SPb3)(Gk<(@zD57&s(CHY`Q?-(+!JP(}wnS(?X1`UAsy})x9P711_NO$_ zAUU537(V*^aeZpVzjh}mK=6B`iZ)bLc`&A|Kxa=C4(7e8(BzOt|g`&vz8`GaVl0cOwXbIDTpvKZGC%`cY4( z!xFXmct>OYF~XV8JLbFt|2vJ(F@AC2-&FWmpHnpEBL?$F{3ziQ>AXXHCOn*H6X9H+ z67gqhc#iPdiXS{P+0Ww|{}l08D10@aRSJHO;%BXbBmW@z*+MwyIY4+q;j8n?IPkYC ze7q}g{<}1OiToEdJV&^t_)+U{K*2HpL&X0~!w(Stx#oX}#z!ogN0>Xa63LoRL#1y^y3>`2PlfR~g5>j^dHO_W4Xxmq<{<`8)qF6Cwd& literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/printpacket.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/printpacket.c new file mode 100644 index 0000000..7571e08 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/printpacket.c @@ -0,0 +1,90 @@ +#include "uint16.h" +#include "uint32.h" +#include "error.h" +#include "byte.h" +#include "dns.h" +#include "printrecord.h" +#include "printpacket.h" + +static char *d; + +#define X(s) if (!stralloc_cats(out,s)) return 0; +#define NUM(u) if (!stralloc_catulong0(out,u,0)) return 0; + +unsigned int printpacket_cat(stralloc *out,char *buf,unsigned int len) +{ + uint16 numqueries; + uint16 numanswers; + uint16 numauthority; + uint16 numglue; + unsigned int pos; + char data[12]; + uint16 type; + + pos = dns_packet_copy(buf,len,0,data,12); if (!pos) return 0; + + uint16_unpack_big(data + 4,&numqueries); + uint16_unpack_big(data + 6,&numanswers); + uint16_unpack_big(data + 8,&numauthority); + uint16_unpack_big(data + 10,&numglue); + + NUM(len) + X(" bytes, ") + NUM(numqueries) + X("+") + NUM(numanswers) + X("+") + NUM(numauthority) + X("+") + NUM(numglue) + X(" records") + + if (data[2] & 128) X(", response") + if (data[2] & 120) X(", weird op") + if (data[2] & 4) X(", authoritative") + if (data[2] & 2) X(", truncated") + if (data[2] & 1) X(", weird rd") + if (data[3] & 128) X(", weird ra") + switch(data[3] & 15) { + case 0: X(", noerror"); break; + case 3: X(", nxdomain"); break; + case 4: X(", notimp"); break; + case 5: X(", refused"); break; + default: X(", weird rcode"); + } + if (data[3] & 112) X(", weird z") + + X("\n") + + while (numqueries) { + --numqueries; + X("query: ") + + pos = dns_packet_getname(buf,len,pos,&d); if (!pos) return 0; + pos = dns_packet_copy(buf,len,pos,data,4); if (!pos) return 0; + + if (byte_diff(data + 2,2,DNS_C_IN)) { + X("weird class") + } + else { + uint16_unpack_big(data,&type); + NUM(type) + X(" ") + if (!dns_domain_todot_cat(out,d)) return 0; + } + X("\n") + } + + for (;;) { + if (numanswers) { --numanswers; X("answer: ") } + else if (numauthority) { --numauthority; X("authority: ") } + else if (numglue) { --numglue; X("additional: ") } + else break; + + pos = printrecord_cat(out,buf,len,pos,0,0); + if (!pos) return 0; + } + + if (pos != len) { errno = error_proto; return 0; } + return 1; +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/printpacket.h b/NONE-CKUBU/src/djbdns/djbdns-1.05/printpacket.h new file mode 100644 index 0000000..8c8946d --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/printpacket.h @@ -0,0 +1,8 @@ +#ifndef PRINTPACKET_H +#define PRINTPACKET_H + +#include "stralloc.h" + +extern unsigned int printpacket_cat(stralloc *,char *,unsigned int); + +#endif diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/printpacket.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/printpacket.o new file mode 100644 index 0000000000000000000000000000000000000000..8eb51490b083b1de98ff26d38e9c61c4a5434728 GIT binary patch literal 5216 zcmbtYZ){Ul6u)gZ*v6kXP;i;cR!M_^qfm54iI^fA6w)aW1&m9|Tl)$P-FxHp6}Cwb zU7z7OCxj0g{1^RV<~PMZfYH&25c#5pL?s#mBpN6|5o2_UTF-gCx4XT4?~^xK?>WEo zJLjHv?s@mNd#WqC+UxNUHaz4(GO00?kfl>6<*+S=$xJehM68~`R}m{6I2W;QMy*8P zVic4sE3L1imJ#?RYV8S3thIiR3}4$4I=k}Nba0JWmpZMVqt+i+FpimDYyDuI%FYkv zBO^V51(A_-U}Myw0AV&;v}aZF$mka7dXVo^E@D}>JSunce&H%hrJmD~;|uAg$7 zE4lSf+~58!<&dBID_SdC;J!`Umfg^6U2 zqU@2(4KSmR4}98)w0|Dx!xyFD37?ev5#*%Q)(MOQ-$5IgdCB|}YE-rGBe?K51R3i$ z=2TfjT&~?velM-Kl)DZ6j&=rGlMp&r4@(SR@i70S1%@*9+CRnOaoiy5YDK$9xwBwd zd923XyGz!m6;|t%lsf|UQ2rzI9ft=ZQLD(dd@Wn6yo?EC5i}o%jVbJKvP?zG2C!h~ z&5c->?LgQwb1V02v4eN62^~i|Ftf@2%I+%=z_BbXP!?K$GY`cugD7W>?V6r4 zWFxf;O@^LT{fJuSwcvW6N!|O(o{JO%H$PtD^?7KXJ{kw3^aOt)2G&9 zF9!f?u`PszYe87|?3CfD-J>+0aY#b|&dcS`He@fI)%@*^o)F7qSoP8Y)PKFieFR$;$RvQkVM_ z5{zqoeToX6s%9v`H4i_wIAh519W>$pG5Nt4+iQvtBTRL>7M!h-lTo}K{_x}z$Nm{5 zBu@k5MT_gyQDPIF=TjW+ii)uh_rPI@YqbLhW4igX^;jrT4}k&mTE+-;X6t_=;K;?n z<}j7O^_O)jn3+f^~bMF%%9<#0TXiq zh`d49Z$pI}B6lm;L=5RCs6Wd55V^C!DAox1%)g&^23hn+U926tywiZ6gfvnkw&OJT z6Q92xFsJqNSTGnTOH=t%T)%7(1mx9_8$|)ORbSOplvqB;OfWyE9Y);wCGl0g&2VqP z5*{uNs{^j=vpb`d1OMrR6W3|@2v)6f;6Bdgo-0gKy903X%s@|k@0{>eF8C%FJmG@x zcEO)^!C!R2-*Ul^y5OW=PpL*foXv_6jFSYf$KY}#2{jWdnPYLSe~@H>9=bP{RS}H! zrnV8d3gmQJiz7Xo*3@lFE1(P?Vw+;9ctPN;9ZRH=N!wVuT4RQm&L9&%dvi4Gcui?}3gT$#?x}j*mUg_~$vCk8_pcEDr1BUpYP>2Y(Xaz+;4uGne9GoK}v{$LZj3 zKF&ifan^BsK90=cd>mDXgJ&I%T^yf}b6Mc`l<4HT3%{10qwIMPQT_~y;ljTt@N=c`jq@$X=i?Lv{szjw;li(@O~dN2n(`Ydj`if@ z&lC7NDSwd*{{ex&obo$e_)iG@MU)?R;SULX_C4(x7ye;^&wdBJ>B6`FodG$p`Xp&S xc^7_x!!b7Nlj|Igzg8K}4sjO$6B>U8J>0A6PjSY7pYoTu@cq<|eERCx$bU$qlw|+_ literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/printrecord.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/printrecord.c new file mode 100644 index 0000000..4bc7c3e --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/printrecord.c @@ -0,0 +1,125 @@ +#include "uint16.h" +#include "uint32.h" +#include "error.h" +#include "byte.h" +#include "dns.h" +#include "printrecord.h" +#include "ip6.h" + +static char *d; + +unsigned int printrecord_cat(stralloc *out,const char *buf,unsigned int len,unsigned int pos,const char *q,const char qtype[2]) +{ + const char *x; + char misc[20]; + uint16 datalen; + uint16 u16; + uint32 u32; + unsigned int newpos; + int i; + unsigned char ch; + + pos = dns_packet_getname(buf,len,pos,&d); if (!pos) return 0; + pos = dns_packet_copy(buf,len,pos,misc,10); if (!pos) return 0; + uint16_unpack_big(misc + 8,&datalen); + newpos = pos + datalen; + + if (q) { + if (!dns_domain_equal(d,q)) + return newpos; + if (byte_diff(qtype,2,misc) && byte_diff(qtype,2,DNS_T_ANY)) + return newpos; + } + + if (!dns_domain_todot_cat(out,d)) return 0; + if (!stralloc_cats(out," ")) return 0; + uint32_unpack_big(misc + 4,&u32); + if (!stralloc_catulong0(out,u32,0)) return 0; + + if (byte_diff(misc + 2,2,DNS_C_IN)) { + if (!stralloc_cats(out," weird class\n")) return 0; + return newpos; + } + + x = 0; + if (byte_equal(misc,2,DNS_T_NS)) x = " NS "; + if (byte_equal(misc,2,DNS_T_PTR)) x = " PTR "; + if (byte_equal(misc,2,DNS_T_CNAME)) x = " CNAME "; + if (x) { + pos = dns_packet_getname(buf,len,pos,&d); if (!pos) return 0; + if (!stralloc_cats(out,x)) return 0; + if (!dns_domain_todot_cat(out,d)) return 0; + } + else if (byte_equal(misc,2,DNS_T_MX)) { + if (!stralloc_cats(out," MX ")) return 0; + pos = dns_packet_copy(buf,len,pos,misc,2); if (!pos) return 0; + pos = dns_packet_getname(buf,len,pos,&d); if (!pos) return 0; + uint16_unpack_big(misc,&u16); + if (!stralloc_catulong0(out,u16,0)) return 0; + if (!stralloc_cats(out," ")) return 0; + if (!dns_domain_todot_cat(out,d)) return 0; + } + else if (byte_equal(misc,2,DNS_T_SOA)) { + if (!stralloc_cats(out," SOA ")) return 0; + pos = dns_packet_getname(buf,len,pos,&d); if (!pos) return 0; + if (!dns_domain_todot_cat(out,d)) return 0; + if (!stralloc_cats(out," ")) return 0; + pos = dns_packet_getname(buf,len,pos,&d); if (!pos) return 0; + if (!dns_domain_todot_cat(out,d)) return 0; + pos = dns_packet_copy(buf,len,pos,misc,20); if (!pos) return 0; + for (i = 0;i < 5;++i) { + if (!stralloc_cats(out," ")) return 0; + uint32_unpack_big(misc + 4 * i,&u32); + if (!stralloc_catulong0(out,u32,0)) return 0; + } + } + else if (byte_equal(misc,2,DNS_T_A)) { + if (datalen != 4) { errno = error_proto; return 0; } + if (!stralloc_cats(out," A ")) return 0; + pos = dns_packet_copy(buf,len,pos,misc,4); if (!pos) return 0; + for (i = 0;i < 4;++i) { + ch = misc[i]; + if (i) if (!stralloc_cats(out,".")) return 0; + if (!stralloc_catulong0(out,ch,0)) return 0; + } + } + else if (byte_equal(misc,2,DNS_T_AAAA)) { + char ip6str[IP6_FMT]; + int stringlen; + if (datalen != 16) { errno = error_proto; return 0; } + if (!stralloc_cats(out," AAAA ")) return 0; + pos = dns_packet_copy(buf,len,pos,misc,16); if (!pos) return 0; + stringlen=ip6_fmt(ip6str,misc); + if (!stralloc_catb(out,ip6str,stringlen)) return 0; + } + else { + if (!stralloc_cats(out," ")) return 0; + uint16_unpack_big(misc,&u16); + if (!stralloc_catulong0(out,u16,0)) return 0; + if (!stralloc_cats(out," ")) return 0; + while (datalen--) { + pos = dns_packet_copy(buf,len,pos,misc,1); if (!pos) return 0; + if ((misc[0] >= 33) && (misc[0] <= 126) && (misc[0] != '\\')) { + if (!stralloc_catb(out,misc,1)) return 0; + } + else { + ch = misc[0]; + misc[3] = '0' + (7 & ch); ch >>= 3; + misc[2] = '0' + (7 & ch); ch >>= 3; + misc[1] = '0' + (7 & ch); + misc[0] = '\\'; + if (!stralloc_catb(out,misc,4)) return 0; + } + } + } + + if (!stralloc_cats(out,"\n")) return 0; + if (pos != newpos) { errno = error_proto; return 0; } + return newpos; +} + +unsigned int printrecord(stralloc *out,const char *buf,unsigned int len,unsigned int pos,const char *q,const char qtype[2]) +{ + if (!stralloc_copys(out,"")) return 0; + return printrecord_cat(out,buf,len,pos,q,qtype); +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/printrecord.h b/NONE-CKUBU/src/djbdns/djbdns-1.05/printrecord.h new file mode 100644 index 0000000..f6bc9f7 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/printrecord.h @@ -0,0 +1,9 @@ +#ifndef PRINTRECORD_H +#define PRINTRECORD_H + +#include "stralloc.h" + +extern unsigned int printrecord_cat(stralloc *,const char *,unsigned int,unsigned int,const char *,const char *); +extern unsigned int printrecord(stralloc *,const char *,unsigned int,unsigned int,const char *,const char *); + +#endif diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/printrecord.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/printrecord.o new file mode 100644 index 0000000000000000000000000000000000000000..228e06a305a63356407cd38715231239ca9ebdd2 GIT binary patch literal 6368 zcmbtYeQZs z0wyG=Yx2vbCbH0n(%{0aO@jRR)agoa=k> zFVD96$FAh}?)}~0`MBqtd+$qjt+zMK@%e;qKCwnrM;aAks-@Zw%WhcA7xRSeCd>=A zn=+@|<6Z8Do$lW(x6eFj5pvpg9rNm8Cfn{#^Lm$i+j{!)J{r2ON8I;p_loTvwcQg_ z%qUKduUa3PiMZFTQlB|&l~U%IT}qhS?b2_}-9)fUFPeMg`(^W4dRtGw!K#iL?YrqE ztg>x}I}gpJuGX&fx)HP0`L$KvX@;$`WAeQOn-QbQgwv_Vzh^; zt{b`COxv_Z_Atpd2>nr`@H3jN6XgQIHJUO6x@YR7ko0V>uV)p*m3_E?;^m&16|qY0 z7fMc_8Me#u1vN%*+$0UOH{A1;eAaA@cbSks+GMZz=lE+JpXqD5LV9nVQe+l=B@LC+l(=Won%w5`6QhlypC`^+}3y|9iWZ8rCH@VWQ`WnsEZ z+?ot*mkK_vZa38vT}_}d(QEdX*Uk(UPYqJ&`i;VBG6ezVyQNN9_*nKJ9kb=N=U07q zTVVH%KIgt8OqL6&`ab@P>9_ww!8|#6(f>zENMHU!bAGa8PsCg&u{*=H<+UA0IGr@r zdFimxUZ6go-__gcFV)Md%e^IUD|t~_`O6P?xgW{cbh__!x+iS+O_hl82l#$!;rpqL z@27<}^#V2>;)`v%N;<6k8xPZ+B)Z&pyWFXWI~{Sa+3s!I{ny9KO-m2eV@B{jOy^Fk z5O)b-2ywR%i$p*Kwk1chi9kFR%jM>ZK+k4^zSX;lp6hx#yVujZdkZ}_f3uUG^b69H zT0rpKD0pLX^L>Al@NIAN`CFS?o+U#jVT_+rZpWw- z8=$w7t-ObIFPluof=+U~BZ7&T6BEIKTuubDnaZH@W-(GnFq4zR(ZOtNG%14d%;;z` zO_J%1lMFuE^X&(7PAtAv`SgFh0wl{3;LuXhJ~suTx^V9crn( zDcjPH8j6J#SUjL`9bN^C=R9^b?zQzbnqZw?`F%=W+tc#iafl{({d^H()AHI+Jy)p~ zJrZICbs1Yyg=Fu5vcJZIYkB?drg`pr?O#>$!yb9B{}#=AW5OZ_l;a&rp5xCdwY*-} zcL>wID5`vIQN(rx>u{f}gR#gqZHNcZyteM4IdATmuI0x-mb+g0da+~PFfW+e9u?S6 zQhy%(v|D=ppCGKB{j2k7f*OB~VDk)dYF3|lP2%5l+SN9H%_=G!e_c=5zj_&FoDR@B z&0n*dau8b1v=M{ z`X@Ymz2-L?@ZSPHb6FR+Gk~*QeR93mK+iScvmW`EH@$BH&U)1KBAV60`Gx*3P`J() ze$1PrL+tjL&i4bDY0KKW-<1kN#W(9QWxA=)rilssiR|jOUjD$9=sVaNHN`6t3eY zoutP%fRBC-1E1r-bKJ7P$2jZ)KF49PWDD^F;G_P1z{mCe3i!C*7XimQc^Po5lRtre z_D8q3fRFxM06zM23Ha#GEx^&ACMC@ILVrxaG4E>>?#;^v;G>^U0FLM35a5{iGU(?# zD!0W?fRA}R0DO*HPzCM~@X?<$faAJu0FM6L!%k4s>s?YAiZ3XfAjKMy$izaQ|=k`8@t{0?yb_SX2M!u7h8S#ccrX!ktexPRXV9OHJg zfquU#Zg1RH0*>qY9^mNz-xaR?m;Y#|MO*~_=U~0v>hC(X%YTpPI0UHAjrH)HZkFn3 ITz?P#589Q^1poj5 literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/prot.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/prot.c new file mode 100644 index 0000000..0a8a373 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/prot.c @@ -0,0 +1,19 @@ +#include "hasshsgr.h" +#include "prot.h" + +int prot_gid(int gid) +{ +#ifdef HASSHORTSETGROUPS + short x[2]; + x[0] = gid; x[1] = 73; /* catch errors */ + if (setgroups(1,x) == -1) return -1; +#else + if (setgroups(1,&gid) == -1) return -1; +#endif + return setgid(gid); /* _should_ be redundant, but on some systems it isn't */ +} + +int prot_uid(int uid) +{ + return setuid(uid); +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/prot.h b/NONE-CKUBU/src/djbdns/djbdns-1.05/prot.h new file mode 100644 index 0000000..7dd0503 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/prot.h @@ -0,0 +1,7 @@ +#ifndef PROT_H +#define PROT_H + +extern int prot_gid(int); +extern int prot_uid(int); + +#endif diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/prot.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/prot.o new file mode 100644 index 0000000000000000000000000000000000000000..27e22d533eba40fa3da780d71f46190b2a4f614e GIT binary patch literal 1576 zcmbW1&ubG=5XWbmXj2=sN)LiUBUDjrA8xHuJd}l28$mn>9z2Cjy8VGBDZ8(bieMpL zL{1Ix^OX6C(l^LF>`!zYiXf`C*4TBot6lqhmw zl;eo1G(+Lw7rdPd3-5AT@BglZgZf9iSbqOzvHS&PKN0Dl4DIX(M&Tg$>-}$)uSD~C z6;bf|83nz$pj4f%eBvVTs}h?Q4F$d`zJcC6KbN~(8ygR5H#d{!e%z_8n!9FYIW*y| z!Xz@;QQO8%);2Blo?2=0DmFIhSu)$Pjmb2#j7(0Gy~a)&w-Yk0Zo8dyIHl9IiP?Jk zd^xjm>!oyZdR606%;>DQL?r&Y$BV;`;T1N^V|QeIK2w-=A?H|QpNjaGMc)u!5?|G^ z8lLv|TH-j?JZ=4bu0>x{{J3%~j`puH?O*+n4ZkPEPUQS|BoXHa(t16A#0>lU@?F4! z7w~f*bKGYr`Qg>6>*rqNfImCrYW)i>6z$i;_h*OHNQSZ|1+&a>cK`e{%qH#MlliT1 z+!cR+H|E;NE7PB$%hWDSoEZ9;)Cu^c8wQsqbz#w^(JB8Al*s*)6fw->lGBf7;9mT1 z4HbBAkgu`)AH?h$Kg!q~$!)eKaXLu5*0gffINaZ+EU{3)jorfEO}mE&86p6MTo;Wy j$DRHi7IM$wRfp?Dk&nC9{2JR3d>8KfvzF5_*WUjDo{n{Q literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/qlog.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/qlog.c new file mode 100644 index 0000000..60816df --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/qlog.c @@ -0,0 +1,63 @@ +#include "buffer.h" +#include "qlog.h" + +static void put(char c) +{ + buffer_put(buffer_2,&c,1); +} + +static void hex(unsigned char c) +{ + put("0123456789abcdef"[(c >> 4) & 15]); + put("0123456789abcdef"[c & 15]); +} + +static void octal(unsigned char c) +{ + put('\\'); + put('0' + ((c >> 6) & 7)); + put('0' + ((c >> 3) & 7)); + put('0' + (c & 7)); +} + +void qlog(const char ip[16],uint16 port,const char id[2],const char *q,const char qtype[2],const char *result) +{ + char ch; + char ch2; + + { + int i; + for (i=0; i<16; ++i) hex(ip[i]); + } + put(':'); + hex(port >> 8); + hex(port & 255); + put(':'); + hex(id[0]); + hex(id[1]); + buffer_puts(buffer_2,result); + hex(qtype[0]); + hex(qtype[1]); + put(' '); + + if (!*q) + put('.'); + else + for (;;) { + ch = *q++; + while (ch--) { + ch2 = *q++; + if ((ch2 >= 'A') && (ch2 <= 'Z')) + ch2 += 32; + if (((ch2 >= 'a') && (ch2 <= 'z')) || ((ch2 >= '0') && (ch2 <= '9')) || (ch2 == '-') || (ch2 == '_')) + put(ch2); + else + octal(ch2); + } + if (!*q) break; + put('.'); + } + + put('\n'); + buffer_flush(buffer_2); +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/qlog.h b/NONE-CKUBU/src/djbdns/djbdns-1.05/qlog.h new file mode 100644 index 0000000..a1eb206 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/qlog.h @@ -0,0 +1,8 @@ +#ifndef QLOG_H +#define QLOG_H + +#include "uint16.h" + +extern void qlog(const char *,uint16,const char *,const char *,const char *,const char *); + +#endif diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/qlog.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/qlog.o new file mode 100644 index 0000000000000000000000000000000000000000..d67e333907640705a15f7921610be8181e22e145 GIT binary patch literal 3136 zcmbtVZ)hA<5PzFXb7^dEPpLH4N)}vA1heGQsIkU+o4ZRla8YOy6}%WP>75ZTNxj=Z zltKf0)GqO~U;OMJgnkjfi1$H?4W`sDMFN6~iWdB`!CLAEOC(9-%-i?whRqcO2X<%P zZ+EpRtc|%FmYdOUT5dt#Sn--I=X#gB ztyWj8N=83uEkBJ^wYr4rOU!Gzzn)9#2R#HV*Aomtoogy52y&gYoYC8@<$|tR&gHIE z^Mzse2lIK;y=9J@W5e#%am(Evjs1)pr`@C;O}lBmHE*aLW!wVxKK%f*oK?j;v9q&d zIh)ai>*-2C?-V=pJ+CD7&ZBAf2CpjZ-c+kw-h)6l)#`2U5XSk9a5C^XpOb;{jJI){ zQ_m>g4X~_bTW=Ksew)ismRjxi*0`5178UPnzTyL-c{LuBQmcJ>s(ec=cf-`w4mMIb ztt(0Q?-6%v{S)j<^jAr&4eV9VegV+ZX17}YlpB-h)$+$+HK;qo^SeJ%*NWEyT{$Z~ zF!j!c{t)_q4?EYwlqGUh5lRcLa1^n?d{Eg*(N8{2PQr!^G)y?j6~mSN=4e=4W%O5V5IAvJ(cDpa9fg*ekVK>c?Fpu z#}kR8T30eR^;&jL>oblRz1=Y*_K0sXW|ZEXwX;*8?V_(|q*crnvWA^ow3%@-YiF4; zRVp!~IFAdYLmF5jDK|5jFJ@043;nRb1x=ugX+c1Ef_ps*IOYt} z|7&~Y`}f70fr%$f&)bmB)AvOrx8`g2m24k<2pDy+-D|?Z_pwD z$I%8)uzx&ejrLy?#AD#665OBqsExd4_SX)@q#fEd1>X~DSP9nG=nEshN2aW4EW3&1 z=f73L8`^bCeMgAN%T`OnjZke`bsXmyyu;|d_YSxQ_&rdMtb_kX0`|}y_;{ZhhsYj`GW+fdBy}D%rimwG|xqX(>&i2obuNRPWhVzr~E_Wpa%QxAozZWm3^56r};+- zPV;|6aLWIj;FN!n;FSLz!72Y2f>ZuK1gCuYBM|KO00JPWC_h1PntzPolwTw`<(COg v`R@~)@-Gma@;@Uu<*yK&^1mTC 255) return; + + byte_copy(key,2,type); + byte_copy(key + 2,len,d); + case_lowerb(key + 2,len); + + cache_set(key,len + 2,data,datalen,ttl); +} + +static char save_buf[8192]; +static unsigned int save_len; +static unsigned int save_ok; + +static void save_start(void) +{ + save_len = 0; + save_ok = 1; +} + +static void save_data(const char *buf,unsigned int len) +{ + if (!save_ok) return; + if (len > (sizeof save_buf) - save_len) { save_ok = 0; return; } + byte_copy(save_buf + save_len,len,buf); + save_len += len; +} + +static void save_finish(const char type[2],const char *d,uint32 ttl) +{ + if (!save_ok) return; + cachegeneric(type,d,save_buf,save_len,ttl); +} + + +static int typematch(const char rtype[2],const char qtype[2]) +{ + return byte_equal(qtype,2,rtype) || byte_equal(qtype,2,DNS_T_ANY); +} + +static uint32 ttlget(char buf[4]) +{ + uint32 ttl; + + uint32_unpack_big(buf,&ttl); + if (ttl > 1000000000) return 0; + if (ttl > 604800) return 604800; + return ttl; +} + + +static void cleanup(struct query *z) +{ + int j; + int k; + + dns_transmit_free(&z->dt); + for (j = 0;j < QUERY_MAXALIAS;++j) + dns_domain_free(&z->alias[j]); + for (j = 0;j < QUERY_MAXLEVEL;++j) { + dns_domain_free(&z->name[j]); + for (k = 0;k < QUERY_MAXNS;++k) + dns_domain_free(&z->ns[j][k]); + } +} + +static int rqa(struct query *z) +{ + int i; + + for (i = QUERY_MAXALIAS - 1;i >= 0;--i) + if (z->alias[i]) { + if (!response_query(z->alias[i],z->type,z->class)) return 0; + while (i > 0) { + if (!response_cname(z->alias[i],z->alias[i - 1],z->aliasttl[i])) return 0; + --i; + } + if (!response_cname(z->alias[0],z->name[0],z->aliasttl[0])) return 0; + return 1; + } + + if (!response_query(z->name[0],z->type,z->class)) return 0; + return 1; +} + +static int globalip(char *d,char ip[16]) +{ + if (dns_domain_equal(d,"\011localhost\0")) { + byte_copy(ip,4,"\177\0\0\1"); + return 1; + } + if (dd(d,"",ip) == 4) return 1; + return 0; +} + +static char *t1 = 0; +static char *t2 = 0; +static char *t3 = 0; +static char *cname = 0; +static char *referral = 0; +static unsigned int *records = 0; + +static int smaller(char *buf,unsigned int len,unsigned int pos1,unsigned int pos2) +{ + char header1[12]; + char header2[12]; + int r; + unsigned int len1; + unsigned int len2; + + pos1 = dns_packet_getname(buf,len,pos1,&t1); + dns_packet_copy(buf,len,pos1,header1,10); + pos2 = dns_packet_getname(buf,len,pos2,&t2); + dns_packet_copy(buf,len,pos2,header2,10); + + r = byte_diff(header1,4,header2); + if (r < 0) return 1; + if (r > 0) return 0; + + len1 = dns_domain_length(t1); + len2 = dns_domain_length(t2); + if (len1 < len2) return 1; + if (len1 > len2) return 0; + + r = case_diffb(t1,len1,t2); + if (r < 0) return 1; + if (r > 0) return 0; + + if (pos1 < pos2) return 1; + return 0; +} + +static int doit(struct query *z,int state) +{ + char key[257]; + char *cached; + unsigned int cachedlen; + char *buf; + unsigned int len; + const char *whichserver; + char header[24]; + char misc[20]; + unsigned int rcode; + unsigned int posanswers; + uint16 numanswers; + unsigned int posauthority; + uint16 numauthority; + unsigned int posglue; + uint16 numglue; + unsigned int pos; + unsigned int pos2; + uint16 datalen; + char *control; + char *d; + const char *dtype; + unsigned int dlen; + int flagout; + int flagcname; + int flagreferral; + int flagsoa; + uint32 ttl; + uint32 soattl; + uint32 cnamettl; + int i; + int j; + int k; + int p; + int q; + unsigned int ii; + + errno = error_io; + if (state == 1) goto HAVEPACKET; + if (state == -1) { + log_servfail(z->name[z->level]); + goto SERVFAIL; + } + + + NEWNAME: + if (++z->loop == 100) goto DIE; + d = z->name[z->level]; + dtype = z->level ? DNS_T_A : z->type; + dlen = dns_domain_length(d); + + if (globalip(d,misc)) { + if (z->level) { + for (k = 0;k < 256;k += 16) + if (byte_equal(z->servers[z->level - 1] + k,16,V6any)) { + byte_copy(z->servers[z->level - 1] + k,12,V4mappedprefix); + byte_copy(z->servers[z->level - 1] + k + 12,4,misc); + break; + } + goto LOWERLEVEL; + } + if (!rqa(z)) goto DIE; + if (typematch(DNS_T_A,dtype)) { + if (!response_rstart(d,DNS_T_A,655360)) goto DIE; + if (!response_addbytes(misc,4)) goto DIE; + response_rfinish(RESPONSE_ANSWER); + } + cleanup(z); + return 1; + } + + if (dns_domain_equal(d,"\0011\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\003ip6\003int\0")) { + if (z->level) goto LOWERLEVEL; + if (!rqa(z)) goto DIE; + if (typematch(DNS_T_PTR,dtype)) { + if (!response_rstart(d,DNS_T_PTR,655360)) goto DIE; + if (!response_addname("\016ipv6-localhost\0")) goto DIE; + if (!response_addname("\015ipv6-loopback\0")) goto DIE; + response_rfinish(RESPONSE_ANSWER); + } + cleanup(z); + return 1; + } + + if (dns_domain_equal(d,"\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\001e\001f\003ip6\003int\0")) { + if (z->level) goto LOWERLEVEL; + if (!rqa(z)) goto DIE; + if (typematch(DNS_T_PTR,dtype)) { + if (!response_rstart(d,DNS_T_PTR,655360)) goto DIE; + if (!response_addname("\015ipv6-localnet\0")) goto DIE; + response_rfinish(RESPONSE_ANSWER); + } + cleanup(z); + return 1; + } + + if (dns_domain_equal(d,"\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\001f\001f\003ip6\003int\0")) { + if (z->level) goto LOWERLEVEL; + if (!rqa(z)) goto DIE; + if (typematch(DNS_T_PTR,dtype)) { + if (!response_rstart(d,DNS_T_PTR,655360)) goto DIE; + if (!response_addname("\020ipv6-mcastprefix\0")) goto DIE; + response_rfinish(RESPONSE_ANSWER); + } + cleanup(z); + return 1; + } + + if (dns_domain_equal(d,"\0011\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0012\0010\001f\001f\003ip6\003int\0")) { + if (z->level) goto LOWERLEVEL; + if (!rqa(z)) goto DIE; + if (typematch(DNS_T_PTR,dtype)) { + if (!response_rstart(d,DNS_T_PTR,655360)) goto DIE; + if (!response_addname("\015ipv6-allnodes\0")) goto DIE; + response_rfinish(RESPONSE_ANSWER); + } + cleanup(z); + return 1; + } + + if (dns_domain_equal(d,"\0012\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0012\0010\001f\001f\003ip6\003int\0")) { + if (z->level) goto LOWERLEVEL; + if (!rqa(z)) goto DIE; + if (typematch(DNS_T_PTR,dtype)) { + if (!response_rstart(d,DNS_T_PTR,655360)) goto DIE; + if (!response_addname("\017ipv6-allrouters\0")) goto DIE; + response_rfinish(RESPONSE_ANSWER); + } + cleanup(z); + return 1; + } + + if (dns_domain_equal(d,"\0011\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0010\0012\0010\001f\001f\003ip6\003int\0")) { + if (z->level) goto LOWERLEVEL; + if (!rqa(z)) goto DIE; + if (typematch(DNS_T_PTR,dtype)) { + if (!response_rstart(d,DNS_T_PTR,655360)) goto DIE; + if (!response_addname("\015ipv6-allhosts\0")) goto DIE; + response_rfinish(RESPONSE_ANSWER); + } + cleanup(z); + return 1; + } + + if (dns_domain_equal(d,"\016ipv6-localhost\0") || + dns_domain_equal(d,"\015ipv6-loopback\0")) + { + if (z->level) goto LOWERLEVEL; + if (!rqa(z)) goto DIE; + if (typematch(DNS_T_AAAA,dtype)) { + if (!response_rstart(d,DNS_T_AAAA,655360)) goto DIE; + if (!response_addbytes("\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001",16)) goto DIE; + response_rfinish(RESPONSE_ANSWER); + } + cleanup(z); + return 1; + } + + if (dns_domain_equal(d,"\015ipv6-localnet\0")) + { + if (z->level) goto LOWERLEVEL; + if (!rqa(z)) goto DIE; + if (typematch(DNS_T_AAAA,dtype)) { + if (!response_rstart(d,DNS_T_AAAA,655360)) goto DIE; + if (!response_addbytes("\376\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000",16)) goto DIE; + response_rfinish(RESPONSE_ANSWER); + } + cleanup(z); + return 1; + } + + if (dns_domain_equal(d,"\020ipv6-mcastprefix\0")) + { + if (z->level) goto LOWERLEVEL; + if (!rqa(z)) goto DIE; + if (typematch(DNS_T_AAAA,dtype)) { + if (!response_rstart(d,DNS_T_AAAA,655360)) goto DIE; + if (!response_addbytes("\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000",16)) goto DIE; + response_rfinish(RESPONSE_ANSWER); + } + cleanup(z); + return 1; + } + + if (dns_domain_equal(d,"\15ipv6-allnodes\0")) + { + if (z->level) goto LOWERLEVEL; + if (!rqa(z)) goto DIE; + if (typematch(DNS_T_AAAA,dtype)) { + if (!response_rstart(d,DNS_T_AAAA,655360)) goto DIE; + if (!response_addbytes("\377\002\000\000\000\000\000\000\000\000\000\000\000\000\000\001",16)) goto DIE; + response_rfinish(RESPONSE_ANSWER); + } + cleanup(z); + return 1; + } + + if (dns_domain_equal(d,"\17ipv6-allrouters\0")) + { + if (z->level) goto LOWERLEVEL; + if (!rqa(z)) goto DIE; + if (typematch(DNS_T_AAAA,dtype)) { + if (!response_rstart(d,DNS_T_AAAA,655360)) goto DIE; + if (!response_addbytes("\377\002\000\000\000\000\000\000\000\000\000\000\000\000\000\002",16)) goto DIE; + response_rfinish(RESPONSE_ANSWER); + } + cleanup(z); + return 1; + } + + if (dns_domain_equal(d,"\15ipv6-allhosts\0")) + { + if (z->level) goto LOWERLEVEL; + if (!rqa(z)) goto DIE; + if (typematch(DNS_T_AAAA,dtype)) { + if (!response_rstart(d,DNS_T_AAAA,655360)) goto DIE; + if (!response_addbytes("\377\002\000\000\000\000\000\000\000\000\000\000\000\000\000\003",16)) goto DIE; + response_rfinish(RESPONSE_ANSWER); + } + cleanup(z); + return 1; + } + + if (dns_domain_equal(d,"\0011\0010\0010\003127\7in-addr\4arpa\0")) { + if (z->level) goto LOWERLEVEL; + if (!rqa(z)) goto DIE; + if (typematch(DNS_T_PTR,dtype)) { + if (!response_rstart(d,DNS_T_PTR,655360)) goto DIE; + if (!response_addname("\011localhost\0")) goto DIE; + response_rfinish(RESPONSE_ANSWER); + } + cleanup(z); + log_stats(); + return 1; + } + + if (dlen <= 255) { + byte_copy(key,2,DNS_T_ANY); + byte_copy(key + 2,dlen,d); + case_lowerb(key + 2,dlen); + cached = cache_get(key,dlen + 2,&cachedlen,&ttl); + if (cached) { + log_cachednxdomain(d); + goto NXDOMAIN; + } + + byte_copy(key,2,DNS_T_CNAME); + cached = cache_get(key,dlen + 2,&cachedlen,&ttl); + if (cached) { + if (typematch(DNS_T_CNAME,dtype)) { + log_cachedanswer(d,DNS_T_CNAME); + if (!rqa(z)) goto DIE; + if (!response_cname(z->name[0],cached,ttl)) goto DIE; + cleanup(z); + return 1; + } + log_cachedcname(d,cached); + if (!dns_domain_copy(&cname,cached)) goto DIE; + goto CNAME; + } + + if (typematch(DNS_T_NS,dtype)) { + byte_copy(key,2,DNS_T_NS); + cached = cache_get(key,dlen + 2,&cachedlen,&ttl); + if (cached && (cachedlen || byte_diff(dtype,2,DNS_T_ANY))) { + log_cachedanswer(d,DNS_T_NS); + if (!rqa(z)) goto DIE; + pos = 0; + while (pos = dns_packet_getname(cached,cachedlen,pos,&t2)) { + if (!response_rstart(d,DNS_T_NS,ttl)) goto DIE; + if (!response_addname(t2)) goto DIE; + response_rfinish(RESPONSE_ANSWER); + } + cleanup(z); + return 1; + } + } + + if (typematch(DNS_T_PTR,dtype)) { + byte_copy(key,2,DNS_T_PTR); + cached = cache_get(key,dlen + 2,&cachedlen,&ttl); + if (cached && (cachedlen || byte_diff(dtype,2,DNS_T_ANY))) { + log_cachedanswer(d,DNS_T_PTR); + if (!rqa(z)) goto DIE; + pos = 0; + while (pos = dns_packet_getname(cached,cachedlen,pos,&t2)) { + if (!response_rstart(d,DNS_T_PTR,ttl)) goto DIE; + if (!response_addname(t2)) goto DIE; + response_rfinish(RESPONSE_ANSWER); + } + cleanup(z); + return 1; + } + } + + if (typematch(DNS_T_MX,dtype)) { + byte_copy(key,2,DNS_T_MX); + cached = cache_get(key,dlen + 2,&cachedlen,&ttl); + if (cached && (cachedlen || byte_diff(dtype,2,DNS_T_ANY))) { + log_cachedanswer(d,DNS_T_MX); + if (!rqa(z)) goto DIE; + pos = 0; + while (pos = dns_packet_copy(cached,cachedlen,pos,misc,2)) { + pos = dns_packet_getname(cached,cachedlen,pos,&t2); + if (!pos) break; + if (!response_rstart(d,DNS_T_MX,ttl)) goto DIE; + if (!response_addbytes(misc,2)) goto DIE; + if (!response_addname(t2)) goto DIE; + response_rfinish(RESPONSE_ANSWER); + } + cleanup(z); + return 1; + } + } + + if (typematch(DNS_T_A,dtype)) { + byte_copy(key,2,DNS_T_A); + cached = cache_get(key,dlen + 2,&cachedlen,&ttl); + if (cached && (cachedlen || byte_diff(dtype,2,DNS_T_ANY))) { + if (z->level) { + log_cachedanswer(d,DNS_T_A); + while (cachedlen >= 4) { + for (k = 0;k < 256;k += 16) + if (byte_equal(z->servers[z->level - 1] + k,16,V6any)) { + byte_copy(z->servers[z->level - 1] + k,12,V4mappedprefix); + byte_copy(z->servers[z->level - 1] + k + 12,4,cached); + break; + } + cached += 4; + cachedlen -= 4; + } + goto LOWERLEVEL; + } + + log_cachedanswer(d,DNS_T_A); + if (!rqa(z)) goto DIE; + while (cachedlen >= 4) { + if (!response_rstart(d,DNS_T_A,ttl)) goto DIE; + if (!response_addbytes(cached,4)) goto DIE; + response_rfinish(RESPONSE_ANSWER); + cached += 4; + cachedlen -= 4; + } + cleanup(z); + return 1; + } + } + + if (typematch(DNS_T_AAAA,dtype)) { + byte_copy(key,2,DNS_T_AAAA); + cached = cache_get(key,dlen + 2,&cachedlen,&ttl); + if (cached && (cachedlen || byte_diff(dtype,2,DNS_T_ANY))) { + if (z->level) { + log_cachedanswer(d,DNS_T_AAAA); + while (cachedlen >= 16) { + for (k = 0;k < 256;k += 16) + if (byte_equal(z->servers[z->level - 1] + k,16,V6any)) { + byte_copy(z->servers[z->level - 1] + k,16,cached); + break; + } + cached += 16; + cachedlen -= 16; + } + goto LOWERLEVEL; + } + + log_cachedanswer(d,DNS_T_AAAA); + if (!rqa(z)) goto DIE; + while (cachedlen >= 16) { + if (!response_rstart(d,DNS_T_AAAA,ttl)) goto DIE; + if (!response_addbytes(cached,16)) goto DIE; + response_rfinish(RESPONSE_ANSWER); + cached += 16; + cachedlen -= 16; + } + cleanup(z); + return 1; + } + } + + if (!typematch(DNS_T_ANY,dtype) && !typematch(DNS_T_AXFR,dtype) && !typematch(DNS_T_CNAME,dtype) && !typematch(DNS_T_NS,dtype) && !typematch(DNS_T_PTR,dtype) && !typematch(DNS_T_A,dtype) && !typematch(DNS_T_MX,dtype) && !typematch(DNS_T_AAAA,dtype)) { + byte_copy(key,2,dtype); + cached = cache_get(key,dlen + 2,&cachedlen,&ttl); + if (cached && (cachedlen || byte_diff(dtype,2,DNS_T_ANY))) { + log_cachedanswer(d,dtype); + if (!rqa(z)) goto DIE; + while (cachedlen >= 2) { + uint16_unpack_big(cached,&datalen); + cached += 2; + cachedlen -= 2; + if (datalen > cachedlen) goto DIE; + if (!response_rstart(d,dtype,ttl)) goto DIE; + if (!response_addbytes(cached,datalen)) goto DIE; + response_rfinish(RESPONSE_ANSWER); + cached += datalen; + cachedlen -= datalen; + } + cleanup(z); + return 1; + } + } + } + + for (;;) { + if (roots(z->servers[z->level],d)) { + for (j = 0;j < QUERY_MAXNS;++j) + dns_domain_free(&z->ns[z->level][j]); + z->control[z->level] = d; + break; + } + + if (!flagforwardonly && (z->level < 2)) + if (dlen < 255) { + byte_copy(key,2,DNS_T_NS); + byte_copy(key + 2,dlen,d); + case_lowerb(key + 2,dlen); + cached = cache_get(key,dlen + 2,&cachedlen,&ttl); + if (cached && cachedlen) { + z->control[z->level] = d; + byte_zero(z->servers[z->level],256); + for (j = 0;j < QUERY_MAXNS;++j) + dns_domain_free(&z->ns[z->level][j]); + pos = 0; + j = 0; + while (pos = dns_packet_getname(cached,cachedlen,pos,&t1)) { + log_cachedns(d,t1); + if (j < QUERY_MAXNS) + if (!dns_domain_copy(&z->ns[z->level][j++],t1)) goto DIE; + } + break; + } + } + + if (!*d) goto DIE; + j = 1 + (unsigned int) (unsigned char) *d; + dlen -= j; + d += j; + } + + + HAVENS: + for (j = 0;j < QUERY_MAXNS;++j) + if (z->ns[z->level][j]) { + if (z->level + 1 < QUERY_MAXLEVEL) { + if (!dns_domain_copy(&z->name[z->level + 1],z->ns[z->level][j])) goto DIE; + dns_domain_free(&z->ns[z->level][j]); + ++z->level; + goto NEWNAME; + } + dns_domain_free(&z->ns[z->level][j]); + } + + for (j = 0;j < 256;j += 16) + if (byte_diff(z->servers[z->level] + j,16,V6any)) + break; + if (j == 256) goto SERVFAIL; + + dns_sortip6(z->servers[z->level],256); + if (z->level) { + log_tx(z->name[z->level],DNS_T_A,z->control[z->level],z->servers[z->level],z->level); + if (dns_transmit_start(&z->dt,z->servers[z->level],flagforwardonly,z->name[z->level],DNS_T_A,z->localip) == -1) goto DIE; + } + else { + log_tx(z->name[0],z->type,z->control[0],z->servers[0],0); + if (dns_transmit_start(&z->dt,z->servers[0],flagforwardonly,z->name[0],z->type,z->localip) == -1) goto DIE; + } + return 0; + + + LOWERLEVEL: + dns_domain_free(&z->name[z->level]); + for (j = 0;j < QUERY_MAXNS;++j) + dns_domain_free(&z->ns[z->level][j]); + --z->level; + goto HAVENS; + + + HAVEPACKET: + if (++z->loop == 100) goto DIE; + buf = z->dt.packet; + len = z->dt.packetlen; + + whichserver = z->dt.servers + 16 * z->dt.curserver; + control = z->control[z->level]; + d = z->name[z->level]; + dtype = z->level ? DNS_T_A : z->type; + + pos = dns_packet_copy(buf,len,0,header,12); if (!pos) goto DIE; + pos = dns_packet_skipname(buf,len,pos); if (!pos) goto DIE; + pos += 4; + posanswers = pos; + + uint16_unpack_big(header + 6,&numanswers); + uint16_unpack_big(header + 8,&numauthority); + uint16_unpack_big(header + 10,&numglue); + + rcode = header[3] & 15; + if (rcode && (rcode != 3)) goto DIE; /* impossible; see irrelevant() */ + + flagout = 0; + flagcname = 0; + flagreferral = 0; + flagsoa = 0; + soattl = 0; + cnamettl = 0; + for (j = 0;j < numanswers;++j) { + pos = dns_packet_getname(buf,len,pos,&t1); if (!pos) goto DIE; + pos = dns_packet_copy(buf,len,pos,header,10); if (!pos) goto DIE; + + if (dns_domain_equal(t1,d)) + if (byte_equal(header + 2,2,DNS_C_IN)) { /* should always be true */ + if (typematch(header,dtype)) + flagout = 1; + else if (typematch(header,DNS_T_CNAME)) { + if (!dns_packet_getname(buf,len,pos,&cname)) goto DIE; + flagcname = 1; + cnamettl = ttlget(header + 4); + } + } + + uint16_unpack_big(header + 8,&datalen); + pos += datalen; + } + posauthority = pos; + + for (j = 0;j < numauthority;++j) { + pos = dns_packet_getname(buf,len,pos,&t1); if (!pos) goto DIE; + pos = dns_packet_copy(buf,len,pos,header,10); if (!pos) goto DIE; + + if (typematch(header,DNS_T_SOA)) { + flagsoa = 1; + soattl = ttlget(header + 4); + if (soattl > 3600) soattl = 3600; + } + else if (typematch(header,DNS_T_NS)) { + flagreferral = 1; + if (!dns_domain_copy(&referral,t1)) goto DIE; + } + + uint16_unpack_big(header + 8,&datalen); + pos += datalen; + } + posglue = pos; + + + if (!flagcname && !rcode && !flagout && flagreferral && !flagsoa) + if (dns_domain_equal(referral,control) || !dns_domain_suffix(referral,control)) { + log_lame(whichserver,control,referral); + byte_zero(whichserver,16); + goto HAVENS; + } + + + if (records) { alloc_free(records); records = 0; } + + k = numanswers + numauthority + numglue; + records = (unsigned int *) alloc(k * sizeof(unsigned int)); + if (!records) goto DIE; + + pos = posanswers; + for (j = 0;j < k;++j) { + records[j] = pos; + pos = dns_packet_getname(buf,len,pos,&t1); if (!pos) goto DIE; + pos = dns_packet_copy(buf,len,pos,header,10); if (!pos) goto DIE; + uint16_unpack_big(header + 8,&datalen); + pos += datalen; + } + + i = j = k; + while (j > 1) { + if (i > 1) { --i; pos = records[i - 1]; } + else { pos = records[j - 1]; records[j - 1] = records[i - 1]; --j; } + + q = i; + while ((p = q * 2) < j) { + if (!smaller(buf,len,records[p],records[p - 1])) ++p; + records[q - 1] = records[p - 1]; q = p; + } + if (p == j) { + records[q - 1] = records[p - 1]; q = p; + } + while ((q > i) && smaller(buf,len,records[(p = q/2) - 1],pos)) { + records[q - 1] = records[p - 1]; q = p; + } + records[q - 1] = pos; + } + + i = 0; + while (i < k) { + char type[2]; + + pos = dns_packet_getname(buf,len,records[i],&t1); if (!pos) goto DIE; + pos = dns_packet_copy(buf,len,pos,header,10); if (!pos) goto DIE; + ttl = ttlget(header + 4); + + byte_copy(type,2,header); + if (byte_diff(header + 2,2,DNS_C_IN)) { ++i; continue; } + + for (j = i + 1;j < k;++j) { + pos = dns_packet_getname(buf,len,records[j],&t2); if (!pos) goto DIE; + pos = dns_packet_copy(buf,len,pos,header,10); if (!pos) goto DIE; + if (!dns_domain_equal(t1,t2)) break; + if (byte_diff(header,2,type)) break; + if (byte_diff(header + 2,2,DNS_C_IN)) break; + } + + if (!dns_domain_suffix(t1,control)) { i = j; continue; } + if (!roots_same(t1,control)) { i = j; continue; } + + if (byte_equal(type,2,DNS_T_ANY)) + ; + else if (byte_equal(type,2,DNS_T_AXFR)) + ; + else if (byte_equal(type,2,DNS_T_SOA)) { + while (i < j) { + pos = dns_packet_skipname(buf,len,records[i]); if (!pos) goto DIE; + pos = dns_packet_getname(buf,len,pos + 10,&t2); if (!pos) goto DIE; + pos = dns_packet_getname(buf,len,pos,&t3); if (!pos) goto DIE; + pos = dns_packet_copy(buf,len,pos,misc,20); if (!pos) goto DIE; + if (records[i] < posauthority) + log_rrsoa(whichserver,t1,t2,t3,misc,ttl); + ++i; + } + } + else if (byte_equal(type,2,DNS_T_CNAME)) { + pos = dns_packet_skipname(buf,len,records[j - 1]); if (!pos) goto DIE; + pos = dns_packet_getname(buf,len,pos + 10,&t2); if (!pos) goto DIE; + log_rrcname(whichserver,t1,t2,ttl); + cachegeneric(DNS_T_CNAME,t1,t2,dns_domain_length(t2),ttl); + } + else if (byte_equal(type,2,DNS_T_PTR)) { + save_start(); + while (i < j) { + pos = dns_packet_skipname(buf,len,records[i]); if (!pos) goto DIE; + pos = dns_packet_getname(buf,len,pos + 10,&t2); if (!pos) goto DIE; + log_rrptr(whichserver,t1,t2,ttl); + save_data(t2,dns_domain_length(t2)); + ++i; + } + save_finish(DNS_T_PTR,t1,ttl); + } + else if (byte_equal(type,2,DNS_T_NS)) { + save_start(); + while (i < j) { + pos = dns_packet_skipname(buf,len,records[i]); if (!pos) goto DIE; + pos = dns_packet_getname(buf,len,pos + 10,&t2); if (!pos) goto DIE; + log_rrns(whichserver,t1,t2,ttl); + save_data(t2,dns_domain_length(t2)); + ++i; + } + save_finish(DNS_T_NS,t1,ttl); + } + else if (byte_equal(type,2,DNS_T_MX)) { + save_start(); + while (i < j) { + pos = dns_packet_skipname(buf,len,records[i]); if (!pos) goto DIE; + pos = dns_packet_copy(buf,len,pos + 10,misc,2); if (!pos) goto DIE; + pos = dns_packet_getname(buf,len,pos,&t2); if (!pos) goto DIE; + log_rrmx(whichserver,t1,t2,misc,ttl); + save_data(misc,2); + save_data(t2,dns_domain_length(t2)); + ++i; + } + save_finish(DNS_T_MX,t1,ttl); + } + else if (byte_equal(type,2,DNS_T_A)) { + save_start(); + while (i < j) { + pos = dns_packet_skipname(buf,len,records[i]); if (!pos) goto DIE; + pos = dns_packet_copy(buf,len,pos,header,10); if (!pos) goto DIE; + if (byte_equal(header + 8,2,"\0\4")) { + pos = dns_packet_copy(buf,len,pos,header,4); if (!pos) goto DIE; + if (ignoreip.len) + for(ii = 0; ii < ignoreip.len; ii+= 16) { + if (byte_equal(ignoreip.s+ii,12,V4mappedprefix) && + byte_equal(header,4,ignoreip.s+ii+12)) goto NXDOMAIN; + } + save_data(header,4); + log_rr(whichserver,t1,DNS_T_A,header,4,ttl); + } + ++i; + } + save_finish(DNS_T_A,t1,ttl); + } + else if (byte_equal(type,2,DNS_T_AAAA)) { + save_start(); + while (i < j) { + pos = dns_packet_skipname(buf,len,records[i]); if (!pos) goto DIE; + pos = dns_packet_copy(buf,len,pos,header,10); if (!pos) goto DIE; + if (byte_equal(header + 8,2,"\0\20")) { + pos = dns_packet_copy(buf,len,pos,header,16); if (!pos) goto DIE; + if (ignoreip.len) + for(ii = 0; ii < ignoreip.len; ii+= 16) + if (byte_equal(header,16,ignoreip.s+ii)) goto NXDOMAIN; + save_data(header,16); + log_rr(whichserver,t1,DNS_T_AAAA,header,16,ttl); + } + ++i; + } + save_finish(DNS_T_AAAA,t1,ttl); + } + else { + save_start(); + while (i < j) { + pos = dns_packet_skipname(buf,len,records[i]); if (!pos) goto DIE; + pos = dns_packet_copy(buf,len,pos,header,10); if (!pos) goto DIE; + uint16_unpack_big(header + 8,&datalen); + if (datalen > len - pos) goto DIE; + save_data(header + 8,2); + save_data(buf + pos,datalen); + log_rr(whichserver,t1,type,buf + pos,datalen,ttl); + ++i; + } + save_finish(type,t1,ttl); + } + + i = j; + } + + alloc_free(records); records = 0; + + + if (flagcname) { + ttl = cnamettl; + CNAME: + if (!z->level) { + if (z->alias[QUERY_MAXALIAS - 1]) goto DIE; + for (j = QUERY_MAXALIAS - 1;j > 0;--j) + z->alias[j] = z->alias[j - 1]; + for (j = QUERY_MAXALIAS - 1;j > 0;--j) + z->aliasttl[j] = z->aliasttl[j - 1]; + z->alias[0] = z->name[0]; + z->aliasttl[0] = ttl; + z->name[0] = 0; + } + if (!dns_domain_copy(&z->name[z->level],cname)) goto DIE; + goto NEWNAME; + } + + if (rcode == 3) { + log_nxdomain(whichserver,d,soattl); + cachegeneric(DNS_T_ANY,d,"",0,soattl); + + NXDOMAIN: + if (z->level) goto LOWERLEVEL; + if (!rqa(z)) goto DIE; + response_nxdomain(); + cleanup(z); + return 1; + } + + if (!flagout && flagsoa) + if (byte_diff(DNS_T_ANY,2,dtype)) + if (byte_diff(DNS_T_AXFR,2,dtype)) + if (byte_diff(DNS_T_CNAME,2,dtype)) { + save_start(); + save_finish(dtype,d,soattl); + log_nodata(whichserver,d,dtype,soattl); + } + + log_stats(); + + + if (flagout || flagsoa || !flagreferral) { + if (z->level) { + pos = posanswers; + for (j = 0;j < numanswers;++j) { + pos = dns_packet_getname(buf,len,pos,&t1); if (!pos) goto DIE; + pos = dns_packet_copy(buf,len,pos,header,10); if (!pos) goto DIE; + uint16_unpack_big(header + 8,&datalen); + if (dns_domain_equal(t1,d)) + if (typematch(header,DNS_T_A)) + if (byte_equal(header + 2,2,DNS_C_IN)) /* should always be true */ + if (datalen == 4) + for (k = 0;k < 256;k += 16) + if (byte_equal(z->servers[z->level - 1] + k,16,V6any)) { + byte_copy(z->servers[z->level - 1] + k,12,V4mappedprefix); + if (!dns_packet_copy(buf,len,pos,z->servers[z->level - 1] + k + 12,4)) goto DIE; + break; + } + pos += datalen; + } + goto LOWERLEVEL; + } + + if (!rqa(z)) goto DIE; + + pos = posanswers; + for (j = 0;j < numanswers;++j) { + pos = dns_packet_getname(buf,len,pos,&t1); if (!pos) goto DIE; + pos = dns_packet_copy(buf,len,pos,header,10); if (!pos) goto DIE; + ttl = ttlget(header + 4); + uint16_unpack_big(header + 8,&datalen); + if (dns_domain_equal(t1,d)) + if (byte_equal(header + 2,2,DNS_C_IN)) /* should always be true */ + if (typematch(header,dtype)) { + if (!response_rstart(t1,header,ttl)) goto DIE; + + if (typematch(header,DNS_T_NS) || typematch(header,DNS_T_CNAME) || typematch(header,DNS_T_PTR)) { + if (!dns_packet_getname(buf,len,pos,&t2)) goto DIE; + if (!response_addname(t2)) goto DIE; + } + else if (typematch(header,DNS_T_MX)) { + pos2 = dns_packet_copy(buf,len,pos,misc,2); if (!pos2) goto DIE; + if (!response_addbytes(misc,2)) goto DIE; + if (!dns_packet_getname(buf,len,pos2,&t2)) goto DIE; + if (!response_addname(t2)) goto DIE; + } + else if (typematch(header,DNS_T_SOA)) { + pos2 = dns_packet_getname(buf,len,pos,&t2); if (!pos2) goto DIE; + if (!response_addname(t2)) goto DIE; + pos2 = dns_packet_getname(buf,len,pos2,&t3); if (!pos2) goto DIE; + if (!response_addname(t3)) goto DIE; + pos2 = dns_packet_copy(buf,len,pos2,misc,20); if (!pos2) goto DIE; + if (!response_addbytes(misc,20)) goto DIE; + } + else { + if (pos + datalen > len) goto DIE; + if (!response_addbytes(buf + pos,datalen)) goto DIE; + } + + response_rfinish(RESPONSE_ANSWER); + } + + pos += datalen; + } + + cleanup(z); + return 1; + } + + + if (!dns_domain_suffix(d,referral)) goto DIE; + control = d + dns_domain_suffixpos(d,referral); + z->control[z->level] = control; + byte_zero(z->servers[z->level],64); + for (j = 0;j < QUERY_MAXNS;++j) + dns_domain_free(&z->ns[z->level][j]); + k = 0; + + pos = posauthority; + for (j = 0;j < numauthority;++j) { + pos = dns_packet_getname(buf,len,pos,&t1); if (!pos) goto DIE; + pos = dns_packet_copy(buf,len,pos,header,10); if (!pos) goto DIE; + uint16_unpack_big(header + 8,&datalen); + if (dns_domain_equal(referral,t1)) /* should always be true */ + if (typematch(header,DNS_T_NS)) /* should always be true */ + if (byte_equal(header + 2,2,DNS_C_IN)) /* should always be true */ + if (k < QUERY_MAXNS) + if (!dns_packet_getname(buf,len,pos,&z->ns[z->level][k++])) goto DIE; + pos += datalen; + } + + goto HAVENS; + + + SERVFAIL: + if (z->level) goto LOWERLEVEL; + if (!rqa(z)) goto DIE; + response_servfail(); + cleanup(z); + return 1; + + + DIE: + cleanup(z); + if (records) { alloc_free(records); records = 0; } + return -1; +} + +int query_start(struct query *z,char *dn,char type[2],char class[2],char localip[16],unsigned int scope_id) +{ + if (byte_equal(type,2,DNS_T_AXFR)) { errno = error_perm; return -1; } + + cleanup(z); + z->level = 0; + z->loop = 0; + + if (!dns_domain_copy(&z->name[0],dn)) return -1; + byte_copy(z->type,2,type); + byte_copy(z->class,2,class); + byte_copy(z->localip,16,localip); + z->scope_id=scope_id; + + return doit(z,0); +} + +int query_get(struct query *z,iopause_fd *x,struct taia *stamp) +{ + switch(dns_transmit_get(&z->dt,x,stamp)) { + case 1: + return doit(z,1); + case -1: + return doit(z,-1); + } + return 0; +} + +void query_io(struct query *z,iopause_fd *x,struct taia *deadline) +{ + dns_transmit_io(&z->dt,x,deadline); +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/query.h b/NONE-CKUBU/src/djbdns/djbdns-1.05/query.h new file mode 100644 index 0000000..f179c22 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/query.h @@ -0,0 +1,33 @@ +#ifndef QUERY_H +#define QUERY_H + +#include "dns.h" +#include "uint32.h" + +#define QUERY_MAXLEVEL 5 +#define QUERY_MAXALIAS 16 +#define QUERY_MAXNS 16 + +struct query { + unsigned int loop; + unsigned int level; + char *name[QUERY_MAXLEVEL]; + char *control[QUERY_MAXLEVEL]; /* pointing inside name */ + char *ns[QUERY_MAXLEVEL][QUERY_MAXNS]; + char servers[QUERY_MAXLEVEL][256]; + char *alias[QUERY_MAXALIAS]; + uint32 aliasttl[QUERY_MAXALIAS]; + char localip[16]; + uint32 scope_id; + char type[2]; + char class[2]; + struct dns_transmit dt; +} ; + +extern int query_start(struct query *,char *,char *,char *,char *,unsigned int); +extern void query_io(struct query *,iopause_fd *,struct taia *); +extern int query_get(struct query *,iopause_fd *,struct taia *); + +extern void query_forwardonly(void); + +#endif diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/query.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/query.o new file mode 100644 index 0000000000000000000000000000000000000000..d1eb7bae01345e508b4c128044fc40c8658df2c3 GIT binary patch literal 35688 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 literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/random-ip.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/random-ip.c new file mode 100644 index 0000000..bfd516c --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/random-ip.c @@ -0,0 +1,80 @@ +#include "buffer.h" +#include "exit.h" +#include "fmt.h" +#include "scan.h" +#include "dns.h" + +char ip[4]; +int ipfixed = 0; +unsigned long loops = 10000; +unsigned char tab[256]; + +char strnum[FMT_ULONG]; + +char seed[128]; + +int main(int argc,char **argv) +{ + unsigned long u; + int i; + int j; + unsigned char c; + + dns_random_init(seed); + + for (i = 0;i < 256;++i) tab[i] = i; + for (j = 256;j > 0;--j) { + i = dns_random(j); + c = tab[j - 1]; + tab[j - 1] = tab[i]; + tab[i] = c; + } + + if (*argv) ++argv; + if (*argv) scan_ulong(*argv++,&loops); + if (*argv) { scan_ulong(*argv++,&u); ip[0] = u; ipfixed = 1; } + if (*argv) { scan_ulong(*argv++,&u); ip[1] = u; ipfixed = 2; } + if (*argv) { scan_ulong(*argv++,&u); ip[2] = u; ipfixed = 3; } + if (*argv) { scan_ulong(*argv++,&u); ip[3] = u; ipfixed = 4; } + + if (ipfixed >= 1) if (loops > 16777216) loops = 16777216; + if (ipfixed >= 2) if (loops > 65536) loops = 65536; + if (ipfixed >= 3) if (loops > 256) loops = 256; + if (ipfixed >= 4) if (loops > 1) loops = 1; + + while (loops) { + --loops; + u = loops; + for (i = ipfixed;i < 4;++i) { ip[i] = u & 255; u >>= 8; } + if (ipfixed == 3) { + c = ip[3]; + ip[3] = tab[c]; + } + else if (ipfixed < 3) { + c = 0; + for (j = 0;j < 100;++j) { + for (i = ipfixed;i < 4;++i) { + c ^= (unsigned char) ip[i]; + c = tab[c]; + ip[i] = c; + } + } + } + + u = (unsigned char) ip[0]; + buffer_put(buffer_1,strnum,fmt_ulong(strnum,u)); + buffer_puts(buffer_1,"."); + u = (unsigned char) ip[1]; + buffer_put(buffer_1,strnum,fmt_ulong(strnum,u)); + buffer_puts(buffer_1,"."); + u = (unsigned char) ip[2]; + buffer_put(buffer_1,strnum,fmt_ulong(strnum,u)); + buffer_puts(buffer_1,"."); + u = (unsigned char) ip[3]; + buffer_put(buffer_1,strnum,fmt_ulong(strnum,u)); + buffer_puts(buffer_1,"\n"); + } + + buffer_flush(buffer_1); + _exit(0); +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/random-ip.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/random-ip.o new file mode 100644 index 0000000000000000000000000000000000000000..7d8247f98f6a1a71e7de62afbc76652674200d67 GIT binary patch literal 4696 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 AzyJUM literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/rbldns-conf b/NONE-CKUBU/src/djbdns/djbdns-1.05/rbldns-conf new file mode 100755 index 0000000000000000000000000000000000000000..821ad96e7afe6d432cbfbab7d54b0ebefe174718 GIT binary patch literal 15784 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 a_sGO{6f$+)V|V*_X@-s7bd#uO+W$9t=FIp2 literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/rbldns-conf.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/rbldns-conf.c new file mode 100644 index 0000000..79d446f --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/rbldns-conf.c @@ -0,0 +1,71 @@ +#include +#include +#include "strerr.h" +#include "exit.h" +#include "auto_home.h" +#include "generic-conf.h" + +#define FATAL "rbldns-conf: fatal: " + +void usage(void) +{ + strerr_die1x(100,"rbldns-conf: usage: rbldns-conf acct logacct /rbldns myip base"); +} + +char *dir; +char *user; +char *loguser; +struct passwd *pw; +char *myip; +char *base; + +int main(int argc,char **argv) +{ + user = argv[1]; + if (!user) usage(); + loguser = argv[2]; + if (!loguser) usage(); + dir = argv[3]; + if (!dir) usage(); + if (dir[0] != '/') usage(); + myip = argv[4]; + if (!myip) usage(); + base = argv[5]; + if (!base) usage(); + + pw = getpwnam(loguser); + if (!pw) + strerr_die3x(111,FATAL,"unknown account ",loguser); + + init(dir,FATAL); + makelog(loguser,pw->pw_uid,pw->pw_gid); + + makedir("env"); + perm(02755); + start("env/ROOT"); outs(dir); outs("/root\n"); finish(); + perm(0644); + start("env/IP"); outs(myip); outs("\n"); finish(); + perm(0644); + start("env/BASE"); outs(base); outs("\n"); finish(); + perm(0644); + + start("run"); + outs("#!/bin/sh\nexec 2>&1\nexec envuidgid "); outs(user); + outs(" envdir ./env softlimit -d250000 "); + outs(auto_home); outs("/bin/rbldns\n"); + finish(); + perm(0755); + + makedir("root"); + perm(02755); + start("root/data"); + finish(); + perm(0644); + start("root/Makefile"); + outs("data.cdb: data\n"); + outs("\t"); outs(auto_home); outs("/bin/rbldns-data\n"); + finish(); + perm(0644); + + _exit(0); +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/rbldns-conf.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/rbldns-conf.o new file mode 100644 index 0000000000000000000000000000000000000000..586aa9c97bf831a41b4decbdc25b9422fff56e61 GIT binary patch literal 5576 zcmcJTU2IfE6vs~~LMhmmicr*qYed3_y~`FbO%1rEU)uzswwPcHHg|XLZa3Y%TXyf# zLSn!c!^aXOF)=1Y5vinh1#)L?1N92YvGeBSd0U9yET`bLN9Ro$eSK<4Nw$ z%y0hZ%(-)C?%eiR-=6+Ob#U$_)MeHYQ@ z6WbS|Yo(`!vmwdaILiqpoQ`)!!p#fFrPAZ@NW(JvM$Q7kc2Y_*f0p5NwNKo(6jVei z@rv-N46Uk6w1|$2w_{wqi4ub;y+LL3O?(_i$Nwv@rdoTPYJasR6TCS;)mnFJy{~G# zf3FzW4^XGs4wZCR(&n-az`~vm<0`e0Doyry+H-Z(XR7i)pY(5)0?Wv9(ThSaS2jf9u zGN2I)UY%pqmxvu zO=8%fxG@a;W&))*$9hD?H05{dA64UbsQ9|j{%15$rOu!3g)D{_)lL6tmFVl($4&d` zazA!b9S@~B=7{qMU}z4l&Y#Bnuwu>$^}TwpRBV+6(EKmOOXsiW|5;=@7bO+Ngc^Sx zhc&dB8jM_CQvOuuW{$NIJI!ZDdhI{Sow08E*P1(WIkikWzON>h-nNZ+nfFh!TI0vm z`aLDX-2OGkzujR}NVgb%o;9#&*3Y{Osj9D;3FTMo2@|h9$@TMgvyM+IV7}FhnW@Fq zB(kn%thciK#XA%kEjRPsKyD6Rq>o`qCf==BK8)8&_+?f<4_$7yaN1wB^p9HjV-_Am zUMtT*i++zq|D=UKZQ-7Ur!72Z;fE}I%EG5DoS)Wi62zAT;9=w!i=(Nm4|y*eAoYuY z9}}X)uK}PB2@oF=89$tu47@x{OhPuuhUhTvqg0e6o$!l!4Coa@D3rqzq)}BG1Fsww zM#l_jP@p9&9n~4X!|b5>(5zf!vxWY)1KCx=8=qe6JDAhC5T3x#?t&G zK{S(}mv~-27ZfKw&*w7Zw61jgZy2X{oaWaU=Xu^>yp`#1F@6u@`cFSI|0U`LMe|8# zI*m=XTyfIVH;~S!m2n<_E#o}T^^DV=*Ksx}uE(Wwoy=wW)!5ehPR7?TzSD@K*THV4 zr?X4P8DyM4-@S~lW%>~#zJ7llu;>pmejkgIVVvimGvarl57{B6=lM@D&ezX#jPv}b zjriR%Je;)X&oa*Qe}!?L|9QprbL>&^-(Y&4|67dnb^bQvJpXr%_}wc01&jVe#(Dmq zFwXP;OmUq*y}!x6V0xba*Gy0EpBRbJzGZrz|96b@_s=!Px&DR`e@uplpDg-YOi$m| z+J3j_|7LpH??cL=o;Erf6+E8?#`%1UgG|rk?=|#Cr5r|>p3mC>Lw`o;4_fpIrsvNwW6{(9 z!^m|0XJr!(S@ee)=ks%%aXvpM8K=K>_51U@;xsNle=jgSKkq)b=)bq<|FGy+tB-E# z=JB^EZsyZ((LZC+AGYXc80Y8Oi!2W9BW*7mT%V`!usA$_M>$gd>edD6GM>)HJP`qcfl9%$;+X(QnS2JNMp?d2yxmK!+gFaU3H)264pbfL4rP#s?y=zQ47q zD(STN`tEnX@BT5HuY2wF+k5T3_S$Q&y=!-o`^u}9q&XadozjF`1mcP^B!aA7-*OBuf2_ zB+1H}^xOiIwW%P843He@is6~*mYPx2MG7I+cuZ=`k$NPTZ^`9bayH#b4I|mq9v_X3 zK9jBSO-_@*5ib$3v>Kso3*gnqm3qocbEy_lX%v0Q>d&UO+_xdeSwhy1tJ?~Z7jKI)=hH?!@<_YEIeiB;zmZhC#mZA#ViIm=Z$>7$e!Eq$ zCORsY%){4xsn}mk&ra+yr*1xey5!SBtheCni z+LmCQPiYDUgpl7?FSLaH{$`=o*8*6GwEDu$zyrQkzfji_4Eu#(n?C?iYSL=I)z=gd zHiViKzt9l!`-O_C%0-LU-cWc$AuR*)o3zjQ=YY46kJ5)yWKt8{Doxm8vcl5~YdA-K zM(xDC<(Vh0^_HXaC^;hfmFkU+DVQ}nMru^y39$!NybjONw_^{R3;|j zv|j9#pM=x8vr|zLPHWOmB}q7~H9JX3IITZB$w_$fnwHh~GL36sG2^%N^&I?DRu5$M zB?GH(t$SSml98=9H?P_5%FZgfokUG5l^NYkeI)Lcrw{Q z5%bp(Po^3W!Gm%tK2fQ?utwJ2lGS5F)pu6*#@l8}g52BP&ZJiuD+$JI2z=DlMYfWo z>An(CkUQf_TB46l)s>u<%i8ffsABtqE_5hFzV&!6wir1&f$S&G$|0uvv{R0)Ovt52 z!ZX~{+DQ>Pw#XrC>3&p7jDL!2MJKEvky-Th2YLqkKMds+vH3Cm@5 z!8dOb(SUYbne;e8q+8BD5gk=(JDFMdW}HA@oqZp7EV zAj$Q5^D?C^HORQ~s39Y9B~bN1ZqG=6qvT_sl_$Aj`F)?2zeCo}?(5%#PSp2umI^*t+ zN1)yw@>9JHYjSV3r^f6}R?`DFW0H*mtXpoZ50#>Ge*m!al(H8t6hwB=&Fyub(&jdT zReq_SbZA5F-LAAUal1EfwsO2|tny~rIOTQs?zFN}_k&NOm9ipt>=CThvTNKOAvp6s zu@Hl5yO2mk)90Cbbv6>tqshmrGe<+iTrd{HG*+EUBpAzO?BiR28D}l59N69~(4=Xs zF1zkp;Kd0;0B_IFu|b*MrG`y|-g7~>XrE-r;obb<&O z?I@SX>cKSGId=@T`)*pn5o0DMgJ$hFXu}&#KR#DPFPFXoQhaEyLPKVg%|#$0^K_1f z#=~R$vi0@v6EViO;GJem(Zk40nyj&g4!VVXBwB#?wQuuCXJhFRO z>n~f?0}}*c@P0Pv-T+yE6?Ael?v7e?fFOBbjwtk|{}$h5`1Z2g+3t>9>;@EMaz#L& zqs^0u*fh=oREbVl4|xQMbs&gXdq(X2l;xtGkHNPFqA>bC0jd~3gG=)I7`P;PBED=$ z6DMFIrhFZVW8)#wjj8*}X8SEkTt}J?QAGLh3~4G1$X}<80JU-a>*!fV5-ndxVjM~Q zOR`p9=EjFFhr|htXV?~BCh<#1L>KIuCkn=+pO`_U^9fAdS8l*hU24e^GN%8F_OcsE zBA6`kWlB0o;{4Yc*7Mje2F`z)G>#{}B+C7aBsM`pj&06$V9^@Cz6xtY-Hb)zzW;f0 z?icYja>9_cReAlg){zgVlH6M)?u1me(!U{fMxrDp76k3oe!GI7~oQa{)Wlc&2(f!@W&I8yeSi7@_;j zoEKTe%ofM#d?80y<>7GDl9y8zt;f!XoQR`CJ~rld$P2~sebwmEIEM{V*18`@Kux!>tT6Fft%Vc~mrVvz|FQII&HM zRZ~2W>-MYfI=T#dUwiLB+j${PXhG z{dBt!bv=ZgTfLCbTo1|7@y~1VN^N{R@)tR}&m3tY@*6o;1uu%JG;1`mIJqK3oRZaU zm#lg7a%8QFoDMrm^mh{KER8)mUl3`d-bqF=rr~%+U> zWj$q1eV^>)(ZYb4a_Jv?CD;c}Nnb*wUyfFx@6Ka#^dYiUbSv3F321PV-;s^5)9&}g zym^VLn5#FMQGBS|$o%Bv!EDSYj`d#cgHpp?-lz4Uzk^Ya3%ji$M>DEQdu7d`d=qDt z%)w`jNgtA93$unD8_rg8_iE27&uY&a&)Obn-CSOLqP!Stn7YD+#YNFMqH%LBbg;na z=Df^BQAKnaS2Ma9X2MxiWFI$XW$`&hsjyZ$FY)!NM}5jsiH8eoahIOh@Y70YC95#4 zt8#0Cu6Nv>|BP)!M*BI&Df74!8OJMd;C6Ue^a(F4QGCkyA;Kn(LJHL6zJEtEqEidT z`w$zLLCbmg`GrE+VOpK5^7?4m_S2d*yxRUMO`+JfIq!5OjxtzQ+DWYFO6@tX)?-XW zOhg}%Vl$3hB=%HAmAw2aXi!9E>=}+9%VJOFkvnPcBG^`G3F9jGBB}ca?Ff#Cgp9S2 zM~VH!I06^Yj!^!ckszmakHm%1T@BoY9V2;st7sVYd8ZMtF^pWf_kLO~l#nHNva;kz zlzQ){=u63?ebjqD`863&j_qT;e@AAPwO6$d@XR9OjMzV2!t)8js<{TdmYSqr4#u84 z@G0(?hBpxHjO5;Zu=}la$C={3o`$Z@Q+v{J_)+p>ORxti84fF6yLVrqA)NF&y8F{( zS()zLhl*d2OFxOcqdjdsNm|d7TN5=nwuZ*a$ly^Zls$0uP*S}9ke*hP;-&h|P;|nx z1)^|AtRknhZ^N{L{aT+kVGj^F_6Rj4YlrV1nJ=x^`1$*^RUlUNME+)c1SUG+2&!v2 zgD-V;;d%RIkM=YkD?eoGVik^;V|OAfXx+wbFdfb9r0AV_<2w&UruUWup-qJhbN6bD zpEB%3;LLqYA=x*K8yy_T-hc>l5E*=yM$A51seQz5I^v@UO60-p&6V1D@>lpvrS@l8 z8=qH>LAVfIvF?k$s>9m*orfOEN$0^Tj-#IF>MXBzMmt#PTutMErlmP}%rUh6p=x$g zW2~w9k3F<3$j{%`j#fJ7dP_l^dv$;e}#UcT9)4P6*m z3CI&I&s6t2Jle#9K95$O2|f#qW4|1A<$1K_S+bUk4SE);+78D1FPUM;I-i{8X;ByA z0skZIW#zV5#9^!>gC4>*kstjhsPY!Z;hc})JR2j?4Ci9R^vkuynOgjyEA1|RVnOVT zPR^tAMdq+$Tl19)4-{bhwmMy;4^+Vs$<_mUDV5rgvm!GZ%qo2b|5=1eV)Yb&y}Lk8`?n98TM=B&Y|dnB zKiK_K;=yP2AyqyOP5K;FuzzYF6vtVQiBq+crXIzn9?y~<&)WWyqE8Hga+E&57`BX= z;rY^D=}=&KJxP z+uw?Ryh0JgWf;nZpd@QY?V!q&io*!StEMD(N}WIL)tamQ1<}@6gXaUp8Te!8Ysw5cx?J#T zZ)1%W$Bl<@5kNLTHj`_u7OdGyb->Z_QFCi6a%62ot~E1Wts*O_MzkVJc4mzDn`1*( z!G_Eco>ax2Sf6KT&r!_5UZT)(|6?-j;Y#fSl+Ul!Ub5#O^Me)twpV-KlXyivoj}lZ z8~ffx&=lsU|9c)Tj9%9c^E#5TpxEqmR>y%IX9SoiKP6uC{0;kSv;wj5d}mziQ6`$r z;0})rOlyYYQ}nj1=mvnxVXXUd4LW;L^(`+Td?0!h90pgOr67VV$7xhM3RB0*<{5v$ zxn%Hv()ky|GUvx~N}3$ATev5d-R1LFWQ8k@dTzL(Ys(D8sM4P3@+`QLyW+6yTrLzG z){de(%+yhA<&M=^r0Qp8$vQuiviId`FR(dq4LmBu416C>HfsO+a{XX|(m#ePjQtSp zjDN9yw|rIou<|}Tgn>5@ZBo{==R5ET+y?fJ zohKr17RT+AW{>eB!}OMWro&s_(hd(EOWMDqx4{EW<1u7RaU3%)SYFL@&Xydw7c(jZl&H7i?V=O5Vl(6~y`0 z(G15M*-dDLB|Qyy8Bf41=uEQIv-Mm84@-QA^SYPx&u`A!aK+$4>->cdyamTA9Z!`u zXN9lxl)h)#$m^~+j?TQ=o5p2kOOcoOOfeWW*B@dbJ#P)vvC()v+2_w>dvw6_KF1!P zlF!@rAXj>sTGJ;z{q^iGv>fl92fY&GQ6Jdz*CF%iLAXMYk#cLx-tJb%kW@;XKp-Q(bKu+$}|20 zJ@F1-sU?KdISx)J6^2qO1CJ8$6Rtt$;rR=G zLco7#;6Vm70)EfH76vvG(91w813>~_V_+2nwFDez;9CrQmw>Yj%wxbyz@@WEj{*kf z6L2j9^pnc`1%(9Mz(58AR}wVk`{Vt#;#_RLBY#ehF^=~nE4$n<$;tG8g zb0?Y0)lairKXX^=_j1`G=C0B^m^;ASWc^3X?PhL@{wQ<5Vs5Iwhq-@cZkql)b32&3 zT0hF%7Urhwe`l_ZxsaY-OyjF%Zl!(=b9XZLUA>68CCuHWFJrERxx4i>%w5OaDt$e3 z^gfZASgpsH%Vutk{up!gf`gh^tM6s*1B4_sQKP@Y+%e{S`bW&Y!d$I>*$t%G)6CWB z*D^;3VKq^&mofK0nDgtE%>5g44f<;4x|mz1H#7GG<{I@a%qh$@=?^m3z})xrN10p6 zT(kZM=9V(oqW3UY#$2oZ5_5&jB6E5AS?0dMT$`SKBaOku+&y|ObEgn4)WkRS z0_F_nR_F_uJHp((dKGhjVouR(nA^+TB0YC5wYiJA8TxuI`vr5?>KbzoGgqcR%G@^Q zZqffYIAyb%Sg1cmxsaN;PJf+pjcQ`4ewuP?)Wr4rSoouIr<#!T$&_2FCKl^AQchA6 zUR|QxO=_ZCucq8gHL*lrL%Hc{Le@i+%hfwU)WofiKLjefy?yq30a{b9CEC}q1;ol0#`xMtWmv?1|&^cTe2dpp-Wk*{T-}R9dJgL;2bb0oBO!>DdgH5 z%8HU|Q|=b^Q^>WYDRWDzNv=@+6fZrrIh7eD)lTqJ=?+;Pa48ujIcO)cx8OAOhcjh6 z)DX0x&*ABI!Yc^2QLqcP;fHRhy*)!|aPMA(E9JB*j6jYpb!^8#Zg=nYIMkC)&vwb7 z;P<7$8(H4H+dIyMs@uJ8mr_Vvx_ZG0E?p6c8-wf^x@cBUx|D1}oYaTc?Tj4w(C!>| zM*kbNAsJU9j$TxN0*UPv38fyH3#KL)pvi^p6&I9hXp%5BNhph3ah8rI{SsmD1}4_Uo1R>qXjbs(0EuztF{_qjiriSM(tArFq5@+WV} zxIU28Gh;WrM_2V_Uff>C=48nG?Aqo$%5>{@67}EV`Z3o(%Z|8Q&@Fc!ig}7;?S<`Q zBCkQ#HUXW-`sloT*gD_$^UWB}izAm~*t2DNDIy0Ktj4oY63>87DdXu7k>lC!%F_(| z;^1sADO3u~qjN4jg^6@@#v!96uZSK_OXxCJ!Wlp|?|ot`@pIWpy8qh5Eqb(rO1IUd zHxHNYLsp}aUsuI8QeC>+U1s*)qx@vJYMOSqGUm!a_mQo#S<|@IthV3X(Tv06a8)NR z`3s$n!;Zdz<<_Cny*q>7rBRI{_wGKn?=@`qm`h{B$Fdf|T=+pJW2DOZH)So`G-7eQ zeW9S-)qbA?_n#}Ue%kL#qg)mX(l6t?(uE5v!a%@)fWjOuD7St0NzT0QNFx`f3Nej+{ zzY2rnR14vv`g zz#}&oW!1Kx9`8-VTO3^vfn0>@Lb>cw=n{g!It8MX%N>HrB zdy$G?toJFtLZ!8Bo+yNBTj~ShS%l0J8}Qu%Fc?w9V1wA|Zw-bvC5gBBLSa){#9O+4 zQ6RCTa(bbX8%G;X;aX2cvD#Mw~BRmZB%Gzg5Bza{;(JbDk5Gr4J(4;->8VSk?J@h_fy5DfY=rauH!MHx3*x&7up2-H?>4U z{?QF@2u51!#ag_>+AP$Dg3T~-TT`1~KwE6WAWZHLH2LcVUtJw+W^?ua^-XntR=h44 zXlPo8mg@!dssv$jd*ETwC)PK?vIKaL1YF+S!)428xZSVLi>*M)*%_^UZMcwsX%B!Q7ZGzHfCTAI+HrKvDHqXDYQP725Ni!@nb zOI%SlnX^qJs%=_luYvleaI+Y0^FfP9fZiwOr8F`ue$#kXFwlb8BWE%D5~!6{Utklt zdvn;FP;voURv}+t9bP^*-DWg4>>suZCHsjv&M^GIufQZ>r72)KlVv$f**y_VWxddf ziSn(Z6>rT>Q=l#wqDdy3oAa-1A|J9jZhJl4kA^oI4oBMHo>&=z*|kWLJewmWBaTfC zjo`!WH~3ncV4~5bw%%V@Xj_7v(UuskZosc>2!@)mP&Whwo1t*wt83)(*cg@@Oqb;3 zzFKo+Nsw8`nwHu~LxVqL&A+XQRhid@g7C#lX2d+`z#zg3V;|_NOBZUw&$!G701Qj1bP@Ugj zPs$;(`^8(A++n(Dqc2d8iN;c-xPl-sJom$krKN>?7%5?+i(v(JZM9b>#kLT7X=A^$ ztY%e#C4-R=4I16pE(!mK>r!p@BVPG-8M|Z?f|=6P(1d0~*nieT_g2g!Z8xL|YPlBKFmTDoxm)%!nQiwFV=IQYKdyY;BDMn(EB;Vq&e47Nw~%*e3cEiooRH zkw9|*K4b||_t-3LpMx)9-PW6XM^Y#^<8z%4w#U$X^&F_NJ~{dh?;X~fpy*?60aiO! z48(SG(cm;PwJjKEOPJ$_sTYL?pVDZxpZ+gSDfs?FiNp}{;){tyCZ5G>Kt<3v zs06wb#{(S4g!pTT#3P_Ze@!GF2W`V+*br!Se(`a%0Z1sCe!&W!GehCquztB<1{&@Rw6(09Bt3h`W4%!DQ;OCk1eRo42p=m6 zuVC!LqU@ZC?A%4!;-c()Pj- zC14*K$1#-GTpDC!cwRT7ybI+w6L1l`{Wp~Nq5L)~ zxB8=Ye-B)|N)qY`|MreF($uy%>GKk`i}Hz7ZY9Fs1HKD5mdbD<+y#x|DLC~r8F(LX zKKw7;;o6p7^*~z8d0TdoI)>!RP+mP*5?ZOXB>nEB_JBV`_)^mDTiLc9sa*x-HB%(v zM;9rd3G88%3sWUwIhDg-A4n_D&W$f%4~&H`iTtcF_(euPiDrLwSyPae4AP`VF8O z=AR7XXo!o zM@!qrcqxKNsx`UP?q8|@>5^~*@@71`ebl-F?gc&s{21D^6ScF7>VH$>|MQuQD^wr&Wi|*(^>+Zz$(ML-B<30K-6DB%k5>Wko1&EAKuO4)~YolGRKe1{Y1 zJqMp(0oMp!`e53&F%9GZW{f5*DdAd*lMSWvHcl=^iJbv7i#d#AjKsN1Enc2w^7fQV zX(s>ig+x$5>auv4oKvn#Vv3=2+Lb0T9mn5-@I#AUV$ocS;vK|M$(jzKZ($ANwoOVb z#mT;u>=<{2$qJ{f{%yS9;;mzVVD~rHs&Di71(U}Ux9Y=g%-eRtJB`f$!Ya4K|DO~4 z|D~sPw8omJfJL`h^Z|?hn??VZMfY0t&lWvu(UTUvVA1RhiMyI=(bRrZdA5&jTomq< zYEr9=;%l}fl|$H`*Z%1e*K^^Ue39@;_>f;w{0QJf>yG?}J|aHUH~Hxpd@ArEAL2=> zSiE?inD6!1Hu(bLoWdImZ~jfI(T1e}*XZH?D06;TmmiV?AVTPAH_S?Jznt$@l6|h&FK{ zS%(gTXa-+}+_u?HEpE9B>Ba~bQHad{cZp&?#d~|d5Yi-YNESfn;N(Pglhfs3=uBYC zPfnA-;p}e#B6A~Ov=1ex8DMBHvgM^T37jBE7EsOH$lr{xw?w<0t5J??il8lTpPRZY zz}BDopk&LNoFH6}4B5bzx6f6(EP($K1IlSHq_Nxb_W9;UV05Ok9Kh>&i>u=Yysf=>`Tc$C(}I`CA)uur) zmY2s!1Pihy-_P90m!;P5`TQOfCCe9ONL-oj(J19!Yf}3=$Ie)E18B0meXf^hnH92A z>f8O>@b@iw+x{zONnEtjk~i!Fw +#include +#include +#include +#include "buffer.h" +#include "exit.h" +#include "cdb_make.h" +#include "open.h" +#include "stralloc.h" +#include "getln.h" +#include "strerr.h" +#include "byte.h" +#include "scan.h" +#include "fmt.h" +#include "ip4.h" + +#define FATAL "rbldns-data: fatal: " + +void nomem(void) +{ + strerr_die2x(111,FATAL,"out of memory"); +} + +int fd; +buffer b; +char bspace[1024]; + +int fdcdb; +struct cdb_make cdb; +static stralloc tmp; + +static stralloc line; +int match = 1; +unsigned long linenum = 0; + +char strnum[FMT_ULONG]; + +void syntaxerror(const char *why) +{ + strnum[fmt_ulong(strnum,linenum)] = 0; + strerr_die4x(111,FATAL,"unable to parse data line ",strnum,why); +} +void die_datatmp(void) +{ + strerr_die2sys(111,FATAL,"unable to create data.tmp: "); +} + +int main() +{ + char ip[4]; + unsigned long u; + unsigned int j; + unsigned int k; + char ch; + + umask(022); + + fd = open_read("data"); + if (fd == -1) strerr_die2sys(111,FATAL,"unable to open data: "); + buffer_init(&b,buffer_unixread,fd,bspace,sizeof bspace); + + fdcdb = open_trunc("data.tmp"); + if (fdcdb == -1) die_datatmp(); + if (cdb_make_start(&cdb,fdcdb) == -1) die_datatmp(); + + while (match) { + ++linenum; + if (getln(&b,&line,&match,'\n') == -1) + strerr_die2sys(111,FATAL,"unable to read line: "); + + while (line.len) { + ch = line.s[line.len - 1]; + if ((ch != ' ') && (ch != '\t') && (ch != '\n')) break; + --line.len; + } + if (!line.len) continue; + + switch(line.s[0]) { + default: + syntaxerror(": unrecognized leading character"); + case '#': + break; + case ':': + j = byte_chr(line.s + 1,line.len - 1,':'); + if (j >= line.len - 1) syntaxerror(": missing colon"); + if (ip4_scan(line.s + 1,ip) != j) syntaxerror(": malformed IP address"); + if (!stralloc_copyb(&tmp,ip,4)) nomem(); + if (!stralloc_catb(&tmp,line.s + j + 2,line.len - j - 2)) nomem(); + if (cdb_make_add(&cdb,"",0,tmp.s,tmp.len) == -1) + die_datatmp(); + break; + case '0': case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': + if (!stralloc_0(&line)) nomem(); + j = 0; + if (!stralloc_copys(&tmp,"")) nomem(); + for (;;) { + k = scan_ulong(line.s + j,&u); + if (!k) break; + ch = u; + if (!stralloc_catb(&tmp,&ch,1)) nomem(); + j += k; + if (line.s[j] != '.') break; + ++j; + } + if (!stralloc_catb(&tmp,"\0\0\0\0",4)) nomem(); + tmp.len = 4; + if (line.s[j] == '/') + scan_ulong(line.s + j + 1,&u); + else + u = 32; + if (u > 32) u = 32; + ch = u; + if (!stralloc_catb(&tmp,&ch,1)) nomem(); + if (cdb_make_add(&cdb,tmp.s,tmp.len,"",0) == -1) + die_datatmp(); + break; + } + } + + if (cdb_make_finish(&cdb) == -1) die_datatmp(); + if (fsync(fdcdb) == -1) die_datatmp(); + if (close(fdcdb) == -1) die_datatmp(); /* NFS stupidity */ + if (rename("data.tmp","data.cdb") == -1) + strerr_die2sys(111,FATAL,"unable to move data.tmp to data.cdb: "); + + _exit(0); +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/rbldns-data.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/rbldns-data.o new file mode 100644 index 0000000000000000000000000000000000000000..e9ca74187b5ae376c1b32584fbdc58da7db6001f GIT binary patch literal 8920 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 literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/rbldns.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/rbldns.c new file mode 100644 index 0000000..2c13c27 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/rbldns.c @@ -0,0 +1,116 @@ +#include +#include "str.h" +#include "byte.h" +#include "ip4.h" +#include "open.h" +#include "env.h" +#include "cdb.h" +#include "dns.h" +#include "dd.h" +#include "strerr.h" +#include "response.h" + +static char *base; + +static struct cdb c; +static char key[5]; +static char data[100 + IP4_FMT]; + +static int doit(char *q,char qtype[2]) +{ + int flaga; + int flagtxt; + char ch; + char reverseip[4]; + char ip[4]; + uint32 ipnum; + int r; + uint32 dlen; + int i; + + flaga = byte_equal(qtype,2,DNS_T_A); + flagtxt = byte_equal(qtype,2,DNS_T_TXT); + if (byte_equal(qtype,2,DNS_T_ANY)) flaga = flagtxt = 1; + if (!flaga && !flagtxt) goto REFUSE; + + if (dd(q,base,reverseip) != 4) goto REFUSE; + uint32_unpack(reverseip,&ipnum); + uint32_pack_big(ip,ipnum); + + for (i = 0;i <= 24;++i) { + ipnum >>= i; + ipnum <<= i; + uint32_pack_big(key,ipnum); + key[4] = 32 - i; + r = cdb_find(&c,key,5); + if (r == -1) return 0; + if (r) break; + } + if (!r) { response_nxdomain(); return 1; } + + r = cdb_find(&c,"",0); + if (r == -1) return 0; + if (r && ((dlen = cdb_datalen(&c)) >= 4)) { + if (dlen > 100) dlen = 100; + if (cdb_read(&c,data,dlen,cdb_datapos(&c)) == -1) return 0; + } + else { + dlen = 12; + byte_copy(data,dlen,"\177\0\0\2Listed $"); + } + + if ((dlen >= 5) && (data[dlen - 1] == '$')) { + --dlen; + dlen += ip4_fmt(data + dlen,ip); + } + + if (flaga) { + if (!response_rstart(q,DNS_T_A,2048)) return 0; + if (!response_addbytes(data,4)) return 0; + response_rfinish(RESPONSE_ANSWER); + } + if (flagtxt) { + if (!response_rstart(q,DNS_T_TXT,2048)) return 0; + ch = dlen - 4; + if (!response_addbytes(&ch,1)) return 0; + if (!response_addbytes(data + 4,dlen - 4)) return 0; + response_rfinish(RESPONSE_ANSWER); + } + + return 1; + + + REFUSE: + response[2] &= ~4; + response[3] &= ~15; + response[3] |= 5; + return 1; +} + +int respond(char *q,char qtype[2],char ip[4]) +{ + int fd; + int result; + + fd = open_read("data.cdb"); + if (fd == -1) return 0; + cdb_init(&c,fd); + result = doit(q,qtype); + cdb_free(&c); + close(fd); + return result; +} + +const char *fatal = "rbldns: fatal: "; +const char *starting = "starting rbldns\n"; + +void initialize(void) +{ + char *x; + + x = env_get("BASE"); + if (!x) + strerr_die2x(111,fatal,"$BASE not set"); + if (!dns_domain_fromdot(&base,x,str_len(x))) + strerr_die2x(111,fatal,"unable to parse $BASE"); +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/rbldns.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/rbldns.o new file mode 100644 index 0000000000000000000000000000000000000000..407956811bac91c3880663c4fc2dbd2206a53ffe GIT binary patch literal 5256 zcmbtXZ)_Ar6rbZ-D2mkxLE#v(m+hm1|`H`D=H8JsR2CSo1N(m%k2l_BzrUO z_kQosyqTSy+ZqTiALH>5-aO=4Qj$1I$o|UG*iVOkB9RGX^)VE*?C&*0bdW1()_}QI zvwpT^>nH0QN}*z|keRFXJ&nwOdM2P2)H8=sIF^JT?NqZ;g_3rvLc!klkUd_rZXhbv z^&&+6qxEpQSS&`PQQxS&wO;v7v*OBmbub9sP|(tqi<)&KXqn2jptVIAfys1fFsLf! zogFDQStq34Pay;AB*mMKVwq@)bP7kuV0PA3wa|2|yr#)It`Yz_sb*`WdHl7^tI|Qb1U)k$4!Ly%V`ML0%bu>>PVrK*&CH*5 zUh9i1En44tMGN-n%9JFwsSR4c(y>(6Ob7zj4>XB$f1bMx#jK^u!RLJ zMJSpw?1=j8fG7KhCwpsJ=4-0>(lhLXWut!8L0Ee5KU@oldbZ?g)WwBdLFzpLPWxyb zvLjw;+d&YsBYMA%@B{Eeq~${;TkAL5y5KQC$lj@ta+9H&f!s~0j!3xzumiawEpT+V z)cest#UicDVN%7WLaj0EYmihva9hi7QI^pCu)SGXGOG2XHgmhQGH5afz++<}1`R;D zQk|a+FNQD>-`-0TKu^uoLO+g=+z&sLYn|^o1Y@E|xfj5bmZwtCx=gkCr=|`sKp0oD zOunB(kfRk~es@lL0j4>zbg{ zJHx58AyX~U!)Dmmrbh@#MdErQy-1D%5?>^fv>8sBvBXB%R@_JM0IDIRNVXC(CKyYb zhAt~Cg(gmG27fnN(aKG^o*Pg8ZxbJcPd-%4y~znG2)Y4pP2`E6sf z<2F?Hcy^81>D^J8uVBg*%a$#YXEz&>SU4ds@Xhx%HmE+e-X0R-OLupe;Ry6*%I@3w zC}qUMKGWzjiH{C(#>5v%r$J8A=>rpdagouC_E0nx?l6e2E!ojwB)}XhY4}#Ge5C|opj`afY(varM2wFyxIK@rGRzs@&zzoT_Pmq%fb|QZ$9Xk6aBlyy z14k}4-Ury2??t2U~(41TYbWRNEbD6zhN{3GFL_nQuheU3lp;o0Ir#;Hf+9A7rylu0e zImhjck8}P=D;K|peq9KucLa2Zc91f^$g3dNi)B<0ue=v;*-S9M^2PMt^VSmrr!06c z@%el)4=)*aPdXCg%S^-HH(VF=)537>@j-^SGQ5lR*m*~*D}WTo&)mJuOS8QjpAOVnIFJNKbZzV+r__Cp+|{ zN$BMU2}UXv(qjfm8R^bsLMO>iBN0j&VV%HbD1=T)q}w!r6OA$w#syt8Wxybw1X0&X zCYCVgH-<8aPP`H@3CE#GY@^MOfqOel+6X1O?2M?2#v4_o=#8sH4eL6lkS-yqC?u9{ zw=-)?c6O6k=YmkQ1E*|X)?gWE<7X?=3d; zBYvlzq^Qluvxf8Oe@Kwg&m;j~3S(?MpUJjJHn1M~h;ct@0T=!BFr540b9-Oli+(OR z`1MS_B=GS}Nmf_fm{8=viISyQAei{Wom_PUbjDSA|IM1_1 z!13(dGk zwm8Ev9|a!n$7DF3iz5Fm7yKQ;51x(O&xZ_mo&z5Xe6c=<1il!zU*L;%`&Phb2ytOZ g8@?X6ujbq0==YQ3%NQ=R9`nRn@aAU&jvrw1zYkzy{Qv*} literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/readclose.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/readclose.c new file mode 100644 index 0000000..b9368cf --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/readclose.c @@ -0,0 +1,21 @@ +#include +#include "error.h" +#include "readclose.h" + +int readclose_append(int fd,stralloc *sa,unsigned int bufsize) +{ + int r; + for (;;) { + if (!stralloc_readyplus(sa,bufsize)) { close(fd); return -1; } + r = read(fd,sa->s + sa->len,bufsize); + if (r == -1) if (errno == error_intr) continue; + if (r <= 0) { close(fd); return r; } + sa->len += r; + } +} + +int readclose(int fd,stralloc *sa,unsigned int bufsize) +{ + if (!stralloc_copys(sa,"")) { close(fd); return -1; } + return readclose_append(fd,sa,bufsize); +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/readclose.h b/NONE-CKUBU/src/djbdns/djbdns-1.05/readclose.h new file mode 100644 index 0000000..49afd6c --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/readclose.h @@ -0,0 +1,9 @@ +#ifndef READCLOSE_H +#define READCLOSE_H + +#include "stralloc.h" + +extern int readclose_append(int,stralloc *,unsigned int); +extern int readclose(int,stralloc *,unsigned int); + +#endif diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/readclose.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/readclose.o new file mode 100644 index 0000000000000000000000000000000000000000..630e4e06356a6ac8893b5cc264f4fa11e7d97d9a GIT binary patch literal 2216 zcmbtV&1(};5P!+0Hr6&x#Y4biatKnvE^QT&3X*LTyN94sZ4qn@n`BFiNj7dakb3Zg z*y1B9IePaW@ZdoZq);!O#6#7SUIgn0S{0#(LY>)tFIir<7ae$=ncw_o-pt$g(wnLD z8Nbg*xcJCv()Kt?$Vq?OPS|FG^pGy1Oe^$_GNsTp<)T8jrd0ap!q>hzxi@;pW-YDU z81LT=hINf~vj9+(EAe_3+SiShB#*g#Ux zE@-9Laru}$GB_*`A8|}V5QbFcNm_E#KcB%{|Bq8j}1L9uzU9slB<_|+IZZ!hSEqs5m4eoQD zf+VzE&(bcVGQzyODA;^{4ky46XTn&G5r@zL!Slm!#Pj+2odb;b0%l7dGcejh97E(@ z0$9Y5`N|9Q;PwF~p1nI?oL?-9zIb++U$cLC2zkg7x&hk@OPn7uul>X9{#}E(Tg3g{ zF}IDp0QtG?#<(qco*4Gw)d}KWUl?&VBrnXgwBt280m(iAfefzHI+b>;2h9DhKAS9b z2(4Ey1Il)*>I!t&aen7WqF6^x25=h}8gE0^_Bp1`l9 zRwx*`46+u>g=)p-kW5B5&61IUkY+6yB?7KtW)@18N$g_nQtcW!qr6zLn}I(vGw@D! z!P>(AHy}wDj&G6U=Uq77QI6xhC|C!-1;=q-6vRWYIDQ*J5D|amz;-Y0+wz3r$j9^J dbw0Xqcm2069N!G*#~6;YVl6IwE{-=@;4ducBh&x@ literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/response.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/response.c new file mode 100644 index 0000000..ba90c89 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/response.c @@ -0,0 +1,121 @@ +#include "dns.h" +#include "byte.h" +#include "uint16.h" +#include "response.h" + +char response[65535]; +unsigned int response_len = 0; /* <= 65535 */ +static unsigned int tctarget; + +#define NAMES 100 +static char name[NAMES][128]; +static unsigned int name_ptr[NAMES]; /* each < 16384 */ +static unsigned int name_num; + +int response_addbytes(const char *buf,unsigned int len) +{ + if (len > 65535 - response_len) return 0; + byte_copy(response + response_len,len,buf); + response_len += len; + return 1; +} + +int response_addname(const char *d) +{ + unsigned int dlen; + unsigned int i; + char buf[2]; + + dlen = dns_domain_length(d); + + while (*d) { + for (i = 0;i < name_num;++i) + if (dns_domain_equal(d,name[i])) { + uint16_pack_big(buf,49152 + name_ptr[i]); + return response_addbytes(buf,2); + } + if (dlen <= 128) + if (name_num < NAMES) { + byte_copy(name[name_num],dlen,d); + name_ptr[name_num] = response_len; + ++name_num; + } + i = (unsigned char) *d; + ++i; + if (!response_addbytes(d,i)) return 0; + d += i; + dlen -= i; + } + return response_addbytes(d,1); +} + +int response_query(const char *q,const char qtype[2],const char qclass[2]) +{ + response_len = 0; + name_num = 0; + if (!response_addbytes("\0\0\201\200\0\1\0\0\0\0\0\0",12)) return 0; + if (!response_addname(q)) return 0; + if (!response_addbytes(qtype,2)) return 0; + if (!response_addbytes(qclass,2)) return 0; + tctarget = response_len; + return 1; +} + +static unsigned int dpos; + +static int flaghidettl = 0; + +void response_hidettl(void) +{ + flaghidettl = 1; +} + +int response_rstart(const char *d,const char type[2],uint32 ttl) +{ + char ttlstr[4]; + if (!response_addname(d)) return 0; + if (!response_addbytes(type,2)) return 0; + if (!response_addbytes(DNS_C_IN,2)) return 0; + if (flaghidettl) ttl = 0; + uint32_pack_big(ttlstr,ttl); + if (!response_addbytes(ttlstr,4)) return 0; + if (!response_addbytes("\0\0",2)) return 0; + dpos = response_len; + return 1; +} + +void response_rfinish(int x) +{ + uint16_pack_big(response + dpos - 2,response_len - dpos); + if (!++response[x + 1]) ++response[x]; +} + +int response_cname(const char *c,const char *d,uint32 ttl) +{ + if (!response_rstart(c,DNS_T_CNAME,ttl)) return 0; + if (!response_addname(d)) return 0; + response_rfinish(RESPONSE_ANSWER); + return 1; +} + +void response_nxdomain(void) +{ + response[3] |= 3; + response[2] |= 4; +} + +void response_servfail(void) +{ + response[3] |= 2; +} + +void response_id(const char id[2]) +{ + byte_copy(response,2,id); +} + +void response_tc(void) +{ + response[2] |= 2; + response_len = tctarget; +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/response.h b/NONE-CKUBU/src/djbdns/djbdns-1.05/response.h new file mode 100644 index 0000000..206b1d4 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/response.h @@ -0,0 +1,27 @@ +#ifndef RESPONSE_H +#define RESPONSE_H + +#include "uint32.h" + +extern char response[]; +extern unsigned int response_len; + +extern int response_query(const char *,const char *,const char *); +extern void response_nxdomain(void); +extern void response_servfail(void); +extern void response_id(const char *); +extern void response_tc(void); + +extern int response_addbytes(const char *,unsigned int); +extern int response_addname(const char *); +extern void response_hidettl(void); +extern int response_rstart(const char *,const char *,uint32); +extern void response_rfinish(int); + +#define RESPONSE_ANSWER 6 +#define RESPONSE_AUTHORITY 8 +#define RESPONSE_ADDITIONAL 10 + +extern int response_cname(const char *,const char *,uint32); + +#endif diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/response.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/response.o new file mode 100644 index 0000000000000000000000000000000000000000..39ead5e1db9bbbe2dcae96910aa5e6027501487e GIT binary patch literal 5184 zcmbtYZ){uD6~B(nnsvoVSlI#;cpz(PrD5teo7(X&hOoX&R{4`v0;QF4{3o$+oM69X z4Its*w(MalD#kRvfIu3oLQLuh=qiRnx)jOAte%0*DBu`7F8#LqpP4pdz6^F^b{>t{-_Y?7EiO{; zn*;ss8TX5I$2KoiE^+^sa{rQ;wWp85{=;b%yo^4zMxbYMG7S?^k z9vy%Bmv-7a5VEsxb{xDP-SyefuGwE}bz-HRovYP=h6d*fl5cWb@|XSYSK9{c`lsDG zK(cmqOeNh{I(D5Pt~cMrd%I^Rx=sxh_IY-FF0}cb$pQCx$~|Gbr|rX^tgxqFMQj~n z_pI}FqvwyXZTCcB`n2km^mK6u)I7U>qSud}2i(Wo4AoOS^GCQgRPd zS=`lowXRq2)FU$}GL5DOn$PK|H4tofdu+jWOR+OlptZL9h5HsKGqIXRYHW{n+l^Ap zqN%Kwbk1zFp(DU}T-XWwt zKdIC8_U8blID?>)Wi&BM%Wdq>4|Kh_d!O@rnj~;B%CshiDz&E?xmYJwy}91D+bq@FT)WTM(|J_` zvMN-L7naQZ)bBCq{}NP4DJ=7J%{UoWYna}JyKhyYot>fZsuk_~hzooT_kE9BG{Ae< z?%);;@D$ta+@b-VV;i~%^n2L|;*T|=;5^6p7PLtZkCA$W@e44=>!Y35 zN4p;i?``XgTFL0zzG!d#oIMfvf6Bc5Xtze!?`f-tfk(XBsD9ua7js|3_*1}tu_s)Q z+!VDQ!l_2G<%S!6X07eZ4;3?It0%rOzTt{QJh9GGm5NuVMxD$MwNAxrM?|aSOPRQn z-|47$F5_fWe5hJg@yeKI=-&KDx=_iC=2bj9HaeOw6SX|%cK33@O-uO=WZ;{O8yxCPggYsqNkzlq1+6mXFFON`B= z1m}dlP2cwz?d*^GVU5IJ>Sq%c7(zRabKNi1mj4sv-m;AU!|d;SdRoxGi{N1G!4&_D z=hplU`oj*^9_01k^<26+_$o4S&IIQVTC4GGIFQ^F7%*UZq!z#6Mbtm(vt+4+TUH!- zw8{kd(iKK}A;P6cTC6K@nWx~FG5$R7XTiPqC!!7n@GF^bQLANx*Yr?>_!iqZ<3+;y zS`f=`!%I#FuP>~4k$kGw!p-dc4t%4XXVgvZlC6x(xgvMT9fWtO&lfFfA^1Rq6zM@6 z3kHeQ=^oO7uh*z|Pe6Tuo~~w<{detA!oj~8BodtekSFPpTwselOA7eo4Cp(F^p_Yv zz_`AXNPmr1o9WuNB@!xUK`gJo~+H>au0{3Fg1S{C?*5N*vz0 zPcg14`Re#sxtfn>RiTs_9x3MXj#E-j*2z?c^Nz}mk5yHf?xu8kVpJ=hHSScJzG?B2 zVCnMC+}LQQSZ-39O1he_OcpZ5l8-o9UoYi-pL8*&hNhf+Iy*K#ufMS z=O02LNzj;aIt|>+zsJBYBp<2I?FMf0hZ)CyMy*9k%kU=+9QlYmXyBI+DC7Rlz|C== zW?aUVFN0^7;XiNSX5C&iaO5NJ#an^+^8Nmuo>5{y6gv1o&bf3*hn{u@Jy5o`n4U QAo1n?xA=V&+~Ruu7rGi&!~g&Q literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/roots.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/roots.c new file mode 100644 index 0000000..4162ec5 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/roots.c @@ -0,0 +1,128 @@ +#include +#include "open.h" +#include "error.h" +#include "str.h" +#include "byte.h" +#include "error.h" +#include "direntry.h" +#include "ip4.h" +#include "ip6.h" +#include "dns.h" +#include "openreadclose.h" +#include "roots.h" + +static stralloc data; + +static int roots_find(char *q) +{ + int i; + int j; + + i = 0; + while (i < data.len) { + j = dns_domain_length(data.s + i); + if (dns_domain_equal(data.s + i,q)) return i + j; + i += j; + i += 256; + } + return -1; +} + +static int roots_search(char *q) +{ + int r; + + for (;;) { + r = roots_find(q); + if (r >= 0) return r; + if (!*q) return -1; /* user misconfiguration */ + q += *q; + q += 1; + } +} + +int roots(char servers[256],char *q) +{ + int r; + r = roots_find(q); + if (r == -1) return 0; + byte_copy(servers,256,data.s + r); + return 1; +} + +int roots_same(char *q,char *q2) +{ + return roots_search(q) == roots_search(q2); +} + +static int init2(DIR *dir) +{ + direntry *d; + const char *fqdn; + static char *q; + static stralloc text; + char servers[256]; + int serverslen; + int i; + int j; + + for (;;) { + errno = 0; + d = readdir(dir); + if (!d) { + if (errno) return 0; + return 1; + } + + if (d->d_name[0] != '.') { + if (openreadclose(d->d_name,&text,32) != 1) return 0; + if (!stralloc_append(&text,"\n")) return 0; + + fqdn = d->d_name; + if (str_equal(fqdn,"@")) fqdn = "."; + if (!dns_domain_fromdot(&q,fqdn,str_len(fqdn))) return 0; + + serverslen = 0; + j = 0; + for (i = 0;i < text.len;++i) + if (text.s[i] == '\n') { + if (serverslen <= 60) + if (ip6_scan(text.s + j,servers + serverslen)) + serverslen += 16; + j = i + 1; + } + byte_zero(servers + serverslen,256 - serverslen); + + if (!stralloc_catb(&data,q,dns_domain_length(q))) return 0; + if (!stralloc_catb(&data,servers,256)) return 0; + } + } +} + +static int init1(void) +{ + DIR *dir; + int r; + + if (chdir("servers") == -1) return 0; + dir = opendir("."); + if (!dir) return 0; + r = init2(dir); + closedir(dir); + return r; +} + +int roots_init(void) +{ + int fddir; + int r; + + if (!stralloc_copys(&data,"")) return 0; + + fddir = open_read("."); + if (fddir == -1) return 0; + r = init1(); + if (fchdir(fddir) == -1) r = 0; + close(fddir); + return r; +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/roots.h b/NONE-CKUBU/src/djbdns/djbdns-1.05/roots.h new file mode 100644 index 0000000..5f89142 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/roots.h @@ -0,0 +1,8 @@ +#ifndef ROOTS_H +#define ROOTS_H + +extern int roots(char *,char *); +extern int roots_same(char *,char *); +extern int roots_init(void); + +#endif diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/roots.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/roots.o new file mode 100644 index 0000000000000000000000000000000000000000..a37b0ecf3273c373e5b221c957cdbedf4a1198b2 GIT binary patch literal 4568 zcmbtXZ){Ul6u)f;41~7)(}BpUKFKhwSrKI@l0MeSBdI6?$&``OwXd$RYe)NrgAg2c zC3)GZOT@$vL`meE#7_iqB33s<6Qc`+glrK+i5YHye*;0Vo^#*5_V&^D$&>Wmdw%D4 z&pG$p`|f>xtvUFN-DV?PY-9~7X&fb_WlE{M5lLYLn+rk_{(jz}H=mA->g4Ya|&!%`h>k4O!)Jt{TQ z_JrhzR@paz7mLMfpSg(KS>U|qfI!e(4QnjlV zVnZ9$Z=A-&m?>9q^&S9XPxoA}c0tLv%pLTAkxo$2FB(zDZLXXhNE9sv!m$%(a;|V3 zAfmVe=lOU=zo36nKI|w^`e>O?;u0wNJ(4?D&|YfxUG|;vUHt?w((JoBF(2ozWKY>v zJ%C>GO}3p&^dZF<+OxWDM%RyW_V((%d-TyV)~ln`C3PNH`g72B-B&Pb(f2euV*SUl zU!I$`NXcuGdl1tq%Q^SyKgFVN4C+S*Lp>)NW3Ji&WFNUj$0+&LjX~QrYR1~M7mGzX zJM7j+pN&jjX$8&T`^Ex#k+Pu87HqU&P%jEy8M(uGbiHUP`rNrQT5e)r48`lJ?Zv!_ zyk)(9N8Y?;laigR?wf^B?rZHuqim4Z+We76a2ik5qbcK8jJYe3?-iS|vWkP2HK<>c z^~OW5uUfWso7^gI8)EYW@Hot($WREa=znce^uH(O;X1jFIeH7)M#Xiq zpyXQ}Hgwnm^jrbFcVC)V=&J3(OkBsBNpB%Gpm_~yVhT{NkJnRb_a%AN@K)D>!Zz2j zg4_x(0Fh5%(1|e`yWCn<56nb?<++Rtbq3xQZLty=Q5^FzsIkxVi)=CtYo7$*U~h}mAZLnq}NvA=15!;!D*pR#{y zb{exG50-&S4?fpA-FbVnvqpA$WM^H#*^r&GzpCGXz7l8$$>IZeva@Etqu(BIda_lR zM?c~qbjQk0cNXKWYifGZQx{O%;^Cxch4(S<@_L`wx76qo;?3;p(86udYH6cw=e@L= z2zxcPTO;0RSPK(xTP8!i=@cqR2REQ1No^0s(%}x3cq6Hf4mAlQk||B~uG_GsKBI*r zuh6vq*TVy&aXF@%y!e@Z&QWe~m#gG{(5p-ss&(|0Amn*wyazChQ;kND8lxdgphesi zhSXGY3OqBs3^4R*9`9kq2C#`@&ff<{jK5qYL7$IznQ-Ky@V1%taZ8BOz~UbgLFn`O zbJ!0Z^PJGuJsY2dY^P5`uzt8kd_1q;bAa(&7?n07%xSF%R^YZ&z;MX*N=a4VVw&dK zi{sl-5yYG;>gL)Z{T(*Z?acX1z;H{M=RX~=O7U-E!9bRo0-98VRN;xdD)L*gf(hbP z_Ts3R3FcS1m<}R*?65#M9~*?mIZ#$ z0zYhle`JAwZh@b*z%NoOZ~TwgbPxv*X+ix_^0;q*=f{2>cJ zB%MlW8E=Hps}65H@A8!^8_5oARvOk&ES`+AZaf*+2wZ~UL?RUlMN*x+G9=ZhCPQg8 z93_$VXgp1IY(pV6old4gzzl2gRFWWv6R;miq%vyBTeuS(MNtn$@jS&hbO6$vxE%*o`Wv9bJY9$oM)5OE{2G-(hj%UPe{9FSuycv8vWng)z z>}4(T@owY%K8EwSYU`R|(e-2eLmAMXav$3Gn?7%S@G&3$?llQ~JkvRUqktoy&tb0x-fzOWpTj1c`zZ+c0wL~c0Y@(0 zzbM}bIPOXA|Ez$E{85JUb@ZSUkc$EzzahDw-!1qzEcnxL0YR|AZ+Y&gPQdYh7RNUT z_+kMM3pn1Lod2GHf h9~SsH76t3iTvA=3&l1kR6FN;eKmYkT!2R&^|6d}n?tcIP literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/rts b/NONE-CKUBU/src/djbdns/djbdns-1.05/rts new file mode 100755 index 0000000..176f21e --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/rts @@ -0,0 +1,3 @@ +#!/bin/sh +# WARNING: This file was auto-generated. Do not edit! +env - PATH="`pwd`:$PATH" sh rts.tests 2>&1 | cat -v diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/rts.exp b/NONE-CKUBU/src/djbdns/djbdns-1.05/rts.exp new file mode 100644 index 0000000..fd40964 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/rts.exp @@ -0,0 +1,1072 @@ +--- dnscache-conf works +--- tinydns-conf works +--- pickdns-conf works +--- walldns-conf works +--- rbldns-conf works +--- axfrdns-conf works +--- cache handles simple example + + + + + +un + + + + +un +deux + + + +un +deux +trois + + +un +deux +trois +quatre + +un +deux +trois +quatre +cinq +een +deux +trois +quatre +cinq +een +twee +trois +quatre +cinq +een +twee +drie +quatre +cinq +een +twee +drie +vier +cinq +een +twee +drie +vier +vijf +0 +--- cache handles overwriting + + + + + +un + + + + +een + + + + +een +deux + + + +een +twee + + + +een +twee +trois + + +een +twee +drie + + + +twee +drie +quatre + + +twee +drie +vier + + + +drie +vier +cinq + + +drie +vier +vijf +0 +--- cache handles long chains +1 +2 +3 +4 +5 +6 +7 +8 +9 +0 +--- dnsip finds IP address of network-surveys.cr.yp.to +131.193.178.100 +0 +--- dnsip does not find nonexistent.cr.yp.to + +0 +--- dnsip rejects overly long domain names +dnsip: fatal: unable to find IP address for x.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789: protocol error +111 +--- dnsip handles IP address on input +1.2.3.4 +127.0.0.1 +10.43.166.133 +10.43.166.133 +0 +--- dnsip allows 0 to be omitted +127.0.0.1 +0 +--- dnsip handles multiple IP addresses on input +1.2.3.4 5.6.7.8 9.10.11.12 13.14.15.16 +0 +--- dnsipq handles simple examples +1.2.3.4 1.2.3.4 +localhost 127.0.0.1 +localhost 127.0.0.1 +5.6.7.8 5.6.7.8 +network-surveys.cr.yp.to 131.193.178.100 +nonexistent.whatever.cr.yp.to +0 +--- dnsmx finds MX record for network-surveys.cr.yp.to +0 a.mx.network-surveys.cr.yp.to +0 +--- dnsmx manufactures MX record for nonexistent.cr.yp.to +0 nonexistent.cr.yp.to +0 +--- dnsmx rejects overly long domain names +dnsmx: fatal: unable to find MX records for 0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789: protocol error +111 +--- dnstxt finds TXT record for leap.yp.to +8222222206660602022066620620. +0 +--- dnstxt does not find nonexistent.cr.yp.to + +0 +--- dnstxt rejects overly long domain names +dnstxt: fatal: unable to find TXT records for 0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789: protocol error +111 +--- dnsname finds host name of 131.193.178.100 +network-surveys.cr.yp.to +0 +--- dnsname does not find 127.5.6.7 + +0 +--- dnsname rejects misformatted IP addresses +dnsname: fatal: unable to parse IP address 1.2.3 +111 +--- dnsfilter finds some host names +131.193.178.100+one=network-surveys.cr.yp.to two three +127.5.6.7+one two three +10+one two three +0 +--- tinydns-data complains about unrecognized initial characters +tinydns-data: fatal: unable to parse data line 3: unrecognized leading character +111 +--- tinydns-data complains if it cannot create data.tmp +tinydns-data: fatal: unable to create data.tmp: symbolic link loop +111 +--- tinydns-data handles simple example +0 +--- tinydns-data produces A records +1 wormhole.movie.edu: +117 bytes, 1+2+2+1 records, response, authoritative, noerror +additional: a.ns.movie.edu 259200 A 192.249.249.3 +answer: wormhole.movie.edu 86400 A 192.249.249.1 +answer: wormhole.movie.edu 86400 A 192.253.253.1 +authority: movie.edu 259200 NS a.ns.movie.edu +authority: movie.edu 259200 NS wormhole.movie.edu +query: 1 wormhole.movie.edu +0 +--- tinydns-data produces NS records +2 movie.edu: +117 bytes, 1+2+0+3 records, response, authoritative, noerror +query: 2 movie.edu +answer: movie.edu 259200 NS a.ns.movie.edu +answer: movie.edu 259200 NS wormhole.movie.edu +additional: a.ns.movie.edu 259200 A 192.249.249.3 +additional: wormhole.movie.edu 86400 A 192.249.249.1 +additional: wormhole.movie.edu 86400 A 192.253.253.1 +0 +--- tinydns-data produces SOA records +6 movie.edu: +164 bytes, 1+1+2+3 records, response, authoritative, noerror +query: 6 movie.edu +answer: movie.edu 2560 SOA a.ns.movie.edu hostmaster.movie.edu 987654321 16384 2048 1048576 2560 +authority: movie.edu 259200 NS a.ns.movie.edu +authority: movie.edu 259200 NS wormhole.movie.edu +additional: a.ns.movie.edu 259200 A 192.249.249.3 +additional: wormhole.movie.edu 86400 A 192.249.249.1 +additional: wormhole.movie.edu 86400 A 192.253.253.1 +0 +--- tinydns-data produces PTR records +12 1.253.253.192.in-addr.arpa: +175 bytes, 1+1+3+3 records, response, authoritative, noerror +query: 12 1.253.253.192.in-addr.arpa +answer: 1.253.253.192.in-addr.arpa 86400 PTR wormhole.movie.edu +authority: 253.253.192.in-addr.arpa 259200 NS a.ns.253.253.192.in-addr.arpa +authority: 253.253.192.in-addr.arpa 259200 NS b.ns.253.253.192.in-addr.arpa +authority: 253.253.192.in-addr.arpa 259200 NS c.ns.253.253.192.in-addr.arpa +additional: a.ns.253.253.192.in-addr.arpa 259200 A 192.249.249.3 +additional: b.ns.253.253.192.in-addr.arpa 259200 A 192.249.249.1 +additional: c.ns.253.253.192.in-addr.arpa 259200 A 192.253.253.1 +0 +--- tinydns-data produces MX records +15 movie.edu: +154 bytes, 1+1+2+4 records, response, authoritative, noerror +query: 15 movie.edu +answer: movie.edu 86400 MX 0 a.mx.movie.edu +authority: movie.edu 259200 NS a.ns.movie.edu +authority: movie.edu 259200 NS wormhole.movie.edu +additional: a.mx.movie.edu 86400 A 192.249.249.1 +additional: a.ns.movie.edu 259200 A 192.249.249.3 +additional: wormhole.movie.edu 86400 A 192.249.249.1 +additional: wormhole.movie.edu 86400 A 192.253.253.1 +0 +--- tinydns-data produces TXT records +16 movie.edu: +146 bytes, 1+1+2+3 records, response, authoritative, noerror +query: 16 movie.edu +answer: movie.edu 86400 16 \020Movie\040University +authority: movie.edu 259200 NS a.ns.movie.edu +authority: movie.edu 259200 NS wormhole.movie.edu +additional: a.ns.movie.edu 259200 A 192.249.249.3 +additional: wormhole.movie.edu 86400 A 192.249.249.1 +additional: wormhole.movie.edu 86400 A 192.253.253.1 +0 +--- tinydns-data produces AXFR responses +252 movie.edu: +27 bytes, 1+0+0+0 records, response, authoritative, notimp +query: 252 movie.edu +0 +--- tinydns-data produces ANY responses +255 movie.edu: +293 bytes, 1+9+0+4 records, response, authoritative, noerror +query: 255 movie.edu +answer: movie.edu 2560 SOA a.ns.movie.edu hostmaster.movie.edu 987654321 16384 2048 1048576 2560 +answer: movie.edu 259200 NS a.ns.movie.edu +answer: movie.edu 259200 NS wormhole.movie.edu +answer: movie.edu 86400 MX 0 a.mx.movie.edu +answer: movie.edu 86400 16 \020Movie\040University +answer: movie.edu 86400 12345 One +answer: movie.edu 86400 12345 Two +answer: movie.edu 86400 12346 Three +answer: movie.edu 86400 12346 Four +additional: a.ns.movie.edu 259200 A 192.249.249.3 +additional: wormhole.movie.edu 86400 A 192.249.249.1 +additional: wormhole.movie.edu 86400 A 192.253.253.1 +additional: a.mx.movie.edu 86400 A 192.249.249.1 +0 +--- tinydns-data produces records of any type +12345 movie.edu: +147 bytes, 1+2+2+3 records, response, authoritative, noerror +query: 12345 movie.edu +answer: movie.edu 86400 12345 One +answer: movie.edu 86400 12345 Two +authority: movie.edu 259200 NS a.ns.movie.edu +authority: movie.edu 259200 NS wormhole.movie.edu +additional: a.ns.movie.edu 259200 A 192.249.249.3 +additional: wormhole.movie.edu 86400 A 192.249.249.1 +additional: wormhole.movie.edu 86400 A 192.253.253.1 +0 +12346 movie.edu: +150 bytes, 1+2+2+3 records, response, authoritative, noerror +query: 12346 movie.edu +answer: movie.edu 86400 12346 Three +answer: movie.edu 86400 12346 Four +authority: movie.edu 259200 NS a.ns.movie.edu +authority: movie.edu 259200 NS wormhole.movie.edu +additional: a.ns.movie.edu 259200 A 192.249.249.3 +additional: wormhole.movie.edu 86400 A 192.249.249.1 +additional: wormhole.movie.edu 86400 A 192.253.253.1 +0 +--- tinydns-data produces NODATA responses +54321 movie.edu: +79 bytes, 1+0+1+0 records, response, authoritative, noerror +query: 54321 movie.edu +authority: movie.edu 2560 SOA a.ns.movie.edu hostmaster.movie.edu 987654321 16384 2048 1048576 2560 +0 +--- tinydns-data produces NXDOMAIN responses +1 this.does.not.exist.movie.edu: +99 bytes, 1+0+1+0 records, response, authoritative, nxdomain +query: 1 this.does.not.exist.movie.edu +authority: movie.edu 2560 SOA a.ns.movie.edu hostmaster.movie.edu 987654321 16384 2048 1048576 2560 +0 +--- tinydns-data produces NXDOMAIN responses for suffixes +1 ns.movie.edu: +79 bytes, 1+0+1+0 records, response, authoritative, nxdomain +query: 1 ns.movie.edu +authority: movie.edu 2560 SOA a.ns.movie.edu hostmaster.movie.edu 987654321 16384 2048 1048576 2560 +0 +--- tinydns-data produces NXDOMAIN ANY responses for suffixes +255 ns.movie.edu: +79 bytes, 1+0+1+0 records, response, authoritative, nxdomain +query: 255 ns.movie.edu +authority: movie.edu 2560 SOA a.ns.movie.edu hostmaster.movie.edu 987654321 16384 2048 1048576 2560 +0 +--- tinydns-data does not produce responses outside its bailiwick +1 edu: +0 +--- tinydns-data does not include TXT in additional sections +1 blah.movie.edu: +62 bytes, 1+1+1+0 records, response, authoritative, noerror +query: 1 blah.movie.edu +answer: blah.movie.edu 259200 A 1.2.3.4 +authority: blah.movie.edu 259200 NS blah.movie.edu +0 +--- tinydns-data handles another example +0 +--- tinydns-data uses serial 1 for mtime 0 +255 test: +152 bytes, 1+3+0+3 records, response, authoritative, noerror +query: 255 test +answer: test 2560 SOA a.ns.test hostmaster.test 1 16384 2048 1048576 2560 +answer: test 259200 NS a.ns.test +answer: test 259200 NS b.ns.test +additional: a.ns.test 259200 A 10.2.3.4 +additional: b.ns.test 259200 A 10.2.3.6 +additional: b.ns.test 259200 A 10.2.3.5 +0 +--- tinydns-data does not split size-127 TXT records +16 127.test: +249 bytes, 1+1+2+3 records, response, authoritative, noerror +query: 16 127.test +answer: 127.test 86400 16 \1770123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456 +authority: test 259200 NS a.ns.test +authority: test 259200 NS b.ns.test +additional: a.ns.test 259200 A 10.2.3.4 +additional: b.ns.test 259200 A 10.2.3.6 +additional: b.ns.test 259200 A 10.2.3.5 +0 +--- tinydns-data splits size-128 TXT records +16 128.test: +251 bytes, 1+1+2+3 records, response, authoritative, noerror +query: 16 128.test +answer: 128.test 86400 16 \1770123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456\0017 +authority: test 259200 NS a.ns.test +authority: test 259200 NS b.ns.test +additional: a.ns.test 259200 A 10.2.3.4 +additional: b.ns.test 259200 A 10.2.3.6 +additional: b.ns.test 259200 A 10.2.3.5 +0 +--- tinydns-data splits size-254 TXT records +16 254.test: +377 bytes, 1+1+2+3 records, response, authoritative, noerror +query: 16 254.test +answer: 254.test 86400 16 \1770123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456\1777890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123 +authority: test 259200 NS a.ns.test +authority: test 259200 NS b.ns.test +additional: a.ns.test 259200 A 10.2.3.4 +additional: b.ns.test 259200 A 10.2.3.6 +additional: b.ns.test 259200 A 10.2.3.5 +0 +--- tinydns-data doubly splits size-255 TXT records +16 255.test: +379 bytes, 1+1+2+3 records, response, authoritative, noerror +query: 16 255.test +answer: 255.test 86400 16 \1770123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456\1777890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123\0014 +authority: test 259200 NS a.ns.test +authority: test 259200 NS b.ns.test +additional: a.ns.test 259200 A 10.2.3.4 +additional: b.ns.test 259200 A 10.2.3.6 +additional: b.ns.test 259200 A 10.2.3.5 +0 +--- tinydns-data excludes the additional section if necessary +16 387.test: +512 bytes, 1+1+2+3 records, response, authoritative, noerror +query: 16 387.test +answer: 387.test 86400 16 \1770123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456\1777890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123\1774567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890\006123456 +authority: test 259200 NS a.ns.test +authority: test 259200 NS b.ns.test +additional: a.ns.test 259200 A 10.2.3.4 +additional: b.ns.test 259200 A 10.2.3.6 +additional: b.ns.test 259200 A 10.2.3.5 +0 +16 388.test: +465 bytes, 1+1+2+0 records, response, authoritative, noerror +query: 16 388.test +answer: 388.test 86400 16 \1770123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456\1777890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123\1774567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890\0071234567 +authority: test 259200 NS a.ns.test +authority: test 259200 NS b.ns.test +0 +--- tinydns-data excludes the authority section if necessary +16 435.test: +512 bytes, 1+1+2+0 records, response, authoritative, noerror +query: 16 435.test +answer: 435.test 86400 16 \1770123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456\1777890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123\17745678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678906123456789012345678901234567890123456789012345678901234 +authority: test 259200 NS a.ns.test +authority: test 259200 NS b.ns.test +0 +16 436.test: +478 bytes, 1+1+0+0 records, response, authoritative, noerror +query: 16 436.test +answer: 436.test 86400 16 \1770123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456\1777890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123\177456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789071234567890123456789012345678901234567890123456789012345 +0 +--- tinydns-data handles size-1000 TXT records +16 1000.test: +1047 bytes, 1+1+0+0 records, response, authoritative, noerror +query: 16 1000.test +answer: 1000.test 86400 16 \1770123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456\1777890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123\1774567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890\1771234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567\1778901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234\1775678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901\1772345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678o901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 +0 +--- tinydns-data handles unusual characters in owner names +1 \000\001\177\200\277\056\056\056.test: +130 bytes, 1+1+2+3 records, response, authoritative, noerror +query: 1 \000\001\177\200\277\056\056\056.test +answer: \000\001\177\200\277\056\056\056.test 86400 A 10.5.6.7 +authority: test 259200 NS a.ns.test +authority: test 259200 NS b.ns.test +additional: a.ns.test 259200 A 10.2.3.4 +additional: b.ns.test 259200 A 10.2.3.6 +additional: b.ns.test 259200 A 10.2.3.5 +0 +--- tinydns-data handles unusual characters in PTR results +12 7.6.5.10.in-addr.arpa: +99 bytes, 1+1+1+1 records, response, authoritative, noerror +query: 12 7.6.5.10.in-addr.arpa +answer: 7.6.5.10.in-addr.arpa 86400 PTR \000\001\177\200\277\056\056\056.test +authority: 7.6.5.10.in-addr.arpa 259200 NS ns.7.6.5.10.in-addr.arpa +additional: ns.7.6.5.10.in-addr.arpa 259200 A 10.5.6.7 +0 +--- tinydns-data handles delegations +1 x.\000\001\177\200\277\056\056\056.test: +66 bytes, 1+0+1+1 records, response, noerror +query: 1 x.\000\001\177\200\277\056\056\056.test +authority: x.\000\001\177\200\277\056\056\056.test 259200 NS ns.x.\000\001\177\200\277\056\056\056.test +additional: ns.x.\000\001\177\200\277\056\056\056.test 259200 A 10.8.9.10 +0 +1 ns.x.\000\001\177\200\277\056\056\056.test: +66 bytes, 1+0+1+1 records, response, noerror +query: 1 ns.x.\000\001\177\200\277\056\056\056.test +authority: x.\000\001\177\200\277\056\056\056.test 259200 NS ns.x.\000\001\177\200\277\056\056\056.test +additional: ns.x.\000\001\177\200\277\056\056\056.test 259200 A 10.8.9.10 +0 +1 z.y.x.\000\001\177\200\277\056\056\056.test: +70 bytes, 1+0+1+1 records, response, noerror +query: 1 z.y.x.\000\001\177\200\277\056\056\056.test +authority: x.\000\001\177\200\277\056\056\056.test 259200 NS ns.x.\000\001\177\200\277\056\056\056.test +additional: ns.x.\000\001\177\200\277\056\056\056.test 259200 A 10.8.9.10 +0 +--- tinydns-data handles another example +0 +--- tinydns-data handles TTLs +255 test: +202 bytes, 1+6+0+2 records, response, authoritative, noerror +query: 255 test +answer: test 98765 SOA primary.server host.master 1234567 2345678 3456789 4567890 5678901 +answer: test 37 NS ns.test +answer: test 41 MX 0 mx.test +answer: test 42 16 \004Text +answer: test 43 12345 Binary +answer: test 39 A 1.2.3.4 +additional: ns.test 37 A 1.2.3.4 +additional: mx.test 41 A 1.2.3.4 +0 +255 www.test: +75 bytes, 1+1+1+1 records, response, authoritative, noerror +query: 255 www.test +answer: www.test 40 A 1.2.3.4 +authority: test 37 NS ns.test +additional: ns.test 37 A 1.2.3.4 +0 +255 child.test: +61 bytes, 1+0+1+1 records, response, noerror +query: 255 child.test +authority: child.test 38 NS ns.child.test +additional: ns.child.test 38 A 1.2.3.5 +0 +--- tinydns-data handles CNAMEs +255 mail.test: +78 bytes, 1+1+1+1 records, response, authoritative, noerror +query: 255 mail.test +answer: mail.test 44 CNAME www.test +authority: test 37 NS ns.test +additional: ns.test 37 A 1.2.3.4 +0 +5 mail.test: +78 bytes, 1+1+1+1 records, response, authoritative, noerror +query: 5 mail.test +answer: mail.test 44 CNAME www.test +authority: test 37 NS ns.test +additional: ns.test 37 A 1.2.3.4 +0 +1 mail.test: +78 bytes, 1+1+1+1 records, response, authoritative, noerror +query: 1 mail.test +answer: mail.test 44 CNAME www.test +authority: test 37 NS ns.test +additional: ns.test 37 A 1.2.3.4 +0 +255 foo.mail.test: +92 bytes, 1+0+1+0 records, response, authoritative, nxdomain +query: 255 foo.mail.test +authority: test 98765 SOA primary.server host.master 1234567 2345678 3456789 4567890 5678901 +0 +--- tinydns-data does not apply wildcard A to base name +1 wild.test: +88 bytes, 1+0+1+0 records, response, authoritative, nxdomain +query: 1 wild.test +authority: test 98765 SOA primary.server host.master 1234567 2345678 3456789 4567890 5678901 +0 +--- tinydns-data handles wildcard A records +1 x.wild.test: +78 bytes, 1+1+1+1 records, response, authoritative, noerror +query: 1 x.wild.test +answer: x.wild.test 45 A 1.2.3.6 +authority: test 37 NS ns.test +additional: ns.test 37 A 1.2.3.4 +0 +1 xy.wild.test: +79 bytes, 1+1+1+1 records, response, authoritative, noerror +query: 1 xy.wild.test +answer: xy.wild.test 45 A 1.2.3.6 +authority: test 37 NS ns.test +additional: ns.test 37 A 1.2.3.4 +0 +1 x.z.wild.test: +80 bytes, 1+1+1+1 records, response, authoritative, noerror +query: 1 x.z.wild.test +answer: x.z.wild.test 45 A 1.2.3.6 +authority: test 37 NS ns.test +additional: ns.test 37 A 1.2.3.4 +0 +--- tinydns-data handles wildcard MX records +255 wild.test: +88 bytes, 1+0+1+0 records, response, authoritative, nxdomain +query: 255 wild.test +authority: test 98765 SOA primary.server host.master 1234567 2345678 3456789 4567890 5678901 +0 +--- tinydns-data does not apply wildcard MX to base name +255 x.wild.test: +115 bytes, 1+2+1+2 records, response, authoritative, noerror +query: 255 x.wild.test +answer: x.wild.test 46 MX 54321 mail.wild.test +answer: x.wild.test 45 A 1.2.3.6 +authority: test 37 NS ns.test +additional: mail.wild.test 46 A 1.2.3.7 +additional: ns.test 37 A 1.2.3.4 +0 +255 xy.wild.test: +116 bytes, 1+2+1+2 records, response, authoritative, noerror +query: 255 xy.wild.test +answer: xy.wild.test 46 MX 54321 mail.wild.test +answer: xy.wild.test 45 A 1.2.3.6 +authority: test 37 NS ns.test +additional: mail.wild.test 46 A 1.2.3.7 +additional: ns.test 37 A 1.2.3.4 +0 +15 x.z.wild.test: +101 bytes, 1+1+1+2 records, response, authoritative, noerror +query: 15 x.z.wild.test +answer: x.z.wild.test 46 MX 54321 mail.wild.test +authority: test 37 NS ns.test +additional: mail.wild.test 46 A 1.2.3.7 +additional: ns.test 37 A 1.2.3.4 +0 +255 x.z.wild.test: +117 bytes, 1+2+1+2 records, response, authoritative, noerror +query: 255 x.z.wild.test +answer: x.z.wild.test 46 MX 54321 mail.wild.test +answer: x.z.wild.test 45 A 1.2.3.6 +authority: test 37 NS ns.test +additional: mail.wild.test 46 A 1.2.3.7 +additional: ns.test 37 A 1.2.3.4 +0 +255 \052.wild.test: +115 bytes, 1+2+1+2 records, response, authoritative, noerror +query: 255 \052.wild.test +answer: \052.wild.test 46 MX 54321 mail.wild.test +answer: \052.wild.test 45 A 1.2.3.6 +authority: test 37 NS ns.test +additional: mail.wild.test 46 A 1.2.3.7 +additional: ns.test 37 A 1.2.3.4 +0 +--- tinydns-data uses wildcard under base of sub-wildcard +255 alias.wild.test: +119 bytes, 1+2+1+2 records, response, authoritative, noerror +query: 255 alias.wild.test +answer: alias.wild.test 46 MX 54321 mail.wild.test +answer: alias.wild.test 45 A 1.2.3.6 +authority: test 37 NS ns.test +additional: mail.wild.test 46 A 1.2.3.7 +additional: ns.test 37 A 1.2.3.4 +0 +--- tinydns-data handles wildcard CNAME records +255 xyz.alias.wild.test: +84 bytes, 1+1+1+1 records, response, authoritative, noerror +query: 255 xyz.alias.wild.test +answer: xyz.alias.wild.test 50 CNAME wild.test +authority: test 37 NS ns.test +additional: ns.test 37 A 1.2.3.4 +0 +255 \052.alias.wild.test: +82 bytes, 1+1+1+1 records, response, authoritative, noerror +query: 255 \052.alias.wild.test +answer: \052.alias.wild.test 50 CNAME wild.test +authority: test 37 NS ns.test +additional: ns.test 37 A 1.2.3.4 +0 +--- tinydns-data lets explicit record override wildcard +255 override.wild.test: +85 bytes, 1+1+1+1 records, response, authoritative, noerror +query: 255 override.wild.test +answer: override.wild.test 47 A 1.2.3.8 +authority: test 37 NS ns.test +additional: ns.test 37 A 1.2.3.4 +0 +--- tinydns-data handles overrides sanely +255 x.override.wild.test: +124 bytes, 1+2+1+2 records, response, authoritative, noerror +query: 255 x.override.wild.test +answer: x.override.wild.test 46 MX 54321 mail.wild.test +answer: x.override.wild.test 45 A 1.2.3.6 +authority: test 37 NS ns.test +additional: mail.wild.test 46 A 1.2.3.7 +additional: ns.test 37 A 1.2.3.4 +0 +--- tinydns-data overrides wildcard with subdomain wildcard +255 x.wild.wild.test: +83 bytes, 1+1+1+1 records, response, authoritative, noerror +query: 255 x.wild.wild.test +answer: x.wild.wild.test 48 A 1.2.3.9 +authority: test 37 NS ns.test +additional: ns.test 37 A 1.2.3.4 +0 +--- tinydns-data overrides wildcard with delegation +255 child.wild.test: +69 bytes, 1+0+1+1 records, response, noerror +query: 255 child.wild.test +authority: child.wild.test 259200 NS 49.ns.child.wild.test +additional: 49.ns.child.wild.test 259200 A 1.2.3.10 +0 +255 x.child.wild.test: +71 bytes, 1+0+1+1 records, response, noerror +query: 255 x.child.wild.test +authority: child.wild.test 259200 NS 49.ns.child.wild.test +additional: 49.ns.child.wild.test 259200 A 1.2.3.10 +0 +--- tinydns-data handles another example +0 +--- tinydns-data handles ending time +255 www.four: +0 +255 www.six: +74 bytes, 1+1+1+1 records, response, authoritative, noerror +query: 255 www.six +answer: www.six 3600 A 1.2.3.6 +authority: six 3600 NS ns.six +additional: ns.six 3600 A 1.2.3.6 +0 +--- tinydns-data handles starting time +255 www.five: +75 bytes, 1+1+1+1 records, response, authoritative, noerror +query: 255 www.five +answer: www.five 86400 A 1.2.3.5 +authority: five 259200 NS ns.five +additional: ns.five 259200 A 1.2.3.5 +0 +255 www.seven: +0 +--- tinydns-edit handles simple examples +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 + +.heaven.af.mil:1.2.3.5:a:259200 +.heaven.af.mil:1.2.3.6:b:259200 +&sub.heaven.af.mil:1.2.10.11:a:259200 +&sub.heaven.af.mil:1.2.10.12:b:259200 +=lion.heaven.af.mil:1.2.3.4:86400 +=tiger.heaven.af.mil:1.2.3.5:86400 +=bear.heaven.af.mil:1.2.3.6:86400 ++www.heaven.af.mil:1.2.3.4:86400 +@heaven.af.mil:1.2.3.4:a::86400 +@heaven.af.mil:1.2.3.7:b::86400 +--- tinydns-edit rejects hosts with old names or IP addresses +tinydns-edit: fatal: IP address already used +100 +tinydns-edit: fatal: host name already used +100 + +.heaven.af.mil:1.2.3.5:a:259200 +.heaven.af.mil:1.2.3.6:b:259200 +&sub.heaven.af.mil:1.2.10.11:a:259200 +&sub.heaven.af.mil:1.2.10.12:b:259200 +=lion.heaven.af.mil:1.2.3.4:86400 +=tiger.heaven.af.mil:1.2.3.5:86400 +=bear.heaven.af.mil:1.2.3.6:86400 ++www.heaven.af.mil:1.2.3.4:86400 +@heaven.af.mil:1.2.3.4:a::86400 +@heaven.af.mil:1.2.3.7:b::86400 +--- tinydns-edit recognizes alternate forms of host names +tinydns-edit: fatal: host name already used +100 + +.heaven.af.mil:1.2.3.5:a:259200 +.heaven.af.mil:1.2.3.6:b:259200 +&sub.heaven.af.mil:1.2.10.11:a:259200 +&sub.heaven.af.mil:1.2.10.12:b:259200 +=lion.heaven.af.mil:1.2.3.4:86400 +=tiger.heaven.af.mil:1.2.3.5:86400 +=bear.heaven.af.mil:1.2.3.6:86400 ++www.heaven.af.mil:1.2.3.4:86400 +@heaven.af.mil:1.2.3.4:a::86400 +@heaven.af.mil:1.2.3.7:b::86400 +--- tinydns-edit copies TTLs from previous NS records +0 +.test:1.2.3.4:a:3600 +.test:1.2.3.5:b:3600 +--- dnscache handles dotted-decimal names +255 127.43.123.234: +48 bytes, 1+1+0+0 records, response, noerror +query: 255 127.43.123.234 +answer: 127.43.123.234 655360 A 127.43.123.234 +0 +--- tinydns works + +127.43.0.100 +127.43.0.101 +0 +1234 a.mx.test +45678 b.mx.test +0 +255 www.test: +91 bytes, 1+2+1+1 records, response, authoritative, noerror +additional: ns.test 259200 A 127.43.0.2 +answer: www.test 86400 A 127.43.0.100 +answer: www.test 86400 A 127.43.0.101 +authority: test 259200 NS ns.test +query: 255 www.test +0 +255 test: +173 bytes, 1+4+0+3 records, response, authoritative, noerror +query: 255 test +answer: test 2560 SOA ns.test hostmaster.test 987654321 16384 2048 1048576 2560 +answer: test 259200 NS ns.test +answer: test 86400 MX 1234 a.mx.test +answer: test 86400 MX 45678 b.mx.test +additional: ns.test 259200 A 127.43.0.2 +additional: a.mx.test 86400 A 127.43.0.100 +additional: b.mx.test 86400 A 127.43.0.101 +0 +--- dnscache handles large TXT records +0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 +--- walldns handles in-addr.arpa names +7.6.43.127.in-addr.arpa +0 +234.123.43.127.in-addr.arpa +0 +127.43.123.234 +0 +255 234.123.43.127.in-addr.arpa: +75 bytes, 1+2+0+0 records, response, authoritative, noerror +query: 255 234.123.43.127.in-addr.arpa +answer: 234.123.43.127.in-addr.arpa 655360 A 127.43.123.234 +answer: 234.123.43.127.in-addr.arpa 655360 PTR 234.123.43.127.in-addr.arpa +0 +--- walldns handles dotted-decimal names +255 127.43.123.234: +48 bytes, 1+1+0+0 records, response, authoritative, noerror +query: 255 127.43.123.234 +answer: 127.43.123.234 655360 A 127.43.123.234 +0 +--- walldns rejects other names +255 blah.test: +temporary failure +0 +--- rbldns works +127.0.0.3 +0 +See http://www.rbl.test/5.4.3.2 +0 +255 2.3.4.5.rbl.test: +94 bytes, 1+2+0+0 records, response, authoritative, noerror +query: 255 2.3.4.5.rbl.test +answer: 2.3.4.5.rbl.test 2048 A 127.0.0.3 +answer: 2.3.4.5.rbl.test 2048 16 \037See\040http://www.rbl.test/5.4.3.2 +0 +127.0.0.3 +0 +See http://www.rbl.test/4.1.255.200 +0 +255 200.255.1.4.rbl.test: +102 bytes, 1+2+0+0 records, response, authoritative, noerror +query: 255 200.255.1.4.rbl.test +answer: 200.255.1.4.rbl.test 2048 A 127.0.0.3 +answer: 200.255.1.4.rbl.test 2048 16 #See\040http://www.rbl.test/4.1.255.200 +0 +127.0.0.3 +0 +See http://www.rbl.test/4.0.255.200 +0 +255 200.255.0.4.rbl.test: +102 bytes, 1+2+0+0 records, response, authoritative, noerror +query: 255 200.255.0.4.rbl.test +answer: 200.255.0.4.rbl.test 2048 A 127.0.0.3 +answer: 200.255.0.4.rbl.test 2048 16 #See\040http://www.rbl.test/4.0.255.200 +0 +127.0.0.3 +0 +See http://www.rbl.test/4.0.0.1 +0 +255 1.0.0.4.rbl.test: +94 bytes, 1+2+0+0 records, response, authoritative, noerror +query: 255 1.0.0.4.rbl.test +answer: 1.0.0.4.rbl.test 2048 A 127.0.0.3 +answer: 1.0.0.4.rbl.test 2048 16 \037See\040http://www.rbl.test/4.0.0.1 +0 + +0 + +0 +255 0.0.0.4.rbl.test: +34 bytes, 1+0+0+0 records, response, authoritative, nxdomain +query: 255 0.0.0.4.rbl.test +0 +--- tinydns handles differentiation + +0 +127.43.0.102 +0 + +127.43.0.100 +127.43.0.102 +0 + +127.43.0.100 +127.43.0.102 +0 +255 pick.test5: +81 bytes, 1+0+1+0 records, response, authoritative, nxdomain +query: 255 pick.test5 +authority: test5 2560 SOA me.ns.test5 hostmaster.test5 987654321 16384 2048 1048576 2560 +0 +255 pick2.test5: +81 bytes, 1+1+1+1 records, response, authoritative, noerror +query: 255 pick2.test5 +answer: pick2.test5 86400 A 127.43.0.102 +authority: test5 259200 NS me.ns.test5 +additional: me.ns.test5 259200 A 127.43.0.2 +0 +255 pick3.test5: +97 bytes, 1+2+1+1 records, response, authoritative, noerror +additional: me.ns.test5 259200 A 127.43.0.2 +answer: pick3.test5 86400 A 127.43.0.100 +answer: pick3.test5 86400 A 127.43.0.102 +authority: test5 259200 NS me.ns.test5 +query: 255 pick3.test5 +0 +103 bytes, 1+2+1+1 records, response, authoritative, noerror +255 really.wild.test5: +additional: me.ns.test5 259200 A 127.43.0.2 +answer: really.wild.test5 86400 A 127.43.0.100 +answer: really.wild.test5 86400 A 127.43.0.102 +authority: test5 259200 NS me.ns.test5 +query: 255 really.wild.test5 +0 +--- tinydns-get handles differentiation +255 pick.test5: +80 bytes, 1+1+1+1 records, response, authoritative, noerror +query: 255 pick.test5 +answer: pick.test5 86400 A 127.43.0.101 +authority: test5 259200 NS ex.ns.test5 +additional: ex.ns.test5 259200 A 127.43.0.2 +0 +255 pick2.test5: +82 bytes, 1+0+1+0 records, response, authoritative, nxdomain +query: 255 pick2.test5 +authority: test5 2560 SOA ex.ns.test5 hostmaster.test5 987654321 16384 2048 1048576 2560 +0 +255 pick3.test5: +97 bytes, 1+2+1+1 records, response, authoritative, noerror +additional: ex.ns.test5 259200 A 127.43.0.2 +answer: pick3.test5 86400 A 127.43.0.100 +answer: pick3.test5 86400 A 127.43.0.101 +authority: test5 259200 NS ex.ns.test5 +query: 255 pick3.test5 +0 +103 bytes, 1+2+1+1 records, response, authoritative, noerror +255 really.wild.test5: +additional: ex.ns.test5 259200 A 127.43.0.2 +answer: really.wild.test5 86400 A 127.43.0.100 +answer: really.wild.test5 86400 A 127.43.0.101 +authority: test5 259200 NS ex.ns.test5 +query: 255 really.wild.test5 +0 +255 pick.test5: +81 bytes, 1+0+1+0 records, response, authoritative, nxdomain +query: 255 pick.test5 +authority: test5 2560 SOA i4.ns.test5 hostmaster.test5 987654321 16384 2048 1048576 2560 +0 +255 pick2.test5: +82 bytes, 1+0+1+0 records, response, authoritative, nxdomain +query: 255 pick2.test5 +authority: test5 2560 SOA i4.ns.test5 hostmaster.test5 987654321 16384 2048 1048576 2560 +0 +255 pick3.test5: +97 bytes, 1+2+1+1 records, response, authoritative, noerror +additional: i4.ns.test5 259200 A 127.43.0.2 +answer: pick3.test5 86400 A 127.43.0.100 +answer: pick3.test5 86400 A 127.43.0.104 +authority: test5 259200 NS i4.ns.test5 +query: 255 pick3.test5 +0 +103 bytes, 1+2+1+1 records, response, authoritative, noerror +255 really.wild.test5: +additional: i4.ns.test5 259200 A 127.43.0.2 +answer: really.wild.test5 86400 A 127.43.0.100 +answer: really.wild.test5 86400 A 127.43.0.104 +authority: test5 259200 NS i4.ns.test5 +query: 255 really.wild.test5 +0 +--- pickdns works +127.43.0.101 +0 +127.43.0.102 +0 +255 pick.test: +43 bytes, 1+1+0+0 records, response, authoritative, noerror +query: 255 pick.test +answer: pick.test 5 A 127.43.0.101 +0 +--- pickdns answers MX +0 pick.test +0 +--- pickdns rejects queries for unknown information +255 pick11.test: +temporary failure +0 +16 pick2.test: +temporary failure +0 +--- axfrdns rejects unauthorized transfer attempts +axfr-get: fatal: unable to parse AXFR results: protocol error +111 +axfr-get: fatal: unable to parse AXFR results: protocol error +111 +--- axfrdns works +0 +#987654321 auto axfr-get +Ztest:ns.test.:hostmaster.test.:987654321:16384:2048:1048576:2560:2560 +&test::ns.test.:259200 ++ns.test:127.43.0.2:259200 ++www.test:127.43.0.100:86400 ++www.test:127.43.0.101:86400 +@test::a.mx.test.:1234:86400 ++a.mx.test:127.43.0.100:86400 +@test::b.mx.test.:45678:86400 ++b.mx.test:127.43.0.101:86400 +&pick.test::ns.pick.test.:259200 ++ns.pick.test:127.43.0.3:259200 +&pick2.test::ns.pick2.test.:259200 ++ns.pick2.test:127.43.0.3:259200 +&rbl.test::ns.rbl.test.:259200 ++ns.rbl.test:127.43.0.5:259200 +:big.test:16:\1770123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456\1777890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123\1774567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890\1771234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567\1778901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234\1775678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901\1772345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678o901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789:86400 +--- axfrdns handles differentiation +0 +#987654321 auto axfr-get +Ztest5:me.ns.test5.:hostmaster.test5.:987654321:16384:2048:1048576:2560:2560 +&test5::me.ns.test5.:259200 ++me.ns.test5:127.43.0.2:259200 ++pick2.test5:127.43.0.102:86400 ++pick3.test5:127.43.0.100:86400 ++pick3.test5:127.43.0.102:86400 ++\052.wild.test5:127.43.0.100:86400 ++\052.wild.test5:127.43.0.102:86400 +0 +#987654321 auto axfr-get +Ztest5:i3.ns.test5.:hostmaster.test5.:987654321:16384:2048:1048576:2560:2560 +&test5::i3.ns.test5.:259200 ++i3.ns.test5:127.43.0.2:259200 ++pick3.test5:127.43.0.100:86400 ++pick3.test5:127.43.0.103:86400 ++\052.wild.test5:127.43.0.100:86400 ++\052.wild.test5:127.43.0.103:86400 +0 +#987654321 auto axfr-get +Ztest5:i4.ns.test5.:hostmaster.test5.:987654321:16384:2048:1048576:2560:2560 +&test5::i4.ns.test5.:259200 ++i4.ns.test5:127.43.0.2:259200 ++pick3.test5:127.43.0.100:86400 ++pick3.test5:127.43.0.104:86400 ++\052.wild.test5:127.43.0.100:86400 ++\052.wild.test5:127.43.0.104:86400 +0 +#987654321 auto axfr-get +Ztest5:i5.ns.test5.:hostmaster.test5.:987654321:16384:2048:1048576:2560:2560 +&test5::i5.ns.test5.:259200 ++i5.ns.test5:127.43.0.2:259200 ++pick3.test5:127.43.0.100:86400 ++pick3.test5:127.43.0.105:86400 ++\052.wild.test5:127.43.0.100:86400 ++\052.wild.test5:127.43.0.105:86400 +--- axfrdns gives authoritative answers +255 test4: +727 bytes, 1+12+0+0 records, response, authoritative, noerror +query: 255 test4 +answer: test4 2560 SOA ns.test4 hostmaster.test4 987654321 16384 2048 1048576 2560 +answer: test4 259200 NS ns.test4 +answer: test4 86400 16 3001234567890123456789012345678901234567890123456789 +answer: test4 86400 16 3101234567890123456789012345678901234567890123456789 +answer: test4 86400 16 3201234567890123456789012345678901234567890123456789 +answer: test4 86400 16 3301234567890123456789012345678901234567890123456789 +answer: test4 86400 16 3401234567890123456789012345678901234567890123456789 +answer: test4 86400 16 3501234567890123456789012345678901234567890123456789 +answer: test4 86400 16 3601234567890123456789012345678901234567890123456789 +answer: test4 86400 16 3701234567890123456789012345678901234567890123456789 +answer: test4 86400 16 3801234567890123456789012345678901234567890123456789 +answer: test4 86400 16 3901234567890123456789012345678901234567890123456789 +0 +--- axfrdns handles size-1000 TXT records +255 big.test: +1046 bytes, 1+1+0+0 records, response, authoritative, noerror +query: 255 big.test +answer: big.test 86400 16 \1770123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456\1777890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123\1774567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890\1771234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567\1778901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234\1775678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901\1772345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678o901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 +0 +--- axfr-get handles zones with wildcards +0 +#987654321 auto axfr-get +Ztest2:ns.test2.:hostmaster.test2.:987654321:16384:2048:1048576:2560:2560 +&test2::ns.test2.:259200 ++ns.test2:127.43.0.2:259200 ++\052.test2:127.43.0.102:86400 +C\052.www.test2:www.test2.:5000 ++one.test2:127.43.0.103:86400 ++two.test2:127.43.0.104:2 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/rts.sh b/NONE-CKUBU/src/djbdns/djbdns-1.05/rts.sh new file mode 100644 index 0000000..c71e839 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/rts.sh @@ -0,0 +1 @@ +env - PATH="`pwd`:$PATH" sh rts.tests 2>&1 | cat -v diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/rts.tests b/NONE-CKUBU/src/djbdns/djbdns-1.05/rts.tests new file mode 100644 index 0000000..ee2be85 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/rts.tests @@ -0,0 +1,767 @@ +# Requirements: +# You are running as root. +# You have dns{cache,log}, {tiny,pick,wall,axfr,rbl}dns accounts. +# You have local IP addresses 127.43.0.{1,2,3,4,5}. +# You are connected to the Internet. +# +# Some features not tested here: +# dns_random works. +# random-ip works. +# dnstrace works. +# dnstracesort works. +# dns_resolvconfrewrite rereads after 10 minutes or 10000 uses. +# dns_resolvconfip rereads after 10 minutes or 10000 uses. +# /etc/resolv.conf is parsed properly. +# dns_transmit handles timeouts properly. +# dns_transmit falls back to TCP properly. +# dns_transmit handles various strange situations: e.g., NOTIMP. + + +umask 022 + +rm -rf rts-tmp +service=`pwd`/rts-tmp/service + +mkdir rts-tmp +mkdir $service + +echo ' +*.b:.2.3.4 +=localhost:localhost. +-.localhost:localhost. +?:+.yp.to+.cr.yp.to+.whatever.cr.yp.to +*.: +' > rts-tmp/rewrite + +DNSREWRITEFILE=rts-tmp/rewrite; export DNSREWRITEFILE +DNSCACHEIP=127.555.0.1; export DNSCACHEIP + + +echo '--- dnscache-conf works' +dnscache-conf dnscache dnslog $service/dnscache 127.555.0.1 +echo 127.555.0.2 > $service/dnscache/root/servers/tEST +echo 127.555.0.2 > $service/dnscache/root/servers/tEST5 +echo 127.555.0.4 > $service/dnscache/root/servers/43.127.iN-aDDR.aRPA +touch $service/dnscache/root/ip/127.43.0.1 +supervise $service/dnscache | supervise $service/dnscache/log & + +echo '--- tinydns-conf works' +tinydns-conf tinydns dnslog $service/tinydns 127.555.0.2 +supervise $service/tinydns | supervise $service/tinydns/log & + +echo '--- pickdns-conf works' +pickdns-conf pickdns dnslog $service/pickdns 127.555.0.3 +supervise $service/pickdns | supervise $service/pickdns/log & + +echo '--- walldns-conf works' +walldns-conf walldns dnslog $service/walldns 127.555.0.4 +supervise $service/walldns | supervise $service/walldns/log & + +echo '--- rbldns-conf works' +rbldns-conf rbldns dnslog $service/rbldns 127.555.0.5 RbL.TeSt +supervise $service/rbldns | supervise $service/rbldns/log & + +echo '--- axfrdns-conf works' +axfrdns-conf axfrdns dnslog $service/axfrdns $service/tinydns 127.555.0.2 +supervise $service/axfrdns | supervise $service/axfrdns/log & + +sleep 1 + + +echo '--- cache handles simple example' +cachetest \ +one two three four five \ +one:un one two three four five \ +two:deux one two three four five \ +three:trois one two three four five \ +four:quatre one two three four five \ +five:cinq one two three four five \ +one:een one two three four five \ +two:twee one two three four five \ +three:drie one two three four five \ +four:vier one two three four five \ +five:vijf one two three four five +echo $? + +echo '--- cache handles overwriting' +cachetest \ +one two three four five \ +one:un one two three four five \ +one:een one two three four five \ +two:deux one two three four five \ +two:twee one two three four five \ +three:trois one two three four five \ +three:drie one two three four five \ +four:quatre one two three four five \ +four:vier one two three four five \ +five:cinq one two three four five \ +five:vijf one two three four five +echo $? + +echo '--- cache handles long chains' +cachetest \ +a:1 a \ +a:2 a \ +a:3 a \ +a:4 a \ +a:5 a \ +a:6 a \ +a:7 a \ +a:8 a \ +a:9 a +echo $? + + +echo '--- dnsip finds IP address of network-surveys.cr.yp.to' +dnsip network-surveys.cr.yp.to +echo $? + +echo '--- dnsip does not find nonexistent.cr.yp.to' +dnsip nonexistent.cr.yp.to +echo $? + +echo '--- dnsip rejects overly long domain names' +dnsip x.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789 +echo $? + +echo '--- dnsip handles IP address on input' +dnsip 1.2.3.4 127.0.0.1 10.555.678.901 '[010.0555.0678.0901]' +echo $? + +echo '--- dnsip allows 0 to be omitted' +dnsip 127...1 +echo $? + +echo '--- dnsip handles multiple IP addresses on input' +dnsip 1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16 +echo $? + +echo '--- dnsipq handles simple examples' +dnsipq 1.b localhost anything.localhost 5.6.7.8 network-surveys nonexistent +echo $? + +echo '--- dnsmx finds MX record for network-surveys.cr.yp.to' +dnsmx network-surveys.cr.yp.to +echo $? + +echo '--- dnsmx manufactures MX record for nonexistent.cr.yp.to' +dnsmx NONexistent.cr.yp.to +echo $? + +echo '--- dnsmx rejects overly long domain names' +dnsmx 0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789 +echo $? + +echo '--- dnstxt finds TXT record for leap.yp.to' +dnstxt leap.yp.to +echo $? + +echo '--- dnstxt does not find nonexistent.cr.yp.to' +dnstxt nonexistent.cr.yp.to +echo $? + +echo '--- dnstxt rejects overly long domain names' +dnstxt 0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789.0123456789 +echo $? + +echo '--- dnsname finds host name of 131.193.178.100' +dnsname 131.193.178.100 +echo $? + +echo '--- dnsname does not find 127.5.6.7' +dnsname 127.5.6.7 +echo $? + +echo '--- dnsname rejects misformatted IP addresses' +dnsname 1.2.3 +echo $? + +echo '--- dnsfilter finds some host names' +echo '131.193.178.100+one two three +127.5.6.7+one two three +10+one two three' | dnsfilter +echo $? + + +echo ' +=movie.edu:1.2.3.4 +*star +' > rts-tmp/data + +echo '--- tinydns-data complains about unrecognized initial characters' +( cd rts-tmp; tinydns-data; echo $? ) + +echo ' +.movie.edu:192.249.249.3:a +.movie.edu::wormhole.movie.edu +&fx.movie.edu:192.253.254.2:a +&fx.movie.edu:192.253.254.3:b +.249.249.192.in-addr.arpa:192.249.249.3:a +.249.249.192.in-addr.arpa::wormhole.movie.edu +.253.253.192.in-addr.arpa:192.249.249.3:a +.253.253.192.in-addr.arpa:192.249.249.1:b +.253.253.192.in-addr.arpa:192.253.253.1:c +.254.253.192.in-addr.arpa:192.253.254.2:a +.254.253.192.in-addr.arpa:192.253.254.3:b + ++localhost.movie.edu:127.0.0.1 + +@movie.edu:192.249.249.1:a + +'\''movie.edu:Movie University +:movie.edu:12345:One +:movie.edu:12345:Two +:movie.edu:12346:Three +:movie.edu:12346:Four + +=wormhole.movie.edu:192.249.249.1 ++wh249.movie.edu:192.249.249.1 +=robocop.movie.edu:192.249.249.2 +=terminator.movie.edu:192.249.249.3 ++bigt.movie.edu:192.249.249.3 +=diehard.movie.edu:192.249.294.4 ++dh.movie.edu:192.249.294.4 + +=wormhole.movie.edu:192.253.253.1 ++wh253.movie.edu:192.253.253.1 ++wh.movie.edu:192.253.253.1 ++wh.movie.edu:192.253.253.1 +=misery.movie.edu:192.253.253.2 +=shining.movie.edu:192.253.253.3 +=carrie.movie.edu:192.253.253.4 + +.blah.movie.edu:1.2.3.4:blah.movie.edu +'\''blah.movie.edu:Text +' > rts-tmp/data +utime rts-tmp/data 987654321 + +echo '--- tinydns-data complains if it cannot create data.tmp' +rm -f rts-tmp/data.tmp +ln -s data.tmp rts-tmp/data.tmp +( cd rts-tmp; tinydns-data; echo $? ) +rm -f rts-tmp/data.tmp + +echo '--- tinydns-data handles simple example' +( cd rts-tmp; tinydns-data; echo $? ) + +echo '--- tinydns-data produces A records' +( cd rts-tmp; tinydns-get 1 wormhole.movie.edu | sort; echo $? ) + +echo '--- tinydns-data produces NS records' +( cd rts-tmp; tinydns-get 2 movie.edu; echo $? ) + +echo '--- tinydns-data produces SOA records' +( cd rts-tmp; tinydns-get 6 movie.edu; echo $? ) + +echo '--- tinydns-data produces PTR records' +( cd rts-tmp; tinydns-get 12 1.253.253.192.in-addr.arpa; echo $? ) + +echo '--- tinydns-data produces MX records' +( cd rts-tmp; tinydns-get 15 movie.edu; echo $? ) + +echo '--- tinydns-data produces TXT records' +( cd rts-tmp; tinydns-get 16 movie.edu; echo $? ) + +echo '--- tinydns-data produces AXFR responses' +( cd rts-tmp; tinydns-get 252 movie.edu; echo $? ) + +echo '--- tinydns-data produces ANY responses' +( cd rts-tmp; tinydns-get 255 movie.edu; echo $? ) + +echo '--- tinydns-data produces records of any type' +( cd rts-tmp; tinydns-get 12345 movie.edu; echo $? ) +( cd rts-tmp; tinydns-get 12346 movie.edu; echo $? ) + +echo '--- tinydns-data produces NODATA responses' +( cd rts-tmp; tinydns-get 54321 movie.edu; echo $? ) + +echo '--- tinydns-data produces NXDOMAIN responses' +( cd rts-tmp; tinydns-get 1 this.does.not.exist.movie.edu; echo $? ) + +echo '--- tinydns-data produces NXDOMAIN responses for suffixes' +( cd rts-tmp; tinydns-get 1 ns.movie.edu; echo $? ) + +echo '--- tinydns-data produces NXDOMAIN ANY responses for suffixes' +( cd rts-tmp; tinydns-get 255 ns.movie.edu; echo $? ) + +echo '--- tinydns-data does not produce responses outside its bailiwick' +( cd rts-tmp; tinydns-get 1 edu; echo $? ) + +echo '--- tinydns-data does not include TXT in additional sections' +( cd rts-tmp; tinydns-get 1 blah.movie.edu; echo $? ) + + +echo ' +.test:10.2.3.4:a ++b.ns.test:10.2.3.6:259200 +.test:10.2.3.5:b +'\''127.test:0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456 +'\''128.test:01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567 +'\''254.test:01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123 +'\''255.test:012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234 +'\''387.test:012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456 +'\''388.test:0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567 +'\''400.test:0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 +'\''410.test:01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 +'\''420.test:012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 +'\''430.test:0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 +'\''435.test:012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234 +'\''436.test:0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345 +'\''1000.test:0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 +=\000\001\177\200\277\.\.\..test:10.5.6.7 +.7.6.5.10.in-addr.arpa:10.5.6.7 + +&x.\0\1\177\200\277\.\.\..test:10.8.9.10 +' > rts-tmp/data +utime rts-tmp/data 0 + +echo '--- tinydns-data handles another example' +( cd rts-tmp; tinydns-data; echo $? ) + +echo '--- tinydns-data uses serial 1 for mtime 0' +( cd rts-tmp; tinydns-get Any test; echo $? ) + +echo '--- tinydns-data does not split size-127 TXT records' +( cd rts-tmp; tinydns-get Txt 127.test; echo $? ) + +echo '--- tinydns-data splits size-128 TXT records' +( cd rts-tmp; tinydns-get 16 128.test; echo $? ) + +echo '--- tinydns-data splits size-254 TXT records' +( cd rts-tmp; tinydns-get 16 254.test; echo $? ) + +echo '--- tinydns-data doubly splits size-255 TXT records' +( cd rts-tmp; tinydns-get 16 255.test; echo $? ) + +echo '--- tinydns-data excludes the additional section if necessary' +( cd rts-tmp; tinydns-get 16 387.test; echo $? ) +( cd rts-tmp; tinydns-get 16 388.test; echo $? ) + +echo '--- tinydns-data excludes the authority section if necessary' +( cd rts-tmp; tinydns-get 16 435.test; echo $? ) +( cd rts-tmp; tinydns-get 16 436.test; echo $? ) + +echo '--- tinydns-data handles size-1000 TXT records' +( cd rts-tmp; tinydns-get 16 1000.test; echo $? ) + +echo '--- tinydns-data handles unusual characters in owner names' +( cd rts-tmp; tinydns-get A '\0\1\177\200\277\56\56\56.test'; echo $? ) + +echo '--- tinydns-data handles unusual characters in PTR results' +( cd rts-tmp; tinydns-get Ptr 7.6.5.10.in-addr.arpa; echo $? ) + +echo '--- tinydns-data handles delegations' +( cd rts-tmp; tinydns-get 1 'x.\0\1\177\200\277\56\56\56.test'; echo $? ) +( cd rts-tmp; tinydns-get 1 'ns.x.\0\1\177\200\277\56\56\56.test'; echo $? ) +( cd rts-tmp; tinydns-get 1 'z.y.x.\0\1\177\200\277\56\56\56.test'; echo $? ) + + +echo ' +Ztest:Primary.Server:Host.Master:1234567:2345678:3456789:4567890:5678901:98765 +&test:1.2.3.4::37 +@*.wild.test:1.2.3.7:mail.wild.test:54321:46 +&child.test:1.2.3.5::38 +@test:1.2.3.4:::41 +=test:1.2.3.4:39 ++www.test:1.2.3.4:40 +'\''test:Text:42 +:test:12345:Binary:43 +Cmail.test:www.test:44 ++*.wild.test:1.2.3.6:45 +=override.wild.test:1.2.3.8:47 ++*.wild.wild.test:1.2.3.9:48 +&child.wild.test:1.2.3.10:49 +C*.alias.wild.test:wild.test:50 +' > rts-tmp/data +utime rts-tmp/data 0 + +echo '--- tinydns-data handles another example' +( cd rts-tmp; tinydns-data; echo $? ) + +echo '--- tinydns-data handles TTLs' +( cd rts-tmp; tinydns-get 255 test; echo $? ) +( cd rts-tmp; tinydns-get 255 www.test; echo $? ) +( cd rts-tmp; tinydns-get 255 child.test; echo $? ) + +echo '--- tinydns-data handles CNAMEs' +( cd rts-tmp; tinydns-get 255 mail.test; echo $? ) +( cd rts-tmp; tinydns-get 5 mail.test; echo $? ) +( cd rts-tmp; tinydns-get 1 mail.test; echo $? ) +( cd rts-tmp; tinydns-get 255 foo.mail.test; echo $? ) + +echo '--- tinydns-data does not apply wildcard A to base name' +( cd rts-tmp; tinydns-get 1 wild.test; echo $? ) + +echo '--- tinydns-data handles wildcard A records' +( cd rts-tmp; tinydns-get 1 x.wild.test; echo $? ) +( cd rts-tmp; tinydns-get 1 xy.wild.test; echo $? ) +( cd rts-tmp; tinydns-get 1 x.z.wild.test; echo $? ) + +echo '--- tinydns-data handles wildcard MX records' +( cd rts-tmp; tinydns-get 255 wild.test; echo $? ) + +echo '--- tinydns-data does not apply wildcard MX to base name' +( cd rts-tmp; tinydns-get 255 x.wild.test; echo $? ) +( cd rts-tmp; tinydns-get 255 xy.wild.test; echo $? ) +( cd rts-tmp; tinydns-get 15 x.z.wild.test; echo $? ) +( cd rts-tmp; tinydns-get 255 x.z.wild.test; echo $? ) +( cd rts-tmp; tinydns-get 255 '*'.wild.test; echo $? ) + +echo '--- tinydns-data uses wildcard under base of sub-wildcard' +( cd rts-tmp; tinydns-get 255 alias.wild.test; echo $? ) + +echo '--- tinydns-data handles wildcard CNAME records' +( cd rts-tmp; tinydns-get 255 xyz.alias.wild.test; echo $? ) +( cd rts-tmp; tinydns-get 255 '*'.alias.wild.test; echo $? ) + +echo '--- tinydns-data lets explicit record override wildcard' +( cd rts-tmp; tinydns-get 255 override.wild.test; echo $? ) + +echo '--- tinydns-data handles overrides sanely' +( cd rts-tmp; tinydns-get 255 x.override.wild.test; echo $? ) + +echo '--- tinydns-data overrides wildcard with subdomain wildcard' +( cd rts-tmp; tinydns-get 255 x.wild.wild.test; echo $? ) + +echo '--- tinydns-data overrides wildcard with delegation' +( cd rts-tmp; tinydns-get 255 child.wild.test; echo $? ) +( cd rts-tmp; tinydns-get 255 x.child.wild.test; echo $? ) + + +echo ' +.four:1.2.3.4::0:30000000fedcba98 ++www.four:1.2.3.4:0:30000000fedcba98 +.five:1.2.3.5:::30000000fedcba98 ++www.five:1.2.3.5::30000000fedcba98 +.six:1.2.3.6::0:50000000fedcba98 ++www.six:1.2.3.6:0:50000000fedcba98 +.seven:1.2.3.7:::50000000fedcba98 ++www.seven:1.2.3.7::50000000fedcba98 +' > rts-tmp/data +utime rts-tmp/data 7654321 + +echo '--- tinydns-data handles another example' +( cd rts-tmp; tinydns-data; echo $? ) + +echo '--- tinydns-data handles ending time' +( cd rts-tmp; tinydns-get 255 www.four; echo $? ) +( cd rts-tmp; tinydns-get 255 www.six; echo $? ) + +echo '--- tinydns-data handles starting time' +( cd rts-tmp; tinydns-get 255 www.five; echo $? ) +( cd rts-tmp; tinydns-get 255 www.seven; echo $? ) + + +echo '--- tinydns-edit handles simple examples' +echo '' > rts-tmp/data +( cd rts-tmp; tinydns-edit data data.new add ns heaven.af.mil 1.2.3.5; echo $? ) +( cd rts-tmp; tinydns-edit data data.new add ns heaven.af.mil 1.2.3.6; echo $? ) +( cd rts-tmp; tinydns-edit data data.new add childns sub.heaven.af.mil 1.2.10.11; echo $? ) +( cd rts-tmp; tinydns-edit data data.new add childns sub.heaven.af.mil 1.2.10.12; echo $? ) +( cd rts-tmp; tinydns-edit data data.new add host lion.heaven.af.mil 1.2.3.4; echo $? ) +( cd rts-tmp; tinydns-edit data data.new add host tiger.heaven.af.mil 1.2.3.5; echo $? ) +( cd rts-tmp; tinydns-edit data data.new add host bear.heaven.af.mil 1.2.3.6; echo $? ) +( cd rts-tmp; tinydns-edit data data.new add alias www.heaven.af.mil 1.2.3.4; echo $? ) +( cd rts-tmp; tinydns-edit data data.new add mx heaven.af.mil 1.2.3.4; echo $? ) +( cd rts-tmp; tinydns-edit data data.new add mx heaven.af.mil 1.2.3.7; echo $? ) +cat rts-tmp/data + +echo '--- tinydns-edit rejects hosts with old names or IP addresses' +( cd rts-tmp; tinydns-edit data data.new add host panda.heaven.af.mil 1.2.3.6; echo $? ) +( cd rts-tmp; tinydns-edit data data.new add host bear.heaven.af.mil 1.2.3.8; echo $? ) +cat rts-tmp/data + +echo '--- tinydns-edit recognizes alternate forms of host names' +( cd rts-tmp; tinydns-edit data data.new add host 'BE\101r.Heaven.AF..Mil.' 1.2.3.8; echo $? ) +cat rts-tmp/data + +echo '--- tinydns-edit copies TTLs from previous NS records' +echo '.test:1.2.3.4:a:3600' > rts-tmp/data +( cd rts-tmp; tinydns-edit data data.new add ns test 1.2.3.5; echo $? ) +cat rts-tmp/data + + + +echo ' +.Test:127.555.0.2 +=Www.Test:127.555.0.100 +=Www.Test:127.555.0.101 +@Test:127.555.0.100:a:1234 +@Test:127.555.0.101:b:45678 +&Pick.Test:127.555.0.3 +&Pick2.Test:127.555.0.3 +&Rbl.Test:127.555.0.5 +.Test2:127.555.0.2 ++*.Test2:127.555.0.102 +C*.Www.Test2:Www.Test2:5000 +=one.Test2:127.555.0.103::300000003456789a +=two.Test2:127.555.0.104:0:500000003456789a +.Test3:127.555.0.2 +=Www.Test3:127.0.0.106 +.Test4:127.555.0.2 +'\''Test4:001234567890123456789012345678901234567890123456789 +'\''Test4:101234567890123456789012345678901234567890123456789 +'\''Test4:201234567890123456789012345678901234567890123456789 +'\''Test4:301234567890123456789012345678901234567890123456789 +'\''Test4:401234567890123456789012345678901234567890123456789 +'\''Test4:501234567890123456789012345678901234567890123456789 +'\''Test4:601234567890123456789012345678901234567890123456789 +'\''Test4:701234567890123456789012345678901234567890123456789 +'\''Test4:801234567890123456789012345678901234567890123456789 +'\''Test4:901234567890123456789012345678901234567890123456789 +'\''Big.Test:0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 +%i3:127.555.0.3 +%i4:127.555.0.4 +%i5:127.555.0.5 +%ME:127 +%EX +.Test5:127.555.0.2:ex:::EX +.Test5:127.555.0.2:me:::ME +.Test5:127.555.0.2:i3:::i3 +.Test5:127.555.0.2:i4:::i4 +.Test5:127.555.0.2:i5:::i5 +-Pick.Test5:127.555.0.100:::EX ++Pick.Test5:127.555.0.101:::EX +-Pick2.Test5:127.555.0.102:::ME ++Pick2.Test5:127.555.0.102:::ME ++Pick3.Test5:127.555.0.100 ++Pick3.Test5:127.555.0.101:::EX ++Pick3.Test5:127.555.0.102:::ME ++Pick3.Test5:127.555.0.103:::i3 ++Pick3.Test5:127.555.0.104:::i4 ++Pick3.Test5:127.555.0.105:::i5 ++*.Wild.Test5:127.555.0.100 ++*.Wild.Test5:127.555.0.101:::EX ++*.Wild.Test5:127.555.0.102:::ME ++*.Wild.Test5:127.555.0.103:::i3 ++*.Wild.Test5:127.555.0.104:::i4 ++*.Wild.Test5:127.555.0.105:::i5 +' > $service/tinydns/root/data +utime $service/tinydns/root/data 987654321 +( cd $service/tinydns/root; tinydns-data ) + +echo ' +-Pick.Test:127.555.0.100 ++Pick.Test:127.555.0.101 +-Pick2.Test:127.555.0.102:ME ++Pick2.Test:127.555.0.102:ME +%ME:127 +' > $service/pickdns/root/data +( cd $service/pickdns/root; pickdns-data ) + +echo ' +4.0.0.1 +4.0.0.2/31 +4.0.0.4/30 +4.0.0.8/29 +4.0.0.16/28 +4.0.0.32/27 +4.0.0.64/26 +4.0.0.128/25 +4.0.1.0/24 +4.0.2.0/23 +4.0.4.0/22 +4.0.8.0/21 +4.0.16.0/20 +4.0.32.0/19 +4.0.64.0/18 +4.0.128.0/17 +4.1.0.0/16 +4.2.0.0/15 +4.4.0.0/14 +4.8.0.0/13 +4.16.0.0/12 +4.32.0.0/11 +4.64.0.0/10 +4.128.0.0/9 +5.0.0.0/8 +:127.0.0.3:See http://www.rbl.test/$ +' > $service/rbldns/root/data +( cd $service/rbldns/root; rbldns-data ) + +echo ' +127.:allow,AXFR="tEsT/TeSt2/TEst5" +:deny +' > $service/axfrdns/tcp +( cd $service/axfrdns; tcprules tcp.cdb tcp.tmp < tcp ) + + +echo '--- dnscache handles dotted-decimal names' +dnsqr 255 127.43.123.234 +echo $? + +echo '--- tinydns works' +dnsip WWW.TEST | tr ' ' '\012' | sort +echo $? +dnsmx TEST +echo $? +dnsq 255 WWW.TEST 127.555.0.2 | sort +echo $? +dnsq Any TEST 127.555.0.2 +echo $? + +echo '--- dnscache handles large TXT records' +dnstxt BIG.Test + +echo '--- walldns handles in-addr.arpa names' +dnsname 127.555.6.7 +echo $? +dnsname 127.555.123.234 +echo $? +dnsip 234.123.43.127.IN-ADDR.ARPA +echo $? +dnsq 255 234.123.43.127.IN-ADDR.ARPA 127.555.0.4 +echo $? + +echo '--- walldns handles dotted-decimal names' +dnsq 255 127.43.123.234 127.555.0.4 +echo $? + +echo '--- walldns rejects other names' +dnsq 255 BLAH.TEST 127.555.0.4 +echo $? + +echo '--- rbldns works' +dnsip 2.3.4.5.rbl.test +echo $? +dnstxt 2.3.4.5.rbl.test +echo $? +dnsq 255 2.3.4.5.rbl.test 127.555.0.5 +echo $? +dnsip 200.255.1.4.rbl.test +echo $? +dnstxt 200.255.1.4.rbl.test +echo $? +dnsq 255 200.255.1.4.rbl.test 127.555.0.5 +echo $? +dnsip 200.255.0.4.rbl.test +echo $? +dnstxt 200.255.0.4.rbl.test +echo $? +dnsq 255 200.255.0.4.rbl.test 127.555.0.5 +echo $? +dnsip 1.0.0.4.rbl.test +echo $? +dnstxt 1.0.0.4.rbl.test +echo $? +dnsq 255 1.0.0.4.rbl.test 127.555.0.5 +echo $? +dnsip 0.0.0.4.rbl.test +echo $? +dnstxt 0.0.0.4.rbl.test +echo $? +dnsq 255 0.0.0.4.rbl.test 127.555.0.5 +echo $? + +echo '--- tinydns handles differentiation' +dnsip PICK.TEST5 +echo $? +dnsip PICK2.TEST5 +echo $? +dnsip PICK3.TEST5 | tr ' ' '\012' | sort +echo $? +dnsip REALLY.WILD.TEST5 | tr ' ' '\012' | sort +echo $? +dnsq 255 PICK.TEST5 127.555.0.2 +echo $? +dnsq 255 PICK2.TEST5 127.555.0.2 +echo $? +dnsq 255 PICK3.TEST5 127.555.0.2 | sort +echo $? +dnsq 255 REALLY.WILD.TEST5 127.555.0.2 | sort +echo $? + +echo '--- tinydns-get handles differentiation' +( cd rts-tmp/service/tinydns/root + tinydns-get 255 PICK.TEST5 1.2.3.4; echo $? + tinydns-get 255 PICK2.TEST5 1.2.3.4; echo $? + tinydns-get 255 PICK3.TEST5 1.2.3.4 | sort; echo $? + tinydns-get 255 REALLY.WILD.TEST5 1.2.3.4 | sort; echo $? + tinydns-get 255 PICK.TEST5 127.555.0.4; echo $? + tinydns-get 255 PICK2.TEST5 127.555.0.4; echo $? + tinydns-get 255 PICK3.TEST5 127.555.0.4 | sort; echo $? + tinydns-get 255 REALLY.WILD.TEST5 127.555.0.4 | sort; echo $? +) + +echo '--- pickdns works' +dnsip PICK.TEST +echo $? +dnsip PICK2.TEST +echo $? +dnsq 255 PICK.TEST 127.555.0.3 +echo $? + +echo '--- pickdns answers MX' +dnsmx PICK.TEST +echo $? + +echo '--- pickdns rejects queries for unknown information' +dnsq 255 PICK11.TEST 127.555.0.3 +echo $? +dnsq Txt PICK2.TEST 127.555.0.3 +echo $? + +echo '--- axfrdns rejects unauthorized transfer attempts' +tcpclient -RHl0 127.43.0.2 53 axfr-get TEST3 rts-tmp/zone rts-tmp/zone.tmp +echo $? +tcpclient -RHl0 127.43.0.2 53 axfr-get TEST4 rts-tmp/zone2 rts-tmp/zone2.tmp +echo $? + +echo '--- axfrdns works' +tcpclient -RHl0 127.43.0.2 53 axfr-get TEST rts-tmp/zone rts-tmp/zone.tmp +echo $? +cat rts-tmp/zone + +echo '--- axfrdns handles differentiation' +tcpclient -RHl0 -i 127.43.0.2 127.43.0.2 53 axfr-get TEST5 rts-tmp/zone5 rts-tmp/zone5.tmp +echo $? +cat rts-tmp/zone5 +rm rts-tmp/zone5 +tcpclient -RHl0 -i 127.43.0.3 127.43.0.2 53 axfr-get TEST5 rts-tmp/zone5 rts-tmp/zone5.tmp +echo $? +cat rts-tmp/zone5 +rm rts-tmp/zone5 +tcpclient -RHl0 -i 127.43.0.4 127.43.0.2 53 axfr-get TEST5 rts-tmp/zone5 rts-tmp/zone5.tmp +echo $? +cat rts-tmp/zone5 +rm rts-tmp/zone5 +tcpclient -RHl0 -i 127.43.0.5 127.43.0.2 53 axfr-get TEST5 rts-tmp/zone5 rts-tmp/zone5.tmp +echo $? +cat rts-tmp/zone5 + +echo '--- axfrdns gives authoritative answers' +dnsq any Test4 127.43.0.2 +echo $? + +echo '--- axfrdns handles size-1000 TXT records' +dnsq any BIG.TEST 127.43.0.2 +echo $? + +echo '--- axfr-get handles zones with wildcards' +tcpclient -RHl0 127.43.0.2 53 axfr-get TEST2 rts-tmp/zone2 rts-tmp/zone2.tmp +echo $? +cat rts-tmp/zone2 + + +svc -dx $service/dnscache +svc -dx $service/tinydns +svc -dx $service/pickdns +svc -dx $service/walldns +svc -dx $service/rbldns +svc -dx $service/axfrdns + +svc -dx $service/dnscache/log +svc -dx $service/tinydns/log +svc -dx $service/pickdns/log +svc -dx $service/walldns/log +svc -dx $service/rbldns/log +svc -dx $service/axfrdns/log + +wait +wait +wait +wait +wait +wait + +exit 0 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/scan.h b/NONE-CKUBU/src/djbdns/djbdns-1.05/scan.h new file mode 100644 index 0000000..fd383ee --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/scan.h @@ -0,0 +1,28 @@ +#ifndef SCAN_H +#define SCAN_H + +extern unsigned int scan_uint(const char *,unsigned int *); +extern unsigned int scan_xint(const char *,unsigned int *); +extern unsigned int scan_nbbint(const char *,unsigned int,unsigned int,unsigned int,unsigned int *); +extern unsigned int scan_ushort(const char *,unsigned short *); +extern unsigned int scan_xshort(const char *,unsigned short *); +extern unsigned int scan_nbbshort(const char *,unsigned int,unsigned int,unsigned int,unsigned short *); +extern unsigned int scan_ulong(const char *,unsigned long *); +extern unsigned int scan_xlong(const char *,unsigned long *); +extern unsigned int scan_nbblong(const char *,unsigned int,unsigned int,unsigned int,unsigned long *); + +extern unsigned int scan_plusminus(const char *,int *); +extern unsigned int scan_0x(const char *,unsigned int *); + +extern unsigned int scan_whitenskip(const char *,unsigned int); +extern unsigned int scan_nonwhitenskip(const char *,unsigned int); +extern unsigned int scan_charsetnskip(const char *,const char *,unsigned int); +extern unsigned int scan_noncharsetnskip(const char *,const char *,unsigned int); + +extern unsigned int scan_strncmp(const char *,const char *,unsigned int); +extern unsigned int scan_memcmp(const char *,const char *,unsigned int); + +extern unsigned int scan_long(const char *,long *); +extern unsigned int scan_8long(const char *,unsigned long *); + +#endif diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/scan_ulong.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/scan_ulong.c new file mode 100644 index 0000000..d70b334 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/scan_ulong.c @@ -0,0 +1,14 @@ +#include "scan.h" + +unsigned int scan_ulong(register const char *s,register unsigned long *u) +{ + register unsigned int pos = 0; + register unsigned long result = 0; + register unsigned long c; + while ((c = (unsigned long) (unsigned char) (s[pos] - '0')) < 10) { + result = result * 10 + c; + ++pos; + } + *u = result; + return pos; +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/scan_ulong.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/scan_ulong.o new file mode 100644 index 0000000000000000000000000000000000000000..f1e5b614ce244c4413e39560d75e46ac3a00ae7f GIT binary patch literal 1272 zcmbVLJxc>Y5S=r@#1C>R7K(xq3nS=~Q!53D8chnZ5Us=JJU=kGKn$UHH@J~)w9IBS){$Ji=Nk!R9|1;H3*&kZ zjM|V98H~m6u@~`^sru$-85qIM;L$0u!d2cs5px;j$gNa3%%682fyIDRUjQCF{fU^HIIOwiRy2P z98=;xrPF@RuOd(V`Fc>q6f1CT7VDfN%QN$7$hE^*;IkvG_U~(>iri0_&yJ)YYSUNc z>&HlU=l7?%g!ON!`Hd^T4!pnSc_dvFKEF9nI1)NB;=^u2eAo$z5Bu}P$HLko&tC~Z g0+l0y^ZdOR&z5fCyi{?Ig$*5`H%_XA<{CWp4>?{|W&i*H literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/scan_xlong.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/scan_xlong.c new file mode 100644 index 0000000..1113433 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/scan_xlong.c @@ -0,0 +1,23 @@ +#include "scan.h" + +static inline int fromhex(unsigned char c) { + if (c>='0' && c<='9') + return c-'0'; + else if (c>='A' && c<='F') + return c-'A'+10; + else if (c>='a' && c<='f') + return c-'a'+10; + return -1; +} + +unsigned int scan_xlong(const char *src,unsigned long *dest) { + register const char *tmp=src; + register int l=0; + register unsigned char c; + while ((c=fromhex(*tmp))<16) { + l=(l<<4)+c; + ++tmp; + } + *dest=l; + return tmp-src; +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/scan_xlong.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/scan_xlong.o new file mode 100644 index 0000000000000000000000000000000000000000..c8e74b82c5583e926fc0fa3ea0548bd17b45da78 GIT binary patch literal 1304 zcmb<-^>JfjWMqH=Mg}_u1P><4z~F%-=l~XWVBlupVDRkxX?W?iTpGW83s}^#*WrQ< zf4Tm_M=bo?4tO*lXY3Ub;NQmI>v+M1f7?MD&a%6`j{9v`%h`Y`Prkm=>p0(rwM@_> z`H)8^TjviK%@c?DlrVo4%{ zUQ%%}gI-Z;PNH6FMtoXPVs0vfUUGhJZfYJ-NnUa%afm%U9 z%!X!!1C)>AN1&JhnmR=wAEcidO?&|wAI4>YF`%?Mkmdkla`hVm^@8kY0%Bya0Ln2y z76h_Eb|C{DAP3z|V0l)EDha4!PN+JVewes5P#k1GI=BE8kVlh1R|`yXSoOb0(+A_C z>lXw{pobkuElht1Oe2&=*AL>OhaE^M2Q*M_K=pBf#Gn`?1oJ;AT(H^y0IFXSq!0r9w^R^&03&1dM;sL-~*}@LUIp0 ezZ54Y=EYa! +#include "seek.h" + +#define SET 0 /* sigh */ + +int seek_set(int fd,seek_pos pos) +{ if (lseek(fd,(off_t) pos,SET) == -1) return -1; return 0; } diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/seek_set.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/seek_set.o new file mode 100644 index 0000000000000000000000000000000000000000..28a52a17c6a19c307e62b76e6212f3b85f96c79f GIT binary patch literal 1352 zcmbW1y-EW?5Xa{{H5UyUMIoSIDpAlSr($6tfy6Hm3&BDV^b%K;d_nGtXk(GeE^p#1 zgy<9a6c!fRi3oA#Zb#SUstjD_Kfl@8o!!05{m$X;kYxdz1>5i!F$Himm=AFtQjmoG z_M79rxZPJ`4?VZr{_0N_d;9HY=ZVk^{h(QQ$6&S6mYqsC9h{5!e3((bIFSy+y+UCt zyHu2=8?T<-5bI)X)fMh?BmsnfTMN7r`k)#4YgSEJ^+X_B0f$My)36IHcYPq}V$;S@i?2Tv442?y^`)M>J|okykPAmDAB?IRcnNIs6y?s?10v zGm4C%r*#|^GhbBPR-D}#3&Wdhtze$!9JGEDYpJgxd~~}|K~9ILxqrqk3bQB5XLb4 +#include +#include +extern int select(); + +#endif diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/select.h1 b/NONE-CKUBU/src/djbdns/djbdns-1.05/select.h1 new file mode 100644 index 0000000..fe725b6 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/select.h1 @@ -0,0 +1,10 @@ +#ifndef SELECT_H +#define SELECT_H + +/* sysdep: -sysselect */ + +#include +#include +extern int select(); + +#endif diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/select.h2 b/NONE-CKUBU/src/djbdns/djbdns-1.05/select.h2 new file mode 100644 index 0000000..2bc2044 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/select.h2 @@ -0,0 +1,11 @@ +#ifndef SELECT_H +#define SELECT_H + +/* sysdep: +sysselect */ + +#include +#include +#include +extern int select(); + +#endif diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/server.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/server.c new file mode 100644 index 0000000..d52ce87 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/server.c @@ -0,0 +1,176 @@ +#include "byte.h" +#include "case.h" +#include "env.h" +#include "buffer.h" +#include "strerr.h" +#include "ip4.h" +#include "ip6.h" +#include "uint16.h" +#include "ndelay.h" +#include "socket.h" +#include "droproot.h" +#include "qlog.h" +#include "response.h" +#include "dns.h" +#include "alloc.h" +#include "iopause.h" +#include "str.h" + +extern char *fatal; +extern char *starting; +extern int respond(char *,char *,char *); +extern void initialize(void); + +static char ip[16]; +static uint16 port; + +static char buf[513]; +static int len; + +static char *q; + +void nomem() +{ + strerr_die2x(111,fatal,"out of memory"); +} + +static int doit(void) +{ + unsigned int pos; + char header[12]; + char qtype[2]; + char qclass[2]; + + if (len >= sizeof buf) goto NOQ; + pos = dns_packet_copy(buf,len,0,header,12); if (!pos) goto NOQ; + if (header[2] & 128) goto NOQ; + if (header[4]) goto NOQ; + if (header[5] != 1) goto NOQ; + + pos = dns_packet_getname(buf,len,pos,&q); if (!pos) goto NOQ; + pos = dns_packet_copy(buf,len,pos,qtype,2); if (!pos) goto NOQ; + pos = dns_packet_copy(buf,len,pos,qclass,2); if (!pos) goto NOQ; + + if (!response_query(q,qtype,qclass)) goto NOQ; + response_id(header); + if (byte_equal(qclass,2,DNS_C_IN)) + response[2] |= 4; + else + if (byte_diff(qclass,2,DNS_C_ANY)) goto WEIRDCLASS; + response[3] &= ~128; + if (!(header[2] & 1)) response[2] &= ~1; + + if (header[2] & 126) goto NOTIMP; + if (byte_equal(qtype,2,DNS_T_AXFR)) goto NOTIMP; + + case_lowerb(q,dns_domain_length(q)); + if (!respond(q,qtype,ip)) { + qlog(ip,port,header,q,qtype," - "); + return 0; + } + qlog(ip,port,header,q,qtype," + "); + return 1; + + NOTIMP: + response[3] &= ~15; + response[3] |= 4; + qlog(ip,port,header,q,qtype," I "); + return 1; + + WEIRDCLASS: + response[3] &= ~15; + response[3] |= 1; + qlog(ip,port,header,q,qtype," C "); + return 1; + + NOQ: + qlog(ip,port,"\0\0","","\0\0"," / "); + return 0; +} + +int main() +{ + char *x; + int *udp53; + unsigned int off; + unsigned int cnt; + iopause_fd *iop; + + x = env_get("IP"); + if (!x) + strerr_die2x(111,fatal,"$IP not set"); + off=cnt=0; + while (x[off]) { + unsigned int l; + char dummy[16]; + l=ip6_scan(x+off,dummy); + if (!l) + strerr_die3x(111,fatal,"unable to parse IP address ",x+off); + cnt++; + if (!x[off+l]) break; + if (x[off+l]=='%') + while (x[off+l] && x[off+l]!=',') ++l; + if (x[off+l]!=',') + strerr_die3x(111,fatal,"unable to parse IP address ",x+off); + off+=l+1; + } + udp53=(int *) alloc(sizeof(int) *cnt); + if (!udp53) nomem(); + iop=(iopause_fd *) alloc(sizeof(*iop) * cnt); + if (!iop) nomem(); + + off=cnt=0; + while (x[off]) { + unsigned int l; + uint32 ifid=0; + l=ip6_scan(x+off,ip); + udp53[cnt] = socket_udp6(); + if (udp53[cnt] == -1) + strerr_die2sys(111,fatal,"unable to create UDP socket: "); + if (x[off+l]=='%') { + char* interface=x+off+l+1; + int Len=str_chr(interface,','); + if (interface[Len]) { + interface[Len]=0; + ifid=socket_getifidx(interface); + interface[Len]=','; + } else + ifid=socket_getifidx(interface); + l+=Len; + } + if (socket_bind6_reuse(udp53[cnt],ip,53,ifid) == -1) + strerr_die2sys(111,fatal,"unable to bind UDP socket: "); + ndelay_off(udp53[cnt]); + socket_tryreservein(udp53[cnt],65536); + iop[cnt].fd=udp53[cnt]; + iop[cnt].events=IOPAUSE_READ; + cnt++; + if (!x[off+l]) break; + off+=l+1; + } + droproot(fatal); + + initialize(); + + buffer_putsflush(buffer_2,starting); + + for (;;) { + struct taia stamp; + struct taia deadline; + unsigned int i; + uint32 ifid; + taia_now(&stamp); + taia_uint(&deadline,300); + taia_add(&deadline,&deadline,&stamp); + iopause(iop,cnt,&deadline,&stamp); + for (i=0;i 512) response_tc(); + socket_send6(udp53[i],response,response_len,ip,port,ifid); + /* may block for buffer space; if it fails, too bad */ + } + } +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/server.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/server.o new file mode 100644 index 0000000000000000000000000000000000000000..781736c579926c1f670d6e49ed74dd9ee2fc759a GIT binary patch literal 7824 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 +#include +#include + diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/sockaddr_in6.h1 b/NONE-CKUBU/src/djbdns/djbdns-1.05/sockaddr_in6.h1 new file mode 100644 index 0000000..b1f8f5e --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/sockaddr_in6.h1 @@ -0,0 +1,21 @@ +#include "haveip6.h" +#ifdef LIBC_HAS_IP6 +#include +#include +#define sockaddr_in6 blub +#include +#undef sockaddr_in6 + +struct sockaddr_in6 { + sa_family_t sin6_family; /* AF_INET6 */ + unsigned short sin6_port; /* transport layer port # */ + uint32_t sin6_flowinfo; /* IPv6 traffic class & flow info */ + struct in6_addr sin6_addr; /* IPv6 address */ + uint32_t sin6_scope_id; /* set of interfaces for a scope */ +}; + +#else +#include +#include +#include +#endif diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/sockaddr_in6.h2 b/NONE-CKUBU/src/djbdns/djbdns-1.05/sockaddr_in6.h2 new file mode 100644 index 0000000..d484041 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/sockaddr_in6.h2 @@ -0,0 +1,4 @@ +#include +#include +#include + diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/socket.h b/NONE-CKUBU/src/djbdns/djbdns-1.05/socket.h new file mode 100644 index 0000000..bbb0f82 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/socket.h @@ -0,0 +1,38 @@ +#ifndef SOCKET_H +#define SOCKET_H + +#include "uint16.h" +#include "uint32.h" + +extern int socket_tcp(void); +extern int socket_udp(void); +extern int socket_tcp6(void); +extern int socket_udp6(void); + +extern int socket_connect4(int,const char *,uint16); +extern int socket_connect6(int s,const char ip[16],uint16 port,uint32 scope_id); +extern int socket_connected(int); +extern int socket_bind4(int,const char *,uint16); +extern int socket_bind4_reuse(int,char *,uint16); +extern int socket_bind6(int s,const char *ip,uint16 port,uint32 scope_id); +extern int socket_bind6_reuse(int s,const char *ip,uint16 port,uint32 scope_id); +extern int socket_listen(int,int); +extern int socket_accept4(int,char *,uint16 *); +extern int socket_accept6(int s,char *ip,uint16 *port,uint32 *scope_id); +extern int socket_recv4(int,char *,int,char *,uint16 *); +extern int socket_send4(int,const char *,int,const char *,uint16); +extern int socket_recv6(int s,char *buf,unsigned int len,char *ip,uint16 *port,uint32 *scope_id); +extern int socket_send6(int s,const char *buf,unsigned int len,const char *ip,uint16 port,uint32 scope_id); +extern int socket_local4(int,char *,uint16 *); +extern int socket_remote4(int,char *,uint16 *); +extern int socket_local6(int s,char *ip,uint16 *port,uint32 *scope_id); +extern int socket_remote6(int s,char *ip,uint16 *port,uint32 *scope_id); + +extern void socket_tryreservein(int,int); + +extern const char* socket_getifname(uint32 interface); +extern uint32 socket_getifidx(const char *ifname); + +extern int noipv6; + +#endif diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/socket.lib b/NONE-CKUBU/src/djbdns/djbdns-1.05/socket.lib new file mode 100644 index 0000000..e69de29 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/socket_accept.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/socket_accept.c new file mode 100644 index 0000000..22c44d4 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/socket_accept.c @@ -0,0 +1,21 @@ +#include +#include +#include +#include +#include "byte.h" +#include "socket.h" + +int socket_accept4(int s,char ip[4],uint16 *port) +{ + struct sockaddr_in sa; + int dummy = sizeof sa; + int fd; + + fd = accept(s,(struct sockaddr *) &sa,&dummy); + if (fd == -1) return -1; + + byte_copy(ip,4,(char *) &sa.sin_addr); + uint16_unpack_big((char *) &sa.sin_port,port); + + return fd; +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/socket_accept.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/socket_accept.o new file mode 100644 index 0000000000000000000000000000000000000000..f2f458fc43bbc5ad31a0ea1727426c17b704c86e GIT binary patch literal 1584 zcmbu9&1(};5Wr`hB zmZAVv4d!ElFtnE3=o}HS0g*|4G(U0UYJ=R~^{mI)$Z#~ZpC&*qa6s|f8t6{n3H=QMRga&vD z(pKuVS{T}_bpidf=fCDJV=na--yv!xs{V=sQmg(I&f&uBiG1^Npz54-ej16&S3Hl5 z>YK7B!D+)`#um|UGDBQs~G=RY7r6LVX#&Dl|SRSw0G2}h98+0FCMAWN(N zLcTu*^y^~Q*M0h$;xh1Kq%*a)Qzu4!q;*0(?S_fVCe_AL+kZ|u?yzBM9H2$>KcV%b zzBdQC`K=*>a|dvG57XkI+X^;AQSyTzYzr2Q+e?seDECBI3R>+RY}J|~w_Mt4w(;+! mRIWXussI-g72h@8*{@L|>l&wbT=DxFr@L3&k(^@n_vSY}>X)nl literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/socket_accept6.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/socket_accept6.c new file mode 100644 index 0000000..48a0b6d --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/socket_accept6.c @@ -0,0 +1,43 @@ +#include +#include +#include +#include "byte.h" +#include "socket.h" +#include "ip6.h" +#include "haveip6.h" +#include "error.h" + +int socket_accept6(int s,char ip[16],uint16 *port,uint32 *scope_id) +{ +#ifdef LIBC_HAS_IP6 + struct sockaddr_in6 sa; +#else + struct sockaddr_in sa; +#endif + unsigned int dummy = sizeof sa; + int fd; + + fd = accept(s,(struct sockaddr *) &sa,&dummy); + if (fd == -1) return -1; + +#ifdef LIBC_HAS_IP6 + if (sa.sin6_family==AF_INET) { + struct sockaddr_in *sa4=(struct sockaddr_in*)&sa; + byte_copy(ip,12,V4mappedprefix); + byte_copy(ip+12,4,(char *) &sa4->sin_addr); + uint16_unpack_big((char *) &sa4->sin_port,port); + return fd; + } + byte_copy(ip,16,(char *) &sa.sin6_addr); + uint16_unpack_big((char *) &sa.sin6_port,port); + if (scope_id) *scope_id=sa.sin6_scope_id; + + return fd; +#else + byte_copy(ip,12,V4mappedprefix); + byte_copy(ip+12,4,(char *) &sa.sin_addr); + uint16_unpack_big((char *) &sa.sin_port,port); + if (scope_id) *scope_id=0; + return fd; +#endif +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/socket_accept6.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/socket_accept6.o new file mode 100644 index 0000000000000000000000000000000000000000..2556ddf76e0b281bc2ef359f79a39584e17eb1db GIT binary patch literal 1928 zcmbtU&r1|>6#vf7s+(z?QhY+^e*)bR0-C_4DXaxpK z!LS+q37w*2=MExd)TK*@@Rp|#Dky^R5Nz+wd`G{0cfHhunfKo3{rtY~n^_$*uS67u zgrtxWvaf|GA=?6&^x-7wB<+NHv)Y#F<+L5@{W85p?T6_xZFj=^L_yi6)o*md`#{&G zwK(;@yi05GI7IJYhU#uTW=sSzm z(ppc-8zX6No7QHv1g$MD5-X?2snIokUWi$Er0<26d_9q{5=?{{Fe z=z0_&W23Ru*XLm1RIj6OoNLOx8$?;|Qq+#N*fW?3o(3PJEqq;l60NpQK8>uY=8>t# zEo6Lj^irZP?PT*-F)^s0)6e!Bx^X%X3DGMn1!iS|vvR=aL#ga6S~_!<8PRhVvxuIp zRES<4!E#+E=a!wh{IX;xfgj1P zFehV|+!eBvFEV2&vs859_m;`#?_w80AINc6@LTv(59l_6K#1cEL!5{Cc&C8B02v8) biLZ#Szw+OWdEOp?e-v;re}dzfU)<}z6`S2C literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/socket_bind.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/socket_bind.c new file mode 100644 index 0000000..a33efca --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/socket_bind.c @@ -0,0 +1,33 @@ +#include +#include +#include +#include +#include "byte.h" +#include "socket.h" + +int socket_bind4(int s,const char ip[4],uint16 port) +{ + struct sockaddr_in sa; + + byte_zero(&sa,sizeof sa); + sa.sin_family = AF_INET; + uint16_pack_big((char *) &sa.sin_port,port); + byte_copy((char *) &sa.sin_addr,4,ip); + + return bind(s,(struct sockaddr *) &sa,sizeof sa); +} + +int socket_bind4_reuse(int s,char ip[4],uint16 port) +{ + int opt = 1; + setsockopt(s,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof opt); + return socket_bind4(s,ip,port); +} + +void socket_tryreservein(int s,int size) +{ + while (size >= 1024) { + if (setsockopt(s,SOL_SOCKET,SO_RCVBUF,&size,sizeof size) == 0) return; + size -= (size >> 5); + } +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/socket_bind.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/socket_bind.o new file mode 100644 index 0000000000000000000000000000000000000000..ce6822bc193232fc56084672f68b07283e2542d5 GIT binary patch literal 2136 zcmbtU&1(}u6rUukjT)0Ef&mK+x=IUnX;eh~BB8ae8a=2zsFgGyTU%_CkZiRr(prLr zAr|@7i6Bc<|z-XN!kgQLutSv1)z4-I;c~q!<0c?0fI`zUJ-D?C7~DAazgpBOxL?vD*R7B^Wru-zQ(UHGjMBPU-18?=pYyYj=v!RAKg>3yfQX>^Ru*c@MI z<6ozcXxr6JHKJGh)M&DrQyY_{wa_L`%ub^JBKj}!74%2zM)aLXssTP{&oPCUV-4}9 zO$}fet7_=^T#_${xpZm~MvDkqM5%h?ECueN1$c(9GS6Vx;|tXJC#ga`aacen9*JN$ z5sXxP`wf&5OmV=s`?%^`lTdmvH79lMKo_q%iE-w=6H zxbtDxYE`su&H8)XL2;PfJ^wc1YV}_d2l77oopASe`kXrA6!vY^$w}Q;^NnF2wRQr& z))xjZhLnYc^sP;~(cxp_QaI=k>AM~Kk^h(j#Jler(lim@1%qJyt4N-rRV)77CVa;x zd}|Mi5WqR{DEh{avG*mLmM(Li>n`dRiL{OnQs14#hCla}OPfh2$r(vo~c96<2Sz6TvV?z)VRk`91FjznB2lJ63>l#-tp F{9o=R9Mu2- literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/socket_bind6.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/socket_bind6.c new file mode 100644 index 0000000..20b22b8 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/socket_bind6.c @@ -0,0 +1,43 @@ +#include +#include "sockaddr_in6.h" +#include "byte.h" +#include "socket.h" +#include "ip6.h" +#include "haveip6.h" +#include "error.h" + +int socket_bind6(int s,const char ip[16],uint16 port,uint32 scope_id) +{ +#ifdef LIBC_HAS_IP6 + struct sockaddr_in6 sa; + + if (noipv6) { +#endif + int i; + for (i=0; i<16; i++) + if (ip[i]!=0) break; + if (i==16 || ip6_isv4mapped(ip)) + return socket_bind4(s,ip+12,port); +#ifdef LIBC_HAS_IP6 + } + byte_zero(&sa,sizeof sa); + sa.sin6_family = AF_INET6; + uint16_pack_big((char *) &sa.sin6_port,port); +/* implicit: sa.sin6_flowinfo = 0; */ + byte_copy((char *) &sa.sin6_addr,16,ip); + sa.sin6_scope_id=scope_id; + + return bind(s,(struct sockaddr *) &sa,sizeof sa); +#else + errno=error_proto; + return -1; +#endif +} + +int socket_bind6_reuse(int s,const char ip[16],uint16 port,uint32 scope_id) +{ + int opt = 1; + setsockopt(s,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof opt); + return socket_bind6(s,ip,port,scope_id); +} + diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/socket_bind6.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/socket_bind6.o new file mode 100644 index 0000000000000000000000000000000000000000..64a6eb7a6262762ddef7feebed2989d1a2c1de65 GIT binary patch literal 2400 zcmbtU&1(};5TAThYpqSK1q%wzVf_MK5?e|Yl?0=%WtA!_9+a?2HX6(q$wt~zPzV+u zF`|Eg9z6;klpabzK|%0TL2o^2QSk#5id5>%?%U@1OfEXG`(}PK^XB8ddDo8UN4*{o zxa5ID(3D&h;HJ09M{G6%8=wm`mQ@yXmQofq_CrVEtIjNCDaw9n?1J(}tA5gI9b_M6 zucB=JM#DN0ZUhG5`ZS`IzWTUFt2Xdk>aBdL{_M2|!i`xnpXRvY}Rplhr7iv z-vP(4c0mbhwXCvJucefbj@+nTvy_NdeWpE4+wrKX1uA-xy`-|S+^n*MWsYifUFnaq z<>TxJdmVk^$6&M6v^i?$^O(|4s~sos_%(a0v(GWclg79M6gNn5F?d!9VaU;^=+LB< z72^9j;F&rNo{3(MuX}Ch9o(7fp^xYT{l;$jXF5*Y_SSuR&v>NZ}~_*cKGoA;Lezt$Qb$HusWpf-4j;ByBrokEl=hwBY~?`a@NZ(S2DAPYMB!j zs42rTKuwg(pq2`bU~A3G@pQ?^nV=>Mxty6t(|o}))ng~m?kQVF@(N|}Ulc@dYVaCq zmk5_Hl2RbL3nFbnfsRb3NT-8*<%;#V(pDUX0gi9yxZO*R(Q;pk>#F2fyHP=V{;Pi& zeJPYMrYJSz(>RGFr*#OGt^6Ny!}Fpu@^1Yuybl?s@>;Gok$cK4F?85AY(97w?%*z{S|U zzoyjD`hZ^+(HME(YPXsSx(|Iq{`Q-P7|oG9+vGLW20z#aA8Ui3X@jTQ;Q2Oq8F9+r zeOK%^8L^o*_E0V)ub5Umk;$h<)Fhl6&Kbp`nJSjdbY|iYE#wQC;?)sIOj>3X z?XUw+nWX|$GI=XJ5-;NWi~C-3G|5775-5u3H4-nGm9hzC)1o{IMGMokX&YbZ?$c~9 zuQ)_~BBHx4zR8A-Ip_yz&533!iy-xKhFfIkv&x(Dw5F9e)s-Ni$E1StPa Z0v-`?s=>7nB2Pq^IPVbxkzCw8*Wa8^M#}&I literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/socket_conn.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/socket_conn.c new file mode 100644 index 0000000..46423cb --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/socket_conn.c @@ -0,0 +1,33 @@ +#include +#include +#include +#include +#include +#include "byte.h" +#include "socket.h" + +int socket_connect4(int s,const char ip[4],uint16 port) +{ + struct sockaddr_in sa; + + byte_zero(&sa,sizeof sa); + sa.sin_family = AF_INET; + uint16_pack_big((char *) &sa.sin_port,port); + byte_copy((char *) &sa.sin_addr,4,ip); + + return connect(s,(struct sockaddr *) &sa,sizeof sa); +} + +int socket_connected(int s) +{ + struct sockaddr_in sa; + int dummy; + char ch; + + dummy = sizeof sa; + if (getpeername(s,(struct sockaddr *) &sa,&dummy) == -1) { + read(s,&ch,1); /* sets errno */ + return 0; + } + return 1; +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/socket_conn.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/socket_conn.o new file mode 100644 index 0000000000000000000000000000000000000000..94c60df170805f89dea798e72eadd0c50bb7060a GIT binary patch literal 1936 zcmbW1-%Aux6vxl(Zuuiyx9CAAa2|#*$iXQQiHa3B9chW^2UH5{?CkXiy0fx7fm&d& zP+V-ozo9>&m%s-R417$2o|7KThoFLjz{1X%xz~ov_~IAt+;czY+Op1p@)(x8JZtFr<&x2r zN2>?R=-+@dIEkb!-T`esqb1v#npbcW=a5k&-K57rI#W*!rF+Omk?(3?0W4AfD4lI2 zUM8QX>c;{+JUDno@5-^_wBzZ$=4JCzw`E!vLKDEOEtGwyh`nD8`zdKv*{oywY~Ba6 zE=MAa!XFx^VI%sdS7Dn2uZZ{6>%`HnjyDmr?n<5W7s@pM_BQ@7WjG;A;I=>I+QmO>DsAT>J zQHZvzUt$XlwI=e7H-!=M{?PvEqR9Dj|5;>lTb&ZH6a7)Cu_NeI8O6VdgE6tEkg4x3 zI{zUJB2t&7vHI>Pd|SMfXJWz$WVCm6|1HSk@{f!AQ$~MOYW}D%YExVae(Xn?w3D%K zjOvK1gm~Nu6AwRqxvuP!2fLIc?2{laMFh8_eL7N4@b5vUV^hC1L_qgFj?+D)b#7A- zD)>iXKY%SRp7O-;(L*>pghQ?3&M?2=Ry@yiqa)_}tOS$HpJS}*(NC<(oRSjJ3&jPW z6&6{w0*|LX-|8#O;cu-_oSqClZe?x(XmMN)O91)Z(4C{Z^JhQQHFBbe)3+x16M`t> rZP+A#MG!^&BsR%k6GRbDW0U+1K@@R1Gs$(dNtBa(Qdwb0F3;s3ji=(w literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/socket_connect6.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/socket_connect6.c new file mode 100644 index 0000000..d2df4a2 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/socket_connect6.c @@ -0,0 +1,39 @@ +#include +#include +#include +#include +#include +#include "byte.h" +#include "socket.h" +#include "ip6.h" +#include "haveip6.h" +#include "error.h" +#include "uint32.h" +#include "ip4.h" + +int socket_connect6(int s,const char ip[16],uint16 port,uint32 scope_id) +{ +#ifdef LIBC_HAS_IP6 + struct sockaddr_in6 sa; + + if (noipv6) { +#endif + if (ip6_isv4mapped(ip)) + return socket_connect4(s,ip+12,port); + if (byte_equal(ip,16,V6loopback)) + return socket_connect4(s,ip4loopback,port); +#ifdef LIBC_HAS_IP6 + } + byte_zero(&sa,sizeof sa); + sa.sin6_family = PF_INET6; + uint16_pack_big((char *) &sa.sin6_port,port); + sa.sin6_flowinfo = 0; + sa.sin6_scope_id = scope_id; + byte_copy((char *) &sa.sin6_addr,16,ip); + + return connect(s,(struct sockaddr *) &sa,sizeof sa); +#else + errno=error_proto; + return -1; +#endif +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/socket_connect6.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/socket_connect6.o new file mode 100644 index 0000000000000000000000000000000000000000..49b164e75471dd44e3d61459239d99b345e93bdf GIT binary patch literal 2336 zcmbtU%}Z2K6hGsPADKF4ErbGxc!WVdoHDT%qB-R=9$`T)LK@!8yvf0td5@WAs6;MI z=`ktMqW_^?&_Z${LV=5*Rzgc@QG!AR1uYCa=iPgq+jC}92kt%R{LaTc=YGvy)vwhA z0w5>={ZQ5f3ea6smIpj>0Ggo@G&iek>26Bdb~kmDzv-@{{2FwBYwo!6QJde@O10!Z z;{F(P-!H5?ebMz*0@j*v(%moHq%5q5A3Z}ZY^^@qvS(X6g-qii+R_81CcN@9y%ACx z!OKEWgYJG>qwwhZMobBz05Pnn-E&xF2|mZ%uPmT6u0*s_R_WABDWzLSsZTFC%78Zi zR(lifh+*AJj?xrf*%To=@6sNQ&>Bn5QtiAVO{V>QS>tkG4%qgd5Wws$2u!yIf=%@e zPjTa^LK;MkbP(5{gcfV{<(j3S-ZDC02g5@{mm{4qGm$a!kskGedcG^FM$a-4KrPPX z93z3;DKI`Eq=K0>RL7ilKusBr0cxUH1hrr>#j~0d@pQq+nV=@ET+Ym+Yu<89b@;~Z zuA*ZkC%wAX!GQf4OXURrKDbq<*yi=7yl(*{{5aE~iD5@kjFc{i7Kg01L z*9FsgoX`dLuXPR$l=ENXqZms|NzVy2fKk4_;%Vi{-+w=vD#cIp_`Y(eCyD+AdAkMG5_Avk|N$9MIwJ% z(*1i+?zZr!!fH#RU^+t3W2jSwL3Esu=2y!AhV^GS&tZWV*des8wmrHg=Ie4(UWdq&MHmP6n zAB-R_YAbu=yQzZTse-4f;7%3%VHJF_3JygpIcYlaq?ON`NvBs$!dOqvux&GC7tC~K z8pe9FmSrdCGtJmN2eK~?@>a&a-wTNu$Bd^k=`@pO&4L9}nY9Vj;IAdTO~Q92obI^r-{ZKbGs5){e@fJs>@V!(Pc}h+05DD<1ONa4 literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/socket_getifidx.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/socket_getifidx.c new file mode 100644 index 0000000..c71fc48 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/socket_getifidx.c @@ -0,0 +1,13 @@ +#include +#include +#include +#include "socket.h" +#include "haven2i.h" + +uint32 socket_getifidx(const char* ifname) { +#ifdef HAVE_N2I + return if_nametoindex(ifname); +#else + return 0; +#endif +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/socket_getifidx.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/socket_getifidx.o new file mode 100644 index 0000000000000000000000000000000000000000..ad44d47d0893ebfdf358a636788a52e4d78ccaf0 GIT binary patch literal 1352 zcmbW1%}YW-5WwfDWtIo~I0OX=K@{Yo79Bc-(1!)lA?VOap1S74e1dNe)}?=;TmN3y zZgmfA=DCyW@J=o~X683DJF~N{Zf zv-ZpxkrhPT7TOuX$lSDvo7T6ClIkp3oB5vQY0Ft$vm&Idb%=i2bKd+D%%#3k__>Sg zmtBZD_s_V3itLGe<%IJS;(R`T4H?y!Yh=NWaLCvj^h-u5A0m%U8M}%OIXjBw{6|i- zQs$E_XGfvmc2j<5E6C{V^87huN%cSNP^;*7m#pvlT%F=F@H2K9>*>UaQ6EX25Kp>c z;_`J&Dy08U$rYJrX8~I4_^mnp@Q%C4 +#include +#include +#include +#include "socket.h" + +int socket_listen(int s,int backlog) +{ + return listen(s,backlog); +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/socket_listen.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/socket_listen.o new file mode 100644 index 0000000000000000000000000000000000000000..4d28725e13d3891d11ea0fe8628468026c8b672e GIT binary patch literal 1336 zcmbVLJxc>Y5S{a)Ni;TAA9?Lb$7kwdBEbq1h<$r|5CTQVHBLI6Lnmvs_H>%0;u?PV8Rw^GfH)btB z%IL8H^&FZIR4a}_C8+K+Uq<0TgK7^4107*XG&EW@?jI|$3EMrlgN5t>S+t)O!LC_< zZbrn)B5xc0oWRH}SmKtAt)iwn1?w}uXK~-+tZvv4TGl$mIGwpD{|vd**AjlNaQ!0} zM4S6(xQd4CiDE&<`~)$d=dU3~^`(q0uqy&G_ZH(4Bg&`Xu`6@eF(7wGxy*lJqSca5 zzT6$9PVAxl&ejm4+2#C2#Iovt*`?C|;fk#9#$227a_}>CF}D58jZq(2oe-XN!-UJ% zkyh~kr{s!^=jQ?RX#X2dKYSwHyL@X2IUcrq+BEy!*yu>LVa|sX#zfu|-3{&dcbZCo LHVM5)_ul>hL~Bfq literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/socket_noipv6.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/socket_noipv6.c new file mode 100644 index 0000000..289d699 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/socket_noipv6.c @@ -0,0 +1,7 @@ +#include "haveip6.h" + +#ifdef LIBC_HAS_IP6 +int noipv6=0; +#else +int noipv6=1; +#endif diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/socket_noipv6.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/socket_noipv6.o new file mode 100644 index 0000000000000000000000000000000000000000..c1c857699d19ad8ae25ab032616c39212606e34f GIT binary patch literal 960 zcmbVKJx{|h5WO^o!q^RofieLSwN$N-)}Y7hgTH`qP4VQC5LSi~*4rS*CO3^1^B{etPa3tJ2w8<^RJ& zw9>h-(9%kysngQ)b~7( z)K?q+7M!O%-m*&^JPGMTH$?nSXnW-OD+ACych~l*6sAaL+D`If`u1@nQg8s4JDf0N literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/socket_recv.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/socket_recv.c new file mode 100644 index 0000000..8bc59c5 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/socket_recv.c @@ -0,0 +1,21 @@ +#include +#include +#include +#include +#include "byte.h" +#include "socket.h" + +int socket_recv4(int s,char *buf,int len,char ip[4],uint16 *port) +{ + struct sockaddr_in sa; + int dummy = sizeof sa; + int r; + + r = recvfrom(s,buf,len,0,(struct sockaddr *) &sa,&dummy); + if (r == -1) return -1; + + byte_copy(ip,4,(char *) &sa.sin_addr); + uint16_unpack_big((char *) &sa.sin_port,port); + + return r; +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/socket_recv.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/socket_recv.o new file mode 100644 index 0000000000000000000000000000000000000000..501bb0365ed144072c5dcb1c2728aaa1a8b9d1ae GIT binary patch literal 1592 zcmbu9&1(}u6u{qRqiwZlD}sUnS6HQj9bFBjc#ue|oxu8m=s^sG&1Tz%=8I%2jS3zD z!V&}hgG35dMDXOP$KLEgL~l6=@x9HAoetZJKG=Eh{ocHpH*a?L^&R(a$}m8R0k>e^ zlN6w-z+8-TFbNaDqk_HbMrHda_rJPP)gEvh_IUR@cl)lL$wy!AMIW8d`DpjkqMez- z)ICb?4u;Woc!BpH+v)dd1a9=r*@{EF|H@9e(T~`Pc6hI9U*o-kJ>&Mu_PmR3j(0!s zZCVCS$0LC8;t?1dQ-(P?Hol3qW{}fE@{)#UCmy~@_fv1p?h$ffX<^}}HM1C$Dqh{n zvK#FBtiznkBNKqNJGIa&p$=Oky(+C%Q1w_CY=pqdUg!ZUwcEgA8mtzVTV5>y<~M4! zppH}OjWA$K_n*wRL(gA}xBj2O!eqLNquL@l;m2oHV$^U|&Y?r?)@5hZ72qOp3^naD zF8s4XUlQCDzEtm|p=o`uD;TFW|22OObE&QrKB{a9XI_P9%lajD(9mn5m?au2&q?Q} zmdJd`bI53aT?PW2*8=+7JjQiKDQA*k!rWm_-jE}Yz6*v=Br*7h%L7oH7Iq$py)T69ayi_ vLuanIUT@;hrC6%0(4HjOk&5q{?(Fw)Bo7o$@3`azh11 +#include "sockaddr_in6.h" +#include "byte.h" +#include "socket.h" +#include "ip6.h" +#include "haveip6.h" +#include "error.h" + +int socket_recv6(int s,char *buf,unsigned int len,char ip[16],uint16 *port,uint32 *scope_id) +{ +#ifdef LIBC_HAS_IP6 + struct sockaddr_in6 sa; +#else + struct sockaddr_in sa; +#endif + unsigned int dummy = sizeof sa; + int r; + + byte_zero(&sa,dummy); + r = recvfrom(s,buf,len,0,(struct sockaddr *) &sa,&dummy); + if (r == -1) return -1; + +#ifdef LIBC_HAS_IP6 + if (noipv6) { + struct sockaddr_in *sa4=(struct sockaddr_in *)&sa; + byte_copy(ip,12,V4mappedprefix); + byte_copy(ip+12,4,(char *) &sa4->sin_addr); + uint16_unpack_big((char *) &sa4->sin_port,port); + return r; + } + byte_copy(ip,16,(char *) &sa.sin6_addr); + uint16_unpack_big((char *) &sa.sin6_port,port); + if (scope_id) *scope_id=sa.sin6_scope_id; +#else + byte_copy(ip,12,(char *)V4mappedprefix); + byte_copy(ip+12,4,(char *) &sa.sin_addr); + uint16_unpack_big((char *) &sa.sin_port,port); + if (scope_id) *scope_id=0; +#endif + + return r; +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/socket_recv6.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/socket_recv6.o new file mode 100644 index 0000000000000000000000000000000000000000..94d81d3842b956f23ee3c4aac938bab46d7067d4 GIT binary patch literal 2096 zcmbtU&1(};5P!+WCf2rA@la4Oheay13#%o59BN8qyOph0(b7X9Zjy}&ZL(prEp4eE z5Gp*@XpegIuMj+hKn3w23W5~9^dtoZ6$>i?j#^_e<1Vk(Jtx6MOM5VvR={x%Qbwcbzd=oRPRaNYh-zfCcIE55n67;)+ zSGF5;%{pfvK+;Nm?&er^G9uS&-C!z=qu7=h8LQq4IuYY54J&LX#NHtqrt6A5E5;Rj zT0F1X8BtNeoKS&3rP|BlZKd)mx0YRnL~{KlR;YErpOZ$Z-tB-|p;`zKx$a_n3VnT! z5w0{ExE^CxVCe=4EOZBij&NiZ8Y=>hCq;>1qpv({tAwY!N>751g=*-Lb2xO44i8_9 z_9paHUMofiq_fhQep!-FyDA}4d9h$=DOfGjU2~ph>a&_;=?fN-GMc3kDOD~L$uwNU z@#?u`*3=3*k3!HGXD+Wy`neTqG>2P^>Zp&fqy^B)APS^af3&?)fq;;+y9cpZ5m z^3(Z7@Hpy1(~cqDY$u5CzhQhw0kZQIA^e;P9M0Dk_PtWqD-i6$ei3%Mwd=!qILhtc zd*Aqu{BIkhVlD7XE%1>R_(Thwl#TR^ZY51UJs*?OWOAUOl}dW1Wa`=c!X7V4En0eV zNjD9G?5t@NNYTib=3}lWZIl+tT)t?@vE*E_1YgHwDt`y+qFi$qXV&m7{cgD8`EdsE z4m{lA_?;YXb9fhrKjZMj9R88vIJ;~l9b|*ySeMVU)dCN)!9_lwKg#%+AAO$u1qvVu AoB#j- literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/socket_send.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/socket_send.c new file mode 100644 index 0000000..9ffbd5a --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/socket_send.c @@ -0,0 +1,18 @@ +#include +#include +#include +#include +#include "byte.h" +#include "socket.h" + +int socket_send4(int s,const char *buf,int len,const char ip[4],uint16 port) +{ + struct sockaddr_in sa; + + byte_zero(&sa,sizeof sa); + sa.sin_family = AF_INET; + uint16_pack_big((char *) &sa.sin_port,port); + byte_copy((char *) &sa.sin_addr,4,ip); + + return sendto(s,buf,len,0,(struct sockaddr *) &sa,sizeof sa); +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/socket_send.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/socket_send.o new file mode 100644 index 0000000000000000000000000000000000000000..edbba8829626ad90ef07afa87ab8f80e9335c469 GIT binary patch literal 1688 zcmbW1&1(};5WpuNZCVYsiid)NIXonSUAkII5s@veW&^8eK|v_QO|rG2`6$^ZG^J1> zAUtB#KcOf81@Te}D&j%#;Gstm!6F{?VDTWtnaz7~`&cg>c$t~syqS4ln~kf^wRkKB zN@8#Y{&|W5Y=xi|U<=YP47ONcA8b)&yXKA~%IuSa_THR$;|R`vIAWdsw%gzB8PUy) zeOr9p9>wImct0aP?okO*kFSrk&0@v+VY3`xU@RYK9V9n}^uyXe^OV4L!p> zF=VHM2*7jFcQ%uc2ObT!Q@4)Yd>Vg}kTJ;3&R)u7=e%OYt!E~Ui^hd<(=gBVOaQ}g z)wo+k&6_>Fq^zb_bq(&Vaxls+cflz7J{SS@mI{kax8{LSYSe089jDYA+%s}FZjbxi zEiJ3=ht?U)q^ld$Dp=AF_8f}QxrXHwI&=xTWMsj6GH?Vn^%;`>nAB$_@1LXO!OclK ztn^;zF-SEJn?HrQw5~Xgu&Dl47^1D#uds=Rz9x!2l>1lvr2P-zQ2B~m$f&6QT8}?~VR* z^ly!l>3fOd^p2yr^&bv?qqOYtg74MKMk(w~Lb1iY!kX7?z=KMin^T1q{HG}tEBAYm zQe&kBl*bzYm$5zxy#cz*Ki!_p6GS0SZ(s36f+)o4O(?!W5QTUehvFHuNvH7xa CCAYEw literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/socket_send6.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/socket_send6.c new file mode 100644 index 0000000..ded6793 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/socket_send6.c @@ -0,0 +1,39 @@ +#include +#include +#include +#include +#include "byte.h" +#include "socket.h" +#include "ip6.h" +#include "haveip6.h" +#include "error.h" + +int socket_send6(int s,const char *buf,unsigned int len,const char ip[16],uint16 port,uint32 scope_id) +{ +#ifdef LIBC_HAS_IP6 + struct sockaddr_in6 sa; +#else + struct sockaddr_in sa; +#endif + + byte_zero(&sa,sizeof sa); +#ifdef LIBC_HAS_IP6 + if (noipv6) { +#endif + if (ip6_isv4mapped(ip)) + return socket_send4(s,buf,len,ip+12,port); + if (byte_equal(ip,16,V6loopback)) + return socket_send4(s,buf,len,ip4loopback,port); +#ifdef LIBC_HAS_IP6 + errno=error_proto; + return -1; + } + sa.sin6_family = AF_INET6; + uint16_pack_big((char *) &sa.sin6_port,port); + byte_copy((char *) &sa.sin6_addr,16,ip); + return sendto(s,buf,len,0,(struct sockaddr *) &sa,sizeof sa); +#else + errno=error_proto; + return -1; +#endif +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/socket_send6.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/socket_send6.o new file mode 100644 index 0000000000000000000000000000000000000000..f75448acc75be2d74ec96469a85cd3c9a48d5bbe GIT binary patch literal 2512 zcmbtWPiPZq6n|-|?bd3l>w>sKBMj>w*1@bH?21TgTOHYPsj?OkahxO*JD6mK$tbNB zT&Pt(qPt!^>cNwHSlFA@Ly1@r@v;{|1ksyCJ-8s^L5T0od|&!GNiONBxeIL3oD@yG;a>;8DEewW1geq1#6Jh0Bz6Bllx zE^Gsz+h%W|KAO0_a0fYzuva>JKf)S8=H1fhdSKPUZfsMd9>OwWwTZ*Dckj0LHSunDXZ6fMbm53%9u8@aO8esFpG75 z?Way6P23BT*S@3v*uY!^>GeOPv{Iwdib3o=gyUGtjj^+bAT~J=i}&~RUd2Hvh*R4{ zX&T)4pYbc*mzT}-99(tc;_|si`fY2%uJ{%D$OH z?t3Ah5Rzw=Ox3q0eNYRgZ-SbuRzdZgPzkKogi-X&vIT11DVMDZx>g+DQuqCKcw5ys z^QVITzGg{cFl}#nBuSR*!QLesjaH`bQR$WeE>HA^!We()SD;EFhhZJ}`+?(et_$Y# zIH3z3t@R@sDCd{Pr!baEHRp*k(I31%y$3Qy_rDvB?c#6o_^cd^ve>_Xe?cL-C$i0b z6MBeqqVuB}iFko)i1AWk0ACk5IQSXb>U*$5d{6X1c%Epj)rd#Wo?Jz|$>Riz#*^Nz z)UDwD0vO;%y1nR$?w^jSUH!QpG$8#QvgR7C-!w!7^6Q5G+ua>luYHzy+fJyz)(O*l z6a&6Vlxc57G%v!%dnWi+jwg{5$r=Q`lC9q`K?@ar9Ls5<#mmTy$8N+F}>VLV+nUDqnO zo>jCbVLVfE95+WdukEIrvK$1tDc>^ATAl+H$9B(TLZDz5i*oWboVF`|Dr2~q%*fd% zL$|!+P5~A79WV^b^D2%}a`L8cI~73H@eJ2<(8y^Q=k%GZ#OEXZ6e8`B@Kq8{^C9ZP zM|?}9AEgC}@+9yPd29laguj@{nGkOAzr=CjpXB;A$)9qF{QpWg-6aBFknlAU{!GHZ jmGJfalcfIT{2L{le(Od4O%hK3A_Sg9nTYzQT!KCUM_y3o literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/socket_tcp.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/socket_tcp.c new file mode 100644 index 0000000..c200e2b --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/socket_tcp.c @@ -0,0 +1,17 @@ +#include +#include +#include +#include +#include +#include "ndelay.h" +#include "socket.h" + +int socket_tcp(void) +{ + int s; + + s = socket(AF_INET,SOCK_STREAM,0); + if (s == -1) return -1; + if (ndelay_on(s) == -1) { close(s); return -1; } + return s; +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/socket_tcp.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/socket_tcp.o new file mode 100644 index 0000000000000000000000000000000000000000..b8018efac9745fc18944611460051fc805c9bd73 GIT binary patch literal 1512 zcmbW1L2DCH5XWb;)uviPDjp&V?jeX3`!Fg}JV>BwR}l$%~Jr zTzcszQlW}h@#L)+4?;cYtp_2_fAd~_eQYlsNM`0YGdnZyZSv;cqx%)lBO@N&q5qzt zM2i+|7r0HcG(%y&()=Cf{pNn_TR8gFc#pgf75@5(tkM2B-%+*v%YpY<&E?<2t$wo} zZml${;pkIiC*RHYiiEu%XHmuCy?#R8M&0vgr>ooiOz;augs21EsReHO&2GuBY{BcbGmBC#5&h(s^TNEB4Abzcml zfg};9gMmyqB}tVO%a5NfWGaf+^(4nv0hi*aPCAchYrojhiq$O}=6U{1ISlT*6B8Kf z*eTZNQ`LS$>r0yZ+Ba(37>;&(UFA5QdEEM2T#LEzrr2WoU$Y_GW`2WPY`8Na_Eqn1 z_Qd``rrz*2GxT@mqXrk9fSdb(<1RzVu2W}RH+PN$?%5&N)IT?cTD$e|-LpgLqCS*B z7o28>-QE3Xn3eT^rq9nkf44uEmkRQx=+C$;=$D=t<|vy4yzGX-^^i^z|6t3*0iUK1 z1NLhCIb+S!(HZAh*R^e{;0S)@2u@iVuS?Zc@hcHqjy5S-<$s^eZkkZsPcvEkp3x6? gio5wcp2$2P3pn0o!yf{&fa8u057>qv*M2|#0ctjbUH||9 literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/socket_tcp6.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/socket_tcp6.c new file mode 100644 index 0000000..77bf7bd --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/socket_tcp6.c @@ -0,0 +1,44 @@ +#include +#include +#include +#include +#include +#include +#include "ndelay.h" +#include "socket.h" +#include "haveip6.h" +#include "error.h" + +#ifndef EAFNOSUPPORT +#define EAFNOSUPPORT EINVAL +#endif + +int socket_tcp6(void) +{ +#ifdef LIBC_HAS_IP6 + int s; + + if (noipv6) goto compat; + s = socket(PF_INET6,SOCK_STREAM,0); + if (s == -1) { + if (errno == EINVAL || errno == EAFNOSUPPORT) { +compat: + s=socket(AF_INET,SOCK_STREAM,0); + noipv6=1; + if (s==-1) return -1; + } else + return -1; + } + if (ndelay_on(s) == -1) { close(s); return -1; } +#ifdef IPV6_V6ONLY + { + int zero=0; + setsockopt(s,IPPROTO_IPV6,IPV6_V6ONLY,(void*)&zero,sizeof(zero)); + } +#endif + return s; +#else + return socket_tcp(); +#endif +} + diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/socket_tcp6.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/socket_tcp6.o new file mode 100644 index 0000000000000000000000000000000000000000..14c82fb60b302a13d311fedf57206e8cf9232535 GIT binary patch literal 1864 zcmbu9&r1|x7{{M&EwyY{Lt^O%yM#ni4sM1>fvmWtffN)L5wVQph@v~Q?7W6{DOeH~ z5juA49|$}}crd}jd#7%84D8a)gJ92h=6%<Q<3O*s7AyI$n^^hjBo99TYx{@wZE>r<+n9Y3 z)$z57p6-#4E$rVo$HQhX5B1%hVox_4QDFVsc9g%HaFr9C6zBKbhg0B>w96MboLcv+IxqQD6Gdi@!|m`mO2y3j@Gs}9C(2l z9>@lUkyPhMDpO4L*ODtJHa0qXGk2xvPR-d~?uIpBUGK|V`QFGRvV!HZu%}pyYNThC zRdp9^OSnsdtZ7@=WK9JDSs`_2OEXow?2_g9<+AJX63-W|HFj^ZFA%mfk52weavY6w zIbmce$a%O|&DW{fFwgUY*JesZCft$^ynobblk<$!mnBcixl#wpFtl0g8vBv+U*iWk z7JcCr{vm)YLy>BXs(%IYY?wX4*WVhgQ2WIGaS2tt;ss{16kA6!Bw_Xlg_gPYE>n|X z;o~?Mv$l(wd3JjI6HGKQ(_;SD*)dy}hcYVzPBFvY&HcACi>sfJ_h*v*x|sEKpKfDa z3;jCOnX;3yCx$-aIsuP+!{Fg>MWt=%WMh{N6dFmAmqNp7w$Et&sP7HmmHDk9>{1hs zA7|vE#}zgEck)Tr5Y!NJA}J%a2Ux&I9b5)?I?Z~kOdrfO7Ta4EZ`mdC_W9y0)Cnw g#n%8?%=~X79CGxtFZ+3~@f6!CPfl|5h+Im316X#}?*IS* literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/socket_udp.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/socket_udp.c new file mode 100644 index 0000000..d71d3e4 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/socket_udp.c @@ -0,0 +1,17 @@ +#include +#include +#include +#include +#include +#include "ndelay.h" +#include "socket.h" + +int socket_udp(void) +{ + int s; + + s = socket(AF_INET,SOCK_DGRAM,0); + if (s == -1) return -1; + if (ndelay_on(s) == -1) { close(s); return -1; } + return s; +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/socket_udp.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/socket_udp.o new file mode 100644 index 0000000000000000000000000000000000000000..5eeda2523f7236c3ccbf6a6ea2e836d0100672d8 GIT binary patch literal 1512 zcmbW1L2DCH5XWb;wN15zR6Il!+(Qs6?Zc>);z0scyNXB<1cgG_Y+k7}*_G@ov|c;} z#HE*hA{DB56;IxJ@gUTL-g*$?{5S8_?PGiCz-DHCGn1KlZ<9CoA3rEL4jFOiF8%im zC0feCW`>(IL(}A^tM%W0+N&QnzWKvnwf7|se!$01WDO5T>7J^jUyi)bYBv4u@AT?b ze`mE`_J^Npd+C09kR=@axPU4a=k-%^wyKUhGgaQ@-r$$B2vG~VRq@`IhAyovFW>R5 z-IJY{LFC;Qx5UkbhG@)@5*36SdXm#Ck4tf+lh#)>wV&;ni&b+r%uD=CSPbsFGh^uM z*jd)-Q`UY>>#Lf(+Ba&~7?!qs&2t>zdD{9#uEktOugYvX6SFrM-8r60Xz30$8Cm^eXGv6cJ3?(?6X6zsefS#wYKZw+h>Q=C4DHK zE;z>wyW9IuGb`%mjWs?$MUV11?P+ z2kce&IiH)Sr86$Fu4+54yc78K6F4PtxFJ=0v-?VfIY*lmb@|_CyB$Xq_Toflzi0Hr ho#Jl(j>a+v$O4Xc+3-hzEa13f!#%bk$j!eW{{V5(gJS>y literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/socket_udp6.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/socket_udp6.c new file mode 100644 index 0000000..3a10f49 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/socket_udp6.c @@ -0,0 +1,43 @@ +#include +#include +#include +#include +#include +#include +#include "ndelay.h" +#include "socket.h" +#include "haveip6.h" +#include "error.h" + +#ifndef EAFNOSUPPORT +#define EAFNOSUPPORT EINVAL +#endif + +int socket_udp6(void) +{ +#ifdef LIBC_HAS_IP6 + int s; + + if (noipv6) goto compat; + s = socket(PF_INET6,SOCK_DGRAM,0); + if (s == -1) { + if (errno == EINVAL || errno == EAFNOSUPPORT) { +compat: + s=socket(AF_INET,SOCK_DGRAM,0); + noipv6=1; + if (s==-1) return -1; + } else + return -1; + } + if (ndelay_on(s) == -1) { close(s); return -1; } +#ifdef IPV6_V6ONLY + { + int zero=0; + setsockopt(s,IPPROTO_IPV6,IPV6_V6ONLY,(void*)&zero,sizeof(zero)); + } +#endif + return s; +#else + return socket_udp(); +#endif +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/socket_udp6.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/socket_udp6.o new file mode 100644 index 0000000000000000000000000000000000000000..e732583951890a64dfac8a99f30b6156cd7ef646 GIT binary patch literal 1864 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,safrom->len); +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/stralloc_cat.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/stralloc_cat.o new file mode 100644 index 0000000000000000000000000000000000000000..4c094a7b9290e924ff792c3e3bba6768a74b62a8 GIT binary patch literal 1352 zcmbVM&r1SP5T11{wLDmK5GwK%Mfu1I4;@0VvOpq&f==?>HjMlM?jEd5-M#c5^zYTJ zZXN=gao^}V?a2o+^L;blo0<3a`FdJCi&+-%vfvmdh*^Na#D&txFF_ho(7#Qd_lsZS z=!)^Imus+k8Ou&5lJB@7@oOfwIL=0=QZ66mwocsoqi*L8)q&d27gS+8Z~>I}-12oD zt=|o7gT1cX)XH~zKB#-`YfyF112tmZM(v@iTP`T4(`vbGOlfy~S5+==@}94qr*H=| z`8ib4In4`o$>6COk;{m@Rm5?@5zNj7WY)wM&{CbG!OU+O-Zng&Dm%i;TDushJ!jPy zQA>Tr@E2ZJ2JD4N^tpeg3+Tw6D7F_dKT)jb`Af)AeYxHYu^|F7_X6XRBgu!*F_gJW z7?5X2xvalqp|Mg=Se_lF4$P+CMn~Tf%`WFpAs1Eu(;VuK(X)~DnU|LG;_x$+JYhTX z#E6gTg!rf%Cf;1KC}NMNoDSHKm?jX>ds+_l!|!d~#Qq8JUqd&W9jE4KUpWwlQ=lFw Vxgy;Wo%Qc9Sh*k!^e)5q_XqtLP|pAW literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/stralloc_catb.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/stralloc_catb.c new file mode 100644 index 0000000..b606e32 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/stralloc_catb.c @@ -0,0 +1,12 @@ +#include "stralloc.h" +#include "byte.h" + +int stralloc_catb(stralloc *sa,const char *s,unsigned int n) +{ + if (!sa->s) return stralloc_copyb(sa,s,n); + if (!stralloc_readyplus(sa,n + 1)) return 0; + byte_copy(sa->s + sa->len,n,s); + sa->len += n; + sa->s[sa->len] = 'Z'; /* ``offensive programming'' */ + return 1; +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/stralloc_catb.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/stralloc_catb.o new file mode 100644 index 0000000000000000000000000000000000000000..417a6aae767a6b32b94ad2802a9cb6dcd47f8d2e GIT binary patch literal 1608 zcmbu9&5P4O6u@7a>SlG(`f(_@&>W(y;0|^b5kCu6cUFsn;6Yg^Ng7!(ZI^ZyT0M9u zDnk`K`nPy0DB@8B{{c@GL=-#-3hTUN#!hFm7ad66d%rht-kUd*Ji1)FlCvyO!-5Mi zu@nX9X|R&u3e3SQP`>JoDUZExl>e&nhWC>Wz7*-;BCPNq{3E;Ze8U>!{PKs#BepPn z=+yY9@`&1J`PYQ=v0ZiO@BptmeDpS-yYmV&@%MB%@6loGIkjQKE6~B4;_JPo3T(xn zlWGnoZvgATO|W_e%buHYUWk?E1;+=+Q+!>0Vh{4QJ?^s{S^&${>KS+8QWV_tTkc76 zf-EhTN%?510+4RM$^1Y_)=A}>(mGM>6BhLtkcQ8EAVIeaB%#q-{cgu^MnJ-Lvl+F- zlvbNXWcm87#V+&1`)Tg~c)KDN8@1C|qay8OubQu*>8KtOPu^f?j(4PxO5ZLaF^?nd zqLfD@x23JbJEa)X%ymroam{~?KP6(ZE_sSVONYvTS^+6l{R)?bV%CJdntOzC!J$FPp9N|0xrFmhR>T3AZ^?=GhuHq1-| zVPXIGYxSt_4bR>D)-ZT!8-8vZ4&pE4$8kHXhdv8PIBid?PUJWG>+wbxf>dMMQScHijBBVKf1cV@ns@6C_5$>F{B{gUUAh(~wmk0&Tm z-2$6A+@w`np)lL8eQjsG+Rrfi9?rg0_p;+K`|$}WVfLY&eGHHGYvuM)uU5(4hO>9o z&pG>i{wDHXJR)ye@%+{0@++=!k#Rhb9lRdAEY1AZxd1k#wYz&esNapd&-5s`uC~?I zMng5O7ABEOo)1&qWt~n6-4|;T541|-X-cZ6Q%$OyB&2dQ?suL}^e`qBjfcZ{#3`e3 z8mrdB#~Vqiql2RMf4l?cVuh!jGn&TFXSHG#%Z7P@pCt!_+dox+nfsCMV zd&9lEzcrAr`~@feH_?N^IO;??O;j}R!|M#<(Hz>vdGa0N4sjR9CxvVy$O0VSuHXUN J5McJb{{pmkavT5v literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/stralloc_copy.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/stralloc_copy.c new file mode 100644 index 0000000..6b9ae42 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/stralloc_copy.c @@ -0,0 +1,7 @@ +#include "byte.h" +#include "stralloc.h" + +int stralloc_copy(stralloc *sato,const stralloc *safrom) +{ + return stralloc_copyb(sato,safrom->s,safrom->len); +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/stralloc_copy.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/stralloc_copy.o new file mode 100644 index 0000000000000000000000000000000000000000..8e5e611689b71534ae45b07086d9e9b29a3f4325 GIT binary patch literal 1352 zcmbVMK}!Nr5T11{wLDmK5DM}X1^Lhl4;@0VvOpq&f=;r#Z5XK=x(Dr2cQ5^e{$Abc z<{_{d_l@ojd-8$IeBaFXX5PGgzMVDB6NUl23^;)~VisULccD7p7^apN8{FaWb&a%;|*J{Uw-BZ_ovbu#Mb*K)CWmVn_TmaP{c6`f5 z>-PfNVz1}6E#NUZ>-BF{SJIuBu<%7W=;CJcm12 z$Ska-YfuW4=yU%}m(h_uQLGemexg{<=dU71_2qik#I^{?+)Ip0jwGK#$57_3 zVL;A~a#?@RLT#mYY!PuPr| z81ZqP5FdBL#Oq5IMazc;#f`PQal{MWGBZO>^s-pf!q5W!Jo Xqkt>Y9nq}+Cc!G8PmA7V`2PL@T6j`k literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/stralloc_eady.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/stralloc_eady.c new file mode 100644 index 0000000..3a31f4b --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/stralloc_eady.c @@ -0,0 +1,6 @@ +#include "alloc.h" +#include "stralloc.h" +#include "gen_allocdefs.h" + +GEN_ALLOC_ready(stralloc,char,s,len,a,i,n,x,30,stralloc_ready) +GEN_ALLOC_readyplus(stralloc,char,s,len,a,i,n,x,30,stralloc_readyplus) diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/stralloc_eady.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/stralloc_eady.o new file mode 100644 index 0000000000000000000000000000000000000000..5060db7baed23a6b4217ab2a605feb0edc29576e GIT binary patch literal 1808 zcmbW1&1(};5Wr`%)uy_bR78Rw?H+ABZ>CFD&%t)r&{5QmP;d3Uy}pJ@fL|Aar0eGryTPZ|1$-+`Dk;VnR`X zivnk%?Qsf_Nwn=kXcj<&J}~{M?562E*{BRF+X=MyI_?{2KKK2jz8y$VDQ6Fo({{Q-U zO5LLDixen#FN3m>R#dGwxq=5l{1A&Rk)GJ2KTI@L;=?f6TT~hm9fQ zWG-*yk3}Yc(O9f{RtdG|MtYW8uI*TcXD@hQ%vhcUMyb&NBc%51bj7u*HW=l4wQAQe zrB?TBqd0Lj*YK?J9P4EJO2?&i?>nUu1?KltP>{4>lX(!I9*L2ApB22xV!KdNsqig9 zonib4<0|vHnw0kCT;A(A2B_wC*Pp_*w3YDLpa*cB?Qe!&`-k_>NgfTkCyISy^Pgae zH2)5K_o0E=#_Ac9fo>VNrCp zU^m({yF7m%vbg<6*!i8uxG3`eVobCtuLr(uiHzH7?1@nyah(v4yJ6yNNM4v}_1~18 z0Tp^X0eW=)dxd_MSVk7L{H;+a*M$!ur#dT?gu?3p{>xa7Q!h{3*36<&Zu>5Q+s=Fg xqPS~EhLjPNgDXtaUDKWY*@~ntaC*l%|0r-VpI->o5%YDHPfUEDMkLPX`wKGQ+V=ne literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/stralloc_num.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/stralloc_num.c new file mode 100644 index 0000000..64b25fa --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/stralloc_num.c @@ -0,0 +1,29 @@ +#include "stralloc.h" + +int stralloc_catulong0(stralloc *sa,unsigned long u,unsigned int n) +{ + unsigned int len; + unsigned long q; + char *s; + + len = 1; + q = u; + while (q > 9) { ++len; q /= 10; } + if (len < n) len = n; + + if (!stralloc_readyplus(sa,len)) return 0; + s = sa->s + sa->len; + sa->len += len; + while (len) { s[--len] = '0' + (u % 10); u /= 10; } + + return 1; +} + +int stralloc_catlong0(stralloc *sa,long l,unsigned int n) +{ + if (l < 0) { + if (!stralloc_append(sa,"-")) return 0; + l = -l; + } + return stralloc_catulong0(sa,l,n); +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/stralloc_num.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/stralloc_num.o new file mode 100644 index 0000000000000000000000000000000000000000..f584fa5d3051fe34bdf59c0417a45cffef19e76a GIT binary patch literal 1968 zcmbVN?MqWp7(eqaoo3sLJ`55zXh>3CoLN*vY^iySRrVqT8Ft;S8SRbjuCy-+Ytmr~ z(x1||3UXmDen^nOpah{$nidpMMq2hf_uk_!XZz#>=bq>Jo!|3vo^$TK_dCO9s%$pG z#YRq%lEqO%da6o#P*;Ow7pWtmE8T2k3O#x$`^nzZ+}~QtRxUq7=uRVjGW*sLmvxqbAM{@er4;&|ApC-t80-hE+Z%KE??9xh6){i2YWqXm%61ke|{mv zz}Ak?sZzuajJKRyg?LNsgC23h{)pO&wCPoTVWP8zviXO0XZGV$tmfKvHW%uf9z>B{ z-UpZp{QLaNl*RntDEkp+QU7n6`{JSbU$8AUKkQ>Glr2Jaw9w$Eg_z$FE=2uqntSQ_ zjP8@q@u^o0HP_L#h1FS?7wanHPm^Y#?nOR`?cOC~8+O~I`WnY1RM!9)4wT3EIPG+g zS9Lo*W70XNFK5TKlZb=d#>d$)DQ6EmedFfAbhWpi@Ezz-2W}||Uz>bbZfy?8fhI#G zM9z%FHDv&1Ep5z0TuZAlMb^||jmS|&Q;0l}$q+f6L<8v%223QWL;ZtkC9V=Vl8ndI z1b8Hpnksjl?`_U#N<=RVi`%~Vz!eXxS_ly|?Sr^z5w}H0bsr47fT8KDF~A$fM0UcA zp&X{|G3Q1TmrR>aF(EI<#axGA0b_30KLEa%suhM+cz(-ks4w%f_}mF7>LM>?60TZ< zg3kBP;UFmDo^Wl{>|YBSAlN@VBks@pcL6Y73#eN%V}jl-#85;o)+b`fT&e_C;O+)Y z?7h{02n~yfVbKd50|FULX{#%xHGEI^SnAZjae(cIA-==tbrc5ji)euG zPYVUT5}&|_N{Pjik^V$BE=NjcMA5RbWa4H^2}-Lxhc3nB=@@uF@K@*l+D{Wkyr literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/stralloc_opyb.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/stralloc_opyb.c new file mode 100644 index 0000000..593029d --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/stralloc_opyb.c @@ -0,0 +1,11 @@ +#include "stralloc.h" +#include "byte.h" + +int stralloc_copyb(stralloc *sa,const char *s,unsigned int n) +{ + if (!stralloc_ready(sa,n + 1)) return 0; + byte_copy(sa->s,n,s); + sa->len = n; + sa->s[n] = 'Z'; /* ``offensive programming'' */ + return 1; +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/stralloc_opyb.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/stralloc_opyb.o new file mode 100644 index 0000000000000000000000000000000000000000..39ee50d9cf864ff115da17c977be7b77b99d3ec7 GIT binary patch literal 1504 zcmbu9&5P4e5Wpu*b+fui6%Pd$3=%}aeQW$eJxF1#eG5ewK~PcJB#o??w$kLV6~seP zctpXY$Nf7zEhyqq^dcTSc-n&p1wjwWI+MI-(?`ANKr%DGnR)ZxytEJM%?l;N03`;T zgR!S5z)AtuGF*c>m<29wIGf^KQ*@jk%i`OU*x({^zVOlKDi^;tDbs!Xa3eXu)BDgA zpWF@cF{3=KgZLnBTCd8L>(6O*@rI}K4o@S;YNj2h!bdNwFZO1=0E~N=!C0#p=G=_+ z6tm}%(?imxSAA4&JT6_@Wj`{>g~rm-S^LoW(7)~V>=W!bJGS65_i%0kuz1)_JRfy3 z$n~nS24Uo}BwR~?b-cs_=EpIxjE1YNTLZ5f0t@=xZrH<=UOx$0vh$TNI%+Nz`{ncS(2hb1RpV6ht9T->~8~ K+9bq^_x~Hl0frd> literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/stralloc_opys.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/stralloc_opys.c new file mode 100644 index 0000000..860c7e0 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/stralloc_opys.c @@ -0,0 +1,8 @@ +#include "byte.h" +#include "str.h" +#include "stralloc.h" + +int stralloc_copys(stralloc *sa,const char *s) +{ + return stralloc_copyb(sa,s,str_len(s)); +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/stralloc_opys.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/stralloc_opys.o new file mode 100644 index 0000000000000000000000000000000000000000..02bad2e14ec31fa6897e40922de79644ce440f85 GIT binary patch literal 1456 zcmbu9zl#%55XWb;r?{V=&#X12JU?CiY&1NNs`61aYayAyJ zmb0+*&+u;$d;bGl6)Y4BEe_84?!NIh!`kS;?wk3{o1Gu;B`@!F?^hg$L>#(9$Cgl{ zW&yS{+@^I}BR}13eCwuz#xFnp;V-_{chW;Y{rMSN{Pbft{p26)Hmco&L8F$w^B3>y zU$W@)*_+6D@rayx&2iUPtFJl7Mdo-QH}QJ#s?*$X@y4f<< zHd>~2C0B_|ygyEYKCj6vUx%X2qETRyXr7Q61W7=qAID@e8V!3-XTdlk6HdqDXu?}2 z(Io!0qQ@kQi)!KEt zUbft|wk&f|)T(n`Wk0_8ukklH7IjtlDT?I3RfMcd{eoMp=$hbrWBZpr(La#H3vV++ zel2e;xTG9GxVDObf ze`}1W`4>+7ZxW0~)37&vz8{X6uy_y(_3iE}6|)~~B5b{Q zSS*IU^sn*YL5lhZhzGA;J$R@GL8wq?vhTU+m{T8wnfcAkn~#vZT77uG;5cB91IsY7 zECpD~z-o%CFa;AJldZ~;Ov1`<+5b_N$*=bmD3jyw6cl`UeHhOSHofV$s~`uH$=Ch| z=S?w4HobQgmwc9kt%@fHVWlMdpUNNMGNs{hUOob+S908`aqj>_iC;}U02?INFZla~ zz6)zBD|h|bd%E^awfseKTijX*L@+m00YtRdj8zR~+#SkYt95m#M67!;h=z(4h*}hZ zNU7f4-s!5Q22pP}o4SP|t#+)%+WO;#C|337rjxS^A5&=qW9*8mvC|ndzEVaf^$I>k z#>jknZV1c9cOE6x@r-Tx4Z~f-tvIj>lf2eE`svQI=HJ0w>Z^cH_SpJ2vk-OLzr_J6 zyeIPYa^@#w^X>dqWK^G@Lj$fc2akP#e$FW68_TmMkG+TvzB`Jw`A=-3kvyMlzB>wC zGD|r!d6Ot^481cMLi08dw;-*Pf#Qitr zX@?8rrvX~D|4W&E?DuvZdFj7s1o+obVc4#3cXX>E>LXiqh>Yy6R*k(*_##SgnK5_K SyP}={IT;?`aQZ&8@9{4?TyYEl literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/strerr.h b/NONE-CKUBU/src/djbdns/djbdns-1.05/strerr.h new file mode 100644 index 0000000..6c4895a --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/strerr.h @@ -0,0 +1,78 @@ +#ifndef STRERR_H +#define STRERR_H + +struct strerr { + struct strerr *who; + const char *x; + const char *y; + const char *z; +} ; + +extern struct strerr strerr_sys; +extern void strerr_sysinit(void); + +extern const char *strerr(const struct strerr *); +extern void strerr_warn(const char *,const char *,const char *,const char *,const char *,const char *,const struct strerr *); +extern void strerr_die(int,const char *,const char *,const char *,const char *,const char *,const char *,const struct strerr *); + +#define STRERR(r,se,a) \ +{ se.who = 0; se.x = a; se.y = 0; se.z = 0; return r; } + +#define STRERR_SYS(r,se,a) \ +{ se.who = &strerr_sys; se.x = a; se.y = 0; se.z = 0; return r; } +#define STRERR_SYS3(r,se,a,b,c) \ +{ se.who = &strerr_sys; se.x = a; se.y = b; se.z = c; return r; } + +#define strerr_warn6(x1,x2,x3,x4,x5,x6,se) \ +strerr_warn((x1),(x2),(x3),(x4),(x5),(x6),(se)) +#define strerr_warn5(x1,x2,x3,x4,x5,se) \ +strerr_warn((x1),(x2),(x3),(x4),(x5),0,(se)) +#define strerr_warn4(x1,x2,x3,x4,se) \ +strerr_warn((x1),(x2),(x3),(x4),0,0,(se)) +#define strerr_warn3(x1,x2,x3,se) \ +strerr_warn((x1),(x2),(x3),0,0,0,(se)) +#define strerr_warn2(x1,x2,se) \ +strerr_warn((x1),(x2),0,0,0,0,(se)) +#define strerr_warn1(x1,se) \ +strerr_warn((x1),0,0,0,0,0,(se)) + +#define strerr_die6(e,x1,x2,x3,x4,x5,x6,se) \ +strerr_die((e),(x1),(x2),(x3),(x4),(x5),(x6),(se)) +#define strerr_die5(e,x1,x2,x3,x4,x5,se) \ +strerr_die((e),(x1),(x2),(x3),(x4),(x5),0,(se)) +#define strerr_die4(e,x1,x2,x3,x4,se) \ +strerr_die((e),(x1),(x2),(x3),(x4),0,0,(se)) +#define strerr_die3(e,x1,x2,x3,se) \ +strerr_die((e),(x1),(x2),(x3),0,0,0,(se)) +#define strerr_die2(e,x1,x2,se) \ +strerr_die((e),(x1),(x2),0,0,0,0,(se)) +#define strerr_die1(e,x1,se) \ +strerr_die((e),(x1),0,0,0,0,0,(se)) + +#define strerr_die6sys(e,x1,x2,x3,x4,x5,x6) \ +strerr_die((e),(x1),(x2),(x3),(x4),(x5),(x6),&strerr_sys) +#define strerr_die5sys(e,x1,x2,x3,x4,x5) \ +strerr_die((e),(x1),(x2),(x3),(x4),(x5),0,&strerr_sys) +#define strerr_die4sys(e,x1,x2,x3,x4) \ +strerr_die((e),(x1),(x2),(x3),(x4),0,0,&strerr_sys) +#define strerr_die3sys(e,x1,x2,x3) \ +strerr_die((e),(x1),(x2),(x3),0,0,0,&strerr_sys) +#define strerr_die2sys(e,x1,x2) \ +strerr_die((e),(x1),(x2),0,0,0,0,&strerr_sys) +#define strerr_die1sys(e,x1) \ +strerr_die((e),(x1),0,0,0,0,0,&strerr_sys) + +#define strerr_die6x(e,x1,x2,x3,x4,x5,x6) \ +strerr_die((e),(x1),(x2),(x3),(x4),(x5),(x6),0) +#define strerr_die5x(e,x1,x2,x3,x4,x5) \ +strerr_die((e),(x1),(x2),(x3),(x4),(x5),0,0) +#define strerr_die4x(e,x1,x2,x3,x4) \ +strerr_die((e),(x1),(x2),(x3),(x4),0,0,0) +#define strerr_die3x(e,x1,x2,x3) \ +strerr_die((e),(x1),(x2),(x3),0,0,0,0) +#define strerr_die2x(e,x1,x2) \ +strerr_die((e),(x1),(x2),0,0,0,0,0) +#define strerr_die1x(e,x1) \ +strerr_die((e),(x1),0,0,0,0,0,0) + +#endif diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/strerr_die.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/strerr_die.c new file mode 100644 index 0000000..ad93eb4 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/strerr_die.c @@ -0,0 +1,31 @@ +#include "buffer.h" +#include "exit.h" +#include "strerr.h" + +void strerr_warn(const char *x1,const char *x2,const char *x3,const char *x4,const char *x5,const char *x6,const struct strerr *se) +{ + strerr_sysinit(); + + if (x1) buffer_puts(buffer_2,x1); + if (x2) buffer_puts(buffer_2,x2); + if (x3) buffer_puts(buffer_2,x3); + if (x4) buffer_puts(buffer_2,x4); + if (x5) buffer_puts(buffer_2,x5); + if (x6) buffer_puts(buffer_2,x6); + + while(se) { + if (se->x) buffer_puts(buffer_2,se->x); + if (se->y) buffer_puts(buffer_2,se->y); + if (se->z) buffer_puts(buffer_2,se->z); + se = se->who; + } + + buffer_puts(buffer_2,"\n"); + buffer_flush(buffer_2); +} + +void strerr_die(int e,const char *x1,const char *x2,const char *x3,const char *x4,const char *x5,const char *x6,const struct strerr *se) +{ + strerr_warn(x1,x2,x3,x4,x5,x6,se); + _exit(e); +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/strerr_die.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/strerr_die.o new file mode 100644 index 0000000000000000000000000000000000000000..9249f5cf86ce8bd515fb211afcb1c58d0153dcb2 GIT binary patch literal 2656 zcmbW1-%Aux6vywnYi_CI7ClHtF0qtC4*r6oAF`9XIo4X>uL6H;yE==KuCgm?G0zudch3p3u{&d9R?Wkg4G_dMqhY0^Mpq~!#Ul=d|&zJ!GR%dP#e;Q zwd7|U&R|nT{vP|cZvWKnW!-+2u$SPJLS6Pty%3AkB?^g1ShoWaXF~gZ)1u=rIAzB6 z;#AOlSG$>SF68r9lm+j>MYRIk?~E{Z5HIeu61rOwSE}#$<4X8;Agj^t_J!6iD7qcGbENJY#b>1vhFb#Op6J*75f)B z3XZ%d9Baf!jn*{`&kyfN#EbL008FffOC3|q7gS53hxU>O!;qu$h7dxNbL|EupFQeC z{1|pfljE`PmFh#O8+4rqR6utp{N(*3^U8mjzrR6un&Q8lzc?T{s0*;~>k@Xl{!ORg zs{EcS!S#9FFmk?0DT#kmHH!Ihx0{>4cq$uX3b=d7I-PGHuzm28YZ#;Ix8PV8Ui!8z z_&MO1w~-&TsH^@h^b9_DMlP2e9XHew(V0!0n<^=B`oa(Xuu;Ck~`T>W!oa#pi zr}`b50C7kMi5l;1@ xK=E#AH3j(llkcURa5_&P;aFwj-iHaVBK!d1m4t`E$A;^n-!=TsViR1{$A55(s#pL3 literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/strerr_sys.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/strerr_sys.c new file mode 100644 index 0000000..b484197 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/strerr_sys.c @@ -0,0 +1,12 @@ +#include "error.h" +#include "strerr.h" + +struct strerr strerr_sys; + +void strerr_sysinit(void) +{ + strerr_sys.who = 0; + strerr_sys.x = error_str(errno); + strerr_sys.y = ""; + strerr_sys.z = ""; +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/strerr_sys.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/strerr_sys.o new file mode 100644 index 0000000000000000000000000000000000000000..9ea9ff3686f092517aab12ca473807c9cc5f3625 GIT binary patch literal 1752 zcmbtU&ui3B5S}#EuCYW6$CKF!NA5Hv^KA7Pf(uh#l|N47R;O2 z#$Y-{0VdDLAvu;omqbY~dYi|C1WY#@43ZQx(#$4i=lQFZ!p7ZQZtOoyfVniN!RfiC*PeNr3`r}o18F*+$H?E=O=E`{-^v&XklD0 zcYhtzm~_+deWW?T{=|tre*E2%(xvs!y^U4aFDLMal=U)|IyR5+s_IkT z= argc) || !argv[optind]) return optdone; + if (optpos && !argv[optind][optpos]) { + ++optind; + optpos = 0; + if ((optind >= argc) || !argv[optind]) return optdone; + } + if (!optpos) { + if (argv[optind][0] != '-') return optdone; + ++optpos; + c = argv[optind][1]; + if ((c == '-') || (c == 0)) { + if (c) ++optind; + optpos = 0; + return optdone; + } + /* otherwise c is reassigned below */ + } + c = argv[optind][optpos]; + ++optpos; + s = opts; + while (*s) { + if (c == *s) { + if (s[1] == ':') { + optarg = argv[optind] + optpos; + ++optind; + optpos = 0; + if (!*optarg) { + optarg = argv[optind]; + if ((optind >= argc) || !optarg) { /* argument past end */ + optproblem = c; + return '?'; + } + ++optind; + } + } + return c; + } + ++s; + if (*s == ':') ++s; + } + optproblem = c; + return '?'; +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/subgetopt.h b/NONE-CKUBU/src/djbdns/djbdns-1.05/subgetopt.h new file mode 100644 index 0000000..65da0fb --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/subgetopt.h @@ -0,0 +1,24 @@ +#ifndef SUBGETOPT_H +#define SUBGETOPT_H + +#ifndef SUBGETOPTNOSHORT +#define sgopt subgetopt +#define sgoptarg subgetoptarg +#define sgoptind subgetoptind +#define sgoptpos subgetoptpos +#define sgoptproblem subgetoptproblem +#define sgoptprogname subgetoptprogname +#define sgoptdone subgetoptdone +#endif + +#define SUBGETOPTDONE -1 + +extern int subgetopt(int,char **,const char *); +extern char *subgetoptarg; +extern int subgetoptind; +extern int subgetoptpos; +extern int subgetoptproblem; +extern char *subgetoptprogname; +extern int subgetoptdone; + +#endif diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/subgetopt.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/subgetopt.o new file mode 100644 index 0000000000000000000000000000000000000000..2fa776dddb82d90a84c211f970a43fac2e241724 GIT binary patch literal 2232 zcmbW2&1(}u6u@VbXg`c>E0qcgjUax2S*+IDgi;gQ+6@$K{Wy3KNz%2gHXkG#sXf?0 zl0yiQf?gF*{sA6DFJ)UHwkI#5M=xH)i-Jf+A-*>|&z-L6#dn$ae)B$Oc9P}s$qODu zVI&G0VU9(Vv8>0@BV3IzKkHz6<%j-e7wxI#@1Ty=_9BReeya6Ppv01Edd=U^E1PQh z9pC2x;}uISm-)U`99Ecl1so@9J&jn>ik2)Ts;>GyV^!|^<*?dU1Xrf6TA>ZK{1{Zd zw6649#c)`CWa-Mf`odGT3LmSy_N(*YP~CXF60OG+r@zo!d;9*Bo?MGoH}%qRgPEgh zpWUOcQ5*^u25f&k1$8x|l(vFuxdKMTioWEqa<$oPI!V>OF~;nXp`z%sxTJ&&UvZN9 zwA4VX?(oFK~5Wu`24DPDhD`wDc6{1D$^Y+1h8iP6z;;P{x4n2)Ce1KJtwbg*CRKVhqk zY5998GoFCe%-QQ4X*pvdu9?Q7$+Vfc8E0A|pJy7U#@x+Yxp>N8S~8PL8EJ4yXG}wz zxOgp?H{;1WqLcq$0uYL0>~^Jy2z%R%z`9(12f_Ba7@C1L8y3YGb%Kd%yN%fau^tuN zD{NXU5l8;S-L+1_2Ku<;H$*($BgMP(4Z;SxO3#tIQv4|j6stSFAGo_GbbTruX-=FU zUmnF1j{p;`g67DUfPD_)n%g%9)XmVb*F6xA{@1q~xcltn`0FB$7I!VQTb0W4pBcuc zM8F>K!`a>QcK~Zu-x43>4cM2(U0>dlb@cPGZ%vtz?rnKu*hi~Qkhi*FYzr^i-8 literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/systype b/NONE-CKUBU/src/djbdns/djbdns-1.05/systype new file mode 100644 index 0000000..6926690 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/systype @@ -0,0 +1 @@ +linux-2.6.26-2-amd64-:-:-:genuineintel-00020652-bfebfbff-:- diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/tai.h b/NONE-CKUBU/src/djbdns/djbdns-1.05/tai.h new file mode 100644 index 0000000..b8db5e5 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/tai.h @@ -0,0 +1,26 @@ +#ifndef TAI_H +#define TAI_H + +#include "uint64.h" + +struct tai { + uint64 x; +} ; + +#define tai_unix(t,u) ((void) ((t)->x = 4611686018427387914ULL + (uint64) (u))) + +extern void tai_now(struct tai *); + +#define tai_approx(t) ((double) ((t)->x)) + +extern void tai_add(struct tai *,const struct tai *,const struct tai *); +extern void tai_sub(struct tai *,const struct tai *,const struct tai *); +#define tai_less(t,u) ((t)->x < (u)->x) + +#define TAI_PACK 8 +extern void tai_pack(char *,const struct tai *); +extern void tai_unpack(const char *,struct tai *); + +extern void tai_uint(struct tai *,unsigned int); + +#endif diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/tai_add.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/tai_add.c new file mode 100644 index 0000000..4226ab4 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/tai_add.c @@ -0,0 +1,6 @@ +#include "tai.h" + +void tai_add(struct tai *t,const struct tai *u,const struct tai *v) +{ + t->x = u->x + v->x; +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/tai_add.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/tai_add.o new file mode 100644 index 0000000000000000000000000000000000000000..fb809925ff9ec8d34cc493fff98bc208aadd2b65 GIT binary patch literal 1216 zcmbVMJx>Bb5S`-);75TUg^4C&r6#fwwbI0pfI>lxF<)K4oHR~To(FDua12xASb(o-3gt;&hB?SV{W(?l zGxewJdn8z9op*l$-YD<+^V!@O3lhJ^d$SxTp;oCJ7PhLU)zkgLf!bGl#gZy*M=5{` z?*gk^80|2MU6)xivY~vV2!GsT@^#C+c)v% z|Ib&^N^{DH5@p7J?ucAo=r$0O-xqvCUG!E;gjLiu;ly%Zuza{p&Ap1LBM$)C>^IP(S{ltk8pL7%AlTJu{(l1YZ lHmNQ0@+$%S?*Lego#*#^vAWmPosMb)XHm%lS0-Kjv_F%~JKg{Q literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/tai_now.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/tai_now.c new file mode 100644 index 0000000..91e84da --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/tai_now.c @@ -0,0 +1,7 @@ +#include +#include "tai.h" + +void tai_now(struct tai *t) +{ + tai_unix(t,time((time_t *) 0)); +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/tai_now.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/tai_now.o new file mode 100644 index 0000000000000000000000000000000000000000..0339e4de9a6bacd670a3d0b4ec754fc243ee52b1 GIT binary patch literal 1344 zcmbVMKT88q4A1qdZB?ZH83YwOiGqDt6$b}7soDzSpg4$wUh7GVwuSbA)y2W7Tfd3B zt6#v6;i#LSP?NhCy~dk-a82?{eo0=!>;2CDZp^ZPj|H3XYcUFt41tahJ1_z%I4X8N zbG=tWicdqn1DvAuQta5L&uC5t5LkDIV71ehJ(5UvF&E)8#y3lHYc%~3Ls`h@H!=&` zUa9KVGiz#9tz>g5w-~4Zs&!k_ZV9Ds2C~9h)4O(+_SzcMg{xgqrB(}+k9w7}%cfiN zK$RP{npek=dP94vaB!S$X}5f3I{ClIAeBZmC{j4a_U{<-r9(QY)A+>&MrL{-0H=(P zMoe{*#%6rp;I_e8oUPqR#y@oI^$SM81WH`xC@` zzQ2PQ)t9GhfH~oiv3uy37*QStk4+gnh7LJ9ie>%@6OEL7vgPb3G--zNW_ZJdnU5g8 ze+u=e`X7eRam1k`>j&uHUy6&vd+)D@>P2Ux; + s[7] = x & 255; x >>= 8; + s[6] = x & 255; x >>= 8; + s[5] = x & 255; x >>= 8; + s[4] = x & 255; x >>= 8; + s[3] = x & 255; x >>= 8; + s[2] = x & 255; x >>= 8; + s[1] = x & 255; x >>= 8; + s[0] = x; +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/tai_pack.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/tai_pack.o new file mode 100644 index 0000000000000000000000000000000000000000..a6393bbd3609653b87293adeed0da7c7e7ce24f0 GIT binary patch literal 1256 zcmbVLu}T9$5S`1#+^H#|Cp2JmHxV)J+@9peP*t^5yql{&NSr#0?UuIYUFF}?^bQz|>h1z{? z=sUINPj~3&Vwi{_8-pD~CI)K+&I`=xt*zTrum%Oo&O7b{_8@*q*LF3Iz^_#HytQi3 zXv>bbBeum>u_Q|CaR?xyn^4IHqUy)kGLZ@f3dDs}5=0}4K=gxaDS}r0vM<8`M6(-) zK?fzBt_p;Ia$by-Y+fasj~_3hl}49iTaLejj=2&)1_SmRW&ot61k8SzejX zq+C0L1wK2{8vmIwYUF;(`Rqvgp*MZkz9~eyJHJ28C9VIHp5MIo8{qv7&yjRl`1x = u->x - v->x; +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/tai_sub.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/tai_sub.o new file mode 100644 index 0000000000000000000000000000000000000000..e7ebd5d4857bda8ac3fc55c7fa8a55bb861deefe GIT binary patch literal 1216 zcmbVMJx>Bb5S;@8_)*|TVWNpxsZlnbT4`cPK%pSU7_G@3o`L8=!mSC~Xlrcv2e$qM zd;f%g!_H1;xLG+TSFy=u=DmGyW_P&b@wjo4avZSBfg>0r%L06lQz(z}GR#08>Mz;) zR;vD-`-lXKtaBdD!5I{s^lUCa#Dc`H@ZL1XQK(fa2gQx5?{##yxUcrqZpl^dW|RV` z@IElw!)W?ZY}?HE0|V+x8x6_}Lr{JHRx7{VyzcA32i58Yf!{?*w`Y7+JH0H0Mz?O_ z%_q;7(Mog5iV|hU|L%xfLFm>HlRqu^hQJnPY{GFJV;-ML{VsZ`e+r-YI%BXCCo!j9 z@wJUWo{9F~m|SA<6ziyqRER@o;)t@U46BS+~c zEN4g3cP{$LK6(%6?(+ULm!$qfp5FrdZIJyfFC*zP@bx2k!s*0`5ubDu;*(BDe9|vZ nd@iXi^71PI{Ox = u; +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/tai_uint.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/tai_uint.o new file mode 100644 index 0000000000000000000000000000000000000000..183898e4b282d76bc9d254e4232b34ddaf5b356a GIT binary patch literal 1208 zcmbVLu}T9$5S>eciJBscf}mimR4|KCK~RuDqDdhZqIKBBl?1&Ded)5prs4HzXs8$$)>YH1wOs9F>*S-PO?)kn6uq5bNqv~gurO@j3O}zR4{biKW zeEz%z;|eY^$rmDeysx20`t+EIoQ8-w%&_Bd9WjUNzxpz2secMr+_?XCoJ5~`#cc}% zc_+%hI&#SsPrEwSGk=IY^_Mnq#HvWh+8X91N0Jwz<51SlVM5N1YFU55LWfdMv78;1 zzPUp`oNfk@-Y(xyb4lv|t$L=$(u)5p4>jqY}fn7SZNE;f>Gk)7&E|on* literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/tai_unpack.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/tai_unpack.c new file mode 100644 index 0000000..b725ae0 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/tai_unpack.c @@ -0,0 +1,16 @@ +#include "tai.h" + +void tai_unpack(const char *s,struct tai *t) +{ + uint64 x; + + x = (unsigned char) s[0]; + x <<= 8; x += (unsigned char) s[1]; + x <<= 8; x += (unsigned char) s[2]; + x <<= 8; x += (unsigned char) s[3]; + x <<= 8; x += (unsigned char) s[4]; + x <<= 8; x += (unsigned char) s[5]; + x <<= 8; x += (unsigned char) s[6]; + x <<= 8; x += (unsigned char) s[7]; + t->x = x; +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/tai_unpack.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/tai_unpack.o new file mode 100644 index 0000000000000000000000000000000000000000..28d1414b488eff888210392479cc5240ca6a961f GIT binary patch literal 1296 zcmbVLze~eV5WY0EjX$te1QiAAq=J1|byAQ(tIZ$|qBxecMq0F~G!d$cvzvp1e@XY^ z;^^2>T%6t9^e%nR#3NH5g!{hl-S_U^g?GPyc#zOEP)mb72$@m=%!p_PvI*m0K&CsJ z>6SIC_hDGtTc&%KuzK$j>LE;qa3qAO5T+%x9#SuK{7g^-K)X8zt&`RCiL~*EJ&?XA z_fBLCLb+Jn$*q>0YQuJO+hR*><_n^*Hh=)ayKVY*6{FuC#JWPh)A2!^+rAB=>UkjA z&Xp~kdgY>RHyseQR%7 z*Q*qk*apun;Xc>M^2vOP^4uxh;IpG#<>&v8`-$_}kzWm^9}s{sjC6N?f0|2N{l1*v zy!5NU>noi{%1gr657&w7u@fUb_9m#ubx8Sff1dPoTv^olD*>3q%;`u!fAjY3M&-u6 S#)m3u5E6B8P6C>1wCi680$m;e literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/taia.h b/NONE-CKUBU/src/djbdns/djbdns-1.05/taia.h new file mode 100644 index 0000000..4d37ef2 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/taia.h @@ -0,0 +1,34 @@ +#ifndef TAIA_H +#define TAIA_H + +#include "tai.h" + +struct taia { + struct tai sec; + unsigned long nano; /* 0...999999999 */ + unsigned long atto; /* 0...999999999 */ +} ; + +extern void taia_tai(const struct taia *,struct tai *); + +extern void taia_now(struct taia *); + +extern double taia_approx(const struct taia *); +extern double taia_frac(const struct taia *); + +extern void taia_add(struct taia *,const struct taia *,const struct taia *); +extern void taia_addsec(struct taia *,const struct taia *,int); +extern void taia_sub(struct taia *,const struct taia *,const struct taia *); +extern void taia_half(struct taia *,const struct taia *); +extern int taia_less(const struct taia *,const struct taia *); + +#define TAIA_PACK 16 +extern void taia_pack(char *,const struct taia *); +extern void taia_unpack(const char *,struct taia *); + +#define TAIA_FMTFRAC 19 +extern unsigned int taia_fmtfrac(char *,const struct taia *); + +extern void taia_uint(struct taia *,unsigned int); + +#endif diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/taia_add.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/taia_add.c new file mode 100644 index 0000000..3044a26 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/taia_add.c @@ -0,0 +1,18 @@ +#include "taia.h" + +/* XXX: breaks tai encapsulation */ + +void taia_add(struct taia *t,const struct taia *u,const struct taia *v) +{ + t->sec.x = u->sec.x + v->sec.x; + t->nano = u->nano + v->nano; + t->atto = u->atto + v->atto; + if (t->atto > 999999999UL) { + t->atto -= 1000000000UL; + ++t->nano; + } + if (t->nano > 999999999UL) { + t->nano -= 1000000000UL; + ++t->sec.x; + } +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/taia_add.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/taia_add.o new file mode 100644 index 0000000000000000000000000000000000000000..db110d5965e6236a3489d2878feac8f0a697d796 GIT binary patch literal 1288 zcmbVLu}T9$5S`0~qkiZROqvn<$wKV(>de2B~kbRNdQ0ojX5 zJ0ZJC+1qubU36r(ScGi^T| z^Z>AKkHBiXmYqsE_jm^4=XLE^#~_png{}1Ro>x9sjr6A25bK$&$gT`h0MWXs`>Kr5 zZw_M3WWLw-K~$BmK$Kf85KZq=39oi~)>L&5MCGbp_Zlc^T=||T9iC)bzN%b=n-8DQ zp_N9PU|Zxh{&z>@T&7z@On#g34-6X^H;Il*7#)0u^=Hvb{bTrq*P{k&VG?ud6<(_d z_?f8wp~+b-9??4EH+&9x>d)7UCKgzMYxl6uIkLPnpMhLEi3L78(i%Vie%w!(&yM_N zDE$BcjAEp_^ZV0WqWbss{ARS@1m559Jd!RBpWmD(Y)4Lv_{f_eA9X^~M}2wXlTmGv j=YI)63YAl#^Zd@+SLfsec) + taia_frac(t); +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/taia_approx.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/taia_approx.o new file mode 100644 index 0000000000000000000000000000000000000000..ebc4bbae9c80faba8374aad65a1cc9b7dbed6558 GIT binary patch literal 1440 zcmbVMK}#D^5T13TCarX}2nrR;-kTsE*Fch^3N8-(uS?(=gh2m zIbAS?=ZOhm8atK9mJp+Qg6m?{!!2u~uo;2*WFrfv)M$W-)o^|7bKO=#Fy&gM5>_#! zT8l!n{Px3iBeLa9uH^oZ$5a|^pE|;49`~5?CCzq(Cun9m^x9hOP0Sfq9w5>^S>~gR zPg!@F3ml4}P~Y_e{dDGi^XD;_>gvIrUPnx%e(_2D!V75Vn#lKs`eQatto * 0.000000001 + t->nano) * 0.000000001; +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/taia_frac.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/taia_frac.o new file mode 100644 index 0000000000000000000000000000000000000000..1ed97766b9ffeec01b709ea527513512983338ef GIT binary patch literal 1544 zcmbW1y-yTT5Wr_ykmD7MDv-WecPr5w$Y!)+G?UJ97Jq(*_b_ zVQgspKPc%$Y}5)Z2({HEGk5HOWvxWaiMIkZ|?IN=w&6P(ia^4;vWYXqr&XFFq+oMhENZ?Ob$Sz(l%=OQJx< z+UL%UEHC1&q1`VSnMVT&ylQ89y zf8Hmb{v_UeL8=IjFiZ-WXsu6_>LV)&L)f^8^%wbe+XGt|6Myje!CbJi|o%_YKrTJ zKc|wD?PgAlc-BscXWcMyyGhZ+{pU3%0WQ#K&&ybB{;v*C>nw+U=M$;@_ujYBYnuLV f0u_K-sLntS#K~7|3A!t)dUBdb!E(Br^gaFsFnNIx literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/taia_less.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/taia_less.c new file mode 100644 index 0000000..2d889c8 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/taia_less.c @@ -0,0 +1,12 @@ +#include "taia.h" + +/* XXX: breaks tai encapsulation */ + +int taia_less(const struct taia *t,const struct taia *u) +{ + if (t->sec.x < u->sec.x) return 1; + if (t->sec.x > u->sec.x) return 0; + if (t->nano < u->nano) return 1; + if (t->nano > u->nano) return 0; + return t->atto < u->atto; +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/taia_less.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/taia_less.o new file mode 100644 index 0000000000000000000000000000000000000000..cdcd686411b2f9254751fb7524ac5fb6eb24fbd1 GIT binary patch literal 1280 zcmbVLJ4*vW5S~jya=y4If`WmIjYcqwQ4t>?fy5+&ScukP6HgM%1MUudG}^~P{4rt~ z$RDt@v$eIe(;2g?=Wvw+$2Z@%^X=@;-QDaRlp=-!It+mQ+CqpVoj`Ob0W7iOaX*<)%Il#(RYW~ z(3$UC`XElFFG18i4}|Nqq;MM5Ggr195cO`m?R2oD)Ab!uK0L{KzO0`IoBuzbLo1CU z&bG)a{^yRUC0X4(a`H!+e#f|`F`Xz}L^SdFuRn)g>L0-;825^-1VzlLS1^{5@H5f+ zn-XVL@rbI^ey#7IPW^fGm0+_4UW=bxsQ;DuH0AzDT;Q{#TJ1m9Mupr@oX?I*Kh&l# z$~THgcjxz~xrFt9R`Z)tehs|8);UsL4BkJvPCObqG19|sLVDN +#include +#include "taia.h" + +void taia_now(struct taia *t) +{ + struct timeval now; + gettimeofday(&now,(struct timezone *) 0); + tai_unix(&t->sec,now.tv_sec); + t->nano = 1000 * now.tv_usec + 500; + t->atto = 0; +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/taia_now.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/taia_now.o new file mode 100644 index 0000000000000000000000000000000000000000..5dbd5f457ea391e822f72f703dd576d2023a07ff GIT binary patch literal 1408 zcmbtT&1(};5TDJaHq{VTu^=e8NRbNmK~yC4AS<4*&5qdMmf9ZKy4dmKy@b*P#J3bTRUTuT2Q@Fn%W_z z3`fqY&cml`6K8ra^Vi2iW^I6IIj7v>H(YZ!a6rd?PzD)>}N>;4X^2LXve>gbBR4p@3DAqe*lpwU{wGB literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/taia_pack.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/taia_pack.c new file mode 100644 index 0000000..89e2c16 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/taia_pack.c @@ -0,0 +1,20 @@ +#include "taia.h" + +void taia_pack(char *s,const struct taia *t) +{ + unsigned long x; + + tai_pack(s,&t->sec); + s += 8; + + x = t->atto; + s[7] = x & 255; x >>= 8; + s[6] = x & 255; x >>= 8; + s[5] = x & 255; x >>= 8; + s[4] = x; + x = t->nano; + s[3] = x & 255; x >>= 8; + s[2] = x & 255; x >>= 8; + s[1] = x & 255; x >>= 8; + s[0] = x; +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/taia_pack.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/taia_pack.o new file mode 100644 index 0000000000000000000000000000000000000000..d5b1c6020fa2264df66d168dfa7c9f60294d2e4e GIT binary patch literal 1424 zcmbu8K}#D^5P)a1(X7^nC_)8=?m>zLeUP>k@gN%$n+=pAtv!f>zQip`O_XF0(Mu1x zC@S~^Jos0{{)qkr4?VQ>(2HPa_PuAH!=7~D?aX{Lvv1x!-nYf~?=p@9MjV)j|DK@$ zOBM_g9Ka9^Kxw&lbn_`Z`V;nkde;;PkIRMH>GGs^xR47kuTk|Y)u&Vz6A-$}%P8fL zDjilPy|DM)TP>|!C3^sjYV90+1gBeY+@YLzhP_N6r$w?tpM`wkBvZ+c_1tRSN55Jw z&-qi8sJ<;*{u}XHyqYPB;!9-$h|Yd9mUYx|Tj?!hwWA#=;;0*g*p#sZQSWp>BsAJu z|I(Jt2t;GI*^FA4(%Ow9QT_0FrW4D?SL)iPZidh+?~sD4QgPh3{|2Y@713@cY(g#&%ODMt!7pLOkt;iR&iKkF|F1PI*7z zLhe35?5B&3*<>XU@=21q6PoSKtrA~zdWZIX{R3wv BZKwbM literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/taia_sub.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/taia_sub.c new file mode 100644 index 0000000..6944689 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/taia_sub.c @@ -0,0 +1,21 @@ +#include "taia.h" + +/* XXX: breaks tai encapsulation */ + +void taia_sub(struct taia *t,const struct taia *u,const struct taia *v) +{ + unsigned long unano = u->nano; + unsigned long uatto = u->atto; + + t->sec.x = u->sec.x - v->sec.x; + t->nano = unano - v->nano; + t->atto = uatto - v->atto; + if (t->atto > uatto) { + t->atto += 1000000000UL; + --t->nano; + } + if (t->nano > unano) { + t->nano += 1000000000UL; + --t->sec.x; + } +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/taia_sub.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/taia_sub.o new file mode 100644 index 0000000000000000000000000000000000000000..e49dfe89948c064aa8b012b245434b2914406194 GIT binary patch literal 1288 zcmbVLPcH*e5T9+)MZ*#j35hx()kkqbB8`82lBNgY+`QHbp>5J#Nx3-m)b!%uAU+Lo z5ud;}a3wwfGxeUX$(}mN>&)*r^LsOIHoe)+?L{mLj9IV=9b{O5On}U^=?n~l4YJiI zlaX9&&z7ycBb%{Y^HCdBM<;Yfp$AZ&)^}wk3Pv^R>g`~PNhY9{x<{= z-c{LGMf85{*Poimck4cgW92IlMb86Kb1#%|PYWkCRdzv?s^zjT;>x|y;8^}|CZZDdcW(i)qgL%%8k0GSk=`ujtqlMM(9_%b`)My>{onNd#d%b*2j5Wl@yCgmh_we$Z&2!D)X0`T|x3 literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/taia_tai.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/taia_tai.c new file mode 100644 index 0000000..ef4d4fc --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/taia_tai.c @@ -0,0 +1,6 @@ +#include "taia.h" + +void taia_tai(const struct taia *ta,struct tai *t) +{ + *t = ta->sec; +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/taia_tai.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/taia_tai.o new file mode 100644 index 0000000000000000000000000000000000000000..5b43ce90aac973bfaabe0a36a7b4c4e5146fea1d GIT binary patch literal 1208 zcmbVLK~4fu4DB!kP+6eS#6%Nur6%$t>Pizs0tyS`!swcOa12BT66P<^ja!WycWym` zckmJ(Lr=GKrLTPG zJL{$q>F)aew3np*_q@La)(hzV!fT|uG<<$(o?<_7W5g%jg!rThiBJ0S#Oq)EcnbgD gzXTwUskzuZKT2o2wuvv(265?>BE8UPpYdtG0dO@uF8}}l literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/taia_uint.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/taia_uint.c new file mode 100644 index 0000000..167936c --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/taia_uint.c @@ -0,0 +1,10 @@ +#include "taia.h" + +/* XXX: breaks tai encapsulation */ + +void taia_uint(struct taia *t,unsigned int s) +{ + t->sec.x = s; + t->nano = 0; + t->atto = 0; +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/taia_uint.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/taia_uint.o new file mode 100644 index 0000000000000000000000000000000000000000..2bf881ad5eadc7b6f9a09ae2c3a260d436d514e1 GIT binary patch literal 1224 zcmbVLJxc>Y5S>eciC+*!R8TNhDwxHnASg&6(O8IuDAda*~uESMXINr>g_jY#Y*oTAT!<6TNT^{ViUuIcEhb+f*8O9+8z3-!s zT8;?Be2l%FcYv8#gSPuq@Va>~J(0~l;U2^bDWAdjRj=~F;+caYXgDZ$M{$c$k^iuy6e(tjU zH(V0q_*XmJI>!7=RDLz&ywQ#to%LIO4|(d(*P|hpSb=M+SmzvBUYO6OTswsYK0DG{ z|Cu!!`3}%HvKfdF+{pMzdy|-ssFQ?-<BNZJJ6yDgBYM-cBXl{r~L(O2tb|y literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/tdlookup.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/tdlookup.c new file mode 100644 index 0000000..d3e473e --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/tdlookup.c @@ -0,0 +1,336 @@ +#include +#include "uint16.h" +#include "open.h" +#include "tai.h" +#include "cdb.h" +#include "byte.h" +#include "case.h" +#include "dns.h" +#include "seek.h" +#include "response.h" +#include "ip6.h" + +static int want(const char *owner,const char type[2]) +{ + unsigned int pos; + static char *d; + char x[10]; + uint16 datalen; + + pos = dns_packet_skipname(response,response_len,12); if (!pos) return 0; + pos += 4; + + while (pos < response_len) { + pos = dns_packet_getname(response,response_len,pos,&d); if (!pos) return 0; + pos = dns_packet_copy(response,response_len,pos,x,10); if (!pos) return 0; + if (dns_domain_equal(d,owner)) + if (byte_equal(type,2,x)) + return 0; + uint16_unpack_big(x + 8,&datalen); + pos += datalen; + } + return 1; +} + +static char *d1; + +static char clientloc[2]; +static struct tai now; +static struct cdb c; + +static char data[32767]; +static uint32 dlen; +static unsigned int dpos; +static char type[2]; +static uint32 ttl; + +static int find(char *d,int flagwild) +{ + int r; + char ch; + struct tai cutoff; + char ttd[8]; + char ttlstr[4]; + char recordloc[2]; + double newttl; + + for (;;) { + r = cdb_findnext(&c,d,dns_domain_length(d)); + if (r <= 0) return r; + dlen = cdb_datalen(&c); + if (dlen > sizeof data) return -1; + if (cdb_read(&c,data,dlen,cdb_datapos(&c)) == -1) return -1; + dpos = dns_packet_copy(data,dlen,0,type,2); if (!dpos) return -1; + dpos = dns_packet_copy(data,dlen,dpos,&ch,1); if (!dpos) return -1; + if ((ch == '=' + 1) || (ch == '*' + 1)) { + --ch; + dpos = dns_packet_copy(data,dlen,dpos,recordloc,2); if (!dpos) return -1; + if (byte_diff(recordloc,2,clientloc)) continue; + } + if (flagwild != (ch == '*')) continue; + dpos = dns_packet_copy(data,dlen,dpos,ttlstr,4); if (!dpos) return -1; + uint32_unpack_big(ttlstr,&ttl); + dpos = dns_packet_copy(data,dlen,dpos,ttd,8); if (!dpos) return -1; + if (byte_diff(ttd,8,"\0\0\0\0\0\0\0\0")) { + tai_unpack(ttd,&cutoff); + if (ttl == 0) { + if (tai_less(&cutoff,&now)) continue; + tai_sub(&cutoff,&cutoff,&now); + newttl = tai_approx(&cutoff); + if (newttl <= 2.0) newttl = 2.0; + if (newttl >= 3600.0) newttl = 3600.0; + ttl = newttl; + } + else + if (!tai_less(&cutoff,&now)) continue; + } + return 1; + } +} + +static int dobytes(unsigned int len) +{ + char buf[20]; + if (len > 20) return 0; + dpos = dns_packet_copy(data,dlen,dpos,buf,len); + if (!dpos) return 0; + return response_addbytes(buf,len); +} + +static int doname(void) +{ + dpos = dns_packet_getname(data,dlen,dpos,&d1); + if (!dpos) return 0; + return response_addname(d1); +} + +static int doit(char *q,char qtype[2]) +{ + unsigned int bpos; + unsigned int anpos; + unsigned int aupos; + unsigned int arpos; + char *control; + char *wild; + int flaggavesoa; + int flagfound; + int r; + int flagns; + int flagauthoritative; + char x[20]; + uint16 u16; + char addr[8][4]; + char addr6[8][16]; + int addrnum,addr6num; + uint32 addrttl,addr6ttl; + int i; + + anpos = response_len; + + control = q; + for (;;) { + flagns = 0; + flagauthoritative = 0; + cdb_findstart(&c); + while (r = find(control,0)) { + if (r == -1) return 0; + if (byte_equal(type,2,DNS_T_SOA)) flagauthoritative = 1; + if (byte_equal(type,2,DNS_T_NS)) flagns = 1; + } + if (flagns) break; + if (!*control) return 0; /* q is not within our bailiwick */ + control += *control; + control += 1; + } + + if (!flagauthoritative) { + response[2] &= ~4; + goto AUTHORITY; /* q is in a child zone */ + } + + + flaggavesoa = 0; + flagfound = 0; + wild = q; + + for (;;) { + addrnum = addr6num = 0; + addrttl = addr6ttl = 0; + cdb_findstart(&c); + while (r = find(wild,wild != q)) { + if (r == -1) return 0; + flagfound = 1; + if (flaggavesoa && byte_equal(type,2,DNS_T_SOA)) continue; + if (byte_diff(type,2,qtype) && byte_diff(qtype,2,DNS_T_ANY) && byte_diff(type,2,DNS_T_CNAME)) continue; + if (byte_equal(type,2,DNS_T_A) && (dlen - dpos == 4)) { + addrttl = ttl; + i = dns_random(addrnum + 1); + if (i < 8) { + if ((i < addrnum) && (addrnum < 8)) + byte_copy(addr[addrnum],4,addr[i]); + byte_copy(addr[i],4,data + dpos); + } + if (addrnum < 1000000) ++addrnum; + continue; + } + if (byte_equal(type,2,DNS_T_AAAA) && (dlen - dpos == 16)) { + addr6ttl = ttl; + i = dns_random(addr6num + 1); + if (i < 8) { + if ((i < addr6num) && (addr6num < 8)) + byte_copy(addr6[addr6num],16,addr6[i]); + byte_copy(addr6[i],16,data + dpos); + } + if (addr6num < 1000000) ++addr6num; + continue; + } + if (!response_rstart(q,type,ttl)) return 0; + if (byte_equal(type,2,DNS_T_NS) || byte_equal(type,2,DNS_T_CNAME) || byte_equal(type,2,DNS_T_PTR)) { + if (!doname()) return 0; + } + else if (byte_equal(type,2,DNS_T_MX)) { + if (!dobytes(2)) return 0; + if (!doname()) return 0; + } + else if (byte_equal(type,2,DNS_T_SOA)) { + if (!doname()) return 0; + if (!doname()) return 0; + if (!dobytes(20)) return 0; + flaggavesoa = 1; + } + else + if (!response_addbytes(data + dpos,dlen - dpos)) return 0; + response_rfinish(RESPONSE_ANSWER); + } + for (i = 0;i < addrnum;++i) + if (i < 8) { + if (!response_rstart(q,DNS_T_A,addrttl)) return 0; + if (!response_addbytes(addr[i],4)) return 0; + response_rfinish(RESPONSE_ANSWER); + } + for (i = 0;i < addr6num;++i) + if (i < 8) { + if (!response_rstart(q,DNS_T_AAAA,addr6ttl)) return 0; + if (!response_addbytes(addr6[i],16)) return 0; + response_rfinish(RESPONSE_ANSWER); + } + + if (flagfound) break; + if (wild == control) break; + if (!*wild) break; /* impossible */ + wild += *wild; + wild += 1; + } + + if (!flagfound) + response_nxdomain(); + + + AUTHORITY: + aupos = response_len; + + if (flagauthoritative && (aupos == anpos)) { + cdb_findstart(&c); + while (r = find(control,0)) { + if (r == -1) return 0; + if (byte_equal(type,2,DNS_T_SOA)) { + if (!response_rstart(control,DNS_T_SOA,ttl)) return 0; + if (!doname()) return 0; + if (!doname()) return 0; + if (!dobytes(20)) return 0; + response_rfinish(RESPONSE_AUTHORITY); + break; + } + } + } + else + if (want(control,DNS_T_NS)) { + cdb_findstart(&c); + while (r = find(control,0)) { + if (r == -1) return 0; + if (byte_equal(type,2,DNS_T_NS)) { + if (!response_rstart(control,DNS_T_NS,ttl)) return 0; + if (!doname()) return 0; + response_rfinish(RESPONSE_AUTHORITY); + } + } + } + + arpos = response_len; + + bpos = anpos; + while (bpos < arpos) { + bpos = dns_packet_skipname(response,arpos,bpos); if (!bpos) return 0; + bpos = dns_packet_copy(response,arpos,bpos,x,10); if (!bpos) return 0; + if (byte_equal(x,2,DNS_T_NS) || byte_equal(x,2,DNS_T_MX)) { + if (byte_equal(x,2,DNS_T_NS)) { + if (!dns_packet_getname(response,arpos,bpos,&d1)) return 0; + } + else + if (!dns_packet_getname(response,arpos,bpos + 2,&d1)) return 0; + case_lowerb(d1,dns_domain_length(d1)); + if (want(d1,DNS_T_A)) { + cdb_findstart(&c); + while (r = find(d1,0)) { + if (r == -1) return 0; + if (byte_equal(type,2,DNS_T_A)) { + if (!response_rstart(d1,DNS_T_A,ttl)) return 0; + if (!dobytes(4)) return 0; + response_rfinish(RESPONSE_ADDITIONAL); + } + else if (byte_equal(type,2,DNS_T_AAAA)) { + if (!response_rstart(d1,DNS_T_AAAA,ttl)) return 0; + if (!dobytes(16)) return 0; + response_rfinish(RESPONSE_ADDITIONAL); + } + } + } + } + uint16_unpack_big(x + 8,&u16); + bpos += u16; + } + + if (flagauthoritative && (response_len > 512)) { + byte_zero(response + RESPONSE_ADDITIONAL,2); + response_len = arpos; + if (response_len > 512) { + byte_zero(response + RESPONSE_AUTHORITY,2); + response_len = aupos; + } + } + + return 1; +} + +int respond(char *q,char qtype[2],char ip[16]) +{ + int fd; + int r; + char key[6]; + + tai_now(&now); + fd = open_read("data.cdb"); + if (fd == -1) return 0; + cdb_init(&c,fd); + + byte_zero(clientloc,2); + key[0] = 0; + key[1] = '%'; + if (byte_equal(ip,12,V4mappedprefix)) { + byte_copy(key + 2,4,ip+12); + r = cdb_find(&c,key,6); + if (!r) r = cdb_find(&c,key,5); + if (!r) r = cdb_find(&c,key,4); + if (!r) r = cdb_find(&c,key,3); + if (!r) r = cdb_find(&c,key,2); + if (r == -1) return 0; + if (r && (cdb_datalen(&c) == 2)) + if (cdb_read(&c,clientloc,2,cdb_datapos(&c)) == -1) return 0; + } + + r = doit(q,qtype); + + cdb_free(&c); + close(fd); + return r; +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/tdlookup.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/tdlookup.o new file mode 100644 index 0000000000000000000000000000000000000000..49eb642219d28cb719d2fbf7b31ad4af117aa745 GIT binary patch literal 13528 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 Cr*H`X literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/timeoutread.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/timeoutread.c new file mode 100644 index 0000000..85a36e9 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/timeoutread.c @@ -0,0 +1,28 @@ +#include +#include "error.h" +#include "iopause.h" +#include "timeoutread.h" + +int timeoutread(int t,int fd,char *buf,int len) +{ + struct taia now; + struct taia deadline; + iopause_fd x; + + taia_now(&now); + taia_uint(&deadline,t); + taia_add(&deadline,&now,&deadline); + + x.fd = fd; + x.events = IOPAUSE_READ; + for (;;) { + taia_now(&now); + iopause(&x,1,&deadline,&now); + if (x.revents) break; + if (taia_less(&deadline,&now)) { + errno = error_timeout; + return -1; + } + } + return read(fd,buf,len); +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/timeoutread.h b/NONE-CKUBU/src/djbdns/djbdns-1.05/timeoutread.h new file mode 100644 index 0000000..20d3bfc --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/timeoutread.h @@ -0,0 +1,6 @@ +#ifndef TIMEOUTREAD_H +#define TIMEOUTREAD_H + +extern int timeoutread(); + +#endif diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/timeoutread.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/timeoutread.o new file mode 100644 index 0000000000000000000000000000000000000000..e16d6e7a96fed11282934f52b72e5d2970789616 GIT binary patch literal 1992 zcmbuA&1(}u6u{p${nWaRqEJw1kRTQ8VzqwYL9;e#w@^g1tyNo>X|grJBrBT@twrz< z6b7yK=$|2;Jc*#wCL1Iw z8XSk;mZSh{3d{sJ1KrRC=D9Kc%A7L!syS)$uja($S^mvxe4MtH%juNGKfkA7{@UX2 ztmT<>CNM4j*5aQK1y+`q)0z1f*>qNe6`5i24;b~Bs#^R_5I5hro*sevAtm+Z6Mr@E z-QE$DNm`9((~mY#F3y@W=B#(izYelUky? zqjLqT4{L#u~dK7 znJcksYREWf92gih2KR<4fKj_v@!1@Xz88)~sd-MB8NRdVgHd2U17ogM10$eL(Vq8M z#Q`JlRw_;vL#nRt7^9~q2WmdcUkPjf$8QRAX$9?(IWocy_CWC^6`jZ8DBh~2?cCQ%s2%ZqO96H6eN?VT6TKmvJbN*}oVa%mcE%>M+>z`I3>au@{2T_Uk zM7{?dVT4>Kt-lQ)nJ;+;S=>^m1?)q=D$&?6bVeD)FT}x^*saK-d#C1~Cqt3wv}8y3 zj>6Z(rrZ|^n~~AlqwDWN7FWM0&QAsXszmFnK2@ix6jR8zxR~ z^lwT0TIHX<1c*bS;2zYsDgDU%M)xXu*C;LBgd0uxktX~^6HezTuI_~Mn#zy@X%20I@;=O72xwuQ?$oJNO~AZO8Mfu3dKX%rCiBK-2YX zF+I@y*aGaP9~3%^bf&)3p8^WqPZHvE2PLQVlMtt~Dft9Jl;}K{LmcpK)MfmV!nY{A bp>SQ{T;cTY +#include "error.h" +#include "iopause.h" +#include "timeoutwrite.h" + +int timeoutwrite(int t,int fd,char *buf,int len) +{ + struct taia now; + struct taia deadline; + iopause_fd x; + + taia_now(&now); + taia_uint(&deadline,t); + taia_add(&deadline,&now,&deadline); + + x.fd = fd; + x.events = IOPAUSE_WRITE; + for (;;) { + taia_now(&now); + iopause(&x,1,&deadline,&now); + if (x.revents) break; + if (taia_less(&deadline,&now)) { + errno = error_timeout; + return -1; + } + } + return write(fd,buf,len); +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/timeoutwrite.h b/NONE-CKUBU/src/djbdns/djbdns-1.05/timeoutwrite.h new file mode 100644 index 0000000..4725861 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/timeoutwrite.h @@ -0,0 +1,6 @@ +#ifndef TIMEOUTWRITE_H +#define TIMEOUTWRITE_H + +extern int timeoutwrite(); + +#endif diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/timeoutwrite.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/timeoutwrite.o new file mode 100644 index 0000000000000000000000000000000000000000..e6425b4953ed77bacc016a1c37ae2efa65e038bc GIT binary patch literal 1992 zcmbuA&1(};5WpuNZBwn=C<+CY1_@HZF0EEk51O?}yTu}+tyXMZw#nA6CfTyt&{_l! zLE)j*9{n@KlP3{Wyp^7`Cj~Dmh~mMMVx8H2PhZ!~MF%!-<~K8M=DmGybF(ly6pzI~ zNDPj{A4^bxRSD*NoP!Q%2kpWLd##<<*oro;v2WVg_&N4nZ+x22m&)0U&c1x0VD?65 z@Aak0Y|b}z_D*M?5&2f0m9x2-m-%cy3CkiwXCE=@302kETR(25aU(kf^+QtXt*73K z@4K_ZFO$|A&nF(Qqg6km<9pLyO7g-H>ZyPfh;VvA=Xwvdh` zI@(gpSbYH5F5d(2g2t0d`hL8iblpo7l+04Hp!8@;pQapXwB2sK+cKn363Ou3;IT|k z-kP?}YGyz^s2=F;SNrz`Du7zMUh&Ln96dJ}XNBfkWmEO61rOAc>6xHT*J_~p)S5MB zT(e?Hb<+A<@Dcff=a5A$b%Mig^ve>C9YJT9QT%)qjELQeEWCGe{zWn*2~SIQ zc<(5Dm2b)ep0F7itv$T{c4SfYXZiV=L%%HH`m#^fDJ}_L*JUR3MC6W9A5onUk9xzz z>5cv^iQlW-=t}@U6cVQUv`y+q+_&Ax!*`9+=)Oepz9#%=6RtJkr<(A|Cj4p>4xU}H zoVqvf+W5UHZZN?!ZPTba^MO*g@w?_Dvs41xnKSD(D*$B+KZS;2xo*`l%1+VrY^Mrn zI_uO7U@j=pg#o^x}PM(=?)5hf*=ZUI-7!z5kv{kb0xq&??7F|FG_ri c#2XSDe*@Vr}r!7&u~t?Q%^#E0o7pw!~g&Q literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/tinydns b/NONE-CKUBU/src/djbdns/djbdns-1.05/tinydns new file mode 100755 index 0000000000000000000000000000000000000000..fa53916f039ff6a95e3d2a508255db8663882631 GIT binary patch literal 34656 zcmeIbeSA|@)<1gECbVE_f&vyrJZR8Xp*9NI3TOf;J%ylEKoL+{`T~{GcG{DI4x_=e z$e9rAoyVEsnQ><7Jl+|{@#ipa6{423KmlKCMMUtWBEks)tcZw!=6=^Y=cH*xKhNiW z?)`6$rt7S=*Is+=wbx$zHQ~{G&x|CKNid!y;WmLVaj26?+FwB^_A#o{a)ngEDU22_ z7Y2c1!NfOx5|40nPNDq!W^y+KUcHYZ%JV9z#QdR9@fX)L%9DRK128 z5H(=}@S(@50hTA?opd1n9DKrpQxE}-y8P+G|5?66u{7`4@{|+g z3qEC_l5LDN{+90D2M!%p1t@a(hdH_1L%hS zpAMiKb~`_S?gLKGhxjDQX9otYW&qug|Mmd74>&z8d=ll5ed)OYpG3OxKG;OI8zmI4 zEG9OL589LZ1N0Qohh2bQSiE@Yikj-h^>Rs_ym+yI@Kj3C=w_k5T=rI$38l;GYHDPm zzNU0}xh%+)E6Rn%<*O=XVQINsi}V#MN^1F?kj0D3>*}g&7FX4jmdKSg)xwg>Y7$Xa zStrz$mz0svrFAvl+Ipe3rm9M)sxL2JPDB!4Q!5KAN~(|-yrm5lbu}x572ax+Usg_U)ca=B1ZSB@$zF0XE=tb@h{p2BI<7vGqDWA-GnXc9**`uqR>Kayj@e-sPp zLyz~eN`%xTVHnzlo@L%*h7|ksA%}6JeJ#L@I7kWWbbgAvx(Ff*%?WfP<`R8l0^Ljm z{b@;{QyIqdYyzEhGM-HdbR*_d+U5kh;fq8MC(w;Cgy_2x=rk@FPgeq+#u4M$mq4fS z$9Q@Y=rqO|kD5TIG0Av(6X?d+LuqFc=tdiHo`zxuR97Qr5g|2!ZuCi_+Y;zB4jWHK z0^JxJDNRhEk1&`4GZW||6X-b!bQF{<>qo+jUq?7~smLbAuOghfK%|B7%Lpge zk2EuWG2!I$5g+422&d+c)H0q#IJtPFnDMifz{#~EMU0;$oLoBMWc(=M7ZIMr_(8(S zg(D*4`w1u4jo29PCY)S0A~60c;pD23-tRyd*FiYBXrzbn5aHySkuJvnK{&Z&B+U48 zgp(^qHZlH3!pQ|AEsXz$@DYSJGyV(0$>kzG#(z#Yxmu)_@y7@!7mE}#{xIR>T9G2g z>j)>8iZ~g6kZ^LPNDkvm2qzbch>R~FoLnbj1MWCpsJ#7vq#Ts|hkA?V7VZo??{f;$ z&h{b(JB!nuf?5E^Q_aofGg81ZY?&xXO<_4H*2ONl+Wf6qi?E;f&}lZ&713s z1t~D%AW&(-CPLcJBul~hF)43<{W$BDKIkGy!D%K*vAhDN*zg_96&Ue1%96Lg?qH|o zw|F&CaSL~EtEi~Rwq8jyG(ngr`KP{DE<%9vnS9x1B9U&ktzi^YsBGKqihW9cynCCb zAB69NsRWqc(q;k|L-?2O25q9hj-MhdkY^4c>w9{=*Wsy70c7o~~6G8QF z&)8;^@49zuIoMtIxaPU$&YL5xIYv6D?_S4x6e>HcjUhO@Bjz~Z^8F0+@5aMOcO1xf z9CCy`!PWNKX#SM(at?I(WT~NpNBJTo|F9Agl<;peDf?W$)sSs%^g-n8pllI5%6A^+ zYjx!eL1+pqJG>u*YvWX;Mn7{aJyLK=6Es0vj^07g5mvv=*6pwp6-N+ogeB!;^@u_3v^G*`h}-7B z5m#XI@tpgB<9OsZcng4#?6zk*y1BmNtc`ZCNg!t^Z?_4niiOZ5V#`$*-v+~kP1eS@ zfJ=e7_6%qpxK;giE}ogpoqdC-dO|HoG%CplvMT=28TZ`;ngOAJwtsdPcK_Bk!nrZ zuohb76nr-BaLxVNx+QlBJWqGHMK_|Oo<;vdo^WEG7k)TTCgu4Sd0?WHgIx1_|B~h5j8TcV4vNUphrTVZBnA9+>hsPjJ0`J!KcMs97AC!k#Gi<7pXimuH^V1L(^{rJ1(9{lkr9a~8O^{)uckwP?b zVA3<_d0R3cE*6l+rQCp#8Kt}wn4}V6#N4#T6N{c4tP+ZF25~NsLEmwmX_EO4V zuPxo+^7r)mcbV5&h9E%-3|&`2-qgr)q~McwALMC9tbp=srk+16@bAaU znF?9d^xW9)fY$zj5qrVe)^baUppMUl`Ct7u79+=t-As11Ug-wS0UG+y>Lm&N?neUs zA-Hg)>>THj67wuWJ$_(t*hG0QKFfKAC+7K)a#mBG!<475Sw2A#TC+SbS!+a^3BaJ; zSFu5JOUa;n!NmqOt+Q-FLgYEEkKPFPRNsXcqBmZHccoMPHQEJO1~9`vLhP&?Qb@k{ zCbZJ0P#A4;3I-n7Cax{7Ql&Y^>zJuT9z>T%mQBdw+VUpSBH1XL$5Yq5Lgii8+(PBN zq`Wsz`ASmWoFgf(VVKQSX+h=ahI8N8bX*?k2-CP+;o9lmJ_za|IOgqG*{htOhMRF3 z2JvstTzJ20k?Vd8wook@lN1j{jU$p`wo8HOsT5@~A(@Uyi*Tzx4e>}-cf)H=T5UtW zK(mMDPO}OX*6j9`>rYzmYd>k7Z#f9^N$dEo$V&8#W(?Yr^6ge(p;Mq~i>O|HHKa6Q znA&D-d=$Nb#;dPSVf>?U1>=XX^;+<%r@qojUlQpyB7H*T>p8v1Nr5s0**(f(H6INb zSdHNzEkhroINuV=_m_lxD=43GmdpkP~^IJQ(dA zSNhH$%~MW!K17~4zhxjl?A|v_P9pxh68We7D8GgH7bfyo{3t)o=OU%xmy|{JUP-C4 zpMkgJ`eVbDa}AecRufoc&y)ff6k+Y$ZGH38z=$yiMIkV0IR3hnGm`Sj)|Q8h1$ECT z>UoMq0A1dyd_<1hf>lTK-3rT%-r`T=y0#Ux#R@qbX`3T%E!sPgODV4NQ6pnbjk3N*XKv05*(GAO(xe zc_*#@KY`#0%Jy{f<C8jbq0-l*!w5Y+g4 zX5EK(rNhP5!(>To{r}P!JJ9~jS`SuC+U>VbxlNm71}3#2!LORMGCayRoN*mk)O++& z9^q$W;0aRlo_PUyOHIo zpi3~V*!Dc?rABheN|$o(q4?|COlzumPk5EvSFxP_h-&;ilAz1lg%|=gHq0M2T^d`F z2Ct#6GVU_Sw7iBaq-22P1uV-RfNFUd3apROiZwJJ6=E;@TK#MkanOXnse9F`lalqi z4vY$x-`|d%G-`o|lN!>A@JkRXHrvwcsujx$NN1aqf57jg1lNKyHX<8@g1#A1F_w@B zRX)7mP{sc;CLSy%`jVt{`45_;w^eCy7wHhjcodG*BR8<|;b@?unfhyND`_5IQY!CY zRhfY{k`(x?dKR5^>px*1wHHCmet&?Tx@J5}b{uycP@fx(C{<|G zpFMghxI#~mbh71E@@B04o@R-mUl??k)qTuJYvMFeK5!rke6G&Ji~^nf?@b4+O*HCa zb(xRlXGOEMaR^Y!+7_N2tg@IQGK|IT5uB4I1)t(dw2>o9!Jj6nFF2qGW)sv|HCs%% zlB(sMON;P6>NOhmwh-qucx@UrGnAajdv**jkt$eThnS<*=8P~oMUS(-*vJUh-a_6s>O|JZV-TL-7?W*lrjFS!^6JL=_{A{WOUQ*avk{oyRh1WwF&ypZJ66kbSt018))MN)0ktJ1WgRcnCzg^ zx#~vE42|1h295{!BIF@Cv*~oR_gN0RMmVC-psr)N@)*i(L$SX!T2HO!6l>Fd6oUjZ za$iVMi!^;k1T3BVMB#eNcKr39FT!&f&Mr;7uM*7gC z>872ghC>Mbc+$BcJC&0v4hQk#mP(^iU`>UJ!lV4G%Z z)4LE_(Hyx6Yisgz%OL3D!gi8L`5cZoTD=UjR;uQFSKjtVDqa5bsGw7LbTQoA?vyr4 z!9{jwVd;6Py~o@Ji(ohTh*>giLp6d^Zk3e%>R&J{21fjOFRIAt%Ex_G3?j|7<~-Gq zOl;k7Eov9J9Dj7lBo@-5ZG>wEjJytwwXXF7?Vkjuem+kW9H-S5EQ`nnCbTsB{bH=+ zVX6UcOY0x7HGPgKiFpw8f{5oKLJJ}b5Z6h{Rme;mYJ$4)%S1mKLUfvLt6}u7s1F4U z=%=}Q0awA=>T8@C<7PLCt7ukVGVl)ITZfaJ+ z45H&ebYy(K19z1CJIs?|yr1R!&!s$i0uf2%novIqq5@Qzc@Szin7RudKtv~LKs`b| z4T?5SMPJBoIz;1B;}F_xfgd;>2Y_>tZg>KhXLIL$Y7MHe1Qi)Yk)wIMq#`fVi#&)Z zq&GO`6MB(vfT$Je2ZiLm5SY4tkBEuvWB8l(owQ~r`@UVv&@>Zm8TmDG>FWxu-CHk# z8F-@dJloFNI0ALyHeU{2G|7O7@qcGgmA$V8MqGld^? zsY+8`bsw4{+H8c(=V%c$0_)E;=L9IJToHLk6s&7sBMSq^bPEiaZkomYk-s3}Bwc%ImU;Z>{EUQLz84M^i!{StY81eqh`CtVk&Uf7gQ_w-`&9Af0GS-8gR}3Huom__jN?4db_rg3#t_R-2tc?`8!hh zO-qS94P1X+gIC^f+G*L}jgukd!AcPR;v4$Bb*zx=8~O}@d0Vq@=u>z}LSiF$5Ev}~ z0Kac&6Hyh*?|}3>Pm+|gnpJ6j;s{3;T?vzin;OJF(`x@pbA7TYgJMry@Q=~PWJ!gv%KR6u8?*%6QpPun0 znD8E{SaU*fl6pQkAsdHQU|%9A(qdej?Z)lvTJxhad+s%Kbbmi;HPMi$DhV4gE+|X*xPS)uCanx-8V}{K}9Ph$R ztQ}@ih6hPK#S#EL`inL)GHoX;LP3!-mP&d+|AhUTOiB4tc~{-V%6NyPBn$#L{;RT! zs7fX(Vbt$q^%70v1DZE9!qScHr6#j7 z&2o_K1wQ7_UyDYzatB(rWge?i-)0?;(hy_MJ?iR_W9T z{|;Ejqa4MOjlZmI^cn3KHvX5k$cz>Xt7d4LseEf~#o)fkeksPyV>1!_T78G1H+L*7 z^su9GscOf_CMha7UIhoJ{vInc=*-L%y97-Ao1E6$?_sH}oYs2M>$Dv_2dg<0?7@7* z=21NM)V}qVwRQCsSoCi*sduA&B>y>^_m~Hx*0m_P2qklwoo@TJx6%&S1{CN~dabSJ z)vLjdKJlG;8RZL1z1m;~AM>jvUKQaGULG~6C-5d=CXHS0sV56XK^;of#HpOk z+M26&aVjILOlk*XQ(prcE1}C3)xnUPZ*84u&u=_!ZJdCf0zaRP{TY*6`D(UuKJpA& z+lY_B>0MI>Ti5;@B;UCS+J21h++xJ@KY|1`mJg7>Nc{_j5oI6M-$)9pgHXCZoCB+0 zt13o%PG5R5rGJ{@?@2MZO2GvgY2XP?&oOGi0wg3A`nQ|>$4yS(w=sD#j5FFEoW3HX>LyG-DXt`J2w+r?6n@B?=vse=pQWOM zVK>r@6}MR%0U`9zLevDwY5VEnoZVL zn-r8l_MT97Wu568A4q;*o=cE_AiuSBq)XW)1@ADqvd;XdTt|0SuPZMsU!-UkKX@NT zIqAmI_+7*dI@+;5*+GgbT}J%TMkmA^+I@}MP<}FQ6=Z2WIvLAW9O!(k-h-Ayz&J>o zC+@5sKH|{qv+#aL7-)RFL-#Z`a#N$ju%5V}yg|A=(nX7k_mc=Ww+HOKkj|8RaA?6b zk7|y6ao!SFzSQhB@<;68QeKBjSs%C&*T$qnqOt=Gh!d?W9BAWB+3&`Ij~#nSg@K>p zKqw}spb57R1+J{nq8_QGkDI(H9k`v?5b4$5flb4arlw+6wsL8#~Y|i`0 zy7mcT^S9GI4@5H8ns1JvL>9JkB?wL3$WLOtFS~qawp!Od3jVy08Wy7Sgxx_O^)pv{ zPik~bMe~%cE~Nv?G&}%?Tl=T;J&~s4q@>k-6lv3f!v*Z_U&3W~>E%*#!)Eor_S5R9 zDIddw&2b!?X;fcDB{QL|FsnIx`^x=#l~%s3?8~*Fy;1@<7uB!z6|;WhufguXzbEF8zxkAlJq%Vy%PeKXdkJENS6gHAM}yl#;dil2hD?aadd0- z3q019T_W7{n253z_wZekzXOB!*&OfToNkH}fyV?&d5mQwAe?7!3W8fn`4c2JP*Ru+kaa(EQt# zpJJ@szUD;1+Fd1%uJ%_iH}yKYaF=Ko_89TEeb*?rtI$tmI^|EpuI^U_hH&KaG)+RGLgkv}6`|h-Tjy0Oq z+tDK5h~8ssz7ucxyi-n7dLy(M!*Ow^<&JMezSXX^XXNjg)cGwch^EM;%;iHAz^(^9c@Yz392?BRA`v~5F8$DYQ40Puhg>0^ z@4qM?O{YFnGxo+}isdmBt-ivqKgBD0S}wvi#Y;y_o%A01dx&;L@Hiz?m!u?fz?1@m zr0bI;B}KpQhq2GvT40je52k|4+Invic6jvHaqXbx_}HivB7ogLKJSpOgYg zQt}{_Ck3XZO35>@$6bKg+B6&9ZPL`(?%zxX#nxbz`~|5dX@c;oMvwwv#^Dj}L0~AM_;|siC5?AfKiP)rOL31!A`QALi~~xTq5yrw`oHy+k@vTv? zu7~T8+h7`YJv=9`om{3KE>i=Su_U@oVP3c%{&GVfd4Rv*cywn$D%W^tfnM`ljKZM< z%3oKY)uTYGM}bz40(1drUZB;ZK&uCJ91xApMES9l#Cmd(y$6AS)|0&+{W3%*<}hB7 z7K@8$y;6mx6IP2Eo`lskji0mNj!FlPNIRyAux&2Qd|t&N#7m^KOL;eXr50BLmZzCv zN`@3fD}n2oLgfQo%fXaUT?-)?@AgB?Pr)@aFkGDGn{wS$?^`p2?(0mERfv9?!F40R zeHzIqXmVDaE5YkwP5(mW6dF8J3f!W+D>a>#=LQPW@^;lb)bnrCaDQS74fojffqVT> z^|ZK&&7iKj-O8&tfWg*EaQH}Qn=t~D<8X9G;L%j&O?4*bj2Lg_8!%;@)$CG^bA1Cp zP4y^8>8enuizolyk*bf%7A9MAQM&vQmmc-e_F)C|$lAgAy?BTI{`U{_C2>-vRv_AC~XwvDJ zDJ`!H!}@4z6R#(_sZ48Q0PODIs#N7&4_4B)C~k4W5BYuqH4>IDC)CqeB15~TF)*Gx z>$tq2uyjYh>GMKUr~g~g^@^yMD7vlFj=Pm_P*=BdRNX{FWZ2~WC&gd?_W9gG35z|7 zYv>P1Ng%RKrC@!g!x+n#IW>#+}>2pM!BO3J4H2!94g-VWYW%_XR@2~5{ z_JhfA2q}5aXtYD*7^LazBfbAb{>3D^B!_6Ltyipp`ZV?Yn<&p%u<$r!?A{=Rt~vHB zSx)&@-2t_B=5st!?nj_Ih$CLq3FlGBk6kV+?Q-O39W1Z&kx^3MDf>ps8+hK{LU7G? z61A-v_rZ9z?ZCB%eZ1aLN4*6Vuw0g~=-Ej@K1WjK2}*uibW3xya@L6zfBQj;>8zs* z_oJFlZ?T{|%9+6#u#=o(((8$N0-~>fr>VWi5=_IAx!du!l=rpwh_WjodLsUtmnU^-Qga=043UGsSG2fY&6sv{p|wwI7ItU7q-VYkQ=uLxf0*kJ;gJ7n)O64 zLc3#YfSo6hpBlJ7Eo+-A@56?hl$}!Y&){lkM(pXkFp!z3Gk>mjQusL&^X}%^j&^BR z8xOTC$bc}5{f(i><2J3}S&`wB1I}MAT%X}TT%SBxLZ4lsf80A;*-4$`&G=2^zM6TI zH0)#J{8-IL@S!~$#GR@CJrR8ot^0S_Wp>jcrZs^^gYoZ}rt$rRX(v>LX{VX*ex{vP zy-bTSt&nNosU@IEejLWgi=@Cr6g>3?q^L7Nj?RqxW1t?Bo71@58<=XN-S0C7wU~0BGIgGT^;`nMT!m}W#uY&{M z#F>P5kgo%oz8!&Yc3qBFP(*`5>lT_%BEQnDj@V7M0;wq$5*9hJzwnM(5GGHZiaLY_ zGogbCIYglQ^w!3|GvR6?jAf1%CX6J)Bqlt;guz6(oe7UH;rxvt+|7g)O!%A#6--#f zgo8w=Wx^~byibI+Ot_T^+ljD|30X{di3opZLIx9FAi^t5NMXX$M0kq{r?CW?JoQN; ze8_~)nD96ezGT84COk}pr2DD1bh&2o)D=V+#)N->;EyGT?2J9bSW0LjW4~f7H8hK{ zb&L%T-Ot#=j137jFjmFb)uG%aRLBF2rH2$wD`LzV`Xyu27_)_*Wo#m27l;1E*foq@ z5}MCaG8h{k>g2Q`jExNKW$ZlG{{Gmdp(Bi)U@Rl#<9t1gjS5*FAYHl{yF6rNY&&D4 zL!%jMW$cPjHe=5+HYVg|>^F>E8Ct;Ddd9|vDj9o(v8zI>8LMTiF4WA}62|6-USMo4 zWA}w#Vr&Lu3qt!C%Vlg~D8krvj4cY87L(TWdno?c{hJEo$I3!G8GD|w^3Wc}=)SN&RuNJe zYi4X|=rm)GF}5r;xR~^m8LJFk##jYo4~DWCo6p$tkdv{Qj8%p1U~CFwD?*DI%VsPy zRL_{mm_4+XF}nQckJX0$n=vzEKMDO0W2X@w{IP38|6)vK?B38W#`ZJzaOge8US~`W zMHy>jY+9&g3Dsc}W8*@m62kt-*fpWyj6KQNlu$NfYZ<#OG!2-%+8?_;R77ue{@8V) zW%RbpADbES)7u07*!7_&>20n*<_!Ir-e&q^(?f0a=Jdzhq1Wi`W`8U{bb#K*`(rag z5qi7Ik4>p>=`ABGbRXJ zXH?{<1vKR_X0jn#FR1%bC=J@$IXzA6Fftimw7`CZG5<7*&^w z^l9r+-3lSvTzfL4+=VDl*bcdlN*}J5eHl30vhYXw7^Tw%EJ3{n8F6IF*C)2A8-WFo zb)-DZf2Ks6H+g$BXq1;k+3qyT+i7VzhK*U!ylbPa)DBn;M%BgP__{6HqB%|Ex1c5X z5811W=Ii^Ecc{I3XcDYa+sQPKT+QEWS;pUv&>FC9G)j?_H|Q`NTNGcR?8BIN0N(!AQ<1!dEOD?sDM2%iVOZfR79E%pic+2SfE_CJ=+O@=~-E3E%hYMrv zn})K?hDU8A8l9qZLHpr`(WecQuszriWCNIj4N*wnO(9#5q0oKiyOfx2h$EOU;|p#1 z%68R<3Ir^daqZ-Lphl0O25pA?5v9_O2gN0%^->x+G^MT8(wcq`Jm31__ANrG6IU*= z|8v@nD{Z%+wWBk*e{zR$SzkOwJ!XiYp2z(;qG8&-pT(ia&^H*6*|mk5q)_Q`?AGNx zu~qYH>}#RJkQHG{7?rFDd#=X!c(FO5_2b~IG}5F`iGRSoqV4LrHd=rl&!PpWwh;M0 zhV2NFh2TSFv_>)wllMK}x# z<8uc0DEwz_GTr7j!x;Ma6!3jvR1O^vr{3N)*kKQO*Wl5yJe`SVBASUf8Jf!3OtcWuLd0uG(NRns zL_}7e5{5z*@3WXD(47jpAcRw_Fzq7o_zwHc0YhhsAkRWsodqUAo~E4aEJzakN0a4S zq+mgEG^=mF#(y@c(+Qq2{uCmr_xLMJ5B@kH9z*_WIJ!grKLo1(OaM`IPAp*r)`}wYNaJOOw_b32tU zv@bm2To5@6=vqyUGk352ARiP43z9&1fC%@2fZr@BNX88teD}#IL<_X>+1iQ-7ObV5 zb93LuJ%ZanNdkqk-kAF~`DPJv)*`2T74R`+W?a_+YR-MzyEW?!`!j6ggHD3dO9W^9 zyep1V)O6DhX#WS_SG--27x?g{DJgibNxs+jXcE08$+LZrCgZIj*^A9H3@4htzEzZ5 zlq6^SR#9?MvPReR^5qKh6~0v@tH|ViN9oEs^CdJxx%5iyhrj(4aNw${c_gm%%*Zug z>YWJB9f>Qea&E5sQj>Qaq4=(foCP$=JJQoavgnDsVQdpZB&O)N$n3vuhwp1IdQH zAuqXKiixrKks0KpH{YAY1(2KQFItHxkhfF%^iM25F<&z08*q3GOTw9>(^21`t4rG0 z6kgSU?;lKCXGRFP*W^;#gVWI4U!5{|HnjFF+ zb1-4n@XaEemfB0t@48nC&Pc;|j$QXiN+;c^#0;93Ad>bi{l8+A#_eQBI3E{un%>~t z@Gn=VIR%|xp9*}D?>Ox^9?iu34hxjrd=rj4x?Jn#;@p$ZRn0fxO9)Al|66>U=P`)D zykoR)@~t=^^j_@pcba@ZHQnk7mLi1H8j%i*a_MT&TNvP)!YEzN#W!b0rzzpW;Ape= zw{AtH7vJP;?-Mjpv=MWXrs(vbdy)WM-MHn8deZO(_Jji+%?|m>SJ6)?9b=p=B$i?Z zgK<+(pZX>i+hPNXyTU}3tnOX7GZWv>M(-KsT4%l#odL6;vuWNF(WhuaE#?O+5LlKc zISyby4!_ZItF`ed2*hSzWubChuhQrGtUS%Geo2X_Tc-yT=u}T2&941i0iP_HFY%vA zd!*j2^cLb^J|`)ER@;Fnmg)@Dt+vp&-5 ziCAtP92|}_=yp@yYoz(gWBJNwkwcirfc=ywxB^$3wwodg;3BYxQ6y@R?S0$>^^^pq zY5v<3j%(~4#XriDwU18mB6Nu7@*gurym;|%GrLUNBM;)WU;HUlzHxNpBAT(EiovLB zigo1;?FSKL!!(-UQkS*WitdB4wSCIqh7U1Hp?3@d=kDm9po{!}m{i(_{8W=9?gn77K$}B3f2%*G0PN>Ta(t)caRYa24^=mtj6U!=-PNe-&p?F+P<@T=RctfDBIwM`ePC>C#tM|sI0pFRH<12Rh|)ah|(K)PC#}1@)!U4|(=a6DNp*cs)La_)N#=1`+2kf)Epg^M>|1bUxwK z-X=QlzVptxf}Q?eK)q7>p-|FO$WAC)`vp=a7Zkb$JN{fCFa5G;Wf^pyM?Cm*VIKUX zDR}xGEME~jj8=|U`42CHY6mMuvj3Qk7E=be-Z4{{4@d^&<(FLvB` z)5J+P-;$eGvZS=Eyh0Fux%V3NqU>R}Ro964iPV}pp|V=Wi?>!TFB9t@s+Y@Gh^6@P zQ=y^~O;uJ?UeEgDmsacXtE=U!WO0eN{vqV5^~yJ(wE=WNoS~$OeqQw9Cvc_9gCN9A*u`U;u)YU96 zN7l;PasjedRMywyhh4?8^6JX+GNGijl-x+i%E}umOUqgD(wgdu%B7H8CZJTgrnIKY zsCd0tBBGtkOJ(v^FjnK0WY(2ecQL)Vrd*S{AEd4ERBfSXEQK zR489nUMg19)U7D#XNt1&`qH|}S_o%F`1fETv2ZFS-uNRh-lo`DM1x-&T z9R$59Z1mE)n)><)It4%5yka+Kyjh2qps{c1vOX+iL64XbJ z%daR|Q3(_EPc`)Z(L}=%?2JZ^{_0kj%PVW@mZPJttQHK!Ta8Xwx{T{%(9qowffJm( zWQkU@1d_(1H_H-lMMZg?-u{LrIy3hTS?t5KmJ#chp_y5gxD%i+mDiP5qyNAcS1hTi zsw`#4K-a0M)!dGLQMs?Zmertdu?&7otV`U_*_a3&aNKx7Fj8H;z&`sEZ;f1n5L8-T zUPf()!Kz%mW5yiKO_!Bam!YB26)CPD2*ley-dU=uxP-nGHo90Z!>%igo=LH-4yDwx z-|1G3rdBMG zDFTy&d#jgM!-w=tR6NFD!{^{j=(lAw!1TGh7Mx2Q7q5wGF{hu$G5^l0&) zgy7KwAjX;tMy9@YtwJrU>N$95N>N-Wk(X&=68_RxPcQUbkZyXEhgpL^ktgxpNC)%f z$&=~dURVKA&vTe;D#jf~~RG zCP3d7d@mSq6V9wejND2fH{C7F275FU4Zn9$31{P!g2Y%1<;1C%H^FJ>;ZHFiU&|Hz#_m}z!t!DfWim(&M06GU>DH=djWd@Z5Kh$51|KO zFJKX%?<3R)Fbuen=pQ2=U``M60oDShVmjvo6ai~LLpuYu02Tpm0;FGJ?gI1y<{U;n zhz=MAv>kyxC>@ag0gWEO48UF$^#IH{iu{0L6#4@;13n8F1`Gq%9)q6&_5up&kb4~Y z0c|Hx55QVL39tpQ7_bL$72u}N(LR7V_+I+6fX#qmz!t!Lln&Sn7zRwmT(t{O1ndRO z1+;yE`T;rt>6fEx0eys@gq;94;kPfk0Bv7EKZ2*xKG-l90iCpQj)%_$0Zk9zEtpo> zOvz~}sdRo%bWD;3Te_3~JrTU}L-dLGh@j^Z#hoq^AeslCV$d&wj|$V$Z3XEW)6&Ih z>6xzd99Md7L3*#rpR#t)dP~r}A^8bR$MM+lX~d^?gj4t%5s)vKl%JllKDi)WTx*_@ zp6Ry~q!$t2^Z1A(ok9*}1)nQDV{P*Kq{4L3o$mCbqvIj{_TW>L;S_i#e@D7=ZIVBk z=*RF0gYE=`-fV%1c%?f6!YHSPvSLgv*@53%Wkj z66)Jm&FSg6{*;1rpSFOY^5_o4rqNE}diXBY!zeFqsXi;sOz$G$TD|DbMbEXcFH^KX zRIlxz_kxZljz2{IfQrm?(#d`NA^IuMZJ^V;@z8r3ipseFoqnUD2=vLsd`G&Ce$s;Y zrvNsCUO;r0MyGb7J1jk*kD~HXKiFk`axe*=;!4k?rn0OxQ~uT96RvX#&jLVhj?qp} zg1!m#LZa(($rqm|{_CB>(?p-SHra2!GhL*MHh4(h>y!`awM3Ys$(xARL!gV}ok9(< zvc2J78`Co(9`rEiF1?+&eB>`kZ%Oi->8x0@ zgB@MVcB50chX@JvodSC80Qz{a%muv*^oMkN&q(MOhy#7zjTk^WHG;orl3owAw_eW~ z=|x)k&yYN%UqR*T{y_D58T4MzhY($Vh`tAO;bx~W*B}BC{TS%Q7oeLlwueE#i}(}j zHyU*D7N<~6bp0VY6G3kVo!dpHQ$0MO_kiBl9}t=n(y;?7p4D?KNew4NH25-zH?e{K8Q#&q%zn#k$^|dd;@xXka z$^reV0d%_4-~;^*qR-Ug7y0jSboegN=Mf$4w1LK>AjOOI2o;%YEz{F;{Gghnhz}ot-Ua$VzdHqb59p+$Q7*lw4aT2B zr?80Vkc0V!KY4A^3{slX$0NNM=~&wc!h&=sbq?w!gi^W(={-olp9tLEv(R4DT3UJ) z(w#G%LWl^Od};#}q508zDu0$!V1dMghuZNO&~2cnnt;q)JIJ51D82THqz%bIGldL( zi0^gqi5~br@!g{(`%~^pFJ3!HpKWP+oC06*Y$yMlWx~w$=CzjD8p>TboWjck=+A)O13Je|J&pKZ2Hkm=-cJ+gdq_U$*A0+!4D>G0ZyP{2V?t%S z+bOgUppOQ<2lV;@^ogJs&-uPS9?-*}5A?S((7P@`Urq8sXFu1=pn5$CdhZ43&x0<^ z#k^{OKHEVTFF^kQbSLOz2k@T)z4ik1G$`Hz`tAh&iFmhzUONwQj9i)fKjs`9y1 z_l@ZBc`nss5%Tri>l7YHkVk$ZgYKNK&$rp1XOpw^a}>%?kFhSfe89S-2WvU4XK8#S zmvr3+x#tl1RY0CHudb*bT z|Np3ybPy-K^A`voik)ad?;$LB=KiMo>ld}Z3W3uU_83)*y9Q}Xr(AkTVuE9Aoj8KBXJ$s|PLR%0XzgU=H`Yrp=nJ(OI9iIz zaAQ42=fm`f{8yV(C+e@0g?sTrwlwk^>pwbIrss$3XVkw0Jc;>@^(37`(_^eZNq<@g z47A^J&`2-cT!OKl&Y(uYW0a#|T3NZ^pb^K3|mY84E z*H5Cppg-eD$c$GbpFv$YAiuHx&sd;wq#KMnG|D%~Kf?=^Z`eO)fs>PR^!#)#pZE+c zzX^%`@|QZ9J*QO5MRzF@pMmB77ZMZmKU?8s_GihkcupA`9U2;MKOGf*hZo9k6hjwZ z>1mL|1$qy!JC*rtmhBw`3IIa5Z{FStx#{R)B zJ%0-c$7A@Xk>9A-7NjMXzf9kMS?1+z-?NvI-+*lc@*Dd%wMKrud`((k|1t9K9FX6q zuh)GIT8`~TMjeU+@Hc>yETjI$zd!FL$Hr6K-d_QcseOOC@!Fq5OEdCMF%;Fa4CE!; VC|hS?;N#78K{${|#QVVf{|{eHb~yk5 literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/tinydns-conf b/NONE-CKUBU/src/djbdns/djbdns-1.05/tinydns-conf new file mode 100755 index 0000000000000000000000000000000000000000..86c51b2d33e85987937d56badc6b8cd0a368120d GIT binary patch literal 16456 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 QkA>Jm2R!fLm@U-*AN%^ljQ{`u literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/tinydns-conf.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/tinydns-conf.c new file mode 100644 index 0000000..db83f11 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/tinydns-conf.c @@ -0,0 +1,110 @@ +#include +#include +#include "strerr.h" +#include "exit.h" +#include "auto_home.h" +#include "generic-conf.h" + +#define FATAL "tinydns-conf: fatal: " + +void usage(void) +{ + strerr_die1x(100,"tinydns-conf: usage: tinydns-conf acct logacct /tinydns myip"); +} + +char *dir; +char *user; +char *loguser; +struct passwd *pw; +char *myip; + +int main(int argc,char **argv) +{ + user = argv[1]; + if (!user) usage(); + loguser = argv[2]; + if (!loguser) usage(); + dir = argv[3]; + if (!dir) usage(); + if (dir[0] != '/') usage(); + myip = argv[4]; + if (!myip) usage(); + + pw = getpwnam(loguser); + if (!pw) + strerr_die3x(111,FATAL,"unknown account ",loguser); + + init(dir,FATAL); + makelog(loguser,pw->pw_uid,pw->pw_gid); + + makedir("env"); + perm(02755); + start("env/ROOT"); outs(dir); outs("/root\n"); finish(); + perm(0644); + start("env/IP"); outs(myip); outs("\n"); finish(); + perm(0644); + + start("run"); + outs("#!/bin/sh\nexec 2>&1\nexec envuidgid "); outs(user); + outs(" envdir ./env softlimit -d300000 "); + outs(auto_home); outs("/bin/tinydns\n"); + finish(); + perm(0755); + + makedir("root"); + perm(02755); + + start("root/data"); + finish(); + perm(0644); + + start("root/add-ns"); + outs("#!/bin/sh\nexec "); + outs(auto_home); outs("/bin/tinydns-edit data data.new add ns ${1+\"$@\"}\n"); + finish(); + perm(0755); + + start("root/add-childns"); + outs("#!/bin/sh\nexec "); + outs(auto_home); outs("/bin/tinydns-edit data data.new add childns ${1+\"$@\"}\n"); + finish(); + perm(0755); + + start("root/add-host"); + outs("#!/bin/sh\nexec "); + outs(auto_home); outs("/bin/tinydns-edit data data.new add host ${1+\"$@\"}\n"); + finish(); + perm(0755); + + start("root/add-alias"); + outs("#!/bin/sh\nexec "); + outs(auto_home); outs("/bin/tinydns-edit data data.new add alias ${1+\"$@\"}\n"); + finish(); + perm(0755); + + start("root/add-host6"); + outs("#!/bin/sh\nexec "); + outs(auto_home); outs("/bin/tinydns-edit data data.new add host6 ${1+\"$@\"}\n"); + finish(); + perm(0755); + + start("root/add-alias6"); + outs("#!/bin/sh\nexec "); + outs(auto_home); outs("/bin/tinydns-edit data data.new add alias6 ${1+\"$@\"}\n"); + finish(); + perm(0755); + + start("root/add-mx"); + outs("#!/bin/sh\nexec "); + outs(auto_home); outs("/bin/tinydns-edit data data.new add mx ${1+\"$@\"}\n"); + finish(); + perm(0755); + + start("root/Makefile"); + outs("data.cdb: data\n"); + outs("\t"); outs(auto_home); outs("/bin/tinydns-data\n"); + finish(); + perm(0644); + + _exit(0); +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/tinydns-conf.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/tinydns-conf.o new file mode 100644 index 0000000000000000000000000000000000000000..52901d2e067fc631861051aba62886b4c0fd956e GIT binary patch literal 7744 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 literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/tinydns-data b/NONE-CKUBU/src/djbdns/djbdns-1.05/tinydns-data new file mode 100755 index 0000000000000000000000000000000000000000..ee9193314c43912ee59402a9e939978e441e9510 GIT binary patch literal 31280 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 T>n^&2d5r>lGn$BWEdT!ocs$Tu literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/tinydns-data.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/tinydns-data.c new file mode 100644 index 0000000..b42bd62 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/tinydns-data.c @@ -0,0 +1,486 @@ +#include +#include +#include +#include +#include "uint16.h" +#include "uint32.h" +#include "str.h" +#include "byte.h" +#include "fmt.h" +#include "ip4.h" +#include "ip6.h" +#include "exit.h" +#include "case.h" +#include "scan.h" +#include "buffer.h" +#include "strerr.h" +#include "getln.h" +#include "cdb_make.h" +#include "stralloc.h" +#include "open.h" +#include "dns.h" + +#define TTL_NS 259200 +#define TTL_POSITIVE 86400 +#define TTL_NEGATIVE 2560 + +#define FATAL "tinydns-data: fatal: " + +void die_datatmp(void) +{ + strerr_die2sys(111,FATAL,"unable to create data.tmp: "); +} +void nomem(void) +{ + strerr_die1sys(111,FATAL); +} + +void ttdparse(stralloc *sa,char ttd[8]) +{ + unsigned int i; + char ch; + + byte_zero(ttd,8); + for (i = 0;(i < 16) && (i < sa->len);++i) { + ch = sa->s[i]; + if ((ch >= '0') && (ch <= '9')) + ch -= '0'; + else if ((ch >= 'a') && (ch <= 'f')) + ch -= 'a' - 10; + else + ch = 0; + if (!(i & 1)) ch <<= 4; + ttd[i >> 1] |= ch; + } +} + +void locparse(stralloc *sa,char loc[2]) +{ + loc[0] = (sa->len > 0) ? sa->s[0] : 0; + loc[1] = (sa->len > 1) ? sa->s[1] : 0; +} + +void ipprefix_cat(stralloc *out,char *s) +{ + unsigned long u; + char ch; + unsigned int j; + + for (;;) + if (*s == '.') + ++s; + else { + j = scan_ulong(s,&u); + if (!j) return; + s += j; + ch = u; + if (!stralloc_catb(out,&ch,1)) nomem(); + } +} + +void txtparse(stralloc *sa) +{ + char ch; + unsigned int i; + unsigned int j; + + j = 0; + i = 0; + while (i < sa->len) { + ch = sa->s[i++]; + if (ch == '\\') { + if (i >= sa->len) break; + ch = sa->s[i++]; + if ((ch >= '0') && (ch <= '7')) { + ch -= '0'; + if ((i < sa->len) && (sa->s[i] >= '0') && (sa->s[i] <= '7')) { + ch <<= 3; + ch += sa->s[i++] - '0'; + if ((i < sa->len) && (sa->s[i] >= '0') && (sa->s[i] <= '7')) { + ch <<= 3; + ch += sa->s[i++] - '0'; + } + } + } + } + sa->s[j++] = ch; + } + sa->len = j; +} + +char defaultsoa[20]; + +void defaultsoa_init(int fd) +{ + struct stat st; + if (fstat(fd,&st) == -1) + strerr_die2sys(111,FATAL,"unable to stat data: "); + uint32_pack_big(defaultsoa,st.st_mtime); + if (byte_equal(defaultsoa,4,"\0\0\0\0")) + defaultsoa[3] = 1; + byte_copy(defaultsoa + 4,16,"\0\0\100\000\0\0\010\000\0\020\000\000\0\0\012\000"); +} + +int fdcdb; +struct cdb_make cdb; +static stralloc key; +static stralloc result; + +void rr_add(const char *buf,unsigned int len) +{ + if (!stralloc_catb(&result,buf,len)) nomem(); +} +void rr_addname(const char *d) +{ + rr_add(d,dns_domain_length(d)); +} +void rr_start(const char type[2],unsigned long ttl,const char ttd[8],const char loc[2]) +{ + char buf[4]; + if (!stralloc_copyb(&result,type,2)) nomem(); + if (byte_equal(loc,2,"\0\0")) + rr_add("=",1); + else { + rr_add(">",1); + rr_add(loc,2); + } + uint32_pack_big(buf,ttl); + rr_add(buf,4); + rr_add(ttd,8); +} +void rr_finish(const char *owner) +{ + if (byte_equal(owner,2,"\1*")) { + owner += 2; + result.s[2] -= 19; + } + if (!stralloc_copyb(&key,owner,dns_domain_length(owner))) nomem(); + case_lowerb(key.s,key.len); + if (cdb_make_add(&cdb,key.s,key.len,result.s,result.len) == -1) + die_datatmp(); +} + +buffer b; +char bspace[1024]; + +static stralloc line; +int match = 1; +unsigned long linenum = 0; + +#define NUMFIELDS 15 +static stralloc f[NUMFIELDS]; + +static char *d1; +static char *d2; +char dptr[DNS_NAME4_DOMAIN]; +char d6ptr[DNS_NAME6_DOMAIN]; + +char strnum[FMT_ULONG]; + +void syntaxerror(const char *why) +{ + strnum[fmt_ulong(strnum,linenum)] = 0; + strerr_die4x(111,FATAL,"unable to parse data line ",strnum,why); +} + +int main() +{ + int fddata; + int i; + int j; + int k; + char ch; + unsigned long ttl; + char ttd[8]; + char loc[2]; + unsigned long u; + char ip[4]; + char ip6[16]; + char type[2]; + char soa[20]; + char buf[4]; + + umask(022); + + fddata = open_read("data"); + if (fddata == -1) + strerr_die2sys(111,FATAL,"unable to open data: "); + defaultsoa_init(fddata); + + buffer_init(&b,buffer_unixread,fddata,bspace,sizeof bspace); + + fdcdb = open_trunc("data.tmp"); + if (fdcdb == -1) die_datatmp(); + if (cdb_make_start(&cdb,fdcdb) == -1) die_datatmp(); + + while (match) { + ++linenum; + if (getln(&b,&line,&match,'\n') == -1) + strerr_die2sys(111,FATAL,"unable to read line: "); + + while (line.len) { + ch = line.s[line.len - 1]; + if ((ch != ' ') && (ch != '\t') && (ch != '\n')) break; + --line.len; + } + if (!line.len) continue; + if (line.s[0] == '#') continue; + if (line.s[0] == '-') continue; + + j = 1; + for (i = 0;i < NUMFIELDS;++i) { + if (j >= line.len) { + if (!stralloc_copys(&f[i],"")) nomem(); + } + else { + k = byte_chr(line.s + j,line.len - j,':'); + if (!stralloc_copyb(&f[i],line.s + j,k)) nomem(); + j += k + 1; + } + } + + switch(line.s[0]) { + + case '%': + locparse(&f[0],loc); + if (!stralloc_copyb(&key,"\0%",2)) nomem(); + if (!stralloc_0(&f[1])) nomem(); + ipprefix_cat(&key,f[1].s); + if (cdb_make_add(&cdb,key.s,key.len,loc,2) == -1) + die_datatmp(); + break; + + case 'Z': + if (!dns_domain_fromdot(&d1,f[0].s,f[0].len)) nomem(); + + if (!stralloc_0(&f[3])) nomem(); + if (!scan_ulong(f[3].s,&u)) uint32_unpack_big(defaultsoa,&u); + uint32_pack_big(soa,u); + if (!stralloc_0(&f[4])) nomem(); + if (!scan_ulong(f[4].s,&u)) uint32_unpack_big(defaultsoa + 4,&u); + uint32_pack_big(soa + 4,u); + if (!stralloc_0(&f[5])) nomem(); + if (!scan_ulong(f[5].s,&u)) uint32_unpack_big(defaultsoa + 8,&u); + uint32_pack_big(soa + 8,u); + if (!stralloc_0(&f[6])) nomem(); + if (!scan_ulong(f[6].s,&u)) uint32_unpack_big(defaultsoa + 12,&u); + uint32_pack_big(soa + 12,u); + if (!stralloc_0(&f[7])) nomem(); + if (!scan_ulong(f[7].s,&u)) uint32_unpack_big(defaultsoa + 16,&u); + uint32_pack_big(soa + 16,u); + + if (!stralloc_0(&f[8])) nomem(); + if (!scan_ulong(f[8].s,&ttl)) ttl = TTL_NEGATIVE; + ttdparse(&f[9],ttd); + locparse(&f[10],loc); + + rr_start(DNS_T_SOA,ttl,ttd,loc); + if (!dns_domain_fromdot(&d2,f[1].s,f[1].len)) nomem(); + rr_addname(d2); + if (!dns_domain_fromdot(&d2,f[2].s,f[2].len)) nomem(); + rr_addname(d2); + rr_add(soa,20); + rr_finish(d1); + break; + + case '.': case '&': + if (!dns_domain_fromdot(&d1,f[0].s,f[0].len)) nomem(); + if (!stralloc_0(&f[3])) nomem(); + if (!scan_ulong(f[3].s,&ttl)) ttl = TTL_NS; + ttdparse(&f[4],ttd); + locparse(&f[5],loc); + + if (!stralloc_0(&f[1])) nomem(); + + if (byte_chr(f[2].s,f[2].len,'.') >= f[2].len) { + if (!stralloc_cats(&f[2],".ns.")) nomem(); + if (!stralloc_catb(&f[2],f[0].s,f[0].len)) nomem(); + } + if (!dns_domain_fromdot(&d2,f[2].s,f[2].len)) nomem(); + + if (line.s[0] == '.') { + rr_start(DNS_T_SOA,ttl ? TTL_NEGATIVE : 0,ttd,loc); + rr_addname(d2); + rr_add("\12hostmaster",11); + rr_addname(d1); + rr_add(defaultsoa,20); + rr_finish(d1); + } + + rr_start(DNS_T_NS,ttl,ttd,loc); + rr_addname(d2); + rr_finish(d1); + + if (ip4_scan(f[1].s,ip)) { + rr_start(DNS_T_A,ttl,ttd,loc); + rr_add(ip,4); + rr_finish(d2); + } + + break; + + case '+': case '=': + if (!dns_domain_fromdot(&d1,f[0].s,f[0].len)) nomem(); + if (!stralloc_0(&f[2])) nomem(); + if (!scan_ulong(f[2].s,&ttl)) ttl = TTL_POSITIVE; + ttdparse(&f[3],ttd); + locparse(&f[4],loc); + + if (!stralloc_0(&f[1])) nomem(); + + if (ip4_scan(f[1].s,ip)) { + rr_start(DNS_T_A,ttl,ttd,loc); + rr_add(ip,4); + rr_finish(d1); + + if (line.s[0] == '=') { + dns_name4_domain(dptr,ip); + rr_start(DNS_T_PTR,ttl,ttd,loc); + rr_addname(d1); + rr_finish(dptr); + } + } + break; + + case '6': case '3': + if (!dns_domain_fromdot(&d1,f[0].s,f[0].len)) nomem(); + if (!stralloc_0(&f[2])) nomem(); + if (!scan_ulong(f[2].s,&ttl)) ttl = TTL_POSITIVE; + ttdparse(&f[3],ttd); + locparse(&f[4],loc); + + if (!stralloc_0(&f[1])) nomem(); + if (ip6_scan_flat(f[1].s,ip6)) { + rr_start(DNS_T_AAAA,ttl,ttd,loc); + rr_add(ip6,16); + rr_finish(d1); + + if (line.s[0] == '6') { /* emit both .ip6.arpa and .ip6.int */ + dns_name6_domain(d6ptr,ip6,DNS_IP6_ARPA); + rr_start(DNS_T_PTR,ttl,ttd,loc); + rr_addname(d1); + rr_finish(d6ptr); + + dns_name6_domain(d6ptr,ip6,DNS_IP6_INT); + rr_start(DNS_T_PTR,ttl,ttd,loc); + rr_addname(d1); + rr_finish(d6ptr); + } + } + break; + + case '@': + if (!dns_domain_fromdot(&d1,f[0].s,f[0].len)) nomem(); + if (!stralloc_0(&f[4])) nomem(); + if (!scan_ulong(f[4].s,&ttl)) ttl = TTL_POSITIVE; + ttdparse(&f[5],ttd); + locparse(&f[6],loc); + + if (!stralloc_0(&f[1])) nomem(); + + if (byte_chr(f[2].s,f[2].len,'.') >= f[2].len) { + if (!stralloc_cats(&f[2],".mx.")) nomem(); + if (!stralloc_catb(&f[2],f[0].s,f[0].len)) nomem(); + } + if (!dns_domain_fromdot(&d2,f[2].s,f[2].len)) nomem(); + + if (!stralloc_0(&f[3])) nomem(); + if (!scan_ulong(f[3].s,&u)) u = 0; + + rr_start(DNS_T_MX,ttl,ttd,loc); + uint16_pack_big(buf,u); + rr_add(buf,2); + rr_addname(d2); + rr_finish(d1); + + if (ip4_scan(f[1].s,ip)) { + rr_start(DNS_T_A,ttl,ttd,loc); + rr_add(ip,4); + rr_finish(d2); + } + break; + + case '^': case 'C': + if (!dns_domain_fromdot(&d1,f[0].s,f[0].len)) nomem(); + if (!dns_domain_fromdot(&d2,f[1].s,f[1].len)) nomem(); + if (!stralloc_0(&f[2])) nomem(); + if (!scan_ulong(f[2].s,&ttl)) ttl = TTL_POSITIVE; + ttdparse(&f[3],ttd); + locparse(&f[4],loc); + + if (line.s[0] == 'C') + rr_start(DNS_T_CNAME,ttl,ttd,loc); + else + rr_start(DNS_T_PTR,ttl,ttd,loc); + rr_addname(d2); + rr_finish(d1); + break; + + case '\'': + if (!dns_domain_fromdot(&d1,f[0].s,f[0].len)) nomem(); + if (!stralloc_0(&f[2])) nomem(); + if (!scan_ulong(f[2].s,&ttl)) ttl = TTL_POSITIVE; + ttdparse(&f[3],ttd); + locparse(&f[4],loc); + + rr_start(DNS_T_TXT,ttl,ttd,loc); + + txtparse(&f[1]); + i = 0; + while (i < f[1].len) { + k = f[1].len - i; + if (k > 127) k = 127; + ch = k; + rr_add(&ch,1); + rr_add(f[1].s + i,k); + i += k; + } + + rr_finish(d1); + break; + + case ':': + if (!dns_domain_fromdot(&d1,f[0].s,f[0].len)) nomem(); + if (!stralloc_0(&f[3])) nomem(); + if (!scan_ulong(f[3].s,&ttl)) ttl = TTL_POSITIVE; + ttdparse(&f[4],ttd); + locparse(&f[5],loc); + + if (!stralloc_0(&f[1])) nomem(); + scan_ulong(f[1].s,&u); + uint16_pack_big(type,u); + if (byte_equal(type,2,DNS_T_AXFR)) + syntaxerror(": type AXFR prohibited"); + if (byte_equal(type,2,"\0\0")) + syntaxerror(": type 0 prohibited"); + if (byte_equal(type,2,DNS_T_SOA)) + syntaxerror(": type SOA prohibited"); + if (byte_equal(type,2,DNS_T_NS)) + syntaxerror(": type NS prohibited"); + if (byte_equal(type,2,DNS_T_CNAME)) + syntaxerror(": type CNAME prohibited"); + if (byte_equal(type,2,DNS_T_PTR)) + syntaxerror(": type PTR prohibited"); + if (byte_equal(type,2,DNS_T_MX)) + syntaxerror(": type MX prohibited"); + + txtparse(&f[2]); + + rr_start(type,ttl,ttd,loc); + rr_add(f[2].s,f[2].len); + rr_finish(d1); + break; + + default: + syntaxerror(": unrecognized leading character"); + } + } + + if (cdb_make_finish(&cdb) == -1) die_datatmp(); + if (fsync(fdcdb) == -1) die_datatmp(); + if (close(fdcdb) == -1) die_datatmp(); /* NFS stupidity */ + if (rename("data.tmp","data.cdb") == -1) + strerr_die2sys(111,FATAL,"unable to move data.tmp to data.cdb: "); + + _exit(0); +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/tinydns-data.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/tinydns-data.o new file mode 100644 index 0000000000000000000000000000000000000000..b2610303427128546f3a0888e7c2a4f6ccdb75ce GIT binary patch literal 30592 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
    RvxU*aVK1f->U`>S}IjAg8>9*Rwp^v|= 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 literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/tinydns-edit.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/tinydns-edit.c new file mode 100644 index 0000000..8633220 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/tinydns-edit.c @@ -0,0 +1,284 @@ +#include +#include +#include +#include +#include "stralloc.h" +#include "buffer.h" +#include "exit.h" +#include "open.h" +#include "getln.h" +#include "strerr.h" +#include "scan.h" +#include "byte.h" +#include "str.h" +#include "fmt.h" +#include "ip4.h" +#include "ip6.h" +#include "dns.h" + +#define FATAL "tinydns-edit: fatal: " + +#define TTL_NS 259200 +#define TTL_POSITIVE 86400 + +char *fn; +char *fnnew; + +void die_usage() +{ + strerr_die1x(100,"tinydns-edit: usage: tinydns-edit data data.new add [ns|childns|host|alias|mx] domain a.b.c.d\n" + "tinydns-edit: usage: tinydns-edit data data.new add [host6|alias6] domain a:b:c:d:e:f:g:h"); +} +void nomem() +{ + strerr_die2x(111,FATAL,"out of memory"); +} +void die_read() +{ + strerr_die4sys(100,FATAL,"tinydns-edit: fatal: unable to read ",fn,": "); +} +void die_write() +{ + strerr_die4sys(100,FATAL,"tinydns-edit: fatal: unable to write ",fnnew,": "); +} + +char mode; +static char *target; +char targetip[4]; +char targetip6[16]; + +int fd; +buffer b; +char bspace[1024]; + +int fdnew; +buffer bnew; +char bnewspace[1024]; + +static stralloc line; +int match = 1; + +#define NUMFIELDS 10 +static stralloc f[NUMFIELDS]; + +static char *d1; +static char *d2; +char ip[4]; +char ip6[16]; +char ipstr[IP4_FMT]; +char ip6str[IP6_FMT]; +char strnum[FMT_ULONG]; + +static char *names[26]; +static int used[26]; + +void put(const char *buf,unsigned int len) +{ + if (buffer_putalign(&bnew,buf,len) == -1) die_write(); +} + +int main(int argc,char **argv) +{ + unsigned long ttl; + struct stat st; + int i; + int j; + int k; + char ch; + + if (!*argv) die_usage(); + + if (!*++argv) die_usage(); + fn = *argv; + + if (!*++argv) die_usage(); + fnnew = *argv; + + if (!*++argv) die_usage(); + if (str_diff(*argv,"add")) die_usage(); + + if (!*++argv) die_usage(); + if (str_equal(*argv,"ns")) mode = '.'; + else if (str_equal(*argv,"childns")) mode = '&'; + else if (str_equal(*argv,"host")) mode = '='; + else if (str_equal(*argv,"host6")) mode = '6'; + else if (str_equal(*argv,"alias")) mode = '+'; + else if (str_equal(*argv,"alias6")) mode = '3'; + else if (str_equal(*argv,"mx")) mode = '@'; + else die_usage(); + + if (!*++argv) die_usage(); + if (!dns_domain_fromdot(&target,*argv,str_len(*argv))) nomem(); + + if (!*++argv) die_usage(); + if (mode == '6' || mode == '3') { + if (!ip6_scan(*argv,targetip6)) die_usage(); + } else { + if (!ip4_scan(*argv,targetip)) die_usage(); + } + + umask(077); + + fd = open_read(fn); + if (fd == -1) die_read(); + if (fstat(fd,&st) == -1) die_read(); + buffer_init(&b,buffer_unixread,fd,bspace,sizeof bspace); + + fdnew = open_trunc(fnnew); + if (fdnew == -1) die_write(); + if (fchmod(fdnew,st.st_mode & 0644) == -1) die_write(); + buffer_init(&bnew,buffer_unixwrite,fdnew,bnewspace,sizeof bnewspace); + + switch(mode) { + case '.': case '&': + ttl = TTL_NS; + for (i = 0;i < 26;++i) { + ch = 'a' + i; + if (!stralloc_copyb(&f[0],&ch,1)) nomem(); + if (!stralloc_cats(&f[0],".ns.")) nomem(); + if (!dns_domain_todot_cat(&f[0],target)) nomem(); + if (!dns_domain_fromdot(&names[i],f[0].s,f[0].len)) nomem(); + } + break; + case '+': case '=': case '6': case '3': + ttl = TTL_POSITIVE; + break; + case '@': + ttl = TTL_POSITIVE; + for (i = 0;i < 26;++i) { + ch = 'a' + i; + if (!stralloc_copyb(&f[0],&ch,1)) nomem(); + if (!stralloc_cats(&f[0],".mx.")) nomem(); + if (!dns_domain_todot_cat(&f[0],target)) nomem(); + if (!dns_domain_fromdot(&names[i],f[0].s,f[0].len)) nomem(); + } + break; + } + + while (match) { + if (getln(&b,&line,&match,'\n') == -1) die_read(); + + put(line.s,line.len); + if (line.len && !match) put("\n",1); + + while (line.len) { + ch = line.s[line.len - 1]; + if ((ch != ' ') && (ch != '\t') && (ch != '\n')) break; + --line.len; + } + if (!line.len) continue; + if (line.s[0] == '#') continue; + + j = 1; + for (i = 0;i < NUMFIELDS;++i) { + if (j >= line.len) { + if (!stralloc_copys(&f[i],"")) nomem(); + } + else { + k = byte_chr(line.s + j,line.len - j,':'); + if (!stralloc_copyb(&f[i],line.s + j,k)) nomem(); + j += k + 1; + } + } + + switch(mode) { + case '.': case '&': + if (line.s[0] == mode) { + if (!dns_domain_fromdot(&d1,f[0].s,f[0].len)) nomem(); + if (dns_domain_equal(d1,target)) { + if (byte_chr(f[2].s,f[2].len,'.') >= f[2].len) { + if (!stralloc_cats(&f[2],".ns.")) nomem(); + if (!stralloc_catb(&f[2],f[0].s,f[0].len)) nomem(); + } + if (!dns_domain_fromdot(&d2,f[2].s,f[2].len)) nomem(); + if (!stralloc_0(&f[3])) nomem(); + if (!scan_ulong(f[3].s,&ttl)) ttl = TTL_NS; + for (i = 0;i < 26;++i) + if (dns_domain_equal(d2,names[i])) { + used[i] = 1; + break; + } + } + } + break; + + case '=': + if (line.s[0] == '=') { + if (!dns_domain_fromdot(&d1,f[0].s,f[0].len)) nomem(); + if (dns_domain_equal(d1,target)) + strerr_die2x(100,FATAL,"host name already used"); + if (!stralloc_0(&f[1])) nomem(); + if (ip4_scan(f[1].s,ip)) + if (byte_equal(ip,4,targetip)) + strerr_die2x(100,FATAL,"IP address already used"); + } + break; + + case '6': + if (line.s[0] == '6') { + if (!dns_domain_fromdot(&d1,f[0].s,f[0].len)) nomem(); + if (dns_domain_equal(d1,target)) + strerr_die2x(100,FATAL,"host name already used"); + if (!stralloc_0(&f[1])) nomem(); + if (ip6_scan(f[1].s,ip6)) + if (byte_equal(ip,16,targetip6)) + strerr_die2x(100,FATAL,"IPv6 address already used"); + } + break; + + case '@': + if (line.s[0] == '@') { + if (!dns_domain_fromdot(&d1,f[0].s,f[0].len)) nomem(); + if (dns_domain_equal(d1,target)) { + if (byte_chr(f[2].s,f[2].len,'.') >= f[2].len) { + if (!stralloc_cats(&f[2],".mx.")) nomem(); + if (!stralloc_catb(&f[2],f[0].s,f[0].len)) nomem(); + } + if (!dns_domain_fromdot(&d2,f[2].s,f[2].len)) nomem(); + if (!stralloc_0(&f[4])) nomem(); + if (!scan_ulong(f[4].s,&ttl)) ttl = TTL_POSITIVE; + for (i = 0;i < 26;++i) + if (dns_domain_equal(d2,names[i])) { + used[i] = 1; + break; + } + } + } + break; + } + } + + if (!stralloc_copyb(&f[0],&mode,1)) nomem(); + if (!dns_domain_todot_cat(&f[0],target)) nomem(); + if (!stralloc_cats(&f[0],":")) nomem(); + if (mode == '6' || mode == '3') { + if (!stralloc_catb(&f[0],ip6str,ip6_fmt_flat(ip6str,targetip6))) nomem(); + } else { + if (!stralloc_catb(&f[0],ipstr,ip4_fmt(ipstr,targetip))) nomem(); + } + switch(mode) { + case '.': case '&': case '@': + for (i = 0;i < 26;++i) + if (!used[i]) + break; + if (i >= 26) + strerr_die2x(100,FATAL,"too many records for that domain"); + ch = 'a' + i; + if (!stralloc_cats(&f[0],":")) nomem(); + if (!stralloc_catb(&f[0],&ch,1)) nomem(); + if (mode == '@') + if (!stralloc_cats(&f[0],":")) nomem(); + break; + } + if (!stralloc_cats(&f[0],":")) nomem(); + if (!stralloc_catb(&f[0],strnum,fmt_ulong(strnum,ttl))) nomem(); + if (!stralloc_cats(&f[0],"\n")) nomem(); + put(f[0].s,f[0].len); + + if (buffer_flush(&bnew) == -1) die_write(); + if (fsync(fdnew) == -1) die_write(); + if (close(fdnew) == -1) die_write(); /* NFS dorks */ + if (rename(fnnew,fn) == -1) + strerr_die6sys(111,FATAL,"unable to move ",fnnew," to ",fn,": "); + _exit(0); +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/tinydns-edit.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/tinydns-edit.o new file mode 100644 index 0000000000000000000000000000000000000000..3ea4735978025434a738d4888c9a9c58ae6ee136 GIT binary patch literal 23272 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 literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/tinydns-get b/NONE-CKUBU/src/djbdns/djbdns-1.05/tinydns-get new file mode 100755 index 0000000000000000000000000000000000000000..347d6778ac5c2aa2a4babdfa6cf9f86857178b17 GIT binary patch literal 34152 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 +#include + +void foo() +{ + DIR *dir; + struct dirent *d; +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/tryip6.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/tryip6.c new file mode 100644 index 0000000..e0d7cfb --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/tryip6.c @@ -0,0 +1,8 @@ +#include +#include +#include + +main() { + struct sockaddr_in6 sa; + sa.sin6_family = PF_INET6; +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/trylsock.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/trylsock.c new file mode 100644 index 0000000..c32bd40 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/trylsock.c @@ -0,0 +1,4 @@ +int main() +{ + ; +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/tryn2i.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/tryn2i.c new file mode 100644 index 0000000..84c3a08 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/tryn2i.c @@ -0,0 +1,8 @@ +#include +#include +#include + +int main() { + static char ifname[IFNAMSIZ]; + char *tmp=if_indextoname(0,ifname); +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/trypoll.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/trypoll.c new file mode 100644 index 0000000..30bea3d --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/trypoll.c @@ -0,0 +1,18 @@ +#include +#include +#include + +int main() +{ + struct pollfd x; + + x.fd = open("trypoll.c",O_RDONLY); + if (x.fd == -1) _exit(111); + x.events = POLLIN; + if (poll(&x,1,10) == -1) _exit(1); + if (x.revents != POLLIN) _exit(1); + + /* XXX: try to detect and avoid poll() imitation libraries */ + + _exit(0); +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/trysa6.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/trysa6.c new file mode 100644 index 0000000..0fd180c --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/trysa6.c @@ -0,0 +1,8 @@ +#include +#include +#include + +main() { + struct sockaddr_in6 sa; + sa.sin6_scope_id = 1; +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/tryshsgr.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/tryshsgr.c new file mode 100644 index 0000000..81b395c --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/tryshsgr.c @@ -0,0 +1,14 @@ +int main() +{ + short x[4]; + + x[0] = x[1] = 1; + if (getgroups(1,x) == 0) if (setgroups(1,x) == -1) _exit(1); + + if (getgroups(1,x) == -1) _exit(1); + if (x[1] != 1) _exit(1); + x[1] = 2; + if (getgroups(1,x) == -1) _exit(1); + if (x[1] != 2) _exit(1); + _exit(0); +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/trysysel.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/trysysel.c new file mode 100644 index 0000000..f6ed055 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/trysysel.c @@ -0,0 +1,8 @@ +#include +#include +#include /* SVR4 silliness */ + +void foo() +{ + ; +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/tryulong32.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/tryulong32.c new file mode 100644 index 0000000..20683d6 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/tryulong32.c @@ -0,0 +1,11 @@ +int main() +{ + unsigned long u; + u = 1; + u += u; u += u; u += u; u += u; u += u; u += u; u += u; u += u; + u += u; u += u; u += u; u += u; u += u; u += u; u += u; u += u; + u += u; u += u; u += u; u += u; u += u; u += u; u += u; u += u; + u += u; u += u; u += u; u += u; u += u; u += u; u += u; u += u; + if (!u) _exit(0); + _exit(1); +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/tryulong64.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/tryulong64.c new file mode 100644 index 0000000..479e4be --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/tryulong64.c @@ -0,0 +1,11 @@ +int main() +{ + unsigned long u; + u = 1; + u += u; u += u; u += u; u += u; u += u; u += u; u += u; u += u; + u += u; u += u; u += u; u += u; u += u; u += u; u += u; u += u; + u += u; u += u; u += u; u += u; u += u; u += u; u += u; u += u; + u += u; u += u; u += u; u += u; u += u; u += u; u += u; u += u; + if (!u) _exit(1); + _exit(0); +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/uint16.h b/NONE-CKUBU/src/djbdns/djbdns-1.05/uint16.h new file mode 100644 index 0000000..af314fd --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/uint16.h @@ -0,0 +1,11 @@ +#ifndef UINT16_H +#define UINT16_H + +typedef unsigned short uint16; + +extern void uint16_pack(char *,uint16); +extern void uint16_pack_big(char *,uint16); +extern void uint16_unpack(const char *,uint16 *); +extern void uint16_unpack_big(const char *,uint16 *); + +#endif diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/uint16_pack.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/uint16_pack.c new file mode 100644 index 0000000..17dbfe6 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/uint16_pack.c @@ -0,0 +1,13 @@ +#include "uint16.h" + +void uint16_pack(char s[2],uint16 u) +{ + s[0] = u & 255; + s[1] = u >> 8; +} + +void uint16_pack_big(char s[2],uint16 u) +{ + s[1] = u & 255; + s[0] = u >> 8; +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/uint16_pack.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/uint16_pack.o new file mode 100644 index 0000000000000000000000000000000000000000..06c6d1c0848d5be466fa7d45638225611fbc011b GIT binary patch literal 1328 zcmbtU%`QVx5T2`O(WHolghZ_noG6V7iQJ_A7GfdnBz0StHnf%YO3TK!OON3-qzhY* z;0c5$V5WB_P9}H7Np8NGZ@%x$In$gz?jG*-IS$BjU>kljVFA(>>Go(BMj!!hCwKYs zk#IXLr<g5`k?WFdqNfFL9*)6jk2Xt6QeUBA)e4J;SSS8T=C=^3zh2Kw%&3Ca?qFSW zWO-FSNwszi3wm~>75|AC8MU8sJv)-V^QNEd8%CtN>-*DOqWZt_P#4)Rp!*B2k#zm= z^{sizW04ahKI$gKN1c%P$X_1$cvM^D^(z5Lp>o_hkNhXlyCPoRi|}w)sRfz!!Y#gF ZQ?fHVE)*+Q;Stgy0L|aN-G<_&&kxIXO*;Sp literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/uint16_unpack.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/uint16_unpack.c new file mode 100644 index 0000000..518b9e3 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/uint16_unpack.c @@ -0,0 +1,23 @@ +#include "uint16.h" + +void uint16_unpack(const char s[2],uint16 *u) +{ + uint16 result; + + result = (unsigned char) s[1]; + result <<= 8; + result += (unsigned char) s[0]; + + *u = result; +} + +void uint16_unpack_big(const char s[2],uint16 *u) +{ + uint16 result; + + result = (unsigned char) s[0]; + result <<= 8; + result += (unsigned char) s[1]; + + *u = result; +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/uint16_unpack.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/uint16_unpack.o new file mode 100644 index 0000000000000000000000000000000000000000..073912da5298b211ea12a020b63d333894c57dfd GIT binary patch literal 1336 zcmbtTy-EW?5T46LbN)c02nq_Gl?rAt8blN%kZ3H#LbOiq;>85LizF9_Hr94NhEI?_ zSlH$ff={4NpfhF{H{(^huzd40%RU^Q9K{R+)H2`zewb1LY)#C4%Q=_=3zFTU zk?hX*2A0vUK90YjO;Ybo@;P~gaeoFzCuNw^3F`^ZB7I5vQW6PB&q}WAP|WA|?6rdD z)}6r4ifyr#&WOzV&;$^zJ3n+>#IQNUnzBN#6N0#OLI;G~YJq5aH;(XXrE1ghJrI?K z?|T7;1dY%W#nX#)D|9N?vWb7fBIeWR#@RVJ$!(^O+!=ihtw1g=Oa8u?6&V zjZ$7&o}xT<1|58M6sz*jRiZ?mPn^$=LI?8DcbPYdNO$M=r@2Jc@5`am`{;|;*L}K8 zadG(g)HP+BkrSgnqHaQZREMNTy*%j&RcZvyU%v!^=0B_Tqy7iIJL!rmgmyg$Gdrbr daEpIfR7UwIE4lS6)qpJxdI$ZMyG&Pgz5vQ7QJ??- literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/uint32.h b/NONE-CKUBU/src/djbdns/djbdns-1.05/uint32.h new file mode 100644 index 0000000..6ee0172 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/uint32.h @@ -0,0 +1,11 @@ +#ifndef UINT32_H +#define UINT32_H + +typedef unsigned int uint32; + +extern void uint32_pack(char *,uint32); +extern void uint32_pack_big(char *,uint32); +extern void uint32_unpack(const char *,uint32 *); +extern void uint32_unpack_big(const char *,uint32 *); + +#endif diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/uint32.h1 b/NONE-CKUBU/src/djbdns/djbdns-1.05/uint32.h1 new file mode 100644 index 0000000..6ee0172 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/uint32.h1 @@ -0,0 +1,11 @@ +#ifndef UINT32_H +#define UINT32_H + +typedef unsigned int uint32; + +extern void uint32_pack(char *,uint32); +extern void uint32_pack_big(char *,uint32); +extern void uint32_unpack(const char *,uint32 *); +extern void uint32_unpack_big(const char *,uint32 *); + +#endif diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/uint32.h2 b/NONE-CKUBU/src/djbdns/djbdns-1.05/uint32.h2 new file mode 100644 index 0000000..7df3ddb --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/uint32.h2 @@ -0,0 +1,11 @@ +#ifndef UINT32_H +#define UINT32_H + +typedef unsigned long uint32; + +extern void uint32_pack(char *,uint32); +extern void uint32_pack_big(char *,uint32); +extern void uint32_unpack(const char *,uint32 *); +extern void uint32_unpack_big(const char *,uint32 *); + +#endif diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/uint32_pack.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/uint32_pack.c new file mode 100644 index 0000000..76bc670 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/uint32_pack.c @@ -0,0 +1,21 @@ +#include "uint32.h" + +void uint32_pack(char s[4],uint32 u) +{ + s[0] = u & 255; + u >>= 8; + s[1] = u & 255; + u >>= 8; + s[2] = u & 255; + s[3] = u >> 8; +} + +void uint32_pack_big(char s[4],uint32 u) +{ + s[3] = u & 255; + u >>= 8; + s[2] = u & 255; + u >>= 8; + s[1] = u & 255; + s[0] = u >> 8; +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/uint32_pack.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/uint32_pack.o new file mode 100644 index 0000000000000000000000000000000000000000..f85d69b373e67fb3cc950ac2ca19b549ac915a89 GIT binary patch literal 1360 zcmbtUO)mpc6ur|at&gOL1tC!@1TR{W`bcDwq84Hytea^KZRk|m5hW6qmj04-WAqywW_kq8I@VkTL9I(twnwbF=}Y6m|YaKB2cG(LH3z7QE^~%DGC`j)P z)}=;~H<2?`dPlJ!XGdO>KQ=)|nI|r1*R}FcI-DCsq`S-e(_DJ>?{I#R^9E#pqe~=T z96mm!PTcJ|G17b91od7gBtIWgG;tvz6iwY}KP literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/uint32_unpack.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/uint32_unpack.c new file mode 100644 index 0000000..f5635d3 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/uint32_unpack.c @@ -0,0 +1,31 @@ +#include "uint32.h" + +void uint32_unpack(const char s[4],uint32 *u) +{ + uint32 result; + + result = (unsigned char) s[3]; + result <<= 8; + result += (unsigned char) s[2]; + result <<= 8; + result += (unsigned char) s[1]; + result <<= 8; + result += (unsigned char) s[0]; + + *u = result; +} + +void uint32_unpack_big(const char s[4],uint32 *u) +{ + uint32 result; + + result = (unsigned char) s[0]; + result <<= 8; + result += (unsigned char) s[1]; + result <<= 8; + result += (unsigned char) s[2]; + result <<= 8; + result += (unsigned char) s[3]; + + *u = result; +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/uint32_unpack.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/uint32_unpack.o new file mode 100644 index 0000000000000000000000000000000000000000..b2ba3331391faf4705827feae87e8f870ded8f05 GIT binary patch literal 1392 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 literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/utime b/NONE-CKUBU/src/djbdns/djbdns-1.05/utime new file mode 100755 index 0000000000000000000000000000000000000000..c4e7f7c8a9983b30aa023f3720b086a7f8dd12b7 GIT binary patch literal 4760 zcmds4U2GiH6~6oD-L%0rkf=1VnnkQpXz^f&Byxxxjgy6p=~9`Ws7Q_2ti9`aTYERz z9ft)aV08)gbTPPvhX|;Y2Of~1!cQRxDcQ&^Ngj|4Lc#(hLLkzHKc#9Z5mK^z=gv9t zWFmot#0y87IY0M&=bU@y&Ye4t-k!Q67zik#pxUHJ>kgaRT_(2K`5-#(jxzW|Z@j8MgG}29C9DR|KFVWx` zJ4^BhlvH!`GJdnxloBquyMbc}dwe&OI&T@v53OH&%UHH+EMJ(YbX9uScdcJ*l#9k1 zU4J{m&=j}+ZkrA${SZ7oM|vJq2g%$HNQ*=mvdgtN^8HdAF4uV6I$5SzagSZZ8zFf8 z>*NSpfy-+j)K=Wm>7C=nLb_~cN_IM}(2il6{d$$oRr0o)u=C?NIFX&5#xwbX+L{{J zyd}NHSYxb15Sn37-vgK>^^7i}i52-JG}h~?slC}My$4>nf zdeLK-H9%ul_48Px3ZZcg!ZiMg99H#TvAO2DXCrad?0g>gwpAu1(nkq$_EZzp`FGMO z_1Sr?|CMwq@oXJBITH1JG2p!QfaRRFs-K)2yl>!m{anOU*70Mih1l^pw8kp{{BLH4 zYO!jOs}acBU$=wJd0onkm$q5XnS04`vacI{YT~ztPegYptG4{t1na7ka_oG_n!dkj zZFsNT*|utu>aeCa2P`KNfm3tYzqMCw`PX4UHoR9l{YKcYX zwprD_cY|>RaL(8(4wH#$Yd<=VL<7#;$^PcY)Sr`cZk6sF?ufw&>5d?(eXmt}q}|%z zw4A;tNx$pJ0v<+Vh(gsORjQ%Z_YByPQ?LUyNhT+<8?2|^`18ePvsw>K#E%w%fZ=a2 z9L+**`~{NvY8JMAkb0UBYzW?dwH=Dy-c#>6S#5N;9YR09S@PfwRIfE1cKQ+4nqIm& z>D1c}g`cSxcRd$~tJHMgGsK*1;#3NQjg(_2 z&RNd(1hReJo4V;jzjJZG`N}$WAvEB;)2Ll&Hm&_%*d0CZQynSibjtZM>3rSaT=t<= zoeNkSJ}Z4{)wURkIVTQ?5ZL+V$H4FPDvNQSPtn|g1 zM1Jpkp8$^HRA6@~#+^?EA8#3HHLKAlL(}0WB4qOr%GD$$zbpS@SO4l_la?oT09U_M2jk^iGsWXSgD+9iWlD|<*Rj5wxiHzwCV3x|o>=T4 zeT=gH3+7XtU+lYBkMX$V!=|fAbhKB`XOR8TH?0TQ?;Pt%9%u89&g2~7Pjr#%Xbqcs z=vU1BeroHMEw{y2Cv!vjOd-D3xYbzG)noMB$c?5)N}2IodNd2HXv!G2i={FWy6lg`7(~p>czzfOiwJ|8 zp<}yohRX0BE{>1q3icIG_y-y2{iC%l@0ALg&_HaUJ}UH!$p%kchN^6c<~L!HyCe?=QOW{fw6~KVZE47s~&i4vL%L zM1R_ck3~&A6yp!)3*yLJo}ZZi0fG9@?Z$ue4m~9Q&;EY-@f6>SrxQ9+o%4Sm{w4T& z@pL>VnrFN}pI@JaFST0gm+!3n#~-BNAbuQ|*00p{8pgc&<-e`M2Md2b(S;xJ;pLn& z$@p$c?jgYmKaMeP{#iaJ%`#r +#include +#include "scan.h" +#include "exit.h" + +char *fn; + +char *ustr; +unsigned long u; +time_t ut[2]; + +int main(int argc,char **argv) +{ + fn = argv[1]; + if (!fn) _exit(100); + + ustr = argv[2]; + if (!ustr) _exit(100); + scan_ulong(ustr,&u); + + ut[0] = ut[1] = u; + if (utime(fn,ut) == -1) _exit(111); + _exit(0); +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/utime.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/utime.o new file mode 100644 index 0000000000000000000000000000000000000000..867e75a9ae3525903c4ba0aafcdb5a888b847e0f GIT binary patch literal 1936 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 QZ9F%}Mz6X_ +#include +#include "strerr.h" +#include "exit.h" +#include "auto_home.h" +#include "generic-conf.h" + +#define FATAL "walldns-conf: fatal: " + +void usage(void) +{ + strerr_die1x(100,"walldns-conf: usage: walldns-conf acct logacct /walldns myip"); +} + +char *dir; +char *user; +char *loguser; +struct passwd *pw; +char *myip; + +int main(int argc,char **argv) +{ + user = argv[1]; + if (!user) usage(); + loguser = argv[2]; + if (!loguser) usage(); + dir = argv[3]; + if (!dir) usage(); + if (dir[0] != '/') usage(); + myip = argv[4]; + if (!myip) usage(); + + pw = getpwnam(loguser); + if (!pw) + strerr_die3x(111,FATAL,"unknown account ",loguser); + + init(dir,FATAL); + makelog(loguser,pw->pw_uid,pw->pw_gid); + + makedir("env"); + perm(02755); + start("env/ROOT"); outs(dir); outs("/root\n"); finish(); + perm(0644); + start("env/IP"); outs(myip); outs("\n"); finish(); + perm(0644); + + start("run"); + outs("#!/bin/sh\nexec 2>&1\nexec envuidgid "); outs(user); + outs(" envdir ./env softlimit -d250000 "); + outs(auto_home); outs("/bin/walldns\n"); + finish(); + perm(0755); + + makedir("root"); + perm(02755); + + _exit(0); +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/walldns-conf.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/walldns-conf.o new file mode 100644 index 0000000000000000000000000000000000000000..221a6afb99242594e50c552e9bcd471e29a4844a GIT binary patch literal 4632 zcmbuBU1%It6vyvo6C2Z-Y-?I$6*9q4`(b9gX^J7*x|**ks0nE+LaA}GJDVM{I}>JS zn{6Mgm`JJXLk00ggi^%5_@EW~pwI+bEd@ao5quHB2U{@@)&~Wp>p6Gs-95RTfd&uE z+;e~Tf6hH~ckZ1%J^K7uQ!K`$#n?gC=t;`h-^~p_&D}I>XB(NZ_c(hlC3Pe9 z-4z^J&ce;OKGNHYJ>zIhI#JqA;OXXwdx-=1~ULDR0aj9@rRfc)^UTchB7@KUL$R+_`&S-&+Un z)N1R|_pDRjvQB+B>W%6H`0E6Z@j1G|JL`fM{?6WtLmXQ$3x%vx>dUxJZb&Pa%vozl zqfj$58DA^7v%F1;A+31Qp2t}p>q*YoPO_A5vnp0b>p!?76?m3&qHJep?W~3}ra?bz zdzzjEM=QBGzhD<_U+c^E@81iiv9dGgxC;)>=awB`Q%cL3zF8R37=+`MoSK+8!jhir z`fa>_Xp*%tuk0{hk0=ue2yp&Ryn)3|O|e)d5sPoy(0UHu4CIgU5ytjmJJPOUgKPjD zu!~J_d$v8X*fbstA{-wc9@2J>STnZiXao8_y}vJ|r*;J{V|wXi(KlzH^}V3YOV6_k zrtVu6pXph6D5lSpN=)}$?4UfQ53cQ|po=k9emduwMT_Yfw^+0sNZ`1>rH{XOw6Elw znK`WMf0_pIuq^C8B~M!Pf5o*RmLNX5kHAHa)cWZ8je%>3#G9at^Rx;@muPng9v6Mt z>{NjmQ0ICAIObI4_ZpvqSgflbE^0FVEegSx^G3NTrVkn-kLk+hq_5bbOT!;sTq zMTKawO!c>;@e9}?rq&v^b||li2R$zq7EjAIxYXyrA6VG@UE=*+f^ll<{B(@^sB30_ z)F_jFJaomej<8CQhc9NF@ej95TW{lc?dD)8&fkE#tnS45%GA4cC(dwn)*9~rEu?;a zh639LmwGl}WDi`ZPh$s+pRLg1zTeDl*W~XZ+dUB+=Lyq48Nr_h9#+q2gx-kIzYxKX zM)2bid?teDBX}`_`w{%L2)^d4s%IGg;xqW_Se`eXwJlaOZ3n33G5F^57CzgIf9_{3 ze}2I+i)?;@*^cdlcFqD7Z&5XGc}2)&dOmZ@eu?EkRmwB7?7P!>7d~9mRt3V)I`}=< zgY>Q4EjVsd+;acc0-GWn_panQ!rKWyML5nS^=BgZ`-0<{K*{A@r;xDp9$YW_$uMF{@a3Mo%ksg$2$9q=pO`M=D$NY&EFypE?j3?XM*rfl4q;n za^A;9-t9!cmFRm3$Fo4zvrEZ?`x{Ls`iGz|_4^5@>o7z(e!Hap872P!CI=gd&>tfF zVbIAuhY6?kzpUhcif3o+IMLJkvxL+4#3r29?H+{x=Ax^`BAlkBIzl z6Fsf}9iqp5krw**h@RH}0pWC?ULc(6FDm)*{6qUVLjNhzZx5vWemO$_1<~Vv!E+sL zB|`rt;dDK}A)Kz~_e%bkg7oZ1qNn@f7s6?t-w4P5(DFU}hvcW{(l*?G@c Cpd@er literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/walldns.c b/NONE-CKUBU/src/djbdns/djbdns-1.05/walldns.c new file mode 100644 index 0000000..3cdaa72 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/djbdns-1.05/walldns.c @@ -0,0 +1,57 @@ +#include "byte.h" +#include "dns.h" +#include "dd.h" +#include "response.h" + +const char *fatal = "walldns: fatal: "; +const char *starting = "starting walldns\n"; + +void initialize(void) +{ + ; +} + +int respond(char *q,char qtype[2]) +{ + int flaga; + int flagptr; + char ip[4]; + int j; + + flaga = byte_equal(qtype,2,DNS_T_A); + flagptr = byte_equal(qtype,2,DNS_T_PTR); + if (byte_equal(qtype,2,DNS_T_ANY)) flaga = flagptr = 1; + + if (flaga || flagptr) { + if (dd(q,"",ip) == 4) { + if (flaga) { + if (!response_rstart(q,DNS_T_A,655360)) return 0; + if (!response_addbytes(ip,4)) return 0; + response_rfinish(RESPONSE_ANSWER); + } + return 1; + } + j = dd(q,"\7in-addr\4arpa",ip); + if (j >= 0) { + if (flaga && (j == 4)) { + if (!response_rstart(q,DNS_T_A,655360)) return 0; + if (!response_addbytes(ip + 3,1)) return 0; + if (!response_addbytes(ip + 2,1)) return 0; + if (!response_addbytes(ip + 1,1)) return 0; + if (!response_addbytes(ip + 0,1)) return 0; + response_rfinish(RESPONSE_ANSWER); + } + if (flagptr) { + if (!response_rstart(q,DNS_T_PTR,655360)) return 0; + if (!response_addname(q)) return 0; + response_rfinish(RESPONSE_ANSWER); + } + return 1; + } + } + + response[2] &= ~4; + response[3] &= ~15; + response[3] |= 5; + return 1; +} diff --git a/NONE-CKUBU/src/djbdns/djbdns-1.05/walldns.o b/NONE-CKUBU/src/djbdns/djbdns-1.05/walldns.o new file mode 100644 index 0000000000000000000000000000000000000000..c2d2bf921b5b78f3fe9f1a9d21f3560c6ca68f53 GIT binary patch literal 3304 zcmbtVUuauZ7(Z#Ub&GMg8=?cnSc2VJD`L~NWSygiHPHz@G zE4@_!>BcvxEO>5uceM{BqxR=ew)Kp6$MAmLLKXC!!nHZ?YPOa84$~l|ca5vFEl&8h zqiVFY#z)-#w^j60@NRRH+HOp%Zw4s9U>P%QY`AeCt!VW)ILkM7wB!=NOsjtde+U+5 zJr2RHehD-bpwTL7$uZ=A3h4Ly;l~4C#?-VV+s^s=>_)zEUAwrJ&+asKa@xgfW8T)m zb**u#-EM1__5qnKJ%s86hvwW~vG zBHzZwLV~lmf8_ZDWxf#4wzj|a^I45SEW`VqCyUj~K_Z}jPxuS6cU#7V*VEBesp{^R z2=(6bGbVf0ESIfH zbvRWtU9&u#VpZ34+*0M`l+eU|NB0PSk#iF)vN#ZlCi)MofKS995IWq6)DSx%29Kj6 zU)ygV8hN+xLiC;3+ps9(qoc#A%$Pl0GApSQ`eXX>!K|Kr#1|RUt7qq2a~gWr@%vel z9J_4luD$3oor@M^&h+VO6~^=a!0*u(dV^?&H+I@D*8tSE?qBN zLw0IBvKQv;VGx4iFT>`+cFgY>#>W_BPw}$?Q{#WA%v-qG6YB|3;Jj2i*&ifB(IZ!G zCt-ltaTx^pGvQFh$)5TNVXwwt7r^t1Uz$I`&w>zCzsmvjLtC<^`b`2xxsXrnGoqkL z83bA7+5s4vjH?TRAT-tfFknGcvR~j<-JfcYW3_h3Uh4O4c7?$q7~+;z=a1_f6n{}H z{CVF^=dZ@^C=>yCF?KWXYK-owf^QrR%mnk}kBSljarM-bA2E5wBHEdKuOiCs>IK9o z$}85ZLgo=Ef2#ex0;luN?_j_lgpV)~J1qlJ5RUgr5dLHcUI@Wo48e;b_#)tkrTWu8 zc|+hdrk)-$eTJ1PCAVajOXqCn*wr)h6^l)ub?qsuR4g*f5@6Mya`;=<9mA_w!3V;( zLP8OIRcAXuN0U(c_y^u?Y^MZHeA@djh45cd z__X6*3*k2U;aLN;0@%D+tm-D + +void nope() +{ + exit(1); +} + +int main() +{ + unsigned long x[4]; + unsigned long y[4]; + int i; + int j; + char c; + + signal(SIGILL,nope); + + x[0] = 0; + x[1] = 0; + x[2] = 0; + x[3] = 0; + + asm volatile(".byte 15;.byte 162" : "=a"(x[0]),"=b"(x[1]),"=c"(x[3]),"=d"(x[2]) : "0"(0) ); + if (!x[0]) return 0; + asm volatile(".byte 15;.byte 162" : "=a"(y[0]),"=b"(y[1]),"=c"(y[2]),"=d"(y[3]) : "0"(1) ); + + for (i = 1;i < 4;++i) + for (j = 0;j < 4;++j) { + c = x[i] >> (8 * j); + if (c < 32) c = 32; + if (c > 126) c = 126; + putchar(c); + } + + printf("-%08x-%08x\n",y[0],y[3]); + + return 0; +} diff --git a/NONE-CKUBU/src/djbdns/qlogtools-3.1/ANNOUNCEMENT b/NONE-CKUBU/src/djbdns/qlogtools-3.1/ANNOUNCEMENT new file mode 100644 index 0000000..73e6d6a --- /dev/null +++ b/NONE-CKUBU/src/djbdns/qlogtools-3.1/ANNOUNCEMENT @@ -0,0 +1,25 @@ +Version 3.1 of qlogtools is now available at: + http://untroubled.org/qlogtools/ +------------------------------------------------------------------------------ +qlogtools +Log processing tools +Bruce Guenter +Version 3.1 +2001-06-12 + +This package is a set of tools that are useful in analyzing or producing +logs from qmail and other packages. + +This package is Copyright(C) 2000 Bruce Guenter, and may be copied +according to the GNU GENERAL PUBLIC LICENSE (GPL) Version 2 or a later +version. A copy of this license is included with this package. This +package comes with no warranty of any kind. +------------------------------------------------------------------------------ +Changes in version 3.1 + +- Ignore directories named "supervise" in multipipe. + +- Added "teepipe" program. + +- Modified build with SPAC. +------------------------------------------------------------------------------- diff --git a/NONE-CKUBU/src/djbdns/qlogtools-3.1/COPYING b/NONE-CKUBU/src/djbdns/qlogtools-3.1/COPYING new file mode 100644 index 0000000..d60c31a --- /dev/null +++ b/NONE-CKUBU/src/djbdns/qlogtools-3.1/COPYING @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/NONE-CKUBU/src/djbdns/qlogtools-3.1/FILES b/NONE-CKUBU/src/djbdns/qlogtools-3.1/FILES new file mode 100644 index 0000000..bb694ec --- /dev/null +++ b/NONE-CKUBU/src/djbdns/qlogtools-3.1/FILES @@ -0,0 +1,55 @@ +ANNOUNCEMENT +COPYING +FILES +Makefile +NEWS +README +TARGETS +TODO +VERSION +bool.h +choose.sh +conf-bin +conf-cc +conf-ld +conf-man +direntry.h1 +direntry.h2 +fork.h1 +fork.h2 +installer.c +installer.h +instcheck.c +insthier.c +instshow.c +multipipe.1 +multipipe.c +multitail.1 +multitail.c +qfilelog.1 +qfilelog.c +qlogselect.1 +qlogtools-3.1.spec +select.h1 +select.h2 +spipe.1 +spipe.c +svcfns.c +svcfns.h +tai.h +tai2tai64n.1 +tai2tai64n.c +tai64n2tai.1 +tai64n2tai.c +tai64n_decode.c +tai64n_encode.c +tai_decode.c +tai_encode.c +teepipe.1 +teepipe.c +trydirent.c +trysysel.c +trysystime.c +trytime.c +tryvfork.c +warn-auto.sh diff --git a/NONE-CKUBU/src/djbdns/qlogtools-3.1/Makefile b/NONE-CKUBU/src/djbdns/qlogtools-3.1/Makefile new file mode 100644 index 0000000..27a7a8a --- /dev/null +++ b/NONE-CKUBU/src/djbdns/qlogtools-3.1/Makefile @@ -0,0 +1,141 @@ +# Don't edit Makefile! Use conf-* for configuration. +# +# Generated by spac see http://untroubled.org/spac/ + +SHELL=/bin/sh + +default: all + +all: programs installer instcheck instshow + +choose: warn-auto.sh choose.sh + cat warn-auto.sh choose.sh >choose + chmod 755 choose + +compile: conf-cc + ( echo '#!/bin/sh'; \ + echo 'source=$$1; shift'; \ + echo 'base=`echo "$$source" | sed -e s:\\\\.c$$::`'; \ + echo exec `head -1 conf-cc` '-I. -o $${base}.o -c $$source $${1+"$$@"}'; \ + ) >compile + chmod 755 compile + +conf_bin.c: conf-bin + head -1 conf-bin | \ + sed -e 's/"/\\"/g' \ + -e 's/^/const char conf_bin[] = "/' \ + -e 's/$$/";/' >conf_bin.c + +conf_man.c: conf-man + head -1 conf-man | \ + sed -e 's/"/\\"/g' \ + -e 's/^/const char conf_man[] = "/' \ + -e 's/$$/";/' >conf_man.c + +direntry.h: compile direntry.h1 direntry.h2 trydirent.c + ( ./compile trydirent.c >/dev/null 2>&1 \ + && cat direntry.h2 || cat direntry.h1 ) > direntry.h + rm -f trydirent.o + +fork.h: compile load fork.h1 fork.h2 tryvfork.c + ( ( ./compile tryvfork.c && ./load tryvfork ) >/dev/null 2>&1 \ + && cat fork.h2 || cat fork.h1 ) > fork.h + rm -f tryvfork.o tryvfork + +installer: load installer.o insthier.o + ./load installer insthier.o + +installer.o: compile installer.c installer.h + ./compile installer.c + +instcheck: load instcheck.o insthier.o + ./load instcheck insthier.o + +instcheck.o: compile instcheck.c installer.h + ./compile instcheck.c + +insthier.o: compile insthier.c installer.h conf_bin.c conf_man.c + ./compile insthier.c + +instshow: load instshow.o insthier.o + ./load instshow insthier.o + +instshow.o: compile instshow.c installer.h + ./compile instshow.c + +load: conf-ld + ( echo '#!/bin/sh';\ + echo 'main="$$1"; shift';\ + echo exec `head -1 conf-ld` '-o "$$main" "$$main.o" $${1+"$$@"}';\ + ) >load + chmod 755 load + +multipipe: load multipipe.o svcfns.o + ./load multipipe svcfns.o + +multipipe.o: compile multipipe.c select.h direntry.h bool.h svcfns.h + ./compile multipipe.c + +multitail: load multitail.o + ./load multitail + +multitail.o: compile multitail.c systime.h bool.h + ./compile multitail.c + +programs: spipe qfilelog multipipe tai2tai64n tai64n2tai teepipe multitail + +qfilelog: load qfilelog.o + ./load qfilelog + +qfilelog.o: compile qfilelog.c + ./compile qfilelog.c + +select.h: choose compile trysysel.c select.h1 select.h2 + ./choose c trysysel select.h1 select.h2 > select.h + +spipe: load spipe.o svcfns.o + ./load spipe svcfns.o + +spipe.o: compile spipe.c bool.h svcfns.h + ./compile spipe.c + +svcfns.o: compile svcfns.c fork.h bool.h svcfns.h + ./compile svcfns.c + +systime.h: compile trysystime.c trytime.c + ( ( ./compile trysystime.c >/dev/null 2>&1 && \ + echo '#include ' ); \ + ( ./compile trytime.c >/dev/null 2>&1 && \ + echo '#include ' ) ) >systime.h + rm -f trysystime.o trytime.o + +tai2tai64n: load tai2tai64n.o tai_decode.o tai64n_encode.o + ./load tai2tai64n tai_decode.o tai64n_encode.o + +tai2tai64n.o: compile tai2tai64n.c tai.h bool.h + ./compile tai2tai64n.c + +tai64n2tai: load tai64n2tai.o tai64n_decode.o tai_encode.o + ./load tai64n2tai tai64n_decode.o tai_encode.o + +tai64n2tai.o: compile tai64n2tai.c tai.h bool.h + ./compile tai64n2tai.c + +tai64n_decode.o: compile tai64n_decode.c tai.h bool.h + ./compile tai64n_decode.c + +tai64n_encode.o: compile tai64n_encode.c tai.h bool.h + ./compile tai64n_encode.c + +tai_decode.o: compile tai_decode.c tai.h bool.h + ./compile tai_decode.c + +tai_encode.o: compile tai_encode.c tai.h bool.h + ./compile tai_encode.c + +teepipe: load teepipe.o + ./load teepipe + +teepipe.o: compile teepipe.c fork.h + ./compile teepipe.c + diff --git a/NONE-CKUBU/src/djbdns/qlogtools-3.1/NEWS b/NONE-CKUBU/src/djbdns/qlogtools-3.1/NEWS new file mode 100644 index 0000000..cbd3616 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/qlogtools-3.1/NEWS @@ -0,0 +1,25 @@ +------------------------------------------------------------------------------- +Changes in version 3.1 + +- Ignore directories named "supervise" in multipipe. + +- Added "teepipe" program. + +- Modified build with SPAC. +------------------------------------------------------------------------------- +Changes in version 3.0 + +- Added a new program, "spipe", which supervises a pipeline of commands. + +- Added a new program, "multipipe", which supervises a set of processes + similar to svscan, but pipes a copy of stdin to each process. + +- Added a new program, "tai64n2tai", which converts tai64n timestamps to + old style tai timestamps, for use with qmail-analog. + +- Added a new program, "tai2tai64n", which converts old style tai + timestamps to tai64n format, just for completeness. + +- Added an option for "multitail" to seek to the end of the first file + before writing any output. +------------------------------------------------------------------------------- diff --git a/NONE-CKUBU/src/djbdns/qlogtools-3.1/README b/NONE-CKUBU/src/djbdns/qlogtools-3.1/README new file mode 100644 index 0000000..43d1f20 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/qlogtools-3.1/README @@ -0,0 +1,13 @@ +qlogtools +Log processing tools +Bruce Guenter +Version 3.1 +2001-06-12 + +This package is a set of tools that are useful in analyzing or producing +logs from qmail and other packages. + +This package is Copyright(C) 2000 Bruce Guenter, and may be copied +according to the GNU GENERAL PUBLIC LICENSE (GPL) Version 2 or a later +version. A copy of this license is included with this package. This +package comes with no warranty of any kind. diff --git a/NONE-CKUBU/src/djbdns/qlogtools-3.1/TARGETS b/NONE-CKUBU/src/djbdns/qlogtools-3.1/TARGETS new file mode 100644 index 0000000..6c28f94 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/qlogtools-3.1/TARGETS @@ -0,0 +1,37 @@ +all +choose +compile +conf_bin.c +conf_man.c +direntry.h +fork.h +installer +installer.o +instcheck +instcheck.o +insthier.o +instshow +instshow.o +load +multipipe +multipipe.o +multitail +multitail.o +programs +qfilelog +qfilelog.o +select.h +spipe +spipe.o +svcfns.o +systime.h +tai2tai64n +tai2tai64n.o +tai64n2tai +tai64n2tai.o +tai64n_decode.o +tai64n_encode.o +tai_decode.o +tai_encode.o +teepipe +teepipe.o diff --git a/NONE-CKUBU/src/djbdns/qlogtools-3.1/TODO b/NONE-CKUBU/src/djbdns/qlogtools-3.1/TODO new file mode 100644 index 0000000..e69de29 diff --git a/NONE-CKUBU/src/djbdns/qlogtools-3.1/VERSION b/NONE-CKUBU/src/djbdns/qlogtools-3.1/VERSION new file mode 100644 index 0000000..6eb898f --- /dev/null +++ b/NONE-CKUBU/src/djbdns/qlogtools-3.1/VERSION @@ -0,0 +1 @@ +qlogtools 3.1 diff --git a/NONE-CKUBU/src/djbdns/qlogtools-3.1/bool.h b/NONE-CKUBU/src/djbdns/qlogtools-3.1/bool.h new file mode 100644 index 0000000..531c8f3 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/qlogtools-3.1/bool.h @@ -0,0 +1,8 @@ +#ifndef QLOGTOOLS__BOOL__H__ +#define QLOGTOOLS__BOOL__H__ + +typedef int bool; +#define false 0 +#define true (0==0) + +#endif diff --git a/NONE-CKUBU/src/djbdns/qlogtools-3.1/choose b/NONE-CKUBU/src/djbdns/qlogtools-3.1/choose new file mode 100755 index 0000000..56e77a1 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/qlogtools-3.1/choose @@ -0,0 +1,20 @@ +#!/bin/sh +# WARNING: This file was auto-generated. Do not edit! + +result="$4" + +case "$1" in + *c*) ./compile $2.c >/dev/null 2>&1 || result="$3" ;; +esac + +case "$1" in + *l*) ./load $2 >/dev/null 2>&1 || result="$3" ;; +esac + +case "$1" in + *r*) ./$2 >/dev/null 2>&1 || result="$3" ;; +esac + +rm -f $2.o $2 + +exec cat "$result" diff --git a/NONE-CKUBU/src/djbdns/qlogtools-3.1/choose.sh b/NONE-CKUBU/src/djbdns/qlogtools-3.1/choose.sh new file mode 100644 index 0000000..feff2da --- /dev/null +++ b/NONE-CKUBU/src/djbdns/qlogtools-3.1/choose.sh @@ -0,0 +1,18 @@ + +result="$4" + +case "$1" in + *c*) ./compile $2.c >/dev/null 2>&1 || result="$3" ;; +esac + +case "$1" in + *l*) ./load $2 >/dev/null 2>&1 || result="$3" ;; +esac + +case "$1" in + *r*) ./$2 >/dev/null 2>&1 || result="$3" ;; +esac + +rm -f $2.o $2 + +exec cat "$result" diff --git a/NONE-CKUBU/src/djbdns/qlogtools-3.1/compile b/NONE-CKUBU/src/djbdns/qlogtools-3.1/compile new file mode 100755 index 0000000..2b7cfdb --- /dev/null +++ b/NONE-CKUBU/src/djbdns/qlogtools-3.1/compile @@ -0,0 +1,4 @@ +#!/bin/sh +source=$1; shift +base=`echo "$source" | sed -e s:\\\\.c$::` +exec gcc -W -Wall -O -g -I. -o ${base}.o -c $source ${1+"$@"} diff --git a/NONE-CKUBU/src/djbdns/qlogtools-3.1/conf-bin b/NONE-CKUBU/src/djbdns/qlogtools-3.1/conf-bin new file mode 100644 index 0000000..d1fe68e --- /dev/null +++ b/NONE-CKUBU/src/djbdns/qlogtools-3.1/conf-bin @@ -0,0 +1,3 @@ +/usr/local/bin + +Programs will be installed in this directory. diff --git a/NONE-CKUBU/src/djbdns/qlogtools-3.1/conf-cc b/NONE-CKUBU/src/djbdns/qlogtools-3.1/conf-cc new file mode 100644 index 0000000..5ccc2db --- /dev/null +++ b/NONE-CKUBU/src/djbdns/qlogtools-3.1/conf-cc @@ -0,0 +1,3 @@ +gcc -W -Wall -O -g + +This will be used to compile .c files. diff --git a/NONE-CKUBU/src/djbdns/qlogtools-3.1/conf-ld b/NONE-CKUBU/src/djbdns/qlogtools-3.1/conf-ld new file mode 100644 index 0000000..477b8b7 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/qlogtools-3.1/conf-ld @@ -0,0 +1,3 @@ +gcc -s + +This will be used to link .o and .a files into an executable. diff --git a/NONE-CKUBU/src/djbdns/qlogtools-3.1/conf-man b/NONE-CKUBU/src/djbdns/qlogtools-3.1/conf-man new file mode 100644 index 0000000..8439de9 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/qlogtools-3.1/conf-man @@ -0,0 +1,4 @@ +/usr/local/man + +Man pages will be installed in subdirectories of this directory. An +unformatted man page foo.1 will go into .../man1/foo.1. diff --git a/NONE-CKUBU/src/djbdns/qlogtools-3.1/conf_bin.c b/NONE-CKUBU/src/djbdns/qlogtools-3.1/conf_bin.c new file mode 100644 index 0000000..864ba5c --- /dev/null +++ b/NONE-CKUBU/src/djbdns/qlogtools-3.1/conf_bin.c @@ -0,0 +1 @@ +const char conf_bin[] = "/usr/local/bin"; diff --git a/NONE-CKUBU/src/djbdns/qlogtools-3.1/conf_man.c b/NONE-CKUBU/src/djbdns/qlogtools-3.1/conf_man.c new file mode 100644 index 0000000..54afb96 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/qlogtools-3.1/conf_man.c @@ -0,0 +1 @@ +const char conf_man[] = "/usr/local/man"; diff --git a/NONE-CKUBU/src/djbdns/qlogtools-3.1/direntry.h b/NONE-CKUBU/src/djbdns/qlogtools-3.1/direntry.h new file mode 100644 index 0000000..0302ebe --- /dev/null +++ b/NONE-CKUBU/src/djbdns/qlogtools-3.1/direntry.h @@ -0,0 +1,8 @@ +#ifndef DIRENTRY_H +#define DIRENTRY_H + +#include +#include +#define direntry struct dirent + +#endif diff --git a/NONE-CKUBU/src/djbdns/qlogtools-3.1/direntry.h1 b/NONE-CKUBU/src/djbdns/qlogtools-3.1/direntry.h1 new file mode 100644 index 0000000..f737676 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/qlogtools-3.1/direntry.h1 @@ -0,0 +1,8 @@ +#ifndef DIRENTRY_H +#define DIRENTRY_H + +#include +#include +#define direntry struct direct + +#endif diff --git a/NONE-CKUBU/src/djbdns/qlogtools-3.1/direntry.h2 b/NONE-CKUBU/src/djbdns/qlogtools-3.1/direntry.h2 new file mode 100644 index 0000000..0302ebe --- /dev/null +++ b/NONE-CKUBU/src/djbdns/qlogtools-3.1/direntry.h2 @@ -0,0 +1,8 @@ +#ifndef DIRENTRY_H +#define DIRENTRY_H + +#include +#include +#define direntry struct dirent + +#endif diff --git a/NONE-CKUBU/src/djbdns/qlogtools-3.1/fork.h b/NONE-CKUBU/src/djbdns/qlogtools-3.1/fork.h new file mode 100644 index 0000000..41773b6 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/qlogtools-3.1/fork.h @@ -0,0 +1,7 @@ +#ifndef FORK_H +#define FORK_H + +extern int fork(); +extern int vfork(); + +#endif diff --git a/NONE-CKUBU/src/djbdns/qlogtools-3.1/fork.h1 b/NONE-CKUBU/src/djbdns/qlogtools-3.1/fork.h1 new file mode 100644 index 0000000..b786255 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/qlogtools-3.1/fork.h1 @@ -0,0 +1,7 @@ +#ifndef FORK_H +#define FORK_H + +extern int fork(); +#define vfork fork + +#endif diff --git a/NONE-CKUBU/src/djbdns/qlogtools-3.1/fork.h2 b/NONE-CKUBU/src/djbdns/qlogtools-3.1/fork.h2 new file mode 100644 index 0000000..41773b6 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/qlogtools-3.1/fork.h2 @@ -0,0 +1,7 @@ +#ifndef FORK_H +#define FORK_H + +extern int fork(); +extern int vfork(); + +#endif diff --git a/NONE-CKUBU/src/djbdns/qlogtools-3.1/installer b/NONE-CKUBU/src/djbdns/qlogtools-3.1/installer new file mode 100755 index 0000000000000000000000000000000000000000..c3b884855303781c650f3fefb5d719aed9cba6a5 GIT binary patch literal 8088 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 P9lXHd4yz#Q?za8~-ImE> literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/qlogtools-3.1/installer.c b/NONE-CKUBU/src/djbdns/qlogtools-3.1/installer.c new file mode 100644 index 0000000..0452a7e --- /dev/null +++ b/NONE-CKUBU/src/djbdns/qlogtools-3.1/installer.c @@ -0,0 +1,103 @@ +#include +#include +#include +#include +#include +#include +#include +#include "installer.h" + +static int sourcedir; + +static char buffer[4096]; + +static void diesys(const char* msg) +{ + fprintf(stderr, "installer error: %s:\n %s\n", msg, + strerror(errno)); + exit(1); +} + +static void diefsys(const char* msg, const char* filename) +{ + fprintf(stderr, "installer error: %s '%s':\n %s\n", msg, filename, + strerror(errno)); + exit(1); +} + +static void setmodes(const char* filename, + unsigned uid, unsigned gid, unsigned mode) +{ + if (chown(filename, uid, gid) == -1) + diefsys("Could not set owner or group for", filename); + if (chmod(filename, mode) == -1) + diefsys("Could not set mode for", filename); +} + +void c(int dir, const char* subdir, const char* filename, + unsigned uid, unsigned gid, unsigned mode) +{ + int fdin; + int fdout; + size_t rd; + size_t wr; + size_t offset; + + if (fchdir(sourcedir) == -1) + diesys("Could not change base directory"); + if ((fdin = open(filename, O_RDONLY)) == -1) + diefsys("Could not open input file", filename); + + if (fchdir(dir) == -1) + diesys("Could not change base directory"); + if (subdir && chdir(subdir) == -1) + diefsys("Could not change directory to", subdir); + if ((fdout = open(filename, O_WRONLY | O_CREAT | O_TRUNC, 0600)) == -1) + diefsys("Could not create output file", filename); + + while ((rd = read(fdin, buffer, sizeof buffer)) != 0) { + if (rd == (unsigned)-1) diefsys("Error reading from input file", filename); + for (offset = 0; offset < rd; offset += wr) { + if ((wr = write(fdout, buffer+offset, rd-offset)) == (unsigned)-1) + diefsys("Error writing to output file", filename); + } + } + if (close(fdout) == -1) diefsys("Error closing output file", filename); + close(fdin); + setmodes(filename, uid, gid, mode); +} + +void d(int dir, const char* subdir, + unsigned uid, unsigned gid, unsigned mode) +{ + if (fchdir(dir) == -1) + diesys("Could not change base directory"); + if (mkdir(subdir, 0700) == -1 && errno != EEXIST) + diefsys("Could not create directory", subdir); + setmodes(subdir, uid, gid, mode); +} + +int opendir(const char* dir) +{ + int fd; + if (chdir(dir) == -1) + diefsys("Could not change directory to", dir); + if ((fd = open(".", O_RDONLY)) == -1) + diefsys("Could not open directory", dir); + return fd; +} + +int opensubdir(int dir, const char* subdir) +{ + if (fchdir(dir) == -1) + diesys("Could not change base directory in opensubdir"); + return opendir(subdir); +} + +int main(void) +{ + sourcedir = opendir("."); + umask(077); + insthier(); + return 0; +} diff --git a/NONE-CKUBU/src/djbdns/qlogtools-3.1/installer.h b/NONE-CKUBU/src/djbdns/qlogtools-3.1/installer.h new file mode 100644 index 0000000..f5f57bb --- /dev/null +++ b/NONE-CKUBU/src/djbdns/qlogtools-3.1/installer.h @@ -0,0 +1,13 @@ +#ifndef SPAC__INSTALLER__H__ +#define SPAC__INSTALLER__H__ + +int opendir(const char* dir); +int opensubdir(int dir, const char* subdir); +void d(int dir, const char* subdir, + unsigned uid, unsigned gid, unsigned mode); +void c(int dir, const char* subdir, const char* file, + unsigned uid, unsigned gid, unsigned mode); + +extern void insthier(void); + +#endif diff --git a/NONE-CKUBU/src/djbdns/qlogtools-3.1/installer.o b/NONE-CKUBU/src/djbdns/qlogtools-3.1/installer.o new file mode 100644 index 0000000000000000000000000000000000000000..bb2966f07df7ed94c7963cdfa1ab0ce96f4bb296 GIT binary patch literal 15536 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 AL;wH) literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/qlogtools-3.1/instcheck b/NONE-CKUBU/src/djbdns/qlogtools-3.1/instcheck new file mode 100755 index 0000000000000000000000000000000000000000..a085a80228a1e42ff86e4ca15a2c129fce5b7f72 GIT binary patch literal 7328 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 literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/qlogtools-3.1/instcheck.c b/NONE-CKUBU/src/djbdns/qlogtools-3.1/instcheck.c new file mode 100644 index 0000000..3ca798c --- /dev/null +++ b/NONE-CKUBU/src/djbdns/qlogtools-3.1/instcheck.c @@ -0,0 +1,90 @@ +#include +#include +#include +#include +#include +#include +#include "installer.h" + +static struct stat statbuf; + +int bin; +int man; + +static void diesys(const char* msg) +{ + fprintf(stderr, "installer error: %s:\n %s\n", msg, + sys_errlist[errno]); + exit(1); +} + +static void diefsys(const char* msg, const char* filename) +{ + fprintf(stderr, "installer error: %s '%s':\n %s\n", msg, filename, + sys_errlist[errno]); + exit(1); +} + +static void warn(const char* subdir, const char* filename, const char* msg) +{ + printf("instcheck warning: File '%s%s%s' %s.\n", + subdir ? subdir : "", subdir ? "/" : "", filename, msg); +} + +static void testmode(int dir, const char* subdir, const char* filename, + unsigned uid, unsigned gid, unsigned mode, unsigned type) +{ + if (fchdir(dir) == -1) + diesys("Could not change base directory"); + if (subdir && chdir(subdir) == -1) + return; + if (stat(filename, &statbuf) == -1) { + if (errno == ENOENT) + warn(subdir, filename, "is missing"); + else + diefsys("Could not stat file", filename); + } + if ((statbuf.st_mode & S_IFMT) != type) + warn(subdir, filename, "is the wrong type of file"); + if (uid != (unsigned)-1 && statbuf.st_uid != uid) + warn(subdir, filename, "has wrong owner"); + if (gid != (unsigned)-1 && statbuf.st_gid != gid) + warn(subdir, filename, "has wrong group"); + if ((statbuf.st_mode & 07777) != mode) + warn(subdir, filename, "has wrong permissions"); +} + +void c(int dir, const char* subdir, const char* filename, + unsigned uid, unsigned gid, unsigned mode) +{ + testmode(dir, subdir, filename, uid, gid, mode, S_IFREG); +} + +void d(int dir, const char* subdir, + unsigned uid, unsigned gid, unsigned mode) +{ + testmode(dir, 0, subdir, uid, gid, mode, S_IFDIR); +} + +int opendir(const char* dir) +{ + int fd; + if (chdir(dir) == -1) + diefsys("Could not change directory to", dir); + if ((fd = open(".", O_RDONLY)) == -1) + diefsys("Could not open directory", dir); + return fd; +} + +int opensubdir(int dir, const char* subdir) +{ + if (fchdir(dir) == -1) + diesys("Could not change base directory in opensubdir"); + return opendir(subdir); +} + +int main(void) +{ + insthier(); + return 0; +} diff --git a/NONE-CKUBU/src/djbdns/qlogtools-3.1/instcheck.o b/NONE-CKUBU/src/djbdns/qlogtools-3.1/instcheck.o new file mode 100644 index 0000000000000000000000000000000000000000..1e60bf804f8fe27079c4588bbbc222e320042c2b GIT binary patch literal 16288 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 literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/qlogtools-3.1/insthier.c b/NONE-CKUBU/src/djbdns/qlogtools-3.1/insthier.c new file mode 100644 index 0000000..736c082 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/qlogtools-3.1/insthier.c @@ -0,0 +1,27 @@ +#include "installer.h" +#include "conf_bin.c" +#include "conf_man.c" + +void insthier(void) { + int bin = opendir(conf_bin); + int man = opendir(conf_man); + int man1; + + c(bin, 0, "multipipe", -1, -1, 0755); + c(bin, 0, "multitail", -1, -1, 0755); + c(bin, 0, "qfilelog", -1, -1, 0755); + c(bin, 0, "spipe", -1, -1, 0755); + c(bin, 0, "tai2tai64n", -1, -1, 0755); + c(bin, 0, "tai64n2tai", -1, -1, 0755); + c(bin, 0, "teepipe", -1, -1, 0755); + + d(man, "man1", -1, -1, 0755); + man1 = opensubdir(man, "man1"); + c(man1, 0, "multipipe.1", -1, -1, 0644); + c(man1, 0, "multitail.1", -1, -1, 0644); + c(man1, 0, "qfilelog.1", -1, -1, 0644); + c(man1, 0, "spipe.1", -1, -1, 0644); + c(man1, 0, "tai2tai64n.1", -1, -1, 0644); + c(man1, 0, "tai64n2tai.1", -1, -1, 0644); + c(man1, 0, "teepipe.1", -1, -1, 0644); +} diff --git a/NONE-CKUBU/src/djbdns/qlogtools-3.1/insthier.o b/NONE-CKUBU/src/djbdns/qlogtools-3.1/insthier.o new file mode 100644 index 0000000000000000000000000000000000000000..0f5eceb718de4a2d02e769379d6b8b8d148df065 GIT binary patch literal 5960 zcmdT{U2IfE6rQ`cKU=n}Emf?7x&%a;*e!)h1Ql8-KQ+b>ei8{py1TultJ~eOyX7ya z4~-916A_~ci5ef!#Q0+3ON+*zfInz7JouoAiTVKYpo#cqB*F8|oU=Qf-uuFnp3S{; z&NtsVXXeb@xp$x4^61u>=P40SZB%tjP^IGWy56tVezin(s)60Rwom;Y{{+w#+@{af z^?~X01G9fnxPh7LB!knRodxA%&HGu?|M&efnBOd>H~qDq*x>YUdS-Ks>2m|KXCeym zB^M&9Ukdf#?%zIjKE7{Y|2bM)uid*l*^%&*OOoy0BCoAUsaV?E)aoZUBpyiI(+aS^ z$?H(c?^Avp;7~`5SPf)qjxifos6=98!jCJ}{EWQZ39%Dz%{Q zzo|90K&iw^V$+B&(iOw5Q*phy^-bF$x0s8>AR8nvhL#Y%N7AC%KM>Q=c@ar6L<*|KQJ#-jR}!VquqN(WU%cM!IQu62DyWg1wj8U)5IQ|vXqFw?9P zqd>YuB2~wtmU=jvF(@o-7$zcVJ(HDkPob2{6nd~cmWkz2H`Dy^kb25H+Sb|}Kgp}R z0tK?9ovZP1vTY#QIhagM`7Z*3Kg2t}6A?V0V=N^M7exEIj;4!uA6D#0Tna90O<0@g z%{Bg!PSIsd#7l8^t-!wRK znRORr6@sb{8yy|qEn?$$%XC~5=Ejb+M8ZQHzgLu%Dvkj-a`CPsH}y0?qNsdVMo zcr}xywpuprm}upokV#jAqg9n2$y75covlUz11gW!JkmE2cak)FFFD(CCi;a`46Y?Xsn?FMsVy>af zmOc*pstuAZ`K6s;%w6sa?0;v3zrashF$F_=h5h?&kaQWpz(+|5oBs^Ye>D>^|5m!h zU+VG_VVH|M{#A_xlH6~a+Fkqwc%GE7{8vKiPhU#&@}DM5YAG?%4s-qsHb}b5eK!Py zOBWvq>tR^p`k$e`u<@%~jg!;~^}~@M^A{Xn+ipyFW;wsq9~i{t&Jq@uzmxNeKl0<9 z>*oKKV+xNBaA}v12pE>Q{-~*Y_JJ<` zS1n(tu0L#d?}GOgHXF&~+<80ci|BIe*FsoW{uBmAve7iPyPLn(;V9rWsH@i{tKF2>foEstwS;1q0SM)Xf zIU(WKwcZJKm2vJsT)vz)h;Q$z2Q}O9QGJQOgK^=bg~(q5#JBkqy4U;@MSL0G3C3Oi zNr!(2+pkCP-*@=S+5RYkf6?Km+5Rbl|EI%W&-S$lev%Issm}oO7Bi0dVwX!jmqhTF zTYS8ugumY5Z{_$~EWTa;y$*jT^MeTfF^B&I^Ph|0pLY0p=D!`mpLO_$nE!bM|3`=a z4D&BV@c(xBFEGCmg(q?M8^0d)^J1UEIA0)GN1O>OV35d3C%C*<$8`qQC!rl*#^uJB{en0$M}*kRaReV`d(6S7*dDiV z)JL9+BNmSM@34K^!olCi_L~mAn(g~ zcw-4vsegK`nRCu}9{1ie_c1&E;Z44q-7XiCZzg%Lgk~5}o zfa0jHY$;d4J8VJl7SRutI>t%icY-OdO2kzOf61Q`9g|#+kH$t|e!XKWjq4&icBVPKT#Il~ zZf9P?DUOee1Xs(Igi#Kn)hl1(H61JR0OFJNC>i=EHOYvmX1uDU83%@hg2~PeUS^liOeS2Rd+#WalF{8bm zVOn+3EUIU5Bi0oiV1b=MgS9u`)*kIQy5J4CyFbdJv0&Kffm3&+-(Wp3##x^~6pD25 zK)=Bv(LlI67$cWJEXI0v#DYcu38)3pT%SJ}W}AG?jW@Q}dTYJcp^r3|-1GjqxXp!` zMe~*}qW%>@OkX#9*jCy2B^_L%xktGq$#K&jL~~b?tRLYtMy9~jwMw&aOc`y{3+c3V9!0kU z=t1gcTg8NKhAQ6hncWqWK1i0&G%C*e%m*uGFro(C{4BBYYV@P{p-Mfu_~asm9k>SV z9ioRj(o1=FBku^QRw*Q3S6VwXiV4*`c7#g5Il1A2_5!TTXHGSllOO+HH(%DLU(wBJ z0MMq7=|dY9TGsh=S~pXhlXVw#bIe+eRJwU$HfH)*&sfufg)ANb3 z9WV`$sSc)dDb*;YXv}sIotGGkpISN>dn+-v6=97OcK%ChFEOdiZS5+u{X^JFgiSQJ zkZea_JC`c7o5SL~sJRR#ntOEt!gh<4xpSNQBiUlY=APT!FUWQWZ_Z^mhrL3$&BRzMM%PVYs}PnrpYC6Y>A4la0b2I<^xQ+!^TRLF=~GM0Gb2w!<5S=A0n!p* z+A*u7OgBGdqG%=&~L zM`~m<$sa)0%onx&r!g#{!KdUZ<2i9DNG}r$5to?))oyVSsBFjRy%wsQc*w@TsFLT&S=CM~g>}T=3v-@A`uuq8j zaJSZmBVzayI$a#+i#QSJ2pFnP=3vSWZG42-+(W`XJ#a|)R-f0*3(e+d`r-3A&E{)X zY8sOgQ@(ud+jI{3%#%LzOp`gSrAtrfiIhuUcPjSJudz{!Lw5Fj#X-!_4?QuHHkKcx zpM%A#ni%v`g*ca!Ib`VnNSv7V*=M!Shy_CLa@ayZiZKuk)bvHV0}3dzBOHj4uss&( zk1A2W(aXK?ULKAc@!rUe^$K2MBeC^LYb2ud`NIPWz27Q$!3}g7kytPgzhWWJOIeg# zYc!@*HgvPT{*V!j2BQI6GW@|1yT2zG3WOrtS)3by)#9qJ3p1OM#*9F~4)cfCX0mvN z437|GnF%7#1rCeIW-CZbIw^KWNHzWOSPkCP{h^vpyns7Y3=D&CU7mA&3-|(D6L^dv z@YCRrfWM1UJ_BC=c{)u;`V-i+J_X+oUWCOm30?vIDW+E&crK=?0bU9pBG>n~FxSo! zS58qu;jqBzMTop!pC+KwqdxB5oimiXEAO%VL;>Y%#YMk!wvb)( zlqB$IDTey{1n@R`)Qz5!Mo(FzM``p_X`VHjr=iKCCJG+Q-<3C%yF2G`dphv`(YVem zQrS1aWk0AL8t1Yil~p=$>fdX)HUM8D+R;2^O&%qYvkN-K5y|mho;BWKY_+0k?pJ|3 z_5H`R9TRfP-7FDj%Wq4(yiTv{yjDr{Xux%`g0 zx>YWHb|D=hVUJrSHv1b!&$V^=+hyEs>wFQwZ#OQYMK)t)f-e(XGWi>7Li~P`H7OJw zmvxlCg)S3;9eFC3Bwi-;LSfehr#Va{+sAa|vUG=$A#UF{@>r_cd6`_ zekPvNvw}Y__)CHx7yNy}&k3Gipz>6g3VxN~^@3-&!#3S`<9em4DbN}8hm|_-wcgt5 zwcfR>Z4uv*{$I`BcrQL_82(P?#TSi0EXus$h!OB=jm_1De>?MT5BGa}{qbJr?H&ln z2l{Mo#B9q0fml2k3C~g5VT%PqehLs$G-ObId`j^eft|SbK!GjN?Kk|)8|ZECiTV2i z?Y-TIl^XNX(Go|4HoLD2M&$JO1-sB-1Zi;d^4xZw&N#fgB7J>;(dj{w&2sLZ}5;|0vFhCnrt@#Ah48e`)E7!(7heUL;MFZY{k zfzci(vug++M{H=+?S4vc*PEz-It}GpwMd4Nm|7 literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/qlogtools-3.1/instshow.c b/NONE-CKUBU/src/djbdns/qlogtools-3.1/instshow.c new file mode 100644 index 0000000..d8698c3 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/qlogtools-3.1/instshow.c @@ -0,0 +1,98 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include "installer.h" + +#define DENTRY_SLOTS 16 +static const char* dentries[DENTRY_SLOTS] = {0}; +static int last_dentry = 0; + +static void showmode(char type, unsigned mode) +{ + putchar(type); + putchar((mode & 0400) ? 'r' : '-'); + putchar((mode & 0200) ? 'w' : '-'); + putchar((mode & 0100) ? + (mode & 04000) ? 's' : 'x' : + (mode & 04000) ? 'S' : '-'); + putchar((mode & 040) ? 'r' : '-'); + putchar((mode & 020) ? 'w' : '-'); + putchar((mode & 010) ? + (mode & 02000) ? 's' : 'x' : + (mode & 02000) ? 'S' : '-'); + putchar((mode & 04) ? 'r' : '-'); + putchar((mode & 02) ? 'w' : '-'); + putchar((mode & 01) ? + (mode & 01000) ? 't' : 'x' : + (mode & 01000) ? 'T' : '-'); +} + +static void show(char type, + int dir, const char* subdir, const char* filename, + unsigned uid, unsigned gid, unsigned mode) +{ + showmode(type, mode); + + if (uid == (unsigned)-1) fputs(" N/A", stdout); + else printf(" %8d", uid); + if (gid == (unsigned)-1) fputs(" N/A", stdout); + else printf(" %8d", gid); + + putchar(' '); + fputs(dentries[dir], stdout); + putchar('/'); + if (subdir) { + fputs(subdir, stdout); + putchar('/'); + } + puts(filename); +} + +void c(int dir, const char* subdir, const char* filename, + unsigned uid, unsigned gid, unsigned mode) +{ + show('-', dir, subdir, filename, uid, gid, mode); +} + +void d(int dir, const char* subdir, + unsigned uid, unsigned gid, unsigned mode) +{ + show('d', dir, 0, subdir, uid, gid, mode); +} + +int opendir(const char* dir) +{ + if (last_dentry >= DENTRY_SLOTS) { + fputs("instshow: error: Too many open directories!\n", stderr); + exit(1); + } + dentries[last_dentry] = strdup(dir); + return last_dentry++; +} + +int opensubdir(int dir, const char* subdir) +{ + char* str; + if (last_dentry >= DENTRY_SLOTS) { + fputs("instshow: error: Too many open directories!\n", stderr); + exit(1); + } + str = malloc(strlen(dentries[dir])+1+strlen(subdir)+1); + strcpy(str, dentries[dir]); + strcat(str, "/"); + strcat(str, subdir); + dentries[last_dentry] = str; + return last_dentry++; +} + +int main(void) +{ + puts(" type/mode owner group path"); + insthier(); + return 0; +} diff --git a/NONE-CKUBU/src/djbdns/qlogtools-3.1/instshow.o b/NONE-CKUBU/src/djbdns/qlogtools-3.1/instshow.o new file mode 100644 index 0000000000000000000000000000000000000000..03140ce8f11422575c3abc57fed2d0f2b85ce45a GIT binary patch literal 15544 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 N6u+SGI4ezv{{zQeVnqM| literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/qlogtools-3.1/load b/NONE-CKUBU/src/djbdns/qlogtools-3.1/load new file mode 100755 index 0000000..301b9be --- /dev/null +++ b/NONE-CKUBU/src/djbdns/qlogtools-3.1/load @@ -0,0 +1,3 @@ +#!/bin/sh +main="$1"; shift +exec gcc -s -o "$main" "$main.o" ${1+"$@"} diff --git a/NONE-CKUBU/src/djbdns/qlogtools-3.1/multipipe b/NONE-CKUBU/src/djbdns/qlogtools-3.1/multipipe new file mode 100755 index 0000000000000000000000000000000000000000..93605e210910d519cfc722e9c5eb209154c60a8e GIT binary patch literal 11144 zcmeHN4RBOdmcIFe4utMT5(o(Lz>X$rT10edHQG(0yfD2C5*V$)Av8&cM4Rqx_iKnF zN}LAd?Ms-Ho?wQ7>~3Dc4~gj@k=A=UE*knguDg3h)$^kEh0AyMjYy!b`c zqLDckD=A|N2S|^66)fmF;l7jg6k!!tU&R zKRDw3M8@6VoR|yLSG=z^lit8gt6^ZKpI5Tfg4uweBunK+=<)Gc?4SIUeqI`BTYu%E zOC!zIk+x{Eqq<}9mDN`+@+M;5h1`EPEYT2`E?>=U%K4D`Q-RLHQ^s2vn+{rz$0>M{ zFUCW1RAyL&m4HseGX)QgK@1nQKP>k3o+z3req@;>D}vHIoP)=OrxXwQPySBEL*t=B zeo>#)mYp{Qt@PtxV>?OwkCryHP#>~Xh>8aKRrrHBctprk|B9&F$ucl@JNJu5nrk~= zMg~w~cN#-fc0Efm)p8yU7|6Ya(;S-7K3WASjPxw$RQ z+S}U05KUReD)lf zL^(Kb9jCO1WiBMZ6gcGz5yAws5gSh4$TDif?YV``U&lqrPLUJ_b=dH1{s8W_;WAf| zTDc9Exs!0khEtxDrP7Am^V) z`p9AS=OJKLA{@*+F&AoTz|lW;#ols-ja58_PuE;OYQ(paTIQWGl!~7d4@H(4;{4Bu zr;y6@asDU7Qz&H~=lp}jQ;24IIe#zl6jGTU&i^g(6iS&+&VP@13ZYCp=f6ulg-&K2 z=i|gv$YfS<{#N2CR5E_fuP2^DB(s3?-zJ_yBcpJBCGivz88_#b5l^9zVVqw=JcU4J z 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 V$`UX8wu?S|zQw&^2T{+}{~tO(PxJr) literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/qlogtools-3.1/multipipe.1 b/NONE-CKUBU/src/djbdns/qlogtools-3.1/multipipe.1 new file mode 100644 index 0000000..00c6543 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/qlogtools-3.1/multipipe.1 @@ -0,0 +1,44 @@ +.TH multipipe 1 +.SH NAME +multipipe \- supervise an pipeline of commands +.SH SYNOPSIS +.B multipipe +.I [ directory ] +.SH DESCRIPTION +.B multipipe +starts one supervise process for each subdirectory of the current +directory. +.B multipipe +skips subdirectory names starting with dots. +Each supervised processes is piped a copy of standard input sent to +.BR multipipe . +.P +Every five seconds, +.B multipipe +checks for subdirectories again. +If it sees a new subdirectory, it starts a new supervise process. +If a subdirectory is removed, it closes the pipe to that supervise +process. +Directory named +.I supervise +or with names starting with a period are ignored. +.P +If +.B multipipe +is given a command-line argument, it switches to that directory when it +starts. +.P +If +.B multipipe +is sent either the +.IR INT , +.IR QUIT , +or the +.I TERM +signal, or it reaches end of file on standard input, it runs +.B svc -dx +on each command to shut it down, and waits for it to exit. +.SH RETURN VALUE +Exits 0 when all the commands are shut down. +.SH SEE ALSO +supervise, svscan diff --git a/NONE-CKUBU/src/djbdns/qlogtools-3.1/multipipe.c b/NONE-CKUBU/src/djbdns/qlogtools-3.1/multipipe.c new file mode 100644 index 0000000..2ea19be --- /dev/null +++ b/NONE-CKUBU/src/djbdns/qlogtools-3.1/multipipe.c @@ -0,0 +1,346 @@ +/* multipipe -- pipe output to multiple programs + * Copyright (C) 2000 Bruce Guenter + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "select.h" +#include "direntry.h" +#include "bool.h" +#include "svcfns.h" + +void err(const char* msg) +{ + write(2, "multipipe: Error: ", 18); + write(2, msg, strlen(msg)); + write(2, "\n", 1); +} + +void err2(const char* msg1, const char* msg2) +{ + write(2, "multipipe: Error: ", 18); + write(2, msg1, strlen(msg1)); + write(2, msg2, strlen(msg2)); + write(2, "\n", 1); +} + +void set_ndelay(int fd) +{ + int flags = fcntl(fd, F_GETFL, 0); + fcntl(fd, F_SETFL, flags | O_NONBLOCK); +} + +#define BUFSIZE 8192 +static char buffer[BUFSIZE]; +static unsigned buf_start = 0; +static unsigned buf_end = 0; +static bool buf_eof = false; +#define buf_wrapped (buf_end < buf_start) +#define buf_left (buf_start-buf_end + (buf_wrapped ? -1 : BUFSIZE-1)) +#define buf_len (buf_end-buf_start + (buf_wrapped ? BUFSIZE : 0)) + +struct reader +{ + ino_t inode; + const char* name; + pid_t pid; + int fd; + unsigned buf_pos; + bool marked; + struct reader* next; +}; + +static struct reader* readers = 0; + +void reset_buf_start(void) +{ + struct reader* reader; + bool wrapped = (buf_end < buf_start); + + buf_start = buf_end; + for(reader = readers; reader; reader = reader->next) { + unsigned bp = reader->buf_pos; + if(bp < buf_start && (!wrapped || bp >= buf_end)) + buf_start = bp; + } + if(buf_start == buf_end) { + buf_end = buf_start = 0; + for(reader = readers; reader; reader = reader->next) + reader->buf_pos = 0; + } +} + +void read_input(void) +{ + unsigned readable = buf_wrapped ? buf_left : BUFSIZE-buf_end; + ssize_t rd; + if(readable >= buf_left) + readable = buf_left; + rd = read(FD_STDIN, buffer+buf_end, readable); + if(rd <= 0) + buf_eof = true; + else + buf_end = (buf_end + rd) % BUFSIZE; +} + +void write_output(struct reader* reader) +{ + unsigned writable = buf_wrapped ? BUFSIZE-buf_end : buf_len; + ssize_t wr = write(reader->fd, buffer+reader->buf_pos, writable); + if(wr > 0) { + reader->buf_pos = (reader->buf_pos + wr) % BUFSIZE; + reset_buf_start(); + } +} + +void add_reader(const char* name, ino_t inode) +{ + struct reader* r = malloc(sizeof(struct reader)); + r->name = strdup(name); + r->inode = inode; + r->pid = 0; + r->fd = -1; + r->buf_pos = buf_end; + r->next = readers; + readers = r; +} + +bool del_reader(pid_t pid) +{ + struct reader* curr = readers; + struct reader* prev = 0; + while(curr) { + struct reader* next = curr->next; + if(curr->pid == pid) { + if(prev) + prev->next = next; + else + readers = next; + free((char*)curr->name); + free(curr); + return true; + } + prev = curr; + curr = next; + } + return false; +} + +void start_reader(struct reader* reader) +{ + int fd[2]; + if(pipe(fd)) { + err2("Could not create pipe to reader ", reader->name); + return; + } + reader->pid = start_supervise(reader->name, fd[0], FD_STDOUT); + close(fd[0]); + reader->fd = fd[1]; + set_ndelay(reader->fd); +} + +void stop_reader(struct reader* reader) +{ + stop_supervise(reader->name, reader->pid); +} + +void stop_readers(void) +{ + struct reader* reader; + for(reader = readers; reader; reader = reader->next) + stop_reader(reader); +} + +void reap_children(void) +{ + pid_t pid; + int status; + while((pid = waitpid(0, &status, WNOHANG)) > 0) { + if(!del_reader(pid)) + err("Caught exit of unknown process"); + } +} + +void scan_dirs(void) +{ + direntry* entry; + DIR* dir = opendir("."); + struct reader* reader; + struct reader* prev; + + if(!dir) { + err("Unable to read directory"); + return; + } + + /* Clear all the marked flags */ + for(reader = readers; reader; reader = reader->next) + reader->marked = false; + + /* For each directory entry, mark the corresponding reader. + * If a matching reader is not found, make one. */ + while((entry = readdir(dir)) != 0) { + struct stat statbuf; + if(entry->d_name[0] == '.' || !strcmp(entry->d_name, "supervise")) + continue; + if(stat(entry->d_name, &statbuf)) + continue; + if(!S_ISDIR(statbuf.st_mode)) + continue; + for(reader = readers; reader; reader = reader->next) + if(reader->inode == statbuf.st_ino) { + reader->marked = true; + break; + } + if(!reader) { + add_reader(entry->d_name, statbuf.st_ino); + start_reader(readers); + readers->marked = true; + } + } + closedir(dir); + + reap_children(); + + /* Clean up any reader that was removed from the directory */ + prev = 0; + reader = readers; + while(reader) { + struct reader* next = reader->next; + + if(!reader->marked) { + /* Don't stop it, since the directory is no longer there */ + /* stop_reader(reader); */ + if(prev) + prev->next = next; + else + readers = next; + close(reader->fd); + free((char*)reader->name); + free(reader); + } + prev = reader; + reader = next; + } +} + +#define EVENT_INTR 0 +#define EVENT_ALRM 1 +static int selfpipe[2]; + +void read_event(void) +{ + char buf[1]; + if(read(selfpipe[0], buf, 1) != 1) + return; + switch(buf[0]) { + case EVENT_INTR: + buf_eof = true; + break; + case EVENT_ALRM: + scan_dirs(); + alarm(5); + break; + default: + err("Unknown event sent to self?!?"); + } +} + +void write_event(int event) +{ + char buf[1]; + buf[0] = event; + if(write(selfpipe[1], buf, 1) != 1) + err("Could not send event to self"); +} + +void handle_signal(int sig) +{ + int event; + switch(sig) { + case SIGALRM: event = EVENT_ALRM; break; + default: event = EVENT_INTR; break; + } + write_event(event); +} + +void main_loop(void) +{ + for(;;) { + struct reader* reader; + fd_set readfds; + fd_set writefds; + int fdmax = selfpipe[0]; + FD_ZERO(&readfds); + FD_ZERO(&writefds); + FD_SET(selfpipe[0], &readfds); + if(buf_eof) { + if(buf_start == buf_end) + return; + } + else if(buf_left) + FD_SET(FD_STDIN, &readfds); + for(reader = readers; reader; reader = reader->next) { + if(reader->buf_pos != buf_end) { + int fd = reader->fd; + FD_SET(fd, &writefds); + if(fd > fdmax) + fdmax = fd; + } + } + if(select(fdmax+1, &readfds, &writefds, 0, 0) == -1) + continue; + /* If an event arrived, skip all other I/O */ + if(FD_ISSET(selfpipe[0], &readfds)) { + read_event(); + continue; + } + if(FD_ISSET(FD_STDIN, &readfds)) + read_input(); + for(reader = readers; reader; reader = reader->next) + if(FD_ISSET(reader->fd, &writefds)) + write_output(reader); + } +} + +int main(int argc, char** argv) +{ + if(argc > 1 && chdir(argv[1]) != 0) { + err2("Couldn't chdir to ", argv[1]); + return 1; + } + if(pipe(selfpipe)) { + err("Couldn't create self pipe"); + return 1; + } + scan_dirs(); + signal(SIGALRM, handle_signal); + signal(SIGINT, handle_signal); + signal(SIGTERM, handle_signal); + signal(SIGQUIT, handle_signal); + alarm(5); + set_ndelay(FD_STDIN); + main_loop(); + stop_readers(); + return 0; +} diff --git a/NONE-CKUBU/src/djbdns/qlogtools-3.1/multipipe.o b/NONE-CKUBU/src/djbdns/qlogtools-3.1/multipipe.o new file mode 100644 index 0000000000000000000000000000000000000000..7a2cb2881c4d6d785d8729d478a307a7233404c5 GIT binary patch literal 26904 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 literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/qlogtools-3.1/multitail.1 b/NONE-CKUBU/src/djbdns/qlogtools-3.1/multitail.1 new file mode 100644 index 0000000..4e79949 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/qlogtools-3.1/multitail.1 @@ -0,0 +1,47 @@ +.TH multitail 1 +.SH NAME +multitail \- watch output sent to a file +.SH SYNOPSIS +.B multitail +[ +.B \-E +] [ +.B \-e +] +.I filename +.SH DESCRIPTION +.B multitail +opens the named file for reading, and outputs data appended to the +file as it grows. +If a new file is put in place of the original filename, the original +file is closed and the file is reopened. +.SH OPTIONS +.TP +.B \-E +Seek to the end of file before producing any output from the original +file. +This is the default. +.TP +.B \-e +Do not seek to the end of file before producing any output. +This will cause the entire file to be output. +.SH SEE ALSO +multilog, tail(1) +.SH NOTES +This program is useful for watching output written to the +.I current +log file produced by +.BR multitail . +.P +.B multitail +is very similar to GNU +.BR tail . +An equivalent command would be: + +.EX +tail -n -0 --follow=name FILENAME +.EE +.SH RESTRICTIONS +.B multitail +can't count lines or bytes from the beginning or end of the file. +If you need these features, download and install GNU textutils. diff --git a/NONE-CKUBU/src/djbdns/qlogtools-3.1/multitail.c b/NONE-CKUBU/src/djbdns/qlogtools-3.1/multitail.c new file mode 100644 index 0000000..d6ae7fe --- /dev/null +++ b/NONE-CKUBU/src/djbdns/qlogtools-3.1/multitail.c @@ -0,0 +1,140 @@ +/* multitail -- Watch the output from a utility such as multilog + * Copyright (C) 2000 Bruce Guenter + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include +#include +#include +#include +#include +#include +#include "systime.h" +#include "bool.h" + +#define BLKSZ 4096 + +const int FD_STDIN = 0; +const int FD_STDOUT = 1; +const int FD_STDERR = 2; + +void print(const char* msg) +{ + write(FD_STDERR, msg, strlen(msg)); +} + +void warn(const char* msg) +{ + print("multitail: "); + print(msg); + print("!\n"); +} + +void die(const char* msg) +{ + warn(msg); + exit(1); +} + +void warn2(const char* msg1, const char* msg2) +{ + print("multitail: "); + print(msg1); + print(msg2); + print("!\n"); +} + +void usage(const char* error) +{ + if(error) + warn(error); + print("Usage: multitail [-Ee] filename\n" + " -E Seek to end of file before output (default)\n" + " -e Do not seek to end of file before output\n"); + exit(1); +} + +static const char* opt_filename; +static bool opt_seek_end = true; + +void parse_args(int argc, char** argv) +{ + int ch; + while((ch = getopt(argc, argv, "Ee")) != -1){ + switch(ch) { + case 'E': opt_seek_end = true; break; + case 'e': opt_seek_end = false; break; + default: usage(0); + } + } + if(optind+1 != argc) + usage("Must include exactly one filename"); + opt_filename = argv[optind]; +} + +void copy(int fd) +{ + char buf[BLKSZ]; + ssize_t rd; + while((rd = read(fd, buf, BLKSZ)) != 0) { + if(rd == -1) + die("Could not read from file"); + while(rd) { + ssize_t wr = write(FD_STDOUT, buf, rd); + if(wr == -1) + die("Could not write to stdout"); + rd -= wr; + } + } +} + +void multitail(void) +{ + int fd = 0; + ino_t inode = 0; + bool first = true; + + for(;; sleep(1)) { + struct stat buf; + if(!fd) { + while((fd = open(opt_filename, O_RDONLY)) == -1) { + warn("Could not open file, sleeping for one minute"); + sleep(60); + } + if(first && opt_seek_end) { + if(lseek(fd, 0, SEEK_END) == -1) + die("Could not seek to end of file"); + first = false; + } + fstat(fd, &buf); + inode = buf.st_ino; + } + copy(fd); + if(stat(opt_filename, &buf) == -1) + warn("Could not stat file"); + else if(buf.st_ino != inode) { + close(fd); + fd = 0; + } + } +} + +int main(int argc, char* argv[]) +{ + parse_args(argc, argv); + multitail(); + return 1; +} diff --git a/NONE-CKUBU/src/djbdns/qlogtools-3.1/multitail.o b/NONE-CKUBU/src/djbdns/qlogtools-3.1/multitail.o new file mode 100644 index 0000000000000000000000000000000000000000..41b6c822a8121bbd9d9cbc881f0e3102f13e817f GIT binary patch literal 15112 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 literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/qlogtools-3.1/qfilelog b/NONE-CKUBU/src/djbdns/qlogtools-3.1/qfilelog new file mode 100755 index 0000000000000000000000000000000000000000..3fb4b0af04827f3f0522aaab5320e3829d38d236 GIT binary patch literal 6920 zcmeHMe{5Y<9Y1|tx3>+pZfr21x+`?p0e!GBmJKZ4ZiU^#0|&TRGg$l9zOD~n-z)Fk zx)mo3pF^IH&Sq+YM06TWh#E3AnmNMSQLsQX7Gfg5lm#TYrOZ_1M-$kdpU=7H+jqT# zkeK)fiQnel&-s4N_xnBPeDC>j-|byj$FGT0RVk5(x=K+SpKWW(zbh48qE*AKQ&DBB zI(4p^4WEG43Yu(z$ zwQFMeY;3jeKZngBZn|NM4k`H%e?CX1d_JyuxJLr9W*U{&&zR%W(zcKdM=!R)zRQhR=uiJ%+#jL->m|f4cf?)Yg{g={s)i z?K^t2nfAP!$hqz93e%#KvtX@C?n=2TpW2a0q*Zr*Ak(RKCUP0rCv&+>wmqHgOt`6R zM&*);F4dXN=94Phm&~YqI+^TKc{c~UY!3DeY2x=LQW>=~mvWP8Q@nM<#`e{*)v?Rj z6+ZvS2mF~dV_sD0B`nLh|C|)2PDBmR8S>7?4e&DWS+Oj@%UU9D1$bE#jQ%Kj6M_xs4L_9)_DZR)(y2j5<>{F|PH))S2Rm z5v~7-(uQMH78m|0Z>&W}-vuU!%^H zOl;Qr9n|Mhx1j^ItUBIWd}f_JGw{1*qd{0<$VqgZw(DG z7fz|>=sZg~dq>a16q>#fwGg2AntRS6QtVspu!V+Ni=$69mtW=cd1}<}CA)T*E8@rjJn>=LdmSgs zWv4J*KCHbLwmhbXrAJ#l>4zLU${fD=u=DOS&ftyZVLnIie(i_JaI;fg|MucL8p68XDcAXO~kv;p{En zx$zOYI>pzWl`lAhzvd$?H9a3iQ}63&80MM7CHDHK$eKUQ{ivC&cB)35^?&Uix=TOo zt+(pDd4EHLoIdX`v-{EJ(BvfhR47;7wP^SN1JxqXAwJK^8=cZMQOw!f(O#g_+Y$fB zbsU49Bsb5f3pvUbsADy&;ezO8?*>Hk?ncRO8=!xpq;-9^X-s2FD zyLGExTYS@Duv-w-eD zuD=uyVx4qzX1!x$I5x||=7?Ev_9J{gOZ4Yaqx$oS z9Z3Z6BWcVedXwDuv|P=@)#8B*Ys>9PTG@WLuiw>{l`zV;v?>CaDCOe z)mQSxi|=~(W0>~?9|Il)9tS=NJPUK-7;rss8aM!~#ngHN*Z@2qv(W~w1-1dd2j_oDM?AK*Fe1b92de+T-Hz%yR3-CsaG4t`sRe;hg& z(itKCCFtBF&JXY$(_6Ui2H!>={b^pXtYv{!sJ_SacL~P-JnGM8ePG-dgXcNd7viZ( z{>}~MuLsWvVP~WsCFZXKe39(6--_HbyL*9Mn6s~XaMpc1$p0@N{|s=~rpQQqt)dHW zmf_6LXL+Zbsx2G%$>K7jFEuD2@9yK~y+2@l50z6#u%24XyJ1%+gxrHmg$9 zr4_jIOcH-PVnb8de>C`KG>UR=$@-Q!pF-U`ShM0U`_zyj>isaM_#0ZkV=xEeFZ^$a zzZ5x_rc8sTvjQI`A(y%&X`f91QgZ?Rhp4TjtQ zcF6xB{Ai{;WL^}$&)@+GxBnpOXd>r$<@>zv6wX)J|0f}TesQ7H8pn_F|2b@f?elXB z#WIfJ_QLu>*z!?J|K%K({~H`I<2Tb`CjZhee*X=&FW)hrT!acpxINJYkH9AAFYiI) z#=lQTsoca*a4h6+0$2tGo<+f=NGOfs Z|NMWjr`iU`9yDEfhOfOCBvB5x^>4l1ct8LE literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/qlogtools-3.1/qfilelog.1 b/NONE-CKUBU/src/djbdns/qlogtools-3.1/qfilelog.1 new file mode 100644 index 0000000..082ea19 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/qlogtools-3.1/qfilelog.1 @@ -0,0 +1,25 @@ +.TH qfilelog 1 +.SH NAME +qfilelog \- log messages to a single file +.SH SYNOPSIS +.B qfilelog +.I filename +.SH DESCRIPTION +.B qfilelog +appends from standard input to a single named file. +If +.B qfilelog +is sent the +.I HUP +signal, it syncs, closes, and re-opens the output file. +.SH RETURN VALUE +Exits 0 when it successfully reaches end-of-file on standard input. +Otherwise it exits 1 after printing an error diagnostic to standard +error. +.SH SEE ALSO +cyclog(1), +splogger(8) +.SH NOTES +If any of the write operations fail, +.B qfilelog +prints a warning to standard error and pauses for 60 seconds. diff --git a/NONE-CKUBU/src/djbdns/qlogtools-3.1/qfilelog.c b/NONE-CKUBU/src/djbdns/qlogtools-3.1/qfilelog.c new file mode 100644 index 0000000..33dd760 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/qlogtools-3.1/qfilelog.c @@ -0,0 +1,129 @@ +#include +#include +#include +#include +#include +#include + +#define PAUSE sleep(60) + +void errmsg(const char* m) +{ + write(2, m, strlen(m)); +} + +void warn_sys(const char* m) +{ + errmsg("qfilelog: warning: "); + errmsg(m); + errmsg(": "); + errmsg(strerror(errno)); + errmsg("\n"); +} + +void warn(const char* m) +{ + errmsg("qfilelog: warning: "); + errmsg(m); + errmsg(".\n"); +} + +void fatal(const char* m) +{ + errmsg("qfilelog: fatal error: "); + errmsg(m); + errmsg("\n"); + exit(1); +} + +#define BUFSIZE 4096 +static int fd; +static char* filename; +static char buf[BUFSIZE]; + +ssize_t do_read(void) +{ + ssize_t rd = read(0, buf, BUFSIZE); + if(rd == -1) + rd = 0; + return rd; +} + +void do_write(ssize_t rd) +{ + ssize_t offset = 0; + ssize_t wr; + while(offset < rd) { + wr = write(fd, buf+offset, rd-offset); + if(wr == -1) { + warn_sys("Can't write, pausing"); + PAUSE; + } + else + offset += wr; + } +} + +void do_close(void) +{ + if(fd >= 0) { + while(fsync(fd) == -1) { + warn_sys("Error syncing the file, pausing"); + PAUSE; + } + while(close(fd) == -1) { + warn_sys("Error closing the file, pausing"); + PAUSE; + } + } +} + +void do_open(void) +{ + do { + fd = open(filename, O_WRONLY|O_CREAT|O_APPEND, 0666); + if(fd == -1) { + warn_sys("Error opening the output file, pausing"); + PAUSE; + } + } while(fd == -1); +} + +void loop(void) +{ + ssize_t rd; + for(;;) { + rd = do_read(); + if(rd) + do_write(rd); + } +} + +void catch_hup(int flag) +{ + signal(SIGHUP, catch_hup); + do_close(); + do_open(); +} + +void catch_int(int flag) +{ + do_close(); + exit(0); +} + +int main(int argc, char* argv[]) +{ + if(argc < 2) { + fatal("usage: filelog filename\n"); + return 1; + } + filename = argv[1]; + signal(SIGHUP, catch_hup); + signal(SIGINT, catch_int); + signal(SIGTERM, catch_int); + fd = -1; + do_open(); + loop(); + return 0; /* Never reached! */ +} diff --git a/NONE-CKUBU/src/djbdns/qlogtools-3.1/qfilelog.o b/NONE-CKUBU/src/djbdns/qlogtools-3.1/qfilelog.o new file mode 100644 index 0000000000000000000000000000000000000000..6f2e2c649cb5d395c273036d5aca6cbafbdc4e72 GIT binary patch literal 12896 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 literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/qlogtools-3.1/qlogselect.1 b/NONE-CKUBU/src/djbdns/qlogtools-3.1/qlogselect.1 new file mode 100644 index 0000000..2427ee1 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/qlogtools-3.1/qlogselect.1 @@ -0,0 +1,46 @@ +.TH qlogselect 1 +.SH NAME +qlogselect \- selectively copy entries from a qmail log file +.SH SYNOPSIS +.B qlogselect +.I [from PATTERN] +.I [start TIME] +.I [end TIME] +.I [stripstatus] +.I [addstatus] +.SH DESCRIPTION +This program selectively copies entries from a qmail log file on +standard input to standard output. + +All times must be expressed either as year-month-day, +or as the number of seconds since the Unix epoch (January 1, 1970). +.SH OPTIONS +.TP +.I from PATTERN +Only output messages that have a envelope sender address that matches +.IR PATTERN . +.TP +.I start TIME +Only output lines that are stamped with a time that is on or after the +named time. +.TP +.I end TIME +Only output lines that are stamped with a time that is before the +named time. +.TP +.I stripstatus +Strip all the status lines from the input. +.TP +.I addstatus +Recalculate and insert status lines. +.SH EXAMPLES +To show all the messages sent from the mailing list owner at +vger.rutgers.edu: + +.EX + qlogselect from owner-.*-outgoing@vger.rutgers.edu +.EE +.SH SEE ALSO +accustamp(1), +qmail(7), +splogger(8) diff --git a/NONE-CKUBU/src/djbdns/qlogtools-3.1/qlogtools-3.1.spec b/NONE-CKUBU/src/djbdns/qlogtools-3.1/qlogtools-3.1.spec new file mode 100644 index 0000000..1ebc903 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/qlogtools-3.1/qlogtools-3.1.spec @@ -0,0 +1,42 @@ +Name: qlogtools +Summary: Log processing tools +Version: 3.1 +Release: 1 +Copyright: GPL +Group: Utilities/System +Source: qlogtools-3.1.tar.gz +BuildRoot: %{_tmppath}/qlogtools +Packager: Bruce Guenter +Requires: daemontools + +%description +This package is a set of tools that are useful in analyzing or producing +logs from qmail and other packages. + +%prep +%setup + +%build +echo %{_bindir} >conf-bin +echo %{_mandir} >conf-man +echo gcc $CFLAGS >conf-cc +echo gcc -s >conf-ld +make + +%install +rm -fr %{buildroot} +mkdir -p %{buildroot}{%{_bindir},%{_mandir}} +echo %{buildroot}%{_bindir} >conf-bin +echo %{buildroot}%{_mandir} >conf-man +rm conf_bin.c conf_man.c insthier.o installer instcheck +make installer instcheck +./installer +./instcheck + +%clean +rm -rf %{buildroot} + +%files +%defattr(-,root,root) +%{_bindir}* +%{_mandir}/man1/* diff --git a/NONE-CKUBU/src/djbdns/qlogtools-3.1/select.h b/NONE-CKUBU/src/djbdns/qlogtools-3.1/select.h new file mode 100644 index 0000000..2bc2044 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/qlogtools-3.1/select.h @@ -0,0 +1,11 @@ +#ifndef SELECT_H +#define SELECT_H + +/* sysdep: +sysselect */ + +#include +#include +#include +extern int select(); + +#endif diff --git a/NONE-CKUBU/src/djbdns/qlogtools-3.1/select.h1 b/NONE-CKUBU/src/djbdns/qlogtools-3.1/select.h1 new file mode 100644 index 0000000..fe725b6 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/qlogtools-3.1/select.h1 @@ -0,0 +1,10 @@ +#ifndef SELECT_H +#define SELECT_H + +/* sysdep: -sysselect */ + +#include +#include +extern int select(); + +#endif diff --git a/NONE-CKUBU/src/djbdns/qlogtools-3.1/select.h2 b/NONE-CKUBU/src/djbdns/qlogtools-3.1/select.h2 new file mode 100644 index 0000000..2bc2044 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/qlogtools-3.1/select.h2 @@ -0,0 +1,11 @@ +#ifndef SELECT_H +#define SELECT_H + +/* sysdep: +sysselect */ + +#include +#include +#include +extern int select(); + +#endif diff --git a/NONE-CKUBU/src/djbdns/qlogtools-3.1/spipe b/NONE-CKUBU/src/djbdns/qlogtools-3.1/spipe new file mode 100755 index 0000000000000000000000000000000000000000..1f4ccc98995b88305de779405198c8e312ff4d50 GIT binary patch literal 7968 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 literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/qlogtools-3.1/spipe.1 b/NONE-CKUBU/src/djbdns/qlogtools-3.1/spipe.1 new file mode 100644 index 0000000..a5a35ca --- /dev/null +++ b/NONE-CKUBU/src/djbdns/qlogtools-3.1/spipe.1 @@ -0,0 +1,33 @@ +.TH spipe 1 +.SH NAME +spipe \- supervise an pipeline of commands +.SH SYNOPSIS +.B spipe +.I dir1 dir2 ... +.SH DESCRIPTION +.B spipe +is designed for the purpose of allowing supervise to manage a complete +pipeline of commands. +.B spipe +executes supervise on all of the named directories, inserting a pipe +between each pair of supervised processes. +The supervise processes are started from last to first, to ensure that +each producer of output has a consumer to pipe its data to. +If +.B spipe +is sent either the +.IR INT , +.IR QUIT , +or the +.I TERM +signal, it runs +.B svc -dx +on each command to shut it down, and waits for it to exit. +The processes are shut down from first to last, to ensure that each +producer stops writing its output before shutting down the corresponding +consumer. +.SH RETURN VALUE +Exits 0 when all the commands are shut down. +If a fatal error is encountered, it exits. +.SH SEE ALSO +supervise, svscan diff --git a/NONE-CKUBU/src/djbdns/qlogtools-3.1/spipe.c b/NONE-CKUBU/src/djbdns/qlogtools-3.1/spipe.c new file mode 100644 index 0000000..755a4b2 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/qlogtools-3.1/spipe.c @@ -0,0 +1,132 @@ +/* spipe -- supervise a pipeline of programs + * Copyright (C) 2000 Bruce Guenter + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include "bool.h" +#include "svcfns.h" + +static unsigned part_count; +static pid_t* part_pids; +static int selfpipe[2]; +static const char** part_names; + +void err(const char* msg) +{ + fputs("spipe: Error: ", stderr); + fputs(msg, stderr); + fputc('\n', stderr); +} + +void die(const char* msg) +{ + err(msg); + exit(1); +} + +bool is_pipe(const char* p) +{ + return p[0] == '|' && p[1] == 0; +} + +void usage(const char* msg) +{ + if(msg) + err(msg); + fputs("usage: spipe dir1 dir2 ...\n", stderr); + exit(1); +} + +void parse_args(int argc, char** argv) +{ + --argc, ++argv; + if(argc <= 0) + usage("Too few command-line arguments"); + + part_count = argc; + part_names = (const char**)argv; + part_pids = calloc(part_count, sizeof(pid_t)); + memset(part_pids, 0, sizeof(pid_t) * part_count); + + if(pipe(selfpipe)) + die("Could not create self pipe"); +} + +void stop_parts() +{ + unsigned i; + for(i = 0; i < part_count; i++) + if(part_pids[i]) + stop_supervise(part_names[i], part_pids[i]); +} + +void start_parts() +{ + int fdout = FD_STDOUT; + int fdout_next = -1; + unsigned i; + for(i = part_count; i > 0; i--) { + int fdin = FD_STDIN; + if(i > 1) { + int p[2]; + if(pipe(p)) { + die("Could not create pipe"); + stop_parts(); + exit(1); + } + fdin = p[0]; + fdout_next = p[1]; + } + if(!start_supervise(part_names[i-1], fdin, fdout)) { + stop_parts(); + exit(1); + } + close(fdout); + close(fdin); + fdout = fdout_next; + } +} + +void handle_intr(int sig) +{ + write(selfpipe[1], "", 1); +} + +void mainloop() +{ + char buf[1]; + signal(SIGINT, handle_intr); + signal(SIGQUIT, handle_intr); + signal(SIGTERM, handle_intr); + read(selfpipe[0], buf, 1); + stop_parts(); + exit(0); +} + +int main(int argc, char** argv) +{ + parse_args(argc, argv); + start_parts(); + mainloop(); + return 0; +} diff --git a/NONE-CKUBU/src/djbdns/qlogtools-3.1/spipe.o b/NONE-CKUBU/src/djbdns/qlogtools-3.1/spipe.o new file mode 100644 index 0000000000000000000000000000000000000000..ff310dadbd510a46ed71af8990120e485535d403 GIT binary patch literal 14752 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 literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/qlogtools-3.1/svcfns.c b/NONE-CKUBU/src/djbdns/qlogtools-3.1/svcfns.c new file mode 100644 index 0000000..ca4dacb --- /dev/null +++ b/NONE-CKUBU/src/djbdns/qlogtools-3.1/svcfns.c @@ -0,0 +1,99 @@ +/* spipe -- supervise a pipeline of programs + * Copyright (C) 2000 Bruce Guenter + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ +#include +#include +#include +#include +#include +#include "fork.h" +#include "bool.h" +#include "svcfns.h" + +void exec_supervise(const char* dir, int fdin, int fdout) +{ + if(fdin != FD_STDIN) { + close(FD_STDIN); + dup2(fdin, FD_STDIN); + close(fdin); + } + if(fdout != FD_STDOUT) { + close(FD_STDOUT); + dup2(fdout, FD_STDOUT); + close(fdout); + } + execlp("supervise", "supervise", dir, 0); + err("Could not exec supervise"); + exit(1); +} + +pid_t start_supervise(const char* dir, int fdin, int fdout) +{ + pid_t pid = fork(); + switch(pid) { + case -1: + err("fork() failed while trying to run supervise"); + return 0; + case 0: + exec_supervise(dir, fdin, fdout); + default: + return pid; + } +} + +bool stop_supervise(const char* dir, pid_t svcpid) +{ + int status; + pid_t pid = fork(); + if(pid == -1) { + err("fork failed while trying to run svc"); + return false; + } + if(pid == 0) { + execlp("svc", "svc", "-dx", dir, 0); + err("exec of svc failed"); + return false; + } + while(waitpid(pid, &status, WUNTRACED) != pid) { + if(errno != EINTR) { + err("Could not wait for svc to exit"); + return false; + } + } + if(!WIFEXITED(status)) { + err("svc crashed"); + return false; + } + if(WEXITSTATUS(status)) { + err("svc failed"); + return false; + } + while(waitpid(svcpid, &status, WUNTRACED) != svcpid) + if(errno != EINTR) { + err("Could not wait for supervise to exit"); + return false; + } + if(!WIFEXITED(status)) { + err("supervise crashed"); + return false; + } + if(WEXITSTATUS(status)) { + err("supervise failed"); + return false; + } + return true; +} diff --git a/NONE-CKUBU/src/djbdns/qlogtools-3.1/svcfns.h b/NONE-CKUBU/src/djbdns/qlogtools-3.1/svcfns.h new file mode 100644 index 0000000..0afe863 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/qlogtools-3.1/svcfns.h @@ -0,0 +1,16 @@ +#ifndef SVC_FNS__H__ +#define SVC_FNS__H__ + +#define FD_STDIN 0 +#define FD_STDOUT 1 +#define FD_STDERR 2 + +#include +void exec_supervise(const char* dir, int fdin, int fdout); +pid_t start_supervise(const char* dir, int fdin, int fdout); +int stop_supervise(const char* dir, pid_t svcpid); + +/* Required external functions */ +extern void err(const char* msg); + +#endif diff --git a/NONE-CKUBU/src/djbdns/qlogtools-3.1/svcfns.o b/NONE-CKUBU/src/djbdns/qlogtools-3.1/svcfns.o new file mode 100644 index 0000000000000000000000000000000000000000..dcca03300de0d107857b354a3d0ec963d18eb940 GIT binary patch literal 8648 zcmbVReQZ+y(?f@g2@s)gfB5F#B|u_J0;sGnnjc78W`-4&-^12 zFMrroes>Og%9mzt+$^p574i}|kKCJKaC_`xX`t&Iit+NB5`Inz?@Lf>n|6N&4cRfX zC6qqpt~UFhL2oCs(T4K@>Gz-ISEc&aOQq*$d!h|zkGfU4d>u3!pSc`AITUR;cF}D$ zd|pp+z*Fv0vu_W@`D;)4?^3O2>$TEL6sbzP8N!^$fZv6{-FF$`O2~P+|T%SvRpJkYGyvPKm$X_Y@S1|{4dE<^DH2u zxBS}2)!KJ}sa(TU<}ek=CoA)5*&}DTd_{T2Id-vjtJ96Q_6TwP7C*@g81MR$@>@OS zH+nghtMS>Ps2!ipMkBqm$!JqAa1M;W<&vl+~f4AXF%z-Eaa#19eHVU7)>|2fP8E=P!p^HFn4AucIk*I^qBEy(0t z5r8~_0u~Gynt<#Jgj8ce;s{EWkmMiR49x<&E};4(7)+*6P5C8PB5bYg=q+%1Xz@fQDXcrVQ`FlFAVfnEdY7nJYh;5) zI_(Ek#c8gL(~ORhR9H_Gc#1&aR?CZpvPR0?`bu}}E8Tgb$~)%!`UQ9jh!MD2*8jpw z;405X2x_&JiiNgJZZum;rrJg_Zc$Vq#ltY#;^b&LSB#BfKJMX(R53P=Q_n1{h>?6g z3!tP$YJ~tF?69tu_S-x6+OON47wiuE$c(+Sb6~H%>gkW{FVEO3FU$p>J^GY=dhe4L zCilb7KKf>8;Y@DKaq~{0lye|68M8ZI z$|jv$-gTxD8P@?b>_V;7bjB5;R)1+CRhY~a!6j=6f$>__eQZQF6RpW5V(rizxb3{YfEIo=g;y$NIqYdX?UXP=VmM~L;Z*T3v0 z{LXNsE8Nr-c6!1aWZfL(o_6Q+!nkOOD=^;Iti;)QSC#hfNU?xC)yaWSc%4R<3^-V>X z5BXRV^Kx$j4z>>STt~n*kV#bo$EhSs3^JScpnH!K%N4f7z1wMWdZ-16l&TtbXo&%4 z@A9mMO!bune41KI^fMdvpgv|}9@Nk5mprJCS)hW$LcZZFS%>hv0} z>I0;Lv&H-$ea!I;h+(^w=X#J?HnT)kRoE);Sq(7jTg{sz2e8CGW__!wdE>6P{88A< zchiEbwU*fKeJ{sBW_OU8B_1;CQEfHAR$D!*s(Msg?PIIWo>kSz{zI94SwmagZh|l^PsBo$6>6h_Z$TLE=WZ;KQZi|hKm8l15$(V_FHrl1y{qcWOz6# zU%agmg_{F~SCW6t=HW&oFZcihXF5I(?7n-@>2@~9HpMoIQm&X8%fYQl_E+X5@1oiK zXd>HIER41#zcP}{726JF^J6aDD~qk0V(n($kh5DV3K_A&wVy}@j5l3BhtcswL8OzJ zoRA!(tM1v}0Mf~P35GGAFSt&H9~y)*GwP<)aeTwWF#KUxsH@oB-QD4|^rS{IiJU4& zYkRDH9aToeiiZ!ni4kbsf@;T^E2OfCn46k*MJ$_cWfkYvZ z8$(RlKtvH6%^y6Nf}+IWks}p@HPH%_H+sNdJD-qqzz#RoLc_k3WOJ!T483NM`97w1 zjW;RjEZz84gNSi>BT%=vjc~p{Dk~u#nP-cbv2cr_&rfRKPVqS|w;cZ!2B^g`=+py( ziDCbJln@>wIvJwa37zJcP(OkX9zYLMC)N+=$gJNWV5U!iM5B5<67roD0U}ek5Aa&? zPdUnf=LzFuY%_iWF!Z?*emXr*@xP;kz_UH)F#%XD`y?&MX~UlFxP64|4K;C%?4K|? zI6lKifvGkAvyRd@MT$872Kcc(*X3J)VJ_x!otE#JFn`de6WcR(8kkz~x2#nfaZ<$i z`00r4IsO^IxE8>Abc5pm!Ppq4?oYtN#L&s_>y@is)p%D^_eaoEEB}YrDih8V^Ir-- zGymTJX8J_Sl~`<`4XW|3rtU@PsTKbTiqG~Ke>wcj_cq$S zW$-iWhu<%1#ee%#&;fKvHQv>X?{ydq>V?F=ZyK-^gH@wYTEUu`V1Bh$2;y`|89{M->YGrxLJosnl!Pm`$cg%y|2{`7%dCY>0v=4r@^0{vw9A8#y z=_de3|NQRat!M9X*LXd^4>}@MD9C5+>;yc;f{@D(#)qFT&?~;~io&n=htB zvNW*~df*FEt@jDYr4fEexGnKK`v5=60O4~O63&mlN*x4&P#?dQu>N)gflyz5gOrjG zUDPtpJLhh~(GRX7_QUT_tk1FU*Yx$cV;YXDi~SS{=lokpp4RkrKX~6o!hCS`vY#I! z2*mktU7k{KRULjuIP2d|@(c6mU)69u|G#N|um*9G=QMpie?HjE{Fl-J$@%be)hfcx zd5jtQJrr-#Jo*PT9QQ2OZA!!OtY`dd8m{Y~oCp85hUMkKmjO1xLN*oWGi}QQH(C2-UFz^r#5Gbu0uWsu93n3;A{2a+& zHE`ZPj~aNHI#OGloOk1CqpGnlm`F?eQaP-4#1ECiU+$H%H z4aa)oI|0&PR3qzyeqJW|H4R67UeEv4aMV|SWkC*9Zyp!V$8y4XT%3Qif%ARxbAw!Q>EQ>h}_ky1IU!q0j4q*Qu$`_i^^mb#^rWdY*9uXaC~{&VKasmU&cV R9`j)y@d#dkI3Fbm@qhjS{|5j7 literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/qlogtools-3.1/systime.h b/NONE-CKUBU/src/djbdns/qlogtools-3.1/systime.h new file mode 100644 index 0000000..d64110b --- /dev/null +++ b/NONE-CKUBU/src/djbdns/qlogtools-3.1/systime.h @@ -0,0 +1,2 @@ +#include +#include diff --git a/NONE-CKUBU/src/djbdns/qlogtools-3.1/tai.h b/NONE-CKUBU/src/djbdns/qlogtools-3.1/tai.h new file mode 100644 index 0000000..c7b5dd0 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/qlogtools-3.1/tai.h @@ -0,0 +1,19 @@ +#ifndef QLOGTOOLS__TAI__H__ +#define QLOGTOOLS__TAI__H__ + +#include "bool.h" + +struct tai +{ + unsigned long seconds; + unsigned long nanoseconds; +}; +typedef struct tai tai; + +tai* tai64n_decode(const char* str, const char** endptr); +bool tai64n_encode(const tai* t, char* buf); + +tai* tai_decode(const char* str, const char** endptr); +bool tai_encode(const tai* t, char* buf); + +#endif diff --git a/NONE-CKUBU/src/djbdns/qlogtools-3.1/tai2tai64n b/NONE-CKUBU/src/djbdns/qlogtools-3.1/tai2tai64n new file mode 100755 index 0000000000000000000000000000000000000000..8fe82717a2bf2852926053892bcb305fb0223b9a GIT binary patch literal 5616 zcmd^DZ%kX)6~F!i7(#5)CJRZ};!ci6)Zsb=QqnfvGoj?Mxl`7ZHBw1!gKc01oZ{z= zR*g#JCCZa=YIV{yO`FDteL#vdMf(s@ZDlZ8NHlF?(WF&vwV-TSoszcfPczgd@y@yL z9Q*MSY15>A+ClG~bAI>y?m73qd+&SZl_x@-cAHJG*u~>QdKHR;R03Q97sn}Nv7V)_S-Yqk2WThSb^`2*VUTVxJjh`PSBM((l|>=b(C^h4E^8sY z52H?x*FlFk#6w^0mR*^zV1vbW`Fox|$-Ci+ntCKdy z?f&dULw|P^)8A8&=ekG{lm$Ta7v4gYT>Ye>F&eX-6s->p>%3Mq_o)Jh)DFuwG`UPv?dbA z)8K@|7)!+AC5C(r-YNm6PDgS2rI}gLNZc_soIFNaIR^H zMhn%8&kyIFg~x}ud0kzkelV7nwxleXaDK+v@U{szua9LDZr;yo=7y{A9UvAy4`mi| zz)>@Ay5@_mH7>6x?y7~mXQu)d`U9Ba`f?FummPf^+Vv&re_91TmUw+u`hP_qOS^s^ ze9%(%eAuP`_BmC*s%HMQdid$C#o4?|5$fXHq*RMHDil$86$pRN=dm_5Tk!&Pq@J49 z?8PNnTHY+(s($SV296(?hB%S_%Jf=IM5x&O#fyVA?R)h-D>8*!xdiWK)1_pM!Z-v#nPuy^!bq!jJA0i)t1k0Q(hSg|h&xc))u@MqDYJ zkP!!df{iDoz2!BqXK;ODjwca2HJi?;C*Q<+o;?=qna_M2P{xbZp6||jF3ipczaH$C z73;UV^qcBp#R=#D1UMxCz zEchHuZC=ej18d_;3!U3wd`p>S&+B@EAb30Ji~@3)pA?;Rs}imXxSVh~0&1?)z90e%O0i|3Qkljb zixWulH(cGO^{whdzPCgA%f2-=*Yu#>D?+&gK2&7=U4qRp6;jYfvHAvDekbz#vz8k2PDNT9$seHaF(>(oU6Ix&cZx|g z#_S3z`8|X>;!seP-l3Cr1w0|>GgRR7MA={{QBQgcX;uz0&eMC7=OjWn&tnz&TS*6~ ze#Q$_kBiz>($%CnKP)9Vo{JO@^Co?MbgSe~Q#;ZB=Ze3(t%+u6oWCLc2htyrw#JJ? z2M<2tZS08m4n{}3E&jd!=B7RVJ-ZDPzIXpmoBgSQls2kGdxd{+M2n9e7ygl?7WW6+ zyPC9Uzwq~ur2PX?_;B^dUK~liIBaNb)M)u;d^9zf99idtp=~ri6h#7A$A>iRe-Q3k zd<^ahaG)(2i)vBfj}L?sqtW4bcpwH`_JqGrOOB=>p`pIf2aV8Yba=225+3>Y|<%;)p8Kz!^Uh4Wj-AB8qEpU>w2J)j7ZL6DE{ zAS?fQz_2c?4~5@PdE)at8?AT$CQm?vnLkD6;}r1^Gm$jGrQek=Soi|IAEeNL2bf@> zB_6rrTVR;;^ZRswUO?t=4CGk46DNqz^FLm#V3-&uzE^tX8?OgOPJw~>nP2|@iV^V` z2a>kt$DgKV{xaoXru?@oe13im|B(2!T;Tsv5!uB5m$KGt<^R~i$6tyltMozf@A&5+ z7VGEy_%l(;218l%S^e`6hHH=c{66OYk4<9dAiO@A&vm^HZRY&^e~Bsj;Np1M3EbFc zJ!9eX_t1Ibw=t14^H?uh_yzi&DiELR + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ +#include +#include "tai.h" + +int main() +{ + char buf[4096]; + while(fgets(buf, 4096, stdin)) { + const char* ptr = 0; + tai* t = tai_decode(buf, &ptr); + if(ptr) { + char tmp[32]; + tai64n_encode(t, tmp); + fputs(tmp, stdout); + fputs(ptr, stdout); + } + else + fputs(buf, stdout); + fflush(stdout); + } + return 0; +} diff --git a/NONE-CKUBU/src/djbdns/qlogtools-3.1/tai2tai64n.o b/NONE-CKUBU/src/djbdns/qlogtools-3.1/tai2tai64n.o new file mode 100644 index 0000000000000000000000000000000000000000..8f2e0c899178f8560be23f7b705fecc0b15960ec GIT binary patch literal 7184 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 literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/qlogtools-3.1/tai64n2tai b/NONE-CKUBU/src/djbdns/qlogtools-3.1/tai64n2tai new file mode 100755 index 0000000000000000000000000000000000000000..523c64cd2065c4c2dd3216d62c459ebec4adaf3e GIT binary patch literal 5808 zcmd^DZ){W76~F$M*bw5hNk$5pa5uAossSjaQrR4XW1KCCQ~PC2 zClIOJpgtK7Yukr@=(JSo2d3^rG;NaGY1Af^0HRwqwb}$z2@Ir11Bj`Apsd9^=e~2o z!yv7iv`;&c-#Nc?&+p!I&%5`&m$&z^$m33jL$El-dZCac$1yjkc2AMEejvAW~I{&-t|-{9~_+eqi?w$&Y> zOe(Ze<=+4u;uJSMxm9(|^d5agTiv-=N|zoW|k6!{lb`73}?+TeGOxKB(k=s~FF zj{1K1p}$n+7t!dhfz)6$qsP*EG%BFnJF&W}MIzBZoJop|9`73ziCw*V2JO_aE)qk- z0HRThCE`E~f;L6M8#YE)hE|4F;gC?nTYnC?OIR!}*zlr0A4Wt}q!3BU3u{eNR4tq@ z-ao863(pVz_I33#^@Fjrv=yab^YcB%hF5HU`}!ES`R)5zW-ocop8?VQ8l-9Fp-pCw zcqc2XPIv>Nvh*Ze{Yx~k5GQeni!&9FrH2vY)Gkgd{1#$N@nT8g-yp`+E=~Xjtz^aJ zu<_^bOXHl(p1-c>o9>7Ydl0%z0KoM{=yBJ1f&FwSrx? zO5?)Q7&y9a1meW-w~EF2JwoQ1(@1NZKv2H!lKE{Fx#m=6sej2RCL;429MbT78-glL z@2IF;^P@;vb1HrAsOJGN9XQ;x$0rksM99D7C8UY1GP~}YCjcE77xYC%bYX4{ZutDbggWlP=oazpG70tLJjWg!&u!rn!@ab*R z_&^#{=6g^@nOpT*Z2(3&W4?B?Qjs}`0AC(_W&s?ten5LEVy}u=H-wE@WjAjD`w*^9 z?BP4;8!HWG<%>r!pJ%@Z*;!(IX57ekO|SJm@6-H;rt+JoXTP4`@b+2{YESr=bPK?*E9{=bKUdf@hhI{-W)ABL z*UsTMVE>^#UaLQ|5hh@`gW&O*wP<$--2mp9H=sBGya48#mjQGcQ()JbXO(>v>;>lg z%6n%fd|m(R8MPWTSzpttf&lkaf1alJg#fck2ArVh1P zp7EldDbKil)AAKqf~R0LL0=8#bI=zgQU~B3Gj4$f0QZ{DSfB|&qxl2?E5#;ry|OXI zW^<*oF~zT#-%vKDxX@e#b}kaEvvO>>m1EPF&v8BESiA~Hh#WhuH_H5DEz)o)$E?TN z1G(+N7Mbf01|qq5a9ISb_DD_-c1B>~YOs$athh+7R_6A4-^A4)e)HXvmPCwF_}W=n z{t))4`=`=T3NJ5#FI#GVxx3yMHel0Vgq`@=r^D|beSBWXVi%b$jqBlSGd8wdJ_SCD z-6)N}68jpmn?w;7g_v9XumwKC-EG_7w4iYX=i6o-0TIcsJCEx2HEu2b?4{1g@-MoK zn_=SxjH$=x$_MU!XC&&X0KQD`+kqFQEH#a?5r2g#heQphW|+?mUVWT zXD}By!zS?=`Gp!b6wh1K$F^ureUJLn+jj}gNU z#qr~(gkz+^;i{|k7ND4|;KLuD+pl6kSA9cQeaoi$i9pu1E8!Ck1)1imYv@jJl~J@>gLJruxo6%l>X8L8lHz=%d3-3Zn$Izchq@`ub-GHpNbN-bpDX^qp?aW0G|xYh{($rq($(=| z)5eVt2bOjB?&ymR20B6yg;ut$2(4Idnee{;f7%?%Br|$ikL?hlzCpb=JtRVdDZMw; zwIST5$99R(uEF6@G6pZ+q4*1fnHL5ut*5P)AN8g)eW}6QKor{2z5OvHkTuk=WB+|{ z)q6+ang9T8sd!9}iBNAcnn=e6dZWoWa2bivPCb>*z<`$e!A@v|K4SxYJ7K^SbOV== z>f7pPM+TyIrUnLj2lYD^z<=k!eTsX4_n&ZTfI!HBXO>-fzp$?n4BU&%Z*^*b@c&w+ zM8HyWS3YOhu@nqETbQpoH9$gW0UEdlv^{@vi)X;VS~8!{Q*_B588ZJr|z?znw4O zJwXXgILQ;YymLH);(0Lae14uL>48|!fuwnScJCoRe~TEIr>Uk9;#bErW<5rHzJIsA z52 + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ +#include +#include "tai.h" + +int main() +{ + char buf[4096]; + while(fgets(buf, 4096, stdin)) { + const char* ptr = 0; + tai* t = tai64n_decode(buf, &ptr); + if(ptr) { + /* tai is 20 bytes, tai64n is 25 */ + tai_encode(t, buf); + fputs(buf, stdout); + fputs(ptr, stdout); + } + else + fputs(buf, stdout); + fflush(stdout); + } + return 0; +} diff --git a/NONE-CKUBU/src/djbdns/qlogtools-3.1/tai64n2tai.o b/NONE-CKUBU/src/djbdns/qlogtools-3.1/tai64n2tai.o new file mode 100644 index 0000000000000000000000000000000000000000..8591c49aeb3a94f16e7d84fe26f644dd0deb7128 GIT binary patch literal 7048 zcmbVQeQX>@6`%3?V^cfliyb@82jp5iA+6%OIB|{Jl*Db)L6sU+t%MLNmBM>7 z@A>w|Xa4Au_U8S5^S)+wW_I_!asPpREm8^=DRzlEVpfRvZ>j4ON}UjEMZY-wQ1;Y~ zfus=G`7aM8v-9O4``tqJ>fRw6jk0s^W#_KFqtr8x0T&Ht=l+(RyQ-;kcWNWDI0qJ4 z&8hx(y9q7EIQJQJAm={RUlEv_b3Admb|!o33fA+bue>T($xVsgPAjoKu}b#HWV;Y8 z{lZGz-MO=KvR4ReNOX4Yf_@=dNwtM&)2a~d-Ow#W2R3MK_ev|#*@@l~;EI(xRNG|l zI84qh99f7?>H#n8>5_7?7d=+qDkgg~5HhhD6d}4Hpj{7`ga|g*wkj=mcX6p${X{#4 z=owwKX@StaoiN58xL>PdJPfl>Woi?mA9xz??yh^fV8VW6!7Sj+30vLgW;a`Ph64ms8m=X{MZtuN!0z^aE^`WsZ?j%xHC5BpSANUIWKfdL#7bFhdimL9Cu!ttjLgRIP=#9oUME(o>15LaxQ4tc5q7 z)sc|v&VsQPRWQOn9LCLVs2B_E$KJLDoCYa1IIn?t4SHI{^YAO>e-kU=R~^z&sm#>E zYNlMuWv24^%Gd4P0F8Q_D;VHkC8BOm zsFmVSLqC8uaOwCjz(n@KHRG0iWwmv&OKlp(;g1^1BC0FSY9bkcJo2%+84>Ugyjc@8dTr&xBULczIm zZs-YT#;qRps+z5OZb1dqOESp2Z%DK~N5dcce#zQx5V+h41=7 z=;Z^y5Q=i(PpK-Le68x_gK}-g7fvOB;2~}|OuTRM!2P1;hovdsE2Q$%ZWU^->x(@& z7_`^rK>!>g2hl^)_1FAb=oPjrV^u$nR8L4lFfLN1RQJj8y;(@&RNMlL1{;Wi%?{m+ z>gG;8u7+Usc~v(Ir+aJ^=N&a{Aq%VoHPdeXXszO?VsWnlt8N42nh9V>qm8Ot59e6q z=E`3D{;9jHJBy{V=LfiDgBm0OPrL_^Pwd~b=kC;&y5`g*wxkEBO#rdr9Z zO*;g&H)|pv18GpNsK$b}~+PWZ74l3dKNfCbC;D1hW{$cP3 ziT{_upCsH$c{u(l;#V8|lf(}h{8Pk_8vJ*O-)rz($HNAH7ukCT&vDBJ&)-e61|Lxz z{O=2e$8}9Z@r=Rq`_m1B&rzHY4gS{@r;lEWIDSC(8;M6quFB(62G8ePCKd-{vFtbO z@i~ri(BOI921XoLn~V7vkLTn+sm|{i{4f>!Gx9U*-#|Rp7=KGjEo09-+Q;W1{(NB_ QL$HqatRv6w9A-WL15M=G%K!iX literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/qlogtools-3.1/tai64n_decode.c b/NONE-CKUBU/src/djbdns/qlogtools-3.1/tai64n_decode.c new file mode 100644 index 0000000..0ee8e28 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/qlogtools-3.1/tai64n_decode.c @@ -0,0 +1,44 @@ +#include "tai.h" + +static int hex2int(char c) +{ + if(c >= '0' && c <= '9') + return c - '0'; + if(c >= 'A' && c <= 'F') + return c - 'A' + 10; + if(c >= 'a' && c <= 'f') + return c - 'a' + 10; + return -1; +} + +tai* tai64n_decode(const char* str, const char** endptr) +{ + static struct tai t; + if(*str++ != '@') + return 0; + /* Check if the line is within range */ + if(str[0] != '4' || str[1] != '0' || str[2] != '0' || str[3] != '0' || + str[4] != '0' || str[5] != '0' || str[6] != '0' || str[7] != '0') + return 0; + t.seconds = + hex2int(str[8]) << 28 | + hex2int(str[9]) << 24 | + hex2int(str[10]) << 20 | + hex2int(str[11]) << 16 | + hex2int(str[12]) << 12 | + hex2int(str[13]) << 8 | + hex2int(str[14]) << 4 | + hex2int(str[15]); + t.nanoseconds = + hex2int(str[16]) << 28 | + hex2int(str[17]) << 24 | + hex2int(str[18]) << 20 | + hex2int(str[19]) << 16 | + hex2int(str[20]) << 12 | + hex2int(str[21]) << 8 | + hex2int(str[22]) << 4 | + hex2int(str[23]); + if(endptr) + *endptr = str + 24; + return &t; +} diff --git a/NONE-CKUBU/src/djbdns/qlogtools-3.1/tai64n_decode.o b/NONE-CKUBU/src/djbdns/qlogtools-3.1/tai64n_decode.o new file mode 100644 index 0000000000000000000000000000000000000000..196ccfe64210e153a4005bc85c70f2c55537a421 GIT binary patch literal 5264 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 + unsigned long s = t->seconds; + char* ptr = buf + 1+8+8+8+1; + *--ptr = 0; + *--ptr = int2hex(n); n >>= 4; + *--ptr = int2hex(n); n >>= 4; + *--ptr = int2hex(n); n >>= 4; + *--ptr = int2hex(n); n >>= 4; + *--ptr = int2hex(n); n >>= 4; + *--ptr = int2hex(n); n >>= 4; + *--ptr = int2hex(n); n >>= 4; + *--ptr = int2hex(n); + *--ptr = int2hex(s); s >>= 4; + *--ptr = int2hex(s); s >>= 4; + *--ptr = int2hex(s); s >>= 4; + *--ptr = int2hex(s); s >>= 4; + *--ptr = int2hex(s); s >>= 4; + *--ptr = int2hex(s); s >>= 4; + *--ptr = int2hex(s); s >>= 4; + *--ptr = int2hex(s); + *--ptr = '0'; + *--ptr = '0'; + *--ptr = '0'; + *--ptr = '0'; + *--ptr = '0'; + *--ptr = '0'; + *--ptr = '0'; + *--ptr = '4'; + *--ptr = '@'; + return true; +} diff --git a/NONE-CKUBU/src/djbdns/qlogtools-3.1/tai64n_encode.o b/NONE-CKUBU/src/djbdns/qlogtools-3.1/tai64n_encode.o new file mode 100644 index 0000000000000000000000000000000000000000..ef6e015271abda9dbfa890f89f5700c1b5315c62 GIT binary patch literal 5080 zcmbVPU1%It6h5=FNhaCNX4CY)1-G{LN6aK?)0$SA2HS2ow3e+lRQghOH`^qd%+}qF zrd6;Iuz!es@x_-uiNyyMABw&RMTkG3h!iS_AO*3CA|gmpq@Hu{Id^AorYOD3%>B-H z&)=N;GqW%6Ka`C*4oGug7#fnW0PlGXJfh$TtcDekyL8OUUD~sdT?M%dU(J8t^&t&* zU5h*Cvn!FwUB4YiRud~U;TdANCX$9&rirv6mTF?DA$l~i(hy5>*MD9+e~UtNpU-yZ zF5EFgX%w0g=+Z!Xe7{)yZ+nS`5!5Po#(Ud3t6v!A=`#m zD_$*l#qo0cbFXG&3(&tXa(8f{b>sso^2Y#9xARb{C*h{nq`I9YPP!E!wjA8luEb-B z(H;PI10)i|2^Y&B?{Qo&k)RO=M_M|K+E52TD=Ve|+R%X~4m{u4lhpn;B}aQG$Vdm- zx3?Ir7)I>~iRdmd*fg5#!ZawK&W%7_%5g?}$V=Bcl=~6@X&oP+8!b8g7&?Lt_@psf z6yT|a6}7t5Fx`}*8y`aG##^R>I>hURDM-iKCXs4UDjvbudY0O?;>-@QtfqcS_x3=D9)Zl@mGY-(L?}_3PmG{8aOJF5>C~t;B=6hYDw=l z_MH{HCA~lJ-s)gMu}FkF@Oit`4bom)H}Q`9Ad>AaVQQU!(R~iD80^Hm;+*)RFS((V$C=o`y#q%CZZcGUfZ=vS9T7;YiJAlX$2Ed1_vlODsG;&t zF+66dBLa^bDnHIp%>rWdCGgpX)-1!*hB_kfB}3)UF_hAvFJ??96?)THjS0MJsQmj3 zuNi7gpgNh6#xmf+quM9jW7P$IZm9eXhTj-!OyIYM%KyOdCqs=1{KZiDKN+f}ju;~f z{HLL%cPv1o42xES&kJog_xLnyZ@LU3y%9E}(ixPR_K(tg#OQcRmYYNtS^Ck#N4Mto zKMj4ewQApVrBs;it5r*V6v<=h<&}P`$<97@^rzkm*?u>j~D6%@Qbw?!g6tT;zXfXtd^e#U+HLSDmYnb zBBrN;G7=SS9MU{lEzHme`7ckNU{QO)LNz%#HCqf&8v}p%%*>Rr z9)3`%mwhZ~Z>?S^$+nV7xsN`BHneio0Ufd*VQkO896qAD27%4dSVo=f04rIMdWs{f zOZbh=&+>9+(R6k!TDRo$e(mX)j0z?3cvqYfxvi(e? zKg9LB!v<6@nj^b@bRO6~k%Eg{5IIwcqh{;UVG$L-AHQX&$vja{vF-Q;@+Qe@Rl5)Z0AHO8Mg1Y^d-K~QwXB+&vE`@Px<3l*`oZN*TuT8<9Jm5mm~70xs>|Lx_B44sQ7m{ zzSLjRuyxT*1+c2T}J3#--bmPZXf*ayxoO)NC zBw zzsckSuZh=di2P8+XzfVj?XLLntRz{1^r;H;zNW^nH>FSfZpDJhSoGz*p}eV4=Hd0e zPO%MMo@Wd5!0J^&i^%wm;B#i zp8QA+iMnp_>skKN;vc3!*uK-9sx$c+;Nr>u56QE}dMUOOo@rRkJayrD&$0sX;dzn& gw&aH{X&DB#zVM_Q_7h%Lg2{zo(icp;>?qs+zq?+m;Q#;t literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/qlogtools-3.1/tai_decode.c b/NONE-CKUBU/src/djbdns/qlogtools-3.1/tai_decode.c new file mode 100644 index 0000000..32817f8 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/qlogtools-3.1/tai_decode.c @@ -0,0 +1,23 @@ +#include "tai.h" + +static bool isdigit(char ch) +{ + return ch >= '0' && ch <= '9'; +} + +tai* tai_decode(const char* str, const char** endptr) +{ + static tai t; + t.seconds = 0; + t.nanoseconds = 0; + while(isdigit(*str)) + t.seconds = (t.seconds * 10) + (*str++ - '0'); + if(*str == '.') { + ++str; + while(isdigit(*str)) + t.nanoseconds = (t.nanoseconds * 10) + (*str++ - '0'); + } + if(endptr) + *endptr = str; + return &t; +} diff --git a/NONE-CKUBU/src/djbdns/qlogtools-3.1/tai_decode.o b/NONE-CKUBU/src/djbdns/qlogtools-3.1/tai_decode.o new file mode 100644 index 0000000000000000000000000000000000000000..e09acd11974490b2a603c1d65921f1d85c221709 GIT binary patch literal 4832 zcmb7IU2IfU5T3Jl+urTAy9`FD;YDLijPXGd9~2*miI{cf-kIIAXO|c!x%bR` zXJ)=RKlk)(U*5Lk!H`lQqF@kemY@K3TTLJG)gibUy5ZRGYln_jBJsBu;%64lrFN&r zQ@h4@j?VovHg|3G+ZGAZ)YMl5{&vg!&P$`2%VV!^gVFi$QGABS=1@QOjoKPNlY>tHihO) zKQ4y+IyTh8khC+7)lr$T)j$p0j%ye42WI=L*la2NZhHBSR(JqaE8LPVco6p7JS0MG zQwaHM7qUqWtz;__ST?i<`=O2eL(whhgA;_a8CJd28WK8epF${-nF3{z=1Z%>0pZYt zLL(|rf*p@>xt?6e8!w7bzKMx32N^aQFQxDVe- z{T=JXx4-+*O975%e>RsXW^+yk9msZQ#E>o)rvnW+g84;s$%U2QfB2DIu?Hu2*p*-R z4u)cwj{E^`!Uy+XMS(h!=xDRw)NtQ{U$|X-*}$zdAFwhUOAN=B4abtHSWhap_E_tQ zmN&xl)=4RXcu3R>j}w!!n2YdR{T>`Xx76H=k8t@M|3$#DGO-HA8L2jsKEX%`4%?zH zu3-t$rDXJ5Ci;?^UsCk$8rCEF7d31xtJOy8*vtr)D(WXyXm{0}mBy%D66GHl=%!$w z8Fd>1!4lkw3;QWrwY}r}(mV$a{)gdX^pXKo0ap5E%cZ{QV#b~BE0;2T*{9RlLb>nR z>Efh^d#~KP-s#sUaC>flWIQ>N+~BNt)B5=yj&v3ktq2OKQ9GlJx% z_Ols8<4o209-2)T&>IOg3b*7ICJ75-=m>E##hIBLPJ&Y?dN~ItvA68GnP<%9_}_LC zBj^+Nk2EcMh;?(_!=WmD)OqxGh zBXj=fR5NoT1XnrEB|{U__fhO?#{b8nAV}7U_=(%(KZux_lOp%L}_hX#JyU&PPDMJjv?g_zJoL`*ktn=drU{{qJ!7QYY0DUW@ucfwa?zL?&K|@h z{s%o6bu*r9bMI2fXeYe^&T{~*BTcC}e-Xr*@hABF=)rznOn$vj*U2voS1URuy45g> zpvP)j3DwtZhY-$-EQz_b8vYtdei?l&fUZFytsc1+(Zx$?yop)}^3qAtD3FYGK7~bxmbBl|He)0 zv_6pUf%Y7&%3pNZN4bY-1ZT5)=cXCcSJ7h!!DVGm8Mx$;&x!o?Ri`tRgmBuj{bZoX z3<|y~fU7elIK%jxJ`nSJT4CUFpIO5=<uR`8eDUf@=ECI5K?mwCIyxbUuI z`xgV3eR)O0X+9rf`%ew0`hR9yeuq*$`hFXcer)ygQhqB^J@kkqS&?xGF25m7{{h2a e=0Wn1zs@WEf{VYt&qb%yqLaVqgv+^P*7+}V6KBQ% literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/qlogtools-3.1/tai_encode.c b/NONE-CKUBU/src/djbdns/qlogtools-3.1/tai_encode.c new file mode 100644 index 0000000..afa987a --- /dev/null +++ b/NONE-CKUBU/src/djbdns/qlogtools-3.1/tai_encode.c @@ -0,0 +1,19 @@ +#include "tai.h" + +bool tai_encode(const tai* t, char* buf) +{ + unsigned long s = t->seconds; + unsigned long n = t->nanoseconds; + int i; + for(i = 9; i >= 0; i--) { + buf[i] = '0' + s % 10; + s /= 10; + } + buf[10] = '.'; + for(i = 19; i >= 11; i--) { + buf[i] = '0' + n % 10; + n /= 10; + } + buf[20] = 0; + return true; +} diff --git a/NONE-CKUBU/src/djbdns/qlogtools-3.1/tai_encode.o b/NONE-CKUBU/src/djbdns/qlogtools-3.1/tai_encode.o new file mode 100644 index 0000000000000000000000000000000000000000..c104f8ef3fca4d59ae677ee5b19683828faa462e GIT binary patch literal 3928 zcmbtXUuYa<5TEb%lH24imp@lyq>2|>Z31S~*disxHjw_g!zdyR6cy6FyUpd=%dXyD zG!~@~0c|KnXbhK3KSvDqOl?UMHw{{hOPiENpHS zw|^|$_{At(PF^Xft>WYsVjElgFCNSG6*s>vZ2YVW8-M+|cI(R%{Z^QLO|lD{JH_qW zk?g|cSBQn#xx(i6oV`uiyWkqt`#D}}SUr->rH$BH$_4#3z8 z>GYAbVFDy`$}rPu@+kE5479=y^#k;BU=|>S3z)KiX{n=`aJ_w*Vvb1W`YFG!rxlez z*8Yfz%cT!?cry_by#s9%AUlX9QmuoJ0!?rSuLNEIW^h~L?oHsPAqX^*hfp<=JvFxp z$);U{p+ss0q2LZCOi~kj*y;-{6MD@Q;*g^FMEWSI%$HPCgn-o|mz3)Ek6>{Zx0lo#+yz!Nws^>=mv z$KZV8&J|#JOO9LiDvnjAShTHxrQ~__P{XRihM{}($*YNpT;uGOU|hg^BS(D~dhenr zQ0qgPl=%)fmhh--vLU!S{~To~gL4RfkYgk^njdr(0R@Xum~?}IQ#>m;&01@E2(@rC zf1q|AuXY21pvPJPW?;(@R|@&2*ZjtG-7DMmX}?jPuAD7ZTz~rIx>s#t1O2H3)(o6{ zW-&jXKWH7W9*@$MSL_B*o56R=o?G#u?zz?cn(No9u2ad=adU0g6K}gxx>YCV=V$X1 z$DC5lcEh!&W~`Y>rUA=;ZMA8aaBeojc}29Qv)%-&VmEEDO1_V(Q(CJo*`-p$c?GP7 zQ@0taxyxP$P_Ma82e90*R|Roame>pz#IAJ2zO+_yF&YUY6n4XQtAvF)SR+_vZ*|qd z&0DV5bS&)Nl;5<==j2xWzj-&N)6oncjrLk|tm-#9*$xS`aU3aM4x6}dilWVW{yy~6 z(fY6XbU^vh>R=N7?>f-#Sb7u1<$u5+Jr_~YV`tH+?}_5a2Ewd&Ibjq{dO^x#G#0wy zS)BDX$#s?AF-sgLlOFpNI^y_0#@`ka;URu{SLpmUV)~j0!4C89CnF+~FVKsq#PNU4 z{E|=neRxT})a4^a{H<3i>Le3-uzx1E@hw#$* zKS7MvlsHraxx@VH0`M&SGJlG==+V$B7xi!yjEVgs2BVZW<2Dr&JB%2YN@*>T{97#~ zRPo{2dAoeX6IJP=N;QRi8{x-a7qt<*fx2K^hq}-$25=KKmjV28?ZWw?@4~6`-D1EUrUUqz*v<=CY-&_1Z@8}lab|9Q~xt9~@oRSEBE;R8UQYeD6**Z7+ z`5fl}!KL2G$U5>(Nstx6sh&Bu7c~4h+s|vb{C-KjQs>hg_qrA@?~%6{mpa*mw>4bq z|0uE!afsYtg)qAIu>D&Er+pn}d!A>VSH8h%4S5GrXr2ZXJw6|xA!qcdir#n8DO7Y? MUv$Fd;>86BHbpk(VH(c0jhbMHO& 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 literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/qlogtools-3.1/teepipe.1 b/NONE-CKUBU/src/djbdns/qlogtools-3.1/teepipe.1 new file mode 100644 index 0000000..aeaf3aa --- /dev/null +++ b/NONE-CKUBU/src/djbdns/qlogtools-3.1/teepipe.1 @@ -0,0 +1,21 @@ +.TH teepipe 1 +.SH NAME +teepipe \- copy stdin to a program and stdout +.SH SYNOPSIS +.B teepipe +.I program +[ +.I args ... +] +.SH DESCRIPTION +.B teepipe +starts a pipeline to the program named on the command line, and copies +standard input to both the pipe and to standard output. +Standard output of the executed program is redirected to standard error. +If an error occurs while writing to either the pipeline or standard +output, the other is closed and +.B teepipe +exits. +.SH RETURN VALUE +Exits 0 if all data from standard input was successfully copied to both +the pipe and standard output. diff --git a/NONE-CKUBU/src/djbdns/qlogtools-3.1/teepipe.c b/NONE-CKUBU/src/djbdns/qlogtools-3.1/teepipe.c new file mode 100644 index 0000000..be2e514 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/qlogtools-3.1/teepipe.c @@ -0,0 +1,93 @@ +/* teepipe -- tee output to both stdout and a program + * Copyright (C) 2000 Bruce Guenter + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ +#include +#include +#include +#include +#include +#include +#include "fork.h" + +void err(const char* msg) +{ + write(2, "teepipe: Error: ", 16); + write(2, msg, strlen(msg)); + write(2, "\n", 1); + exit(1); +} + +void err2(const char* msg1, const char* msg2) +{ + write(2, "teepipe: Error: ", 16); + write(2, msg1, strlen(msg1)); + write(2, msg2, strlen(msg2)); + write(2, "\n", 1); + exit(1); +} + +#define BUFSIZE 4096 + +void main_loop(int fd) +{ + for(;;) { + char buf[BUFSIZE]; + ssize_t rd = read(0, buf, BUFSIZE); + if(rd == 0 || rd == -1) + break; + if(write(fd, buf, rd) != rd) + err("Error writing to program"); + if(write(1, buf, rd) != rd) + err("Error writing to standard output"); + } +} + +void exec_child(char** argv, int fd[2]) +{ + if(close(fd[1]) || close(0) || + dup2(fd[0], 0) || close(fd[0])) + err("Error setting up pipe as standard input"); + if(close(1) || dup2(2, 1) != 1) + err("Error setting up standard output"); + execvp(argv[0], argv); + err2("Error executing", argv[0]); +} + +int main(int argc, char** argv) +{ + int fd[2]; + int status; + pid_t pid; + if(argc < 2) + err("usage: teepipe program [args ...]"); + if(pipe(fd) == -1) + err("Could not create pipe"); + pid = fork(); + if(pid == -1) + err("Could not fork"); + if(!pid) + exec_child(argv+1, fd); + signal(SIGPIPE, SIG_IGN); + signal(SIGCHLD, SIG_IGN); + close(fd[0]); + main_loop(fd[1]); + if(close(fd[1])) + err("Error closing output pipe"); + if(waitpid(pid, &status, 0) != pid) + err("Error waiting for program to exit"); + return WIFEXITED(status) ? WEXITSTATUS(status) : 255; +} diff --git a/NONE-CKUBU/src/djbdns/qlogtools-3.1/teepipe.o b/NONE-CKUBU/src/djbdns/qlogtools-3.1/teepipe.o new file mode 100644 index 0000000000000000000000000000000000000000..cedc03e6bc6e110339736a13dae1d46c74c10a77 GIT binary patch literal 10176 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 Da~t5` literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/qlogtools-3.1/trydirent.c b/NONE-CKUBU/src/djbdns/qlogtools-3.1/trydirent.c new file mode 100644 index 0000000..c778176 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/qlogtools-3.1/trydirent.c @@ -0,0 +1,8 @@ +#include +#include + +void foo() +{ + DIR *dir; + struct dirent *d; +} diff --git a/NONE-CKUBU/src/djbdns/qlogtools-3.1/trysysel.c b/NONE-CKUBU/src/djbdns/qlogtools-3.1/trysysel.c new file mode 100644 index 0000000..f6ed055 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/qlogtools-3.1/trysysel.c @@ -0,0 +1,8 @@ +#include +#include +#include /* SVR4 silliness */ + +void foo() +{ + ; +} diff --git a/NONE-CKUBU/src/djbdns/qlogtools-3.1/trysystime.c b/NONE-CKUBU/src/djbdns/qlogtools-3.1/trysystime.c new file mode 100644 index 0000000..18a03a5 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/qlogtools-3.1/trysystime.c @@ -0,0 +1 @@ +#include diff --git a/NONE-CKUBU/src/djbdns/qlogtools-3.1/trytime.c b/NONE-CKUBU/src/djbdns/qlogtools-3.1/trytime.c new file mode 100644 index 0000000..91fd187 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/qlogtools-3.1/trytime.c @@ -0,0 +1 @@ +#include diff --git a/NONE-CKUBU/src/djbdns/qlogtools-3.1/tryvfork.c b/NONE-CKUBU/src/djbdns/qlogtools-3.1/tryvfork.c new file mode 100644 index 0000000..21387e4 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/qlogtools-3.1/tryvfork.c @@ -0,0 +1,4 @@ +void main() +{ + vfork(); +} diff --git a/NONE-CKUBU/src/djbdns/qlogtools-3.1/warn-auto.sh b/NONE-CKUBU/src/djbdns/qlogtools-3.1/warn-auto.sh new file mode 100644 index 0000000..36d2313 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/qlogtools-3.1/warn-auto.sh @@ -0,0 +1,2 @@ +#!/bin/sh +# WARNING: This file was auto-generated. Do not edit! diff --git a/NONE-CKUBU/src/djbdns/tarballs/daemontools-0.76-man.tar.gz b/NONE-CKUBU/src/djbdns/tarballs/daemontools-0.76-man.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..7d416a270875c75491ba1bdaff6df23927488ef3 GIT binary patch literal 8005 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 H0LTCUL{+%p literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/tarballs/daemontools-0.76.errno.patch b/NONE-CKUBU/src/djbdns/tarballs/daemontools-0.76.errno.patch new file mode 100644 index 0000000..d1884f5 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/tarballs/daemontools-0.76.errno.patch @@ -0,0 +1,12 @@ +diff -ur daemontools-0.76.old/src/error.h daemontools-0.76/src/error.h +--- daemontools-0.76.old/src/error.h 2001-07-12 11:49:49.000000000 -0500 ++++ daemontools-0.76/src/error.h 2003-01-09 21:52:01.000000000 -0600 +@@ -3,7 +3,7 @@ + #ifndef ERROR_H + #define ERROR_H + +-extern int errno; ++#include + + extern int error_intr; + extern int error_nomem; diff --git a/NONE-CKUBU/src/djbdns/tarballs/daemontools-0.76.tar.gz b/NONE-CKUBU/src/djbdns/tarballs/daemontools-0.76.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..d38a1ca9727a01f6545870840e2c07bbd4df94a8 GIT binary patch literal 36975 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 O!J$uLsf&dn0{{T3B(#nI literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/tarballs/djbdns-1.05-test23.diff.bz2 b/NONE-CKUBU/src/djbdns/tarballs/djbdns-1.05-test23.diff.bz2 new file mode 100644 index 0000000000000000000000000000000000000000..b14d291d628dba5902856b107941acea19b8d23a GIT binary patch literal 18480 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 literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/tarballs/djbdns-1.05.tar.gz b/NONE-CKUBU/src/djbdns/tarballs/djbdns-1.05.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..99f9e342459751889d76822e6ac04192015231a1 GIT binary patch literal 85648 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 literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/tarballs/doc.tar.gz b/NONE-CKUBU/src/djbdns/tarballs/doc.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..a765731ccdc1b991a9e16ba05e00200d57616d06 GIT binary patch literal 229765 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 fKlvyB + #include + #include +- +-extern int errno; ++#include + + #define PAUSE sleep(60) + diff --git a/NONE-CKUBU/src/djbdns/tarballs/ucspi-tcp-0.88-ipv6.diff19.bz2 b/NONE-CKUBU/src/djbdns/tarballs/ucspi-tcp-0.88-ipv6.diff19.bz2 new file mode 100644 index 0000000000000000000000000000000000000000..46ab79e9c264da5f83fe65a876fe053cef3a9ce9 GIT binary patch literal 22632 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 literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/tarballs/ucspi-tcp-0.88-man.tar.gz b/NONE-CKUBU/src/djbdns/tarballs/ucspi-tcp-0.88-man.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..7bc905554b8382ea3327dc79a6bfd99a90fbff91 GIT binary patch literal 7562 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 literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/tarballs/ucspi-tcp-0.88.a_record.patch b/NONE-CKUBU/src/djbdns/tarballs/ucspi-tcp-0.88.a_record.patch new file mode 100644 index 0000000..903125e --- /dev/null +++ b/NONE-CKUBU/src/djbdns/tarballs/ucspi-tcp-0.88.a_record.patch @@ -0,0 +1,64 @@ +diff -ruN --exclude conf-* ucspi-tcp-0.88/rblsmtpd.c ucspi-tcp-0.88.fix/rblsmtpd.c +--- ucspi-tcp-0.88/rblsmtpd.c Sat Mar 18 10:18:42 2000 ++++ ucspi-tcp-0.88.fix/rblsmtpd.c Wed Aug 9 16:42:33 2000 +@@ -60,16 +60,54 @@ + + void rbl(char *base) + { ++ int i; ++ char *altreply = 0; + if (decision) return; + if (!stralloc_copy(&tmp,&ip_reverse)) nomem(); ++ i = str_chr(base, ':'); ++ if (base[i]) { ++ base[i] = 0; ++ altreply = base+i+1; ++ } + if (!stralloc_cats(&tmp,base)) nomem(); +- if (dns_txt(&text,&tmp) == -1) { +- flagmustnotbounce = 1; +- if (flagfailclosed) { +- if (!stralloc_copys(&text,"temporary RBL lookup error")) nomem(); +- decision = 2; ++ if (altreply) { ++ if (dns_ip4(&text,&tmp) == -1) { ++ flagmustnotbounce = 1; ++ if (flagfailclosed) { ++ if (!stralloc_copys(&text,"temporary RBL lookup error")) nomem(); ++ decision = 2; ++ } ++ return; ++ } ++ if (text.len) { ++ if(!stralloc_copys(&text, "")) nomem(); ++ while(*altreply) { ++ char *x; ++ i = str_chr(altreply, '%'); ++ if(!stralloc_catb(&text, altreply, i)) nomem(); ++ if(altreply[i] && ++ altreply[i+1]=='I' && ++ altreply[i+2]=='P' && ++ altreply[i+3]=='%') { ++ if(!stralloc_catb(&text, ip_env, str_len(ip_env))) nomem(); ++ altreply+=i+4; ++ } else if(altreply[i]) { ++ if(!stralloc_cats(&text, "%")) nomem(); ++ altreply+=i+1; ++ } else { ++ altreply+=i; ++ } ++ } ++ } ++ } else { ++ if (dns_txt(&text,&tmp) == -1) { ++ flagmustnotbounce = 1; ++ if (flagfailclosed) { ++ if (!stralloc_copys(&text,"temporary RBL lookup error")) nomem(); ++ decision = 2; ++ } ++ return; + } +- return; + } + if (text.len) + if (flagrblbounce) diff --git a/NONE-CKUBU/src/djbdns/tarballs/ucspi-tcp-0.88.nobase.patch b/NONE-CKUBU/src/djbdns/tarballs/ucspi-tcp-0.88.nobase.patch new file mode 100644 index 0000000..c6649f6 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/tarballs/ucspi-tcp-0.88.nobase.patch @@ -0,0 +1,21 @@ +diff -ur ucspi-tcp-0.88.old/rblsmtpd.c ucspi-tcp-0.88/rblsmtpd.c +--- ucspi-tcp-0.88.old/rblsmtpd.c Sat Mar 18 09:18:42 2000 ++++ ucspi-tcp-0.88/rblsmtpd.c Mon Apr 1 09:26:07 2002 +@@ -22,7 +22,7 @@ + } + void usage(void) + { +- strerr_die1x(100,"rblsmtpd: usage: rblsmtpd [ -b ] [ -R ] [ -t timeout ] [ -r base ] [ -a base ] smtpd [ arg ... ]"); ++ strerr_die1x(100,"rblsmtpd: usage: rblsmtpd -r base [ -b ] [ -R ] [ -t timeout ] [ -r base ] [ -a base ] smtpd [ arg ... ]"); + } + + char *ip_env; +@@ -190,7 +190,7 @@ + argv += optind; + if (!*argv) usage(); + +- if (flagwantdefaultrbl) rbl("rbl.maps.vix.com"); ++ if (flagwantdefaultrbl) usage(); + if (decision >= 2) rblsmtpd(); + + pathexec_run(*argv,argv,envp); diff --git a/NONE-CKUBU/src/djbdns/tarballs/ucspi-tcp-0.88.tar.gz b/NONE-CKUBU/src/djbdns/tarballs/ucspi-tcp-0.88.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..8cd486dc4a29a04930cc25f8eab7b943f6178d4d GIT binary patch literal 53019 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 + +Tue, 4 Jul 2000 18:53:38 +0200 + * man-pages for rblsmtpd, addcr, delcr added. + +Wed, 2 May 2001 13:56:46 +0200 + * two typos in tcpserver.1. + +Sun, 17 Mar 2002 15:32:59 +0100 + * merged changes from http://cr.yp.to/ucspi-tcp/tcpclient.html into + tcpclient.1. diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88-man/addcr.1.gz b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88-man/addcr.1.gz new file mode 100644 index 0000000000000000000000000000000000000000..1274d55bb2d9d300ebf64a115177f9bd1e1d9033 GIT binary patch literal 329 zcmV-P0k-}hiwFoNtCTzd17T!jV{$Gr0F{qHZ^AGPh41|pK2iw+OyaT=8|y?R28eQ* z#3dvyjaHJ%F|hsnwFwMy+$DPN+5YT^?Hr`mieQ|GVh+ofk1UD7ZUDx5B=#U-wt?Pm zHyTe;*kkDk0i~*7@gC!+G)xzt%hkHbi$uIeYDnL*Vz$ZG+kCaW7yg0ngApkDAQ`x7 zt5$<6V^eJ`cE;G|!~${#?a+gDe7!yLA15U=lGw-^N@Lr%gNWpQ8lluaBB3OA1kc)7 zknQw^47YrCUFO=A@!MGjFN}!AIM&AgkHfTAxOXa3PXvsLeV(bAa>WaCU{*6h#$pPB4A!mD&Gzm@5!=WPa b(+GCMlk$xjv|Xa&W1aj0(ajWq90C9UF~p#S literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88-man/argv0.1.gz b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88-man/argv0.1.gz new file mode 100644 index 0000000000000000000000000000000000000000..29bfdb71094eab7f23ed167f95d7a9453122a453 GIT binary patch literal 649 zcmV;40(Si$iwFoNtCTzd17UJ!b}%k60BuvjZrd;nz56S8Y=K&754-Httjo{*7t{TZa+?(gBD5Y;oR=06w3koaAK?_B^1 zou{pr7Cv-rISd^t-Ds@gKE;09TXa$6{_5B2bzLp1LVO!=3$X-`(l}``o&TVx^v{lRjUJ#!%O(F`Lm0R#uw5Z!S!~79;lg0f`H;oD2s|MPO?HI&thb_ znokaD9d>tF^)y@#t(U^##!Jq5zL1U!-zE&WEu^a_eq*mkE49;Zd%-U|F<-A=mQVBK zL{(H|Cx!t!c^qt)24sxfqnTf%|Hz25PAhkqCx#24KFEzhXgsm*7L9?RyzT~zevk(| zNZT2_1E#$mH(|EXZl*#DCI1v+Jy+pquFRvr=&k<< z_L!e_3^pcMo^a|@Mzh`=eYEtL54DW=IKsFs`r+Kh*gZ~da_F&ay5pBTs9D<$yK6_))apMYVLz_0|fv8en3T6 literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88-man/date@.1.gz b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88-man/date@.1.gz new file mode 100644 index 0000000000000000000000000000000000000000..4d550114c2cc6d48847aedcf5be0020ca05fdf62 GIT binary patch literal 443 zcmV;s0Yv^EiwFoNtCTzd17u-zWk4=50BuoAkJ>O0zWZ0q5hP+j)n0mH%Tf`kg@|ye zmL7~V5UcS+V<)@$_jQ~Nt4h7ijK0^*@bexj5pV-*#>+h%o`3GxIJjisNSWXv)R;hE z4G19AHrBQEfhSJ+>u@Z}ykz{_sKs6x&l7}M2XUB zjP}~K$%xQ98v{k`wCkG+b#$*=Elfrzsv%s`=J4GT;JeVS!3B%rJ!sLx6@gk~l(|F9 zSFj+RM~VwVcG@>9SPim+0OJK~{eXKwVy5)3-433Al*do*Y&~BL9kmVme;Qe%{F5ev z?%gU?H}x(_*;K~|SgNMx+ISsYH7Uq=EfZ4rR@==7+1!!Fx(>l@9$+yd^~X)8d4{G_ lWXOCfsF6}(3!h9$)E^0#MNDt<% z3N?E@5L9KlJEOanZWV==jH^4wUXXfSGW*qco8&=G(YA)19WBR6EP9yD6p2qS*v%Rh VyqR`YqU5?tz5w!*SUE8Q000O=lT`o! literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88-man/finger@.1.gz b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88-man/finger@.1.gz new file mode 100644 index 0000000000000000000000000000000000000000..b1e3434d1f6a14f7d8b7d4e90def87afcda134dd GIT binary patch literal 474 zcmV<00VVz)iwFoNtCTzd17>M%XJv9gE-?UoQo(N9FbuuxD|k$RL|G5Ru$|In8ERll zf;g99>p_v3Sg0%+5}mexKboln57>4ig~!MD9;FWtaB|^{X$f~qmk+SH|Grkk)2}(4 zkur1{6S#1SsWIeYfK!SM7)aPeLa1XVEz{+X&30E7rP7}VUiDMyLLk?w=TeXGDEKey zaM4yzrsF%f+D2$Qb@m_iIpwHH>Hsf?k@H}1)^qZ&*Ae4%7u zwVyK07;ZuZZE}J6O?ZXMkO4<*#-h7m)=-c*?ThqIsyrap-vlji7A+1eyy36tnF zaBM>V{&P4E-?UIQL%2qFc97S6}J_nV#?5^6EuxPq!v)Z zQmKpU9N21NNA@MqzpvvcK#@GWcYg2Qoz3@aIOwx<+QNeIVhx+sN6N<1*9^4r=*UB@ zz1QXlN$x=qkU~IHdawtmv_a3KyZGE}cSTk({yO$$JcGvBW4wP$izLr>`)s?pmAKaU zpv$8WILqjgo8&ifeHsd>Vq{OWX<7p7z_!#Qy2gwO%~I~p1HO{ z|Bpz8@+Ve=J9bYIIh59w+79Hq@-;Q(=#rI2Ly?`7T}Ds}!T}w^ccB}wB5IZwn;1N` vw8o&Mu|7l7X=lykdCH>WWj>dV|2CZLyp_Juv!LRN>WcjVt9H#4IRXFxK_9c| literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88-man/http@.1.gz b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88-man/http@.1.gz new file mode 100644 index 0000000000000000000000000000000000000000..c87892db76d9e3ccb7434bb4c6572684958587a0 GIT binary patch literal 422 zcmV;X0a^YZiwFoNtCTzd188(~a6m3G0CiH!Zrd;ryz?veXahE79|{yXIdz0sKx+$@ zE=Ae{L#-qt5=oG>)Bb(Ql^^LL;ALkuGrJ>_*E{G#up3x2UhQE2_#heePDT@UbzNp_zG7?_c@NV9ykz8a6ARsd zbxNlJJwluoFagsNcId6q9v77JtaJz4;}ku8j*}A;h3wg&G;(09Xm5Ke584FqCu;|V z&ElTwUVxv2Bn;Th7%<;1SwZBAtR?g_zmpP*+`;cYQ@xPV_lbxiuY8hF) Q597f80ci{%zvlt~0JC?+`zCb0dF(?VfjOQ<~oGs?8+kFh7g#pNd z0FRX=gnY4GLqLB(&yy^FTdvl5mNWj?IkI=gGf+0P$XQS9GrmUfJkOst*?OC;mN%NK zbDhST2sg(b}|#>Nb_bEU>&@Yi4+qO{?_{RDbVM|}<#ZR+8F z?RCwh5K1dWnM7^D^Eu33^A#iM&c*k}{XsMNy2NlZNQLq{ZG_(+?h@MRAL+GCIDXUm z;xc@dp(0mY9Ape;C{0IYrwJ5-aN63KJ^C|NL~h#21YO_|%|Ux>dXqj&q=(T+dVX@8 Y?5LK(>0xAXMODdu0q?M^6M_N&0QpL|9RL6T literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88-man/rblsmtpd.1.gz b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88-man/rblsmtpd.1.gz new file mode 100644 index 0000000000000000000000000000000000000000..a5d6834419939a0b1cc01f6a304d42e2d8e6892d GIT binary patch literal 1570 zcmV+-2Hp7|iwFoNtCTzd19D<)b8U2RWG*oPtykM_+c*$?*H_F#fhK^hYn@f(;FPTI*g&`AFgk1=d(FJ@3PAB8QCUy{@XaaiiYPG z^Rv6z?P7Lwz5A{_367|wC%dGT40t{Dq0^ELlr=uzIVtfA6+}yGVBn~>PLgn|ww5Nq zG`qI07Fu_sY)}HHau?mu-XWsPuZ=7jlweV0E~nMBBE3;I1#pRvXp8gNtx2t z%B&K;we()B7}6}ev=0(TCZqV3MR~>soZHxYxsSgjg_j<#b<7}kZP2u^#>Y}C6o-Bp zbWc=#gfoqhAy>tKJQ&idR$R!F#3vMF-B>4_(j7|pjDk6Lz(gYOx4;>o4W>dj`f75z zlEOT!6*_^4jZ=mL0d}nzdqb7SpOam%4UP6K^h&P;Z;7G@=* zkDzMFs0GViFj*f6=i`x6ZU9nCp*+8xrQk0xK%DS7NwZPT8fF}A0IDb$B9EMzI2At{ z-~?E^F%1SY8KHXY@zR5b<#yLi`?Pu3&MCJjG zZ4ZMaIG~q0%|wp^^BO4ZjmE`(qtYGW_k{kI6Sjb(@mXyxKx!L$u{gWEySTbpT+D7U zIS~h(p2WCAeFHtlww{vGau~B)X1buo-wPHV z>ry>Cpdx)DIjjlNgk9$Q13$y5eQn}9wFwi{^k)l<#=lmjp_6Tq5V~IYM5OHZX~iS@ z0Ti!AN4{+uNF1*+)7Awhz%Ki?WgtyoWwu`|1K%MEsubmVmnza|9WTGYBnz}uP>Lvl zu_B#zk=vK+N7RZlF0{9le2*Byy+Z7~7LCt0>T8aL!bIk2t!$c%T{WC2O4#O2a|vFC z(7Zl68lFFb!=u>VxE7UJvRWizEm-s(2kd8(V?LmWxZ$wv@!Q3fGECP!rT_DjH5(}LL+q}H&KD}@~)!gfC5Y7EFotOPu1d~va}D_jIToEuy6 zCU8=NfwqxOU?XxGCAJP=iV~Za50*Z5MLpq%wJKD93d?xHS08Xy`>ipMxgtwG#>M`ckF#M)mt2Y*CeMciefqRS-=^S%dHE7E$%taydL2ln#3p`t zLqq4i$9*=542Rw>rha3lyxwrkr}r!vp*690I7auzK4@93WW3_wu83)c zsPcrv5`7<+5;fvULSPB!G){>{k<(#*r5!#H_PDsWNSE0U;4QWFviiRO?wfv4wDErS zlxp!p8V77z9B#w?ww7-@g93N&`zZ^@KcTFDbQCs>( UO<|R6(hz}YmCrELsgv_;DAKw*$xSJ8PmgHX7QwyS^Dbx6goV}?EBN?V(P zsBRRp$kgC$k9p85OWS}x=JvZb=u2VyD8ur{T8T{7mWL$1I=|=qSC}|wj5}B%25{U2oocg6_xCmbmeoByrBt1 zLSvOK^V_|eIF#uIi!EVAZ487+od<1EPaoA-i*j9;38z9PM z(k>x2G+G;1j_JnVFQo0Xo${Xj{QP2lScBNs8i9q<#TquNw@eL{j~TS=yaXtX7&tLC zV1Th9L8vH*P9w$pX1go$Lg}Z$OX)oIZ*NO1N%oQz&-;9L$hVt6N=x3OjVpwH)#M}G zCkN0fmobI$*FK4pn8Kp#FlbPJ-HeAL!X;oC4MEuWa6*Qo^M?Cj4biY94B!dk_6|8X z@?rQ(mci<^*xpVMkYjVQnBLtOUuq2hh^^3mri$Tncc0M7eOq>vaEwS?j^tQ}M%r?8 zu(d-kiG5YHOd!U?`pz-=$-`77+2ed}SzlW%G{4x;x>;1| QN}5{z02d|W80i530I;c@b^rhX literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88-man/tcpclient.1.gz b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88-man/tcpclient.1.gz new file mode 100644 index 0000000000000000000000000000000000000000..745b8c95f4ed5a93aa1547fb2439c5dc522f6b86 GIT binary patch literal 1308 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 tn<{PJA2)e=efA~^662GT)bd@$y*a5r6@>r* literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88-man/tcprulescheck.1.gz b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88-man/tcprulescheck.1.gz new file mode 100644 index 0000000000000000000000000000000000000000..e18557f9dcc416e0bbb7f1e5607167a0d573744a GIT binary patch literal 355 zcmV-p0i6CHiwFoNtCTzd19W3>a&>HFb7N>_V{0xk0A)};Z^AGT-Tf>c^w)yn5mN7ggCXrt|DM0@YOZO9J%YU z2%%YxHqv|awg0f6b90u?n#t1?MaT1EK^?v{IM~IB`bN$>6&67&^aDzJ>K{7-003_{ BskZb7gXNWpXYt0Hs*(Z`(Ey{m#FF9||l593@%TVQ9b9 zjnl?hYNxTgu2_eHmMEL6M5-iZ*Z=+Ak&-1l?yn6f5ZgK)-`%}?cWN@f=02^Qv}#kwEgpK_6=vht2AotjeVC7)m3^3-T8Q?HD6NjNuqH<{kf#xs^Y?|ibq zSTg1Yr`g~1X=R+Jzm>7^uQkhXdUQ3ryc^%n$J5E~gmPSP_)*evlk=tY`1#cNZ6V2^ zxw>%*W1}S(c3GEF`($^^(Fb%bB5=z2;F~Or<)yKmrAs*54`w42%ySs_qUX6aWlTw- z;;|R7kRo06%m!R}Zfosu{av`957{w%$@UiEja0Yn;)Vji7AQuIfdabO{6c}F%tHh#^NFSTyk{I4kNOzW5 z=}>9Mmuf9FUu<^?27-tkN#$L7OR?n(B#moP%82_+`t*!^s+1~c>0wW2N)uK?jN(DLOwIgtub{|yr%ZK=En;ei+ekO8mR;U_LO{NkRbbK~`IlsDl6?=3V z8Z5NvOQ{1dnnrrUlKCzD{{Hk6dtECDd?UlP@gS=LXQZ{%AP7S&CAG%R{xv%p$z0Th zPag8yZy2xHAJQ&R<>aVo;JNd{*KY54IDNTG@e$N1f1i&vYcQ|i2PzTz85!3^Axs48WkC!BXdY()JLIHNfscx-1NM&T6kOW+C>BwMhoKtj&Nss!}|>mEn@Xv$q(5j+Y9z7Pj^E)fHvZ?9KaCasl)TnoJi*RUHY5Iu%;Gg2_o zA=T|fXt_&BqzVAm_mv_C7m5FW~NK$OUYmylJOKTJP4Lny2BxT7LgMbL`P;1NngW3Y|o`4H`zY^Hi%CePBS;ZCaNpZ7e9o<41k4 z6}uHyXgCCyg8=nr(N};E_M+?db?Mp!?(Ng|oa zV?P?5LwJE%7Z;Cub@y@Dy`=ex8k(R=hlqMRU5h^K56x>v5KPzG^?&}g`TvxwD?YrL zOT_z937;|6jm_FGi^7$@%32SR&EeZ-WuAo(5J35? zaf7|w#?LG7t7p4oBAzLmklNo*8y=oKe#pX!Cue7=O}16y%~_qgN}a+gS^2VH{{pcq Jj1zJa001>|vI77B literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88-man/who@.1.gz b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88-man/who@.1.gz new file mode 100644 index 0000000000000000000000000000000000000000..5177182668264dfa524a941cfbcdaf2e3af7ddf3 GIT binary patch literal 443 zcmV;s0Yv^EiwFoNtCTzd19xa|KrS%=ZBfCF+At8k`zz)M5*TvWOHXVm6_Hv%giBR= zFwQ`%CbnfyvYWr}#6VV+_BJzq^WK|hdD_BTvf1ZO6#!>{T5NZ<% z+!d52(;>7GLj-3*LBPflLggaKL{a?O?GHs>2>CTJi{C=#>0SIufNz^(easK1e7_qp z+F6Tw5OZ)^AHcgnkYz9_`bdhVtTnPITRyER+e4{Hfgv`ck-bF;IVD$I!} zb6VB+SeT)34YGRU+oTgPddGek`@HncP{rb(1ufyb3xMyc@ioo_v-i-b9xe!>wbs}h zu)l*K?HSGo!u+_cm#|E{l@szH+Bm>Q#N(?r8+iRu>_0Xq*>pB^p{+6g*XRoM-!xI- z)-6+YHSanYmuimRh4R^4>e!GkpA4F_vXnahE?hmf?G3}du890 auto_home.c + +auto_home.o: \ +compile auto_home.c + ./compile auto_home.c + +buffer.o: \ +compile buffer.c buffer.h + ./compile buffer.c + +buffer_0.o: \ +compile buffer_0.c readwrite.h buffer.h + ./compile buffer_0.c + +buffer_1.o: \ +compile buffer_1.c readwrite.h buffer.h + ./compile buffer_1.c + +buffer_2.o: \ +compile buffer_2.c readwrite.h buffer.h + ./compile buffer_2.c + +buffer_copy.o: \ +compile buffer_copy.c buffer.h + ./compile buffer_copy.c + +buffer_get.o: \ +compile buffer_get.c buffer.h byte.h error.h + ./compile buffer_get.c + +buffer_put.o: \ +compile buffer_put.c buffer.h str.h byte.h error.h + ./compile buffer_put.c + +byte.a: \ +makelib byte_chr.o byte_copy.o byte_cr.o byte_diff.o byte_rchr.o \ +byte_zero.o case_diffb.o case_diffs.o fmt_ulong.o ip4_fmt.o \ +ip4_scan.o scan_ulong.o str_chr.o str_diff.o str_len.o str_start.o \ +uint16_pack.o uint16_unpack.o uint32_pack.o uint32_unpack.o \ +ip6_fmt.o scan_ip6.o scan_xlong.o fmt_xlong.o + ./makelib byte.a byte_chr.o byte_copy.o byte_cr.o \ + byte_diff.o byte_rchr.o byte_zero.o case_diffb.o \ + case_diffs.o fmt_ulong.o ip4_fmt.o ip4_scan.o scan_ulong.o \ + str_chr.o str_diff.o str_len.o str_start.o uint16_pack.o \ + uint16_unpack.o uint32_pack.o uint32_unpack.o ip6_fmt.o \ + scan_ip6.o scan_xlong.o fmt_xlong.o + +byte_chr.o: \ +compile byte_chr.c byte.h + ./compile byte_chr.c + +byte_copy.o: \ +compile byte_copy.c byte.h + ./compile byte_copy.c + +byte_cr.o: \ +compile byte_cr.c byte.h + ./compile byte_cr.c + +byte_diff.o: \ +compile byte_diff.c byte.h + ./compile byte_diff.c + +byte_rchr.o: \ +compile byte_rchr.c byte.h + ./compile byte_rchr.c + +byte_zero.o: \ +compile byte_zero.c byte.h + ./compile byte_zero.c + +case_diffb.o: \ +compile case_diffb.c case.h + ./compile case_diffb.c + +case_diffs.o: \ +compile case_diffs.c case.h + ./compile case_diffs.c + +cdb.a: \ +makelib cdb.o cdb_hash.o cdb_make.o + ./makelib cdb.a cdb.o cdb_hash.o cdb_make.o + +cdb.o: \ +compile cdb.c readwrite.h error.h seek.h byte.h cdb.h uint32.h + ./compile cdb.c + +cdb_hash.o: \ +compile cdb_hash.c cdb.h uint32.h + ./compile cdb_hash.c + +cdb_make.o: \ +compile cdb_make.c readwrite.h seek.h error.h alloc.h cdb.h uint32.h \ +cdb_make.h buffer.h uint32.h + ./compile cdb_make.c + +check: \ +it instcheck + ./instcheck + +chkshsgr: \ +load chkshsgr.o + ./load chkshsgr + +chkshsgr.o: \ +compile chkshsgr.c exit.h + ./compile chkshsgr.c + +choose: \ +warn-auto.sh choose.sh conf-home + cat warn-auto.sh choose.sh \ + | sed s}HOME}"`head -1 conf-home`"}g \ + > choose + chmod 755 choose + +commands.o: \ +compile commands.c buffer.h stralloc.h gen_alloc.h str.h case.h \ +commands.h + ./compile commands.c + +compile: \ +warn-auto.sh conf-cc + ( cat warn-auto.sh; \ + echo exec "`head -1 conf-cc`" '-c $${1+"$$@"}' \ + ) > compile + chmod 755 compile + +date@: \ +warn-auto.sh date@.sh conf-home + cat warn-auto.sh date@.sh \ + | sed s}HOME}"`head -1 conf-home`"}g \ + > date@ + chmod 755 date@ + +delcr: \ +load delcr.o unix.a byte.a + ./load delcr unix.a byte.a + +delcr.o: \ +compile delcr.c buffer.h exit.h + ./compile delcr.c + +dns.a: \ +makelib dns_dfd.o dns_domain.o dns_dtda.o dns_ip.o dns_ipq.o \ +dns_name.o dns_nd.o dns_packet.o dns_random.o dns_rcip.o dns_rcrw.o \ +dns_resolve.o dns_sortip.o dns_transmit.o dns_txt.o dns_ip6.o \ +dns_sortip6.o dns_nd6.o dns_ipq6.o + ./makelib dns.a dns_dfd.o dns_domain.o dns_dtda.o dns_ip.o \ + dns_ipq.o dns_name.o dns_nd.o dns_packet.o dns_random.o \ + dns_rcip.o dns_rcrw.o dns_resolve.o dns_sortip.o \ + dns_transmit.o dns_txt.o dns_ip6.o dns_sortip6.o dns_nd6.o \ + dns_ipq6.o + +dns_dfd.o: \ +compile dns_dfd.c error.h alloc.h byte.h dns.h stralloc.h gen_alloc.h \ +iopause.h taia.h tai.h uint64.h taia.h + ./compile dns_dfd.c + +dns_domain.o: \ +compile dns_domain.c error.h alloc.h case.h byte.h dns.h stralloc.h \ +gen_alloc.h iopause.h taia.h tai.h uint64.h taia.h + ./compile dns_domain.c + +dns_dtda.o: \ +compile dns_dtda.c stralloc.h gen_alloc.h dns.h stralloc.h iopause.h \ +taia.h tai.h uint64.h taia.h + ./compile dns_dtda.c + +dns_ip.o: \ +compile dns_ip.c stralloc.h gen_alloc.h uint16.h byte.h dns.h \ +stralloc.h iopause.h taia.h tai.h uint64.h taia.h + ./compile dns_ip.c + +dns_ipq.o: \ +compile dns_ipq.c stralloc.h gen_alloc.h case.h byte.h str.h dns.h \ +stralloc.h iopause.h taia.h tai.h uint64.h taia.h + ./compile dns_ipq.c + +dns_name.o: \ +compile dns_name.c stralloc.h gen_alloc.h uint16.h byte.h dns.h \ +stralloc.h iopause.h taia.h tai.h uint64.h taia.h + ./compile dns_name.c + +dns_nd.o: \ +compile dns_nd.c byte.h fmt.h dns.h stralloc.h gen_alloc.h iopause.h \ +taia.h tai.h uint64.h taia.h + ./compile dns_nd.c + +dns_packet.o: \ +compile dns_packet.c error.h dns.h stralloc.h gen_alloc.h iopause.h \ +taia.h tai.h uint64.h taia.h + ./compile dns_packet.c + +dns_random.o: \ +compile dns_random.c dns.h stralloc.h gen_alloc.h iopause.h taia.h \ +tai.h uint64.h taia.h taia.h uint32.h + ./compile dns_random.c + +dns_rcip.o: \ +compile dns_rcip.c taia.h tai.h uint64.h openreadclose.h stralloc.h \ +gen_alloc.h byte.h ip4.h env.h dns.h stralloc.h iopause.h taia.h \ +taia.h + ./compile dns_rcip.c + +dns_rcrw.o: \ +compile dns_rcrw.c taia.h tai.h uint64.h env.h byte.h str.h \ +openreadclose.h stralloc.h gen_alloc.h dns.h stralloc.h iopause.h \ +taia.h taia.h + ./compile dns_rcrw.c + +dns_resolve.o: \ +compile dns_resolve.c iopause.h taia.h tai.h uint64.h taia.h byte.h \ +dns.h stralloc.h gen_alloc.h iopause.h taia.h + ./compile dns_resolve.c + +dns_sortip.o: \ +compile dns_sortip.c byte.h dns.h stralloc.h gen_alloc.h iopause.h \ +taia.h tai.h uint64.h taia.h + ./compile dns_sortip.c + +dns_transmit.o: \ +compile dns_transmit.c socket.h uint16.h alloc.h error.h byte.h \ +readwrite.h uint16.h dns.h stralloc.h gen_alloc.h iopause.h taia.h \ +tai.h uint64.h taia.h uint32.h + ./compile dns_transmit.c + +dns_txt.o: \ +compile dns_txt.c stralloc.h gen_alloc.h uint16.h byte.h dns.h \ +stralloc.h iopause.h taia.h tai.h uint64.h taia.h + ./compile dns_txt.c + +env.o: \ +compile env.c str.h env.h + ./compile env.c + +error.o: \ +compile error.c error.h + ./compile error.c + +error_str.o: \ +compile error_str.c error.h + ./compile error_str.c + +fd_copy.o: \ +compile fd_copy.c fd.h + ./compile fd_copy.c + +fd_move.o: \ +compile fd_move.c fd.h + ./compile fd_move.c + +finger@: \ +warn-auto.sh finger@.sh conf-home + cat warn-auto.sh finger@.sh \ + | sed s}HOME}"`head -1 conf-home`"}g \ + > finger@ + chmod 755 finger@ + +fixcrio: \ +load fixcrio.o time.a unix.a byte.a + ./load fixcrio time.a unix.a byte.a + +fixcrio.o: \ +compile fixcrio.c sig.h buffer.h strerr.h byte.h readwrite.h exit.h \ +iopause.h taia.h tai.h uint64.h pathexec.h + ./compile fixcrio.c + +fmt_ulong.o: \ +compile fmt_ulong.c fmt.h + ./compile fmt_ulong.c + +fork.h: \ +choose compile load tryvfork.c fork.h1 fork.h2 + ./choose cl tryvfork fork.h1 fork.h2 > fork.h + +getln.o: \ +compile getln.c byte.h getln.h buffer.h stralloc.h gen_alloc.h + ./compile getln.c + +getln2.o: \ +compile getln2.c byte.h getln.h buffer.h stralloc.h gen_alloc.h + ./compile getln2.c + +hassgact.h: \ +choose compile load trysgact.c hassgact.h1 hassgact.h2 + ./choose cl trysgact hassgact.h1 hassgact.h2 > hassgact.h + +hassgprm.h: \ +choose compile load trysgprm.c hassgprm.h1 hassgprm.h2 + ./choose cl trysgprm hassgprm.h1 hassgprm.h2 > hassgprm.h + +hasshsgr.h: \ +choose compile load tryshsgr.c hasshsgr.h1 hasshsgr.h2 chkshsgr \ +warn-shsgr + ./chkshsgr || ( cat warn-shsgr; exit 1 ) + ./choose clr tryshsgr hasshsgr.h1 hasshsgr.h2 > hasshsgr.h + +haswaitp.h: \ +choose compile load trywaitp.c haswaitp.h1 haswaitp.h2 + ./choose cl trywaitp haswaitp.h1 haswaitp.h2 > haswaitp.h + +hier.o: \ +compile hier.c auto_home.h + ./compile hier.c + +http@: \ +warn-auto.sh http@.sh conf-home + cat warn-auto.sh http@.sh \ + | sed s}HOME}"`head -1 conf-home`"}g \ + > http@ + chmod 755 http@ + +install: \ +load install.o hier.o auto_home.o unix.a byte.a + ./load install hier.o auto_home.o unix.a byte.a + +install.o: \ +compile install.c buffer.h strerr.h error.h open.h readwrite.h exit.h + ./compile install.c + +instcheck: \ +load instcheck.o hier.o auto_home.o unix.a byte.a + ./load instcheck hier.o auto_home.o unix.a byte.a + +instcheck.o: \ +compile instcheck.c strerr.h error.h readwrite.h exit.h + ./compile instcheck.c + +iopause.h: \ +choose compile trypoll.c iopause.h1 iopause.h2 + ./choose clr trypoll iopause.h1 iopause.h2 > iopause.h + +iopause.o: \ +compile iopause.c taia.h tai.h uint64.h select.h iopause.h taia.h + ./compile iopause.c + +ip4_fmt.o: \ +compile ip4_fmt.c fmt.h ip4.h + ./compile ip4_fmt.c + +ip4_scan.o: \ +compile ip4_scan.c scan.h ip4.h + ./compile ip4_scan.c + +it: \ +prog install instcheck + +load: \ +warn-auto.sh conf-ld + ( cat warn-auto.sh; \ + echo 'main="$$1"; shift'; \ + echo exec "`head -1 conf-ld`" \ + '-o "$$main" "$$main".o $${1+"$$@"}' \ + ) > load + chmod 755 load + +makelib: \ +warn-auto.sh systype + ( cat warn-auto.sh; \ + echo 'main="$$1"; shift'; \ + echo 'rm -f "$$main"'; \ + echo 'ar cr "$$main" $${1+"$$@"}'; \ + case "`cat systype`" in \ + sunos-5.*) ;; \ + unix_sv*) ;; \ + irix64-*) ;; \ + irix-*) ;; \ + dgux-*) ;; \ + hp-ux-*) ;; \ + sco*) ;; \ + *) echo 'ranlib "$$main"' ;; \ + esac \ + ) > makelib + chmod 755 makelib + +mconnect: \ +warn-auto.sh mconnect.sh conf-home + cat warn-auto.sh mconnect.sh \ + | sed s}HOME}"`head -1 conf-home`"}g \ + > mconnect + chmod 755 mconnect + +mconnect-io: \ +load mconnect-io.o unix.a byte.a + ./load mconnect-io unix.a byte.a + +mconnect-io.o: \ +compile mconnect-io.c sig.h wait.h fork.h buffer.h strerr.h \ +readwrite.h exit.h + ./compile mconnect-io.c + +ndelay_off.o: \ +compile ndelay_off.c ndelay.h + ./compile ndelay_off.c + +ndelay_on.o: \ +compile ndelay_on.c ndelay.h + ./compile ndelay_on.c + +open_read.o: \ +compile open_read.c open.h + ./compile open_read.c + +open_trunc.o: \ +compile open_trunc.c open.h + ./compile open_trunc.c + +open_write.o: \ +compile open_write.c open.h + ./compile open_write.c + +openreadclose.o: \ +compile openreadclose.c error.h open.h readclose.h stralloc.h \ +gen_alloc.h openreadclose.h stralloc.h + ./compile openreadclose.c + +pathexec_env.o: \ +compile pathexec_env.c stralloc.h gen_alloc.h alloc.h str.h byte.h \ +env.h pathexec.h + ./compile pathexec_env.c + +pathexec_run.o: \ +compile pathexec_run.c error.h stralloc.h gen_alloc.h str.h env.h \ +pathexec.h + ./compile pathexec_run.c + +prog: \ +tcpserver tcprules tcprulescheck argv0 recordio tcpclient who@ date@ \ +finger@ http@ tcpcat mconnect mconnect-io addcr delcr fixcrio \ +rblsmtpd rts + +prot.o: \ +compile prot.c hasshsgr.h prot.h + ./compile prot.c + +rblsmtpd: \ +load rblsmtpd.o commands.o dns.a time.a unix.a byte.a socket.lib + ./load rblsmtpd commands.o dns.a time.a unix.a byte.a \ + `cat socket.lib` + +rblsmtpd.o: \ +compile rblsmtpd.c byte.h str.h scan.h fmt.h env.h exit.h sig.h \ +buffer.h readwrite.h sgetopt.h subgetopt.h strerr.h stralloc.h \ +gen_alloc.h commands.h pathexec.h dns.h stralloc.h iopause.h taia.h \ +tai.h uint64.h taia.h + ./compile rblsmtpd.c + +readclose.o: \ +compile readclose.c readwrite.h error.h readclose.h stralloc.h \ +gen_alloc.h + ./compile readclose.c + +recordio: \ +load recordio.o time.a unix.a byte.a + ./load recordio time.a unix.a byte.a + +recordio.o: \ +compile recordio.c sig.h buffer.h strerr.h str.h byte.h readwrite.h \ +exit.h fmt.h iopause.h taia.h tai.h uint64.h pathexec.h + ./compile recordio.c + +remoteinfo.o: \ +compile remoteinfo.c fmt.h buffer.h socket.h uint16.h error.h \ +iopause.h taia.h tai.h uint64.h timeoutconn.h uint16.h remoteinfo.h \ +stralloc.h gen_alloc.h uint16.h uint32.h + ./compile remoteinfo.c + +remoteinfo6.o: \ +compile remoteinfo6.c fmt.h buffer.h socket.h uint16.h error.h \ +iopause.h taia.h tai.h uint64.h timeoutconn.h uint16.h remoteinfo.h \ +stralloc.h gen_alloc.h uint16.h uint32.h + ./compile remoteinfo6.c + +rts: \ +warn-auto.sh rts.sh conf-home + cat warn-auto.sh rts.sh \ + | sed s}HOME}"`head -1 conf-home`"}g \ + > rts + chmod 755 rts + +rules.o: \ +compile rules.c alloc.h stralloc.h gen_alloc.h open.h cdb.h uint32.h \ +rules.h stralloc.h + ./compile rules.c + +scan_ulong.o: \ +compile scan_ulong.c scan.h + ./compile scan_ulong.c + +seek_set.o: \ +compile seek_set.c seek.h + ./compile seek_set.c + +select.h: \ +choose compile trysysel.c select.h1 select.h2 + ./choose c trysysel select.h1 select.h2 > select.h + +setup: \ +it install + ./install + +sgetopt.o: \ +compile sgetopt.c buffer.h sgetopt.h subgetopt.h subgetopt.h + ./compile sgetopt.c + +sig.o: \ +compile sig.c sig.h + ./compile sig.c + +sig_block.o: \ +compile sig_block.c sig.h hassgprm.h + ./compile sig_block.c + +sig_catch.o: \ +compile sig_catch.c sig.h hassgact.h + ./compile sig_catch.c + +sig_pause.o: \ +compile sig_pause.c sig.h hassgprm.h + ./compile sig_pause.c + +socket.lib: \ +trylsock.c compile load + ( ( ./compile trylsock.c && \ + ./load trylsock -lsocket -lnsl ) >/dev/null 2>&1 \ + && echo -lsocket -lnsl || exit 0 ) > socket.lib + rm -f trylsock.o trylsock + +socket_accept.o: \ +compile socket_accept.c byte.h socket.h uint16.h uint32.h + ./compile socket_accept.c + +socket_bind.o: \ +compile socket_bind.c byte.h socket.h uint16.h uint32.h + ./compile socket_bind.c + +socket_conn.o: \ +compile socket_conn.c readwrite.h byte.h socket.h uint16.h uint32.h + ./compile socket_conn.c + +socket_delay.o: \ +compile socket_delay.c socket.h uint16.h uint32.h + ./compile socket_delay.c + +socket_listen.o: \ +compile socket_listen.c socket.h uint16.h uint32.h + ./compile socket_listen.c + +socket_local.o: \ +compile socket_local.c byte.h socket.h uint16.h uint32.h + ./compile socket_local.c + +socket_opts.o: \ +compile socket_opts.c socket.h uint16.h uint32.h + ./compile socket_opts.c + +socket_remote.o: \ +compile socket_remote.c byte.h socket.h uint16.h uint32.h + ./compile socket_remote.c + +socket_tcp.o: \ +compile socket_tcp.c ndelay.h socket.h uint16.h uint32.h + ./compile socket_tcp.c + +socket_udp.o: \ +compile socket_udp.c ndelay.h socket.h uint16.h uint32.h + ./compile socket_udp.c + +str_chr.o: \ +compile str_chr.c str.h + ./compile str_chr.c + +str_diff.o: \ +compile str_diff.c str.h + ./compile str_diff.c + +str_len.o: \ +compile str_len.c str.h + ./compile str_len.c + +str_start.o: \ +compile str_start.c str.h + ./compile str_start.c + +stralloc_cat.o: \ +compile stralloc_cat.c byte.h stralloc.h gen_alloc.h + ./compile stralloc_cat.c + +stralloc_catb.o: \ +compile stralloc_catb.c stralloc.h gen_alloc.h byte.h + ./compile stralloc_catb.c + +stralloc_cats.o: \ +compile stralloc_cats.c byte.h str.h stralloc.h gen_alloc.h + ./compile stralloc_cats.c + +stralloc_copy.o: \ +compile stralloc_copy.c byte.h stralloc.h gen_alloc.h + ./compile stralloc_copy.c + +stralloc_eady.o: \ +compile stralloc_eady.c alloc.h stralloc.h gen_alloc.h \ +gen_allocdefs.h + ./compile stralloc_eady.c + +stralloc_opyb.o: \ +compile stralloc_opyb.c stralloc.h gen_alloc.h byte.h + ./compile stralloc_opyb.c + +stralloc_opys.o: \ +compile stralloc_opys.c byte.h str.h stralloc.h gen_alloc.h + ./compile stralloc_opys.c + +stralloc_pend.o: \ +compile stralloc_pend.c alloc.h stralloc.h gen_alloc.h \ +gen_allocdefs.h + ./compile stralloc_pend.c + +strerr_die.o: \ +compile strerr_die.c buffer.h exit.h strerr.h + ./compile strerr_die.c + +strerr_sys.o: \ +compile strerr_sys.c error.h strerr.h + ./compile strerr_sys.c + +subgetopt.o: \ +compile subgetopt.c subgetopt.h + ./compile subgetopt.c + +systype: \ +find-systype.sh conf-cc conf-ld trycpp.c x86cpuid.c + ( cat warn-auto.sh; \ + echo CC=\'`head -1 conf-cc`\'; \ + echo LD=\'`head -1 conf-ld`\'; \ + cat find-systype.sh; \ + ) | sh > systype + +tai_pack.o: \ +compile tai_pack.c tai.h uint64.h + ./compile tai_pack.c + +taia_add.o: \ +compile taia_add.c taia.h tai.h uint64.h + ./compile taia_add.c + +taia_approx.o: \ +compile taia_approx.c taia.h tai.h uint64.h + ./compile taia_approx.c + +taia_frac.o: \ +compile taia_frac.c taia.h tai.h uint64.h + ./compile taia_frac.c + +taia_less.o: \ +compile taia_less.c taia.h tai.h uint64.h + ./compile taia_less.c + +taia_now.o: \ +compile taia_now.c taia.h tai.h uint64.h + ./compile taia_now.c + +taia_pack.o: \ +compile taia_pack.c taia.h tai.h uint64.h + ./compile taia_pack.c + +taia_sub.o: \ +compile taia_sub.c taia.h tai.h uint64.h + ./compile taia_sub.c + +taia_uint.o: \ +compile taia_uint.c taia.h tai.h uint64.h + ./compile taia_uint.c + +tcpcat: \ +warn-auto.sh tcpcat.sh conf-home + cat warn-auto.sh tcpcat.sh \ + | sed s}HOME}"`head -1 conf-home`"}g \ + > tcpcat + chmod 755 tcpcat + +tcpclient: \ +load tcpclient.o remoteinfo6.o dns.a time.a unix.a \ +byte.a socket.lib byte.h timeoutconn6.o + ./load tcpclient remoteinfo6.o timeoutconn6.o dns.a time.a \ + unix.a byte.a `cat socket.lib` + +tcpclient.o: \ +compile tcpclient.c sig.h exit.h sgetopt.h subgetopt.h uint16.h fmt.h \ +scan.h str.h ip4.h uint16.h socket.h uint16.h fd.h stralloc.h \ +gen_alloc.h buffer.h error.h strerr.h pathexec.h timeoutconn.h \ +uint16.h remoteinfo.h stralloc.h uint16.h dns.h stralloc.h iopause.h \ +taia.h tai.h uint64.h taia.h uint32.h + ./compile tcpclient.c + +tcprules: \ +load tcprules.o cdb.a unix.a byte.a + ./load tcprules cdb.a unix.a byte.a + +tcprules.o: \ +compile tcprules.c strerr.h stralloc.h gen_alloc.h getln.h buffer.h \ +stralloc.h buffer.h exit.h fmt.h byte.h cdb_make.h buffer.h uint32.h + ./compile tcprules.c + +tcprulescheck: \ +load tcprulescheck.o rules.o cdb.a unix.a byte.a + ./load tcprulescheck rules.o cdb.a unix.a byte.a + +tcprulescheck.o: \ +compile tcprulescheck.c byte.h buffer.h strerr.h env.h rules.h \ +stralloc.h gen_alloc.h + ./compile tcprulescheck.c + +tcpserver: \ +load tcpserver.o rules.o remoteinfo6.o timeoutconn6.o cdb.a dns.a \ +time.a unix.a byte.a socket.lib + ./load tcpserver rules.o remoteinfo6.o timeoutconn6.o cdb.a \ + dns.a time.a unix.a byte.a `cat socket.lib` + +tcpserver.o: \ +compile tcpserver.c uint16.h str.h byte.h fmt.h scan.h ip4.h fd.h \ +exit.h env.h prot.h open.h wait.h readwrite.h stralloc.h gen_alloc.h \ +alloc.h buffer.h error.h strerr.h sgetopt.h subgetopt.h pathexec.h \ +socket.h uint16.h ndelay.h remoteinfo.h stralloc.h uint16.h rules.h \ +stralloc.h sig.h dns.h stralloc.h iopause.h taia.h tai.h uint64.h \ +taia.h uint32.h + ./compile tcpserver.c + +time.a: \ +makelib iopause.o tai_pack.o taia_add.o taia_approx.o taia_frac.o \ +taia_less.o taia_now.o taia_pack.o taia_sub.o taia_uint.o + ./makelib time.a iopause.o tai_pack.o taia_add.o \ + taia_approx.o taia_frac.o taia_less.o taia_now.o \ + taia_pack.o taia_sub.o taia_uint.o + +timeoutconn.o: \ +compile timeoutconn.c ndelay.h socket.h uint16.h iopause.h taia.h \ +tai.h uint64.h error.h timeoutconn.h uint16.h uint32.h + ./compile timeoutconn.c + +timeoutconn6.o: \ +compile timeoutconn6.c ndelay.h socket.h uint16.h iopause.h taia.h \ +tai.h uint64.h error.h timeoutconn.h uint16.h uint32.h + ./compile timeoutconn6.c + +uint16_pack.o: \ +compile uint16_pack.c uint16.h + ./compile uint16_pack.c + +uint16_unpack.o: \ +compile uint16_unpack.c uint16.h + ./compile uint16_unpack.c + +uint32.h: \ +tryulong32.c compile load uint32.h1 uint32.h2 + ( ( ./compile tryulong32.c && ./load tryulong32 && \ + ./tryulong32 ) >/dev/null 2>&1 \ + && cat uint32.h2 || cat uint32.h1 ) > uint32.h + rm -f tryulong32.o tryulong32 + +uint32_pack.o: \ +compile uint32_pack.c uint32.h + ./compile uint32_pack.c + +uint32_unpack.o: \ +compile uint32_unpack.c uint32.h + ./compile uint32_unpack.c + +uint64.h: \ +choose compile load tryulong64.c uint64.h1 uint64.h2 + ./choose clr tryulong64 uint64.h1 uint64.h2 > uint64.h + +unix.a: \ +makelib alloc.o alloc_re.o buffer.o buffer_0.o buffer_1.o buffer_2.o \ +buffer_copy.o buffer_get.o buffer_put.o env.o error.o error_str.o \ +fd_copy.o fd_move.o getln.o getln2.o ndelay_off.o ndelay_on.o \ +open_read.o open_trunc.o open_write.o openreadclose.o pathexec_env.o \ +pathexec_run.o prot.o readclose.o seek_set.o sgetopt.o sig.o \ +sig_block.o sig_catch.o sig_pause.o socket_accept.o socket_bind.o \ +socket_conn.o socket_delay.o socket_listen.o socket_local.o \ +socket_opts.o socket_remote.o socket_tcp.o socket_udp.o \ +stralloc_cat.o stralloc_catb.o stralloc_cats.o stralloc_copy.o \ +stralloc_eady.o stralloc_opyb.o stralloc_opys.o stralloc_pend.o \ +strerr_die.o strerr_sys.o subgetopt.o wait_nohang.o wait_pid.o \ +socket_conn6.o socket_bind6.o socket_accept6.o socket_recv6.o \ +socket_send6.o socket_local6.o socket_remote6.o socket_tcp6.o \ +socket_getifname.o socket_getifidx.o socket_v4mappedprefix.o \ +socket_ip4loopback.o socket_v6any.o socket_v6loopback.o \ +socket_udp6.o + ./makelib unix.a alloc.o alloc_re.o buffer.o buffer_0.o \ + buffer_1.o buffer_2.o buffer_copy.o buffer_get.o \ + buffer_put.o env.o error.o error_str.o fd_copy.o fd_move.o \ + getln.o getln2.o ndelay_off.o ndelay_on.o open_read.o \ + open_trunc.o open_write.o openreadclose.o pathexec_env.o \ + pathexec_run.o prot.o readclose.o seek_set.o sgetopt.o \ + sig.o sig_block.o sig_catch.o sig_pause.o socket_accept.o \ + socket_bind.o socket_conn.o socket_delay.o socket_listen.o \ + socket_local.o socket_opts.o socket_remote.o socket_tcp.o \ + socket_udp.o stralloc_cat.o stralloc_catb.o stralloc_cats.o \ + stralloc_copy.o stralloc_eady.o stralloc_opyb.o \ + stralloc_opys.o stralloc_pend.o strerr_die.o strerr_sys.o \ + subgetopt.o wait_nohang.o wait_pid.o socket_conn6.o \ + socket_bind6.o socket_accept6.o socket_recv6.o socket_send6.o \ + socket_local6.o socket_remote6.o socket_tcp6.o \ + socket_getifname.o socket_getifidx.o socket_v4mappedprefix.o \ + socket_ip4loopback.o socket_v6any.o socket_v6loopback.o \ + socket_udp6.o + +wait_nohang.o: \ +compile wait_nohang.c haswaitp.h + ./compile wait_nohang.c + +wait_pid.o: \ +compile wait_pid.c error.h haswaitp.h + ./compile wait_pid.c + +who@: \ +warn-auto.sh who@.sh conf-home + cat warn-auto.sh who@.sh \ + | sed s}HOME}"`head -1 conf-home`"}g \ + > who@ + chmod 755 who@ + +socket_conn6.o: \ +compile socket_conn6.c socket.h uint16.h haveip6.h error.h ip6.h \ +uint32.h + ./compile socket_conn6.c + +socket_bind6.o: \ +compile socket_bind6.c socket.h uint16.h haveip6.h error.h ip6.h \ +uint32.h + ./compile socket_bind6.c + +socket_accept6.o: \ +compile socket_accept6.c socket.h uint16.h haveip6.h error.h ip6.h \ +uint32.h + ./compile socket_accept6.c + +socket_recv6.o: \ +compile socket_recv6.c socket.h uint16.h haveip6.h error.h ip6.h \ +uint32.h + ./compile socket_recv6.c + +socket_send6.o: \ +compile socket_send6.c socket.h uint16.h haveip6.h error.h uint32.h + ./compile socket_send6.c + +socket_local6.o: \ +compile socket_local6.c socket.h uint16.h haveip6.h error.h uint32.h + ./compile socket_local6.c + +socket_remote6.o: \ +compile socket_remote6.c socket.h uint16.h haveip6.h error.h uint32.h + ./compile socket_remote6.c + +dns_sortip6.o: \ +compile dns_sortip6.c byte.h dns.h stralloc.h gen_alloc.h iopause.h \ +taia.h tai.h uint64.h taia.h + ./compile dns_sortip6.c + +dns_nd6.o: \ +compile dns_nd6.c byte.h fmt.h dns.h stralloc.h gen_alloc.h iopause.h \ +taia.h tai.h uint64.h taia.h + ./compile dns_nd6.c + +dns_ipq6.o: \ +compile dns_ipq6.c stralloc.h gen_alloc.h case.h byte.h str.h dns.h \ +stralloc.h iopause.h taia.h tai.h uint64.h taia.h ip6.h + ./compile dns_ipq6.c + +dns_ip6.o: \ +compile dns_ip6.c stralloc.h gen_alloc.h uint16.h byte.h dns.h \ +stralloc.h iopause.h taia.h tai.h uint64.h taia.h + ./compile dns_ip6.c + +fmt_xlong.o: \ +compile fmt_xlong.c scan.h + ./compile fmt_xlong.c + +scan_xlong.o: \ +compile scan_xlong.c scan.h + ./compile scan_xlong.c + +ip6_fmt.o: \ +compile ip6_fmt.c fmt.h ip6.h + ./compile ip6_fmt.c + +scan_ip6.o: \ +compile scan_ip6.c scan.h ip6.h + ./compile scan_ip6.c + +socket_tcp6.o: \ +compile socket_tcp6.c ndelay.h socket.h uint16.h haveip6.h uint32.h + ./compile socket_tcp6.c + +socket_udp6.o: \ +compile socket_udp6.c ndelay.h socket.h uint16.h haveip6.h uint32.h + ./compile socket_udp6.c + +haveip6.h: \ +tryip6.c choose compile haveip6.h1 haveip6.h2 + ./choose c tryip6 haveip6.h1 haveip6.h2 > haveip6.h + +socket_getifname.o: \ +compile socket_getifname.c socket.h uint16.h uint32.h + ./compile socket_getifname.c + +socket_getifidx.o: \ +compile socket_getifidx.c socket.h uint16.h uint32.h + ./compile socket_getifidx.c + +socket_ip4loopback.o: \ +compile socket_ip4loopback.c + ./compile socket_ip4loopback.c + +socket_v4mappedprefix.o: \ +compile socket_v4mappedprefix.c + ./compile socket_v4mappedprefix.c + +socket_v6any.o: \ +compile socket_v6any.c + ./compile socket_v6any.c + +socket_v6loopback.o: \ +compile socket_v6loopback.c + ./compile socket_v6loopback.c + +clean: + rm -f `cat TARGETS` diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/README b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/README new file mode 100644 index 0000000..2d6ab86 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/README @@ -0,0 +1,7 @@ +ucspi-tcp 0.88, beta. +20000318 +Copyright 2000 +D. J. Bernstein + +ucspi-tcp home page: http://cr.yp.to/ucspi-tcp.html +Installation instructions: http://cr.yp.to/ucspi-tcp/install.html diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/SYSDEPS b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/SYSDEPS new file mode 100644 index 0000000..e024e62 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/SYSDEPS @@ -0,0 +1,12 @@ +VERSION +systype +fork.h +hassgact.h +hassgprm.h +hasshsgr.h +haswaitp.h +iopause.h +select.h +socket.lib +uint32.h +uint64.h diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/TARGETS b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/TARGETS new file mode 100644 index 0000000..0385f96 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/TARGETS @@ -0,0 +1,199 @@ +load +compile +choose +iopause.h +uint64.h +tcpserver.o +uint32.h +rules.o +remoteinfo.o +timeoutconn.o +systype +makelib +cdb.o +cdb_hash.o +cdb_make.o +cdb.a +dns_dfd.o +dns_domain.o +dns_dtda.o +dns_ip.o +dns_ipq.o +dns_name.o +dns_nd.o +dns_packet.o +dns_random.o +dns_rcip.o +dns_rcrw.o +dns_resolve.o +dns_sortip.o +dns_transmit.o +dns_txt.o +dns.a +select.h +iopause.o +tai_pack.o +taia_add.o +taia_approx.o +taia_frac.o +taia_less.o +taia_now.o +taia_pack.o +taia_sub.o +taia_uint.o +time.a +alloc.o +alloc_re.o +buffer.o +buffer_0.o +buffer_1.o +buffer_2.o +buffer_copy.o +buffer_get.o +buffer_put.o +env.o +error.o +error_str.o +fd_copy.o +fd_move.o +getln.o +getln2.o +ndelay_off.o +ndelay_on.o +open_read.o +open_trunc.o +open_write.o +openreadclose.o +pathexec_env.o +pathexec_run.o +chkshsgr.o +chkshsgr +hasshsgr.h +prot.o +readclose.o +seek_set.o +sgetopt.o +sig.o +hassgprm.h +sig_block.o +hassgact.h +sig_catch.o +sig_pause.o +socket_accept.o +socket_bind.o +socket_conn.o +socket_delay.o +socket_listen.o +socket_local.o +socket_opts.o +socket_remote.o +socket_tcp.o +socket_udp.o +stralloc_cat.o +stralloc_catb.o +stralloc_cats.o +stralloc_copy.o +stralloc_eady.o +stralloc_opyb.o +stralloc_opys.o +stralloc_pend.o +strerr_die.o +strerr_sys.o +subgetopt.o +haswaitp.h +wait_nohang.o +wait_pid.o +unix.a +byte_chr.o +byte_copy.o +byte_cr.o +byte_diff.o +byte_rchr.o +byte_zero.o +case_diffb.o +case_diffs.o +fmt_ulong.o +ip4_fmt.o +ip4_scan.o +scan_ulong.o +str_chr.o +str_diff.o +str_len.o +str_start.o +uint16_pack.o +uint16_unpack.o +uint32_pack.o +uint32_unpack.o +byte.a +socket.lib +tcpserver +tcprules.o +tcprules +tcprulescheck.o +tcprulescheck +argv0.o +argv0 +recordio.o +recordio +tcpclient.o +tcpclient +who@ +date@ +finger@ +http@ +tcpcat +mconnect +fork.h +mconnect-io.o +mconnect-io +addcr.o +addcr +delcr.o +delcr +fixcrio.o +fixcrio +rblsmtpd.o +commands.o +rblsmtpd +rts +prog +install.o +hier.o +auto-str.o +auto-str +auto_home.c +auto_home.o +install +instcheck.o +instcheck +it +setup +check +dns_ip6.o +dns_ipq6.o +dns_nd6.o +dns_sortip6.o +fmt_xlong.o +ip6_fmt.o +ip6_scan.o +scan_0x.o +socket_accept6.o +socket_bind6.o +socket_conn6.o +socket_local6.o +socket_recv6.o +socket_remote6.o +socket_send6.o +socket_tcp6.o +timeoutconn6.o +haveip6.h +remoteinfo6.o +socket_getifidx.o +socket_getifname.o +scan_ip6.o +scan_xlong.o +socket_ip4loopback.o +socket_udp6.o +socket_v4mappedprefix.o +socket_v6any.o +socket_v6loopback.o diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/TODO b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/TODO new file mode 100644 index 0000000..f620416 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/TODO @@ -0,0 +1,3 @@ +inetd.conf conversion tools +pre-forking version of tcpserver? +rule directory in tcpserver? diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/VERSION b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/VERSION new file mode 100644 index 0000000..2b47df0 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/VERSION @@ -0,0 +1 @@ +ucspi-tcp 0.88 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/addcr b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/addcr new file mode 100755 index 0000000000000000000000000000000000000000..21b5129b22436b73fd3649b152e1246095e1a3ca GIT binary patch literal 7984 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 literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/addcr.1 b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/addcr.1 new file mode 100644 index 0000000..3bae1f7 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/addcr.1 @@ -0,0 +1,22 @@ +.TH addcr 1 +.SH NAME +addcr \- add a CR before each LF +.SH SYNOPSIS +.B addcr +.SH DESCRIPTION +.B addcr +inserts CR at the end of each line of input. +It does not insert CR at the end of a partial final line. +.SH COMPATIBILITY +Some vendors ship +.B unix2dos +or +.B bsd2dos +tools similar to +.BR addcr . +Those tools often blow up on long lines and nulls. +.B addcr +has no trouble with long lines and nulls. +.SH "SEE ALSO" +delcr(1), +fixcr(1) diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/addcr.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/addcr.c new file mode 100644 index 0000000..e8b69e3 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/addcr.c @@ -0,0 +1,22 @@ +#include "buffer.h" +#include "exit.h" + +main() +{ + register int n; + register char *x; + char ch; + + for (;;) { + n = buffer_feed(buffer_0); + if (n < 0) _exit(111); + if (!n) _exit(0); + x = buffer_PEEK(buffer_0); + buffer_SEEK(buffer_0,n); + while (n > 0) { + ch = *x++; --n; + if (ch == '\n') buffer_PUTC(buffer_1,"\r"[0]); + buffer_PUTC(buffer_1,ch); + } + } +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/addcr.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/addcr.o new file mode 100644 index 0000000000000000000000000000000000000000..537314756576c9eaf7d3a172365174dedfcf35b0 GIT binary patch literal 2024 zcmbuA&ubGw6vy9Yqm41m#vjmvLIM`C&@M?8w4x=kX|so7MJ;%dut_$g*d#UC((1)S ziZpCPd-bG$gNK5GzYwHH#iN&=#1aqo)y(A)6GR6%+7nC`Oce}x0%heshMe? zBmp-GCg3pQ6ky*4lQvF5KLjClf9{^v_#K&P6^0Zg3YvA3Mt{+xu@B8p%K8g*mDQK{ z)U0E~tvjJ%EuhH}Nei`79j&$CleFe{WlPo?pQRhYwe*l;sw|VW92j2?nHgmZsb&o{ z_tyNu*0j{j1hnzCxzXNMqG?KPuWQW)#%Dw31PQml_0OXkB9a{H3v6P}A!O(65rAFl zZ-pbN@L(z&ONZkP|8sfW=Zt11C$GmYrH$OYUWr{%FRNpt2{ke7xBzPXN!iqM*qb${ zFLAGCEa<9fteBt{bW;a4SFeLwt5QI6OoJhbj8e8()5`{^`D(drRB%S6Y8qRhC$Xn>0xTY6{YA!Q7V~a| z#2zNDHG&$-`LFX6IG2_h!{#==K6~5UA-*l%PvHppqAtz^$?iF$y*w;RK z0`NLf{ivjTKIgN@_+HTM+9HF|E^!=D`v9@XNV(w!J+!BgiM4mnFHzt!F)hVn?MQyj z{=xv1*n|+W6WGM_6Z2aC75n|!UlY`D6W8Zl>`CW`J^EZ6G1;?Xv=6VH5chh+#MvQ* z733qg(GkdY1q3mMaE3zex!Qw+UMS>iY97k^ zdQA#1G6o0t;L&;yNrD?w}r_$epj_kcLv5zgc2lZpC= u4z@Y{rnuhf!QZ$z{cmvnwu@6uIsev!|6rW= space) + if (x < space + SPACE) + return; /* XXX: assuming that pointers are flat */ + free(x); +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/alloc.h b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/alloc.h new file mode 100644 index 0000000..1b1d893 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/alloc.h @@ -0,0 +1,8 @@ +#ifndef ALLOC_H +#define ALLOC_H + +extern /*@null@*//*@out@*/char *alloc(); +extern void alloc_free(); +extern int alloc_re(); + +#endif diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/alloc.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/alloc.o new file mode 100644 index 0000000000000000000000000000000000000000..b920bdc02799405ec966b3c3a11ea5fa9bd3e6b4 GIT binary patch literal 1920 zcmbW2PiqrV5Wr`fY8#DB{0E9cf`~L=S5u3q2MN@gC{o1YL3#);@r4Gn*|J${^q`gK zAr!%*$9|MR4*dcidMtQQ@uGO~Ak>++^OEOtb8(=VncvL3H#_g`_SMq8+Y^ohS{%3u zBTrL+Z37k+EgS+N;-<52$c3!~^xOUXeWkmTxxVu( zoB!2QsMjyQ`#`aBZ+CT2*ZGD17X{z;%e}$VPs-UkNvN0k_7T-I+2iE|hnyD=!0BY1 zL~3gKJw6NZvm85TloMZIf0^{%nM`*Ab!l<&MsD_&tTsd|x8PoJ=jRG;As?9lZu_|x ziYn?bi1eDa0@)O9C_5pzk3}fJt+w0XDk|41^+0$M+?wxsvV|!vKa_51`QcnU6tySZ z$^WYymeSE3w3aBc|I*?a%Rhtuq{YbX@PfM>JA|6{(Z_L$`32?)_OVXtlb7cr04 zwCne{ez+m~In7yLMNNIt5t_2cPT7QL>;5$^pken!vHMd|#^p!>JwM%JU9X?Nh>Z5P zWtL&q3fQ@KFm5v{DaFB<+@r|s*_ri^$T7rTmVA45l)lYF+2n%5$Y=)k^CywT?VscO zvx0F`?ETG{X;a=L{7@eslarl@ofz@BPKf_|!qm58a(=MmijUSYD--GlPzQfYVmK9> z^CdFyX|#_S{p)YjdF1xHNo9G?*Y{9;vyffFzqovQAL4jv38F+B7>miSFlus4Zj8G`az}Td(y*=Q1k@p-k38?sVKmZ^W5i| z(_N(6-}{j)jp2F@!*w{XX5=3+)>$|BjKMbyo;JAp7lc0bLwo3ca%hv#yI{UI*AyLb HeO`Y6t`o0z literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/alloc_re.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/alloc_re.c new file mode 100644 index 0000000..feb8b49 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/alloc_re.c @@ -0,0 +1,17 @@ +#include "alloc.h" +#include "byte.h" + +int alloc_re(x,m,n) +char **x; +unsigned int m; +unsigned int n; +{ + char *y; + + y = alloc(n); + if (!y) return 0; + byte_copy(y,m,*x); + alloc_free(*x); + *x = y; + return 1; +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/alloc_re.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/alloc_re.o new file mode 100644 index 0000000000000000000000000000000000000000..11b8364f23607d728394adb4e729609ef4e52bab GIT binary patch literal 1544 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 literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/argv0.1 b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/argv0.1 new file mode 100644 index 0000000..ad9634d --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/argv0.1 @@ -0,0 +1,47 @@ +.TH argv0 1 +.SH NAME +argv0 \- run a program with a specified 0th argument +.SH SYNOPSIS +.B argv0 +.I realname +.I zero +[ +.I arg ... +] +.SH DESCRIPTION +.B argv0 +runs +the program stored as +.I realname +on disk, +with the given +arguments. +It sets the 0th argument of +the program to +.IR zero . + +For example, + +.EX + argv0 /bin/csh -bin/csh +.EE + +runs +.B /bin/csh +with a 0th argument of +.BR -bin/csh . +.B csh +will think it is a login shell +and behave accordingly. + +.B argv0 +can be used to run some +.B inetd +wrappers under +.BR tcpserver . +.SH "SEE ALSO" +csh(1), +tcpserver(1), +execve(2), +execvp(3), +inetd(8) diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/argv0.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/argv0.c new file mode 100644 index 0000000..2a0e936 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/argv0.c @@ -0,0 +1,10 @@ +#include "pathexec.h" +#include "strerr.h" + +main(int argc,char **argv,char **envp) +{ + if (argc < 3) + strerr_die1x(100,"argv0: usage: argv0 realname program [ arg ... ]"); + pathexec_run(argv[1],argv + 2,envp); + strerr_die4sys(111,"argv0: fatal: ","unable to run ",argv[1],": "); +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/argv0.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/argv0.o new file mode 100644 index 0000000000000000000000000000000000000000..aeabbbfdad2d1a39e5c9ef882a3e0a844f435a41 GIT binary patch literal 2000 zcmbtUPiqrF6rW_HjkbnZJVX>6p@@ndx>c~`ASrFlf})}plv2YaouF*-dG#Xey$J z0*?a87qk?J24|62jR>2Avk+DdL&Aak8O0=fB3g5R2y;g=Nx5rJ&s;eSVBVD#1#M|BXhV^OEiDI!^P4U_m*( z=OG2E9L6kM*Vph}5bU0yZKF?m=ssir5z_G*e*&03i;R%_BL$u_!35uW0)`+x2CY-W~liy(hzuI%UsvWFaQkgQ)9FKS zy!T1|^3`TF(&URif!9$4L1k`HkR={1h*eRmz}v3zupMFzB>i^dKQ_B^J+{gj=?D4G zuB5Vo1U2Zhs`bTHH;lAHF=bm%#IrpA>-+jy0HK99fio#^EvF|eC_Bb>yvYw2MT+LY_Th3fe zVD}cm_s__;=i;|cYT}yNcJv-1rv`q+XnnegKu{exj73m=%jW<&?L0TAeTdYLJ zR4yPp@|Afx3v99ofjfmCX>yDgl|M;LcBR6uROn0GDIAk1@;i zmz6JD>W_8%7jyq9YzndZ&N|+uoDXSF(^ZH{YjUaa$(C&7dJ|2$B)9ax!Pi9E-~IdD z-g%EbE5n1<>_T?xY!T;{;W;#x})`7;9|p=`f(v8jVJ}8#}w3!$wDU z1On0%MqS~K2-_0vFj`r4sAkpb#>M`{{#$wfHq0IUDg2MtLZl&!U)OO3&Fr1RkHhnt zI7M?RLg#!&$Z3s4DsuTmj(j@h(K4AMm$}6a<~MPWYt0!v^yDd5=4lX_8!&9JUt6FP{g;B+1O|nWl@xPa&>Hk^A8hGE{>%+zn*w#1vg3RW-o5_4eEt`FXy)vMl&E%Gc(kR$rwDn&P) ztx(Ed{W8}|U9*l%s@{yg|B7=pNQH)b@W^mmTbtjru#e1Got|9z+#D4hm?w?v_K}Eu z^X^wMP>nf!B#`|Z&DW7(%S#@EIkjKI{AWCvj$~RfoIH;G-7v09XMQ)8&9=$@1NYTY zI9@&VkW24B?&*7uMo2}xdjDxp-!owLzlb9xvkOzCo9||x1@3=|BtHY?+1tSSjvIID z$(I#$8HDy9sckdb%wy?syKa7v94&k$=(EF-itRz4jf)|(SY>c^#de1;vqp4A9rYcL zKfnJ~>gE<2j7RbdID$yx#WILf7tz#W1vCn}GK`paVasF{c7`0rPy|z8dpr zo%!m$<6rYE#5|ZEhRnYQ&5r`vza}TM=CJVH`gdhlVpx zq1O~!;SA4Jneo1PZ2Uyd`lRl1>E>krk$6F6dKmp4s&>ICmfC_D#lNk^V~-+;nf27o zdS6C2JAD(n`B}(p@l9g(i)+kt=Ia^CTexD}l#0Rhv0`&9guG3a`1Dk#&lO6w_`F!i z;;~YiERi3dZ>IE_J>G;hj(OG^>Vj^5lIg?F(am>4<_CJJUUY80#Jm3?IXvAz{2e8K zGv@0dz$EoGfsRUpsSQP`b%_468uNV694#BE%0w&7H+1`o%5=#5&^(j*HMXm=(N&q| zV^9=cilR6KO2t^E!$X-Dkd2h1YXd*Ikj3e{kEx6WJ$H<**jTjX+VR`P{=opjvXeE+ z%T*hTV&4i>of2~t^i-e3U_tY}%si{7_|bg`AUmGo`Ix%b#c`~ePa0yb_g!i}47hrk z`S^6!enBd|PN{SbC&5L25{%Eqx|_!WJb6-UT&aelvf)70+nbk|hjjbnNHr{@`A+63 zwLIeJiB0cnRu!& z6Vtn-|6^m5XRj?erED)W+B|z#Dak2YXs}w*2iGdws}k09l|X4>*!%9EO`Db{Zq-vBwXd6=xMWQJGHM z&Wr~VTNNCU>l9;MVylfPoALd`Ry(L_dmM)$8^6PvpF|He*V+t!qKBGm?Uvm5nx0HM z63dx!eWHi@s#W5DF-OWK&tg~NTq2V8C!W)>6LFSrm)!l*={puOd$BJE%RNq&g$7r; z2$1%pv;i_9)1b{;@59^S)bdc-#eg}59iSh$XvYDQS@0Gt$-i))S2uTYf6P@tY|0p0KTP7Z2LkxYYqi&|SLC zxf&+o5=!F@pn3~6_D!HH_Q+I4ArAKHCrXIE&f4?yt_QXB*Jpj+KWaZun+ z>L&!fA?RJo4~nl7?IUR4O#O&L@;=CGaUF_DA&}%$Ebs||zY>_Q|3&$<_%7u72wui7zn>`&C|77b=o^~Ojd`dMR63t%U8$<5 zWJ`HefLe{p*SLE1>hGwf!PfO1;fT7_zr??|ywYD;W|7eQviU!l7JsZgW<-tfdgkwl z7_HGw%pd7CTK$1lHRVQl1M_c)#Qp8zSUdB#JQ9gL(q*9$wOTf}Mq~6d23HeIBif>^ zonbN%)TT~@`o|9-extPq&o(e<>uw1fVdigbZ)}T(yILFDTVN|W=5IE-qcIF#X|LHeaPVIo(DFRzLOk;4 zZv|v@mP&hhem*1Y#m~Fb@k>34I_&9emb^TlcME$J?Nsvpx1@}%13_~s?dAL6u&|eL z%KJ}#{NX(NQ4#;Bux~;;6|$#uG2eb8WHcw_9~I4^3FI*SKC-x(_pIdGK;+urFYNCZ z2~sN+16p-$c7kPF^6ce(U^gWdid;X7`@H{;qk;UF^S@8r zC-w>Z1=3KU^k0hmLFC%c{C;j}^h!m6`Swre+1D0nT(eeOc+OGhIYq9Y6#Wtesfgvq zg{jGE5)+j_U-|aC^6crCMJnDeX#X4N=8jK4D^gK~eg1g){2u7i5=;N(eM0{K$4(Ky zOao~z<9Z&px#P>a#IP@uGvcqq?ao!`VY)%lh| z!h-3iI!##webZ52GX9;yey6ZkMf}oCm4v`Q1M^gPi?pxHYs_P3#h%;s`Kv7Mc&-q1 HzWu)dP7vXX literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/auto-str.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/auto-str.c new file mode 100644 index 0000000..0e793a2 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/auto-str.c @@ -0,0 +1,41 @@ +#include "buffer.h" +#include "readwrite.h" +#include "exit.h" + +char bspace[256]; +buffer b = BUFFER_INIT(write,1,bspace,sizeof bspace); + +void puts(char *s) +{ + if (buffer_puts(&b,s) == -1) _exit(111); +} + +main(int argc,char **argv) +{ + char *name; + char *value; + unsigned char ch; + char octal[4]; + + name = argv[1]; + if (!name) _exit(100); + value = argv[2]; + if (!value) _exit(100); + + puts("char "); + puts(name); + puts("[] = \"\\\n"); + + while (ch = *value++) { + puts("\\"); + octal[3] = 0; + octal[2] = '0' + (ch & 7); ch >>= 3; + octal[1] = '0' + (ch & 7); ch >>= 3; + octal[0] = '0' + (ch & 7); + puts(octal); + } + + puts("\\\n\";\n"); + if (buffer_flush(&b) == -1) _exit(111); + _exit(0); +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/auto-str.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/auto-str.o new file mode 100644 index 0000000000000000000000000000000000000000..9f3877dbc5099d3f535893adf8256d77a2e7f0a9 GIT binary patch literal 2544 zcmbtU&1(};5P#c^Hny6iDp*i((Q5smOH+%AqO>;ZA|j|Q2)4GHbVH*}Qj!f;FIE!8 zpn^y7AMol)@zjDJc=4bYg&y=~K?N0$YMj}fXGh;)}jH}yO80gn$1958kyoMgt%8NKEnv!^R= z#&`On5N7d8*0qzs-Ga|2SSmP^w&^<4t}s1u+;(kYCW}ST^Qd49fc-C2Xs>$*2fxZ{WxK2{TZrH;fqYIwHGYt z+Oz243mm^e!8tAS6JSSKx*oiU`{Zy=iRb@`6WZni&X1pj<9YsrfN?Jv$MlWB z%?uD%eMbOSF?5Zp2Wk-C2DmzVIX+8q%+y+_2bQ9R<~gnbKOBjAe#C<6->3aefL$iF zzHF0a^b3jaH5p@B51bhG5!4CdD>!rs*O&dZzF8O4{1R`>0~cce>E2|P8t{KvEA`n) zX8c}lQlAFl>wv3w1DbGug79sCV}AZWy*n4MT@C#A0p2El)C}Mr(T6w;N>F}bm)tzu zlLa#+rb=#6Bt^26PCJEBPaAcnGp@+mnHr<|!t<-<(^dq55XTuZeilI>%preG{=d;5cai?#ukI6V7#` zq~C1d|D*x_O38zJfb`mD%j&)*9P8r4^o|5PR|FnD?}CKObNkr<|J?v5*xOt_D`I@# W;o8XiVxSQSd&HiY_LIOk@9AHRi5#E$|K~F^a;$2 zx04*hrg35Ues;e7{~C@TYf%K;BDjZ*Vi#bsp%DM^81|tFy?HU~O>L^DXpRPhyUzK8 zN#1ncxlz~Zs@qrni;@DU;xltPL3FbcC(NAraG+kb)1Z=~0F~M-GdX&>bw-Vzp1Xz9 z>3d}t|D$b;(fOJp9t+K~!NlV!BIWDCkG(z+zRaKD_#SqdAB!AInZLw=(ED)ygo7Ss z?d_KQwwsmt7Ut#NX(`SRNmQE5lde_9nSOh7=?%K0UF?L^j!VEl7hZqiH+AIe807lw zOQgC6{QOFvbUk?Ex = buf; + s->fd = fd; + s->op = op; + s->p = 0; + s->n = len; +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/buffer.h b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/buffer.h new file mode 100644 index 0000000..12539b3 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/buffer.h @@ -0,0 +1,56 @@ +#ifndef BUFFER_H +#define BUFFER_H + +typedef struct buffer { + char *x; + unsigned int p; + unsigned int n; + int fd; + int (*op)(); +} buffer; + +#define BUFFER_INIT(op,fd,buf,len) { (buf), 0, (len), (fd), (op) } +#define BUFFER_INSIZE 8192 +#define BUFFER_OUTSIZE 8192 + +extern void buffer_init(buffer *,int (*)(),int,char *,unsigned int); + +extern int buffer_flush(buffer *); +extern int buffer_put(buffer *,char *,unsigned int); +extern int buffer_putalign(buffer *,char *,unsigned int); +extern int buffer_putflush(buffer *,char *,unsigned int); +extern int buffer_puts(buffer *,char *); +extern int buffer_putsalign(buffer *,char *); +extern int buffer_putsflush(buffer *,char *); + +#define buffer_PUTC(s,c) \ + ( ((s)->n != (s)->p) \ + ? ( (s)->x[(s)->p++] = (c), 0 ) \ + : buffer_put((s),&(c),1) \ + ) + +extern int buffer_get(buffer *,char *,unsigned int); +extern int buffer_bget(buffer *,char *,unsigned int); +extern int buffer_feed(buffer *); + +extern char *buffer_peek(buffer *); +extern void buffer_seek(buffer *,unsigned int); + +#define buffer_PEEK(s) ( (s)->x + (s)->n ) +#define buffer_SEEK(s,len) ( ( (s)->p -= (len) ) , ( (s)->n += (len) ) ) + +#define buffer_GETC(s,c) \ + ( ((s)->p > 0) \ + ? ( *(c) = (s)->x[(s)->n], buffer_SEEK((s),1), 1 ) \ + : buffer_get((s),(c),1) \ + ) + +extern int buffer_copy(buffer *,buffer *); + +extern buffer *buffer_0; +extern buffer *buffer_0small; +extern buffer *buffer_1; +extern buffer *buffer_1small; +extern buffer *buffer_2; + +#endif diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/buffer.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/buffer.o new file mode 100644 index 0000000000000000000000000000000000000000..0f1c901e04d58e07d05437f8887e22faa385d7b6 GIT binary patch literal 1224 zcmbVL!AiqG5S_HeRxMaXq@Z9usbCkYo)o0eYI+b4qUfz8bxVsTg=EF*#jCw}^bfrH z34#ZI!Qb!;bSB-^IL)aGVP@XEH?uQI9uAHUQp|HZ$`uljJJX@>C+6qV6h1^#?f{aE$w|=eFe4DKZQ^H znEsn_5dG*K$FL3b`JE{Js==b>PHLXf8+;FO>d()k29{ZZbL*Jr7)f53&V-yhiwV9v z;u`&_5o*iz6!YB?^-UN3)Ve9OG&`T4_L9{9S?`a3KfJ##KVpcNfv@k81On;AjS-$S x3E@dMBs}TO6P`_Ki#Y#F0BA3BvHSea>)y26G7v2oI?b-%Rmd&r%A||m_6N~fKtKQh literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/buffer_0.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/buffer_0.c new file mode 100644 index 0000000..6c5365a --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/buffer_0.c @@ -0,0 +1,12 @@ +#include "readwrite.h" +#include "buffer.h" + +int buffer_0_read(fd,buf,len) int fd; char *buf; int len; +{ + if (buffer_flush(buffer_1) == -1) return -1; + return read(fd,buf,len); +} + +char buffer_0_space[BUFFER_INSIZE]; +static buffer it = BUFFER_INIT(buffer_0_read,0,buffer_0_space,sizeof buffer_0_space); +buffer *buffer_0 = ⁢ diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/buffer_0.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/buffer_0.o new file mode 100644 index 0000000000000000000000000000000000000000..f512b5bd8cc1a5a7bf2f3d46a6763abc1e3aa4e0 GIT binary patch literal 1880 zcmb`HPiqrV5WwGdqm8w;sdxxj=>r#0q)TE&ilU^nwX23Af_M?*X0sv1B$ezIsuvFd zVTlJnibszH{RZCr0#*=FLCB#HXLe_{&&}&e2lma(Z|1#ufA`gT_4b5e2o^)!5{DjB zA>J#n661pb$>Vtt?088eP4^d zID>i18MLi@d9ONXSOus5vG^6UW*0;nOCujJ@_$5*4|9f)@$!K%b_<3%J(+(CYn=y< zABu;~-PdM6cW*|%nLtm7jn&ob^5U9b-*UV1s=Z`iSuES-ONl9j9lYp-ZXI;kOLU8^ zp5J!u(BBP(9h(g|bcJ0H0`mP5D0UJw*2$A!Bz>85ivYe>2<@yY+fuWm!WirX&eZu|2C2@b|>%gc~ z(t+A#f(w7q@!ZWL`ajYQs>z)LHnw-bxc?KdRml#E{@C6D8`7qK~{x zW+x5P2wh0un>TM}wv)VF++0>12lzN}2D6A&fUg;a;ExAThn0f50QF$LccW4$`L>;T6rmy^ii~^|ibzs5>(Igo@Ff)2$KqdMqRQI6?K}Bf_Djp36dWebP$Y|BM zy=$f>j2{=c-9nZvbkTm6g*y;2hgBvPcM+-H6?$M}MoxQ7Ebbu6o|O8u;+6H)5G(i) z(%H-a4iQO{^WSY=f}G`}q3rwM`fbrbdRzb0e~3B`Wqkt^^6up2`fDz4Gb6%Di}xj)j&=1=URnxe6sFVcBPzAAiAbD==o(v8zS%Ki!I@~r`^VLu1`p6$y> zp*#0AXC@bxGE(?mN8TvRE$*iQKU0srmh54?!CDcc=Uz`IU0=n}H^5O&y6HHKHM}H! Zql;ypLq4>seho( zm>s)Jdl2`K_vX!;naw1x=hqh{&jUUloWd+(72sn=A^PDFRAI$Y|3I;EN!r@2Rx{W? z(@8HL1jp(~HR_=X4+;vP@|V7e6GW30c+bq}u>qCo$5`FPCI*${IjD5l@9P0321BD& z`{uTun>c-tWB(g(VIl2jSu}`5%wd^{#a%?I_k|wWn32-~6N@{DvL~h9t$1mD6-3%K zA)UAz9 z527}*O)Iuw6*bzE+#l(S=8x^7>X>(robTpbPQEgHPF;<;zi?x8k40}ny8LPYYuL;~ ze_)$3Qs~e9&4tN_rGhxmb>uZ?uDhQad`$!P+85u$c!M<;lc#Q1XPt&hp=W@jU((4( eajM}t>ly8qQCr%7U`0mK>D%x*v4r$0i-_MSwmvTa literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/buffer_copy.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/buffer_copy.c new file mode 100644 index 0000000..dc4d4b1 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/buffer_copy.c @@ -0,0 +1,16 @@ +#include "buffer.h" + +int buffer_copy(buffer *bout,buffer *bin) +{ + int n; + char *x; + + for (;;) { + n = buffer_feed(bin); + if (n < 0) return -2; + if (!n) return 0; + x = buffer_PEEK(bin); + if (buffer_put(bout,x,n) == -1) return -3; + buffer_SEEK(bin,n); + } +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/buffer_copy.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/buffer_copy.o new file mode 100644 index 0000000000000000000000000000000000000000..a5fa9c5bc7d7172bef25c4bfc7f37e1cb45d5405 GIT binary patch literal 1504 zcmbtUL2DCH5T4COn`%g+cqk}ly@&<-Fl`a_P&T&O6p9D6P^qPE(zmw6BqjR_tsovM z!lDO{{sfO6J&Gdu1H9`^!IOCLP+ey>Z|KWoPde~2Gv7D!X6C(pd3*QJ2Tt1*ctX z#Gf?;@rOsBR#xBqNs^>~_kAeJ)hFq$E337)1RVIUf1?j4QWn5@coUqRisKeX3NNsy zQ;5?dxlcb=OO@xjxzbp@pPvB@;xO`)9a@hTRi!ANBk^C(Ta~=QHjjM)hs^qJgSK*s%-9+Zd%J zRvx={>@g(lv!htfzr%@I+xg_%XGfvS`cMiw;V5D>yFLFXVp;X?>GPXJ-W0pO$(c6A z<>3d9VNzHxdlxse6Y4MPh6&eA4((1jPdQAuFft6FSH^YR=!f4My({~zQ8K-kEF7BK zVJQ1+t=`tIXqg_{Tic4wP|9`M4CVAdrFTeov5$Y0B=lXA(B0Cv%eaR&31Q~F{{=?@ Bgzx|W literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/buffer_get.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/buffer_get.c new file mode 100644 index 0000000..937b75e --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/buffer_get.c @@ -0,0 +1,67 @@ +#include "buffer.h" +#include "byte.h" +#include "error.h" + +static int oneread(int (*op)(),int fd,char *buf,unsigned int len) +{ + int r; + + for (;;) { + r = op(fd,buf,len); + if (r == -1) if (errno == error_intr) continue; + return r; + } +} + +static int getthis(buffer *s,char *buf,unsigned int len) +{ + if (len > s->p) len = s->p; + s->p -= len; + byte_copy(buf,len,s->x + s->n); + s->n += len; + return len; +} + +int buffer_feed(buffer *s) +{ + int r; + + if (s->p) return s->p; + r = oneread(s->op,s->fd,s->x,s->n); + if (r <= 0) return r; + s->p = r; + s->n -= r; + if (s->n > 0) byte_copyr(s->x + s->n,r,s->x); + return r; +} + +int buffer_bget(buffer *s,char *buf,unsigned int len) +{ + int r; + + if (s->p > 0) return getthis(s,buf,len); + if (s->n <= len) return oneread(s->op,s->fd,buf,s->n); + r = buffer_feed(s); if (r <= 0) return r; + return getthis(s,buf,len); +} + +int buffer_get(buffer *s,char *buf,unsigned int len) +{ + int r; + + if (s->p > 0) return getthis(s,buf,len); + if (s->n <= len) return oneread(s->op,s->fd,buf,len); + r = buffer_feed(s); if (r <= 0) return r; + return getthis(s,buf,len); +} + +char *buffer_peek(buffer *s) +{ + return s->x + s->n; +} + +void buffer_seek(buffer *s,unsigned int len) +{ + s->n += len; + s->p -= len; +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/buffer_get.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/buffer_get.o new file mode 100644 index 0000000000000000000000000000000000000000..08b4ee8e4ab360934843f9176df66a21ad3e87e8 GIT binary patch literal 2608 zcmb_d-D@0G6u-NZHd`ID>j!1QKn58l0Xw)_q#u4HH0#dBp%oz&p}Nd&?zW-(5oRZ* z5p2M1LNC)w#D5?UKJ-QKPZ->SAox%eSp;kGK~oisppXZf@tm1^lk3guL-E4yIp=qN z=j-0PcUOweE9q28?6;}to9=eRdW+dj z%p8!D2T=OovA!KN%#0n3noclh<{Yr{PT-q{-Mu;9tK+gnJ}k3^O>9G&%w^r5$=9}FN*L?VLg@zl6v=blDd>jY5H(x9WEl`que*lB?`ok za$Clc>u}sdIdg4j?SS(^`nq;zQf%@AYiy9>imces=vUA?}J}nYJJ%! z>&P1-zl-NZc0s+tS+s$jV1N5hcmy)0A&O9%1a z;e2ua@tX-4sV>&*)T^AQzEvab7WJq*C%^?tFABYbdZj`=uhp(J+BMgoZ?_1TZLc!l z@;$+;Qws6RKCRT+3(LDOcZ$Kp; + if (!p) return 0; + s->p = 0; + return allwrite(s->op,s->fd,s->x,p); +} + +int buffer_putalign(buffer *s,char *buf,unsigned int len) +{ + unsigned int n; + + while (len > (n = s->n - s->p)) { + byte_copy(s->x + s->p,n,buf); s->p += n; buf += n; len -= n; + if (buffer_flush(s) == -1) return -1; + } + /* now len <= s->n - s->p */ + byte_copy(s->x + s->p,len,buf); + s->p += len; + return 0; +} + +int buffer_put(buffer *s,char *buf,unsigned int len) +{ + unsigned int n; + + n = s->n; + if (len > n - s->p) { + if (buffer_flush(s) == -1) return -1; + /* now s->p == 0 */ + if (n < BUFFER_OUTSIZE) n = BUFFER_OUTSIZE; + while (len > s->n) { + if (n > len) n = len; + if (allwrite(s->op,s->fd,buf,n) == -1) return -1; + buf += n; + len -= n; + } + } + /* now len <= s->n - s->p */ + byte_copy(s->x + s->p,len,buf); + s->p += len; + return 0; +} + +int buffer_putflush(buffer *s,char *buf,unsigned int len) +{ + if (buffer_flush(s) == -1) return -1; + return allwrite(s->op,s->fd,buf,len); +} + +int buffer_putsalign(buffer *s,char *buf) +{ + return buffer_putalign(s,buf,str_len(buf)); +} + +int buffer_puts(buffer *s,char *buf) +{ + return buffer_put(s,buf,str_len(buf)); +} + +int buffer_putsflush(buffer *s,char *buf) +{ + return buffer_putflush(s,buf,str_len(buf)); +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/buffer_put.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/buffer_put.o new file mode 100644 index 0000000000000000000000000000000000000000..1810bdd8d4de8b5ca386d95c65246019ed52c6f1 GIT binary patch literal 3224 zcmbtW-)~b@96#Odph(jeG_Hxn^`SAHO0znnnIzh}J9dkWF3$NQZkDcV*|M%B?XCPU z2&QA92;iBT`M!tMocc;+S$psw@X~;lnQc3E%>dD^y#s zo31*{U9nH@G&%`6K>~#6-knQ3rri5FR$uXU9>Ibjf!=i`?)b5H%3XRo)_aZ5NcRq0 zfn++pxV+_Vqfx0k%4bi&d>X5kw^N7v8FDeYl4e6A4?7QBrE|DSH-`=S&kzj4wYnMZ zoi4`M@>u;YYt-FUi}jxWu!o*9v_r6JaEpFs+J%wr#On(hhAVjntm z(T;K4{Dsmg4jJg{dnpjoGh>sfeBk+TPx!g*k#MBTW(f(G4osV=F`#DArW1lIW^$>p znb~iW@Oa8hk?>flM8XWsOeC|#)O3b~(}n5jOdd?~1v3*Kczt+#$xNlEc;)|}1i%&B z;@8v+6y;op)`S@2yH_Mnfb3K-6puY(gM)l#C?e~!VdCc$cL8xF4S81uxV@SS_Yh;M z=Kt0I1@OiE_O=1TkMIxi`UNiP7jgs`wIUacqK*+CO5g@-LzS z&bKyceyjPL3WY&CC;79Xz)aLyP7Ld4RSDwv57PsY+N3z_9mtbu?56L}tTns8SEms^ zED7!aUVYY39eM!X1Nc^`XE#th;vE|W9`OYP;iPRs27w|jT43)qz*6vOm3NZcNBIS? zcP(J%1MENM_CCHGBL1fwALRH9$aubl57x7!*psnxHk&CX_m<6Ynxt~MeZ@&LLz2l% zv6wF;bA@!uoGj!Ch=pQuGH(`zM>bb3O$Y(pRk>sX@D@(yGI`06j2$pD$#h}w0SPQg zd@47&M|LRL0PCZVecR6juJ9fF9|O*75{~Zzfqy6A_>2hL&*zNez+DsgAqmHO68P5= zF2@P+d8%XGXOC2mTdK29viC~(qx{iB^;QWF0FMV}#$A~_ q$iCO{-CUkf@C7a(Q*g2O#}!=c_fHBg_IO#r#UA^3zoJgD$NvJt$xe;{ literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/byte.a b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/byte.a new file mode 100644 index 0000000000000000000000000000000000000000..aef83be4aaad12f57bcfa853c89adbaa314e2513 GIT binary patch literal 36252 zcmeHQe{fXCeSh!nkc1=jWQPE5Z8%)TL8&?GBw0QTB&B75q`SH1|g(~njZ?h z1MIl5nv)#8;Io-dr*UUIW19X^r=4m1N9P7-I&cCki?)dc$)uztHTHA{$+EHRq*!1F z_50l)@Aj5^=-m^EjquLg+uiT(cXz-0_IRU}Eg27|Tt)G>xlHz|rTUr~Ieic)+?QD)tyD7W+}%Dh@dxgGpFey%8sf{LSfVH`kiIseD3A2e-=;A|!CwdD!{6f&#@{zzq`xPD=R1)1 zyQlHD`3bXqV_WAgg$8zZJ&_GD;+Cx)9h3-?GTM{vyLKvVt-ISdV(R8>aJSO2-Q1Yi zwsXffl&xL08zDyg-EFNq6uhvs-R3S*E&8Ma3~XzMJmBv(TX&gCV(ShwT(_~Swe4{+ zym9l^Z}50xhnPxZc6v>9mY0RaG=UdV1>UV)b=d5U9ot&5?Ic2*4iOsIN8~eicDC;$ z^3pi(%g|0b8l1*JxT>nI7RE)mW=S<21eM*@Ys?`Y&XD?!VJ2|1si&w6R&Cc^812|V(pu^w(bblhH669i^HLCB@HS{X!jG_&DPD}o4csr$wOxQK2r&8 zX*FAw(B|E{mC&yCZLOj9&W#-{I7ry0N|NF47^ys4}LigiQuZJXJ4@{ z(cJ|RxlNe9eg@4ok9x{X@G&3f=k%pOV^y)7)T?5|1v%6!^TH6%%l}ZmLi6Ok8EA6f zW0jmAKsm?B#bW%5z5`k(>l6TG;!r7|?6UmWFZt@%S^s^BaAz-a{n?b<5atUgA57#@ zY0RIu$FLpwBtd$<79u_0okx0czG{IkKP8F+N>aH+XpjB8*x=j76d0%~a6!C)!~PUo zYpXj3){|p(HC5n2_gKA2=zJX;p>V7=yR@_qAiA&E?9kHnDqwRQ(Ar2np!NZ1e_cyQ z)#Q19v`<&fhVY5e8iJKtI(Ab4vi8NafEmKrjO1lM#AcX5j1@t!$Vm1FlIH_v8B+XM zM@;i4j{oMEJB-~!+Q}}{6k~H_1X0~$>>;slgs?oSoiNrdzZ1rCey!Q9j15i^W5*f)T(R*Gb`VR-Me|(`7&{AEE@G_xyktR>gDk!; zOoFkyxH%kjfw7T7?cq+L^L5hWHpcF=#tikSp}r0v2p~Jr*EC^nfxu;owwD2IFZVTF zHd_E~Cn(xZn9Bie!(hiEdVWl?_G5~*mnha=qF8$oVD+K_cCU@KpHQs*#68x2TO1+N z6l-&21bN+JZAR=HA?y}w-SRtOE$8=&wezNkwPQ?XuUM-I&xO!^S74PB)^dKYSi5M7 zSgWx9nHxD?RX3=!fCB+fwMoe0La5@Hb&i7|``v!E%7m&2#5A()p? zpt>O~ovAzuQD~j3xrcwljNDCAtj>`UWOa+xpU*wef#DUa`P=~?Ufh?l&IzkIzgMij zR&x(Gnq6!^F9fRz_%gI6Gul_jYMe`Vjn!2!Ta3>A+(U~ncyuzLs9oF;&cK91?*+rU zn5Y|Fb0D%(jcc(CK&+99`poLcN*|5GByZGj-Vs^p$2gl+FswmSi`)!J$kmUidN^wJ z$E-}W@?z!qir!32YZ#1KgU4pGL439O+)h5w(VwQ6nj<5K=@wI87W+mByS0Da@;lkT zoZqYc%k8&$tnG!)=bmPKUNQ9}q0hvi@K_MC6Q**0ub5gsMf-P{@!x2eYCkUoQwc~i zOeG&5ua2qsRnje{Rxe>6VBKS?Aq*a!j2?TgVHH5(K(S&z2tYc}q$*~;_2EF1Pf5Px zH}A#oY@?MOA#Fhq;Ywce4d{?(e)5ukK=&!;my+)U26Vq-mXeQYm(&48N&FJ0Y>9J& zr4O^b#G9sAnj<3!>K0316#GU9yTwws{7zVUkk#oGOZmK`S1cW3^?SwA_k}(agTmuL z$WB6z=!hPVCWjVMG%;#7@8v^i0KwXaXu%XbBm#F`JFJ7^M6_x zI>?0gilOK7bso@!$AIK;!cfld6+`)__tUH$g|06+&2IFqk{ojTrDQvb`L2g=UuDov zaX!|5UIb8V%Px1@%moaxfIKg2v+Z_^rICWy8Su3)*aV%lgTL#aAnOJQbk+lOmR$`x z6Qzi?4LzB}8!-zpG^3?YR^kk)8|-W(^|H$}#m*cVK~%Tc*(dgm5O#~5Zuym6Xr6Q3pG-;#l{hyo35*cnNuTq9`c_f`BQCioN=2&->ttV1 z;tcQ>^3MMR??CjYDdy(L2x7X$TzhU_>>~)f#ay@iPMDiv^?JqJ&({yo4)lt-eE#`H zn?JRmmn?X;30pFhARCu5*0Q}C3~6C+g2Vn5d+$PB%{AG(Pzo!(qpO>(->zAurRxmq z<6&%|(R;>v&D;x6s-8Bx29yw(qh>&i?IK_=@> zSPEtq4-|)te(Ll8tkU04J^(djHgWEB!*tj4_$GX7%r zLu{?j0mh4C6YD8qac+0s$>_`+W2uTVZijLMa$UIh0L%2sUkAL{E^!?>MD6+`7!e$A zKPRECklTc52J28RC(4gq!udH}2O8EdJO2JRnSI?1jQRNa`T@CIIj@s_&G{de3Xu6R zF83X>yv#afjPc`|D3o26-)Zl|3vB${&iJ_}*U#y)kNFCpn~+BlE!BCC18byIx!;yD zHzD7i2zjj-f8M?btn#x)O5>p3W^cu_wF0K&Tn9S5C)l^2Oi+j86rD_8OUYNzzvV#x zI|uqdInaZQo=-R7)ShDtZfyiK{v&%Efr_u z5E%xA6}QZavAFeA#ki4t*NCUKRg}lA^TWv7n*r@L+t?qgD3A69Dy(5674UaQLS|(+ zW9;8hG0)h)ts)rTzolYP970v`{bofZzW=ET-AEocKo7zD1!yrSj%&N#Ow<}M`&p5( z3N;3cn`xnme~zd2Vcxh!H5Sx<%=}wBtIs;!oC*{}^@+bSXinb9qgv17aLeti{%9%| z@~fxSp^-H}M^T*Sekvf1>$p!a;{(qWC5u<20?*D^S=REr?>YW>cz-YXOzS!#Gs?}J z{QNoTx)O%BeSX-U>Ivab7)1N|2c^dO_lx+}Zo-R=DUy#>ElEfQ|NPTE1||6w^cEcXka zNDf!Qif1xM^(R!f1S~Rnl`5@=DJS@_TAa_P@jgoYQLg>qyBnmqm%0uA}O%42LwHxEd@jMYy21>N%F*v9&C42!OtMXE$1 zgk`KoT_Lv#Sx9*u-|M{pFuS3rS-tpd zW8d-q6Z=KJ_sEiA{dX%y1Shv&NXiLfzQVCu9tE_>-{+oe`J1Wzya?deCLaF5qzp3u z3e2QugK%?y^0}zms)E0nz9QTNowUQo%$|(a^DjWsBLmh4TF*Z~P)o0a$)_f@=ajiq zkNm>?3n0KmQi3G>o0y#_VidMr#;&D6%O`4t5xrvfx_pJ^smlqw zIlouz?qWB}D|Q>K|8QRsB6dT?(9)B9J0ih)x=%5E ziV#Of9Oqy}JN!*7h`VWuDaPi=2x7X$*nh=7$>ZE&tXqC3j6KBa_KLBepN&L2(5t=7=e2J%d)ah&?lyEPBL&Q9ESFM*9TmFw-~vB zGf2K$jC9NIgpr$Ay@pgjpI_x_-1-4mJN=wv>fLQO@h(onC`>iu(~cCg3+~r1R&6 z)A`BxcrHHJq5?FEVR8;W>4zY>UO5L4k?6c0Rv}0`BRW}Eh-qT@dcj)Mbt2aC=L2=Dh_#%~5tV_Vjkdx+ zi@^Vv2>&d?Iwi<_dEWJEn9Kga#HD>(SMYiWUAUP#X`gN1GV_*tKI-}TdIYd{{W&Qr ziBaPh%5j6q;`$g7lSTS;#pESyEO5^rTa2&}e7rR>CO^d)Bwxlh1;lb!6};1n@=kX7K-{yoPVDEY!;KvEDB=<;5(SIZH z@u*vjcFXUC(J!zHy<)UJMT|bn>i3G#6THJDUwAx7iW5e2{?(K4V|n>7dLFw`UNM@# zci{aIo!ovgO$=kc>tT)p`(L!17cwF6z9YSg#W|fLagN<=gKBPS7O52_$jX__Zszr| z|L$X7*e2i8UR_oAnV_O^pp*8|eS@&^f~+%uW0wL&nc+anSeI(4S~gRA=wyB0?529{ zaG)r8Rs$NOF!JgqwHeM7X-)f}U)yY52w#YAHt#_ftixlK868djgk5yozJU&|+goa=c9Ise>r&1JU*_Hmsp& z_p&0z{3*+6p2Pe`;Iaq*Z2G^e5N7%zqI`3CBN2sUV=hlRa;;_ zT+I2fCI5W`REnVv3}aiZOtX62NX2HrHvabvtzpU!I{OIh z-;X{TeJr{Wy9~-*(L15_tcOjED|+8c%w~1NH%jwPUOjJ52`4;|+OYKU2yTdke3&}= zUiKU3E9F1F1)4N+=JM6|MWSxJ4SwjFs7J1~aK#_GXYr=MnE=oGn#<-r=Wi+trUDIR zi=t&!&lEj7BUToPmFdZ1l65NUOg_{5Cx3-~AUIj4qJ0+-(s}S8>z7T8fLMSd_WI*<+|{_1WmPR`p5i82lI|D!|y$$6c0GUtC-tUOO$SYF<$*d{H$rm@ho0$SMk zd2o{YrDQvb?J8U+%cF=E_lG|JTKX3FyD*uC3kP+SS#*rE6Dv$JTxH&m77BDe%7&h8h&*BXXr<1fKzZcEM6M z5RrysgFC(!2FDcY7M`EKYat!~_l(nn5JrdPh~qFqs98GiN3zukB;&@$WZy-q!{LJW zdFsM2(n&k0tr1;kq#8?!VPIGT(KTQetb)@D@K^%Ff-?w)F|XAh&h(xzYr>}vXzA}D z1&$_|1M7KI(DbE=Q9OCT8Wi=Y{T>+|2o!;$hSSc_GWh@ukMMh=cV%^>v43?%B&z-d zZHm6tA=T&~E`h?~oSoM|xBsr(+|j-CzNqznv-PV)SrjyX_qWvh;;A;(eAGzc$p_Xs z(nL78pkM3R4GI|kPa-){+MK#AkobW$h<^9dP~!UroRa{DEYRFme|;)Y*?R*1aAM?Z zz>{rH%o-V443u~(UJ-0awZjIi$9>^5E3Copzf|tidR_qGd(R}ckjlZRh(jlp#I4c_ zJm+B^Yf995Ee;1bl*IR!R%ktGV1eqECdW&^-4%la9n{zG)Px9FFAeIuu(}`rsxz7j zEP&J9K=yL5<9ygz&-I=$D-Pp>6+ThZ>0#z`kzTv7 z$yR}-)x>d(qp@uJdECiXS;Pe8a-#f&*eZjpey_I5IfwpZqm?&bak5o7zgJsDXSPa^ zRamI4vWbl!u5);U<@R&B>|?&`!B#=I66X*2^X7Ec!+gjuKZ7XyVh1|idW_1M?Lvki zIT48*5+T_eM3GZVWFZy`4u=tbGv>BI4HCiO{lqcN-EkJc{Fuh`e<;w!a`?Gfa{kNg z2FvvZSvj&zl5H}zJ|?q0!Zn5epA@&Bun9V82c45{wl0QGjn2=`Q>65vW!m1m``?ED z>dW9sd#TywT3Sm*hv0wt`j^ez^J_S@f7y(^MQ|4NiP4{@qAx9*vFB!^?WkcDS>v(F zLApN!QhzuKTGvTOA)V`}$4GnF#k&srOrJrKBO{0^kAEDiIBWzHk#xvGa=r2*>yWQN z7KCfB{HO!4ejKx+JIEqcA`!w|2XZp%Fu6@6jm<%G9a8ApjUiUSWI7}U`PgH}IH^oPV`cfLvF;zC)I4wU+qSN$Qu9?I^aZa2+C#0$SW3@(c?5c@e;op+5z8 zCSj2IGN#(^qwIxlQcSH47rf4`PZ$I`X$Qqr>yq9*F*Ef*)zdTJpY%Eor0Unb3I_ZH zP|LOW;OINjcRo0)TEp|G$v%ud+5vd~3Xt=ClH=Om5Ajs$yWl_{IQ`T5bxrw*v;XlwGH`u$7^&fhezm~;UF`szT6qA#pj1YE<$=ptm*ss7pCrozB z?}W*NtYSlIfLlynKgI8Y^t6nqOOwl zDY8UZ|J{xe!O86xl5&EW?|Q&woKF+&`h`pi+#@J{7qqb=3%YHJxwEr3N=t=GH$6xz)WOsWO9ffbnjA_SiY4B{CT`eL6Ezt@y|l1; z@KEqCc(XsDmm>Hl`WK{^dMOPQ+xN0Fb~8>dKG^-{`}TeB&Ai?H@Z#l?#TckyFc1Hj zQUQ)rqTiQ&xCJ@b|LN>~M(*8n_Kpza3s(MAVq(*)GRO5nMDc}%iY01Z)oLD!m4kDn zc6?@UEjccHFE<@`5q&-MZ7@;wDv57C?xAnP60=@~d_3;i$ZavGwOOB#b)=0NZ^7Y&*~Fk!*G$JM~J(6D0bc==sWxBx@`I7(%2xbda z=XY2773lqyt|R4T;QWuS6Ss{MBi(co(oH)g-Sp;3&zjnzuKy(fBbYgw+Rx?xQr{6_ Utr2y21Jsg=7U+gS^GxsdFPF-6O8@`> literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/byte_copy.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/byte_copy.c new file mode 100644 index 0000000..eaad11b --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/byte_copy.c @@ -0,0 +1,14 @@ +#include "byte.h" + +void byte_copy(to,n,from) +register char *to; +register unsigned int n; +register char *from; +{ + for (;;) { + if (!n) return; *to++ = *from++; --n; + if (!n) return; *to++ = *from++; --n; + if (!n) return; *to++ = *from++; --n; + if (!n) return; *to++ = *from++; --n; + } +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/byte_copy.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/byte_copy.o new file mode 100644 index 0000000000000000000000000000000000000000..1114acf1b5a601cda24acb6b21ec4903763ac172 GIT binary patch literal 1320 zcmbVL&r2IY6n>N0{7|bKMQEV~(~}B181-a9VqJ}hc#!t2o47$~lSnd(@#0}Au_i>f#sg#fDEscXN2s9O;p*hmMb8q~h8 zeNdHl8&oU!?5p5lx7PCO0jO%TUJn|W(rD^HmA606wzXgV6fge#_%&K-^ci+U$?$*f zh+3ZIy+uxb$@ELcEp=>Qa1t?x-*f#%^ius4e(`1N&&5TIsaAZ=AmKgHem)&#y@~(^ z5Gl|4t^N)*s?XQ05hmCM&&6Lg(Vyjs<{U1MqRwYWsn-9&_$+WgaXvfBEtsL)7~>!! z-JRc`=8{zZxADI;eha+5)j3k01NVQpPFyBVjP#_Nke<{b>843mL_(G+5taYF5`bac e8jJPw_+Ba<9qd+{M;%p##~9~oPNsRryZsB!Y+~R5 literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/byte_cr.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/byte_cr.c new file mode 100644 index 0000000..3e7a1d5 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/byte_cr.c @@ -0,0 +1,16 @@ +#include "byte.h" + +void byte_copyr(to,n,from) +register char *to; +register unsigned int n; +register char *from; +{ + to += n; + from += n; + for (;;) { + if (!n) return; *--to = *--from; --n; + if (!n) return; *--to = *--from; --n; + if (!n) return; *--to = *--from; --n; + if (!n) return; *--to = *--from; --n; + } +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/byte_cr.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/byte_cr.o new file mode 100644 index 0000000000000000000000000000000000000000..598d18a9233884123a88cf290cb1cec118c257e5 GIT binary patch literal 1328 zcmbVM-)j>=5T4CN8(Z<(Qly~J_+$mU^lG0hNZLd%lp-SfTrTNJiY6(S6%rrXheL=D zh5j{pE-Hxsf&YRCr6LIZ!JRX`U0sKJ>ca8O_w6@3vvb_-J>Gay5CY5+@Cg1fqXM)n zv2r0-U;;|;{25@zpeLnHC}*Utv)Qz*TTkj&?zs=2Xbk_lis~71dzQ!TLle7 z6=m2mkqY|?P8hDbh>Z}b(^s6JoET9{)S+*`wau2G7cC+2vkP~)?+^Is6L7C)9a zpB>rf^-#X)+;K#@JHJ28C9gi{`Q6m{26%m=b0l98ex_U}?&MC4^t_vpp4%a+d2gQl qV|is!=U)lnzY1X5>gVtG(io_4vl+=IWKnl#5TUoMPo{a=-TnbtHg#wK literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/byte_diff.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/byte_diff.c new file mode 100644 index 0000000..cdbd760 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/byte_diff.c @@ -0,0 +1,16 @@ +#include "byte.h" + +int byte_diff(s,n,t) +register char *s; +register unsigned int n; +register char *t; +{ + for (;;) { + if (!n) return 0; if (*s != *t) break; ++s; ++t; --n; + if (!n) return 0; if (*s != *t) break; ++s; ++t; --n; + if (!n) return 0; if (*s != *t) break; ++s; ++t; --n; + if (!n) return 0; if (*s != *t) break; ++s; ++t; --n; + } + return ((int)(unsigned int)(unsigned char) *s) + - ((int)(unsigned int)(unsigned char) *t); +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/byte_diff.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/byte_diff.o new file mode 100644 index 0000000000000000000000000000000000000000..e34690c56c3fb14c80d4dc3ce10a74430d9d7785 GIT binary patch literal 1392 zcmbW0&rcIU6vyA}ZhwG~L1Q9D6Us#-feEV~j3lJB#S%lr7&P9wj}!+PN*JKuSqeQ(~Ix7iPi%g-#vKpTSv z_~&T~a1?|25a;080Rn7(I%uY#+HlKAwK#6M*GTdG~nw1YPV7ZqkCr-oFC2Gsf(ZO!g4(O8jp4 z2H=a*P|C&PlidB1U)k`QxkuumcrfbF-Do>z?#LRN8G2 zEq~J!etoUh@)|yf>QDLC5Tg-oH&nQR9)o5Guv# ze9h;PsZuI3k~sw@2I%G3(tq+-k`7IXy^hSB9hKDitK`JYJeK@RvqM%_Lpf8q!>Dw3 z^ZqoKr22U^zgsF_i&6lp41`nq%TiAlT;SD`Ii8UV&sij cKmGru(vkk!`bMoLs?gs9_g0SlFTkpKVy literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/byte_rchr.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/byte_rchr.c new file mode 100644 index 0000000..476bc22 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/byte_rchr.c @@ -0,0 +1,23 @@ +#include "byte.h" + +unsigned int byte_rchr(s,n,c) +char *s; +register unsigned int n; +int c; +{ + register char ch; + register char *t; + register char *u; + + ch = c; + t = s; + u = 0; + for (;;) { + if (!n) break; if (*t == ch) u = t; ++t; --n; + if (!n) break; if (*t == ch) u = t; ++t; --n; + if (!n) break; if (*t == ch) u = t; ++t; --n; + if (!n) break; if (*t == ch) u = t; ++t; --n; + } + if (!u) u = t; + return u - s; +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/byte_rchr.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/byte_rchr.o new file mode 100644 index 0000000000000000000000000000000000000000..f1d85aaa3fda51400fa6a74cf081172a8031654e GIT binary patch literal 1304 zcmbVLO-my|5UrVs8b6jq5ms2ixED8|jT1$}3XscmoWJD8T(gF42A$XXB z;Lq?^ED3wb{sVu4AP8RE^`cvqbZgr?CmV*U_v*c=>Kf*(u(4(u2FPQ;3cMo80(@7< zT$j$lFvOu?w+i;}^M_*i*jT#VzRZ@4jfB%`KAFXfyvZ}!lG(!+VvB#ymMp@>W;@or zixtBTPh>~2M6P!8$!Pq{hixZp<4aXfo0}wW~X~80IQ!=xm(7_gI@Gy#=T<>Y}e&3uyVZ) zEbtCp=J`8&fm`)}RgS7vuZEJ^5%<{o=Js5jyOjgA`TO%vXr)#6Yp=)&{N|3xB{khN zV)9!Wf2CmwV=@tO24ftb_xf%0QhyU4^~nD7Dv3GuQqL>`eWq@`ucw+2;z6O4e#tK* zPyO|CEr=l|7BXg&#b?I;%X-H}%Me@LT|EzK{w<0%2b41;Q_^1hqkNon;56D(;qV?Zj0`LJ9W6C_f Ybd*oHw-Z$SfK}in2S|xJ?NgohAA#~_lK=n! literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/byte_zero.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/byte_zero.c new file mode 100644 index 0000000..92009ba --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/byte_zero.c @@ -0,0 +1,13 @@ +#include "byte.h" + +void byte_zero(s,n) +char *s; +register unsigned int n; +{ + for (;;) { + if (!n) break; *s++ = 0; --n; + if (!n) break; *s++ = 0; --n; + if (!n) break; *s++ = 0; --n; + if (!n) break; *s++ = 0; --n; + } +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/byte_zero.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/byte_zero.o new file mode 100644 index 0000000000000000000000000000000000000000..5af28f448ba3d329dcea6e208f50a2af188030b4 GIT binary patch literal 1296 zcmbVL&uddb5T1P-OsW-YX;Emg@uUU2G;N_!K_0gC1r!hdICv^AaZ5#$K(d9lmmZ!T zJP7^)9{f{;!aIAkx1Q@kR1nFbI+M)S&6racmYMIH?|U;l@b=dq+>4X~e-zw-f5@`{ z)qsq9bPN}u1aE%1$JvR>i{S2OCsCd#aChJS$dd@NW9^o!?-KoWcGFy%dEIkm-6)Sy zb1m!YJdVIkX2*p**5F2~*{4F*RXM=+;m-qZJ;71!Jp#2eru1mB^d4s+ewu5~IQBxa zy1G)nxn^rG(q?(dESiP6imA-@QvlQ1ZMd|C(Y5<=%V*B+I55vsmx8HvI$+xNRch?k z#%4QhSTOZgqhXsUX||j-$-}2}9hcT$hRx5OPob4od`^5KW<2ml>VI%4u`!G93g z!-7vZ-oRMGdscr1z0^O#8=j90=0g&5>J^?_2;@vu|IOr87LTyb`#pafdFn6EXC`Ju zL2B2qE;+J%6Fv{6_A(aa?nvwXPrQ+%^b?l5BWa1>|Al?$iQ`L@e?RSISpOsTUm+Hs! SZMRGvPIG`Vf0_0fPWu-U+Fknq literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/case.h b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/case.h new file mode 100644 index 0000000..93458d7 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/case.h @@ -0,0 +1,13 @@ +#ifndef CASE_H +#define CASE_H + +extern void case_lowers(char *); +extern void case_lowerb(char *,unsigned int); +extern int case_diffs(char *,char *); +extern int case_diffb(char *,unsigned int,char *); +extern int case_starts(char *,char *); +extern int case_startb(char *,unsigned int,char *); + +#define case_equals(s,t) (!case_diffs((s),(t))) + +#endif diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/case_diffb.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/case_diffb.c new file mode 100644 index 0000000..967af56 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/case_diffb.c @@ -0,0 +1,18 @@ +#include "case.h" + +int case_diffb(register char *s,register unsigned int len,register char *t) +{ + register unsigned char x; + register unsigned char y; + + while (len > 0) { + --len; + x = *s++ - 'A'; + if (x <= 'Z' - 'A') x += 'a'; else x += 'A'; + y = *t++ - 'A'; + if (y <= 'Z' - 'A') y += 'a'; else y += 'A'; + if (x != y) + return ((int)(unsigned int) x) - ((int)(unsigned int) y); + } + return 0; +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/case_diffb.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/case_diffb.o new file mode 100644 index 0000000000000000000000000000000000000000..ff586369b5b53951aab6c08bb6530916fd56d88e GIT binary patch literal 1296 zcmbVL&r2Io5T4BjjlcS|cu*7)Pgbapt`=HtkzEoK0wOAU4x3~{q$Wc49c(W>6b~K( zJ@zljRa7X}gN2^_4|?duUP5o}O!A)DjydJQ^3C_nd~fCr?8nWmY|OI291Av}$BYW# zMntzGyD$a`IBn<8eyIGW^X=D!NV<^!bYW%IZq=)-XvIZZw8lrhrhD!+cT#U>o8Eaw zWG|b$7>n$U_xf6W7p)6VwCZM$jE6a{_mbxK;4Byw3Uqn=mE>=yXf)fR@>?Y7 zj2jv^fyPC|1b&119rRNF7=F=X`oD;Z7*nt4d5(n7MEO5joYBQ2y3Y8G{swjG&(F0M zk}Sb%GnnTZS$;B~p}ckq6MT16YyA7hsFC}L^WAky_51I%ZxoT<&fiaa>DT{G`)9S^ z0Pk;fj#L+i-+#GI-0r(E()+#y^?nmly&jS^v0<1gU1~r2O8}l=>S<)2hySJIhe4ry TSg90c33|j_oYDd9H9GY_+e2Rf literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/case_diffs.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/case_diffs.c new file mode 100644 index 0000000..2575184 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/case_diffs.c @@ -0,0 +1,17 @@ +#include "case.h" + +int case_diffs(register char *s,register char *t) +{ + register unsigned char x; + register unsigned char y; + + for (;;) { + x = *s++ - 'A'; + if (x <= 'Z' - 'A') x += 'a'; else x += 'A'; + y = *t++ - 'A'; + if (y <= 'Z' - 'A') y += 'a'; else y += 'A'; + if (x != y) break; + if (!x) break; + } + return ((int)(unsigned int) x) - ((int)(unsigned int) y); +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/case_diffs.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/case_diffs.o new file mode 100644 index 0000000000000000000000000000000000000000..b53b2a7441768c3e228e248b041e588e975cb922 GIT binary patch literal 1280 zcmbVL!7c+)6uqMjMbkknG$d+;gqIczL8L=FA`wAY%e1CxL))Y?5^OA3uxR3I8au@X z8?5*QOTK`6+xK+b%*sn9=brQKne*Ol=QO=$wrLuurNJV!m{I}a9x>UFlh6$zNGBfk z;S_+W*MjGS&GbL#Te&}((Q z_B#G@56~~8w398+j(W5}xFd9hnWPWNJyT)>R+g9NVq+;gQ?N?088I!UCKDnt-Yfxx zb6j+-45C|UVqR6QedL1Jvs?>A#&JMY>;p^K`Q2Q_D%v2jq4Zv^ZV0W{PG{<{G!sYfafcnBlQL0>znJu1HKa@-R~x(`<;+< tzh9p84!>B``BwrE!OlLb~FX%z3i8 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 literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/cdb.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/cdb.c new file mode 100644 index 0000000..b09d3a5 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/cdb.c @@ -0,0 +1,136 @@ +/* Public domain. */ + +#include +#include +#include +#include "readwrite.h" +#include "error.h" +#include "seek.h" +#include "byte.h" +#include "cdb.h" + +void cdb_free(struct cdb *c) +{ + if (c->map) { + munmap(c->map,c->size); + c->map = 0; + } +} + +void cdb_findstart(struct cdb *c) +{ + c->loop = 0; +} + +void cdb_init(struct cdb *c,int fd) +{ + struct stat st; + char *x; + + cdb_free(c); + cdb_findstart(c); + c->fd = fd; + + if (fstat(fd,&st) == 0) + if (st.st_size <= 0xffffffff) { + x = mmap(0,st.st_size,PROT_READ,MAP_SHARED,fd,0); + if (x + 1) { + c->size = st.st_size; + c->map = x; + } + } +} + +int cdb_read(struct cdb *c,char *buf,unsigned int len,uint32 pos) +{ + if (c->map) { + if ((pos > c->size) || (c->size - pos < len)) goto FORMAT; + byte_copy(buf,len,c->map + pos); + } + else { + if (seek_set(c->fd,pos) == -1) return -1; + while (len > 0) { + int r; + do + r = read(c->fd,buf,len); + while ((r == -1) && (errno == error_intr)); + if (r == -1) return -1; + if (r == 0) goto FORMAT; + buf += r; + len -= r; + } + } + return 0; + + FORMAT: + errno = error_proto; + return -1; +} + +static int match(struct cdb *c,char *key,unsigned int len,uint32 pos) +{ + char buf[32]; + int n; + + while (len > 0) { + n = sizeof buf; + if (n > len) n = len; + if (cdb_read(c,buf,n,pos) == -1) return -1; + if (byte_diff(buf,n,key)) return 0; + pos += n; + key += n; + len -= n; + } + return 1; +} + +int cdb_findnext(struct cdb *c,char *key,unsigned int len) +{ + char buf[8]; + uint32 pos; + uint32 u; + + if (!c->loop) { + u = cdb_hash(key,len); + if (cdb_read(c,buf,8,(u << 3) & 2047) == -1) return -1; + uint32_unpack(buf + 4,&c->hslots); + if (!c->hslots) return 0; + uint32_unpack(buf,&c->hpos); + c->khash = u; + u >>= 8; + u %= c->hslots; + u <<= 3; + c->kpos = c->hpos + u; + } + + while (c->loop < c->hslots) { + if (cdb_read(c,buf,8,c->kpos) == -1) return -1; + uint32_unpack(buf + 4,&pos); + if (!pos) return 0; + c->loop += 1; + c->kpos += 8; + if (c->kpos == c->hpos + (c->hslots << 3)) c->kpos = c->hpos; + uint32_unpack(buf,&u); + if (u == c->khash) { + if (cdb_read(c,buf,8,pos) == -1) return -1; + uint32_unpack(buf,&u); + if (u == len) + switch(match(c,key,len,pos + 8)) { + case -1: + return -1; + case 1: + uint32_unpack(buf + 4,&c->dlen); + c->dpos = pos + 8 + len; + return 1; + } + } + } + + return 0; +} + +int cdb_find(struct cdb *c,char *key,unsigned int len) +{ + cdb_findstart(c); + return cdb_findnext(c,key,len); +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/cdb.h b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/cdb.h new file mode 100644 index 0000000..ff99810 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/cdb.h @@ -0,0 +1,37 @@ +/* Public domain. */ + +#ifndef CDB_H +#define CDB_H + +#include "uint32.h" + +#define CDB_HASHSTART 5381 +extern uint32 cdb_hashadd(uint32,unsigned char); +extern uint32 cdb_hash(char *,unsigned int); + +struct cdb { + char *map; /* 0 if no map is available */ + int fd; + uint32 size; /* initialized if map is nonzero */ + uint32 loop; /* number of hash slots searched under this key */ + uint32 khash; /* initialized if loop is nonzero */ + uint32 kpos; /* initialized if loop is nonzero */ + uint32 hpos; /* initialized if loop is nonzero */ + uint32 hslots; /* initialized if loop is nonzero */ + uint32 dpos; /* initialized if cdb_findnext() returns 1 */ + uint32 dlen; /* initialized if cdb_findnext() returns 1 */ +} ; + +extern void cdb_free(struct cdb *); +extern void cdb_init(struct cdb *,int fd); + +extern int cdb_read(struct cdb *,char *,unsigned int,uint32); + +extern void cdb_findstart(struct cdb *); +extern int cdb_findnext(struct cdb *,char *,unsigned int); +extern int cdb_find(struct cdb *,char *,unsigned int); + +#define cdb_datapos(c) ((c)->dpos) +#define cdb_datalen(c) ((c)->dlen) + +#endif diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/cdb.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/cdb.o new file mode 100644 index 0000000000000000000000000000000000000000..ecafb5b11ab0f2593b7e648b9fba05871a3a6391 GIT binary patch literal 3696 zcmbW3ZETZO6o7Bn0!3$Aabk&;y@_wgmPlQJD04*HwR3k+(Kv=EA5FJ)ZeeSe_FXa* z1?)<4eW^~P35mw=Lk%%%O#C4bKgtFSOf-au;SV_Zp+E=tL3BpRJmKJHh$t0nq)mCZ(^*vO+~PLq_7!FhB2AnyiAHCad|T0N+ZyK6@{rEH6SiL!qE zH_HBvvTl8vW~aPu>;^R-W@l;cFQd(Dt!_M-S#}BS&AaiNc@E8hP}8SVvtM^c&2HU8 zv&X#SqxB~nPp5xi-v$a%_AAZTEN0jE#6Y2V+T7)2-*YWnuo-o^t44U#e9;*wuq#pa zi#0GkGql)>M4EUB#(5sA_-3x)9vOzH^~c?{L1H-R{x;jO(c;&E0_vAjFyyW!p=UxH zLmihnCpCI zSTozb*|5i!cO1=*IUC1VyLaeSw$5A3xoaa}6V;;?oWFt2OVWefOem=FG>hmycWxsT zpF3khO!tTh=8^oclbwy4P`*3;cCZ3($7*5=e z%h<IhB@%!Jsv!?P}E zc6x@gF=K+lrZ-U5L0C(5@h~AZV2fgV;b~$U_So#z3!I}c4Y`kx5aJXqHpo^9{X1;e z?zLwfQJ1!_ic=ihzJg~32D z-ag(V@b1hB^7n;$AGRTvCkuWtk1qv(4coPQtFrbs*JqYHLR!P&N3^;~qO&ia)K>Xd z`d2Iu_yhG;mk@tu$AA&}#m zU8#YAL=sGrDI?);UEi@hW5m0*i;Ql)(O@c;Fu%k_Q0N!b(wu#&ZD#np}>lKE}1TP6gv~o_twiG`geBSE(heUjlCTNz(_~#@Lt;}EI0CY-o z!m-IaEQ?XA;q~M1g`6+z4+4`%NSN|wS~#s$VHw-DG7P8Oqx`<2E~PZqoiI?kc4#Z- zKPxASwsbz~rE7<#gQCzuF^IWmDd4;QfZdBkw zagK3#vEu)Eh2t9{^WUv-{Oyr^T;WR;UZ-%p$I@PdJ__!kNR8{O`S%=`cYjj}pA`CN S377Z#U}vUZF1LQPPL3)6j2>v>(+Y^~jBrv(_W*km|Du}#7&4w5@v{b7--X4crTOec zJ}7OfdUjU6mNV0y^d_SaK!zV{T9wf2X5_0j(!sU{Sy5VnEQKM+X7EADpt`=%RJ8zP zxlyYHbu6hjbRdiG)}}+P%J0n(4|LB_Pb(f^@5vdQXMBd?am1u|82_1J3;S(g{7dvM zp8M)O)KdRGJaOAMz>kv{Q?Iy9A>cDnKAVWDUPTTD(Nmq(j~adfJ@w~yYKSqG;I()Q__j2>E gC|64BRTWlc8EmL3m7CZ$&YFPs9>3KbR(9{>OV literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/cdb_make.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/cdb_make.c new file mode 100644 index 0000000..6d1bd03 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/cdb_make.c @@ -0,0 +1,153 @@ +/* Public domain. */ + +#include "readwrite.h" +#include "seek.h" +#include "error.h" +#include "alloc.h" +#include "cdb.h" +#include "cdb_make.h" + +int cdb_make_start(struct cdb_make *c,int fd) +{ + c->head = 0; + c->split = 0; + c->hash = 0; + c->numentries = 0; + c->fd = fd; + c->pos = sizeof c->final; + buffer_init(&c->b,write,fd,c->bspace,sizeof c->bspace); + return seek_set(fd,c->pos); +} + +static int posplus(struct cdb_make *c,uint32 len) +{ + uint32 newpos = c->pos + len; + if (newpos < len) { errno = error_nomem; return -1; } + c->pos = newpos; + return 0; +} + +int cdb_make_addend(struct cdb_make *c,unsigned int keylen,unsigned int datalen,uint32 h) +{ + struct cdb_hplist *head; + + head = c->head; + if (!head || (head->num >= CDB_HPLIST)) { + head = (struct cdb_hplist *) alloc(sizeof(struct cdb_hplist)); + if (!head) return -1; + head->num = 0; + head->next = c->head; + c->head = head; + } + head->hp[head->num].h = h; + head->hp[head->num].p = c->pos; + ++head->num; + ++c->numentries; + if (posplus(c,8) == -1) return -1; + if (posplus(c,keylen) == -1) return -1; + if (posplus(c,datalen) == -1) return -1; + return 0; +} + +int cdb_make_addbegin(struct cdb_make *c,unsigned int keylen,unsigned int datalen) +{ + char buf[8]; + + if (keylen > 0xffffffff) { errno = error_nomem; return -1; } + if (datalen > 0xffffffff) { errno = error_nomem; return -1; } + + uint32_pack(buf,keylen); + uint32_pack(buf + 4,datalen); + if (buffer_putalign(&c->b,buf,8) == -1) return -1; + return 0; +} + +int cdb_make_add(struct cdb_make *c,char *key,unsigned int keylen,char *data,unsigned int datalen) +{ + if (cdb_make_addbegin(c,keylen,datalen) == -1) return -1; + if (buffer_putalign(&c->b,key,keylen) == -1) return -1; + if (buffer_putalign(&c->b,data,datalen) == -1) return -1; + return cdb_make_addend(c,keylen,datalen,cdb_hash(key,keylen)); +} + +int cdb_make_finish(struct cdb_make *c) +{ + char buf[8]; + int i; + uint32 len; + uint32 u; + uint32 memsize; + uint32 count; + uint32 where; + struct cdb_hplist *x; + struct cdb_hp *hp; + + for (i = 0;i < 256;++i) + c->count[i] = 0; + + for (x = c->head;x;x = x->next) { + i = x->num; + while (i--) + ++c->count[255 & x->hp[i].h]; + } + + memsize = 1; + for (i = 0;i < 256;++i) { + u = c->count[i] * 2; + if (u > memsize) + memsize = u; + } + + memsize += c->numentries; /* no overflow possible up to now */ + u = (uint32) 0 - (uint32) 1; + u /= sizeof(struct cdb_hp); + if (memsize > u) { errno = error_nomem; return -1; } + + c->split = (struct cdb_hp *) alloc(memsize * sizeof(struct cdb_hp)); + if (!c->split) return -1; + + c->hash = c->split + c->numentries; + + u = 0; + for (i = 0;i < 256;++i) { + u += c->count[i]; /* bounded by numentries, so no overflow */ + c->start[i] = u; + } + + for (x = c->head;x;x = x->next) { + i = x->num; + while (i--) + c->split[--c->start[255 & x->hp[i].h]] = x->hp[i]; + } + + for (i = 0;i < 256;++i) { + count = c->count[i]; + + len = count + count; /* no overflow possible */ + uint32_pack(c->final + 8 * i,c->pos); + uint32_pack(c->final + 8 * i + 4,len); + + for (u = 0;u < len;++u) + c->hash[u].h = c->hash[u].p = 0; + + hp = c->split + c->start[i]; + for (u = 0;u < count;++u) { + where = (hp->h >> 8) % len; + while (c->hash[where].p) + if (++where == len) + where = 0; + c->hash[where] = *hp++; + } + + for (u = 0;u < len;++u) { + uint32_pack(buf,c->hash[u].h); + uint32_pack(buf + 4,c->hash[u].p); + if (buffer_putalign(&c->b,buf,8) == -1) return -1; + if (posplus(c,8) == -1) return -1; + } + } + + if (buffer_flush(&c->b) == -1) return -1; + if (seek_begin(c->fd) == -1) return -1; + return buffer_putflush(&c->b,c->final,sizeof c->final); +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/cdb_make.h b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/cdb_make.h new file mode 100644 index 0000000..b8bbe4d --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/cdb_make.h @@ -0,0 +1,39 @@ +/* Public domain. */ + +#ifndef CDB_MAKE_H +#define CDB_MAKE_H + +#include "buffer.h" +#include "uint32.h" + +#define CDB_HPLIST 1000 + +struct cdb_hp { uint32 h; uint32 p; } ; + +struct cdb_hplist { + struct cdb_hp hp[CDB_HPLIST]; + struct cdb_hplist *next; + int num; +} ; + +struct cdb_make { + char bspace[8192]; + char final[2048]; + uint32 count[256]; + uint32 start[256]; + struct cdb_hplist *head; + struct cdb_hp *split; /* includes space for hash */ + struct cdb_hp *hash; + uint32 numentries; + buffer b; + uint32 pos; + int fd; +} ; + +extern int cdb_make_start(struct cdb_make *,int); +extern int cdb_make_addbegin(struct cdb_make *,unsigned int,unsigned int); +extern int cdb_make_addend(struct cdb_make *,unsigned int,unsigned int,uint32); +extern int cdb_make_add(struct cdb_make *,char *,unsigned int,char *,unsigned int); +extern int cdb_make_finish(struct cdb_make *); + +#endif diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/cdb_make.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/cdb_make.o new file mode 100644 index 0000000000000000000000000000000000000000..a89ca514472a13a09d63ce430147ef67cb2fbf97 GIT binary patch literal 4280 zcmbVP-ESLJ7Qc?Cje%gBZdf7#iiKt&h}P=Rifw>`C!LV%YG7NSz-m*ByF|Eoy0(DFJ)W?;I`k1;yeRRhokP%R}Db}fhKa*k7g;s)K zt0K|OL?WcLKyB_7dhYVM$thRNo1JZqSSO*ms`X7M_AhDHnzT?t2yDQ6j0dHBvUKWg ztQX}Bgaq{1lYih`mG0SC&m6U?5}o*o>-vh#g?S=3L;N~p)33obRs+Xo=fm7fTCPx5 zrOb*zP-2rx3l;=so;p%hIRgiAo&c^Ve31LY;I(#{OJ7s_T}%`$H_X4-(^yvEO}B1y zvCbY$9oR{8pI8^cul7&rM3r0vs-y!}J!JjbVA26jgS z6*(4W4HMhZt2BC*OVpZ`DAVLPWjYp}CU@9JQoys-IeHIC5Te=t#Gr655t9Jh;;fau zbeAuf>zv*OxahQf5Wx(w(=^Pzg#boq_eZr9WDAmre@N*ZwRO;4{*u}UFjn>i#=tBv zD3T)>BkJ5+RUJ)k=#EsgTa`1j^~jGuoR302ot}`!zVEKbdQXEAr|m;qmCBV;o!YH> zca5@;c^kEAk@F|HvC9e@ifz;1cB=jAPW4GOa~!PR-K$*aRlp3_Rw&^_kG(O$uL{uK zD@S^4Ga-5CUI>$8$_ZZM9J4ARv(M{v-r~<#s`WuAZJmgC&E0+B+1Juw6}2F=QhK66 zB2XdafBXtP3-aSaOzCRgfeQ~qh1u_F5DDdyI5WXauKNgP7Y~7Q_-E@(*pl?_{`Ktk%A0$~{E=N8Kfv#`o5l77I*E zco^y1vgPhXmu3tMWebUo$qmUn*C|Qmc6Uiga_qSgGdlopv*^BeiB-`U&L&M`+$71t zteGXrfw3`?P)zc*0E&xf-^p2P%kDhxfh}-iTw${4^fWE6#$tU;uKNzxV!K za3A%1W(qY#=>K97aTmgV0V}Ww+Jt8*FHqwiBl^Dz9&umzp8^c^2Wgx4y9+*J%P7d3 zhSMO17e;-*+x!B8yw|~DFn0d?fAwF6b?`p!gR#RabLcQo$~%NFE%!a>|5bpmq(9=- z&sh}Wqo97@(Xu7-N#uWxWuUhSU*Uy&5MI#|v~Q&hBaRuplERBwUVauPS0<$mSl0OL z;j<4goHxNsv?-$@%NzO}6 z@B>Zo!+@jw(_X0gEC%fLCj4)E{I7c{;4>MpxhDLdG{H%3a3C|1-EAaui_1)QaL_0W zlI-yCXpUquMzL5J&A>Wq4viKFY)6Zk!sv)Gvh2!$@$^uEl!glChC4HRa5xW?@_D0} z*;6vJ!$VIOmbmjng`u%s;ygcGg3Xv=?9PlCra@|xR^Un1#mG(UJc-)|0@Ap^!aaSRhBOR literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/chkshsgr b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/chkshsgr new file mode 100755 index 0000000000000000000000000000000000000000..8bc31847958712290e145132ac9928ddd744225b GIT binary patch literal 4664 zcmdT{Z){Ul6u*7#{(!hG2yu=jt4WuDy2m!gQbhC(CcH^wCWvArcHP>p)vc}VD-MIP zNuA-POq)m|F)`T(Kaj`=KF*j($NI{(_#iTt8)`)6As^HRO z4{EE$xt|dP=Xb-j(0u;?^kZ!gth+zq5h#KQ9ibhRKhifd8wGdtjAP;kmQGcvv zK;o<$DUY?B5Ao1MUXgf3;<28@fk9aF{BUk~HPd*_iUt~U>;i114KJZ1NE2LkykDY1+~dGo z3HSa5E`q_~(PSc+F+yo07!**hA*@cf2u8-@hR8&W;dC;a%822GRxpTOL>Udm6Jkf8 zZ|k;Tr`oA*l<^d(75=amE`c@13nkkWUxt<3ZkeKe*???ejcIDq?k60#C2cW@@3rCf zx)0cJ-ZMyu*>L;X>G{jGj?BgD}2r)#Gx8<$skMWuBG-0NF3XrUd$q2|t4 zKw1^FG1a+QY5(p48&jMsN&6?XF}1l9V0T>UGe3JqH!tYIW;TQ zObS%_O>q3BSj3$4Le&8nKp!s|N@Z52RJ6+;-MqLP9dlbI!B1p&PUUI_gkD(v7Sh_r z&^R^k)+hE>^i5|ot@SNA$VKQATV1+Yl?A8Dst=`CVf8RlHl0mh_^4_(G+h|(=`+*O zXjH9lc?D@=kDlN1km7{_%!@|T6hfF=!^uMssLz}}(^L5d>vU$?%5rx{=_D2hQf$!8 z@1irkKB!G}#^Zx3e|n=*882m5LWguJe*!?h<_HF-ecbAGq35VuDkop zFUoEhSRcP)GS~X?DN4=jQAP?g|M$N04;Bz zVEEPs3I~1dP$oZ3x45t#uyFGN%9)?97JfN8VA0$G%91fZAg_uns zJt+)1ZN_nLpzwLH!ZJmpN0Y7F$v#?b*&ebr#j>y6s3Z|ek1|+&z{~EIIBt1p(8J{GZpCcR(4nHYuLwV(Va^w$n zleUZeu9BUmeuDpV#m|3dpzX9yPmqq1-cQ=;FLrF(cE5LRZ)7kYN_e}}4QgjwhuX2u zYQl5(f7`8QVi_ZCga(BgPZ*JON~npX5m9@#_O%(IVWAEuvT7`pi3v4)AdxvRYH1^F z_3V$NGx20%i4lapbYvui1Zt&53>+Vx#HtY)gL@PV=u3t}Mo6fUSTLFnjYfj8FmTxt z>X4C4XCR=Zo*jZt7&9~)AA*2M7zS>t9NQXaFazF0$HY|d(7waCPe_}&*u;GX;^VDG_VHD=kusYK#?4)LF3$+&*#Dh!0;?$zSpgR zC4`p_C_c|52sa$VE}Ox?vxND4ex!-d=Pu{ZeynxiiT^J6;`(uXeBDJkM0{sFr+or^ajMMc=P7?@PvYPpRE~xH z%Xz&AefIeLozzY*5YBjPv;M%r=l2;u@%KOsfN>Vl6yI~Hl<&o z7mD}s4S2)4=hx;J#@OIGGI~h1>Gf=>{%R>0VY5QEHa6CSJDa-Mi~GTvdZ-?(hAO;U zm;fp}N=)2DZPG$_*-G_?SQ$Mup!Q-DgKB0OsGREVPCJbg4XQOr65Yp?{=jIp_4?gv zX5!X9cR#ldu#(R2qF5oae!f>HR(EVNui;Y>jNI{s0`3+H7Ex251?yk6`nKi1^;vyo zLulFSKE`Ry^VUDYTAFKik7$#O3k8p@X2tWfAEF^=qS$Y{f8HnUpAgqGkC0J+Dc>!) zDFQP0CB`MAlAofEU733s1M=)Bm+Rkiq1CdUe0g@18ree$Y{4aDw0F7xDzdWvyY~F< zVcZqj-;KF8kJO9?ta$II;mofe`T XPTw-~Cl04OX5Ki12bR+s?sxMKk!F7l literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/choose b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/choose new file mode 100755 index 0000000..56e77a1 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/choose @@ -0,0 +1,20 @@ +#!/bin/sh +# WARNING: This file was auto-generated. Do not edit! + +result="$4" + +case "$1" in + *c*) ./compile $2.c >/dev/null 2>&1 || result="$3" ;; +esac + +case "$1" in + *l*) ./load $2 >/dev/null 2>&1 || result="$3" ;; +esac + +case "$1" in + *r*) ./$2 >/dev/null 2>&1 || result="$3" ;; +esac + +rm -f $2.o $2 + +exec cat "$result" diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/choose.sh b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/choose.sh new file mode 100644 index 0000000..feff2da --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/choose.sh @@ -0,0 +1,18 @@ + +result="$4" + +case "$1" in + *c*) ./compile $2.c >/dev/null 2>&1 || result="$3" ;; +esac + +case "$1" in + *l*) ./load $2 >/dev/null 2>&1 || result="$3" ;; +esac + +case "$1" in + *r*) ./$2 >/dev/null 2>&1 || result="$3" ;; +esac + +rm -f $2.o $2 + +exec cat "$result" diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/commands.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/commands.c new file mode 100644 index 0000000..b2dc77d --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/commands.c @@ -0,0 +1,39 @@ +#include "buffer.h" +#include "stralloc.h" +#include "str.h" +#include "case.h" +#include "commands.h" + +static stralloc cmd = {0}; + +int commands(buffer *ss,struct commands *c) +{ + int i; + char *arg; + char ch; + + for (;;) { + if (!stralloc_copys(&cmd,"")) return -1; + + for (;;) { + i = buffer_get(ss,&ch,1); + if (i != 1) return i; + if (ch == '\n') break; + if (!ch) ch = '\n'; + if (!stralloc_append(&cmd,&ch)) return -1; + } + + if (cmd.len > 0) if (cmd.s[cmd.len - 1] == '\r') --cmd.len; + + if (!stralloc_0(&cmd)) return -1; + + i = str_chr(cmd.s,' '); + arg = cmd.s + i; + while (*arg == ' ') ++arg; + cmd.s[i] = 0; + + for (i = 0;c[i].verb;++i) if (case_equals(c[i].verb,cmd.s)) break; + c[i].action(arg); + if (c[i].flush) c[i].flush(); + } +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/commands.h b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/commands.h new file mode 100644 index 0000000..f5fb8fb --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/commands.h @@ -0,0 +1,12 @@ +#ifndef COMMANDS_H +#define COMMANDS_H + +struct commands { + char *verb; + void (*action)(char *); + void (*flush)(void); +} ; + +extern int commands(buffer *,struct commands *); + +#endif diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/commands.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/commands.o new file mode 100644 index 0000000000000000000000000000000000000000..ed81c8f726003d176215ba992525003bccaebfca GIT binary patch literal 2376 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 0) { + ch = *x++; --n; + if (!flagcr) { + if (ch == '\r') { flagcr = 1; continue; } + buffer_PUTC(buffer_1,ch); + continue; + } + if (ch != '\n') { + buffer_PUTC(buffer_1,"\r"[0]); + if (ch == '\r') continue; + } + flagcr = 0; + buffer_PUTC(buffer_1,ch); + } + } +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/delcr.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/delcr.o new file mode 100644 index 0000000000000000000000000000000000000000..122b1de31c7917fb2ad42c327e42164dae493162 GIT binary patch literal 2400 zcmbtVO=uHQ5PqAaHnvGNijaU}0*%swT})MK1tn>dc9CHHs|X(2wB68R(n_+SRRjyE zr6G;<*kdo=MWhE0RuTNU30^!Z6tqUf-Yf`lX7^3=*d!Mn*qwRb`{sAw?mmbo25pkW zNF;WF)mDTuwr;E05yOlyH)~_jk?8e!cx&XETKM5ll+z(!N)E&rQ%mQO^$l-@->mpb zUikv1y!aLFYN-YB(q&hd>QwDsNp+Q@RkfV9Now(K!h#qw&`8Gh|;jLZx|dNbBA|t z95#13iXIF1Lq50umWW1Vy+huJg?wtsSKNWtmK|+o^vb#%V9{q%WexOm98#kA69`6+ zm4ey#<}Bdhmj(tMtm;Q8wo!zhz_3CA;+(=&?q~#m0fEf#@V!UaL%+w{@A0qL%eI&&81;0lSw_vl<{1S zDcMBI$y-&E{4XvFP&P3i;pqcv%3t`o39)cts`%?am+&xrhKe#3xK zEnx16pBEI^LrlZUy$P@tLuRkFA=AB%djN3j>_z`6?nla+3)hWOeKx*;j4f~n7w~W- z*8UM|lz)t$zl*RhiZ#EuC)&t!u$`)ik!`P=g1KXFSP9nG=m{gvo20;8+w0y&iq8*4 z9iOIB+d$?)p-y^_J%C%^Vf6Af!8@AZ_}(>&)7u2cKT{(`k>@XR3@;V#U=BIT6Qt5n-&KZ7>Q1DE(!Sx4z11LeTQ4q&>iSV-sf>`w#fQxwtn&7H{%R-zh0xrhC#c`aC cc>2Z!zF23r30`OtXSoSK2>DPjFV2GGFIaU^c>n+a literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns.a b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns.a new file mode 100644 index 0000000000000000000000000000000000000000..9431a9baebd8c044915954855b8e58227d55f97d GIT binary patch literal 62254 zcmeIb4SZb1bvAxil5IhZRtW?Qb@0+`j10zTjWISD*tJ)%A_5FHV9JLq%MwNCFbV#-V{20{DHNxpQ`p zMtft-ACkQ9|2@Co?!EV!GiPSbojY^p%-p#r&1vdvUUuG*r^iN8V*0Ezrk{C6V)pb{ ztkwkS|5)s-GiTWdi;wg?Z?fl=pY3@cc)IlOSnzygQ}CNw=6U>`bxHAe!E>H>NmcQ8 z)pXC}Z|UE7-l|tT?@!(iexLrj=Y95qk-rE3&GY!%0r~uWA3Q%f&+}gRXa1J1T-CU= zeMM8-%Es2t_7zLpvz~&Mx2(J&yG$c3pXh2@u7Oout*vcqJK9%`1~t;$-f@$@ZtZMo z(bw5_B;DBD6eQo)F{81gsrkm1!lmIQ%=Ft@Z))u9THX?*sZhhUvS~$&j?L>Cg^-zr zvl+JF1_)AXyrCsab`7n%v8}_!3Z?06S_$nL_TaR!ZDm`K>CTo_?aNm;x36q%>j)SM zKxfOE&bDljO29VayfM4hL|E0{nYD4VkiKd~Teh*S-2@e`3wkUdD8fjVRoSLa3$4v+ z#bnn8a9c;96dZMMkbF^JGqt|RTk2L6P?LwHtxKo1+efGH#3V*OF^SsRnKNd@V$&1+ zCoMkmwz`H3$|4awH~~ex^St7fpq_UC&xugdoFu*R-Vt8vs??RKE9(7MQwvl6cdkh6 zUGSfbp1J*{ML1^sb@9qUviE(M|B1)_>csB4-k(K#u19b~{;Tn7b6gj%9{y-_Qqt>w zl4ORW+ z0r!RT=A9j@Nw+L%Yg!qbG3|_L(@#rGOH2t)J#X5on^t6-mf)D}435j>tg~f#)3j_0 z9<6Cho3c&bv?Z%ndD9HqvJ7o3TbF6g?JHKatOU!-_H4_v3op6iG(4ouH`<)O`$G&- zSYS&4fM11!@$$ZL0r*85hVIIwQ)#a!*dw|*gIg_HH0aL?7wW`K zYbwGh^WDauiMTAkY8G(id9@apZ?1}el7B%GIC1mDu#9DtaQ2YM+QyTE8=u#uk~+Y`g67)@AHX@w?w0=uV5QQ} z*!puB!Zo?+>o9#zz6$Rb_G#B4Os}+*@{&0rf2li6+!k`Ac;HgXkpbnNEtG<(mk+7@ z$n$n0aQ9hbw9`ZIb3*XC5WFD-FLc7q!P!Vdud%VEvvXy83DGKK^BKQ{-P8|u}Yi}LvoW}oN z;o}wmqYBsj-%M25R%M<7uY7z zO~+;OmqvPaXOD|cN~2rc^k^nu5s7Z9&g3(IyY~4zrySVYDz-o-_flms&e8p&`J~sDz*IbvLvL|&d zqW3U5ES1CnE(_%mQ7qT+2U`yzk9je@{WaH71oTBDF@Q_S-xVx*z5iBf;T6c@{{;Fv z_BZGu{^245J*=9keQ z)spEupN!)Jfji8dzhoO=_dZAt4z~DUOwlf3;73I=FYNo z)r9rs>8e<+g5k@FgV>LFsjBMr49}HcSQQJN**l4Y*6|PV^JVo_6H-;NR8>uG%=(Hu z!CA}nzshjX3H*bc93P(lXA@By1sbRfPQPdowlQpmEbNI*@cV8P?X>xqgXCYX!)&5u zZ1_R_!NIh#hhr1T*zMigM8~Q2)n>sQY*$c#!fYam|88xf4r^rJZxdvHMBR!06*3@n6k8{jWD~yoN3KX zt6CbDwzak{QBfNY$FF8Bw4%vY@Cp@Nd+@edq8o$6CSBWTPa8DAS!cyYn{3NRevRL$ zaNc9#{|ALf75-I)Q=h{BqYyj>9+GRj%?jWGUTd%CJNW(fy2HW6JnwgKsVAEqT<)*2 z8M8~9#G!R4n=vuF_OSg~HB_>tq&X(NqfkiFB7SXdpmsw# zUTy+_2A5^|xwQ{gKp27|gUkVpx;d1b+Z##t?9J9iHyxdy`|yT^@#vi6*Nn^0je#>7 z-GuA>+|L2(Y4GIEfim5%{~Roa_B6KB3k=RkP$H= zvN6Ag{}uihMg`GUA-R5^slaFtk*Zj~3VxqEEAr(VVHMS+s%mp%*N?fdDoLjI+_q__ z^M~#sxQ%{m?jJ9PqOiDO{vV?YgbP*6i9Lq-e|B1d^31TWV>-4AJEW~6&z6(isF67D z8)dp(`#X)#zJvL~)W`^u`0DX8;p8RBk>hKgyL^i*Lx#+Xr2GOUal)s^rA6ZcL~H`; zk1Cb;f?oU1{+-VYMIpsf9Kk91es{K#`!oi5DmNM!mDQ5|ChAN3mE<`-3ApR=@XX2K4g{!8Hj+T{6F_S^zAl_qbJN&yr1DthR`gXA? z$ZM;B;rww3|1T`=^1l|sA5;9g-m$N4>yVy07CTg5ea6h%VEXnj{5!SkK~I`|B)uwl zu`>R(@m(2zdHfkT1{(aO@jVT=7_9ey+2Cj6`x`L%binj)a8xYvpBiM;-hr-~&2*q; z`mT-FWcrrJYa9BO#%DF)EZNYPjb|GA*2U+eGhDQ_A)k$7x+=AqmBRG34gN2zl$5_M z`#=T^C)Ve09c#d}|Dx`Y{YSEY5q)4`{KWj+gRQ;0Tm5wW#Apv2o%;L*mHEpm8uIJn z6ElD-0hDF@iuiC%;HP4&=mQP$i6f$JLoT8ZJd(;U924ZmW+mElD$0}E%v*^J`j6^d zAfM45PAz3ntjY%eZ4)Um@F1AIExeNr{;#Z{uJxI|Iq_nM$nU)o@mq7qZAG-V(WJ#Y zg0!3>M|=Jj6Gg_VfdN!>Rz-WKAl6V10_g|qTZOr%b6WdtR{DoJOn@hr7d&9*wk^PY zn_x4MUA#RVKhEpBqLRkgafu(m_L}|e&TB{5K-qJI$>uC`d%uxG+y~8?&t(M zvpAV&ZKH>&11bAuL9GCn@bqW;x;+1x=%(>wyI;R1`<3q3ugiX^`}JwrzI+NsUu*xG zEzvE=lu0IE(Vb7HcELnDE}CmbX@@st`p#tnMGGr85XpWfmuBE~wT@f*`Ru zCgYsA+wa!803(6;kZGEV3(9oaCBCF5aop=Ln@!>~Z<^#pw;owmCchfHf zI49)$eX{vjoQSF^q6cQX)LdeKTP5&9Q7PMz^-J4`rmY3W_Q7p4DC(3D{Ol0CAp~C> zg8y*{zBUBU0oVRC(+2?S3*rB(5d6y_I4y`$dU!kp|3L_DY-kvl&E6;MX<@Be!CvOP zX|OoWt}8PWsa%=a6Xm=#uyg?kJ?20f5i6SWO5?HV6%);+QLSL2*SoX@=AypJT}+Fy8&K?7X- z3nTVHC%?v}UbymSDt;~hT#GaRdL(v{;%B{(d|nm8-xR{%r*K`~zf(BdSdssT!at<& zA6nei^Ye;d>-hsz0Eh?LULrqbamvyC(glj2%ie_l^9m=w;Qy%PXuW+&@gJ-BA5i#l zz{MUk<~*($Oq^vPZCCv47bM;9Se*GMztHy-Kl@JM|FPoN<^8GRKVI?2tU$`QECyje zP7+-EecL)dQ5Z}fYAnfx!B{8&dgp5e4ye95X>y_0G1Bw<%Z&dtX3oE9MjvJYqgd&f zvhRtbj$jbdyE_|CJZ_dc4v*!S#^0LhyTZ%QJJ>y^%*$Rj`?|{fyvUlNI*ceQ>oKar zi0f1&m-b&9WU8sz+f)9I=pAq3+>FdPJZbQs7w>JVafocib&CGZhWykr_=LN>RQKEG zXD8wR-0boAKP7uK{!g=W^wHkWGhYA2`CB4e*ugaT2ZI#-fqC8Q#zeemPdDIH-@|JZtr2MB+Q??mtjTp|=mmd@Nw=dYN5+4Up6;~2FHqL(ZP7cfwjsE6*SKNl7Q?O^ z8AfGA@AwG9>)?#29QsKxwxzFPkiLrj8UNe#RUF{p7VACCI1eMWb-DqyVdIxSop3L8t!Lue`fkB8t3Lh$QD@Z}*mZFA;-v8^1?*b3H1OUR~NvN^%&%93fJAs+F+P{Jy$pk@eJ|~CZb3^b?TAVu2?cS#pzaDG+O$h&=ncM{V(fQOiKidY$f6VfW z&1^5dMGn5$rpG(Wcd5jfK9nte#_Z|#HM)0hOTUwOnOBSRGR6^JoSEUI4D28O+k-5^ zyPuc&G0ee3&dZR=rsF@#c^OQ`w9=m6hqQBpk=&!fbc~s$;rvYLd6@>z%cSEITYDdm z_HZgL`oMshkIAPFny9`?X!N{{3VhGzWsGgec^D-;+Vd4yoz5HsOZ!>Cm`=C{ht}fQ zf@bLf8mRkmPiAHOw=#BBiMeBPL9_Y8&eR#q(OFyjM@(smqB+^|q%m%d-iv36f#EH! zq{2H`)+{zv#pGj8ZV;_&g0FemAr_S@M7d>nXFef z3#MN%$&V_@I8&10M@HmbWHRs17IR!YL*DOVj*ua=GhsG%92{a}oAvc(9%gYc1;g1G ziU2Ww+MIb_Cy$q4)}?%X8RK4S@h|gOx4wKqRY$JkeY3TlH8j6x^D^RhuqqkVe}>uM z%h+LnzGw|BRwH%~l>|XzgHFadan}xuxd0=9bi2>%srXT*%P#RHJ@S&=YueCEe>wvd zNqmNBl50685y*4f^cPr9vKi7oB?d}7VZ7L4Zu}Y>f2}auqnrN>a91Z}t!76KVmOKV z=WtTui~j#_pO?AMDwcK-tE5~0ura`VJBB*Wxna&FB$g)fy`N(MrW$VRyR|O3|9Z?I zdI;oLM*}Yul^bhQ0rs@iybSG0J!X)1n@$8?%H}>T1n0DUDgH}C@a7PFMF`#~kUf_lMvQh2Y-^!D*|PD(_z4%#Xa&Y5F2yzY5_Wi+q=oV}=#R7?qhE zUdRjZ#j(kIGL=Kax5O3$c6oMj{goKVGYYvIu}i_bp2-opGrcQktl(_X(vHp+?AuUC zrtorqq5t7yE;a#93qBJz8*DRW48SoZi8$L5!TSh;i1Qf`{2qcJ;(AOKvGvQvf7|mt z(qA^I{ILE={#RPu9c$gJ`02k9{y$MT`y;{sOyM6=_%?;p78CxjTb$|YR&2N8*Yi5B zD4c!^u?t^!aNbK&go+38!2Uqem3bznOF2T-il6f|!vA55yZSjn@w1N={szT=f(Xa) zYQ?Yh-=^@Rm7Kd2PTNc5->u|pz1^$$wcft0aILrhaB$Jve<@t+ZHL8Oy*;7$wcego z{Mv4LTJdYW#ZX2Ppp7Xnn0&E~~1|m)&XFm-l>L;$*TTs}`sM{F{&%_m!2+G@-0?UxhhsGlbW zO~sEg-)(#u8|mkcawUB`#2{qIHo0<%-E4w#x$#Y55jLy98JtM@1)hx)w@eIs#_CV> zMEwzx_=0DExp@NQ&9dMmUMO;TFGHA%kzLkKsHo=DYj`ezsbZZ{<-maJxX`L z4p^ncYy`H^9LKoj4;$M|u=+b4aWuK<>o9#zzTc;@4f9rNOcLOt6W^ z>ORAa!L>o9@W8BGYTq)TU0pC^TUTToyOy`Fyg@nqy^|>n#Cys-NZ-xpgyiCj0(cZI zV-uHuqvfY;ZPWgflB4_XnBv# z@#<^P-43Ml-AODcNIkNra`?p7{y7h){6~?Q)z^dJ?2+OAGx-IP-o4CZH2osN=H`#_ zW zIHn?d1TwXIXfm>t@t+r`DPCXvPb8ck9^Pc!yUM?d{U>I>(m8Q>X0Wfsob%UA?HOq8 z&z^w%<&UXG_9ptfa*sxstvL^`eio;NZ8Oq#iGJXy<@RAP6S!%{NcnY0elij{YB*sQ|V*F zY?O?Xt`#$?KM%7}-f8@q5X^kJ$w~YUN!T7G{{qv-DP?2aXBjh=QQB0AFXc}noawu? z*=FcaHby-nmWuyfw?H-lmp9DDkofO*4MnZB5#*gx_8Tm_TmCQ`qubUW>8ot^OO{o_ z^pWNK-PssYN}VIx7^D5997Snc!n8@iPQuT9)+lXy2u>TI6#pf_DPQh`X|sSWvAB$T z1vfTH;DfVviQ|y_joV?d=eORv!segu%I%_c5Nw=f8|nQkjG ztGTvG{#4;w&R;5A%lU=EHUF;^uK8m&Kg9GSmT_>=_hJVZeNzj;Ua0TPMmpn+!}lk| zRKt`s`LH(9RoKGnV6a=l6$|`z@quhjpE3B*5l;`!61&mg`UcG0(^t{U=)cOw?Mry6 z>-}A3Pt9)PK@3d1_6`Iwx=tGnoiGZD_UwU@VXGu|2Yr6urzq_V^Y5pR*_px2ekS)u zZP)X)yUn|YL5TUcVX>|k1G!id`^$9j(q1}vKQG;P8pWmiKE^|E(f1K^&Pf6Un2U5^ zoTU4X3P4k2tZBuT4F2}~#{R!r^HVHqeeCvq7p~vgl-Tvi*Z&~0Ke4Mk9p8zUHSzz* z&g0XGHzKbj9xY!Oe**h<;{TDaAD2$-w|u({->ye?9-U6SX!*Wl_`U;S>BJt(_l)6t z2J#AQKQwGVOgt0W50NI-J%(!!q!kkVnc@1G5e81fHfY!eP3CsnL|-y|FPY5kw0!#w z-+q(1M=jqkXa6?}@ylp$1&qYRG97bZl`)+h~bXB9_xDP_P1kay}Ug;-rqm; zlvyPUTW^Qa9oxR(ehz)*t%C>gDk3N{be!Sp<^@)0zqKIo11?wy_A1MpH>0s5>PL{m z)`~$gWp4j*}tb8`hvQs#7j`z?NuX{wUfK zVjJF6h6~t+7nprevAz~NVWhbG>H4v<($?@cfQ{76zv5nE7gWv1^?UBW`u(s8U8jWG z?}XWei`c+|WKN%LD4W?zf*`Sp!fe8%8uJA)f`8S_86eCiEX22MyU2*ii9Lqdgc5(5 z!!P+4ILszA6F*?8wTvu3pALyHpP)7AlFe@VQXZ6B!H{Cgg|OZORP(8ojY zg(3L$A$Us&ZfsF&BsF{OUD@R=tyvzuww2zhmX@W8L7fJh%kwqDGp5_u2)%4mTT|o8 z_BFu?O;Qg#z<0DQH3uF+yiX(+pZ88|&=}51E`DkNkHTkIoOUVY?6KFE+oQ<2*Ir*2 zf>SRf;lIyZd0vM-y7*cL|AM{Fh2WpHxa4!by}r-E<=RaBAWZnXE#H7W3ckl)@3Ke9 zr}V8qaPXMDe$K(;_Ik*{YwY!Y2WPuadM!8<^j2%H-*j-fPi3|Nlzh&zd`CF=9E(>w zc+%p>Ie6OQdTyTeA!G5GOc3Pi?T;)j`8fbPjMVPn{}@E~KJCbfS^RGmKiej$&tFqG z=U@bXOySiE|Ar&~ek=cbieJnBnZntZi2N57PCYzi<-Dx$4=Mgv6;A#E%OA5xcMLY) z!MkmIGuCP@?sRh~fAkr%W*+vQbc>ilOG$GK_PH^;+L(pY_5RzO$PG5Vu`8>w$qg6F za$6L9@gP{`j9pP4rhq~IVL*0dU{>=g7^Cz)-qlpZioE740b8Rzp8;oL@9>B0KET+N z?yWh|yN*WX>^^5&c3(sD&oOCRkIy$yq@>cAxhJ=+8uPltPnvkas0go0eopqALC1g> z5`UF5qpDz98PmU*`<=zfVeG%Nl>6^2kI&~$JXp}X&MxQ;#scsz_kJ4bJ($Gb7W}+o z#&ZV_MteR52+N#%dl=5zXVWdRZP^cWGlMeu&G-k0$^Di^xX(p4(@H^!8UMQ`I8asf z$ud6SLppRa9w$>yXk$xIvOQDw4gZ5#S!}%HP9AY1ej1E4xfYu*Al4;*2EY3byz3-vg>^$7h+fK+dznY2c$lSi237M$*E2@#V zx)&`%)6WZ{^+J7F{+Ma@*R=x z*JIhe-LD_fb@%Y|nR41AP`1ji|9zX;u0I>P97&O(G^H0I5?8B^zWm{1gmTNXBEV^SnV(G)gDll^e^TLYZ-IiDC)$#I-ug@ldKWZki4D;!kwXs|<# z(H1jNMKN{GQ;xC7LVu_x8KZFwr%A-gF^NE)+b*KOy4seT{gx()C)mX}DHVT%jh_@o zdldZ%oWY5!6BEV`86CsBwZH~)(f=3->$%w{QadBett62HR{ z;>PE-t9wRy#y+qcY~WGAs1mpQVPnL_Gzvif6dVfwZu*4)=Y)Lk=NOU6g^%IJI=LyX zyRNk%a{sv&uhdwR;d<;Sb&PE|@x?eAvI>deg1EE~awJcw`HBFyO6G;4QfnwahHyRB zly-^Fr%p@6oF9VMhv1im;C~c?FAc#vL-2JW`1%n1t`PilA$TxurE!YACR>`8E^k}e z;JR(UNeSM$4U-m2!NmDtsBrdl}Cj%_JB zA-j2b`>K`z|71&Ndmx45a4(8eA{S(_>+FRBP*11~CcaA;s zab}w#{B;T^zl?D%b#Uq1#pgshntzGqXS!qTIS)73bMosk#l04nG1p>y{kQf=e!X5+ z#=MfQOZ<9{4xZKAR z1K51KlBWzl0Y544IU#bESlqoYHz*`!gN%q5Pv@GU zU8e6|49_^c`cm-q!oDxWC*ZmP*L<`Z`o0>kF~^7EwdA|~F$%$osJQ51WpRzrBbOydI;dQA5sX&xHc34Ox4p z1C;T3v}XwUt4q9=dI(2vcp~Og>vP*9>DeD+svPG0GZ{NQWv~CD4&IF5I{)Xxe{J+pEOxOhW-R}wU}K^7LPm)~bt1Sp zmfi^_tjPSfOxbssK8luUlcRIU7TD28!0IJp$~!BXIxXkzgG_!~IbeVj_% zn(rc1yiD0A6OR{e%vi1|EYu+XMc#nm+nX8ZZmoF+soV`Yqw@MmfT{e7al=OhJ|PqF zEqvQ5|1s#!dOYBeN&9b4+4o=!B~1)8L|zD-~J#i|03Qyz(?&rMx|ASv>M9I zGk_QDp)qXGRk-oL`1Qeq>B!#U+k<>$ntw6n>tKPxYYRNz1W(@rZWcB*)As>W--nN~ zzO3E;g39cNu|U+{g=LSCIkD_ZbB@Rk&N(Xkvr!r8Wm^7E>@0aVG9S!;^X(0JJs&GE zi%*c_@-vR4-h*A2yDq=i-oWHKUUt8(l>ZA7f0O@fxXP@jFb{d}YuPW`T)#ZRxrfi3 zb&Yutcjh2p?(lbE=A5|)!Krh3-Bp*@FRZ(uzM(E~?7&8qJx7l88ZMoeYDiytajO0j zFXo+pws-0@@04k0k9GmAYT<{YW0=k1@dz(iJQTA>-fEEaz3%%XafC_#{xx=TSMvpZ zI(-&a4U`r4OePPSZ$rkOlX-gXl+5w&`|TV0?M&N4(;Ul%zi;wMcKC|K))XkrCsa%4 zKB%KIIMN1TI`*<)lZE+&9&*wRq>T1|g!zO9Z2UzM(H`CWCxA0wu1`qf-{{0AFG-Gd z_S~9ICX9cwmT_?b2~MQ^0w;08YUt8^G?+nR8&iKA=}Y_x3E_^yHXPMHnX`_Hq&)P>L^_bO!coIjF)C=Bs;zDxvhZdK5CHTn}7rAm|{PIz6 zqY));8{6Qr@L%e?uBRbX%M|80A$U3jzdQtA5`uSx;J1e08$$5AL-2b;@V^I6AJ%|X zu=oW2Glc)K5d6PG@Ml8spM>DW!B;a@LbT!Y^u|f#dXLOrWJQlou-me@iAMT_3h(jT zEs_h@&D?WLUo8pzM`q_`xSN)>ugY=~r?7EZ@O3r2quJ=~$Vxb_3>4ypGK+}K{5Vu$ z-g(kpiS|XYJ%Pz*=q56QWXvt?1nUWj%@FIa@cRTo!Y_6EF9X=%y!A1A&3Zzj9PQKk zib0EV_`9C9oy#ol~t(^6WU(1obwi&E_klNR! zeU0CC*1S@9GgwAf@22|gY|v?pvC2W%`{w|cf8`)@+Uj|mff4C z__h3chd*W`T%vI5S?~oRa+(xQ{$S^``kFwsU3viAz8DVFynl zjC6vAiD7Fkqm+~7 zXY(NO1y2GiRn)Z>Jd}^7J|w=ppNQZQIUn>y_(l)_6IBV7XQV+-tU?Ot1ZM-$e_7^wxE>t8Iz?2+vR>#X$c zms_0AH-ADc_JkPgzR(}r6Uw1KPvqRKaJnZ2|67IAZ7%q~DqP#b;!ASVHQgiPFkRj+ zk+WOL(PP#hS=^QLoZ{EEXH4-k4I%0|_@DL*e5!MAMOH7B@6No8&#MnI!Xtaiwy?p1h2sy@=V9P+C$eBsa=zkU$YR5v z^#?A_FJ*Xx|D1_S&gV?1?0$kY*8CmjxQgFjr+{$Vg3q+r7Jov<;5#h*WO`jyELByr ze$1T}7gW`9ddW14|CibtrtB=gCAVD(vo&^FyL+*X$2!X@;r2CQw#E}So_lcnb>1h+ zbo;A!8b8d|*ku#WI2n-q3mj%^)Y!gKYzmhDaBPhU_W60Yw#HfN`IEfz=)z&PhQxoj zwno3bQI$5q!?iW;vGqs%pHc=l|AMDz5Ja4HR{EqR1VJt?ow19@40j-dVM4l(XYX^UarCU| zhrgz*n@Y8mG{;~~8TKT2Y5~@dq0g!8yKo{mzZjdlEjDJ&v6<#eW5&aq`SzYK&d$zk z-El!h1g{|7T#IiM3{nJEY+!@TdAP2_$a)^W!cd2gWY0_D$d7(iV&O#p7sqCwV9W|{ z_%W`%NL|s8Z(qdS%HF&pv6o$4Ww6HV?O$W56W*#?W<;m(8r8(sF_8+q&=h@Om;b%o z%Rvu_G;6SaCim8nT~8RMR9{1USzX4r zM!53>${HJ7XX4y4B2Jx&(^prMI}nZDu@9PU$gij!KGv*N0Xh&tfL~V=y@OWJBYP^0 z@nl{W!_uUN@|OARSBC;$X~#$t%M*pa}1I% zr>Cx0`>y3KtceWWfNWTP7+r;Xvj@w^a<|0Gqjy9gBe)-{W5L>|q3=N|$}uAMcRU90 zJ-;8pJAo|vx6snqd(w-P!W7;$8DDqghu;&AgC+N3Sthr=OzsDQh|J!VT||*w4L70; z>*wGOB7}`|* ztz9)i3y5|p#^_cC=;xat;d%%u~O1hOQ<9FXqgq#^q{mWbCVjWtwAF}txIH%iP z(Vok2BkS{5EH7q5f_i82Da)^mmjx{cb17keK7b7khfW{^6E(0Y^w3yf{q(a2`h#P& zs6g}@fdb)lg*0f;L~PC7JQf#^?J#y-s;_Qhw1+G4(aPc?hQ_-cp3G>^UjWM;D2w*| zhdC+7TF9Qu&1r>wE~7n1!hFpg7*n|BY#?8}y*Hl389lk&tB#)B`Q`}Et~q`+zL??g z?BcLB@%V$>x*XnITi}ep4Q<@U9)S4T>A4JC^F<$iT5JmW^58eo1fXyD%S`^xIJdx- zs>s)BrGbt1aFe*#dg9Y@D2w(!jzbWBzKI>}Jrf9}-Ss-Y7W!<;UlFJ^SUp{j-Z9#9 z8(30(U3mQ!jjG97ecvq}dXi}GH=u~%4n%PWZ29Z+UFc`!dr;BdSMY$Qc2vYy;#LN# z?V6Fw)nVIeFrAFGmqWY3(b}KE`_AVhE%S6(6-4j)2gC~6HL?%B0rtN$ZK70*{_OLq z9d#M7c{rNZ7OPutGd$e}?d!^<(6&r@rM|pNV%_?cRC!${bxvJn%CE~rdoKn*z2w{s zz8)=vbW)~M5w|$Tr>cEmY8d_F08eAnPBqrsYeilh5hxf5P}GJ%*?CjKY*?fqxXN18gB@0L$!PNMQ=U-4W{Ca zA5c*S=UF-b3!vP}o-=U~=sCE>JL;%Adv_DaQGY5oC*F>JCE9x)rJ?mLGv$i*PGj8u zp(9L5VRx0dj~h*#zPbs~O%D~c#6g1GJ8Zrh*^%;ZnP5MtiyCOEU+=%88=y8!ZlEjN ze;~*QV%893U=pet>H|LFyI1lmKR!1c_6CCaBG-&~%76M|f7`|Ww@fnT4^=p58_X4~ zmlRs15BWD&7BiUf%cDJ~;TcHfv-o%{zBv3q@crRT-#K-?uWe@Tf@aM05z)F`c!qL2 zg7y|Xm_tbnr2Xg9{?7piEodfxOI4=)9GXclnl?JfOdhwIsM9LK#ziAKk`-Ub1-z)i zf5X^a8Gjy(E+Zu|fLulYe88UT^BR_BChim{-G`qL!OI^&x!-Q?MO zpfgz)uSFL!YiKnz9n_Pan@?NPb;D_E z+BTK^?xfCG6Y_Q>xKVp17Id(g@mZz&?>nr9})ugLxb7Lr<*&&_8Kgh{J!Nk|`8Z?`K7N3gKyLk;-&&&os zs<{RK6uniD%+CbV9YHyd;YZ?_PbiL)AKHsgSvjey3G2(bX>N=jt_l;%_!t%$YT!RY zc`)U-`1w3uw0=x(Y(u{MPJDoP{zmh?G+8e+hN4XPwN?8oHkOfz>0fK(4+QbCzWe&B zB$s!q@3Fm4Yq-5>oxdORdi%9g8ai>u|6#ti{ag?Onq{XlD28gRBnT28)MT6!cYS5G zY+OoEaMz0gtZ$V0ZsXHe#`IC8N06jHe*`+Z{O2LORQzt6|852<*%SPA(uDIS10kCB%(dK@p;3fA@j2oe?GBr$X@haj=ZW}!i=SkV zd`^fjwhA~&x-qL~)3*Wprx5-x zhu~ig!MB9qUk|~*9fEV-t&|>~55Zpx!N;MTrQ{qPf=>v+YeMjILhuIQM$c^2K&B7I z@wyQHB_TN9122{TRU!D=5Zn*J?*h(z*3u6L8o)K_^CA3S4Z%lD7-Ql(aDOjpgRQr! zz4^wLY-?vric6aW^th!m^PZqnmcgrWbnwF0&Ea%=kTbfsU zE1H%sZ*Nu;3fy|aDi=F`n;b!DYdYJq&h&k-3P2^Zyk+GL*<~KfmY8X>2c>akL-E@` zY;N_u_NPrK+t88wIDARrv{f;hGxV(xTx?m&(QA-7AR`giYmF}o!S%idntzk!XLS}E zf^wfwa*oHfgTiSN2>$sH`~qu8y85}+;*6&Cvr^$&KevV8cPKoj^0P(Zx?Dd}_(_U?lI?ey zA6>39L+}QLYyDqsaoXp!v6A?au2=l}zARU`zAyJF{0|Xd^t@f+`o0`XHwlRO*ZkKg zT&rPIAg;aU&F z3ZINPQm)hNxXIPeGKHV4_}44EM&b7>T(?*I6h1}qf6yA(O!pLpU#Rd?75)i@>w0yo z!gc+*Q{lS)d`savKa;IN>*}FR;abm|6t3mGsBo>fg9_KrQ7dmai0NwlMuqG9c$32E zmy!F}r*NI_KPsFyyzu{<#d%KWe&dIUUxgV*y;B;_+r}+?R0P%C+%@?87Ikj zTk<30AxTGY8TTY@I)caS^DOBLF7~4_xYlN6`GrWtS;p~tIOky=|x>eFKP$8 zsB5=2z+oIK%-CSv{mTvhFRT>qmhnIa40G!9w~jR+_Q&Aje3?_hr_lZ)`an89rEU(mN-Vx*rAD~c)W3SX`&oKz+BwQu)dA7-;_Dy3GT2V=Frf*JMhuMH= z?=r}+`9e-A#?9Uu{nSI8N$A}j?U|3jx?uBGGiDh+5g&6KH0=1+$3*VoS{=c%fZ2~m zH%U#@@*AKVvQ- zF%bB)hmt_IBjWkN_3+N%xS;P!DD~HwzL^j6R!iY3gURNt{dQ**Q$I`~U&DAV*xM!( zeC$Lfkr=YGD5ZFYMF3mP2n{!f_AklxRkPn_A3-{jjl)IUOJi|WcVwiqmGRSL0xjd8 z^*O&!KGa91Z}y~lQ}wKg6vX@*IB(f?Jz+&nSL z1glWm9hzL;#RzmU@}K425P~3=mwwh#tP;P/%|@pGoEGTIMkHR_41-JY( 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 Mk@+v;-8S%l11vb(KL7v# literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns.h b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns.h new file mode 100644 index 0000000..f06c5a8 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns.h @@ -0,0 +1,93 @@ +#ifndef DNS_H +#define DNS_H + +#include "stralloc.h" +#include "iopause.h" +#include "taia.h" + +#define DNS_C_IN "\0\1" +#define DNS_C_ANY "\0\377" + +#define DNS_T_A "\0\1" +#define DNS_T_NS "\0\2" +#define DNS_T_CNAME "\0\5" +#define DNS_T_SOA "\0\6" +#define DNS_T_PTR "\0\14" +#define DNS_T_HINFO "\0\15" +#define DNS_T_MX "\0\17" +#define DNS_T_TXT "\0\20" +#define DNS_T_RP "\0\21" +#define DNS_T_SIG "\0\30" +#define DNS_T_KEY "\0\31" +#define DNS_T_AAAA "\0\34" +#define DNS_T_AXFR "\0\374" +#define DNS_T_ANY "\0\377" + +struct dns_transmit { + char *query; /* 0, or dynamically allocated */ + unsigned int querylen; + char *packet; /* 0, or dynamically allocated */ + unsigned int packetlen; + int s1; /* 0, or 1 + an open file descriptor */ + int tcpstate; + unsigned int udploop; + unsigned int curserver; + struct taia deadline; + unsigned int pos; + const char *servers; + char localip[16]; + unsigned int scope_id; + char qtype[2]; +} ; + +extern void dns_random_init(const char *); +extern unsigned int dns_random(unsigned int); + +extern void dns_sortip(char *,unsigned int); +extern void dns_sortip6(char *,unsigned int); + +extern void dns_domain_free(char **); +extern int dns_domain_copy(char **,const char *); +extern unsigned int dns_domain_length(const char *); +extern int dns_domain_equal(const char *,const char *); +extern int dns_domain_suffix(const char *,const char *); +extern unsigned int dns_domain_suffixpos(const char *,const char *); +extern int dns_domain_fromdot(char **,const char *,unsigned int); +extern int dns_domain_todot_cat(stralloc *,const char *); + +extern unsigned int dns_packet_copy(const char *,unsigned int,unsigned int,char *,unsigned int); +extern unsigned int dns_packet_getname(const char *,unsigned int,unsigned int,char **); +extern unsigned int dns_packet_skipname(const char *,unsigned int,unsigned int); + +extern int dns_transmit_start(struct dns_transmit *,const char *,int,const char *,const char *,const char *); +extern void dns_transmit_free(struct dns_transmit *); +extern void dns_transmit_io(struct dns_transmit *,iopause_fd *,struct taia *); +extern int dns_transmit_get(struct dns_transmit *,const iopause_fd *,const struct taia *); + +extern int dns_resolvconfip(char *); +extern int dns_resolve(const char *,const char *); +extern struct dns_transmit dns_resolve_tx; + +extern int dns_ip4_packet(stralloc *,const char *,unsigned int); +extern int dns_ip4(stralloc *,const stralloc *); +extern int dns_ip6_packet(stralloc *,const char *,unsigned int); +extern int dns_ip6(stralloc *,stralloc *); +extern int dns_name_packet(stralloc *,const char *,unsigned int); +extern void dns_name4_domain(char *,const char *); +#define DNS_NAME4_DOMAIN 31 +extern int dns_name4(stralloc *,const char *); +extern int dns_txt_packet(stralloc *,const char *,unsigned int); +extern int dns_txt(stralloc *,const stralloc *); +extern int dns_mx_packet(stralloc *,const char *,unsigned int); +extern int dns_mx(stralloc *,const stralloc *); + +extern int dns_resolvconfrewrite(stralloc *); +extern int dns_ip4_qualify_rules(stralloc *,stralloc *,const stralloc *,const stralloc *); +extern int dns_ip4_qualify(stralloc *,stralloc *,const stralloc *); +extern int dns_ip6_qualify_rules(stralloc *,stralloc *,const stralloc *,const stralloc *); +extern int dns_ip6_qualify(stralloc *,stralloc *,const stralloc *); + +extern int dns_name6_domain(char *,char *); +#define DNS_NAME6_DOMAIN (4*16+11) + +#endif diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_dfd.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_dfd.c new file mode 100644 index 0000000..c924718 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_dfd.c @@ -0,0 +1,70 @@ +#include +#include +#include "byte.h" +#include "dns.h" +#include "error.h" + +int dns_domain_fromdot(char **out,const char *buf,unsigned int n) +{ + char label[63]; + unsigned int labellen = 0; /* <= sizeof label */ + char name[255]; + unsigned int namelen = 0; /* <= sizeof name */ + char ch; + char *x; + + errno = error_proto; + + for (;;) { + if (!n) break; + ch = *buf++; --n; + if (ch == '.') { + if (labellen) { + if (namelen + labellen + 1 > sizeof name) return 0; + name[namelen++] = labellen; + byte_copy(name + namelen,labellen,label); + namelen += labellen; + labellen = 0; + } + continue; + } + if (ch == '\\') { + if (!n) break; + ch = *buf++; --n; + if ((ch >= '0') && (ch <= '7')) { + ch -= '0'; + if (n && (*buf >= '0') && (*buf <= '7')) { + ch <<= 3; + ch += *buf - '0'; + ++buf; --n; + if (n && (*buf >= '0') && (*buf <= '7')) { + ch <<= 3; + ch += *buf - '0'; + ++buf; --n; + } + } + } + } + if (labellen >= sizeof label) return 0; + label[labellen++] = ch; + } + + if (labellen) { + if (namelen + labellen + 1 > sizeof name) return 0; + name[namelen++] = labellen; + byte_copy(name + namelen,labellen,label); + namelen += labellen; + labellen = 0; + } + + if (namelen + 1 > sizeof name) return 0; + name[namelen++] = 0; + + x = malloc(namelen); + if (!x) return 0; + byte_copy(x,namelen,name); + + if (*out) free(*out); + *out = x; + return 1; +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_dfd.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_dfd.o new file mode 100644 index 0000000000000000000000000000000000000000..60730b78639ec75979a7c2d5826031a46bcb6de0 GIT binary patch literal 2144 zcmbVM-A@!(6u-kRf{HuSMiUZ^Y|@QE#F0^=Mk(EaU7bxfMl7__Dw|<<&RH zNg?d2H+0Yk6Cd@Z34cJ-)bxc=?UxUd#)m%1OPgQ|q>wZ*ey!)s+|kQqdGRE>=bYd9 zov%A{=j(X#M3o>APXy9V-gzEM$g`?gMR>gVcbYEOdxuXd~SagVb6>5rJM zO)Q-Stei#PAuLA>g22T zkt=j@@_}&uRuD;$Wp%0I_dP_NToMux7=JDgKPoL-f7`LW!pCJu8cEo_0{xY)M6VA8 zr6gTbX6Zu0Zu`WU!LHk6}gzqTfu2NBHm~QZCms6 zI5;jq*TiByPu$9g0VH<+_m=o{?KJ>jz*?Gp%Q-G*Il4ms)aAYNfJO?b02DHvRx7 zK%TC`2%tf>yNU>3ogu>teO2uU5G`i@Z84o(MdRK-J$-&Ds! zEmt>nhK^3wBttg?F8gF>=do~O%;+D~bKzF`kbH2zA}f1clMuNunzi(P&{p2n7d$I( z4C%6ET(*du(Jh_G{e=RN9n`px8p!KegUD$!n>BJk$(fcRpFGvGzhLR{KJrobNSn~FyJ)Ac=6`J`(c2UEuZEwO@8MCvu)kl%S^oxKz|T!U z+>c?(9sfeCj-UGh;Qq7Y^LtsIr~LWoS8DYPmjyY^61IYkyZiUw3|OW98hd}bAkK@w zKOf_5hb0iN6dCz)I!l^Mv$Y1cBd`d|(|LS{B&S|pV+^7)*Z8Zy(mHE8AtxMn_e zDQ{XP=^wR>RNA~WO0xP8FvvjOFrbYi5vK87!Ds#wKHn%!9FBLy!)G`g&&b0|?9pKz c9{-lZ>p1=#hx7c$9KMa?hrvd{S@`$*4V95vp8x;= literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_domain.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_domain.c new file mode 100644 index 0000000..80ac5ea --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_domain.c @@ -0,0 +1,73 @@ +#include +#include "case.h" +#include "byte.h" +#include "dns.h" + +unsigned int dns_domain_length(const char *dn) +{ + const char *x; + unsigned char c; + + x = dn; + while ((c = *x++)) + x += (unsigned int) c; + return x - dn; +} + +void dns_domain_free(char **out) +{ + if (*out) { + free(*out); + *out = 0; + } +} + +int dns_domain_copy(char **out,const char *in) +{ + unsigned int len; + char *x; + + len = dns_domain_length(in); + x = malloc(len); + if (!x) return 0; + byte_copy(x,len,in); + if (*out) free(*out); + *out = x; + return 1; +} + +int dns_domain_equal(const char *dn1,const char *dn2) +{ + unsigned int len; + + len = dns_domain_length(dn1); + if (len != dns_domain_length(dn2)) return 0; + + if (case_diffb(dn1,len,dn2)) return 0; /* safe since 63 < 'A' */ + return 1; +} + +int dns_domain_suffix(const char *big,const char *little) +{ + unsigned char c; + + for (;;) { + if (dns_domain_equal(big,little)) return 1; + c = *big++; + if (!c) return 0; + big += c; + } +} + +unsigned int dns_domain_suffixpos(const char *big,const char *little) +{ + const char *orig = big; + unsigned char c; + + for (;;) { + if (dns_domain_equal(big,little)) return big - orig; + c = *big++; + if (!c) return 0; + big += c; + } +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_domain.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_domain.o new file mode 100644 index 0000000000000000000000000000000000000000..8caefe87df139cdaebf287a76c33879e985bf3f7 GIT binary patch literal 2552 zcmbu9-D@0G6u|FfHa4|kc3Y(hDr6p{?Ls?bwTO!7jvdWiD79+yAe*qvZe~qzzsyV^ zDT=}-flITH2SNM?#K%08(8r`;JdvilZOcSH(#$`@K5>)06s(lerkoyZe!;a9=kMSN|m+)^Y{gTb#rc z&@Uvp7))8;IPSc_{&p{nLy3PT{W^M|KDg{lH~Wppe&SVA_E|2bOTR?NDf<;h>}!wx z$UTKi?-IJS8}%m^s}o)c7EqjYCtNHcPp~cY(hC?km?ZpyfBE7Dc8`#U6Ge=RuMuND zW0->n23BE5$R88F<3giCep=WIs68u#3S-aW0AvhbFIt(EKF=CnHa*L3r_f(R4pP9E zYh{+v-!{iAn~=u=tsn<^2VXG1(^s&DUCVZ@6Yc)x)Cxq7;`*1-5Aq1UAWypw^w^m* z&)O%vpgiL@?9%_wlj&W)c6Bfs(%R`9>XhS_+49?-Jng?&T&d3m#y*hgWU zQfxVl2a?ez0z3#BQwdCl1wSUZavgBbN$hD4(bqZ&F_`ne&VLH#VqN-jqXKM#PZe3e zWH}h~F@bt=maUZ_84`;w}-7S%y-<80~R3j`+HS7LN z!>K4nsTMTejHXo*ygldFNW~9>($q|~T2_7GT(vqg-)e??p-L*v)&i;fwOX@6$_r6Y z;-ESk1Zotwu{Mwo6UEOo{6S<~vJhPG?6Z^w|K;= 'A') && (ch2 <= 'Z')) + ch2 += 32; + if (((ch2 >= 'a') && (ch2 <= 'z')) || ((ch2 >= '0') && (ch2 <= '9')) || (ch2 == '-') || (ch2 == '_')) { + if (!stralloc_append(out,&ch2)) return 0; + } + else { + ch3 = ch2; + buf[3] = '0' + (ch3 & 7); ch3 >>= 3; + buf[2] = '0' + (ch3 & 7); ch3 >>= 3; + buf[1] = '0' + (ch3 & 7); + buf[0] = '\\'; + if (!stralloc_catb(out,buf,4)) return 0; + } + } + if (!*d) return 1; + if (!stralloc_append(out,".")) return 0; + } +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_dtda.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_dtda.o new file mode 100644 index 0000000000000000000000000000000000000000..0664b70c21e0b4810a6b817a3e93819a22f77773 GIT binary patch literal 1904 zcmbtU&1(}u6rateO`6$WMRxcJ3 zr3*&#ALxJJK?vf(23ke%(u*F&lV7z$5qcBKA4^Ne((3*n|U*{4~8Na z9fCkC5y*Mcuq>329!EnD7;1p*B^@MqJvbH|9nrVPu7&mA;lfXkRB4TrQa))!|5B_< z#rHrC7nTM6&DssAo0OE*f%dzz3tPQ(W??H@rnmLg>JKrZZx%kgBKp_2PTxeK+P4_; ziG~AE({z-SzE@621}@ao5m)Ntl=Y+@@3Ubh#h;aWZ5#~LD*y(C31L*|dN0`rzL5ka>xVsd$_p!4iK5>NH zJwbP0q4iPAuseXf;laVP-ky*an^rU4)AA{~zt=DOkDDsg%il{=H3l=ynRC+8a#~82 zsWwlEoKUGs>sw& zins8~fLUt+wJy&X*j-0Vh3Ad~%wx!0Y6dpp?gNbPy*)mOhE4diX!E^8da}g~^0I(V zFxz49`$w!<{Y7^FE|_WRU%r0b!70ddl8qV%8>ZN_W4MlHD?z;32_w!n$rTZIyhf8C z8Xe%sV2bswGvH$=8 literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_ip.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_ip.c new file mode 100644 index 0000000..e7c3a9a --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_ip.c @@ -0,0 +1,75 @@ +#include "stralloc.h" +#include "uint16.h" +#include "byte.h" +#include "dns.h" + +int dns_ip4_packet(stralloc *out,const char *buf,unsigned int len) +{ + unsigned int pos; + char header[12]; + uint16 numanswers; + uint16 datalen; + + if (!stralloc_copys(out,"")) return -1; + + pos = dns_packet_copy(buf,len,0,header,12); if (!pos) return -1; + uint16_unpack_big(header + 6,&numanswers); + pos = dns_packet_skipname(buf,len,pos); if (!pos) return -1; + pos += 4; + + while (numanswers--) { + pos = dns_packet_skipname(buf,len,pos); if (!pos) return -1; + pos = dns_packet_copy(buf,len,pos,header,10); if (!pos) return -1; + uint16_unpack_big(header + 8,&datalen); + if (byte_equal(header,2,DNS_T_A)) + if (byte_equal(header + 2,2,DNS_C_IN)) + if (datalen == 4) { + if (!dns_packet_copy(buf,len,pos,header,4)) return -1; + if (!stralloc_catb(out,header,4)) return -1; + } + pos += datalen; + } + + dns_sortip(out->s,out->len); + return 0; +} + +static char *q = 0; + +int dns_ip4(stralloc *out,const stralloc *fqdn) +{ + unsigned int i; + char code; + char ch; + + if (!stralloc_copys(out,"")) return -1; + code = 0; + for (i = 0;i <= fqdn->len;++i) { + if (i < fqdn->len) + ch = fqdn->s[i]; + else + ch = '.'; + + if ((ch == '[') || (ch == ']')) continue; + if (ch == '.') { + if (!stralloc_append(out,&code)) return -1; + code = 0; + continue; + } + if ((ch >= '0') && (ch <= '9')) { + code *= 10; + code += ch - '0'; + continue; + } + + if (!dns_domain_fromdot(&q,fqdn->s,fqdn->len)) return -1; + if (dns_resolve(q,DNS_T_A) == -1) return -1; + if (dns_ip4_packet(out,dns_resolve_tx.packet,dns_resolve_tx.packetlen) == -1) return -1; + dns_transmit_free(&dns_resolve_tx); + dns_domain_free(&q); + return 0; + } + + out->len &= ~3; + return 0; +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_ip.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_ip.o new file mode 100644 index 0000000000000000000000000000000000000000..d5fb16e85235147c000d552678f26d35e865fead GIT binary patch literal 3600 zcmbtWU2GIZ9G~l5%VF`h5|tWB+lSQ@l?#VR_%wHL!j>#Xv=tIcuGik4J-ILMrdYJm zCf5=+%W9vD#1}svd?7|(Ea9OPDu-8VU9PpPlJV$L^E=WOrtM z|KI;>W_D&@f6Cm|5C{+<0rDiNj|57{x=_6zXWcl7kY-}oz51+S=k-g5{f}v9^s6Qe zu65bJn>N*dGwl)m?3I;t>D4<8C$FzFos7Q8gkIcqsBW0f zi2jUG`~1L+=~BHVb}?~!1sK{lP5WolzQw&H?DKTe076@r`&ttNllCu+#2NNE`j$4? zt+%;5=Ck7$vvyK%)5fsCE_YYh-4`<55q-4*a2S9F!w%^;I<@vBA)vw%Fcv1V59h#ofWJIp9HeFn&6s)3pO#T^YD zGn{RDT_gOD9|rqu4YCbs<0%#kR|H}yC2M2v-I>n09tO2X*W1!U9gz=uI4&$uj*}oCEHEXrH$$fF(E+hBHL$ zOWLO^nnvdi(oaU`4$)Jib5ZKJiP>$-vlA~*X;Y9C3*&}H-DG0+IE=O0091S9xZ!Na z0IU=ir8XU)C!PBcG@K`}fh{F8+SsdLRZpqji%nm*K!tqo>$n%YAc0q&C4u3VKybyf z@C2xIz*aL2AzvbO&#|W3vb}ETMC0?3zBe1*2zpB7B{{DRc{?I4J0h(of^I`H(s3-* z73oYy;ER479S72W-G&)OJ?j=bH*} zjT-AQz|p5l7xp5aaIB7FpuoJ=3j%M2J?dl;W6{PziG5|7NQ@_><|XWe&%HkOo4Dbi zAo5nt-vC^l6Qo|f+cQ|_H3a8>89c&X%>RDC)SS@dT^_$32a>4VKG3Nc($A`eBM72$ z?*VKns<1CJtNKf|$FVy1$o?3M1u1hSP6uvDwf^OREfv25Zw`S$aV%ZUGxevt3?nS1PRXC zV!{2jQmTucwSeLIpq?3M`G^m`#RoTi@ID{>MIU_F2d@E+`OosDVRryvjt~DGAN(U9 z9RDDenujlZ@GCwz$rP)pTsb;GUgF&isWRLI7A0_nr1SaGKx&{=K3Zj3Ps0E*lq=HM z#?(*|!Bl_l1({JjoGTacrs+RQtyCtL%}Valw4ZUSr3%fJMc6taT`pV248t>}LONH3 zTdP#alqiELR<)ErV#)m!9cDvFxL7UZDDW+huwV~kCJ%WH+llgS7v~y&-njQ}!`}eP z5za>(zj=Y=zV`;+h3JrW=Hg^0V~ zhoAQ0I}$F}`+X7bHI33nK2<9LM~TFXXbs i$GcPTznA!Oy+2C)2PA$6cZmKug&}y4qX=A_L;nJ0(|{ZR literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_ip6.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_ip6.c new file mode 100644 index 0000000..1a2ce08 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_ip6.c @@ -0,0 +1,103 @@ +#include "stralloc.h" +#include "uint16.h" +#include "byte.h" +#include "dns.h" +#include "ip4.h" +#include "ip6.h" + +static int dns_ip6_packet_add(stralloc *out,const char *buf,unsigned int len) +{ + unsigned int pos; + char header[16]; + uint16 numanswers; + uint16 datalen; + + pos = dns_packet_copy(buf,len,0,header,12); if (!pos) return -1; + uint16_unpack_big(header + 6,&numanswers); + pos = dns_packet_skipname(buf,len,pos); if (!pos) return -1; + pos += 4; + + while (numanswers--) { + pos = dns_packet_skipname(buf,len,pos); if (!pos) return -1; + pos = dns_packet_copy(buf,len,pos,header,10); if (!pos) return -1; + uint16_unpack_big(header + 8,&datalen); + if (byte_equal(header,2,DNS_T_AAAA)) { + if (byte_equal(header + 2,2,DNS_C_IN)) + if (datalen == 16) { + if (!dns_packet_copy(buf,len,pos,header,16)) return -1; + if (!stralloc_catb(out,header,16)) return -1; + } + } else if (byte_equal(header,2,DNS_T_A)) + if (byte_equal(header + 2,2,DNS_C_IN)) + if (datalen == 4) { + byte_copy(header,12,V4mappedprefix); + if (!dns_packet_copy(buf,len,pos,header+12,4)) return -1; + if (!stralloc_catb(out,header,16)) return -1; + } + pos += datalen; + } + + dns_sortip6(out->s,out->len); + return 0; +} + +int dns_ip6_packet(stralloc *out,const char *buf,unsigned int len) { + if (!stralloc_copys(out,"")) return -1; + return dns_ip6_packet_add(out,buf,len); +} + +static char *q = 0; + +int dns_ip6(stralloc *out,stralloc *fqdn) +{ + unsigned int i; + char code; + char ch; + char ip[16]; + + if (!stralloc_copys(out,"")) return -1; + if (!stralloc_readyplus(fqdn,1)) return -1; + fqdn->s[fqdn->len]=0; + if ((i=scan_ip6(fqdn->s,ip))) { + if (fqdn->s[i]) return -1; + stralloc_copyb(out,ip,16); + return 0; + } + code = 0; + for (i = 0;i <= fqdn->len;++i) { + if (i < fqdn->len) + ch = fqdn->s[i]; + else + ch = '.'; + + if ((ch == '[') || (ch == ']')) continue; + if (ch == '.') { + if (!stralloc_append(out,&code)) return -1; + code = 0; + continue; + } + if ((ch >= '0') && (ch <= '9')) { + code *= 10; + code += ch - '0'; + continue; + } + + if (!dns_domain_fromdot(&q,fqdn->s,fqdn->len)) return -1; + if (!stralloc_copys(out,"")) return -1; + if (dns_resolve(q,DNS_T_AAAA) != -1) + if (dns_ip6_packet_add(out,dns_resolve_tx.packet,dns_resolve_tx.packetlen) != -1) { + dns_transmit_free(&dns_resolve_tx); + dns_domain_free(&q); + } + if (!dns_domain_fromdot(&q,fqdn->s,fqdn->len)) return -1; + if (dns_resolve(q,DNS_T_A) != -1) + if (dns_ip6_packet_add(out,dns_resolve_tx.packet,dns_resolve_tx.packetlen) != -1) { + dns_transmit_free(&dns_resolve_tx); + dns_domain_free(&q); + } + return out->a>0?0:-1; + } + + out->len &= ~3; + return 0; +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_ip6.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_ip6.o new file mode 100644 index 0000000000000000000000000000000000000000..3b8d1ab2483875da101f98f5d8ccff645c50c991 GIT binary patch literal 4824 zcmbtWZ)_Ar6rbxIP^5M%|11c$F)Kj=8;XU10n&piTe1*9tf=U5?cLD}*Sqs>3#~%D zcz4KVIcTC^)I`4+O^jdkgERzc0U-oGNJwgonuuSp1%nthwgIW{&Cc{5+paP3CA%~8 zd%ySQ&6~F~``VMnQx!fRlj39RS$QN;Xs4F@O}yL0s@V*tTf5cEx|LABwFV6%diisd-VL59p_?7T{B~P$yBwL(xIu`gY_MED7~FAKT}TZ zRJGEEu~_j+%xYFOrO*b;YAHQgQQ98ZQaV(r16m2=D%}dGH(Hgt0$-I5^HiS1Zhr;5 zgvYKqvHU@GX-%-N20(~gDSQtdK8bR|P?z2_(+F3cDb4oNsFcEdSYWX4KF5P~mMX1t zO5yfhSU)UlsbP)rc^d}Gff&}WA{M2v3;cNKigBLA$=0A0w}6hXBcK$6(09D!c1Z8K zU8M&50)X6`QKj$_1b5O|JZ#-xGM3^f;KM<9DRnt8V?ld=WsAMOS1h1+cnRoYF>O4* zP%ls;5%m_-2-eLI7R*RL+Crh|x^-Ll?o!7qVlh_4a;%8eSP@N72fC<(ek@j~C1GTK z6|{H4zS;p*x2|0X)UXzNttyn(d8HTu{)J|>4gv)pmSx?IB}yH*xT#w|N-ssOzQ?H2D5`LcB5(yDW6wO&5gcbUdxTXX#SKN)yz|+;N`W`1^>W8r5~m#1#+e4 z;N>IGy>TkvUU{csV0a0n{tH~Mm`y3n0>sI{cnC`2E+kI3*CCPXI6FV!Gc|h-g1Wtu zH(+w$&e#}gW|!TTdm*1;{ z+H)e`)^&qB=UUxfppG+!pSwLa#@GVJ&$Zc@GZ5b^JD9J##^U2O%bS@FUPXoBJADs z-xBsYmtS}MI_TXwL6hE@jv?w%F#prwk@hnG&jKc6f$q4Zr#RiZam4AkxqAS1W5_%% z?6FV9&3yor?!804v` zG5E3$=SoJni%6<798bapoa&6EOb%tD*;HbGl=eerHy=VY$!urb1b);ZjN8Nbo=}`< zVOo(X%pz;zZ|5w-qX&N3xV%nqJi{b@jNsJ-$GSnmFBDG)dA41JJ_?qx0*~~g!oH#) zPW=Q4PUG1{a2iiY;BsE>6kZ9!r}Mt*;>$RXc<|rx;D6x3KTY_w{x1rcA_@TGaKEj_*`1=Wt|Bmv1{*Vh7*DpIx{3Bn= zTZE7Q>@uFW37_WSJ;Gl|_@8+2KP7ycw*i9FJe((f=y!LC@M#_f2~P9ygA12=xJmre zJp4}hG!G+$PxJ6M;nO@c3KG@{{u9W2J}+>0J%IX?w1aEQ Ie0jh8187aD+yDRo literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_ipq.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_ipq.c new file mode 100644 index 0000000..5b65e23 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_ipq.c @@ -0,0 +1,71 @@ +#include "stralloc.h" +#include "case.h" +#include "byte.h" +#include "str.h" +#include "dns.h" + +static int doit(stralloc *work,const char *rule) +{ + char ch; + unsigned int colon; + unsigned int prefixlen; + + ch = *rule++; + if ((ch != '?') && (ch != '=') && (ch != '*') && (ch != '-')) return 1; + colon = str_chr(rule,':'); + if (!rule[colon]) return 1; + + if (work->len < colon) return 1; + prefixlen = work->len - colon; + if ((ch == '=') && prefixlen) return 1; + if (case_diffb(rule,colon,work->s + prefixlen)) return 1; + if (ch == '?') { + if (byte_chr(work->s,prefixlen,'.') < prefixlen) return 1; + if (byte_chr(work->s,prefixlen,'[') < prefixlen) return 1; + if (byte_chr(work->s,prefixlen,']') < prefixlen) return 1; + } + + work->len = prefixlen; + if (ch == '-') work->len = 0; + return stralloc_cats(work,rule + colon + 1); +} + +int dns_ip4_qualify_rules(stralloc *out,stralloc *fqdn,const stralloc *in,const stralloc *rules) +{ + unsigned int i; + unsigned int j; + unsigned int plus; + unsigned int fqdnlen; + + if (!stralloc_copy(fqdn,in)) return -1; + + for (j = i = 0;j < rules->len;++j) + if (!rules->s[j]) { + if (!doit(fqdn,rules->s + i)) return -1; + i = j + 1; + } + + fqdnlen = fqdn->len; + plus = byte_chr(fqdn->s,fqdnlen,'+'); + if (plus >= fqdnlen) + return dns_ip4(out,fqdn); + + i = plus + 1; + for (;;) { + j = byte_chr(fqdn->s + i,fqdnlen - i,'+'); + byte_copy(fqdn->s + plus,j,fqdn->s + i); + fqdn->len = plus + j; + if (dns_ip4(out,fqdn) == -1) return -1; + if (out->len) return 0; + i += j; + if (i >= fqdnlen) return 0; + ++i; + } +} + +int dns_ip4_qualify(stralloc *out,stralloc *fqdn,const stralloc *in) +{ + static stralloc rules; + if (dns_resolvconfrewrite(&rules) == -1) return -1; + return dns_ip4_qualify_rules(out,fqdn,in,&rules); +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_ipq.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_ipq.o new file mode 100644 index 0000000000000000000000000000000000000000..cfba4b02b1f0b1bc29bd377e3c1af91a754d5739 GIT binary patch literal 2832 zcmbtVO>7%Q6rPQp#x22XN>l~W%0^nMhBixGqC!eay^c-R)KowdNR_6p@rp2?->i?0bE9|JW? zD`rMo>dwzJ3PhaC1FRH!C0FN{Q&S54Mrm6yqQye=*NCGts=H5~^d$J+gGQ0)kCdJ6aCU-_@_MI_dZ2@9tG9v=lC; z1r=g=?(D-kss#vF2)O1;xp=VXJP3oD><<-3gb=+8!!w4c(%&PFE-BQu<}Vo~;(+NY zUG|sMV$0*IV@C2AI0Sgwm@Z7#sMA1aOG56Q@&MH5FD;e(VMYJzGBgyTYX(K>ToD(~ zFbll80lV#Z)i$`*hQksU_klf3QiAv8(w^cy?Q0doEIxMZ@@ruxmPrx0l zf19PPSM*0!`h!Z>V47-SucQ_r$Tj3d3&WBJCu*FGP1`2CjHFFzVVZF1B_dq(2#)3^ z*Ag7p4#4*^+h7AILANL9ZVkG9LHB{njYa31j<*_m+=mx-gxpVs+%L>FnPl|oWqt`< zpIdOuI-_piWeft+)7^c{cOaw(2-O=$ZG8wNRSE=K>2pj-Y{{{g_* zh#1pc@~nRE7IZr|Qpf*2`#@M6d#(onuSK=|&-_RJTC+o!b#|a`u!Q#khDXBQKVr4= zml*L1*m<$n&)aw%c~0_Yg~u%2QFG#0N3BW_-~NWNAA!U9bLAlTrnie@v-_@|R{@6SozG>t;9p%Wyt@v5vJQT_4t}l{cXCGDq_9zSRt5qi% z9?!-`CoaedlF6mCtbD}(Z~ zW@Dd-XSLYyXfip(dBpWB^FUuS>1KRmpV6}E)MO$(p3G=dnNeLc>h>8=^Pa#@djtO9 zP^=pm+r%?r;XiWx`#F3MJHW_yb9fJjiyVH9!}<6(IUMI{<-Nt>%^bdqy$5@p`|IGr zI`}1q;|%z(;th_!o6Gxd9sb+EK|wQL=LcLIyc?{(e4wLXUPdwY{l>G3Tj%XxB_jKs literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_ipq6.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_ipq6.c new file mode 100644 index 0000000..d5cea12 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_ipq6.c @@ -0,0 +1,72 @@ +#include "stralloc.h" +#include "case.h" +#include "byte.h" +#include "str.h" +#include "dns.h" + +static int doit(stralloc *work,const char *rule) +{ + char ch; + unsigned int colon; + unsigned int prefixlen; + + ch = *rule++; + if ((ch != '?') && (ch != '=') && (ch != '*') && (ch != '-')) return 1; + colon = str_chr(rule,':'); + if (!rule[colon]) return 1; + + if (work->len < colon) return 1; + prefixlen = work->len - colon; + if ((ch == '=') && prefixlen) return 1; + if (case_diffb(rule,colon,work->s + prefixlen)) return 1; + if (ch == '?') { + if (byte_chr(work->s,prefixlen,'.') < prefixlen) return 1; + if (byte_chr(work->s,prefixlen,':') < prefixlen) return 1; + if (byte_chr(work->s,prefixlen,'[') < prefixlen) return 1; + if (byte_chr(work->s,prefixlen,']') < prefixlen) return 1; + } + + work->len = prefixlen; + if (ch == '-') work->len = 0; + return stralloc_cats(work,rule + colon + 1); +} + +int dns_ip6_qualify_rules(stralloc *out,stralloc *fqdn,const stralloc *in,const stralloc *rules) +{ + unsigned int i; + unsigned int j; + unsigned int plus; + unsigned int fqdnlen; + + if (!stralloc_copy(fqdn,in)) return -1; + + for (j = i = 0;j < rules->len;++j) + if (!rules->s[j]) { + if (!doit(fqdn,rules->s + i)) return -1; + i = j + 1; + } + + fqdnlen = fqdn->len; + plus = byte_chr(fqdn->s,fqdnlen,'+'); + if (plus >= fqdnlen) + return dns_ip6(out,fqdn); + + i = plus + 1; + for (;;) { + j = byte_chr(fqdn->s + i,fqdnlen - i,'+'); + byte_copy(fqdn->s + plus,j,fqdn->s + i); + fqdn->len = plus + j; + if (dns_ip6(out,fqdn) == -1) return -1; + if (out->len) return 0; + i += j; + if (i >= fqdnlen) return 0; + ++i; + } +} + +int dns_ip6_qualify(stralloc *out,stralloc *fqdn,const stralloc *in) +{ + static stralloc rules; + if (dns_resolvconfrewrite(&rules) == -1) return -1; + return dns_ip6_qualify_rules(out,fqdn,in,&rules); +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_ipq6.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_ipq6.o new file mode 100644 index 0000000000000000000000000000000000000000..1fd5aba912295788aa4c3fb790e5e7ca5b5876ef GIT binary patch literal 2888 zcmbtV|7#m%7=N!x*KF2YoJAu}n!!0%x1P-$o!vT@OA~w1IQ-ITN7sdGdZER%>5|L3 zO2t6im6uzz_|p&t*&iX>ge_28Cnz{YQ9%#{w>Vc7RQ5wze4e}alIu0WAAI2MdEU?G z`Sw0}@6B7$__IwMM=asUGo-e%P(u9fnjJFC5NRdbiS(NEsx&AK#OPl#{dQ2MU%VpE z|K^wJoZyMmo43$)vBWP3kW?S^EPka4!OuR%3b(iM?IA)}WPOkn`znRrCZfI6GvX=s zaWmzpt_hx)-YW!4SN4H(g#Kfsl6ux8`YFG(0hp{q4SD_(f1Lg@JR+TxMx;|xq6`d4 ziG2G48iZbt7xyn<$C*NK`KYsBdyi?0B6yM~o9tJZ` zD`rJn>MP7ObA(?g04(VPf~V)pnHhpVER?$hnn-+fRiY8W^L$Zj;c8>b?_R!C0l`hxcC->*yraF(`lR2Nzq?nd&{DLR z;bh3+yZso>QPv@y9`Y=f@=Cbq-Uov^GZZO~a}jz6hGz^>roYEry+Wj8Jy=~b zFa~})9ONeMXpI|oa=UBX$Yu@)$uDuhM`>E{lviN_Y#uT_Dcq6){X?c-$LW}G7mr_z zZd`*DM5ce6t>3L^kIVE2nXbdMWqp?*>yYR&`o#4y!G{w!PEM7p!Yk-hl{RK^Z@f&n zvp&w%+TvM;<9rbCU5uM;0we78g}wf;HxTyjJ>Oh(zwLUbso&dmZd=6rbj17Oe2eLf zF#{|viTb&7u6cLd8#s?iK>GXo4hQx|)X@oLDsWJIN<7dR6oVb6Nr;%6oz#?3&|22i z@DVjpW(Oiy*2C9xHQdwnEC1Nr&IjK&8%Tz{F#s1@iojFZOzHZk3 zAMXIf;#a=Skt4*`KeO#ww9hh_eiXFr%Bix2?WTDFlY{Jl2TczyK>Vg6dq5-ZVrxqY zPJj{4TKfUVoKE*H1~~h5uDc-?>pQkdtoUi*>|*tAVL>pQJt616&-Carm9hV3u&sD& z{~^HGh?u9TK4ks3Z$h{F#u~(5a}I>%an^bO@OrLR{E7dlUvG98;%DE@byg6^fk(o* zf5ht5|A{$%0K8qC{o6Uajec(OXT^?LwyW;Mv5$J4Ainh%ZiQr=4Y!{w7r|e8tGKGW z-^{rP8AaGjNX;e;iongOq|=#XBAJ<SbyCTxiLr@PYSb2?XgL;vv1Zk3eq)_gbD8v+WM(RrRcEpjnu>h~@CAa~ z!Mkh&{^U@s8yIms;}-rS*eHnK508aE#11gxUK`$T!+9Hi*@oNm->~60Pb>dT8;)nx z!gpXn5NDrz8sOmu_^Af?dkn|f*uR#GHvgT#S^ZpX;QuZ*34*k}|IclC@XoOE1i(hY Py3EB`4;k+oUSQ? literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_name.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_name.c new file mode 100644 index 0000000..1f03186 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_name.c @@ -0,0 +1,63 @@ +#include "stralloc.h" +#include "uint16.h" +#include "byte.h" +#include "dns.h" +#include "ip6.h" + +static char *q = 0; + +int dns_name_packet(stralloc *out,const char *buf,unsigned int len) +{ + unsigned int pos; + char header[12]; + uint16 numanswers; + uint16 datalen; + + if (!stralloc_copys(out,"")) return -1; + + pos = dns_packet_copy(buf,len,0,header,12); if (!pos) return -1; + uint16_unpack_big(header + 6,&numanswers); + pos = dns_packet_skipname(buf,len,pos); if (!pos) return -1; + pos += 4; + + while (numanswers--) { + pos = dns_packet_skipname(buf,len,pos); if (!pos) return -1; + pos = dns_packet_copy(buf,len,pos,header,10); if (!pos) return -1; + uint16_unpack_big(header + 8,&datalen); + if (byte_equal(header,2,DNS_T_PTR)) + if (byte_equal(header + 2,2,DNS_C_IN)) { + if (!dns_packet_getname(buf,len,pos,&q)) return -1; + if (!dns_domain_todot_cat(out,q)) return -1; + return 0; + } + pos += datalen; + } + + return 0; +} + +int dns_name4(stralloc *out,const char ip[4]) +{ + char name[DNS_NAME4_DOMAIN]; + + dns_name4_domain(name,ip); + if (dns_resolve(name,DNS_T_PTR) == -1) return -1; + if (dns_name_packet(out,dns_resolve_tx.packet,dns_resolve_tx.packetlen) == -1) return -1; + dns_transmit_free(&dns_resolve_tx); + dns_domain_free(&q); + return 0; +} + +int dns_name6(stralloc *out,char ip[16]) +{ + char name[DNS_NAME6_DOMAIN]; + + if (ip6_isv4mapped(ip)) + return dns_name4(out,ip+12); + dns_name6_domain(name,ip); + if (dns_resolve(name,DNS_T_PTR) == -1) return -1; + if (dns_name_packet(out,dns_resolve_tx.packet,dns_resolve_tx.packetlen) == -1) return -1; + dns_transmit_free(&dns_resolve_tx); + dns_domain_free(&q); + return 0; +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_name.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_name.o new file mode 100644 index 0000000000000000000000000000000000000000..e2a4368395e519ca1091da04f89f342443b501bc GIT binary patch literal 3928 zcmbtWZ)hAv6ramolW1x-R%@k}B*LN*?UJi81hJCPwB44q7XP(E;Ig^fYmVMO?=~gX zpoO~x*6Z0KDn$hQMetLJh$M=(XJZlne6SV7FIK-9t=3eKD%8gJX6NN5)7wuzxSM&u z_j_;NyqTSum$q9wnnEE)5@L_Cx<)8ty^(rQ}RY~Xr7W4+KimRJe zWlG;`mOk6RU{zhcBYI(Iel0k97ftUE%ex|?40-3=ITHw-yQ(iXb8y)Em6HU+JL|ro z%?<0F$?2L_z6>Esi=oolh*h1^HzhqV?5gf)HKEfAohH+Z=$Cr5u3^TsIZN+E*G6;ZGXZnc~7mx!0^ttfgt;e%XurWk2qhQOIa~LF+n# z1DoDuO8$nKwD6f+`gB$96ccm*v7T|g2e}`^$dC|x5VvC&B=r0fEHv2>3a@QxJr1}I z*d}ga>>d1YcF#1IT1MMPk2Sp#u11co5jOOPZN;U4|9jd8OW~O&^c~?SW2dm)J`;Yj zJzt6(#eD&?bKACuyL*P6v6P+d?lT@Vwrq|X(fj-^V@C0C#Gvc{S#>s+bHs?CV&OJ|WF1mL7pr6wJ z`R@j2EK{=*WKifA#k9%XK^@WF1#LvZP#tgc!FR)ci`xjtY4ufhr)cjHxS$D?v2GO* z7Imx#0LPdro&0G$3asi;FkoI=h#*?>N1H69Q#%Mo>?>trcZ-D7x{@Eod@R7fNBBqss5;|wMX_WP8Q^(Fx~=v+>+}2Zvw2*_7VZ!u&YoLQVtKec9GAhZW2e)(cr2dFA1-pU zZ{Yx&NM+q$n0|lp;OCNINe$1WZD&(6jW>PNPi;hna!B=z~wVyrHm$CDCCy_5W$&~NP z4K&Qk{ewGP{)&1*N5Qh=nRyMKc_@bv1VJ3n62dD8f*_9H0O2PP1VJ2+V#4WZui~9z z->LEYC0vfbRp6Mve8=pT__!Zv+GOib$FrN_zbxU%C;U|jUnk+` zBplyj#Q##@>bx#Ue0=f}|4#|O18{m5{-fZymM9@CFbFnyA5fe&f#bLshonQ|Zvc?^ z>m|NipN$e9?^xnn5`QBFhxS>CFRxch!f%t}9FuT-dr|z?r1RZ literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_nd.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_nd.c new file mode 100644 index 0000000..aa54e5d --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_nd.c @@ -0,0 +1,24 @@ +#include "byte.h" +#include "fmt.h" +#include "dns.h" + +void dns_name4_domain(char name[DNS_NAME4_DOMAIN],const char ip[4]) +{ + unsigned int namelen; + unsigned int i; + + namelen = 0; + i = fmt_ulong(name + namelen + 1,(unsigned long) (unsigned char) ip[3]); + name[namelen++] = i; + namelen += i; + i = fmt_ulong(name + namelen + 1,(unsigned long) (unsigned char) ip[2]); + name[namelen++] = i; + namelen += i; + i = fmt_ulong(name + namelen + 1,(unsigned long) (unsigned char) ip[1]); + name[namelen++] = i; + namelen += i; + i = fmt_ulong(name + namelen + 1,(unsigned long) (unsigned char) ip[0]); + name[namelen++] = i; + namelen += i; + byte_copy(name + namelen,14,"\7in-addr\4arpa\0"); +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_nd.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_nd.o new file mode 100644 index 0000000000000000000000000000000000000000..453a3535214de89c4507dbb5b74be2580482884d GIT binary patch literal 1776 zcmbu9PiqrF6u{qRQyXh-qId`>xX`E(%xbiU>Y=2z+O-6sg6N?THrcHSW;bQCl}3af z0@5W$`ZYXwE#g50{Se;tSfPh{5DE(Qz18+Y*p9v{|^85iP>lsBIA5CrHSLS*9%3xcsWu5^mfPb%_`2m7tM99d3Mv( zeS6&p-7^lG~ey4Q+~&}-K#E1v1tpx0WCW4jpYwtQP(xc{)w_RZQ;+QEN`hS_wb z$D}GHW`}1Md>KI}^(>C0#K<&Q!7b)Hfita>Vs@6z7a0$G$rw$0f-b7^T366XHUBlg zh`F?{1P)R7`e_lOPO+lQpb?kP1EdkGe4jN%V+rHPj^mKePb_ZzEbHG@ z^ot^|FZx8C;*#*=KxAB3V>?Fsh}#MAxEm%u!b=X!>XFwNxz(@(1EHaz{_V=4Zw%Gb z!an&sruQnpVamENgoEX_E3T#2A_f18rYcs;F&i$dIDTcV*>ayiwd32BT5GifaEXec q(4EpAejh|a?}S9=k0X49dqenZ#;La0y*ENUy%oN$#yG``zq3CmWVV?A literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_nd6.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_nd6.c new file mode 100644 index 0000000..fb1da88 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_nd6.c @@ -0,0 +1,28 @@ +#include "byte.h" +#include "fmt.h" +#include "dns.h" + +/* RFC1886: + * 4321:0:1:2:3:4:567:89ab + * -> + * b.a.9.8.7.6.5.0.4.0.0.0.3.0.0.0.2.0.0.0.1.0.0.0.0.0.0.0.1.2.3.4.IP6.INT. + */ + +static inline char tohex(char c) { + return c>=10?c-10+'a':c+'0'; +} + +int dns_name6_domain(char name[DNS_NAME6_DOMAIN],char ip[16]) +{ + unsigned int j; + + for (j=0; j<16; j++) { + name[j*4]=1; + name[j*4+1]=tohex(ip[15-j] & 15); + name[j*4+2]=1; + name[j*4+3]=tohex((unsigned char)ip[15-j] >> 4); + } + byte_copy(name + 4*16,10,"\3ip6\4arpa\0"); + return 4*16+10; +} + diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_nd6.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_nd6.o new file mode 100644 index 0000000000000000000000000000000000000000..7775e131739febb65e48019a73739f0c450e60d2 GIT binary patch literal 1584 zcmbW1L2DC16oB7kqpmT!RRjwP%}EsO(5M6yDOnnAB1Nho9>XNr(xBOdWW~gbhrO6X zz+WTLLkTEVk6t|Y7{QC4DhTnt-I-(@_tXbF@4fH6H}hs@cVFGzx|d=MlrUI_g{LS$ zUxUR67vVHypd9|NE5l!v;i3D^L0%euarc2$M%j$B$K3s5iiHQxX#2^ivvw!rY<+WI zZ!_mDn@rOL%MtwQhTj;>u4nWf0x+}OCCyHfIMP2uNm@*Dj6YM$q> z#wGyo4O)Syp$@vS-c?rDdnS0`^#kAy5eVS5UJrP;9XnCf+pX?&Mau(TZ?{^WkEwn; z@c8C~$E&?S)St?Zj;?Z8N>_5+n4&2CXs=o<-t+=oL^Hi`=hpOCY_3Ui3N@``OMhAF z%aU8tS8A*bLz`<|!#K@()cQQuQeP>2bW!V5-?~t)F6-zd)qj>rYX7Q6?O*w~&@lHz zv1NH7>YS(#LaJWzGBUF#L~uw0%1W%}qnY~0@~)wk*gZJBg3Ee_~1NPvrYY@0Tv-`g%;aDK8B_XF5~1m3U&*M^Y!mlWv%}Y*I}u zwe{cE7zeEA1dL>Kt@)`eV)VY8)B053G5y2LZ#b%I_`Ry%DDXN&7XEY!)keD|nm*J9 jfmf}!I|EFtM#+GGZ1|`9rsQ;&6#FxaB_}yC{ht2 +#include "dns.h" +#include "error.h" + +unsigned int dns_packet_copy(const char *buf,unsigned int len,unsigned int pos,char *out,unsigned int outlen) +{ + while (outlen) { + if (pos >= len) { errno = error_proto; return 0; } + *out = buf[pos++]; + ++out; --outlen; + } + return pos; +} + +unsigned int dns_packet_skipname(const char *buf,unsigned int len,unsigned int pos) +{ + unsigned char ch; + + for (;;) { + if (pos >= len) break; + ch = buf[pos++]; + if (ch >= 192) return pos + 1; + if (ch >= 64) break; + if (!ch) return pos; + pos += ch; + } + + errno = error_proto; + return 0; +} + +unsigned int dns_packet_getname(const char *buf,unsigned int len,unsigned int pos,char **d) +{ + unsigned int loop = 0; + unsigned int state = 0; + unsigned int firstcompress = 0; + unsigned int where; + unsigned char ch; + char name[255]; + unsigned int namelen = 0; + + for (;;) { + if (pos >= len) goto PROTO; ch = buf[pos++]; + if (++loop >= 1000) goto PROTO; + + if (state) { + if (namelen + 1 > sizeof name) goto PROTO; name[namelen++] = ch; + --state; + } + else { + while (ch >= 192) { + where = ch; where -= 192; where <<= 8; + if (pos >= len) goto PROTO; ch = buf[pos++]; + if (!firstcompress) firstcompress = pos; + pos = where + ch; + if (pos >= len) goto PROTO; ch = buf[pos++]; + if (++loop >= 1000) goto PROTO; + } + if (ch >= 64) goto PROTO; + if (namelen + 1 > sizeof name) goto PROTO; name[namelen++] = ch; + if (!ch) break; + state = ch; + } + } + + if (!dns_domain_copy(d,name)) return 0; + + if (firstcompress) return firstcompress; + return pos; + + PROTO: + errno = error_proto; + return 0; +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_packet.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_packet.o new file mode 100644 index 0000000000000000000000000000000000000000..84e1b310dbdbeed8407b510e9272036a0e864da6 GIT binary patch literal 2280 zcmbtVOK1~O6n)b~oBGK_tsq)#1StwSm?}b~Xhx?tqKNndzj2yQv}iJ6GA8QAmT7AT z4c3+0E?v4Rib8Aa!i9^NMJ+D;Y_uAS=*BO^dnfPNmucMSh0MF}+~2u(-n?9G-?zI? z5C{{2Y$vljh7z*LGpk1&H9{7V1|lEcV?RA|DBAlG!@^%gs|Z%RkUuVjii$Ymtq;w} z4=`hYQNE9>oZnk+x5rII?)_PYy?AXHp7s;#gP;t0z2TSQz)f_s9trl8Y)uGq@Ar35 z-AR_q0nlHBcuaHgq1^LrR2;Yp{^6I|6S6omrsR7f<#Jhm^x9Wiofv8xmF;mLlRXU% z+p6vMRQ{0AKZ7Ji8QKL^GPO%4k-Ah< zB~oW5LnH^)&czajn$(CC*ON&t1uiMw)TEC6M>b|mHGaNApub*)_2Q2N~qaoaQp57yBouh=kA7R9=Goj zz}>Us9GrXTs6D(6oIX7#L|Xt z>W+Vxo>aS2vACYT%*SWWcc+~Mvjr+XKm_D{WpU0Do{3-Z2Zi#9!|@wpcq`?NXAjR7 r!*6jopXWA*^LajVIPd?J!+HN8)IvdwKll81jyRk58PHLfKb!Y&YdLRb literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_random.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_random.c new file mode 100644 index 0000000..2158ed4 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_random.c @@ -0,0 +1,63 @@ +#include +#include "dns.h" +#include "taia.h" +#include "uint32.h" + +static uint32 seed[32]; +static uint32 in[12]; +static uint32 out[8]; +static int outleft = 0; + +#define ROTATE(x,b) (((x) << (b)) | ((x) >> (32 - (b)))) +#define MUSH(i,b) x = t[i] += (((x ^ seed[i]) + sum) ^ ROTATE(x,b)); + +static void surf(void) +{ + uint32 t[12]; uint32 x; uint32 sum = 0; + int r; int i; int loop; + + for (i = 0;i < 12;++i) t[i] = in[i] ^ seed[12 + i]; + for (i = 0;i < 8;++i) out[i] = seed[24 + i]; + x = t[11]; + for (loop = 0;loop < 2;++loop) { + for (r = 0;r < 16;++r) { + sum += 0x9e3779b9; + MUSH(0,5) MUSH(1,7) MUSH(2,9) MUSH(3,13) + MUSH(4,5) MUSH(5,7) MUSH(6,9) MUSH(7,13) + MUSH(8,5) MUSH(9,7) MUSH(10,9) MUSH(11,13) + } + for (i = 0;i < 8;++i) out[i] ^= t[i + 4]; + } +} + +void dns_random_init(const char data[128]) +{ + int i; + struct taia t; + char tpack[16]; + + for (i = 0;i < 32;++i) + uint32_unpack(data + 4 * i,seed + i); + + taia_now(&t); + taia_pack(tpack,&t); + for (i = 0;i < 4;++i) + uint32_unpack(tpack + 4 * i,in + 4 + i); + + in[8] = getpid(); + in[9] = getppid(); + /* more space in 10 and 11, but this is probably enough */ +} + +unsigned int dns_random(unsigned int n) +{ + if (!n) return 0; + + if (!outleft) { + if (!++in[0]) if (!++in[1]) if (!++in[2]) ++in[3]; + surf(); + outleft = 8; + } + + return out[--outleft] % n; +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_random.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_random.o new file mode 100644 index 0000000000000000000000000000000000000000..7c7d1a47500168f52e6c5d9ba5a075e005107c85 GIT binary patch literal 3376 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 +#include "taia.h" +#include "byte.h" +#include "str.h" +#include "openreadclose.h" +#include "dns.h" +#include "env.h" + +static stralloc data = {0}; + +static int init(stralloc *rules) +{ + char host[256]; + const char *x; + int i; + int j; + int k; + + if (!stralloc_copys(rules,"")) return -1; + + x = env_get("DNSREWRITEFILE"); + if (!x) x = "/etc/dnsrewrite"; + + i = openreadclose(x,&data,64); + if (i == -1) return -1; + + if (i) { + if (!stralloc_append(&data,"\n")) return -1; + i = 0; + for (j = 0;j < data.len;++j) + if (data.s[j] == '\n') { + if (!stralloc_catb(rules,data.s + i,j - i)) return -1; + while (rules->len) { + if (rules->s[rules->len - 1] != ' ') + if (rules->s[rules->len - 1] != '\t') + if (rules->s[rules->len - 1] != '\r') + break; + --rules->len; + } + if (!stralloc_0(rules)) return -1; + i = j + 1; + } + return 0; + } + + x = env_get("LOCALDOMAIN"); + if (x) { + if (!stralloc_copys(&data,x)) return -1; + if (!stralloc_append(&data," ")) return -1; + if (!stralloc_copys(rules,"?:")) return -1; + i = 0; + for (j = 0;j < data.len;++j) + if (data.s[j] == ' ') { + if (!stralloc_cats(rules,"+.")) return -1; + if (!stralloc_catb(rules,data.s + i,j - i)) return -1; + i = j + 1; + } + if (!stralloc_0(rules)) return -1; + if (!stralloc_cats(rules,"*.:")) return -1; + if (!stralloc_0(rules)) return -1; + return 0; + } + + i = openreadclose("/etc/resolv.conf",&data,64); + if (i == -1) return -1; + + if (i) { + if (!stralloc_append(&data,"\n")) return -1; + i = 0; + for (j = 0;j < data.len;++j) + if (data.s[j] == '\n') { + if (byte_equal("search ",7,data.s + i) || byte_equal("search\t",7,data.s + i) || byte_equal("domain ",7,data.s + i) || byte_equal("domain\t",7,data.s + i)) { + if (!stralloc_copys(rules,"?:")) return -1; + i += 7; + while (i < j) { + k = byte_chr(data.s + i,j - i,' '); + k = byte_chr(data.s + i,k,'\t'); + if (!k) { ++i; continue; } + if (!stralloc_cats(rules,"+.")) return -1; + if (!stralloc_catb(rules,data.s + i,k)) return -1; + i += k; + } + if (!stralloc_0(rules)) return -1; + if (!stralloc_cats(rules,"*.:")) return -1; + if (!stralloc_0(rules)) return -1; + return 0; + } + i = j + 1; + } + } + + host[0] = 0; + if (gethostname(host,sizeof host) == -1) return -1; + host[(sizeof host) - 1] = 0; + i = str_chr(host,'.'); + if (host[i]) { + if (!stralloc_copys(rules,"?:")) return -1; + if (!stralloc_cats(rules,host + i)) return -1; + if (!stralloc_0(rules)) return -1; + } + if (!stralloc_cats(rules,"*.:")) return -1; + if (!stralloc_0(rules)) return -1; + + return 0; +} + +static int ok = 0; +static unsigned int uses; +static struct taia deadline; +static stralloc rules = {0}; /* defined if ok */ + +int dns_resolvconfrewrite(stralloc *out) +{ + struct taia now; + + taia_now(&now); + if (taia_less(&deadline,&now)) ok = 0; + if (!uses) ok = 0; + + if (!ok) { + if (init(&rules) == -1) return -1; + taia_uint(&deadline,600); + taia_add(&deadline,&now,&deadline); + uses = 10000; + ok = 1; + } + + --uses; + if (!stralloc_copy(out,&rules)) return -1; + return 0; +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_rcrw.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_rcrw.o new file mode 100644 index 0000000000000000000000000000000000000000..7456226405603d45ad1a2c6f6395bcfbc299525f GIT binary patch literal 5840 zcmbtYVQd`56`r-7#0kXbqzO$asZVGL4snjVgjV3X^p2d9H5{>IgPJO&?s{*HPuO?X z-I|c7N|T;1>gsTss#Nd;Bz}O}ABYywqF|zMg4ihtsx%c%0I4l1Bu<==q*77~60Yyf z&fGnZZ`B`tl5b|d`QG>5yqTTdg&;EnwVlH&?<;Vlw2+<%Cb1jaT1SX>DztZ*VQ zb{6vMj9iT!hL+9T5@=yv`6(@a&uvJEjmLE@uzwQfV(w9+xB$Vpd*!~p9pT{U-*`kS zee$bvxy!m@)PI{3*IsbX(dk1l-RXWd^Bk{7b=lRVVeNsjUjhvmbpb?bEGi4rUM5KT z6ObYoMEa`(Em3CVCzbqP08Takn0s+=N9&T&lMh-~j^G*L;qM<`5ss89McM;PHoPiD zN>x@u`*(%1{eM$%^Alb%=BT(;m6bq&nw;Itw+bcQGgA$^cTn;rEim@8>#(;W$P;JA z^fL6sF|wxjcC<0)-g*1b4KBv`U2U}Z-$fbprQn)c;IdlawQJ>aq;&QRXaX&JQK!b% zoP^opQk*QjL`-3?%De0b5!;sJhs z_%>f3I2ahe4Qgi;zlU)X)@O0|tF@m`1Yr;B`1m{<2(-YZqqrd3hMt<+blZQK8`B3g>;`6nh&BC!98;cmvOOW~s+7 zoN#*^ot61>ntMF(T7%XRbk27ycBVU)I-kx))i26rI9|?%j?SGfnuM75PJ6xazztvc8yKkIowRi=2R4bHN1cOxegEZFP@t-|;rig2lJ?_H_QB zr|Y54&0UF3cBk!FcP7)hti3ava%{Mv6WyC)iFo&ev97Hw$iCms)`i#|p>~g%wR4%F z$3s>oJ-~9dnY9LkqFv0AnPD@P4vH4H8f=BvFl~1a)1GM7>Tg`sco3GM1AdE`d%XcV zKOAp(a>4$E`9%*kmFj*`cc9*zL=Ifv+<0|jP0jo3;!UgKP0>7Zwrtwe9&C-<{V6jY zyeqUZv|)WD6j|$a84Klh4LfE(v`*G*2W2m751Apye!^j)r0JL})St_-P&R`Dq=O6$ zkz^0{4P?z>o58||hwU_Yq%)2k+OqZG^*P719uo=vA59Q^ad#Ig8c{LcT{%@A(5&#j z31cjyYT+gi8EN#|8=%2BV#ro`Fk2&VQFehcc36okC)8MNFoBw?e@Xanla8WQ^N#?I zd2LX5(qAnxa?xblDf;j@&9Sg3=#S^1)%8m_3LSM#IQRTb_{&(>YZ%rKCDr=zyJfC!A#Cc z<68~F^jU*hZx%Z|NB*YA7rp#6aLkn1m(J{DyaV~=yxwREUWgnslQcZ!%=mo?rGW1W zHs>kBPii#0R`5Q7Pd;wo!cFq!6OQKu4f%L}CErC5O!DQ~e%gaMj$0oTV>~BlsDsb4 z)OiI#FsXB^H)OAgR*id1;K--??-4#-*N23Uw~bu?-w952{zY__Lto~3iSSV;EXK2< z#XM=;g`$9nqrNV9xBK873Xb1jXb%Wn)@P#!vtGjg8elR{o8TB%>SPIy--eQZfaudY z{EFbX-gfvydxq%HeSBHr2RWOuR|!t_4-p+&=P80CUl%%OeDG@uF4wyp3lApi_JB8J zs|Ah?{&#?^LmR;{uGG0((diXBQNpJ>-2|sP+ZCPdLdPO}s*@!+)!C!ySVCt%;ZvR8 z5FFo?a=nuT|2o0{s_4se{xRXxbAFNF^c-GObVQo0L42&>G~M@Q0+;*s9pUf|!l(Lc z6u#6C5kA%LQusmPu$ACgXNmXv=$HgYzAkk3D7ZX7zgBR`|E<8~dS#t|Px!RX9}*nn zO8rX&$8R6GzyBdPYLfpc!Ld6l-h-bjIR5(zZC1f0U&G504D&}y zGY-I3DtMHmjNL47tUuOF=F{TCzk~2s6MmTB7`GMv(ApJT=6Sz@%ecJ)SMz^F;ji=L ZSwF$Q1(?(cih0z*wMjEXN8<8(@V^$`5$6B^ literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_resolve.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_resolve.c new file mode 100644 index 0000000..82b5bbb --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_resolve.c @@ -0,0 +1,30 @@ +#include "iopause.h" +#include "taia.h" +#include "byte.h" +#include "dns.h" +#include "ip6.h" + +struct dns_transmit dns_resolve_tx = {0}; + +int dns_resolve(const char *q,const char qtype[2]) +{ + struct taia stamp; + struct taia deadline; + char servers[256]; + iopause_fd x[1]; + int r; + + if (dns_resolvconfip(servers) == -1) return -1; + if (dns_transmit_start(&dns_resolve_tx,servers,1,q,qtype,V6any) == -1) return -1; + + for (;;) { + taia_now(&stamp); + taia_uint(&deadline,120); + taia_add(&deadline,&deadline,&stamp); + dns_transmit_io(&dns_resolve_tx,x,&deadline); + iopause(x,1,&deadline,&stamp); + r = dns_transmit_get(&dns_resolve_tx,x,&stamp); + if (r == -1) return -1; + if (r == 1) return 0; + } +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_resolve.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_resolve.o new file mode 100644 index 0000000000000000000000000000000000000000..d1437631dd5c99647012e2ed55cda4107e6fdfc3 GIT binary patch literal 2192 zcmbuAPe>F|7{K4SmRjaNIs^sIVdxL!&{{}%h!rizSSqB#Alb&|4I zV$#fs@k5yDcbZ;_8%@LSszA}$-EpLsRI<<VfDA4%&IgW!OuL*rc7RdLB``-nF=X0I_7Pi$QgYDoKMUEW+r_3<^ zX&4NNZ3QMjJ2C$n8iL4W(UzYbhL_nxdB+m=0>iz_`)>di)_;*5$Y=R5 z$uGRpJ0uqR#Bd#9D?uLihLPhN-6^quyR7!b2)h&lZU((gSP#E%c(3HUhG}@-!+0m~ zR$-m|-1kJpUyk6z5qva)W1q0~+>hXoA~?x7UMg>S?)Ys>Pm7kIr(Gv&Pmrr!rZXvE zD@BWeN%N-Tk39EegvGL}fFc zbv(0w@b3>~ka4`>= 2; + while (n > 1) { + i = dns_random(n); + --n; + byte_copy(tmp,4,s + (i << 2)); + byte_copy(s + (i << 2),4,s + (n << 2)); + byte_copy(s + (n << 2),4,tmp); + } +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_sortip.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_sortip.o new file mode 100644 index 0000000000000000000000000000000000000000..3e8ba86698c27de0c9107b520dc8f2992e78adda GIT binary patch literal 1600 zcmbu8&1(}u6u{qR6Ps#Tqj-oYGzXCgb}%Xm9%MKDN+5brBZzI|CRu6GWXtZNjTeQ0 zuwtY~@1Fe^Bt;J%Jb3n^^imHN@!-u;-`kzh>2!P12g`f!_de#$%+BNK+DuB*K!^sH z;jbqsz^Vkz2%9hlqhQ^%>eX<|x={~*u5G5SSNh*_{VnZ5`{4K!N(;aDH?^;1t$j(o zNu#cW8{x1zn9D$ESP4Hxu|fJZrSSOYaCl|Vrg$w}kK&ZM9z|>6MnrIphp#IAce&g1 z)|@qOExe@$07qg4+M{crt>iR)Y$QvwpGJP1$DWZc8@aNPALuVq(?-EEicd4o(=*1I zDZ}jVqxkIP=$@RC$ zkwk4vzIt|)zRC|J%L@)5qrI#9A4Qh5{!9M!xig@{$WDNsf!|?i9`W9eB3IuU6`$CHL%ZuYeAf$>mRU=3BGa?G yZMOr>Uf?uZ?s5-%(7Pj{yQ4e!wH-^DAPRB%X9aH(L{WJV<6XSKIrX3#A-@5GPN0YY literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_sortip6.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_sortip6.c new file mode 100644 index 0000000..7e752e9 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_sortip6.c @@ -0,0 +1,20 @@ +#include "byte.h" +#include "dns.h" + +/* XXX: sort servers by configurable notion of closeness? */ +/* XXX: pay attention to competence of each server? */ + +void dns_sortip6(char *s,unsigned int n) +{ + unsigned int i; + char tmp[16]; + + n >>= 4; + while (n > 1) { + i = dns_random(n); + --n; + byte_copy(tmp,16,s + (i << 4)); + byte_copy(s + (i << 4),16,s + (n << 4)); + byte_copy(s + (n << 4),16,tmp); + } +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_sortip6.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_sortip6.o new file mode 100644 index 0000000000000000000000000000000000000000..b653abc6c657d8af8b7ccca55e11300b675d6442 GIT binary patch literal 1592 zcmbu8PiqrF6u@V*8=Gp`uHvDf&^<{7J2qB&@F3arUjosC8bNGLH_4V3-K6X;+IUe| zkSrMKm+)&yiXQw7UX)(igGD@ev()!yXLLI5Ngpilz2AFp-n^Ne7mKx}oTd>W8o5dS zc!CnrmtcwE5*Z_-#JTU(tI3gbub%waJv8oC;;&YGq&;npPrk&oizDH=Q>-$~@QaatpqszDJ(_!Sc9%JYK5*w=Vir5U&N+oWy*(HuQAk2Hm`{y0?wwK9b6CZ4)5USaVlkmAjt8b6?_eB6qN@l{)^k3;~H2a +#include +#include +#include +#include "socket.h" +#include +#include "byte.h" +#include "uint16.h" +#include "dns.h" +#include "ip6.h" + +static int serverwantstcp(const char *buf,unsigned int len) +{ + char out[12]; + + if (!dns_packet_copy(buf,len,0,out,12)) return 1; + if (out[2] & 2) return 1; + return 0; +} + +static int serverfailed(const char *buf,unsigned int len) +{ + char out[12]; + unsigned int rcode; + + if (!dns_packet_copy(buf,len,0,out,12)) return 1; + rcode = out[3]; + rcode &= 15; + if (rcode && (rcode != 3)) { errno = EAGAIN; return 1; } + return 0; +} + +static int irrelevant(const struct dns_transmit *d,const char *buf,unsigned int len) +{ + char out[12]; + char *dn; + unsigned int pos; + + pos = dns_packet_copy(buf,len,0,out,12); if (!pos) return 1; + if (byte_diff(out,2,d->query + 2)) return 1; + if (out[4] != 0) return 1; + if (out[5] != 1) return 1; + + dn = 0; + pos = dns_packet_getname(buf,len,pos,&dn); if (!pos) return 1; + if (!dns_domain_equal(dn,d->query + 14)) { free(dn); return 1; } + free(dn); + + pos = dns_packet_copy(buf,len,pos,out,4); if (!pos) return 1; + if (byte_diff(out,2,d->qtype)) return 1; + if (byte_diff(out + 2,2,DNS_C_IN)) return 1; + + return 0; +} + +static void packetfree(struct dns_transmit *d) +{ + if (!d->packet) return; + free(d->packet); + d->packet = 0; +} + +static void queryfree(struct dns_transmit *d) +{ + if (!d->query) return; + free(d->query); + d->query = 0; +} + +static void socketfree(struct dns_transmit *d) +{ + if (!d->s1) return; + close(d->s1 - 1); + d->s1 = 0; +} + +void dns_transmit_free(struct dns_transmit *d) +{ + queryfree(d); + socketfree(d); + packetfree(d); +} + +static int randombind(struct dns_transmit *d) +{ + int j; + + for (j = 0;j < 10;++j) + if (socket_bind6(d->s1 - 1,d->localip,1025 + dns_random(64510),d->scope_id) == 0) + return 0; + if (socket_bind6(d->s1 - 1,d->localip,0,d->scope_id) == 0) + return 0; + return -1; +} + +static const int timeouts[4] = { 1, 3, 11, 45 }; + +static int thisudp(struct dns_transmit *d) +{ + const char *ip; + + socketfree(d); + + while (d->udploop < 4) { + for (;d->curserver < 16;++d->curserver) { + ip = d->servers + 16 * d->curserver; + if (byte_diff(ip,16,V6any)) { + d->query[2] = dns_random(256); + d->query[3] = dns_random(256); + + d->s1 = 1 + socket_udp6(); + if (!d->s1) { dns_transmit_free(d); return -1; } + if (randombind(d) == -1) { dns_transmit_free(d); return -1; } + + if (socket_connect6(d->s1 - 1,ip,53,d->scope_id) == 0) + if (send(d->s1 - 1,d->query + 2,d->querylen - 2,0) == d->querylen - 2) { + struct taia now; + taia_now(&now); + taia_uint(&d->deadline,timeouts[d->udploop]); + taia_add(&d->deadline,&d->deadline,&now); + d->tcpstate = 0; + return 0; + } + + socketfree(d); + } + } + + ++d->udploop; + d->curserver = 0; + } + + dns_transmit_free(d); return -1; +} + +static int firstudp(struct dns_transmit *d) +{ + d->curserver = 0; + return thisudp(d); +} + +static int nextudp(struct dns_transmit *d) +{ + ++d->curserver; + return thisudp(d); +} + +static int thistcp(struct dns_transmit *d) +{ + struct taia now; + const char *ip; + + socketfree(d); + packetfree(d); + + for (;d->curserver < 16;++d->curserver) { + ip = d->servers + 16 * d->curserver; + if (byte_diff(ip,16,V6any)) { + d->query[2] = dns_random(256); + d->query[3] = dns_random(256); + + d->s1 = 1 + socket_tcp6(); + if (!d->s1) { dns_transmit_free(d); return -1; } + if (randombind(d) == -1) { dns_transmit_free(d); return -1; } + + taia_now(&now); + taia_uint(&d->deadline,10); + taia_add(&d->deadline,&d->deadline,&now); + if (socket_connect6(d->s1 - 1,ip,53,d->scope_id) == 0) { + d->tcpstate = 2; + return 0; + } + if ((errno == EINPROGRESS) || (errno == EWOULDBLOCK)) { + d->tcpstate = 1; + return 0; + } + + socketfree(d); + } + } + + dns_transmit_free(d); return -1; +} + +static int firsttcp(struct dns_transmit *d) +{ + d->curserver = 0; + return thistcp(d); +} + +static int nexttcp(struct dns_transmit *d) +{ + ++d->curserver; + return thistcp(d); +} + +int dns_transmit_start(struct dns_transmit *d,const char servers[256],int flagrecursive,const char *q,const char qtype[2],const char localip[16]) +{ + unsigned int len; + + dns_transmit_free(d); + errno = EIO; + + len = dns_domain_length(q); + d->querylen = len + 18; + d->query = malloc(d->querylen); + if (!d->query) return -1; + + uint16_pack_big(d->query,len + 16); + byte_copy(d->query + 2,12,flagrecursive ? "\0\0\1\0\0\1\0\0\0\0\0\0" : "\0\0\0\0\0\1\0\0\0\0\0\0gcc-bug-workaround"); + byte_copy(d->query + 14,len,q); + byte_copy(d->query + 14 + len,2,qtype); + byte_copy(d->query + 16 + len,2,DNS_C_IN); + + byte_copy(d->qtype,2,qtype); + d->servers = servers; + byte_copy(d->localip,16,localip); + + d->udploop = flagrecursive ? 1 : 0; + + if (len + 16 > 512) return firsttcp(d); + return firstudp(d); +} + +void dns_transmit_io(struct dns_transmit *d,iopause_fd *x,struct taia *deadline) +{ + x->fd = d->s1 - 1; + + switch(d->tcpstate) { + case 0: case 3: case 4: case 5: + x->events = IOPAUSE_READ; + break; + case 1: case 2: + x->events = IOPAUSE_WRITE; + break; + } + + if (taia_less(&d->deadline,deadline)) + *deadline = d->deadline; +} + +int dns_transmit_get(struct dns_transmit *d,const iopause_fd *x,const struct taia *when) +{ + char udpbuf[513]; + unsigned char ch; + int r; + int fd; + + errno = EIO; + fd = d->s1 - 1; + + if (!x->revents) { + if (taia_less(when,&d->deadline)) return 0; + errno = ETIMEDOUT; + if (d->tcpstate == 0) return nextudp(d); + return nexttcp(d); + } + + if (d->tcpstate == 0) { +/* +have attempted to send UDP query to each server udploop times +have sent query to curserver on UDP socket s +*/ + r = recv(fd,udpbuf,sizeof udpbuf,0); + if (r <= 0) { + if (errno == ECONNREFUSED) if (d->udploop == 2) return 0; + return nextudp(d); + } + if (r + 1 > sizeof udpbuf) return 0; + + if (irrelevant(d,udpbuf,r)) return 0; + if (serverwantstcp(udpbuf,r)) return firsttcp(d); + if (serverfailed(udpbuf,r)) { + if (d->udploop == 2) return 0; + return nextudp(d); + } + socketfree(d); + + d->packetlen = r; + d->packet = malloc(d->packetlen); + if (!d->packet) { dns_transmit_free(d); return -1; } + byte_copy(d->packet,d->packetlen,udpbuf); + queryfree(d); + return 1; + } + + if (d->tcpstate == 1) { +/* +have sent connection attempt to curserver on TCP socket s +pos not defined +*/ + if (!socket_connected(fd)) return nexttcp(d); + d->pos = 0; + d->tcpstate = 2; + return 0; + } + + if (d->tcpstate == 2) { +/* +have connection to curserver on TCP socket s +have sent pos bytes of query +*/ + r = write(fd,d->query + d->pos,d->querylen - d->pos); + if (r <= 0) return nexttcp(d); + d->pos += r; + if (d->pos == d->querylen) { + struct taia now; + taia_now(&now); + taia_uint(&d->deadline,10); + taia_add(&d->deadline,&d->deadline,&now); + d->tcpstate = 3; + } + return 0; + } + + if (d->tcpstate == 3) { +/* +have sent entire query to curserver on TCP socket s +pos not defined +*/ + r = read(fd,&ch,1); + if (r <= 0) return nexttcp(d); + d->packetlen = ch; + d->tcpstate = 4; + return 0; + } + + if (d->tcpstate == 4) { +/* +have sent entire query to curserver on TCP socket s +pos not defined +have received one byte of packet length into packetlen +*/ + r = read(fd,&ch,1); + if (r <= 0) return nexttcp(d); + d->packetlen <<= 8; + d->packetlen += ch; + d->tcpstate = 5; + d->pos = 0; + d->packet = malloc(d->packetlen); + if (!d->packet) { dns_transmit_free(d); return -1; } + return 0; + } + + if (d->tcpstate == 5) { +/* +have sent entire query to curserver on TCP socket s +have received entire packet length into packetlen +packet is allocated +have received pos bytes of packet +*/ + r = read(fd,d->packet + d->pos,d->packetlen - d->pos); + if (r <= 0) return nexttcp(d); + d->pos += r; + if (d->pos < d->packetlen) return 0; + + socketfree(d); + if (irrelevant(d,d->packet,d->packetlen)) return nexttcp(d); + if (serverwantstcp(d->packet,d->packetlen)) return nexttcp(d); + if (serverfailed(d->packet,d->packetlen)) return nexttcp(d); + + queryfree(d); + return 1; + } + + return 0; +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_transmit.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_transmit.o new file mode 100644 index 0000000000000000000000000000000000000000..7294a530a6c31af3d7b658e6e7840a582bc9236a GIT binary patch literal 8240 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 IaPfZpFEk$e8UO$Q literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_txt.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_txt.c new file mode 100644 index 0000000..44deafe --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_txt.c @@ -0,0 +1,59 @@ +#include "stralloc.h" +#include "uint16.h" +#include "byte.h" +#include "dns.h" + +int dns_txt_packet(stralloc *out,const char *buf,unsigned int len) +{ + unsigned int pos; + char header[12]; + uint16 numanswers; + uint16 datalen; + char ch; + unsigned int txtlen; + int i; + + if (!stralloc_copys(out,"")) return -1; + + pos = dns_packet_copy(buf,len,0,header,12); if (!pos) return -1; + uint16_unpack_big(header + 6,&numanswers); + pos = dns_packet_skipname(buf,len,pos); if (!pos) return -1; + pos += 4; + + while (numanswers--) { + pos = dns_packet_skipname(buf,len,pos); if (!pos) return -1; + pos = dns_packet_copy(buf,len,pos,header,10); if (!pos) return -1; + uint16_unpack_big(header + 8,&datalen); + if (byte_equal(header,2,DNS_T_TXT)) + if (byte_equal(header + 2,2,DNS_C_IN)) { + if (pos + datalen > len) return -1; + txtlen = 0; + for (i = 0;i < datalen;++i) { + ch = buf[pos + i]; + if (!txtlen) + txtlen = (unsigned char) ch; + else { + --txtlen; + if (ch < 32) ch = '?'; + if (ch > 126) ch = '?'; + if (!stralloc_append(out,&ch)) return -1; + } + } + } + pos += datalen; + } + + return 0; +} + +static char *q = 0; + +int dns_txt(stralloc *out,const stralloc *fqdn) +{ + if (!dns_domain_fromdot(&q,fqdn->s,fqdn->len)) return -1; + if (dns_resolve(q,DNS_T_TXT) == -1) return -1; + if (dns_txt_packet(out,dns_resolve_tx.packet,dns_resolve_tx.packetlen) == -1) return -1; + dns_transmit_free(&dns_resolve_tx); + dns_domain_free(&q); + return 0; +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_txt.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/dns_txt.o new file mode 100644 index 0000000000000000000000000000000000000000..d874765356be634da6c3af1556c13eb1e4d2451f GIT binary patch literal 3272 zcmbtWO>7%Q6rPRU#PlZ{Acabehz~0iRO;4k2{fd{R-AT&7AWPXks8U_#A|HDf7qMK zfv82;MywW>o~oWXA#PlnfKag#pzRH{7bGM=TnK~+azI3)BD^;{6OShLi6?pAd*A!s zn>VvF21~{uX zkzzQu_NU=2Xq$TF_wu-N-?_Jnc&#xvu(SoDyOWx(yBY1Q;U=^R1FR{-wY8MtE@%b4 z@>O}osM}gFd^ftZ7ZRNxbmtGl*OM$O7nh^;-mZFd zi>8V7)#?eDMs#U6o$ZFREC!>_Ew$Q9r@5d7u+JgdR=DvwuENa@n)Ekob*`qn!-w#j)`Ml&9*e0rRw><$X?=PHaHY~v zPA;og`hg2z4@|l*rfiPY*3}!aUF7|kHe%ly?!R6+?(NBOYhim&efV3!xfe3%ZE6h5QfJr(4i866!84#ceKw3!Q@2pta{I~)#$ zpYTjVLZ$hvZBB!>i=Iw#t7v7+kZqN15=xl1NkY@55(yRa=pY@+a2GU^tyDZ&G_w{7 z&E&ILD+igmylsWfy!hJTl5Nh+()Rw>BM8~BETmJa5@CKB=PU@_OM-t8Y`@@hGlE+m zWP;`6F~xBL2!b5&6nPvp;=(mTBTLe_jJ{*6Cn10}+vW4|c)sk1A%No_;{>Mp_!tv~ z`&>sLh_>ABXAF?nmFMxAFSN;Tu>1*5WLoZD2fWq#U&jRpIqE5bZWsJ`K41UyfXO{! z$^o{Z{pbiHbEhCCV@Q8mejx~g$lM13YenVx1)9}-$oc5YYme*!oGeI$1^0oy2Y&MW z9{{Y?_$ds4-1F4-QyzaiAQ{N>lZ`D2rmkP+6@I_q4ib0iQ7=r-EZ#}? z;nM@w_^80g{lfb^C-M26 zGTDazy@2B#$m<+r`x3_$PkoT#s2&#h#|0euyv{R19kKsY0w2F|IA0fV{OID}PcKP0 z`&%LB1sv~HUdLoO_D?_FK%*oD{v+UX{;a?k=UWi?j|%)C*eF<^QK+xeXA|e=`#+hb B6g>a{ literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/env.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/env.c new file mode 100644 index 0000000..430203e --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/env.c @@ -0,0 +1,15 @@ +#include "str.h" +#include "env.h" + +extern /*@null@*/char *env_get(char *s) +{ + int i; + unsigned int len; + + if (!s) return 0; + len = str_len(s); + for (i = 0;environ[i];++i) + if (str_start(environ[i],s) && (environ[i][len] == '=')) + return environ[i] + len + 1; + return 0; +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/env.h b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/env.h new file mode 100644 index 0000000..777873a --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/env.h @@ -0,0 +1,8 @@ +#ifndef ENV_H +#define ENV_H + +extern char **environ; + +extern /*@null@*/char *env_get(char *); + +#endif diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/env.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/env.o new file mode 100644 index 0000000000000000000000000000000000000000..db1eb1ec0229beea429028ad62580a2cbfdd03f7 GIT binary patch literal 1664 zcmbu9&1(};5Wr`X)TUZ&l!5_;>|v3#*u|(wkt(T4&1(pPf(M}xHpyy=$p(_GL@x@V zg=G!sf6#*`{{=6>dh+7Qi+J$hp<>Cpm<@0iW?=@H*D&^(w_$u_-p`U(GlnH3-&yY<&9+BddS<}<4I|F{hLI@w zH6vLAksB9$=q(d9Rp1MF#VivC4h3mihEDj{d6m?n^4j`<<|oWc^&6vYxMd zADFktystr%?ScEAXBGW<{p#bD#mif7i~anf_PIM6ji^7s{8)kZ@Fr;8gchBhjz7h< zokC6z$qRZFds92H8%NLfBTu5_7jn5vdOB}cHZ4cLV4gS6EoIEi!q@~bI}e(!RYC2x z$GR@8w%xEy*Y3Jt)-2Zov(o8+8Bn`kzSFjvHkj2`vuQh+;-nkfn>|3 zI@TEsQqO;_zlgOoegq#`hTK_}A=+a80%y=r=R~nO-%znmT0d=xs24nojK)_b&0$Ij zsJZJHR~eNQ!eB`5F=XoA$@RC%kwk4vzPfjmzRNd7=LJWQ(c0DZ&mapMf57k00>))g z$CqQWO?ff+#=mMgLgR&ZiH6RE^21J;IG^NXd*ou3lYuBqPXhFa9GB)JzPCB#>bFM4 zC;r0eo`mIt?c6u3^e*4EUBG`%xnVoxZ?;=b;Ny>^?NV=&)v*fBl+NY{{uxP%5~sT? bxcCFn9gz8sluu_b@}Egu&eu67Cf}!DVOO$t literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/error.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/error.c new file mode 100644 index 0000000..ea16ff9 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/error.c @@ -0,0 +1,116 @@ +#include +#include "error.h" + +/* warning: as coverage improves here, should update error_{str,temp} */ + +int error_intr = +#ifdef EINTR +EINTR; +#else +-1; +#endif + +int error_nomem = +#ifdef ENOMEM +ENOMEM; +#else +-2; +#endif + +int error_noent = +#ifdef ENOENT +ENOENT; +#else +-3; +#endif + +int error_txtbsy = +#ifdef ETXTBSY +ETXTBSY; +#else +-4; +#endif + +int error_io = +#ifdef EIO +EIO; +#else +-5; +#endif + +int error_exist = +#ifdef EEXIST +EEXIST; +#else +-6; +#endif + +int error_timeout = +#ifdef ETIMEDOUT +ETIMEDOUT; +#else +-7; +#endif + +int error_inprogress = +#ifdef EINPROGRESS +EINPROGRESS; +#else +-8; +#endif + +int error_wouldblock = +#ifdef EWOULDBLOCK +EWOULDBLOCK; +#else +-9; +#endif + +int error_again = +#ifdef EAGAIN +EAGAIN; +#else +-10; +#endif + +int error_pipe = +#ifdef EPIPE +EPIPE; +#else +-11; +#endif + +int error_perm = +#ifdef EPERM +EPERM; +#else +-12; +#endif + +int error_acces = +#ifdef EACCES +EACCES; +#else +-13; +#endif + +int error_nodevice = +#ifdef ENXIO +ENXIO; +#else +-14; +#endif + +int error_proto = +#ifdef EPROTO +EPROTO; +#else +-15; +#endif + +int error_isdir = +#ifdef EISDIR +EISDIR; +#else +-16; +#endif diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/error.h b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/error.h new file mode 100644 index 0000000..f660d93 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/error.h @@ -0,0 +1,26 @@ +#ifndef ERROR_H +#define ERROR_H + +#include + +extern int error_intr; +extern int error_nomem; +extern int error_noent; +extern int error_txtbsy; +extern int error_io; +extern int error_exist; +extern int error_timeout; +extern int error_inprogress; +extern int error_wouldblock; +extern int error_again; +extern int error_pipe; +extern int error_perm; +extern int error_acces; +extern int error_nodevice; +extern int error_proto; +extern int error_isdir; + +extern char *error_str(int); +extern int error_temp(int); + +#endif diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/error.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/error.o new file mode 100644 index 0000000000000000000000000000000000000000..e4950466815f8e63d8be25f61328c2db5e489d4b GIT binary patch literal 1571 zcmbu9!D%GJvKZrDBzW;AgqhhUHfE-mo{nxVnzMJ$ z`T)Lx58wm%5?*}*t$(I#W@zVTL8bosrmCx_w=*AiUOZnJjYw=nPpHd;68-8VO=~@+ z)3ipbtk1HquwQ0B!M@I3vRCY9f+rlY?m6}~_8I#{cA9N(KT0OgbY{{r*;4n^-HlDP zd8?5`syZrsnsM~5iEl)Cz4WB!sZU8|RYfYdMWIV(rS)3Pc3*8&KF!}^%75DxUIF{Z z-upJ~Cq0dG>DzTq&_C`&*3*zn3~7C?q7iShpJI>ukC_cwJpVQqVSa4K0bGk7#I^VN zdCbuACF+wjuEm{*_l{cW-;u@;<9_70W3f%bqLc6tXLOPs5q7Bwd{>9(zr=-Q``Lu{ zZ#=(!5DC<+((gYJuG8`0iD4f@ZvsAaLf~PO(U9>!w}k5VT<@(f_uvBef=ezj30%%g zIPMGT@xKid{*X2J`I>h8Y2cUxllooOsF&YC`0K#0qL@v1!5Z}mAe- +#include "error.h" + +#define X(e,s) if (i == e) return s; + +char *error_str(int i) +{ + X(0,"no error") + X(error_intr,"interrupted system call") + X(error_nomem,"out of memory") + X(error_noent,"file does not exist") + X(error_txtbsy,"text busy") + X(error_io,"input/output error") + X(error_exist,"file already exists") + X(error_timeout,"timed out") + X(error_inprogress,"operation in progress") + X(error_again,"temporary failure") + X(error_wouldblock,"input/output would block") + X(error_pipe,"broken pipe") + X(error_perm,"permission denied") + X(error_acces,"access denied") + X(error_nodevice,"device not configured") + X(error_proto,"protocol error") + X(error_isdir,"is a directory") +#ifdef ESRCH + X(ESRCH,"no such process") +#endif +#ifdef E2BIG + X(E2BIG,"argument list too long") +#endif +#ifdef ENOEXEC + X(ENOEXEC,"exec format error") +#endif +#ifdef EBADF + X(EBADF,"file descriptor not open") +#endif +#ifdef ECHILD + X(ECHILD,"no child processes") +#endif +#ifdef EDEADLK + X(EDEADLK,"operation would cause deadlock") +#endif +#ifdef EFAULT + X(EFAULT,"bad address") +#endif +#ifdef ENOTBLK + X(ENOTBLK,"not a block device") +#endif +#ifdef EBUSY + X(EBUSY,"device busy") +#endif +#ifdef EXDEV + X(EXDEV,"cross-device link") +#endif +#ifdef ENODEV + X(ENODEV,"device does not support operation") +#endif +#ifdef ENOTDIR + X(ENOTDIR,"not a directory") +#endif +#ifdef EINVAL + X(EINVAL,"invalid argument") +#endif +#ifdef ENFILE + X(ENFILE,"system cannot open more files") +#endif +#ifdef EMFILE + X(EMFILE,"process cannot open more files") +#endif +#ifdef ENOTTY + X(ENOTTY,"not a tty") +#endif +#ifdef EFBIG + X(EFBIG,"file too big") +#endif +#ifdef ENOSPC + X(ENOSPC,"out of disk space") +#endif +#ifdef ESPIPE + X(ESPIPE,"unseekable descriptor") +#endif +#ifdef EROFS + X(EROFS,"read-only file system") +#endif +#ifdef EMLINK + X(EMLINK,"too many links") +#endif +#ifdef EDOM + X(EDOM,"input out of range") +#endif +#ifdef ERANGE + X(ERANGE,"output out of range") +#endif +#ifdef EALREADY + X(EALREADY,"operation already in progress") +#endif +#ifdef ENOTSOCK + X(ENOTSOCK,"not a socket") +#endif +#ifdef EDESTADDRREQ + X(EDESTADDRREQ,"destination address required") +#endif +#ifdef EMSGSIZE + X(EMSGSIZE,"message too long") +#endif +#ifdef EPROTOTYPE + X(EPROTOTYPE,"incorrect protocol type") +#endif +#ifdef ENOPROTOOPT + X(ENOPROTOOPT,"protocol not available") +#endif +#ifdef EPROTONOSUPPORT + X(EPROTONOSUPPORT,"protocol not supported") +#endif +#ifdef ESOCKTNOSUPPORT + X(ESOCKTNOSUPPORT,"socket type not supported") +#endif +#ifdef EOPNOTSUPP + X(EOPNOTSUPP,"operation not supported") +#endif +#ifdef EPFNOSUPPORT + X(EPFNOSUPPORT,"protocol family not supported") +#endif +#ifdef EAFNOSUPPORT + X(EAFNOSUPPORT,"address family not supported") +#endif +#ifdef EADDRINUSE + X(EADDRINUSE,"address already used") +#endif +#ifdef EADDRNOTAVAIL + X(EADDRNOTAVAIL,"address not available") +#endif +#ifdef ENETDOWN + X(ENETDOWN,"network down") +#endif +#ifdef ENETUNREACH + X(ENETUNREACH,"network unreachable") +#endif +#ifdef ENETRESET + X(ENETRESET,"network reset") +#endif +#ifdef ECONNABORTED + X(ECONNABORTED,"connection aborted") +#endif +#ifdef ECONNRESET + X(ECONNRESET,"connection reset") +#endif +#ifdef ENOBUFS + X(ENOBUFS,"out of buffer space") +#endif +#ifdef EISCONN + X(EISCONN,"already connected") +#endif +#ifdef ENOTCONN + X(ENOTCONN,"not connected") +#endif +#ifdef ESHUTDOWN + X(ESHUTDOWN,"socket shut down") +#endif +#ifdef ETOOMANYREFS + X(ETOOMANYREFS,"too many references") +#endif +#ifdef ECONNREFUSED + X(ECONNREFUSED,"connection refused") +#endif +#ifdef ELOOP + X(ELOOP,"symbolic link loop") +#endif +#ifdef ENAMETOOLONG + X(ENAMETOOLONG,"file name too long") +#endif +#ifdef EHOSTDOWN + X(EHOSTDOWN,"host down") +#endif +#ifdef EHOSTUNREACH + X(EHOSTUNREACH,"host unreachable") +#endif +#ifdef ENOTEMPTY + X(ENOTEMPTY,"directory not empty") +#endif +#ifdef EPROCLIM + X(EPROCLIM,"too many processes") +#endif +#ifdef EUSERS + X(EUSERS,"too many users") +#endif +#ifdef EDQUOT + X(EDQUOT,"disk quota exceeded") +#endif +#ifdef ESTALE + X(ESTALE,"stale NFS file handle") +#endif +#ifdef EREMOTE + X(EREMOTE,"too many levels of remote in path") +#endif +#ifdef EBADRPC + X(EBADRPC,"RPC structure is bad") +#endif +#ifdef ERPCMISMATCH + X(ERPCMISMATCH,"RPC version mismatch") +#endif +#ifdef EPROGUNAVAIL + X(EPROGUNAVAIL,"RPC program unavailable") +#endif +#ifdef EPROGMISMATCH + X(EPROGMISMATCH,"program version mismatch") +#endif +#ifdef EPROCUNAVAIL + X(EPROCUNAVAIL,"bad procedure for program") +#endif +#ifdef ENOLCK + X(ENOLCK,"no locks available") +#endif +#ifdef ENOSYS + X(ENOSYS,"system call not available") +#endif +#ifdef EFTYPE + X(EFTYPE,"bad file type") +#endif +#ifdef EAUTH + X(EAUTH,"authentication error") +#endif +#ifdef ENEEDAUTH + X(ENEEDAUTH,"not authenticated") +#endif +#ifdef ENOSTR + X(ENOSTR,"not a stream device") +#endif +#ifdef ETIME + X(ETIME,"timer expired") +#endif +#ifdef ENOSR + X(ENOSR,"out of stream resources") +#endif +#ifdef ENOMSG + X(ENOMSG,"no message of desired type") +#endif +#ifdef EBADMSG + X(EBADMSG,"bad message type") +#endif +#ifdef EIDRM + X(EIDRM,"identifier removed") +#endif +#ifdef ENONET + X(ENONET,"machine not on network") +#endif +#ifdef ERREMOTE + X(ERREMOTE,"object not local") +#endif +#ifdef ENOLINK + X(ENOLINK,"link severed") +#endif +#ifdef EADV + X(EADV,"advertise error") +#endif +#ifdef ESRMNT + X(ESRMNT,"srmount error") +#endif +#ifdef ECOMM + X(ECOMM,"communication error") +#endif +#ifdef EMULTIHOP + X(EMULTIHOP,"multihop attempted") +#endif +#ifdef EREMCHG + X(EREMCHG,"remote address changed") +#endif + return "unknown error"; +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/error_str.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/error_str.o new file mode 100644 index 0000000000000000000000000000000000000000..7ba4935e076c8bdff5a3f5bc87a7e6e864e9b863 GIT binary patch literal 7584 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 GMfnfe +#include "fd.h" + +int fd_copy(int to,int from) +{ + if (to == from) return 0; + if (fcntl(from,F_GETFL,0) == -1) return -1; + close(to); + if (fcntl(from,F_DUPFD,to) == -1) return -1; + return 0; +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/fd_copy.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/fd_copy.o new file mode 100644 index 0000000000000000000000000000000000000000..97117d662492f8cd90c9447d90141c13e7bc689c GIT binary patch literal 1504 zcmbW1&ui3B5XUE*>TYe(^~YiT0nK3%1^X~6f+Dg|wGpJCAXF&UY?`IT?5=E5XuT+` z2%#7M5J8WgB%lWmo;(&ok3t3Y;15u!^Uc0T-##Kj2g1yJW+rcD-ew!Y8r6S!{m->?Khxjo_vJ%w=B>@uE8bdEuX_F0wO6e@ z6OZyL_nn))wAoC*d;;ia)^hp9CdAIHjY~y`iO>{tN>;4V0R;rdg zUamah-oTH@*b?;2Zs&2SZ`1VD)OqLFrLei=cbqfgv^X{C3itTHBogszJMo*Wliolt zDytVpzDUBAgv5fM_#~QfOd_Y@;(V*;w?h&^x7`jqoYLtgp_rbzITMT99N~wQ{B;Q^Q;pb!#lTI zf0k>}SBW28o=fMX4%t@yE9|mi_Jr6QIlr0{^8=}R#T(3Uz9}Cim@oon?p2PP3?-XJ zopR0Gy&N!ihg?;EOBG6O*26b}8+UkNV#BGdI6A6d(Ktr`E!J(7m@R v0%cJv=p+#ZQ8x~WE})nNcZHq*!CxWEbwCzy{6-bO4aj2VJ2@TX>i7N^7S4(1 literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/fd_move.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/fd_move.c new file mode 100644 index 0000000..821ee95 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/fd_move.c @@ -0,0 +1,9 @@ +#include "fd.h" + +int fd_move(int to,int from) +{ + if (to == from) return 0; + if (fd_copy(to,from) == -1) return -1; + close(from); + return 0; +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/fd_move.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/fd_move.o new file mode 100644 index 0000000000000000000000000000000000000000..6c10385895d79b05ad3af43e8376034b248acfac GIT binary patch literal 1416 zcmbVLziSjx5T4CO@1j9hlOmvyv+)O*hZ{vm3Ry^E5X3^UkQ8BW^TLVQ+i<&)#3n_m zbSeE$Y!C8>*rp3&p@neHxA#V0hOIKN%*^+_@4cCM`wrJ$znlmH5)0@B{m%p?iaao> z;e@7XisIqYuXo2k_gWjLH|JN0&cGf09#!YZ-{WDO#lwwLnyocN!I!rb>_ZZ{9DIRhoTrm0aF+Sc*|yRa+!3 zuY2^k$cqu);crr5NRumL@QLHDvBx=Wm(MwW-{GOl#q}gmUZ3@tdF**v{d3l$E?l8+ za=z3roYXIQ%z>^6+^*|i`b7VLL@#*47|z%B)dBO0&}&~YuQ5ozDV?Nx?JXws?66k! zA4KT9)+5)m!_vqNrR@aQ8AI>7|0%|r&YyGhyT`n5`h1`BW2~E`A0r==IBc94>S(G2 zc+(97cSXv^&WHcHyhw!9x(INFx!m^Zk@q&kxPEI8N7oV-kB!bV1-2=*Y giqb+0!+pbWXPEt;(b(ia1CD=H@D9f?VE#S-1-(IFcmMzZ literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/find-systype.sh b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/find-systype.sh new file mode 100644 index 0000000..0955c32 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/find-systype.sh @@ -0,0 +1,159 @@ +# oper-:arch-:syst-:chip-:kern- +# oper = operating system type; e.g., sunos-4.1.4 +# arch = machine language; e.g., sparc +# syst = which binaries can run; e.g., sun4 +# chip = chip model; e.g., micro-2-80 +# kern = kernel version; e.g., sun4m +# dependence: arch --- chip +# \ \ +# oper --- syst --- kern +# so, for example, syst is interpreted in light of oper, but chip is not. +# anyway, no slashes, no extra colons, no uppercase letters. +# the point of the extra -'s is to ease parsing: can add hierarchies later. +# e.g., *:i386-*:*:pentium-*:* would handle pentium-100 as well as pentium, +# and i386-486 (486s do have more instructions, you know) as well as i386. +# the idea here is to include ALL useful available information. + +exec 2>/dev/null + +sys="`uname -s | tr '/:[A-Z]' '..[a-z]'`" +if [ x"$sys" != x ] +then + unamer="`uname -r | tr /: ..`" + unamem="`uname -m | tr /: ..`" + unamev="`uname -v | tr /: ..`" + + case "$sys" in + bsd.os) + # in bsd 4.4, uname -v does not have useful info. + # in bsd 4.4, uname -m is arch, not chip. + oper="$sys-$unamer" + arch="$unamem" + syst="" + chip="`sysctl -n hw.model`" + kern="" + ;; + freebsd) + # see above about bsd 4.4 + oper="$sys-$unamer" + arch="$unamem" + syst="" + chip="`sysctl -n hw.model`" # hopefully + kern="" + ;; + netbsd) + # see above about bsd 4.4 + oper="$sys-$unamer" + arch="$unamem" + syst="" + chip="`sysctl -n hw.model`" # hopefully + kern="" + ;; + linux) + # as in bsd 4.4, uname -v does not have useful info. + oper="$sys-$unamer" + syst="" + chip="$unamem" + kern="" + case "$chip" in + i386|i486|i586|i686) + arch="i386" + ;; + alpha) + arch="alpha" + ;; + esac + ;; + aix) + # naturally IBM has to get uname -r and uname -v backwards. dorks. + oper="$sys-$unamev-$unamer" + arch="`arch | tr /: ..`" + syst="" + chip="$unamem" + kern="" + ;; + sunos) + oper="$sys-$unamer-$unamev" + arch="`(uname -p || mach) | tr /: ..`" + syst="`arch | tr /: ..`" + chip="$unamem" # this is wrong; is there any way to get the real info? + kern="`arch -k | tr /: ..`" + ;; + unix_sv) + oper="$sys-$unamer-$unamev" + arch="`uname -m`" + syst="" + chip="$unamem" + kern="" + ;; + *) + oper="$sys-$unamer-$unamev" + arch="`arch | tr /: ..`" + syst="" + chip="$unamem" + kern="" + ;; + esac +else + $CC -c trycpp.c + $LD -o trycpp trycpp.o + case `./trycpp` in + nextstep) + oper="nextstep-`hostinfo | sed -n 's/^[ ]*NeXT Mach \([^:]*\):.*$/\1/p'`" + arch="`hostinfo | sed -n 's/^Processor type: \(.*\) (.*)$/\1/p' | tr /: ..`" + syst="" + chip="`hostinfo | sed -n 's/^Processor type: .* (\(.*\))$/\1/p' | tr ' /:' '...'`" + kern="" + ;; + *) + oper="unknown" + arch="" + syst="" + chip="" + kern="" + ;; + esac + rm -f trycpp.o trycpp +fi + +case "$chip" in +80486) + # let's try to be consistent here. (BSD/OS) + chip=i486 + ;; +i486DX) + # respect the hyphen hierarchy. (FreeBSD) + chip=i486-dx + ;; +i486.DX2) + # respect the hyphen hierarchy. (FreeBSD) + chip=i486-dx2 + ;; +Intel.586) + # no, you nitwits, there is no such chip. (NeXTStep) + chip=pentium + ;; +i586) + # no, you nitwits, there is no such chip. (Linux) + chip=pentium + ;; +i686) + # STOP SAYING THAT! (Linux) + chip=ppro +esac + +if $CC -c x86cpuid.c +then + if $LD -o x86cpuid x86cpuid.o + then + x86cpuid="`./x86cpuid | tr /: ..`" + case "$x86cpuid" in + ?*) + chip="$x86cpuid" + ;; + esac + fi +fi +rm -f x86cpuid x86cpuid.o + +echo "$oper-:$arch-:$syst-:$chip-:$kern-" | tr ' [A-Z]' '.[a-z]' diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/finger@ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/finger@ new file mode 100755 index 0000000..d7ccaf8 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/finger@ @@ -0,0 +1,6 @@ +#!/bin/sh +# WARNING: This file was auto-generated. Do not edit! +echo "${2-}" | /usr/local/bin/tcpclient -RHl0 -- "${1-0}" 79 sh -c ' + /usr/local/bin/addcr >&7 + exec /usr/local/bin/delcr <&6 +' | cat -v diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/finger@.1 b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/finger@.1 new file mode 100644 index 0000000..93b6288 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/finger@.1 @@ -0,0 +1,45 @@ +.TH finger@ 1 +.SH NAME +finger@ \- get user information from a host +.SH SYNTAX +.B finger@ +[ +.I host +[ +.I user +] +] +.SH DESCRIPTION +.B finger@ +connects to TCP port 79 (Finger) on +.IR host , +sends +.I user +(with an extra CR) +to +.IR host , +and prints any data it receives. +It removes CR and converts unprintable characters to a visible format. +Some computers respond to port 79 with information about +.IR user . + +If +.I user +is not supplied, +.B finger@ +sends a blank line to +.IR host . +Some computers respond with information about +all the users who are logged in. + +If +.I host +is not supplied, +.B finger@ +connects to the local host. +.SH "SEE ALSO" +addcr(1), +cat(1), +delcr(1), +finger(1), +tcpclient(1) diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/finger@.sh b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/finger@.sh new file mode 100644 index 0000000..ea8bf79 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/finger@.sh @@ -0,0 +1,4 @@ +echo "${2-}" | HOME/bin/tcpclient -RHl0 -- "${1-0}" 79 sh -c ' + HOME/bin/addcr >&7 + exec HOME/bin/delcr <&6 +' | cat -v diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/fixcr.1 b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/fixcr.1 new file mode 100644 index 0000000..ebb8b53 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/fixcr.1 @@ -0,0 +1,11 @@ +.TH fixcr 1 +.SH NAME +fixcr \- make sure that there is a CR before each LF +.SH SYNOPSIS +.B fixcr +.SH DESCRIPTION +.B fixcr +inserts CR at the end of each line of input where a CR is not already present. +It does not insert CR at the end of a partial final line. +.SH "SEE ALSO" +addcr(1) diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/fixcrio b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/fixcrio new file mode 100755 index 0000000000000000000000000000000000000000..0fb9a6c271d0f50d8d08ac50f61bae169739b427 GIT binary patch literal 17536 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 = 0; + io0->events = IOPAUSE_READ; + } + ioleft = 0; + if (leftstatus == 1) { + ioleft = &x[xlen++]; + ioleft->fd = fdleft; + ioleft->events = IOPAUSE_WRITE; + } + + ioright = 0; + if (rightstatus == 0) { + ioright = &x[xlen++]; + ioright->fd = fdright; + ioright->events = IOPAUSE_READ; + } + io1 = 0; + if (rightstatus == 1) { + io1 = &x[xlen++]; + io1->fd = 1; + io1->events = IOPAUSE_WRITE; + } + + taia_now(&stamp); + taia_uint(&deadline,3600); + taia_add(&deadline,&stamp,&deadline); + iopause(x,xlen,&deadline,&stamp); + + if (io0 && io0->revents) { + r = read(0,prebuf,sizeof prebuf); + if (r <= 0) { + leftstatus = -1; + close(fdleft); + } + else { + leftstatus = 1; + leftpos = 0; + leftlen = 0; + for (i = 0;i < r;++i) { + ch = prebuf[i]; + if (ch == '\n') + if (!leftflagcr) + leftbuf[leftlen++] = '\r'; + leftbuf[leftlen++] = ch; + leftflagcr = (ch == '\r'); + } + } + } + + if (ioleft && ioleft->revents) { + r = write(fdleft,leftbuf + leftpos,leftlen - leftpos); + if (r == -1) break; + leftpos += r; + if (leftpos == leftlen) leftstatus = 0; + } + + if (ioright && ioright->revents) { + r = read(fdright,prebuf,sizeof prebuf); + if (r <= 0) break; + rightstatus = 1; + rightpos = 0; + rightlen = 0; + for (i = 0;i < r;++i) { + ch = prebuf[i]; + if (ch == '\n') + if (!rightflagcr) + rightbuf[rightlen++] = '\r'; + rightbuf[rightlen++] = ch; + rightflagcr = (ch == '\r'); + } + } + + if (io1 && io1->revents) { + r = write(1,rightbuf + rightpos,rightlen - rightpos); + if (r == -1) break; + rightpos += r; + if (rightpos == rightlen) rightstatus = 0; + } + } + + _exit(0); +} + +main(int argc,char **argv,char **envp) +{ + int piin[2]; + int piout[2]; + + if (argc < 2) + strerr_die1x(100,"fixcrio: usage: fixcrio program [ arg ... ]"); + + if (pipe(piin) == -1) + strerr_die2sys(111,FATAL,"unable to create pipe: "); + if (pipe(piout) == -1) + strerr_die2sys(111,FATAL,"unable to create pipe: "); + + switch(fork()) { + case -1: + strerr_die2sys(111,FATAL,"unable to fork: "); + case 0: + sig_ignore(sig_pipe); + close(piin[0]); + close(piout[1]); + doit(piin[1],piout[0]); + } + + close(piin[1]); + close(piout[0]); + if (fd_move(0,piin[0]) == -1) + strerr_die2sys(111,FATAL,"unable to move descriptors: "); + if (fd_move(1,piout[1]) == -1) + strerr_die2sys(111,FATAL,"unable to move descriptors: "); + + pathexec_run(argv[1],argv + 1,envp); + strerr_die4sys(111,FATAL,"unable to run ",argv[1],": "); +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/fixcrio.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/fixcrio.o new file mode 100644 index 0000000000000000000000000000000000000000..f6f351a40975845aabb412cd56600ac9e7e465cb GIT binary patch literal 6352 zcmbuDZ){sv6~M1+H*we0&n*E8w8~>O+X9>ED+7ffsyItpi)Ad@T2?Vec(I=yYmRL_ zKhv};T_)SpEH7C#A*3R-^$YNYKSM~<7~1O6(h&Fp(-=q~Bt}0pbb--HrBr}9=e~R5 zlNUdU!j=5)y}x_@-E;4K?}x6>Yx%@Gk1TSelb#OD%+ z6Ne5zn5@1v*EkXDYdEp+#KMW#-jz2%F1e78MVH26QPjymqdy>ij1I<))#he|^_EtD z3+iO*{J3$gdOk3*kiHOYj>W>61jvU1BGCxNl3;Q2GRnUijR-N(XvyG;VbI z6R}B@jRI`^!Ii16I$JZ25K0dFxp1zWn7_Gu_xzOZ#9;*#kYYi$%LY^ z+d>gzxzl!oFs@x0%#gig>Rk0);Hgtmv^9TYoA%XKvU)M_$-irh^I%DP@oP9Vf8&-ARUm#+N9d4$`poI90FeH@$3cjMD&HDLn`UQIr65xX+F>h-o(n*~cj8QiDjvmu{a zz4q^RyA$3@1-dHFU?}V}Q~hRUx<}dbpXbRKo8xa`j<2tu<4?7LG29{7+@KrVaB5oZ zAOC`7NmNh5PN}Uz+mnd1xC$FG;bgmI;d`LYvhX}wruE@YS4LsP_#K=aV|C^1Kih50 zw$XA`VVAf^Vr3Uf!8VcUKb&m*`oU!59XOps)xQR`#gD)~#RH-%fodzD)d~=;JT)9H z1EfAIqB;+?ufxRP%+}6A4FSZI2sESAbig_VAnhLjQ%xtL>b@jND*kA;&9 z<#4j`XE~5;-Wwh_mJ=_*n0Of1}ZXhOWwK7<~{smjhuFCIu*pPTZxvfWjM{d9ABUxI@HE^k`z zssB-L^9DWRHFpuxGWXpUVdYz}??fgym$GxkVZBl|v(~V#`g+MOW^Hp;e^@u|tR9cY z^+!adU{2>P-6`rR+cF(XFXc+0(y@^-9WxK0BbX`LkFEo=#V=cW+A4$7l2f$HFt~2q zt`u}!-F|#P2^@bw1m>cFU|(A*SjqDta=%bN45|O=$$k15i zg+R6U$)2Y-FN79@&%pVCf;xv}ONb((L?rs;rm@J*YVcrW68Z=4xo23vW6YY)nFams z_{ZY=?lR)WpxYE8UOqPKnA1=@wp-6o%eL}n+_B~y5l=$`M0~nj7IC|X9TYd>L+iT+ zbWz8enaV(pEfG%@XJ@Sf7$_7SD}L~^hwmyoX6jKD@BdTjpbTjfJsu+?s;_wlF*G>O~ia&=!tdJhnxaY9#?!u1XWu;&0AlV}SgztxjcTPBVMkRQ! z62$!Dm5=l(|6c?~u_#el9Z~ng0S>#!X1g#{Im+&r*r($4wH*e$YlpI=f0Pte?bYv= zI}|N#bro95IDX}CfuDE&TYz=*zgKhhcX%9nx~@={C(4Dy-`ZVanq85g+yNWJ!476-V+jh(&iaCB-NE8NqmqZ`Y&*nB`K5^Qz3M%KXz@cn z{G&d6$cK*rN5534b+6=C+d2)Xls^FdZt*;%$ z!q?6IPki{#efV#D_?td_)raGO>lRNK*1sF4%Sk*X(#4!3>|A!nfsdV#%zOEs?h}Bwn(u=}Jbx)h8`+saTeE-YUpClQ**|TQ*VdsGV~x z*B?qs$0#ZrN>;W}IF&Dgvngv1LYy^o1%X#9fww1-Nl)RWNt8@y#+tKIQ*cERaILUx zd#Ze_OwDx866IWWDwi!3ZEMCXr1O?7i8O^nDbq>KK>o1ocPqJ#@XW(sC$bb6$8QSp z#~84EQ?`HfJ#s?UG z&4<6qxX$D^s}CyXpZksa@ZF4mklFc!55J%BTbcY96vzFKS9!c&U@<-X^DY({5688^ z;wX-5vPTm4@r2?yuNeF&pQk-`29?fp9!~bZqqx`pj}-UXZ!wN{IP!au@!J^x1>?6f z{s!ZGUH<69|H3%tl>BZ{S76HXFpOb|csR{>m*U>}4l3@QZ^C28wJyW~4=4MFeC(S( z_K$h&Q2Zx7oa{gCWB;^|{U3PjQ2Z}?IN878WB*q^_OCEIswrLcsJ~ym`P5YaxL!C$ M<%nt!r~BuB0C 9) { ++len; q /= 10; } + if (s) { + s += len; + do { *--s = '0' + (u % 10); u /= 10; } while(u); /* handles u == 0 */ + } + return len; +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/fmt_ulong.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/fmt_ulong.o new file mode 100644 index 0000000000000000000000000000000000000000..05dfe4de74e27976649501f715d3b57ef5aff69a GIT binary patch literal 1328 zcmbVLK}#D!6n<+`lh~H12nq^`y;PwNMm<@P1f$MDJd}EtO}c4BH-Tid+Di{Xa1Vjf zU(-X;h!+ofu%|+Ay$D5$dMS9QeJ?ws>tjz2EZ=+IeBZn`Z+Ab? z1twqX$UDv6gq*7ImSX^Eit1G*>9xVR&co3~L z-%fT!R_71yh+H?*4P#FJ2;;x8+@w(xXnctn$LF#B40@@42R^~o(#d#`#F%OY*DFkT zPqaVq#8(aY00~6W8NcCQBS-c5y3|C9ZE!7qnxXzA7wU63-Ge-z9Z8M>M+*&FER?tdw{YISp?T6r&ua2Erl^~p5PV7LDP3G;Oa literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/fmt_xlong.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/fmt_xlong.c new file mode 100644 index 0000000..332fc9a --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/fmt_xlong.c @@ -0,0 +1,22 @@ +#include "fmt.h" + +char tohex(char num) { + if (num<10) + return num+'0'; + else if (num<16) + return num-10+'a'; + else + return -1; +} + +unsigned int fmt_xlong(register char *s,register unsigned long u) +{ + register unsigned int len; register unsigned long q; + len = 1; q = u; + while (q > 15) { ++len; q /= 16; } + if (s) { + s += len; + do { *--s = tohex(u % 16); u /= 16; } while(u); /* handles u == 0 */ + } + return len; +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/fmt_xlong.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/fmt_xlong.o new file mode 100644 index 0000000000000000000000000000000000000000..31f6ce268772fd943002887e610f91d11fddab69 GIT binary patch literal 1416 zcmbW1&ubGw6vy8*sZIRB#vh=dlJulPJ0`Vg!&fWaRXxQ7Uc00G0-VHF2W}L;|x3ASGxRZSoxkT{K5n+Gs zEuHt$>5APi$+=*MiQtd3{!45PjjeTELs$n#;Y~O10_w9`H)T z_q{rn)Em;{3-_K(wxnBGHJcxPeIBhe(j(RpMU@8@&saIlhWrVOzqfLoCiOz;CDasN zhxHfGOZ`XiGNY#wVM1I}FEb`Ev7d?dmq&+H`Jq4>mFl$roZ_>n)ZdPbf>~?Bt}Wrd z&B$^!4#w1;L}t&<^gpJ=2>V#d?b%VeP($e}?@?5Gcl-TmE^+;5)ch_gzZSc{=C)E@ z5`GSBPI)4BV#MR#gm~N&5|8`jiI2s#MQ;B}08U`#DdTy@mGiXX`uns0Us3htN_(wQ df5s~y8#S*D`-H4Hx?#|~&9|9}=mFQ~{s%cZcFzC+ literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/fork.h b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/fork.h new file mode 100644 index 0000000..7c1b0b9 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/fork.h @@ -0,0 +1,9 @@ +#ifndef FORK_H +#define FORK_H + +/* sysdep: +vfork */ + +extern int fork(); +extern int vfork(); + +#endif diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/fork.h1 b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/fork.h1 new file mode 100644 index 0000000..ddd589d --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/fork.h1 @@ -0,0 +1,9 @@ +#ifndef FORK_H +#define FORK_H + +/* sysdep: -vfork */ + +extern int fork(); +#define vfork fork + +#endif diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/fork.h2 b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/fork.h2 new file mode 100644 index 0000000..7c1b0b9 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/fork.h2 @@ -0,0 +1,9 @@ +#ifndef FORK_H +#define FORK_H + +/* sysdep: +vfork */ + +extern int fork(); +extern int vfork(); + +#endif diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/gen_alloc.h b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/gen_alloc.h new file mode 100644 index 0000000..b94a956 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/gen_alloc.h @@ -0,0 +1,7 @@ +#ifndef GEN_ALLOC_H +#define GEN_ALLOC_H + +#define GEN_ALLOC_typedef(ta,type,field,len,a) \ + typedef struct ta { type *field; unsigned int len; unsigned int a; } ta; + +#endif diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/gen_allocdefs.h b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/gen_allocdefs.h new file mode 100644 index 0000000..d025b27 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/gen_allocdefs.h @@ -0,0 +1,34 @@ +#ifndef GEN_ALLOC_DEFS_H +#define GEN_ALLOC_DEFS_H + +#define GEN_ALLOC_ready(ta,type,field,len,a,i,n,x,base,ta_ready) \ +int ta_ready(register ta *x,register unsigned int n) \ +{ register unsigned int i; \ + if (x->field) { \ + i = x->a; \ + if (n > i) { \ + x->a = base + n + (n >> 3); \ + if (alloc_re(&x->field,i * sizeof(type),x->a * sizeof(type))) return 1; \ + x->a = i; return 0; } \ + return 1; } \ + x->len = 0; \ + return !!(x->field = (type *) alloc((x->a = n) * sizeof(type))); } + +#define GEN_ALLOC_readyplus(ta,type,field,len,a,i,n,x,base,ta_rplus) \ +int ta_rplus(register ta *x,register unsigned int n) \ +{ register unsigned int i; \ + if (x->field) { \ + i = x->a; n += x->len; \ + if (n > i) { \ + x->a = base + n + (n >> 3); \ + if (alloc_re(&x->field,i * sizeof(type),x->a * sizeof(type))) return 1; \ + x->a = i; return 0; } \ + return 1; } \ + x->len = 0; \ + return !!(x->field = (type *) alloc((x->a = n) * sizeof(type))); } + +#define GEN_ALLOC_append(ta,type,field,len,a,i,n,x,base,ta_rplus,ta_append) \ +int ta_append(register ta *x,register type *i) \ +{ if (!ta_rplus(x,1)) return 0; x->field[x->len++] = *i; return 1; } + +#endif diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/getln.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/getln.c new file mode 100644 index 0000000..489621c --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/getln.c @@ -0,0 +1,14 @@ +#include "byte.h" +#include "getln.h" + +int getln(buffer *ss,stralloc *sa,int *match,int sep) +{ + char *cont; + unsigned int clen; + + if (getln2(ss,sa,&cont,&clen,sep) == -1) return -1; + if (!clen) { *match = 0; return 0; } + if (!stralloc_catb(sa,cont,clen)) return -1; + *match = 1; + return 0; +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/getln.h b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/getln.h new file mode 100644 index 0000000..3cae45f --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/getln.h @@ -0,0 +1,10 @@ +#ifndef GETLN_H +#define GETLN_H + +#include "buffer.h" +#include "stralloc.h" + +extern int getln(buffer *,stralloc *,int *,int); +extern int getln2(buffer *,stralloc *,char **,unsigned int *,int); + +#endif diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/getln.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/getln.o new file mode 100644 index 0000000000000000000000000000000000000000..5a61737137b87ea5612db35edf63b150263bab5c GIT binary patch literal 1496 zcmbtU&ubG=5T4CelWIw$1PT72L4qjQhg(I&gKTMQRuB)`9z>+wtXm^)5=fp(#y@*$#&bPZyUmxqm4!oV2Z{~Y5^WN^hT)KU;U|FQZq8s$r zQz+4z2D%CC(iBb7iZ}W?Kl*gf8~yZ#-)r9XVx#J9FE>iw=-n>zhOs42ZY?*en_r%t z{kW7+o!A?Gs6BZ2etit%?H&tz(=#r4TN2!zgu5Bb9j2hP6My>*ZZ+9}$a-;?tc{9g zPZdjJPB_gt79_%BzFc`#XqIb3yIH=(esf{rdj0%j*m~l3>sQ2OF*oZ7=R#@{iNW)Z z^joZDKh}(R`S;;yVr~oHJUgVXWrtGA2uB&i?B@KFjOEpDXXn@8xGrXW zJ*L~po1h$F+Xc_cqPA`K^I` z;vYCY4rSC8L8{Z|9Puy4kD^|%8u+pWI-N7AkWFZ>%>)IH-a@vbVo&Nc*?e$T%F DqVs=> literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/getln2.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/getln2.c new file mode 100644 index 0000000..bf622a4 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/getln2.c @@ -0,0 +1,24 @@ +#include "byte.h" +#include "getln.h" + +int getln2(buffer *ss,stralloc *sa,char **cont,unsigned int *clen,int sep) +{ + register char *x; + register unsigned int i; + int n; + + if (!stralloc_ready(sa,0)) return -1; + sa->len = 0; + + for (;;) { + n = buffer_feed(ss); + if (n < 0) return -1; + if (n == 0) { *clen = 0; return 0; } + x = buffer_PEEK(ss); + i = byte_chr(x,n,sep); + if (i < n) { buffer_SEEK(ss,*clen = i + 1); *cont = x; return 0; } + if (!stralloc_readyplus(sa,n)) return -1; + i = sa->len; + sa->len = i + buffer_get(ss,sa->s + i,n); + } +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/getln2.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/getln2.o new file mode 100644 index 0000000000000000000000000000000000000000..2e2928be95c378ae1597251bd8ed46c9939ab1e5 GIT binary patch literal 1864 zcmbW1&1(};5WwGdQ=4iuQHlf-z1gbx0U|||IB>5mxYcS5Ep375&Xf|=ow5=!oT3snz=|7=t@Intf-jyUKN|Ea zeVdg>6gMEPX%s2~blv7Ap)bRWCD>HsiMFx}J0)7-7}=Nvq&eweb6L{p!GTqcri0*z zz>$`9C!lC_BBax3qO~yyseQN-M7n;CNOKWM4)p}@!@(-R4!aRTqIl5h#qNu@cQt$N zb={Tk1Ty=QESMP^I~ng!S@|nwH9n#qQ-=o=YGR;m5~9}UE4G;jZP(g*hFdkOY^t_3 zXA`w(+9px+^*T{qYR%+IHM3$7wJ=+$SXD@=&f1omIXf{}x6Q&;)_mtG4oh(?_vC~! zNoKn<3p^s&XdZ%Jz{Aj8Vg=_|Y&U4^6J&mr=_8EG%;#znlYPY7>nP-4&7H144r{TM z@VbCU2=AYCz3o4~e@+r$c=v>{p`LaIpA+Zrh96(gc@mi4sE-(oL0lAXZWe-GhWStZ zpil08VBWJ6*Iz(K5N}!Zy=RB%5gZm|oGsV`HqP#yzZaNa|4Z!toQJq5-u_}tv@tJ0 zzHf<)+p_P8;XeF!g52*3BWFYM!c5Emru;u36Lu*CjQ8Szupj=u;dAl6Yq%`lfe&=x zr#kRV2Tm?qcDXvN7MMZcD`l3;vxQvEGK=#hKW|&P!c5J>uaz5hl5dnsRxJk=xLLBS vA~XUSZ7cV#;4}XX-&~Xj0>`u9{IS6C?r{E0;30v(7WiI)#~H`k;ywKfkWKOT literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/hassgact.h b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/hassgact.h new file mode 100644 index 0000000..594d486 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/hassgact.h @@ -0,0 +1,2 @@ +/* sysdep: +sigaction */ +#define HASSIGACTION 1 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/hassgact.h1 b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/hassgact.h1 new file mode 100644 index 0000000..03c7a9f --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/hassgact.h1 @@ -0,0 +1 @@ +/* sysdep: -sigaction */ diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/hassgact.h2 b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/hassgact.h2 new file mode 100644 index 0000000..594d486 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/hassgact.h2 @@ -0,0 +1,2 @@ +/* sysdep: +sigaction */ +#define HASSIGACTION 1 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/hassgprm.h b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/hassgprm.h new file mode 100644 index 0000000..d959bc7 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/hassgprm.h @@ -0,0 +1,2 @@ +/* sysdep: +sigprocmask */ +#define HASSIGPROCMASK 1 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/hassgprm.h1 b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/hassgprm.h1 new file mode 100644 index 0000000..4c05fd1 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/hassgprm.h1 @@ -0,0 +1 @@ +/* sysdep: -sigprocmask */ diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/hassgprm.h2 b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/hassgprm.h2 new file mode 100644 index 0000000..d959bc7 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/hassgprm.h2 @@ -0,0 +1,2 @@ +/* sysdep: +sigprocmask */ +#define HASSIGPROCMASK 1 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/hasshsgr.h b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/hasshsgr.h new file mode 100644 index 0000000..d11c988 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/hasshsgr.h @@ -0,0 +1 @@ +/* sysdep: -shortsetgroups */ diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/hasshsgr.h1 b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/hasshsgr.h1 new file mode 100644 index 0000000..d11c988 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/hasshsgr.h1 @@ -0,0 +1 @@ +/* sysdep: -shortsetgroups */ diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/hasshsgr.h2 b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/hasshsgr.h2 new file mode 100644 index 0000000..db6a830 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/hasshsgr.h2 @@ -0,0 +1,2 @@ +/* sysdep: +shortsetgroups */ +#define HASSHORTSETGROUPS 1 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/haswaitp.h b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/haswaitp.h new file mode 100644 index 0000000..a75823a --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/haswaitp.h @@ -0,0 +1,2 @@ +/* sysdep: +waitpid */ +#define HASWAITPID 1 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/haswaitp.h1 b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/haswaitp.h1 new file mode 100644 index 0000000..469a7ad --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/haswaitp.h1 @@ -0,0 +1 @@ +/* sysdep: -waitpid */ diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/haswaitp.h2 b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/haswaitp.h2 new file mode 100644 index 0000000..a75823a --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/haswaitp.h2 @@ -0,0 +1,2 @@ +/* sysdep: +waitpid */ +#define HASWAITPID 1 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/haveip6.h b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/haveip6.h new file mode 100644 index 0000000..5564de9 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/haveip6.h @@ -0,0 +1 @@ +#define LIBC_HAS_IP6 1 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/haveip6.h1 b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/haveip6.h1 new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/haveip6.h1 @@ -0,0 +1 @@ + diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/haveip6.h2 b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/haveip6.h2 new file mode 100644 index 0000000..5564de9 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/haveip6.h2 @@ -0,0 +1 @@ +#define LIBC_HAS_IP6 1 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/hier.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/hier.c new file mode 100644 index 0000000..546cc6d --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/hier.c @@ -0,0 +1,44 @@ +#include "auto_home.h" + +void hier() +{ + h(auto_home,-1,-1,02755); + d(auto_home,"bin",-1,-1,02755); + d(auto_home,"man",-1,-1,02755); + d(auto_home,"man/man1",-1,-1,02755); + d(auto_home,"man/man5",-1,-1,02755); + + c(auto_home,"bin","tcpserver",-1,-1,0755); + c(auto_home,"bin","tcprules",-1,-1,0755); + c(auto_home,"bin","tcprulescheck",-1,-1,0755); + c(auto_home,"bin","argv0",-1,-1,0755); + c(auto_home,"bin","recordio",-1,-1,0755); + c(auto_home,"bin","tcpclient",-1,-1,0755); + c(auto_home,"bin","who@",-1,-1,0755); + c(auto_home,"bin","date@",-1,-1,0755); + c(auto_home,"bin","finger@",-1,-1,0755); + c(auto_home,"bin","http@",-1,-1,0755); + c(auto_home,"bin","tcpcat",-1,-1,0755); + c(auto_home,"bin","mconnect",-1,-1,0755); + c(auto_home,"bin","mconnect-io",-1,-1,0755); + c(auto_home,"bin","addcr",-1,-1,0755); + c(auto_home,"bin","delcr",-1,-1,0755); + c(auto_home,"bin","fixcrio",-1,-1,0755); + c(auto_home,"bin","rblsmtpd",-1,-1,0755); + + c(auto_home,"man/man1","tcpclient.1",-1,-1,0644); + c(auto_home,"man/man1","tcpserver.1",-1,-1,0644); + c(auto_home,"man/man1","tcprules.1",-1,-1,0644); + c(auto_home,"man/man1","tcprulescheck.1",-1,-1,0644); + c(auto_home,"man/man1","fixcr.1",-1,-1,0644); + c(auto_home,"man/man1","addcr.1",-1,-1,0644); + c(auto_home,"man/man1","delcr.1",-1,-1,0644); + c(auto_home,"man/man1","who@.1",-1,-1,0644); + c(auto_home,"man/man1","date@.1",-1,-1,0644); + c(auto_home,"man/man1","finger@.1",-1,-1,0644); + c(auto_home,"man/man1","http@.1",-1,-1,0644); + c(auto_home,"man/man1","mconnect.1",-1,-1,0644); + c(auto_home,"man/man1","argv0.1",-1,-1,0644); + c(auto_home,"man/man1","recordio.1",-1,-1,0644); + c(auto_home,"man/man5","tcp-environ.5",-1,-1,0644); +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/hier.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/hier.o new file mode 100644 index 0000000000000000000000000000000000000000..eea2bf627b56fe94462f0a7bcef0da2a1639ab43 GIT binary patch literal 6536 zcmeI0eTY<57{<@InwuYC7Nx1Rk(ow2I;IhcGV8ZxDN;~D*zC-8XL4s|yL;6w2tkS3 zD3rn=s6T=ziasT2*T57aFrw%KLn$hPP|84xK1j0j-21*W53h3}D(a6suyfA&o#+1U zx#ylcbJ?xSRxcls$v7<;x5zbnN}cN)-E8OMX5Ni=W8B_TzO3B-UHkCyQO*q>dJAK@ z{YOy^W2|ck1N+b)eD~iO?HYEMBQ0(|;2A@`pwL2iFnd}I7QiSJGG z#>9K(Kbcc9qkm?rJo9HZ-I>tv|8ogeZhyP|7`~FaD>YXw#DBAWokItW`7SE<^#|eR zAVe$N)Eo3S8pU!@+~^8n&*nKU42t!zRHKtuh7?ejlSv6-Wk+3SHgNNJKwM0`B+3> zGWV`?nSlwJwsE7|clt*Ud}=)6+_nCP$E`YNLfl=kWXW|MGnWS4l|rp!UiRwj+|FD! zH!Ep6m+il&8Wp;I9fe6<)>atw7P3(=5V@?MeZghB`}KVe@q_5Qg*1AQp=eo*g;QXt{=lrpl*IfU{MbEzogH*Ju^)f$( z_6W+LIV1}@$8f!V#d+Vb*MzaY$@p}Qb;9~VsmJU3t?^9f;+u_fRL*}%gCq@`z13sO zkQ`0#XUUPtr_G-0v0Zy4_4smfSmV znx{U;cpU9BjH510;n;?)@_6oBaaXPcVYV1ouCOVpuP@jA7g*VqT+tumuwPJcd*v3# zecjL43)t%?@yhMX%y=}(@@mZ{&Yo+8!-FlLp5>H>NAJju#MyJRaO){i9vm?Nm#%x6IQ#bq$Ms^5=(@c_dHAPG|9!)y>pmvV z{v*Pz|69t#-zohc441C^g*f~5LACw~^1vet{{lIFlHr2gG~(=^F5LR(Qy%^<5iK-a z{fmjSf0c0Szn${%UoWC=!`0tIoc*;F|5nPwulxQ1!`1&VarQr!;>T+_3bOFuhK?^U z8lF(+UL(%_p%ni?%EP~2L?0Ti{zJss|9Oi4d&c5LP`|lQx ziv8Ot55ImtK4iH1cMxa)%TxavhY7EqKggJ-@(g>v;WEz{{qUxzgzrE z3|Ie3;_P3O;=hyf@W=li@^#s8^;e0rKT7f6PkHzc%KRTOT>Xy{Xa5r^{ud|@|6%d( zHeCI05NH3s6#oa5hyN?_e`>h;KO@fmuT%U#QXc+e;y-D)`ZMxk1~>cLh1>l(neyW1VXa6@T{+}ri|K&3O tQ--U5BtpKx&Hk~%?f#rfc{JyUf4brN{y&R2`{xO_{toX%K^9|L{s6p0{el1h literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/http@ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/http@ new file mode 100755 index 0000000..d25589f --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/http@ @@ -0,0 +1,8 @@ +#!/bin/sh +# WARNING: This file was auto-generated. Do not edit! +echo "GET /${2-} HTTP/1.0 +Host: ${1-0}:${3-80} +" | /usr/local/bin/tcpclient -RHl0 -- "${1-0}" "${3-80}" sh -c ' + /usr/local/bin/addcr >&7 + exec /usr/local/bin/delcr <&6 +' | awk '/^$/ { body=1; next } { if (body) print }' diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/http@.1 b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/http@.1 new file mode 100644 index 0000000..4861b34 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/http@.1 @@ -0,0 +1,52 @@ +.TH http@ 1 +.SH NAME +http@ \- get a web page from a host through HTTP +.SH SYNTAX +.B http@ +[ +.I host +[ +.I page +[ +.I port +] +] +] +.SH DESCRIPTION +.B http@ +connects to +.I port +on +.IR host , +sends +.B GET /\fIpage +(with an extra CR) +to +.IR host , +and prints any data it receives, +removing CR from the end of each line. + +If +.I port +is not supplied, +.B http@ +uses port 80 (HTTP). + +If +.I page +is not supplied, +.B http@ +sends +.B GET / +to +.IR host . + +If +.I host +is not supplied, +.B http@ +connects to the local host. +.SH "SEE ALSO" +addcr(1), +delcr(1), +tcpclient(1) diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/http@.sh b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/http@.sh new file mode 100644 index 0000000..039be03 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/http@.sh @@ -0,0 +1,6 @@ +echo "GET /${2-} HTTP/1.0 +Host: ${1-0}:${3-80} +" | HOME/bin/tcpclient -RHl0 -- "${1-0}" "${3-80}" sh -c ' + HOME/bin/addcr >&7 + exec HOME/bin/delcr <&6 +' | awk '/^$/ { body=1; next } { if (body) print }' diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/install b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/install new file mode 100755 index 0000000000000000000000000000000000000000..c27bfa8e6eddf9d138b85e1832a0354592ab22ee GIT binary patch literal 17448 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 literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/install.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/install.c new file mode 100644 index 0000000..605fed3 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/install.c @@ -0,0 +1,149 @@ +#include "buffer.h" +#include "strerr.h" +#include "error.h" +#include "open.h" +#include "readwrite.h" +#include "exit.h" + +extern void hier(); + +#define FATAL "install: fatal: " + +int fdsourcedir = -1; + +void h(home,uid,gid,mode) +char *home; +int uid; +int gid; +int mode; +{ + if (mkdir(home,0700) == -1) + if (errno != error_exist) + strerr_die4sys(111,FATAL,"unable to mkdir ",home,": "); + if (chown(home,uid,gid) == -1) + strerr_die4sys(111,FATAL,"unable to chown ",home,": "); + if (chmod(home,mode) == -1) + strerr_die4sys(111,FATAL,"unable to chmod ",home,": "); +} + +void d(home,subdir,uid,gid,mode) +char *home; +char *subdir; +int uid; +int gid; +int mode; +{ + if (chdir(home) == -1) + strerr_die4sys(111,FATAL,"unable to switch to ",home,": "); + if (mkdir(subdir,0700) == -1) + if (errno != error_exist) + strerr_die6sys(111,FATAL,"unable to mkdir ",home,"/",subdir,": "); + if (chown(subdir,uid,gid) == -1) + strerr_die6sys(111,FATAL,"unable to chown ",home,"/",subdir,": "); + if (chmod(subdir,mode) == -1) + strerr_die6sys(111,FATAL,"unable to chmod ",home,"/",subdir,": "); +} + +char inbuf[BUFFER_INSIZE]; +char outbuf[BUFFER_OUTSIZE]; +buffer ssin; +buffer ssout; + +void c(home,subdir,file,uid,gid,mode) +char *home; +char *subdir; +char *file; +int uid; +int gid; +int mode; +{ + int fdin; + int fdout; + + if (fchdir(fdsourcedir) == -1) + strerr_die2sys(111,FATAL,"unable to switch back to source directory: "); + + fdin = open_read(file); + if (fdin == -1) + strerr_die4sys(111,FATAL,"unable to read ",file,": "); + buffer_init(&ssin,read,fdin,inbuf,sizeof inbuf); + + if (chdir(home) == -1) + strerr_die4sys(111,FATAL,"unable to switch to ",home,": "); + if (chdir(subdir) == -1) + strerr_die6sys(111,FATAL,"unable to switch to ",home,"/",subdir,": "); + + fdout = open_trunc(file); + if (fdout == -1) + strerr_die6sys(111,FATAL,"unable to write .../",subdir,"/",file,": "); + buffer_init(&ssout,write,fdout,outbuf,sizeof outbuf); + + switch(buffer_copy(&ssout,&ssin)) { + case -2: + strerr_die4sys(111,FATAL,"unable to read ",file,": "); + case -3: + strerr_die6sys(111,FATAL,"unable to write .../",subdir,"/",file,": "); + } + + close(fdin); + if (buffer_flush(&ssout) == -1) + strerr_die6sys(111,FATAL,"unable to write .../",subdir,"/",file,": "); + if (fsync(fdout) == -1) + strerr_die6sys(111,FATAL,"unable to write .../",subdir,"/",file,": "); + if (close(fdout) == -1) /* NFS silliness */ + strerr_die6sys(111,FATAL,"unable to write .../",subdir,"/",file,": "); + + if (chown(file,uid,gid) == -1) + strerr_die6sys(111,FATAL,"unable to chown .../",subdir,"/",file,": "); + if (chmod(file,mode) == -1) + strerr_die6sys(111,FATAL,"unable to chmod .../",subdir,"/",file,": "); +} + +void z(home,subdir,file,len,uid,gid,mode) +char *home; +char *subdir; +char *file; +int len; +int uid; +int gid; +int mode; +{ + int fdout; + + if (chdir(home) == -1) + strerr_die4sys(111,FATAL,"unable to switch to ",home,": "); + if (chdir(subdir) == -1) + strerr_die6sys(111,FATAL,"unable to switch to ",home,"/",subdir,": "); + + fdout = open_trunc(file); + if (fdout == -1) + strerr_die6sys(111,FATAL,"unable to write .../",subdir,"/",file,": "); + buffer_init(&ssout,write,fdout,outbuf,sizeof outbuf); + + while (len-- > 0) + if (buffer_put(&ssout,"",1) == -1) + strerr_die6sys(111,FATAL,"unable to write .../",subdir,"/",file,": "); + + if (buffer_flush(&ssout) == -1) + strerr_die6sys(111,FATAL,"unable to write .../",subdir,"/",file,": "); + if (fsync(fdout) == -1) + strerr_die6sys(111,FATAL,"unable to write .../",subdir,"/",file,": "); + if (close(fdout) == -1) /* NFS silliness */ + strerr_die6sys(111,FATAL,"unable to write .../",subdir,"/",file,": "); + + if (chown(file,uid,gid) == -1) + strerr_die6sys(111,FATAL,"unable to chown .../",subdir,"/",file,": "); + if (chmod(file,mode) == -1) + strerr_die6sys(111,FATAL,"unable to chmod .../",subdir,"/",file,": "); +} + +main() +{ + fdsourcedir = open_read("."); + if (fdsourcedir == -1) + strerr_die2sys(111,FATAL,"unable to open current directory: "); + + umask(077); + hier(); + _exit(0); +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/install.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/install.o new file mode 100644 index 0000000000000000000000000000000000000000..1061583cc2b582d4a9d5d91f8803da3822e30de9 GIT binary patch literal 11176 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 M#IK8ZRCVkB52c3pf&c&j literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/instcheck.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/instcheck.c new file mode 100644 index 0000000..c945e67 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/instcheck.c @@ -0,0 +1,108 @@ +#include +#include +#include "strerr.h" +#include "error.h" +#include "readwrite.h" +#include "exit.h" + +extern void hier(); + +#define FATAL "instcheck: fatal: " +#define WARNING "instcheck: warning: " + +void perm(prefix1,prefix2,prefix3,file,type,uid,gid,mode) +char *prefix1; +char *prefix2; +char *prefix3; +char *file; +int type; +int uid; +int gid; +int mode; +{ + struct stat st; + + if (stat(file,&st) == -1) { + if (errno == error_noent) + strerr_warn6(WARNING,prefix1,prefix2,prefix3,file," does not exist",0); + else + strerr_warn4(WARNING,"unable to stat .../",file,": ",&strerr_sys); + return; + } + + if ((uid != -1) && (st.st_uid != uid)) + strerr_warn6(WARNING,prefix1,prefix2,prefix3,file," has wrong owner",0); + if ((gid != -1) && (st.st_gid != gid)) + strerr_warn6(WARNING,prefix1,prefix2,prefix3,file," has wrong group",0); + if ((st.st_mode & 07777) != mode) + strerr_warn6(WARNING,prefix1,prefix2,prefix3,file," has wrong permissions",0); + if ((st.st_mode & S_IFMT) != type) + strerr_warn6(WARNING,prefix1,prefix2,prefix3,file," has wrong type",0); +} + +void h(home,uid,gid,mode) +char *home; +int uid; +int gid; +int mode; +{ + perm("","","",home,S_IFDIR,uid,gid,mode); +} + +void d(home,subdir,uid,gid,mode) +char *home; +char *subdir; +int uid; +int gid; +int mode; +{ + if (chdir(home) == -1) + strerr_die4sys(111,FATAL,"unable to switch to ",home,": "); + perm("",home,"/",subdir,S_IFDIR,uid,gid,mode); +} + +void p(home,fifo,uid,gid,mode) +char *home; +char *fifo; +int uid; +int gid; +int mode; +{ + if (chdir(home) == -1) + strerr_die4sys(111,FATAL,"unable to switch to ",home,": "); + perm("",home,"/",fifo,S_IFIFO,uid,gid,mode); +} + +void c(home,subdir,file,uid,gid,mode) +char *home; +char *subdir; +char *file; +int uid; +int gid; +int mode; +{ + if (chdir(home) == -1) + strerr_die4sys(111,FATAL,"unable to switch to ",home,": "); + if (chdir(subdir) == -1) + strerr_die6sys(111,FATAL,"unable to switch to ",home,"/",subdir,": "); + perm(".../",subdir,"/",file,S_IFREG,uid,gid,mode); +} + +void z(home,file,len,uid,gid,mode) +char *home; +char *file; +int len; +int uid; +int gid; +int mode; +{ + if (chdir(home) == -1) + strerr_die4sys(111,FATAL,"unable to switch to ",home,": "); + perm("",home,"/",file,S_IFREG,uid,gid,mode); +} + +main() +{ + hier(); + _exit(0); +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/instcheck.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/instcheck.o new file mode 100644 index 0000000000000000000000000000000000000000..84234ff4049b51e408e1b7713526a452cfd24116 GIT binary patch literal 5400 zcmc(hYiv|S6vwA8s0dwDj7@~}1_x72Sy&{bJTz_Cg21I3!OF<=p8J!kHm-OJE5L_RRt z-I@8#ng5(KXYQSSBV?^EEGS@93fR*u*CWc<#ME57MmB5M3^t7g(q?kB^fHn_CXkkm z*49?PuVR<9GDQO)GDSNd4vJHjXyF$v=v=N7-&?}rW0u&#C(NCrIM3``$BjC1vrb$+ zhAx=mtSQa}MUc-9rjGD2KvF)LF7WN*V3E9$ab_%Q;46I<%-4Gf#%q(AOslUV$e2?V zT(*PP^gF!vD;QvP;<6=vvBVWiTswxqJW%@7AZ{*J6>yhW* zvoCixZ)7Q^wjZC@JILn`wc>P89M1-QOFn1b<9yz&|26m0|Kwl zIy=;O8R~363DkPNY;9J>^6 z{7?E9F9`Sp^W7%wPhwk#6K;aqiMw?hwc>Vr*zefg4)eFbhBALsBEkIe7JltV3e{-y(!;ZoXI3c!w&9mzlK>C}vNKfwS2ZO=wo1&@IsQ&Bn!pRNFB<8y8 zQD_%?`qZ3R=C(E|;rpSB>y#>ka#cUBxSMqap-OA((ulrR6%3%}|D7Lzx#-to_<9Si z|AiMq8*Q;r9a8N=NpnBlD(;CKk}Zm#a1Au{m~gC9Jy-{@0|oaFC22nG-*dpo7ieZn zr~02)ktJ?Jx7`R>XK1<4^FPs@>Hg}r4*=Hp9xZ8pn>#K0tIx;2zISL`jR8a1s0OD) z`#$*U@gtjT{r(v+0A-t7WqzdE9k`+ybYt#+lc-iyRZ_ZxRu>fjYXIu{ftd(0!2-`y&!Pda}oj{bOc%GCo*I+zzM z^EFO7e#Ld2xMsi7m0?MZlMeo;!J_MY;Nd5Rp zp>c{gu5pUDM{zygH$A)re97*o;`%t;OMyU*q7 z{i*Ns9F5bts!|;Fz5Bdgv!}RT);Pu0q;ZO?Q*k}6*A&;|I_BZtxP~=-%KJ|mr?^Hv zI^MV*E^!YS?GME@N8=RNT#Zv)ixk)6dP;FUuCS& 1000.0) d = 1000.0; + millisecs = d * 1000.0 + 20.0; + } + + for (i = 0;i < len;++i) + x[i].revents = 0; + +#ifdef IOPAUSE_POLL + + poll(x,len,millisecs); + /* XXX: some kernels apparently need x[0] even if len is 0 */ + /* XXX: how to handle EAGAIN? are kernels really this dumb? */ + /* XXX: how to handle EINVAL? when exactly can this happen? */ + +#else +{ + + struct timeval tv; + fd_set rfds; + fd_set wfds; + int nfds; + int fd; + + FD_ZERO(&rfds); + FD_ZERO(&wfds); + + nfds = 1; + for (i = 0;i < len;++i) { + fd = x[i].fd; + if (fd < 0) continue; + if (fd >= 8 * sizeof(fd_set)) continue; /*XXX*/ + + if (fd >= nfds) nfds = fd + 1; + if (x[i].events & IOPAUSE_READ) FD_SET(fd,&rfds); + if (x[i].events & IOPAUSE_WRITE) FD_SET(fd,&wfds); + } + + tv.tv_sec = millisecs / 1000; + tv.tv_usec = 1000 * (millisecs % 1000); + + if (select(nfds,&rfds,&wfds,(fd_set *) 0,&tv) <= 0) + return; + /* XXX: for EBADF, could seek out and destroy the bad descriptor */ + + for (i = 0;i < len;++i) { + fd = x[i].fd; + if (fd < 0) continue; + if (fd >= 8 * sizeof(fd_set)) continue; /*XXX*/ + + if (x[i].events & IOPAUSE_READ) + if (FD_ISSET(fd,&rfds)) x[i].revents |= IOPAUSE_READ; + if (x[i].events & IOPAUSE_WRITE) + if (FD_ISSET(fd,&wfds)) x[i].revents |= IOPAUSE_WRITE; + } + +} +#endif + +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/iopause.h b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/iopause.h new file mode 100644 index 0000000..2cf5cf8 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/iopause.h @@ -0,0 +1,18 @@ +#ifndef IOPAUSE_H +#define IOPAUSE_H + +/* sysdep: +poll */ +#define IOPAUSE_POLL + +#include +#include + +typedef struct pollfd iopause_fd; +#define IOPAUSE_READ POLLIN +#define IOPAUSE_WRITE POLLOUT + +#include "taia.h" + +extern void iopause(iopause_fd *,unsigned int,struct taia *,struct taia *); + +#endif diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/iopause.h1 b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/iopause.h1 new file mode 100644 index 0000000..dae0a33 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/iopause.h1 @@ -0,0 +1,19 @@ +#ifndef IOPAUSE_H +#define IOPAUSE_H + +/* sysdep: -poll */ + +typedef struct { + int fd; + short events; + short revents; +} iopause_fd; + +#define IOPAUSE_READ 1 +#define IOPAUSE_WRITE 4 + +#include "taia.h" + +extern void iopause(iopause_fd *,unsigned int,struct taia *,struct taia *); + +#endif diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/iopause.h2 b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/iopause.h2 new file mode 100644 index 0000000..2cf5cf8 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/iopause.h2 @@ -0,0 +1,18 @@ +#ifndef IOPAUSE_H +#define IOPAUSE_H + +/* sysdep: +poll */ +#define IOPAUSE_POLL + +#include +#include + +typedef struct pollfd iopause_fd; +#define IOPAUSE_READ POLLIN +#define IOPAUSE_WRITE POLLOUT + +#include "taia.h" + +extern void iopause(iopause_fd *,unsigned int,struct taia *,struct taia *); + +#endif diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/iopause.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/iopause.o new file mode 100644 index 0000000000000000000000000000000000000000..2863302323d5641c20af3b104486214d9e7dc0ff GIT binary patch literal 1912 zcmbuAUrQ8G6u{58Yi_1Hn^XuD?t|0@dTGs|dXQOH-4V8k(kM!7cAG_M*Ijl-w0bC5 zj0TPT41Iy#dr~qAf{-A3@5O==Tj))&b7t<%yW{v$7k17$zkB}Nd+wdt$HUo?CPe`; z6c~VAOHhFK64YF*K|8cUYJAlBoEjT-wsq&rxbs_gK3>|S8uJ>)tk+P>uS&X_qm;&9Wns4 z7n&=fUpwL{pgg<=%6v=-wY5Z+aj)ITPw=@{BnP9h=S{=W&ZST$8h;udi6&~zndnu> zq|=w;i6JvLZOp{`**VtNn`Fr|o(jOM2PNCcp|q=>oDy2qEE>!<=WSs34BG&fvn*iM zG8rsy*%#0t7jtT|P&G;>uza~xGH1|#rfi!mb7j2OvW@(GzRdp;ag3%T#-nK%8n@gY zNHZ}>C-pe~!ahdkI#0OF=MJHyIuUMna(RmL5VwWc5{ggyYxUqf<^0$9B*xOZI`AhC zQQyB`v3?=b7)0?+axm!xacJ&y_aWj089>FqCz`w4;(3TZQU9o=B3|&z$apC)fIl@3 zyBg?T-y8eHPX;9o@I8#o-+L-4;tOO*!=IMyJ-tH~ao=BnCp@4H8TG)w|AWYa>ObT6 zFNO2+@Yk2;WS#uN@QZ&qv67ml^Vd8v~jp>o|#qZ&?+r~jXfq*>Ty>0&6 zFF7g{K#!tBhqN#8-k(J7e+MYn>3ul8k3s(D_u(*It{AhH$@0Lm>9h1m3I?_@ZA=zT z{5)35#iD0gvpG*ODwS$^9@Dx*e6#5;(Oucbk3NkNZ`!?M^iLu9BZ)^PUX!>g@kNQ# U9Ta(9N}Ntd@HpqKDCPV82gUEt2mk;8 literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/ip4.h b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/ip4.h new file mode 100644 index 0000000..b906557 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/ip4.h @@ -0,0 +1,11 @@ +#ifndef IP4_H +#define IP4_H + +extern unsigned int ip4_scan(char *,char *); +extern unsigned int ip4_fmt(char *,char *); + +#define IP4_FMT 20 + +extern const char ip4loopback[4]; /* = {127,0,0,1}; */ + +#endif diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/ip4_fmt.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/ip4_fmt.c new file mode 100644 index 0000000..c605634 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/ip4_fmt.c @@ -0,0 +1,18 @@ +#include "fmt.h" +#include "ip4.h" + +unsigned int ip4_fmt(char *s,char ip[4]) +{ + unsigned int len; + unsigned int i; + + len = 0; + i = fmt_ulong(s,(unsigned long) (unsigned char) ip[0]); len += i; if (s) s += i; + if (s) *s++ = '.'; ++len; + i = fmt_ulong(s,(unsigned long) (unsigned char) ip[1]); len += i; if (s) s += i; + if (s) *s++ = '.'; ++len; + i = fmt_ulong(s,(unsigned long) (unsigned char) ip[2]); len += i; if (s) s += i; + if (s) *s++ = '.'; ++len; + i = fmt_ulong(s,(unsigned long) (unsigned char) ip[3]); len += i; if (s) s += i; + return len; +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/ip4_fmt.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/ip4_fmt.o new file mode 100644 index 0000000000000000000000000000000000000000..041d748041d28c5ded36dde6814ba4d48345fbb0 GIT binary patch literal 1632 zcmbu8Pis>_5Wr{Oi>B3*#6O3EN^=m2U>BpMhzCh*w67o*)QVyyyu?>q%u7nLV%39( zs_?)-kNORYA0T)VL2SQ*;GtK+i-HG1A5Vk^RyUd4(3Lyg>Q)Nuc6t7NcI>I_DlS&+ zOD`3Xz%f9v|K%;fK^YCe9$f*pl4I^jdT0&Lco;c-w0iV&K9hUlR5GLGOnx=>+=c0> zsk8Y)C8#a=&HMyE%}H23(h`R1y<02|{ zPvrB|K=nE4{4^4suXza>)wkD41;;Fh9Xo@5n^DSa5=@BQhs>UxnSYZEW7*r1ZO@Lv z*VRzIs@%OO>FoCThmj@Kf2rQj5tXlnU0-usQd|nY^=(eJn>aDzNu3Z+x?$p~Nvnvv zeaf8<7t%WcS~QpaMnC%hb^y8kUz5p8%M;awQ1Ch^4bZCIZ?u|s$)Axy@tx3YfA!-< e@01qZmC3J5`Zs?(fWI2RUk~7U#p(T<@8ma~dABD3 literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/ip4_scan.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/ip4_scan.c new file mode 100644 index 0000000..7a61371 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/ip4_scan.c @@ -0,0 +1,19 @@ +#include "scan.h" +#include "ip4.h" + +unsigned int ip4_scan(char *s,char ip[4]) +{ + unsigned int i; + unsigned int len; + unsigned long u; + + len = 0; + i = scan_ulong(s,&u); if (!i) return 0; ip[0] = u; s += i; len += i; + if (*s != '.') return 0; ++s; ++len; + i = scan_ulong(s,&u); if (!i) return 0; ip[1] = u; s += i; len += i; + if (*s != '.') return 0; ++s; ++len; + i = scan_ulong(s,&u); if (!i) return 0; ip[2] = u; s += i; len += i; + if (*s != '.') return 0; ++s; ++len; + i = scan_ulong(s,&u); if (!i) return 0; ip[3] = u; s += i; len += i; + return len; +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/ip4_scan.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/ip4_scan.o new file mode 100644 index 0000000000000000000000000000000000000000..587f8c861aefb3f7331712dcd9a01d8c0fe323eb GIT binary patch literal 1664 zcmbVMPiqrF6rateO{&F4sZda84uiB{7o$arh-_)JQyE2tf`XC#|R=7JQOU%_ck-_W?V0QF#F#7y?^uG%EJ)g`BaRr%t+DzP?PK*4&GPyz9pE6H;&nksczuPstoD(u z_w>7j1vf27$K+R)aa4X5?^Vh?weoUHC0%;UgJtyPvZ<@Di`ToZ3As5DBvVj+=@Dyr zYPSzPkLR1s=B}$f8sr_@+O#&lPXdmu^x_A|dT@hS%Nfh=PNiSLtSDf|Lkl50$S*(b ztfj65$>$x{4_$kicwsB!_}JLF>_Fb1ne!^yVdsozC62;UjMIyqDoUSVDp-#^Pj zC|-$9BZaHUgIucajmW@upjJEGJPk& zXkzI9CJv18Jq(yRyJ-9^R3c=iMcteox^JtYY^m6Tz_E9;|1QAd>Njv$K-uuS_c815 zS=uG^OOjvV+itgDz4$D4>`u@>?t~Fnn=}g8yIr;$Y?5jRKyL C1kJPn literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/ip6.h b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/ip6.h new file mode 100644 index 0000000..88ff120 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/ip6.h @@ -0,0 +1,28 @@ +#ifndef IP6_H +#define IP6_H + +#include "byte.h" + +extern unsigned int scan_ip6(const char *src,char *ip); +extern unsigned int fmt_ip6(char *dest,const char *ip); + +extern unsigned int scan_ip6_flat(const char *src,char *); +extern unsigned int fmt_ip6_flat(char *dest,const char *); + +/* + ip6 address syntax: (h = hex digit), no leading '0' required + 1. hhhh:hhhh:hhhh:hhhh:hhhh:hhhh:hhhh:hhhh + 2. any number of 0000 may be abbreviated as "::", but only once + flat ip6 address syntax: + hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh + */ + +#define IP6_FMT 40 + +extern const unsigned char V4mappedprefix[12]; /*={0,0,0,0,0,0,0,0,0,0,0xff,0xff}; */ +extern const unsigned char V6loopback[16]; /*={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1}; */ +extern const unsigned char V6any[16]; /*={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; */ + +#define ip6_isv4mapped(ip) (byte_equal(ip,12,V4mappedprefix)) + +#endif diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/ip6_fmt.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/ip6_fmt.c new file mode 100644 index 0000000..d7c010a --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/ip6_fmt.c @@ -0,0 +1,64 @@ +#include "fmt.h" +#include "byte.h" +#include "ip4.h" +#include "ip6.h" + +unsigned int ip6_fmt(char *s,char ip[16]) +{ + unsigned long len,temp, k, pos0=0,len0=0, pos1=0, compr=0; + + for (k=0; k<16; k+=2) { + if (ip[k]==0 && ip[k+1]==0) { + if (!compr) { + compr=1; + pos1=k; + } + if (k==14) { k=16; goto last; } + } else if (compr) { + last: + if ((temp=k-pos1) > len0) { + len0=temp; + pos0=pos1; + } + compr=0; + } + } + + for (len=0,k=0; k<16; k+=2) { + if (k==12 && ip6_isv4mapped(ip)) { + len += ip4_fmt(s,ip+12); + break; + } + if (pos0==k && len0) { + if (k==0) { ++len; if (s) *s++ = ':'; } + ++len; if (s) *s++ = ':'; + k += len0-2; + continue; + } + temp = ((unsigned long) (unsigned char) ip[k] << 8) + + (unsigned long) (unsigned char) ip[k+1]; + temp = fmt_xlong(s,temp); len += temp; if (s) s += temp; + if (k<14) { ++len; if (s) *s++ = ':'; } + } + + return len; +} + +static char tohex(char num) { + if (num<10) + return num+'0'; + else if (num<16) + return num-10+'a'; + else + return -1; +} + +unsigned int ip6_fmt_flat(char *s,char ip[16]) +{ + int i; + for (i=0; i<16; i++) { + *s++=tohex((unsigned char)ip[i] >> 4); + *s++=tohex((unsigned char)ip[i] & 15); + } + return 32; +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/ip6_fmt.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/ip6_fmt.o new file mode 100644 index 0000000000000000000000000000000000000000..75b11a2946bb482c8bb98f866e04665eaf6963f5 GIT binary patch literal 2096 zcmbtV%}*Og6rZ(?V;bXiA`~GN#Xg}VDl0ZYh%ZH6u;ba5q*fd9p+MXP)&YS5!5TE!ngL3P&r>e;zaut$@OVz5UDv89QQi&)kIW$4}a^73d#G8$|Bu|=oZ+`Fh z-kW(lyL&CscgiCOgo{8%IJ z@Qd?pFb8w1a`7hSxD|w{&w6Sn%olUZYGE!2bt(nK$RZM{xfY098%V$OK9D_I5^(#Py*uZ8F*_osf<<%aVMwY!V{PUdwJkYAJT1QY>IU@bK*J^Vb4at$vE# zpU=SW6nA~6&uJsiM;_bX04I*Nw`#`_ueKA!t3F}C@rk}G-Z!Uw+vg?xV^P7eF9#j_ zNirAS55!Y!ZGVfvj>2%igGf2H2i~y<-n$1*#-`iSnXDlVb1R*h&vF7Rb<5Lr;&4Wimi*#SBmY0%EOG3)^s%5c0> b_;2C-3l6-_fk(kc!931;*lwd0ocHlHrh^~L literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/load b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/load new file mode 100755 index 0000000..951c976 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/load @@ -0,0 +1,4 @@ +#!/bin/sh +# WARNING: This file was auto-generated. Do not edit! +main="$1"; shift +exec gcc -s -o "$main" "$main".o ${1+"$@"} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/makelib b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/makelib new file mode 100755 index 0000000..f94bcf3 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/makelib @@ -0,0 +1,6 @@ +#!/bin/sh +# WARNING: This file was auto-generated. Do not edit! +main="$1"; shift +rm -f "$main" +ar cr "$main" ${1+"$@"} +ranlib "$main" diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/mconnect b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/mconnect new file mode 100755 index 0000000..4526dcd --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/mconnect @@ -0,0 +1,3 @@ +#!/bin/sh +# WARNING: This file was auto-generated. Do not edit! +exec /usr/local/bin/tcpclient -RHl0 -- "${1-0}" "${2-25}" /usr/local/bin/mconnect-io diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/mconnect-io b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/mconnect-io new file mode 100755 index 0000000000000000000000000000000000000000..e9b5ba13607836d89b144da6df0b427857f8b52b GIT binary patch literal 12648 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 G>;Df&t4ZMi literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/mconnect-io.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/mconnect-io.c new file mode 100644 index 0000000..5cd4ada --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/mconnect-io.c @@ -0,0 +1,53 @@ +#include "sig.h" +#include "wait.h" +#include "fork.h" +#include "buffer.h" +#include "strerr.h" +#include "readwrite.h" +#include "exit.h" + +char outbuf[512]; +buffer bout; + +char inbuf[512]; +buffer bin; + +int myread(int fd,char *buf,int len) +{ + buffer_flush(&bout); + return read(fd,buf,len); +} + +main() +{ + int pid; + int wstat; + char ch; + + sig_ignore(sig_pipe); + + pid = fork(); + if (pid == -1) strerr_die2sys(111,"mconnect-io: fatal: ","unable to fork: "); + + if (!pid) { + buffer_init(&bin,myread,0,inbuf,sizeof inbuf); + buffer_init(&bout,write,7,outbuf,sizeof outbuf); + + while (buffer_get(&bin,&ch,1) == 1) { + if (ch == '\n') buffer_put(&bout,"\r",1); + buffer_put(&bout,&ch,1); + } + _exit(0); + } + + buffer_init(&bin,myread,6,inbuf,sizeof inbuf); + buffer_init(&bout,write,1,outbuf,sizeof outbuf); + + while (buffer_get(&bin,&ch,1) == 1) + buffer_put(&bout,&ch,1); + + kill(pid,sig_term); + wait_pid(&wstat,pid); + + _exit(0); +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/mconnect-io.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/mconnect-io.o new file mode 100644 index 0000000000000000000000000000000000000000..2e63e86bcea84028ebeee381ac494d7afff64d29 GIT binary patch literal 3632 zcmbuBU5Fc16vuCx)vjyzqpjAc)g2+UE4b0r`rx7^%YHO!sGwBD7UCqCY=%uH%Va`# zOQDstg<-p(_)>iGT@ggkb{}*>Wi9w16%>8wqwJ!zwfN8nC7%DCdpC#KnHN2fx##}w z|DJp9$K1);nZoRjL_%mwh$Es`(^Lo}+4FPK&51!VAdbJD@BA^AUw#g3`9(Z8@W`&o zqI0+Fe>;5sCXowk!x#2a=*cT$hY(k#==zr^zQQBFax#5T_F;n6oz&9P$mZYo4Ugu; zDw53mH)LPQx0B9BqCI!+O#0wJ`v=(?j(l9ep!|AY8s)Yb-%GHUXY{II?mdkRu{qW4c85o4 zNlvCW3VtPh+yAlP*VA`j^8cb8N=^Fz^p?v1wc!6Y?cd5T?@t$&E9w61T4A}K9?5sU zNo^u4A=-{vs#}KFG^$N^e!>uqa?^3FvNvuwCyc7;nRSAL;(BHSPKsG;6g2XaF-?jqfN^b5})ENc8b8pys2 zimhjO{H=zN16`l^vm3&)nv7gA ziI83&o>Gh+=PxRLBSya%!#gqjQVf4DhJO&lKaAlY#qiH#_}4L!t*2bu zvqXt%x^e2{*c<6OfKTV27jo|Dgj>#=}v z|HGi?=N0D{hWNN6b^Nyg$)MjOz2H$%KKNe7ZN~LnfE>lc@!yHjUu60R$=CV3&-6V1 z%S^wI=|5q5++MghV4nqroEOjYisHzVkGmeD|2{_l3)AyFZ!kU2bCdCh$k+3|!+45u zeN`gQhZ!GK_Z9dfj6b0`_KV-*2SOZs4?C>&*2Hi z`TAHaK0k*GOwZ5ZX~y|EJj*!W-}5o?KaSCV%Jh%1`Ce!IamEeuVOVGEfwr7-G}qsi Fe*wRM+$jJ6 literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/mconnect.1 b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/mconnect.1 new file mode 100644 index 0000000..6648367 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/mconnect.1 @@ -0,0 +1,36 @@ +.TH mconnect 1 +.SH NAME +mconnect \- connect to the SMTP server on a host +.SH SYNTAX +.B mconnect +[ +.I host +[ +.I port +] +] +.SH DESCRIPTION +.B mconnect +connects to +.I port +on +.IR host . +It sends its input to +.IR host , +adding a CR to each line. +Meanwhile it prints anything it receives from +.IR host . + +If +.I port +is not supplied, +.B mconnect +uses port 25 (SMTP). + +If +.I host +is not supplied, +.B mconnect +connects to the local host. +.SH "SEE ALSO" +tcpclient(1) diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/mconnect.sh b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/mconnect.sh new file mode 100644 index 0000000..9629b90 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/mconnect.sh @@ -0,0 +1 @@ +exec HOME/bin/tcpclient -RHl0 -- "${1-0}" "${2-25}" HOME/bin/mconnect-io diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/ndelay.h b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/ndelay.h new file mode 100644 index 0000000..60b788c --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/ndelay.h @@ -0,0 +1,7 @@ +#ifndef NDELAY_H +#define NDELAY_H + +extern int ndelay_on(int); +extern int ndelay_off(int); + +#endif diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/ndelay_off.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/ndelay_off.c new file mode 100644 index 0000000..9daa8cd --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/ndelay_off.c @@ -0,0 +1,12 @@ +#include +#include +#include "ndelay.h" + +#ifndef O_NONBLOCK +#define O_NONBLOCK O_NDELAY +#endif + +int ndelay_off(int fd) +{ + return fcntl(fd,F_SETFL,fcntl(fd,F_GETFL,0) & ~O_NONBLOCK); +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/ndelay_off.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/ndelay_off.o new file mode 100644 index 0000000000000000000000000000000000000000..56564a12503ad62ab4d50cdd24681879b81ffc52 GIT binary patch literal 1384 zcmbVMJxjx25WX0-ewHW>ih^;dDCmn(ad41`UkD6GaB>-jnIL!gmrr!nqvj<*aep zf_h_RWzn2i^$JH$V9v8SHal%GYceqbSa@2FoC4~on&^_Ss@{piBCi$!D>{(_tPqC4 zV$>_;{i;*;fVq`&*$Xfvs6-yy*xsKGBgZ}Fo%~;!m`bZ^S6*RrKb}$I49O;Q7#~`m zDrQ@P%y6O$HPz|h{vg-m9H)!OQj#6XR%=ZmNALV^{sQJwUvxrQM19e};6(qzx6n{~ zB5sGzFXp8A2@?4Nw-KZIs$6qmR3X&ZP2^RKQf`zy;i|EHNT|D`Sdo7q61i6M$yawr zp$1>dGtcWrO|z@>cOsTnKVBAcf6b2}sX~3V!plb*si$s?`bg~r(XxJAMNGI$g;C literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/ndelay_on.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/ndelay_on.c new file mode 100644 index 0000000..eccd8c8 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/ndelay_on.c @@ -0,0 +1,12 @@ +#include +#include +#include "ndelay.h" + +#ifndef O_NONBLOCK +#define O_NONBLOCK O_NDELAY +#endif + +int ndelay_on(int fd) +{ + return fcntl(fd,F_SETFL,fcntl(fd,F_GETFL,0) | O_NONBLOCK); +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/ndelay_on.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/ndelay_on.o new file mode 100644 index 0000000000000000000000000000000000000000..7bba01b3d54dec187b02faa80a3f9b3a679518d3 GIT binary patch literal 1384 zcmbVMJ4*vW5T46LllbBkK|#f{P!x3WR4gnc;v)zmqF9K9T;fT@mHqiPvuUm|&rcM?7>xoOfH1J+#( zb!KyO&7R%zvX`!JuZU%_wBQJ5E;0c`rB)2wEb5>f>AbSaUcnWCR}Da%yMYTLTd9Bu zQ7?aXQFeqSko^Z8SVwW}X43%LnAy72lsr`r@4hp(oNDcfwjG3ujjCy2ItVTzZJtS*+? zY)$!}Fd^|DK(8Oqkk-$%j2J=9e`_J-pX1*}?X2XB9JFk>$oWBmc)E{--h_7h(~M+_ PKopMKAqqg>r~Zz=ix6A^ literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/old-rules.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/old-rules.c new file mode 100644 index 0000000..7225115 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/old-rules.c @@ -0,0 +1,101 @@ +#include "alloc.h" +#include "stralloc.h" +#include "open.h" +#include "cdb.h" +#include "rules.h" + +stralloc rules_name = {0}; + +static struct cdb c; + +static int dorule(void (*callback)(char *,unsigned int)) +{ + char *data; + unsigned int datalen; + + switch(cdb_find(&c,rules_name.s,rules_name.len)) { + case -1: return -1; + case 0: return 0; + } + + datalen = cdb_datalen(&c); + data = alloc(datalen); + if (!data) return -1; + if (cdb_read(&c,data,datalen,cdb_datapos(&c)) == -1) { + alloc_free(data); + return -1; + } + + callback(data,datalen); + alloc_free(data); + return 1; +} + +static int doit(void (*callback)(char *,unsigned int),char *ip,char *host,char *info) +{ + int r; + + if (info) { + if (!stralloc_copys(&rules_name,info)) return -1; + if (!stralloc_cats(&rules_name,"@")) return -1; + if (!stralloc_cats(&rules_name,ip)) return -1; + r = dorule(callback); + if (r) return r; + + if (host) { + if (!stralloc_copys(&rules_name,info)) return -1; + if (!stralloc_cats(&rules_name,"@=")) return -1; + if (!stralloc_cats(&rules_name,host)) return -1; + r = dorule(callback); + if (r) return r; + } + } + + if (!stralloc_copys(&rules_name,ip)) return -1; + r = dorule(callback); + if (r) return r; + + if (host) { + if (!stralloc_copys(&rules_name,"=")) return -1; + if (!stralloc_cats(&rules_name,host)) return -1; + r = dorule(callback); + if (r) return r; + } + + if (!stralloc_copys(&rules_name,ip)) return -1; + while (rules_name.len > 0) { + if (ip[rules_name.len - 1] == '.' || + (ip[rules_name.len-1]==':' && rules_name.len>1)) { + r = dorule(callback); + if (r) return r; + } + --rules_name.len; + } + + if (host) { + while (*host) { + if (*host == '.') { + if (!stralloc_copys(&rules_name,"=")) return -1; + if (!stralloc_cats(&rules_name,host)) return -1; + r = dorule(callback); + if (r) return r; + } + ++host; + } + if (!stralloc_copys(&rules_name,"=")) return -1; + r = dorule(callback); + if (r) return r; + } + + rules_name.len = 0; + return dorule(callback); +} + +int rules(void (*callback)(char *,unsigned int),int fd,char *ip,char *host,char *info) +{ + int r; + cdb_init(&c,fd); + r = doit(callback,ip,host,info); + cdb_free(&c); + return r; +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/open.h b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/open.h new file mode 100644 index 0000000..2963fa7 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/open.h @@ -0,0 +1,10 @@ +#ifndef OPEN_H +#define OPEN_H + +extern int open_read(char *); +extern int open_excl(char *); +extern int open_append(char *); +extern int open_trunc(char *); +extern int open_write(char *); + +#endif diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/open_read.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/open_read.c new file mode 100644 index 0000000..7f5ec8b --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/open_read.c @@ -0,0 +1,6 @@ +#include +#include +#include "open.h" + +int open_read(char *fn) +{ return open(fn,O_RDONLY | O_NDELAY); } diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/open_read.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/open_read.o new file mode 100644 index 0000000000000000000000000000000000000000..c596b905af25e2ecbaca256e52820da28f2d1f69 GIT binary patch literal 1336 zcmbVL!AiqG5S^H6Tdhz_62JkZA2*w_>0E00EC&CVtpa}0!0I)y4 zSYA@Vc)A3mUpCBAzVM1062GRj5(ks5RjY^A=CN$vx?O8u?1|lqE$por0*K(z3*9E# z(2s40kuUFE5z2lDqV0w*h-MIgh*;Ta-1x31L9}|FC%YKZ?S)d*&aWy#=(g^X6-y zY5oD`()m;PCD(;=c9JAwuAgZefnF17R!09saX$C&AV=rx>qQaknxMy?p{{e3@}}jn ztH&;&pwEtCIscjymDTgf*Jnqe1GVY5%9}$=z3crKk;^*&Qw^2hn%X9_SJsl2>dL{- zFv&4C|JlXNtc2>zx?$qgCG*D0nxih$f(iLFf!;iRi-~&py)7fJzqKg2_aM6sU%GA4 af)S2TB=dafPH48j!+2Sd3PA5Ld0&67i%J;) literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/open_trunc.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/open_trunc.c new file mode 100644 index 0000000..77b99ef --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/open_trunc.c @@ -0,0 +1,6 @@ +#include +#include +#include "open.h" + +int open_trunc(char *fn) +{ return open(fn,O_WRONLY | O_NDELAY | O_TRUNC | O_CREAT,0644); } diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/open_trunc.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/open_trunc.o new file mode 100644 index 0000000000000000000000000000000000000000..f24e85f0bf25eaabb625a2c48f508e7e1c4c5140 GIT binary patch literal 1344 zcmbW0!AiqG5QZnF+E%Mn@t`Q0lT@&aQSsnGB2|kZ9z;P;C5@4aCY2;Y_2Si|4mx2R_{WcNp@{IQGvCag-I-;d4~`EEw4qG(glim?SHD8k1ZCO-GZ z0nD%ORQas*wWm|iI%Q2SJJlDa_Tx1rXt* z7uij;QIOb{@&fnH7LnVDKwR084Wb!_AY$sa8rOmCxgeaj=ea(X`0dCQ^^@~z7}?Hk z`UFGy2C8T@V@z$yc%VmQWmdO}N#2=G zg}j#Tm(PxBmHtu*rR92x`Rw9SIh3x{O`xUTdH+RZS^IaTeo5+;;rlDjE!E}Vr^h+P zdgjE4XPtz2)(sPvm&`WN|GOMa=#U=-7){|flRA%jZ}Z6cTZ_f*d)IG7!GrGz2l_$m XV!>owl-vo;_P3WTLvnhD>HGQvq>xKa literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/open_write.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/open_write.c new file mode 100644 index 0000000..531b8fe --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/open_write.c @@ -0,0 +1,6 @@ +#include +#include +#include "open.h" + +int open_write(char *fn) +{ return open(fn,O_WRONLY | O_NDELAY); } diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/open_write.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/open_write.o new file mode 100644 index 0000000000000000000000000000000000000000..be4ff0a0d70b313dd93d72c0e914f1d841f5a57f GIT binary patch literal 1336 zcmbVMK}!Nr5T11{wInP$6h-YR3i8obbm$O*l>`zIbm%0jZ78M2?n2h3enS7Ce-izi zy4B4?U^BaKbRG8Oz&hW2GvAx{=J9+vsh*|`1K12Wf>FdQKz{_G6yg%(AqO8u7Qp`e z=JcWl#`7f@y@FxpGuby>koZ-d%X2aLO1XS!Z63SzmeaBJ)t=fd+REOFAb|3p+JRF? zA9#^(GV^KrQu8;TN|H9qhzO#Jqo|Z3J>pl(Q1fPZaC<{3Yb5zqD6Ptc!%KJ;S`@Nb)Xp z9Lm~xOvu?$E$gpYsJ+xvEN4fheZA<9*3F`)v&-}6kW1?SrH8tv_3UJS=B1~)H2e-E zPqCReG2)YULVVH<6R$5>G%<bZ{#87DBB!*3zBAAWDk$ji4Din|YPr}pTz@L!+- ZqacJ>!1JX$q1pZoBC`;a(L0Ra*FX1{OFaMp literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/openreadclose.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/openreadclose.c new file mode 100644 index 0000000..d1e2086 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/openreadclose.c @@ -0,0 +1,16 @@ +#include "error.h" +#include "open.h" +#include "readclose.h" +#include "openreadclose.h" + +int openreadclose(char *fn,stralloc *sa,unsigned int bufsize) +{ + int fd; + fd = open_read(fn); + if (fd == -1) { + if (errno == error_noent) return 0; + return -1; + } + if (readclose(fd,sa,bufsize) == -1) return -1; + return 1; +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/openreadclose.h b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/openreadclose.h new file mode 100644 index 0000000..99688f4 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/openreadclose.h @@ -0,0 +1,8 @@ +#ifndef OPENREADCLOSE_H +#define OPENREADCLOSE_H + +#include "stralloc.h" + +extern int openreadclose(char *,stralloc *,unsigned int); + +#endif diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/openreadclose.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/openreadclose.o new file mode 100644 index 0000000000000000000000000000000000000000..7054f9cdb3a2a87da5e9f3bd9271853c8bf6e8e4 GIT binary patch literal 1608 zcmbW1-)j>=5Xa|o)utLGiVp!r0|rUKE{%#v1qoE!6{LvZgHSoI=}L>qom?(ZeNhMq zM_&3T^zZ1Cpx|rN7x6C;6n{JjeGuY&FT3%wBrhE}X67?9yR&n9_wx4Lm7L>{5r=Nl zf6q`NnSu2b*Qr2rB$M^ZFPSte2eSLUB$GeMr>_Wi4+fnJsa5;fqZ>!SI@P2vd+U|F z>@_Pz*?m`fyPJHG$&cjyu;z`kk8L`i_XjNBKCpcng)GjC`{e8t9k(!>-{mCmvuT9r z5%k)L^6OmJrPbx-rE>L_+SvAk@>Ov~TwbV&+WgQY67A=$*xz6sM?<}3tVlI|5v!e; z#HJtnBsSV@5-C+%-jm30DH4sa)lvbc1YxYi>e_>acI-Ev>P`-?%3O-GAGMaKYd<|> zCRWVYFwgKaV==h>bn--xb?g{x?334iN$ZQ6yV^Hu&lr}r_qxP!ta;e_Yg~)Ia{Odv zPdkfQ$hPU<;2IltPlzq*ftqvT{1}O;H@waa``gmj;Jg*EbMJ86W+?e-)fv~$J;?!k zcE~mL4^5%gc0GK1c1V?aDA#qtab`HXef~LSllFh5@6SDsXT{z>8_U|ro1x!>EHkz{ zaboCWQYYY(-Y~ds(k!gCJ38ffz@^!7z#is*D$|eo-tgY-Zwzzh5sUS=DDH4roM4=R_Ru>b%7 literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/pathexec.h b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/pathexec.h new file mode 100644 index 0000000..bef93b4 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/pathexec.h @@ -0,0 +1,8 @@ +#ifndef PATHEXEC_H +#define PATHEXEC_H + +extern void pathexec_run(char *,char **,char **); +extern int pathexec_env(const char *,const char *); +extern void pathexec(char **); + +#endif diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/pathexec_env.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/pathexec_env.c new file mode 100644 index 0000000..157e71b --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/pathexec_env.c @@ -0,0 +1,67 @@ +#include "stralloc.h" +#include "alloc.h" +#include "str.h" +#include "byte.h" +#include "env.h" +#include "pathexec.h" + +static stralloc plus; +static stralloc tmp; + +int pathexec_env(const char *s,const char *t) +{ + if (!s) return 1; + if (!stralloc_copys(&tmp,s)) return 0; + if (t) { + if (!stralloc_cats(&tmp,"=")) return 0; + if (!stralloc_cats(&tmp,t)) return 0; + } + if (!stralloc_0(&tmp)) return 0; + return stralloc_cat(&plus,&tmp); +} + +void pathexec(char **argv) +{ + char **e; + unsigned int elen; + unsigned int i; + unsigned int j; + unsigned int split; + unsigned int t; + + if (!stralloc_cats(&plus,"")) return; + + elen = 0; + for (i = 0;environ[i];++i) + ++elen; + for (i = 0;i < plus.len;++i) + if (!plus.s[i]) + ++elen; + + e = (char **) alloc((elen + 1) * sizeof(char *)); + if (!e) return; + + elen = 0; + for (i = 0;environ[i];++i) + e[elen++] = environ[i]; + + j = 0; + for (i = 0;i < plus.len;++i) + if (!plus.s[i]) { + split = str_chr(plus.s + j,'='); + for (t = 0;t < elen;++t) + if (byte_equal(plus.s + j,split,e[t])) + if (e[t][split] == '=') { + --elen; + e[t] = e[elen]; + break; + } + if (plus.s[j + split]) + e[elen++] = plus.s + j; + j = i + 1; + } + e[elen] = 0; + + pathexec_run(*argv,argv,e); + alloc_free(e); +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/pathexec_env.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/pathexec_env.o new file mode 100644 index 0000000000000000000000000000000000000000..fb74d1fa7d10d875991cb266dd13009fc923a47c GIT binary patch literal 3328 zcmbuB-)|d55Xbjww@FKDyRAVEP+}nq1wpJhEuukbluOUaDvjEzP57ZU7{|FN5s7Wt zXPQ)%h;(t#>2S$IA9(G5fj~+f(va5@ctAv=6^&>rDx?ZTUl3+yZ`WR3d{3+t@6Knx zJ2N}Gcb89-BZK=Cg@~q*KGLuRCFCbxW8BY%{p1KaMAY|I(Nf=4$JEiW%hY_*L9H9H z&>f_^_*1S1msY_gwU3~g*rH|+F^&h@7tu7oRjhl|>|Gau`gtoe}*sCb! z7NKTU>G|&3)5>)vQKf5-e9Sd1SE;4NBEhBcMu22u2PF1UTHZ2VT%q>WSVT4ND%1+E zYt{p5hu2`H^vK@Nf$F|^e?xcT2tOaI9%!NW~n91JF2x|oTK(^EMip?+n8wU6y(GFQG1Les+#r3i1LhA zsdSv$NvP6jtaY(BbSAiT8~mB;3N<%cwVsEC4cJMH7e=jUCkT{=7~$cHKSAx0SVXga zb@u81o+qurLBv?*pAFV(HC74=sfMr)oBnm&1hxC9^|Mn=^Ddm-{Y3T3xO!C`S3gu! zk5LkA*FXo84ZdEl4-2iDPZU;L{~EQD+a9s;!<7bO31iar#>!1dm;>edC8ErS6yM>N))mO>6!4e% zT-!bv3^sp8O`n)aXQQX$C*$3niFo35XGloAxG-m=C!jY9PCqS11${OhH}rXf#3$26n#3oH zMG`OM&_Fr30TV^~bZV-Qp3_M@lbf5PUB3P~FfmT6gGq$HDcG%31uDD#jC)S%Vfj-^q zAMo{2v5@!f{1d=2uWpx4tatlGEjH07`PiMV*!MJ3H-5za1?h)Dv-;gT>?pdp5bK9$ zB-V@iT>vI>;ZoLJ75^hT)xf; zyt&h}v$;$vlQxP3R5OKKmN0~KsmyeNOe`3BYI0_3s=h2$C~*UF)r!GYv5mtQD0 z%yd4lXD1srM1-_i6VJjSu;kl?=Zg)wd>db3)OiN+8T$u5>DW3Yj{naIeqQ3}NBH`{ z#f5%B;sF>7epBMI|8FEN`+w-cpSig3ALb7_UWXw334T)I=wEP6;&|T$FGyV0f9c|) z4x19kccbvr&F`hCzj&tJ<{Z1Qq)$qEJV)-93`-ni3O^SlKk_+Fdgy07^aV*T-=Av| zm*d`${NOuE?04BiZ@V}wVeP(Dw_`wrpB2gf3lfjARnC3p5=QWQh7IeCT)Yqd1A@os AsQ>@~ literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/pathexec_run.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/pathexec_run.c new file mode 100644 index 0000000..17837eb --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/pathexec_run.c @@ -0,0 +1,46 @@ +#include "error.h" +#include "stralloc.h" +#include "str.h" +#include "env.h" +#include "pathexec.h" + +static stralloc tmp; + +void pathexec_run(char *file,char **argv,char **envp) +{ + char *path; + unsigned int split; + int savederrno; + + if (file[str_chr(file,'/')]) { + execve(file,argv,envp); + return; + } + + path = env_get("PATH"); + if (!path) path = "/bin:/usr/bin"; + + savederrno = 0; + for (;;) { + split = str_chr(path,':'); + if (!stralloc_copyb(&tmp,path,split)) return; + if (!split) + if (!stralloc_cats(&tmp,".")) return; + if (!stralloc_cats(&tmp,"/")) return; + if (!stralloc_cats(&tmp,file)) return; + if (!stralloc_0(&tmp)) return; + + execve(tmp.s,argv,envp); + if (errno != error_noent) { + savederrno = errno; + if ((errno != error_acces) && (errno != error_perm) && (errno != error_isdir)) return; + } + + if (!path[split]) { + if (savederrno) errno = savederrno; + return; + } + path += split; + path += 1; + } +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/pathexec_run.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/pathexec_run.o new file mode 100644 index 0000000000000000000000000000000000000000..13aa3521038c5a741a126d8ffe38abbbb5b12245 GIT binary patch literal 2848 zcmbuBPmB{)9LHa`#jVJ;W!10-2sIG`iOfTY_1tgiGgu^kCns z@L#$ewc38QS93@^|2*ca@V_d2xzG-(1s~^g&pnPS8o!>MFR!eugl=|zk7VzV?5Dt9 z)aE`GB^jg408_SopO z=c2(B2HXEwxXco7zswS|xkPf!V0saDd>8NyVy%W>?7mFy(!fiZk&DT4CciJU^}?!! zR4KDV&Fn5^igSbK9undM`}dFKx0bAG-LUh!lxLKk+Y3rzTWB(-c&8e^QH9xe!?{M5 zYfTx7Z_WBlnKXQZDOJy7itC_*a!3O%imaM`(lr_uQ%tAPuxyC19p6$89Guwh`G)zH z=;eP*d5Fc^rrV-aMPUScLJ;PhWTUwru2h7f`))dfO>r(B0T=5C%tpdxwngxy@M-!O z#eGJ!*3+QDoYDBJB0k!0)Gt6RN_WB~4~nNgX^q;VxeNU>7)cNQWB>Qe0fN(2XPvS$}U zRkCj<*k8YI7`eDfsR%xw2}v(MugRWMN_BA;dPlOeTirE$4-QNH)A@c9xLk`Ow#9Hf zH~sX*7=AE@pNQdB44;YNXJh!q82(-iXHCPeS+ka@yVJH}GQZLM4`T3w*3FvBEPFZ($_a6t=mGitG(6DX>Y|3**aOyMoYXR)4#N|An z2#)>8d9KIkZ^r1qlJwaBI^lmKak=gff@9q*T-5*15=TAp`x3|VMEq}w<2#o4vc!ia mJ|tdjSQq!0^iN0}&pz?Z634wH{+h()e)6Eff%}g&X#5LrtCGL~ literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/prot.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/prot.c new file mode 100644 index 0000000..0a8a373 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/prot.c @@ -0,0 +1,19 @@ +#include "hasshsgr.h" +#include "prot.h" + +int prot_gid(int gid) +{ +#ifdef HASSHORTSETGROUPS + short x[2]; + x[0] = gid; x[1] = 73; /* catch errors */ + if (setgroups(1,x) == -1) return -1; +#else + if (setgroups(1,&gid) == -1) return -1; +#endif + return setgid(gid); /* _should_ be redundant, but on some systems it isn't */ +} + +int prot_uid(int uid) +{ + return setuid(uid); +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/prot.h b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/prot.h new file mode 100644 index 0000000..7dd0503 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/prot.h @@ -0,0 +1,7 @@ +#ifndef PROT_H +#define PROT_H + +extern int prot_gid(int); +extern int prot_uid(int); + +#endif diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/prot.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/prot.o new file mode 100644 index 0000000000000000000000000000000000000000..27e22d533eba40fa3da780d71f46190b2a4f614e GIT binary patch literal 1576 zcmbW1&ubG=5XWbmXj2=sN)LiUBUDjrA8xHuJd}l28$mn>9z2Cjy8VGBDZ8(bieMpL zL{1Ix^OX6C(l^LF>`!zYiXf`C*4TBot6lqhmw zl;eo1G(+Lw7rdPd3-5AT@BglZgZf9iSbqOzvHS&PKN0Dl4DIX(M&Tg$>-}$)uSD~C z6;bf|83nz$pj4f%eBvVTs}h?Q4F$d`zJcC6KbN~(8ygR5H#d{!e%z_8n!9FYIW*y| z!Xz@;QQO8%);2Blo?2=0DmFIhSu)$Pjmb2#j7(0Gy~a)&w-Yk0Zo8dyIHl9IiP?Jk zd^xjm>!oyZdR606%;>DQL?r&Y$BV;`;T1N^V|QeIK2w-=A?H|QpNjaGMc)u!5?|G^ z8lLv|TH-j?JZ=4bu0>x{{J3%~j`puH?O*+n4ZkPEPUQS|BoXHa(t16A#0>lU@?F4! z7w~f*bKGYr`Qg>6>*rqNfImCrYW)i>6z$i;_h*OHNQSZ|1+&a>cK`e{%qH#MlliT1 z+!cR+H|E;NE7PB$%hWDSoEZ9;)Cu^c8wQsqbz#w^(JB8Al*s*)6fw->lGBf7;9mT1 z4HbBAkgu`)AH?h$Kg!q~$!)eKaXLu5*0gffINaZ+EU{3)jorfEO}mE&86p6MTo;Wy j$DRHi7IM$wRfp?Dk&nC9{2JR3d>8KfvzF5_*WUjDo{n{Q literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/rblsmtpd b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/rblsmtpd new file mode 100755 index 0000000000000000000000000000000000000000..a881182fa42b14f41616cf746f4f65a711964c8a GIT binary patch literal 39104 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 TwjGo8NRx)V9Ydqr!R7xi*hRIX literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/rblsmtpd.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/rblsmtpd.c new file mode 100644 index 0000000..fc87f90 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/rblsmtpd.c @@ -0,0 +1,236 @@ +#include "byte.h" +#include "str.h" +#include "scan.h" +#include "fmt.h" +#include "env.h" +#include "exit.h" +#include "sig.h" +#include "buffer.h" +#include "readwrite.h" +#include "sgetopt.h" +#include "strerr.h" +#include "stralloc.h" +#include "commands.h" +#include "pathexec.h" +#include "dns.h" + +#define FATAL "rblsmtpd: fatal: " + +void nomem(void) +{ + strerr_die2x(111,FATAL,"out of memory"); +} +void usage(void) +{ + strerr_die1x(100,"rblsmtpd: usage: rblsmtpd -r base [ -b ] [ -R ] [ -t timeout ] [ -r base ] [ -a base ] smtpd [ arg ... ]"); +} + +char *ip_env; +static stralloc ip_reverse; + +void ip_init(void) +{ + unsigned int i; + unsigned int j; + + ip_env = env_get("TCPREMOTEIP"); + if (!ip_env) ip_env = ""; + + if (!stralloc_copys(&ip_reverse,"")) nomem(); + + i = str_len(ip_env); + while (i) { + for (j = i;j > 0;--j) if (ip_env[j - 1] == '.') break; + if (!stralloc_catb(&ip_reverse,ip_env + j,i - j)) nomem(); + if (!stralloc_cats(&ip_reverse,".")) nomem(); + if (!j) break; + i = j - 1; + } +} + +unsigned long timeout = 60; +int flagrblbounce = 0; +int flagfailclosed = 0; +int flagmustnotbounce = 0; + +int decision = 0; /* 0 undecided, 1 accept, 2 reject, 3 bounce */ +static stralloc text; /* defined if decision is 2 or 3 */ + +static stralloc tmp; + +void rbl(char *base) +{ + int i; + char *altreply = 0; + if (decision) return; + if (!stralloc_copy(&tmp,&ip_reverse)) nomem(); + i = str_chr(base, ':'); + if (base[i]) { + base[i] = 0; + altreply = base+i+1; + } + if (!stralloc_cats(&tmp,base)) nomem(); + if (altreply) { + if (dns_ip4(&text,&tmp) == -1) { + flagmustnotbounce = 1; + if (flagfailclosed) { + if (!stralloc_copys(&text,"temporary RBL lookup error")) nomem(); + decision = 2; + } + return; + } + if (text.len) { + if(!stralloc_copys(&text, "")) nomem(); + while(*altreply) { + char *x; + i = str_chr(altreply, '%'); + if(!stralloc_catb(&text, altreply, i)) nomem(); + if(altreply[i] && + altreply[i+1]=='I' && + altreply[i+2]=='P' && + altreply[i+3]=='%') { + if(!stralloc_catb(&text, ip_env, str_len(ip_env))) nomem(); + altreply+=i+4; + } else if(altreply[i]) { + if(!stralloc_cats(&text, "%")) nomem(); + altreply+=i+1; + } else { + altreply+=i; + } + } + } + } else { + if (dns_txt(&text,&tmp) == -1) { + flagmustnotbounce = 1; + if (flagfailclosed) { + if (!stralloc_copys(&text,"temporary RBL lookup error")) nomem(); + decision = 2; + } + return; + } + } + if (text.len) + if (flagrblbounce) + decision = 3; + else + decision = 2; +} + +void antirbl(char *base) +{ + if (decision) return; + if (!stralloc_copy(&tmp,&ip_reverse)) nomem(); + if (!stralloc_cats(&tmp,base)) nomem(); + if (dns_ip4(&text,&tmp) == -1) { + flagmustnotbounce = 1; + if (!flagfailclosed) + decision = 1; + return; + } + if (text.len) + decision = 1; +} + +char strnum[FMT_ULONG]; +static stralloc message; + +char inspace[64]; buffer in = BUFFER_INIT(read,0,inspace,sizeof inspace); +char outspace[1]; buffer out = BUFFER_INIT(write,1,outspace,sizeof outspace); + +void reject() { buffer_putflush(&out,message.s,message.len); } +void accept() { buffer_putsflush(&out,"250 rblsmtpd.local\r\n"); } +void greet() { buffer_putsflush(&out,"220 rblsmtpd.local\r\n"); } +void quit() { buffer_putsflush(&out,"221 rblsmtpd.local\r\n"); _exit(0); } +void drop() { _exit(0); } + +struct commands smtpcommands[] = { + { "quit", quit, 0 } +, { "helo", accept, 0 } +, { "ehlo", accept, 0 } +, { "mail", accept, 0 } +, { "rset", accept, 0 } +, { "noop", accept, 0 } +, { 0, reject, 0 } +} ; + +void rblsmtpd(void) +{ + int i; + + if (flagmustnotbounce || (decision == 2)) { + if (!stralloc_copys(&message,"451 ")) nomem(); + } + else + if (!stralloc_copys(&message,"553 ")) nomem(); + + if (text.len > 200) text.len = 200; + if (!stralloc_cat(&message,&text)) nomem(); + for (i = 0;i < message.len;++i) + if ((message.s[i] < 32) || (message.s[i] > 126)) + message.s[i] = '?'; + + buffer_puts(buffer_2,"rblsmtpd: "); + buffer_puts(buffer_2,ip_env); + buffer_puts(buffer_2," pid "); + buffer_put(buffer_2,strnum,fmt_ulong(strnum,getpid())); + buffer_puts(buffer_2,": "); + buffer_put(buffer_2,message.s,message.len); + buffer_puts(buffer_2,"\n"); + buffer_flush(buffer_2); + + if (!stralloc_cats(&message,"\r\n")) nomem(); + + if (!timeout) + reject(); + else { + sig_catch(sig_alarm,drop); + alarm(timeout); + greet(); + commands(&in,smtpcommands); + } + _exit(0); +} + +main(int argc,char **argv,char **envp) +{ + int flagwantdefaultrbl = 1; + char *x; + int opt; + + ip_init(); + + x = env_get("RBLSMTPD"); + if (x) { + if (!*x) + decision = 1; + else if (*x == '-') { + if (!stralloc_copys(&text,x + 1)) nomem(); + decision = 3; + } + else { + if (!stralloc_copys(&text,x)) nomem(); + decision = 2; + } + } + + while ((opt = getopt(argc,argv,"bBcCt:r:a:")) != opteof) + switch(opt) { + case 'b': flagrblbounce = 1; break; + case 'B': flagrblbounce = 0; break; + case 'c': flagfailclosed = 1; break; + case 'C': flagfailclosed = 0; break; + case 't': scan_ulong(optarg,&timeout); break; + case 'r': rbl(optarg); flagwantdefaultrbl = 0; break; + case 'a': antirbl(optarg); break; + default: usage(); + } + + argv += optind; + if (!*argv) usage(); + + if (flagwantdefaultrbl) usage(); + if (decision >= 2) rblsmtpd(); + + pathexec_run(*argv,argv,envp); + strerr_die4sys(111,FATAL,"unable to run ",*argv,": "); +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/rblsmtpd.c.orig b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/rblsmtpd.c.orig new file mode 100644 index 0000000..ec705cc --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/rblsmtpd.c.orig @@ -0,0 +1,236 @@ +#include "byte.h" +#include "str.h" +#include "scan.h" +#include "fmt.h" +#include "env.h" +#include "exit.h" +#include "sig.h" +#include "buffer.h" +#include "readwrite.h" +#include "sgetopt.h" +#include "strerr.h" +#include "stralloc.h" +#include "commands.h" +#include "pathexec.h" +#include "dns.h" + +#define FATAL "rblsmtpd: fatal: " + +void nomem(void) +{ + strerr_die2x(111,FATAL,"out of memory"); +} +void usage(void) +{ + strerr_die1x(100,"rblsmtpd: usage: rblsmtpd [ -b ] [ -R ] [ -t timeout ] [ -r base ] [ -a base ] smtpd [ arg ... ]"); +} + +char *ip_env; +static stralloc ip_reverse; + +void ip_init(void) +{ + unsigned int i; + unsigned int j; + + ip_env = env_get("TCPREMOTEIP"); + if (!ip_env) ip_env = ""; + + if (!stralloc_copys(&ip_reverse,"")) nomem(); + + i = str_len(ip_env); + while (i) { + for (j = i;j > 0;--j) if (ip_env[j - 1] == '.') break; + if (!stralloc_catb(&ip_reverse,ip_env + j,i - j)) nomem(); + if (!stralloc_cats(&ip_reverse,".")) nomem(); + if (!j) break; + i = j - 1; + } +} + +unsigned long timeout = 60; +int flagrblbounce = 0; +int flagfailclosed = 0; +int flagmustnotbounce = 0; + +int decision = 0; /* 0 undecided, 1 accept, 2 reject, 3 bounce */ +static stralloc text; /* defined if decision is 2 or 3 */ + +static stralloc tmp; + +void rbl(char *base) +{ + int i; + char *altreply = 0; + if (decision) return; + if (!stralloc_copy(&tmp,&ip_reverse)) nomem(); + i = str_chr(base, ':'); + if (base[i]) { + base[i] = 0; + altreply = base+i+1; + } + if (!stralloc_cats(&tmp,base)) nomem(); + if (altreply) { + if (dns_ip4(&text,&tmp) == -1) { + flagmustnotbounce = 1; + if (flagfailclosed) { + if (!stralloc_copys(&text,"temporary RBL lookup error")) nomem(); + decision = 2; + } + return; + } + if (text.len) { + if(!stralloc_copys(&text, "")) nomem(); + while(*altreply) { + char *x; + i = str_chr(altreply, '%'); + if(!stralloc_catb(&text, altreply, i)) nomem(); + if(altreply[i] && + altreply[i+1]=='I' && + altreply[i+2]=='P' && + altreply[i+3]=='%') { + if(!stralloc_catb(&text, ip_env, str_len(ip_env))) nomem(); + altreply+=i+4; + } else if(altreply[i]) { + if(!stralloc_cats(&text, "%")) nomem(); + altreply+=i+1; + } else { + altreply+=i; + } + } + } + } else { + if (dns_txt(&text,&tmp) == -1) { + flagmustnotbounce = 1; + if (flagfailclosed) { + if (!stralloc_copys(&text,"temporary RBL lookup error")) nomem(); + decision = 2; + } + return; + } + } + if (text.len) + if (flagrblbounce) + decision = 3; + else + decision = 2; +} + +void antirbl(char *base) +{ + if (decision) return; + if (!stralloc_copy(&tmp,&ip_reverse)) nomem(); + if (!stralloc_cats(&tmp,base)) nomem(); + if (dns_ip4(&text,&tmp) == -1) { + flagmustnotbounce = 1; + if (!flagfailclosed) + decision = 1; + return; + } + if (text.len) + decision = 1; +} + +char strnum[FMT_ULONG]; +static stralloc message; + +char inspace[64]; buffer in = BUFFER_INIT(read,0,inspace,sizeof inspace); +char outspace[1]; buffer out = BUFFER_INIT(write,1,outspace,sizeof outspace); + +void reject() { buffer_putflush(&out,message.s,message.len); } +void accept() { buffer_putsflush(&out,"250 rblsmtpd.local\r\n"); } +void greet() { buffer_putsflush(&out,"220 rblsmtpd.local\r\n"); } +void quit() { buffer_putsflush(&out,"221 rblsmtpd.local\r\n"); _exit(0); } +void drop() { _exit(0); } + +struct commands smtpcommands[] = { + { "quit", quit, 0 } +, { "helo", accept, 0 } +, { "ehlo", accept, 0 } +, { "mail", accept, 0 } +, { "rset", accept, 0 } +, { "noop", accept, 0 } +, { 0, reject, 0 } +} ; + +void rblsmtpd(void) +{ + int i; + + if (flagmustnotbounce || (decision == 2)) { + if (!stralloc_copys(&message,"451 ")) nomem(); + } + else + if (!stralloc_copys(&message,"553 ")) nomem(); + + if (text.len > 200) text.len = 200; + if (!stralloc_cat(&message,&text)) nomem(); + for (i = 0;i < message.len;++i) + if ((message.s[i] < 32) || (message.s[i] > 126)) + message.s[i] = '?'; + + buffer_puts(buffer_2,"rblsmtpd: "); + buffer_puts(buffer_2,ip_env); + buffer_puts(buffer_2," pid "); + buffer_put(buffer_2,strnum,fmt_ulong(strnum,getpid())); + buffer_puts(buffer_2,": "); + buffer_put(buffer_2,message.s,message.len); + buffer_puts(buffer_2,"\n"); + buffer_flush(buffer_2); + + if (!stralloc_cats(&message,"\r\n")) nomem(); + + if (!timeout) + reject(); + else { + sig_catch(sig_alarm,drop); + alarm(timeout); + greet(); + commands(&in,smtpcommands); + } + _exit(0); +} + +main(int argc,char **argv,char **envp) +{ + int flagwantdefaultrbl = 1; + char *x; + int opt; + + ip_init(); + + x = env_get("RBLSMTPD"); + if (x) { + if (!*x) + decision = 1; + else if (*x == '-') { + if (!stralloc_copys(&text,x + 1)) nomem(); + decision = 3; + } + else { + if (!stralloc_copys(&text,x)) nomem(); + decision = 2; + } + } + + while ((opt = getopt(argc,argv,"bBcCt:r:a:")) != opteof) + switch(opt) { + case 'b': flagrblbounce = 1; break; + case 'B': flagrblbounce = 0; break; + case 'c': flagfailclosed = 1; break; + case 'C': flagfailclosed = 0; break; + case 't': scan_ulong(optarg,&timeout); break; + case 'r': rbl(optarg); flagwantdefaultrbl = 0; break; + case 'a': antirbl(optarg); break; + default: usage(); + } + + argv += optind; + if (!*argv) usage(); + + if (flagwantdefaultrbl) rbl("rbl.maps.vix.com"); + if (decision >= 2) rblsmtpd(); + + pathexec_run(*argv,argv,envp); + strerr_die4sys(111,FATAL,"unable to run ",*argv,": "); +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/rblsmtpd.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/rblsmtpd.o new file mode 100644 index 0000000000000000000000000000000000000000..eabc8d6f2170c3c04e2e4a68fb1e670fa6b25ee1 GIT binary patch literal 15872 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 literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/readclose.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/readclose.c new file mode 100644 index 0000000..4265c06 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/readclose.c @@ -0,0 +1,21 @@ +#include "readwrite.h" +#include "error.h" +#include "readclose.h" + +int readclose_append(int fd,stralloc *sa,unsigned int bufsize) +{ + int r; + for (;;) { + if (!stralloc_readyplus(sa,bufsize)) { close(fd); return -1; } + r = read(fd,sa->s + sa->len,bufsize); + if (r == -1) if (errno == error_intr) continue; + if (r <= 0) { close(fd); return r; } + sa->len += r; + } +} + +int readclose(int fd,stralloc *sa,unsigned int bufsize) +{ + if (!stralloc_copys(sa,"")) { close(fd); return -1; } + return readclose_append(fd,sa,bufsize); +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/readclose.h b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/readclose.h new file mode 100644 index 0000000..49afd6c --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/readclose.h @@ -0,0 +1,9 @@ +#ifndef READCLOSE_H +#define READCLOSE_H + +#include "stralloc.h" + +extern int readclose_append(int,stralloc *,unsigned int); +extern int readclose(int,stralloc *,unsigned int); + +#endif diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/readclose.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/readclose.o new file mode 100644 index 0000000000000000000000000000000000000000..ad2758a3cbfc70057893184243eb249a4e18cd9e GIT binary patch literal 2208 zcmbuA&1(};5WpuNwXwEo6b}K5%^^qyyEIiisFbAL*hPv$wIbLWH_4V3lWg2dfwY&GMRFbl_!Xelu_0?A!M?chVDQ z{XQQE@xchRJV615{4G1_m`Uh?E=WzK*q_v;6nieLQxL z^k_J8-=7Xgmjh}zwiHyu18R7v-a$Foz9VJ&P1l2$!?9)mQox1dV`Hac1FDgo*GsVz z%5i0QFrg%lx+Z{9sTFNKi`uqaJtr*7DCml9EZCsrbz27|Td9CzndDG9mO+=2jJeFL zr56oQa%Qn;lyFALv<+qa{M2B@)^j)9R{rNVhLh=h?U9Nkg)bexh~QiwLLHPCxpzBV zxWQxlP*bT8_oG}N;hgU(rvOQ5T@jGiI)(wN`LFX6IG2_h#^DvQzTAfJg-+unvOU+) zDWma(>yFp@5zjA35)Jv8C|2f)L*$^){?R)U^TqyMKqh)Yb6Xy9*uPC&L(aW|SZ0*D z)(*DG-H%M(d++=?ay%lJC12hSZFh|NXx9nxc5j$Ce@Ic7>%flN=mrAL4oJ!92DW#l73)FsfTvIATZim0 z4*3q#EV>8n_{m-P_%3{M7f$Dl`dL9uQg#(&QMX$cEJM%d3TDMnaxFWfm&-;e5BQbT z3k5Tmp{!cDP^~yQkjWU9RWdUe((QS(1n8PpX1-)w;1p|>YSqY@yVfjUbB5AG+A-#d}&Fb58lR ff1=I@5BJu8?csE1M1G8OdRD3>MB|3w;=TO^RO=;} literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/readwrite.h b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/readwrite.h new file mode 100644 index 0000000..2a64968 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/readwrite.h @@ -0,0 +1,7 @@ +#ifndef READWRITE_H +#define READWRITE_H + +extern int read(); +extern int write(); + +#endif diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/recordio b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/recordio new file mode 100755 index 0000000000000000000000000000000000000000..c5d70cd4b5e798b60d57cb5e9babce1d9b0480c3 GIT binary patch literal 18328 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 I$mh!cALa`R!T +for output. +At the end of each line it inserts a space, a plus sign, or [EOF]; +a space indicates that there was a newline in the input or output, +and [EOF] indicates the end of input or output. + +.B recordio +prints every packet of input and output immediately. +It does not attempt to combine packets into coherent stderr lines. +For example, + +.EX + recordio sh -c 'cat /dev/fd/8 2>&1' > /dev/null +.EE + +could produce + +.EX + 5135 > cat: /dev/fd/8: Bad file descriptor +.br + 5135 > [EOF] +.EE + +or + +.EX + 5135 > cat: + +.br + 5135 > /dev/fd/8+ +.br + 5135 > : + +.br + 5135 > Bad file descriptor +.br + 5135 > [EOF] +.EE + +.B recordio +uses several lines for long packets +to guarantee that each line is printed atomically to stderr. + +.B recordio +runs as a child of +.IR program . +It exits when it sees the end of +.IR program 's +output. +.SH "SEE ALSO" +tcpserver(1) diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/recordio.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/recordio.c new file mode 100644 index 0000000..a3ee03c --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/recordio.c @@ -0,0 +1,178 @@ +#include "sig.h" +#include "buffer.h" +#include "strerr.h" +#include "str.h" +#include "byte.h" +#include "readwrite.h" +#include "exit.h" +#include "fmt.h" +#include "iopause.h" +#include "pathexec.h" + +#define FATAL "recordio: fatal: " + +char pid[FMT_ULONG]; + +char recordbuf[512]; +buffer ssrecord = BUFFER_INIT(write,2,recordbuf,sizeof recordbuf); + +void record(char *buf,int len,char *direction) /* 1 <= len <= 256 */ +{ + int i; + + while (len) { + buffer_puts(&ssrecord,pid); + buffer_puts(&ssrecord,direction); + + i = byte_chr(buf,len,'\n'); + buffer_put(&ssrecord,buf,i); + + if (i == len) { + buffer_puts(&ssrecord,"+\n"); + buffer_flush(&ssrecord); + return; + } + + buffer_puts(&ssrecord," \n"); + buffer_flush(&ssrecord); + buf += i + 1; + len -= i + 1; + } +} + +int leftstatus = 0; +char leftbuf[256]; +int leftlen; +int leftpos; + +int rightstatus = 0; +char rightbuf[256]; +int rightlen; +int rightpos; + +void doit(int fdleft,int fdright) /* copy 0 -> fdleft, copy fdright -> 1 */ +{ + struct taia stamp; + struct taia deadline; + iopause_fd x[4]; + int xlen; + iopause_fd *io0; + iopause_fd *ioleft; + iopause_fd *io1; + iopause_fd *ioright; + int r; + + for (;;) { + xlen = 0; + + io0 = 0; + if (leftstatus == 0) { + io0 = &x[xlen++]; + io0->fd = 0; + io0->events = IOPAUSE_READ; + } + ioleft = 0; + if (leftstatus == 1) { + ioleft = &x[xlen++]; + ioleft->fd = fdleft; + ioleft->events = IOPAUSE_WRITE; + } + + ioright = 0; + if (rightstatus == 0) { + ioright = &x[xlen++]; + ioright->fd = fdright; + ioright->events = IOPAUSE_READ; + } + io1 = 0; + if (rightstatus == 1) { + io1 = &x[xlen++]; + io1->fd = 1; + io1->events = IOPAUSE_WRITE; + } + + taia_now(&stamp); + taia_uint(&deadline,3600); + taia_add(&deadline,&stamp,&deadline); + iopause(x,xlen,&deadline,&stamp); + + if (io0 && io0->revents) { + r = read(0,leftbuf,sizeof leftbuf); + if (r <= 0) { + leftstatus = -1; + close(fdleft); + buffer_puts(&ssrecord,pid); + buffer_puts(&ssrecord," < [EOF]\n"); + buffer_flush(&ssrecord); + } + else { + leftstatus = 1; leftpos = 0; leftlen = r; + record(leftbuf,r," < "); + } + } + + if (ioleft && ioleft->revents) { + r = write(fdleft,leftbuf + leftpos,leftlen - leftpos); + if (r == -1) break; + leftpos += r; + if (leftpos == leftlen) leftstatus = 0; + } + + if (ioright && ioright->revents) { + r = read(fdright,rightbuf,sizeof rightbuf); + if (r <= 0) { + buffer_puts(&ssrecord,pid); + buffer_puts(&ssrecord," > [EOF]\n"); + buffer_flush(&ssrecord); + break; + } + rightstatus = 1; rightpos = 0; rightlen = r; + record(rightbuf,r," > "); + } + + if (io1 && io1->revents) { + r = write(1,rightbuf + rightpos,rightlen - rightpos); + if (r == -1) break; + rightpos += r; + if (rightpos == rightlen) rightstatus = 0; + } + } + + _exit(0); +} + +main(int argc,char **argv,char **envp) +{ + int piin[2]; + int piout[2]; + + pid[fmt_ulong(pid,getpid())] = 0; + + if (argc < 2) + strerr_die1x(100,"recordio: usage: recordio program [ arg ... ]"); + + if (pipe(piin) == -1) + strerr_die2sys(111,FATAL,"unable to create pipe: "); + if (pipe(piout) == -1) + strerr_die2sys(111,FATAL,"unable to create pipe: "); + + switch(fork()) { + case -1: + strerr_die2sys(111,FATAL,"unable to fork: "); + case 0: + sig_ignore(sig_pipe); + close(piin[0]); + close(piout[1]); + doit(piin[1],piout[0]); + } + + close(piin[1]); + close(piout[0]); + if (fd_move(0,piin[0]) == -1) + strerr_die2sys(111,FATAL,"unable to move descriptors: "); + if (fd_move(1,piout[1]) == -1) + strerr_die2sys(111,FATAL,"unable to move descriptors: "); + + pathexec_run(argv[1],argv + 1,envp); + strerr_die4sys(111,FATAL,"unable to run ",argv[1],": "); +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/recordio.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/recordio.o new file mode 100644 index 0000000000000000000000000000000000000000..9c2444a22b2bf2dde09ababe203b9715e7e76b9d GIT binary patch literal 7792 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 > 256) return 0; + } + } +} + +int remoteinfo(stralloc *out,char ipremote[4],uint16 portremote,char iplocal[4],uint16 portlocal,unsigned int timeout) +{ + int s; + int r; + + if (!stralloc_copys(out,"")) return -1; + + taia_now(&now); + taia_uint(&deadline,timeout); + taia_add(&deadline,&now,&deadline); + + s = socket_tcp(); + if (s == -1) return -1; + r = doit(out,s,ipremote,portremote,iplocal,portlocal,timeout); + close(s); + return r; +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/remoteinfo.h b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/remoteinfo.h new file mode 100644 index 0000000..0884cc1 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/remoteinfo.h @@ -0,0 +1,10 @@ +#ifndef REMOTEINFO_H +#define REMOTEINFO_H + +#include "stralloc.h" +#include "uint16.h" + +extern int remoteinfo(stralloc *,char *,uint16,char *,uint16,unsigned int); +extern int remoteinfo6(stralloc *,char *,uint16,char *,uint16,unsigned int,uint32); + +#endif diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/remoteinfo6.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/remoteinfo6.c new file mode 100644 index 0000000..cf3b7c1 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/remoteinfo6.c @@ -0,0 +1,98 @@ +#include "fmt.h" +#include "buffer.h" +#include "socket.h" +#include "error.h" +#include "iopause.h" +#include "timeoutconn.h" +#include "remoteinfo.h" + +static struct taia now; +static struct taia deadline; + +static int mywrite(int fd,char *buf,int len) +{ + iopause_fd x; + + x.fd = fd; + x.events = IOPAUSE_WRITE; + for (;;) { + taia_now(&now); + iopause(&x,1,&deadline,&now); + if (x.revents) break; + if (taia_less(&deadline,&now)) { + errno = error_timeout; + return -1; + } + } + return write(fd,buf,len); +} + +static int myread(int fd,char *buf,int len) +{ + iopause_fd x; + + x.fd = fd; + x.events = IOPAUSE_READ; + for (;;) { + taia_now(&now); + iopause(&x,1,&deadline,&now); + if (x.revents) break; + if (taia_less(&deadline,&now)) { + errno = error_timeout; + return -1; + } + } + return read(fd,buf,len); +} + +static int doit(stralloc *out,int s,char ipremote[16],uint16 portremote,char iplocal[16],uint16 portlocal,unsigned int timeout,uint32 netif) +{ + buffer b; + char bspace[128]; + char strnum[FMT_ULONG]; + int numcolons; + char ch; + + if (socket_bind6(s,iplocal,0,netif) == -1) return -1; + if (timeoutconn6(s,ipremote,113,timeout,netif) == -1) return -1; + + buffer_init(&b,mywrite,s,bspace,sizeof bspace); + buffer_put(&b,strnum,fmt_ulong(strnum,portremote)); + buffer_put(&b," , ",3); + buffer_put(&b,strnum,fmt_ulong(strnum,portlocal)); + buffer_put(&b,"\r\n",2); + if (buffer_flush(&b) == -1) return -1; + + buffer_init(&b,myread,s,bspace,sizeof bspace); + numcolons = 0; + for (;;) { + if (buffer_get(&b,&ch,1) != 1) return -1; + if ((ch == ' ') || (ch == '\t') || (ch == '\r')) continue; + if (ch == '\n') return 0; + if (numcolons < 3) { + if (ch == ':') ++numcolons; + } + else { + if (!stralloc_append(out,&ch)) return -1; + if (out->len > 256) return 0; + } + } +} + +int remoteinfo6(stralloc *out,char ipremote[16],uint16 portremote,char iplocal[16],uint16 portlocal,unsigned int timeout,uint32 netif) +{ + int s; + int r; + + if (!stralloc_copys(out,"")) return -1; + + taia_now(&now); + taia_uint(&deadline,timeout); + taia_add(&deadline,&now,&deadline); + + s = socket_tcp6(); + if (s == -1) return -1; + r = doit(out,s,ipremote,portremote,iplocal,portlocal,timeout,netif); + close(s); + return r; +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/remoteinfo6.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/remoteinfo6.o new file mode 100644 index 0000000000000000000000000000000000000000..7f6c2601208839feb20d943ef13392cdd467a587 GIT binary patch literal 4448 zcmc(iZHyB|7{{l*avX5iRuDa3@M^LeRHzj3AmlKu*Mrs6cSsMWjOBn2gbxadi5S0NB*q||L>nQ&h%rWtkdO#!B3vY*9~7eE`8=~T*J0`U#Scz$ zJ2Sue&wrkMc6PeAttYYE>+uj#JmfJ_?+HrC1z)`#Wz8sQBh!gW*C}7BG^d8S)w zD;E;bx%346EkP~imjoS9u6=}hb@1|BFjndH9{PEVe$zuwUP3-xD|df50fnAbs|OWa zT&?a?uE9{EdO&G`egb%q)$c3qtUjiMP&ar2EsqB}qU2-rVuo@0W4$wm*j}HWVZ-cF zxi&%LN~<+e-JvW1i^x|h{gww*sd>t?Swz(Vr8QDx6UJYJ2;D9(kuTv^a;64IFiy&+k4XiqPP`Lu)8)CT_ImebCgCyX+OisS!2@GHTdtxGR zc!A02^L3nHqN6#wQ{2U2=24B>tpL;>tWMu$ALKg z9)hM<_;W@T7i0n*@qdfY_dmyn(L)K%3z4?z!JX@Y8o=rhdQ|r{0-H;~*_}zT$ zQQRv}jx<-MJ~iswF=dVakaw4NC+;;{2e-@0Yj}O!9~|}e_}h0h#r>fXU$=j5+#jt> zLBAYR5%O<3vZA|tX=rX-@6BpPXi@l)@WT0#aO45INl3V~Id5sbP+LX2?h~z|p3}mX zzR4otv}S1}+*>M$KRIwDbCY&K=8;V@|;J z&b8(NM^C4`#=#OkPgKtMBQSt*EffM?i}@m6F^pO)qVC~s+9DSk-ukviCDOlRjavahYTBNS2tidWn-hD8fY<0XYS?seb|wT zGgj<7bBFQ}ztIKU9Jf;&{5kJ`8n8y|KZ^;2GRv``qic&ATv6vEzfLq5g7q4^G&PI_ z<7=GECNkwF`v4G+q!-V57Uv;8LvTF%yfEVePa-?BfGM0u9UP}O-SoC2MUL6Lxin2? zy*~C3G-pbAU}rC|#qj5R$8gqi7moY4k$#N}?{(pZ3xCCh54!N3E*$gPD9!^e{9PA* z%!QwH;b&a+kDe8In3CbE7voo9`hPjcXbuFFC8al~u-dN09 zSQi1wN&-J?S}td%k}0#WxkM~2t0i$RYm~F_%f?z-I!#Jus$aK~R;th`+PzsL-APh8 zv!oL%o7c^a5(GmQ;`7Rr`rW^(0HpXhARt$I9Kp`aUS zk~Irj8Qn3koDM(8$)sK^8fFrL)~u{)5a^o4BwrqG4(`ytUC1mU_pvL1{}{*(Z}l?H z@ip|r-(UEN28D8tdiiv~{f7nhcoqo#UW8DDKE!&2yv}RX<8u`HH#m3d-*Rx?CGYSC z`rw%^eBP7zOo@LXaXg!Z{s)QUH=E$_xyuUr;}@&o^Et;jaZH?JOC;- z#PMtt{%a+FJZ*WGq+Il-#AW{hiOc>YoMZgxkAGNpy6E>x{0`8GIFCv`n1?7{pd6R< zavn}g{7%pbpV@pKR`_iuxW>8I4=}_^M$*gst=~moaPScK*(&+qZ<1K|RfnF-$u0*M zK6@meIg-zQiQgmfHzkhWI%3^Z5=U>rJ^W+AnTKZ1ahjZm87}&ugX0=l=14wr9v*b) zZ8aeeJ9vl>ERuZWJS>yAoQH0S%X#RR_`TpQ@*vg`?;T%u@_SQou@4JeAh>u>{{c$i B1kwNi literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/rts b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/rts new file mode 100755 index 0000000..176f21e --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/rts @@ -0,0 +1,3 @@ +#!/bin/sh +# WARNING: This file was auto-generated. Do not edit! +env - PATH="`pwd`:$PATH" sh rts.tests 2>&1 | cat -v diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/rts.exp b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/rts.exp new file mode 100644 index 0000000..242d7cf --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/rts.exp @@ -0,0 +1,435 @@ +--- tcpclient prints usage message without enough arguments +tcpclient: usage: tcpclient [ -hHrRdDqQv ] [ -i localip ] [ -p localport ] [ -T timeoutconn ] [ -l localname ] [ -t timeoutinfo ] host port program +100 +--- tcpclient prints error message with unknown port name +tcpclient: fatal: unable to figure out port number for nonexistentport +111 +--- tcpclient prints error message when connection fails +tcpclient: unable to connect to 127.0.0.1 port 16: connection refused +111 +--- tcpclient -q does not print error message when connection fails +111 +--- tcpclient understands empty host name as synonym for 0 +tcpclient: unable to connect to 127.0.0.1 port 16: connection refused +111 +--- tcpclient understands unbracketed IP address +tcpclient: unable to connect to 127.0.0.1 port 16: connection refused +111 +--- tcpclient understands bracketed IP address +tcpclient: unable to connect to 127.0.0.1 port 16: connection refused +111 +--- tcpclient prints error message with unknown host name +tcpclient: fatal: no IP address for nonexistent.local. +111 +--- tcpclient prints error message with unresolvable host name +tcpclient: fatal: temporarily unable to figure out IP address for thislabelistoolongbecausednshasalimitof63charactersinasinglelabel.: protocol error +111 +--- tcpserver prints usage message without enough arguments +tcpserver: usage: tcpserver [ -1UXpPhHrRoOdDqQv ] [ -c limit ] [ -x rules.cdb ] [ -B banner ] [ -g gid ] [ -u uid ] [ -b backlog ] [ -l localname ] [ -t timeout ] host port program +100 +--- tcpserver -u 1 attempts to set uid to 1 +tcpserver: fatal: unable to set uid: permission denied +111 +--- tcpserver -U reads $UID +tcpserver: fatal: unable to set uid: permission denied +111 +--- tcpserver -g 2 attempts to set gid to 2 +tcpserver: fatal: unable to set gid: permission denied +111 +--- tcpserver -U reads $GID +tcpserver: fatal: unable to set gid: permission denied +111 +--- tcpserver prints error message with unknown port name +tcpserver: fatal: unable to figure out port number for nonexistentport +111 +--- tcpserver prints error message with unknown host name +tcpserver: fatal: no IP address for nonexistent.local. +111 +--- tcpserver prints error message with unresolvable host name +tcpserver: fatal: temporarily unable to figure out IP address for thislabelistoolongbecausednshasalimitof63charactersinasinglelabel.: protocol error +111 +--- tcpserver prints error message with non-local host name +tcpserver: fatal: unable to bind: address not available +111 +--- tcpserver sets basic environment variables +bannerPROTO=TCP +TCPLOCALHOST=Local +TCPLOCALIP=127.0.0.1 +TCPLOCALPORT=50016 +TCPREMOTEHOST=localhost +TCPREMOTEIP=127.0.0.1 +TCPREMOTEPORT=50017 +TCPREMOTEINFO=unset +0 +--- tcpclient recognizes -D, -i, -r, -h, -t +bannerPROTO=TCP +TCPLOCALHOST=Local +TCPLOCALIP=127.0.0.1 +TCPLOCALPORT=50016 +TCPREMOTEHOST=localhost +TCPREMOTEIP=127.0.0.1 +TCPREMOTEPORT=50018 +TCPREMOTEINFO=unset +0 +--- tcpclient sets basic environment variables +PROTO=TCP +TCPLOCALHOST=Local +TCPLOCALIP=127.0.0.1 +TCPLOCALPORT=50019 +TCPREMOTEHOST=unset +TCPREMOTEIP=127.0.0.1 +TCPREMOTEPORT=50016 +TCPREMOTEINFO=unset +0 +--- tcpclient looks up host names properly +PROTO=TCP +TCPLOCALHOST=localhost +TCPLOCALIP=127.0.0.1 +TCPLOCALPORT=50020 +TCPREMOTEHOST=localhost +TCPREMOTEIP=127.0.0.1 +TCPREMOTEPORT=50016 +TCPREMOTEINFO=unset +0 +--- tcpclient -v works +tcpclient: connected to 127.0.0.1 port 50016 +ok +0 +--- tcpserver prints error message with used port +tcpserver: fatal: unable to bind: address already used +111 +--- tcpcat works +bannerPROTO=TCP +TCPLOCALHOST=Local +TCPLOCALIP=127.0.0.1 +TCPLOCALPORT=50016 +TCPREMOTEHOST=localhost +TCPREMOTEIP=127.0.0.1 +TCPREMOTEINFO=unset +0 +--- mconnect works +bannerPROTO=TCP +TCPLOCALHOST=Local +TCPLOCALIP=127.0.0.1 +TCPLOCALPORT=50016 +TCPREMOTEHOST=localhost +TCPREMOTEIP=127.0.0.1 +TCPREMOTEINFO=unset +0 +--- tcprules prints usage message without enough arguments +tcprules: usage: tcprules rules.cdb rules.tmp +100 +--- tcprules prints error message if it cannot create tmp +tcprules: fatal: unable to create /dev/nonexistent/tmp: file does not exist +111 +--- tcprules prints error message if it cannot move tmp to cdb +tcprules: fatal: unable to move test.tmp to /dev/nonexistent/cdb: file does not exist +111 +--- tcprules creates a cdb file +0 +--- tcprulescheck sees deny +rule 1.2.3.4: +deny connection +0 +--- tcprulescheck does not apply deny to another host +default: +allow connection +0 +--- tcprules replaces a cdb file +0 +--- tcprulescheck finds rule with address and info +rule joe@127.0.0.1: +set environment variable which=first +allow connection +0 +--- tcprulescheck finds rule with address +rule 18.23.0.32: +set environment variable which=second +allow connection +0 +--- tcprulescheck finds one-dot wildcard +rule 127.: +set environment variable which=third +allow connection +0 +--- tcprulescheck finds zero-dot wildcard +rule : +set environment variable which=fourth +allow connection +0 +--- tcprules handles comments, address ranges, multiple variables +0 +rule 127.0.: +set environment variable which=first +set environment variable where=whatever +allow connection +rule 127.1.: +set environment variable which=first +set environment variable where=whatever +allow connection +rule 127.2.: +set environment variable which=first +set environment variable where=whatever +allow connection +rule 127.3.: +set environment variable which=first +set environment variable where=whatever +allow connection +rule 127.4.: +set environment variable which=first +set environment variable where=whatever +allow connection +rule 127.5.: +set environment variable which=first +set environment variable where=whatever +allow connection +default: +allow connection +default: +allow connection +default: +allow connection +default: +allow connection +default: +allow connection +--- tcprules handles host names +0 +rule =known.edu: +set environment variable which=known +allow connection +rule : +set environment variable which=anybody +allow connection +rule : +set environment variable which=anybody +allow connection +rule =.abuser.edu: +deny connection +rule =.abuser.edu: +deny connection +--- tcprulescheck searches for rules in the proper order +0 +rule xyz@86.75.30.9: +set environment variable which=first +allow connection +rule xyz@86.75.30.9: +set environment variable which=first +allow connection +rule xyz@=one.two.three: +set environment variable which=second +allow connection +rule 86.75.30.9: +set environment variable which=third +allow connection +rule 86.75.30.9: +set environment variable which=third +allow connection +rule 86.75.30.9: +set environment variable which=third +allow connection +rule 86.75.30.9: +set environment variable which=third +allow connection +rule =one.two.three: +set environment variable which=fourth +allow connection +rule =one.two.three: +set environment variable which=fourth +allow connection +rule 86.75.30.: +set environment variable which=fifth +allow connection +rule 86.75.30.: +set environment variable which=fifth +allow connection +rule 86.75.: +set environment variable which=sixth +allow connection +rule 86.75.: +set environment variable which=sixth +allow connection +rule 86.75.: +set environment variable which=sixth +allow connection +rule 86.75.: +set environment variable which=sixth +allow connection +rule 86.: +set environment variable which=seventh +allow connection +rule 86.: +set environment variable which=seventh +allow connection +rule 86.: +set environment variable which=seventh +allow connection +rule 86.: +set environment variable which=seventh +allow connection +rule =.two.three: +set environment variable which=eighth +allow connection +rule =.two.three: +set environment variable which=eighth +allow connection +rule =.three: +set environment variable which=ninth +allow connection +rule =.three: +set environment variable which=ninth +allow connection +rule =: +set environment variable which=tenth +allow connection +rule =: +set environment variable which=tenth +allow connection +rule : +set environment variable which=eleventh +allow connection +rule : +set environment variable which=eleventh +allow connection +--- addcr leaves an empty file alone +0 +--- addcr leaves a partial final line alone +test0 +--- addcr adds CR after the first line +test^M +0 +--- addcr adds CR after the second line +test^M +test2^M +0 +--- addcr handles nulls +t^@st^M +0 +--- delcr leaves an empty file alone +0 +--- delcr leaves a non-CR line alone +test +0 +--- delcr removes CR if a line has it +test +0 +--- delcr converts CR CR LF to CR LF +test^M +0 +--- delcr does not remove CR from a partial final line +test^M0 +--- delcr handles a non-CR partial final line +test0 +--- delcr handles nulls +t^@st +0 +--- fixcrio works +^M +hi^M +there^M +bye^M +--- recordio works +... < test $ +... > test $ +... < [EOF]$ +... > [EOF]$ +--- recordio handles multiple-line packets +... < test $ +... < test2 $ +... > test $ +... > test2 $ +... < [EOF]$ +... > [EOF]$ +--- recordio handles partial final lines +... < test+$ +... > test+$ +... < [EOF]$ +... > [EOF]$ +--- argv0 works +zero +0 +--- argv0 requires arguments +argv0: usage: argv0 realname program [ arg ... ] +100 +--- rblsmtpd does not find 127.0.0.1 on the RBL +ok +0 +--- rblsmtpd finds 127.0.0.2 on the RBL +rblsmtpd: 127.0.0.2 pid x: 451 Blackholed - see +220 rblsmtpd.local^M +451 Blackholed - see ^M +221 rblsmtpd.local^M +0 +--- rblsmtpd -b uses a permanent error code +rblsmtpd: 127.0.0.2 pid x: 553 Blackholed - see +220 rblsmtpd.local^M +553 Blackholed - see ^M +221 rblsmtpd.local^M +0 +--- rblsmtpd quits after a timeout +rblsmtpd: 127.0.0.2 pid x: 451 Blackholed - see +220 rblsmtpd.local^M +0 +--- rblsmtpd prints an immediate error message with -t0 +rblsmtpd: 127.0.0.2 pid x: 451 Blackholed - see +451 Blackholed - see ^M +0 +--- rblsmtpd understands an empty $RBLSMTPD +ok +0 +--- rblsmtpd understands a nonempty $RBLSMTPD +rblsmtpd: 127.0.0.2 pid x: 451 Error +220 rblsmtpd.local^M +451 Error^M +221 rblsmtpd.local^M +0 +--- rblsmtpd understands a permanent $RBLSMTPD +rblsmtpd: 127.0.0.2 pid x: 553 Error +220 rblsmtpd.local^M +553 Error^M +221 rblsmtpd.local^M +0 +--- rblsmtpd understands -r +ok +0 +--- rblsmtpd understands -a +ok +0 +--- tcpserver -1v prints proper messages +50016 +tcpserver: status: 0/2 +tcpserver: status: 1/2 +tcpserver: pid x from 127.0.0.1 +tcpserver: ok x Local:127.0.0.1:50016 localhost:127.0.0.1::x +tcpserver: end x status 0 +tcpserver: status: 0/2 +tcpserver: status: 1/2 +tcpserver: pid x from 127.0.0.1 +tcpserver: ok x Local:127.0.0.1:50016 localhost:127.0.0.1::x +tcpserver: end x status 0 +tcpserver: status: 0/2 +tcpserver: status: 1/2 +tcpserver: pid x from 127.0.0.1 +tcpserver: ok x Local:127.0.0.1:50016 localhost:127.0.0.1::x +tcpserver: end x status 0 +tcpserver: status: 0/2 +tcpserver: status: 1/2 +tcpserver: pid x from 127.0.0.1 +tcpserver: ok x Local:127.0.0.1:50016 localhost:127.0.0.1::x +tcpserver: end x status 0 +tcpserver: status: 0/2 +tcpserver: status: 1/2 +tcpserver: pid x from 127.0.0.1 +tcpserver: ok x Local:127.0.0.1:50016 localhost:127.0.0.1::x +tcpserver: end x status 0 +tcpserver: status: 0/2 +tcpserver: status: 1/2 +tcpserver: pid x from 127.0.0.1 +tcpserver: ok x Local:127.0.0.1:50016 localhost:127.0.0.1::x +tcpserver: end x status 0 +tcpserver: status: 0/2 +tcpserver: status: 1/2 +tcpserver: pid x from 127.0.0.1 +tcpserver: ok x Local:127.0.0.1:50016 localhost:127.0.0.1::x +tcpserver: end x status 0 +tcpserver: status: 0/2 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/rts.sh b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/rts.sh new file mode 100644 index 0000000..c71e839 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/rts.sh @@ -0,0 +1 @@ +env - PATH="`pwd`:$PATH" sh rts.tests 2>&1 | cat -v diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/rts.tests b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/rts.tests new file mode 100644 index 0000000..8c23929 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/rts.tests @@ -0,0 +1,347 @@ +# Assumptions: +# We're not running with uid 0 or 1. +# We're not running with gid 0 or 2. +# supervise is installed. +# The DNS cache translates 127.0.0.1<->localhost. +# There is no listener for TCP port 16. +# There is no listener for TCP port 50016. +# There is no use of TCP ports 50017, 50018, 50019, 50020. + + +rm -rf rts-tmp +mkdir rts-tmp +cd rts-tmp + + +echo '#!/bin/sh + trap "" 13 + echo PROTO="$PROTO" + echo TCPLOCALHOST="${TCPLOCALHOST-unset}" + echo TCPLOCALIP="${TCPLOCALIP-unset}" + echo TCPLOCALPORT="${TCPLOCALPORT-unset}" + echo TCPREMOTEHOST="${TCPREMOTEHOST-unset}" + echo TCPREMOTEIP="${TCPREMOTEIP-unset}" + echo TCPREMOTEPORT="${TCPREMOTEPORT-unset}" + echo TCPREMOTEINFO="${TCPREMOTEINFO-unset}" +' > print +chmod 755 print + +mkdir 50016 +echo '#!/bin/sh +exec tcpserver \ +-c 2 -Bbanner -vo -D -1 -Xx rules.cdb -Rt5 -hp -l Local -b 2 \ +127.0.0.1 50016 ../print +' > 50016/run +chmod 755 50016/run + +supervise 50016 >log 2>&1 & + +echo '--- tcpclient prints usage message without enough arguments' +tcpclient 0 0; echo $? + +echo '--- tcpclient prints error message with unknown port name' +tcpclient 0 nonexistentport echo wrong; echo $? + +echo '--- tcpclient prints error message when connection fails' +tcpclient 0 016 echo wrong; echo $? + +echo '--- tcpclient -q does not print error message when connection fails' +tcpclient -q 0 016 echo wrong; echo $? + +echo '--- tcpclient understands empty host name as synonym for 0' +tcpclient '' 016 echo wrong; echo $? + +echo '--- tcpclient understands unbracketed IP address' +tcpclient '127.000.000.001' 016 echo wrong; echo $? + +echo '--- tcpclient understands bracketed IP address' +tcpclient '[127.000.000.001]' 016 echo wrong; echo $? + +echo '--- tcpclient prints error message with unknown host name' +tcpclient nonexistent.local. 016 echo wrong; echo $? + +echo '--- tcpclient prints error message with unresolvable host name' +tcpclient thislabelistoolongbecausednshasalimitof63charactersinasinglelabel. 016 echo wrong; echo $? + +echo '--- tcpserver prints usage message without enough arguments' +tcpserver 0 0; echo $? + +echo '--- tcpserver -u 1 attempts to set uid to 1' +tcpserver -u 1 0 0 echo wrong; echo $? + +echo '--- tcpserver -U reads $UID' +env UID=1 tcpserver -U 0 0 echo wrong; echo $? + +echo '--- tcpserver -g 2 attempts to set gid to 2' +tcpserver -g 2 0 0 echo wrong; echo $? + +echo '--- tcpserver -U reads $GID' +env GID=2 tcpserver -U 0 0 echo wrong; echo $? + +echo '--- tcpserver prints error message with unknown port name' +tcpserver 0 nonexistentport echo wrong; echo $? + +echo '--- tcpserver prints error message with unknown host name' +tcpserver nonexistent.local. 016 echo wrong; echo $? + +echo '--- tcpserver prints error message with unresolvable host name' +tcpserver thislabelistoolongbecausednshasalimitof63charactersinasinglelabel. 016 echo wrong; echo $? + +echo '--- tcpserver prints error message with non-local host name' +tcpserver 1.2.3.4 016 echo wrong; echo $? + +echo '--- tcpserver sets basic environment variables' +tcpclient -p 50017 -R -H -T 10 -l Local 0 50016 sh -c 'cat <&6' +echo $? + +echo '--- tcpclient recognizes -D, -i, -r, -h, -t' +tcpclient -Di 127.0.0.1 -p 50018 -hrt1 -l Local \ +127.0.0.1 50016 sh -c 'cat <&6' +echo $? + +echo '--- tcpclient sets basic environment variables' +tcpclient -p 50019 -R -H -l Local 0 50016 ./print +echo $? + +echo '--- tcpclient looks up host names properly' +tcpclient -p 50020 -R 0 50016 ./print +echo $? + +echo '--- tcpclient -v works' +tcpclient -v -R -H -l Local 0 50016 echo ok +echo $? + +echo '--- tcpserver prints error message with used port' +tcpserver -R -H -l Local 127.0.0.1 50016 echo wrong +echo $? + +echo '--- tcpcat works' +tcpcat 0 50016 | grep -v TCPREMOTEPORT +echo $? + +echo '--- mconnect works' +mconnect 0 50016 &1 >/dev/null \ +| sed 's/^[0-9]*/.../' | sed 's/$/$/' + +echo '--- recordio handles multiple-line packets' +( echo 'test +test2'; sleep 1 ) | recordio cat 2>&1 >/dev/null \ +| sed 's/^[0-9]*/.../' | sed 's/$/$/' + +echo '--- recordio handles partial final lines' +( echo test | tr -d '\012'; sleep 1 ) | recordio cat 2>&1 >/dev/null \ +| sed 's/^[0-9]*/.../' | sed 's/$/$/' + +echo '--- argv0 works' +argv0 sh zero -c 'echo $0'; echo $? + +echo '--- argv0 requires arguments' +argv0 sh; echo $? + + +echo '--- rblsmtpd does not find 127.0.0.1 on the RBL' +( echo help; echo quit ) \ +| ( TCPREMOTEIP=127.0.0.1 rblsmtpd echo ok 2>&1; echo $? ) \ +| sed 's/pid [0-9]*/pid x/' + +echo '--- rblsmtpd finds 127.0.0.2 on the RBL' +( echo help; echo quit ) \ +| ( TCPREMOTEIP=127.0.0.2 rblsmtpd echo whoops 2>&1; echo $? ) \ +| sed 's/pid [0-9]*/pid x/' + +echo '--- rblsmtpd -b uses a permanent error code' +( echo help; echo quit ) \ +| ( TCPREMOTEIP=127.0.0.2 rblsmtpd -b echo whoops 2>&1; echo $? ) \ +| sed 's/pid [0-9]*/pid x/' + +echo '--- rblsmtpd quits after a timeout' +sleep 2 \ +| ( TCPREMOTEIP=127.0.0.2 rblsmtpd -cBt1 echo whoops 2>&1; echo $? ) \ +| sed 's/pid [0-9]*/pid x/' + +echo '--- rblsmtpd prints an immediate error message with -t0' +sleep 2 \ +| ( TCPREMOTEIP=127.0.0.2 rblsmtpd -Ct0 echo whoops 2>&1; echo $? ) \ +| sed 's/pid [0-9]*/pid x/' + +echo '--- rblsmtpd understands an empty $RBLSMTPD' +( echo help; echo quit ) \ +| ( TCPREMOTEIP=127.0.0.2 RBLSMTPD= rblsmtpd echo ok 2>&1; echo $? ) \ +| sed 's/pid [0-9]*/pid x/' + +echo '--- rblsmtpd understands a nonempty $RBLSMTPD' +( echo help; echo quit ) \ +| ( TCPREMOTEIP=127.0.0.2 RBLSMTPD=Error rblsmtpd echo whoops 2>&1; echo $? ) \ +| sed 's/pid [0-9]*/pid x/' + +echo '--- rblsmtpd understands a permanent $RBLSMTPD' +( echo help; echo quit ) \ +| ( TCPREMOTEIP=127.0.0.2 RBLSMTPD=-Error rblsmtpd echo whoops 2>&1; echo $? ) \ +| sed 's/pid [0-9]*/pid x/' + +echo '--- rblsmtpd understands -r' +( echo help; echo quit ) \ +| ( TCPREMOTEIP=127.0.0.2 rblsmtpd -r nonexistent.local echo ok 2>&1; echo $? ) \ +| sed 's/pid [0-9]*/pid x/' + +echo '--- rblsmtpd understands -a' +( echo help; echo quit ) \ +| ( TCPREMOTEIP=127.0.0.2 rblsmtpd -a rbl.maps.vix.com echo ok 2>&1; echo $? ) \ +| sed 's/pid [0-9]*/pid x/' + + +svc -dx 50016 +wait + +echo '--- tcpserver -1v prints proper messages' +sed -e 's/::.*/::x/' -e 's/ [0-9]* / x /' < log + + +exit 0 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/rules.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/rules.c new file mode 100644 index 0000000..4fc2354 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/rules.c @@ -0,0 +1,100 @@ +#include "alloc.h" +#include "stralloc.h" +#include "open.h" +#include "cdb.h" +#include "rules.h" + +stralloc rules_name = {0}; + +static struct cdb c; + +static int dorule(void (*callback)(char *,unsigned int)) +{ + char *data; + unsigned int datalen; + + switch(cdb_find(&c,rules_name.s,rules_name.len)) { + case -1: return -1; + case 0: return 0; + } + + datalen = cdb_datalen(&c); + data = alloc(datalen); + if (!data) return -1; + if (cdb_read(&c,data,datalen,cdb_datapos(&c)) == -1) { + alloc_free(data); + return -1; + } + + callback(data,datalen); + alloc_free(data); + return 1; +} + +static int doit(void (*callback)(char *,unsigned int),char *ip,char *host,char *info) +{ + int r; + + if (info) { + if (!stralloc_copys(&rules_name,info)) return -1; + if (!stralloc_cats(&rules_name,"@")) return -1; + if (!stralloc_cats(&rules_name,ip)) return -1; + r = dorule(callback); + if (r) return r; + + if (host) { + if (!stralloc_copys(&rules_name,info)) return -1; + if (!stralloc_cats(&rules_name,"@=")) return -1; + if (!stralloc_cats(&rules_name,host)) return -1; + r = dorule(callback); + if (r) return r; + } + } + + if (!stralloc_copys(&rules_name,ip)) return -1; + r = dorule(callback); + if (r) return r; + + if (host) { + if (!stralloc_copys(&rules_name,"=")) return -1; + if (!stralloc_cats(&rules_name,host)) return -1; + r = dorule(callback); + if (r) return r; + } + + if (!stralloc_copys(&rules_name,ip)) return -1; + while (rules_name.len > 0) { + if (ip[rules_name.len - 1] == '.' || ip[rules_name.len - 1] == ':') { + r = dorule(callback); + if (r) return r; + } + --rules_name.len; + } + + if (host) { + while (*host) { + if (*host == '.') { + if (!stralloc_copys(&rules_name,"=")) return -1; + if (!stralloc_cats(&rules_name,host)) return -1; + r = dorule(callback); + if (r) return r; + } + ++host; + } + if (!stralloc_copys(&rules_name,"=")) return -1; + r = dorule(callback); + if (r) return r; + } + + rules_name.len = 0; + return dorule(callback); +} + +int rules(void (*callback)(char *,unsigned int),int fd,char *ip,char *host,char *info) +{ + int r; + cdb_init(&c,fd); + r = doit(callback,ip,host,info); + cdb_free(&c); + return r; +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/rules.h b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/rules.h new file mode 100644 index 0000000..15d9b90 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/rules.h @@ -0,0 +1,9 @@ +#ifndef RULES_H +#define RULES_H + +#include "stralloc.h" + +extern stralloc rules_name; +extern int rules(void (*)(char *,unsigned int),int,char *,char *,char *); + +#endif diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/rules.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/rules.o new file mode 100644 index 0000000000000000000000000000000000000000..397fcda653e3bba732f5ad641527cf89ed800e30 GIT binary patch literal 3864 zcmbtWUu;uV7(Z<{HW9dkNmyj2eQ3-`*p&e$hK$)|W86YfA^szo&aQvlV%K7On}9xy zq%HBLKuGk}gv1wo^95r@f=xF6#Areg%y=*^L`iW97$3G6xBC6=J*Pdrz4ys4={@KB zo!|F;zwg|8Pw(uZ$e7pTVZuCYh&4QcGWJ1RV;(Z6A-0)qWDz43T-A*6;8NIF)5xht zjCk;oR`{c@yd6BP{49nqajD``Sgq;r4%{qN^rPi|00R}{p}C@!Dw;8`zg*r7*!W#D zzHSN|HWu_D>! z{iLn5UTVps6w@RoV%(FHE5(y0xKbVE`IJ(Gkff^ki%>%Mv#BSg*vA99>j66nfruf8 zn*R{1rRHxYxKh2bX7!+y7EQ!f={kYsc8H+8+^zV}V!Aw%H1FTw0c+F)7Nt=2&~}(? zJwVQ|^7&{x8&vZ@VYiaJl79343}q#?`Cco2In48^Jl~0MVFA%?!D2=6v-~}Wu7bP) zrQW~}3;D(r0G-vp|E<-G`TOfcama9&;Ff*)!30;TUr;FStx`ONdtvr_|0*p~-Vh5N zWCt000!7F?@10vNp zzU^H5v5VddJ|Y!1u)`xG2LgSgiOK0`I%#wjt& zCQ?yVPn_178jtExrcUN^OwDHCfKF-11t~E#k<3PC5=@O{W@Zv;ib!YlgnIaeSNd~$ zH1>`u?|)qa6peFWgDp#l`)~M~7rL5Vwv&A6h^wzYx6zt@#upza7j-&0qlb@AbKF*j zUA6<9Z?CnRaOAYpMf^)VP7DDt;o|^}(6!fwi}(&34lYcLhxiCCt9}C@JEn z;7De#1>e4RpnuCZew7DoA`E+A@BcBvoa$GwK$f?L`qf^)zF?bx*T(+BQPN^Q#~p(X zCndmJHxu%_QXcaRA`I`Bhxh>+VdDN{?ql_16K>snEpM;2P&%)U2H6Dqv=*j zCv?D`qMw+X0Kee9b;9vJI^p=3al%7{Z=;SYG{VfYmc}vqIq~tlJK=A-;BUL&ESpay za%zmlGnlcM1x%!I+{WUQ6UpgxoJCWqOw4q%i70pJNKPaywz)E$p4J&1+a`A+mN|7M zXC(lwfk*WmNip{mBc6FY&*I4l0wfbS{k564%Yx~P(c%WUuksOmyc>f5yo4k7DEBo9 z$7iD8zbfJ2hq(V1AMJG$97kOoQ6kT*geww$)dgSTxIO-_3D*{vL_nE%ApXzI^77Nw{41sFVla7^3cLF8py9{`)Tcvl3tK%aHiciN0YM zC0y3|p_E6~`H2hviVOdi3;&M9mvyd5eCQM>mzN8+-^UJ)+wbEJ7k;nAm-`xW;g3js zS?6&Hm)}R-1)p`nf8;p&lKWkhaQVLcEaj2)h`$gl%lz&9uf?AKNeP$vevTuLoc|dY Z{(gxs?`MGGVW`U`n|{c=Ht-7f{{v{*nQH(5 literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/scan.h b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/scan.h new file mode 100644 index 0000000..758138c --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/scan.h @@ -0,0 +1,28 @@ +#ifndef SCAN_H +#define SCAN_H + +extern unsigned int scan_uint(char *,unsigned int *); +extern unsigned int scan_xint(char *,unsigned int *); +extern unsigned int scan_nbbint(char *,unsigned int,unsigned int,unsigned int,unsigned int *); +extern unsigned int scan_ushort(char *,unsigned short *); +extern unsigned int scan_xshort(char *,unsigned short *); +extern unsigned int scan_nbbshort(char *,unsigned int,unsigned int,unsigned int,unsigned short *); +extern unsigned int scan_ulong(char *,unsigned long *); +extern unsigned int scan_xlong(char *,unsigned long *); +extern unsigned int scan_nbblong(char *,unsigned int,unsigned int,unsigned int,unsigned long *); + +extern unsigned int scan_plusminus(char *,int *); +extern unsigned int scan_0x(char *,unsigned int *); + +extern unsigned int scan_whitenskip(char *,unsigned int); +extern unsigned int scan_nonwhitenskip(char *,unsigned int); +extern unsigned int scan_charsetnskip(char *,char *,unsigned int); +extern unsigned int scan_noncharsetnskip(char *,char *,unsigned int); + +extern unsigned int scan_strncmp(char *,char *,unsigned int); +extern unsigned int scan_memcmp(char *,char *,unsigned int); + +extern unsigned int scan_long(char *,long *); +extern unsigned int scan_8long(char *,unsigned long *); + +#endif diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/scan_ip6.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/scan_ip6.c new file mode 100644 index 0000000..ee239fd --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/scan_ip6.c @@ -0,0 +1,87 @@ +#include "scan.h" +#include "ip4.h" +#include "ip6.h" + +/* + * IPv6 addresses are really ugly to parse. + * Syntax: (h = hex digit) + * 1. hhhh:hhhh:hhhh:hhhh:hhhh:hhhh:hhhh:hhhh + * 2. any number of 0000 may be abbreviated as "::", but only once + * 3. The last two words may be written as IPv4 address + */ + +unsigned int scan_ip6(const char *s,char ip[16]) +{ + unsigned int i; + unsigned int len=0; + unsigned long u; + + char suffix[16]; + int prefixlen=0; + int suffixlen=0; + + if ((i=ip4_scan((char*)s,ip+12))) { + for (len=0; len<12; ++len) ip[len]=V4mappedprefix[len]; + return i; + } + for (i=0; i<16; i++) ip[i]=0; + for (;;) { + if (*s == ':') { + len++; + if (s[1] == ':') { /* Found "::", skip to part 2 */ + s+=2; + len++; + break; + } + s++; + } + i = scan_xlong((char*)s,&u); + if (!i) return 0; + if (prefixlen==12 && s[i]=='.') { + /* the last 4 bytes may be written as IPv4 address */ + i=ip4_scan((char*)s,ip+12); + if (i) + return i+len; + else + return 0; + } + ip[prefixlen++] = (u >> 8); + ip[prefixlen++] = (u & 255); + s += i; len += i; + if (prefixlen==16) + return len; + } + +/* part 2, after "::" */ + for (;;) { + if (*s == ':') { + if (suffixlen==0) + break; + s++; + len++; + } else if (suffixlen!=0) + break; + i = scan_xlong((char*)s,&u); + if (!i) { + len--; + break; + } + if (suffixlen+prefixlen<=12 && s[i]=='.') { + int j=ip4_scan((char*)s,suffix+suffixlen); + if (j) { + suffixlen+=4; + len+=j; + break; + } else + prefixlen=12-suffixlen; /* make end-of-loop test true */ + } + suffix[suffixlen++] = (u >> 8); + suffix[suffixlen++] = (u & 255); + s += i; len += i; + if (prefixlen+suffixlen==16) + break; + } + for (i=0; i{#&{ zT&@-yqYP$C-sm$wB9CA<7db*mRbPWZJT<1Nsv?9cE;VQD*?8HyFFleq-+bpgbIzGF z>(3IYNgu|@F^pb9ot?uX6!W`q3&v0Y^&|2YwI>7QT$24s*&dl8(=%^U_BXYTC}nXa zbjY==rd7-P=7@HEGr09RXUK;1B(<($YW)=`+@#hHW%UcQKRZ!jy749UoTiUIgr#pUHnO33%|47+2vN5eD8cnD2!V9t*4@CTxi~wdc$b1VYHj-x_=vKr zWFv-&Ern_AH|RZ-w5mRSS(nQPrt)0~qP6{@pM&8NAVh*&QonstrdAEV_yZrq2S;)C zYvacQSNcAg{R2(0iI;&m&SRB zC)N>eybr+ImI&TyECb|4fSqhF2!Hqn!o?8w2YUN9;o*$}e@gf?AAkutG${{U_J8f8 za%4gtB=Yk_j#|B6^n7)~mZs#Ac&$@s&yGa~qQ5x87sPK8buSS3%aQzbv~a*YKt{4&MmI#83U>5)lA07f+V|Y8tT-mGsAgP zPcMr~AAX5IDDR-hb3{z+TX*2{@o~ECY1l|^Lf|XCZLlf!kHE_F^ojj|Sf3NT>+^1T zOn&!W%$w^pX!w~A8-E63d0pOgMM1m{KDRmbJDdi8!t3icVb1f3-f#ZnF8}ZIBhi$L z=6_d@yXtYiw|G-}-w-HW)@pY5S=r@#1C>R7K(xq3nS=~Q!53D8chnZ5Us=JJU=kGKn$UHH@J~)w9IBS){$Ji=Nk!R9|1;H3*&kZ zjM|V98H~m6u@~`^sru$-85qIM;L$0u!d2cs5px;j$gNa3%%682fyIDRUjQCF{fU^HIIOwiRy2P z98=;xrPF@RuOd(V`Fc>q6f1CT7VDfN%QN$7$hE^*;IkvG_U~(>iri0_&yJ)YYSUNc z>&HlU=l7?%g!ON!`Hd^T4!pnSc_dvFKEF9nI1)NB;=^u2eAo$z5Bu}P$HLko&tC~Z g0+l0y^ZdOR&z5fCyi{?Ig$*5`H%_XA<{CWp4>?{|W&i*H literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/scan_xlong.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/scan_xlong.c new file mode 100644 index 0000000..6e46d74 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/scan_xlong.c @@ -0,0 +1,23 @@ +#include "scan.h" + +static int fromhex(unsigned char c) { + if (c>='0' && c<='9') + return c-'0'; + else if (c>='A' && c<='F') + return c-'A'+10; + else if (c>='a' && c<='f') + return c-'a'+10; + return -1; +} + +unsigned int scan_xlong(char *src,unsigned long *dest) { + register const char *tmp=src; + register int l=0; + register unsigned char c; + while ((c=fromhex(*tmp))<16) { + l=(l<<4)+c; + ++tmp; + } + *dest=l; + return tmp-src; +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/scan_xlong.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/scan_xlong.o new file mode 100644 index 0000000000000000000000000000000000000000..c8e74b82c5583e926fc0fa3ea0548bd17b45da78 GIT binary patch literal 1304 zcmb<-^>JfjWMqH=Mg}_u1P><4z~F%-=l~XWVBlupVDRkxX?W?iTpGW83s}^#*WrQ< zf4Tm_M=bo?4tO*lXY3Ub;NQmI>v+M1f7?MD&a%6`j{9v`%h`Y`Prkm=>p0(rwM@_> z`H)8^TjviK%@c?DlrVo4%{ zUQ%%}gI-Z;PNH6FMtoXPVs0vfUUGhJZfYJ-NnUa%afm%U9 z%!X!!1C)>AN1&JhnmR=wAEcidO?&|wAI4>YF`%?Mkmdkla`hVm^@8kY0%Bya0Ln2y z76h_Eb|C{DAP3z|V0l)EDha4!PN+JVewes5P#k1GI=BE8kVlh1R|`yXSoOb0(+A_C z>lXw{pobkuElht1Oe2&=*AL>OhaE^M2Q*M_K=pBf#Gn`?1oJ;AT(H^y0IFXSq!0r9w^R^&03&1dM;sL-~*}@LUIp0 ezZ54Y=EYa! +#include "seek.h" + +#define SET 0 /* sigh */ + +int seek_set(int fd,seek_pos pos) +{ if (lseek(fd,(off_t) pos,SET) == -1) return -1; return 0; } diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/seek_set.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/seek_set.o new file mode 100644 index 0000000000000000000000000000000000000000..28a52a17c6a19c307e62b76e6212f3b85f96c79f GIT binary patch literal 1352 zcmbW1y-EW?5Xa{{H5UyUMIoSIDpAlSr($6tfy6Hm3&BDV^b%K;d_nGtXk(GeE^p#1 zgy<9a6c!fRi3oA#Zb#SUstjD_Kfl@8o!!05{m$X;kYxdz1>5i!F$Himm=AFtQjmoG z_M79rxZPJ`4?VZr{_0N_d;9HY=ZVk^{h(QQ$6&S6mYqsC9h{5!e3((bIFSy+y+UCt zyHu2=8?T<-5bI)X)fMh?BmsnfTMN7r`k)#4YgSEJ^+X_B0f$My)36IHcYPq}V$;S@i?2Tv442?y^`)M>J|okykPAmDAB?IRcnNIs6y?s?10v zGm4C%r*#|^GhbBPR-D}#3&Wdhtze$!9JGEDYpJgxd~~}|K~9ILxqrqk3bQB5XLb4 +#include +#include +extern int select(); + +#endif diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/select.h1 b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/select.h1 new file mode 100644 index 0000000..fe725b6 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/select.h1 @@ -0,0 +1,10 @@ +#ifndef SELECT_H +#define SELECT_H + +/* sysdep: -sysselect */ + +#include +#include +extern int select(); + +#endif diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/select.h2 b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/select.h2 new file mode 100644 index 0000000..2bc2044 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/select.h2 @@ -0,0 +1,11 @@ +#ifndef SELECT_H +#define SELECT_H + +/* sysdep: +sysselect */ + +#include +#include +#include +extern int select(); + +#endif diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/sgetopt.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/sgetopt.c new file mode 100644 index 0000000..bdd0f14 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/sgetopt.c @@ -0,0 +1,51 @@ +/* sgetopt.c, sgetopt.h: (yet another) improved getopt clone, outer layer +D. J. Bernstein, djb@pobox.com. +Depends on subgetopt.h, buffer.h. +No system requirements. +19991219: Switched to buffer.h. +19970208: Cleanups. +931201: Baseline. +No known patent problems. + +Documentation in sgetopt.3. +*/ + +#include "buffer.h" +#define SGETOPTNOSHORT +#include "sgetopt.h" +#define SUBGETOPTNOSHORT +#include "subgetopt.h" + +#define getopt sgetoptmine +#define optind subgetoptind +#define opterr sgetopterr +#define optproblem subgetoptproblem +#define optprogname sgetoptprogname + +int opterr = 1; +char *optprogname = 0; + +int getopt(int argc,char **argv,char *opts) +{ + int c; + char *s; + + if (!optprogname) { + optprogname = *argv; + if (!optprogname) optprogname = ""; + for (s = optprogname;*s;++s) if (*s == '/') optprogname = s + 1; + } + c = subgetopt(argc,argv,opts); + if (opterr) + if (c == '?') { + char chp[2]; chp[0] = optproblem; chp[1] = '\n'; + buffer_puts(buffer_2,optprogname); + if (argv[optind] && (optind < argc)) + buffer_puts(buffer_2,": illegal option -- "); + else + buffer_puts(buffer_2,": option requires an argument -- "); + buffer_put(buffer_2,chp,2); + buffer_flush(buffer_2); + } + return c; +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/sgetopt.h b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/sgetopt.h new file mode 100644 index 0000000..739203c --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/sgetopt.h @@ -0,0 +1,21 @@ +#ifndef SGETOPT_H +#define SGETOPT_H + +#ifndef SGETOPTNOSHORT +#define getopt sgetoptmine +#define optarg subgetoptarg +#define optind subgetoptind +#define optpos subgetoptpos +#define opterr sgetopterr +#define optproblem subgetoptproblem +#define optprogname sgetoptprogname +#define opteof subgetoptdone +#endif + +#include "subgetopt.h" + +extern int sgetoptmine(int,char **,char *); +extern int sgetopterr; +extern char *sgetoptprogname; + +#endif diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/sgetopt.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/sgetopt.o new file mode 100644 index 0000000000000000000000000000000000000000..b948a9b386ab9e0992591d6d91da2d64517e7e63 GIT binary patch literal 2696 zcmbuAO>Epm6vxNev`s&Vlk$-uTE&7D1c@~yg{VXYQZ;QyD1d~3Q$^)XyqgvKRog2< zB}Al63)X_@u@^2}DlQy*00~9?Lfm^s2qZ|=9)h?OQ54>PJg+;Q?4Ed%?e~83K4#w7 z<4=w+oEUH%!QzNlMb}~~#D#&bKBv?c~p%oUXkr1S4Fb>=*u_VFVA>~V;oKfCxf5$hEZoaOvc2wLbeu+4 z|9-x8N2Y3lw|{ddc*@;b+-i}V==ONlt5mCDIjDM#W>RU?y+XmGyt8aZ;h9z?3S%#* zdqGrg)xvtBeNg`q+(?|WZwqH-#L4a3HFSYC@BlGfkQr>~>z@y_2N#B4IG7T&t|F+e*94_35xVgqU^cMS`=0TKM7Y7;V%VAApBw+3qNYW zfIFpm&^$~gV#4Lqr6{O{!e4CEunytZ8%gM&eDmExoCJ#>WHb9;caNg6+?`gIIc=+6 z7-J)b4)qDT1}z42WhjGp^~bS~OsE=*@oZQ;t-0>9rWCK^?A*5foX%;-uj+WN$BAuw zO4pxe2mR#u$1JYXsw0wl5Xe4SzS z2Acn%OPbsHzcsiypYIL6pLDK!#o(s@j|P9(@V}`!&I +#include "sig.h" + +int sig_alarm = SIGALRM; +int sig_child = SIGCHLD; +int sig_cont = SIGCONT; +int sig_hangup = SIGHUP; +int sig_pipe = SIGPIPE; +int sig_term = SIGTERM; + +void (*sig_defaulthandler)() = SIG_DFL; +void (*sig_ignorehandler)() = SIG_IGN; diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/sig.h b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/sig.h new file mode 100644 index 0000000..bc522e4 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/sig.h @@ -0,0 +1,25 @@ +#ifndef SIG_H +#define SIG_H + +extern int sig_alarm; +extern int sig_child; +extern int sig_cont; +extern int sig_hangup; +extern int sig_pipe; +extern int sig_term; + +extern void (*sig_defaulthandler)(); +extern void (*sig_ignorehandler)(); + +extern void sig_catch(int,void (*)()); +#define sig_ignore(s) (sig_catch((s),sig_ignorehandler)) +#define sig_uncatch(s) (sig_catch((s),sig_defaulthandler)) + +extern void sig_block(int); +extern void sig_unblock(int); +extern void sig_blocknone(void); +extern void sig_pause(void); + +extern void sig_dfl(int); + +#endif diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/sig.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/sig.o new file mode 100644 index 0000000000000000000000000000000000000000..f9329ac224a2bc87205be4c1673e6b95276117de GIT binary patch literal 1238 zcmbu8O-sW-5Qe88)(U=AJP01FAgEwh>IaAisnptwc+#`ow%aC{CL!5^p8EIvJN^Ql zNp`3Vxw){Jd7ph}H@n#^dQXq#QVF<~;0~6GDZtkBz`o^j z3;_LZ_qKWRV1~X9n^)>mU9{S&eVV5LD*c>UJ;Z2}JbIj2^I<`awbh`8X$oo-&1NP< z7Dm>n{_|@qwR-fPE%V>UK2AXIUlS8`gl1Xg#Kl95R9_Li<8)K-y3og{iOKqb^GUzd zXXvB#Wg9qfAO@uO8pkE0l7*;aDZO+Dw8@2qO2!f79NsyH>u|eXy2>EX%O39 z9`G&}uOGV)HE});a((79lCKKiKa!KK6rLFIqMZ;gIw9gKMbjgfw=Ca#FZLd|U7v$9Dz4&-ij*yv~dB^Y>v6sXtXCdcNsEC$lUYd44d? ovk3oh8uWBHoyS=k`?1LqYn*> +#include "sig.h" +#include "hassgprm.h" + +void sig_block(int sig) +{ +#ifdef HASSIGPROCMASK + sigset_t ss; + sigemptyset(&ss); + sigaddset(&ss,sig); + sigprocmask(SIG_BLOCK,&ss,(sigset_t *) 0); +#else + sigblock(1 << (sig - 1)); +#endif +} + +void sig_unblock(int sig) +{ +#ifdef HASSIGPROCMASK + sigset_t ss; + sigemptyset(&ss); + sigaddset(&ss,sig); + sigprocmask(SIG_UNBLOCK,&ss,(sigset_t *) 0); +#else + sigsetmask(sigsetmask(~0) & ~(1 << (sig - 1))); +#endif +} + +void sig_blocknone(void) +{ +#ifdef HASSIGPROCMASK + sigset_t ss; + sigemptyset(&ss); + sigprocmask(SIG_SETMASK,&ss,(sigset_t *) 0); +#else + sigsetmask(0); +#endif +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/sig_block.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/sig_block.o new file mode 100644 index 0000000000000000000000000000000000000000..ba30f713503a60aa64232737ecf4084aaa6650e4 GIT binary patch literal 1968 zcmbVN&ubGw6n>jj+iI*)JO~O668r&nF;+Z?XiB49F_dcYAQtK-*_e_hDcKcLFQ&vp zLp|i!g9kxDZ~h4i?aiBiMD@^v-aHiI`(|g%IIMzwu=~FEy`M9g**w3Mza6tIQex2! z8d!>D9UI`RfLTh=D9t;a?Y7hX`VE}Z-N}6Uh{(|F?6x0ml_B=g@fRY?=`N(d=ewo! zPiJj+lc}lho=VSkcN7dOVUV!W#;f!?8~Kg5=^krmZ5z2;<=+3)%k=+Qj0+N-5N{&u z*?qEFNh_Wh9_jHMrmtXX=6>_9axPkF*Mlvhr0m}k*5IY) zS4@V1ITL)9;V{Ap6=D4c_)+<4{aNOsmbxyRdt)i};4IzR6Ei z9h@7)w^>8PHx0mFda_tpZWOC_ae(WMx(CavtpuyS7XYs`8^xOIS4Gs*y2t@`OC=c* z)fV^~>O6o?Xz>Nc5VOu^NDE%?`$psSIv+G%pC=`G TaOj~VD}mzG{y#SOwzPi%m+a}= literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/sig_catch.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/sig_catch.c new file mode 100644 index 0000000..bdb2bfb --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/sig_catch.c @@ -0,0 +1,16 @@ +#include +#include "sig.h" +#include "hassgact.h" + +void sig_catch(int sig,void (*f)()) +{ +#ifdef HASSIGACTION + struct sigaction sa; + sa.sa_handler = f; + sa.sa_flags = 0; + sigemptyset(&sa.sa_mask); + sigaction(sig,&sa,(struct sigaction *) 0); +#else + signal(sig,f); /* won't work under System V, even nowadays---dorks */ +#endif +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/sig_catch.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/sig_catch.o new file mode 100644 index 0000000000000000000000000000000000000000..d05bcb8e4ce2405df72ea10716e3cceea088ad24 GIT binary patch literal 1480 zcmbu8F>4e-6vyA*Msv|9Q347I9=M1BZ}2pTSjb7DS>X^3SO`Lx+l=0!dndP3Btg)i zg-aAHEG#T7EK^zv3D}AsLM;Tfvk1iZznw`Y!`bMA+4tV>y*Kk_X6Mo6#+6bKkd=Tg z(za(QQS88aAJ=J=Mkvm2M?V|+eDphB{{Ef=m-3DH#lxr^=abRLr_nPr#W(0U|1zC_ zt$i+>l{e8lhK-fC(JF$=>!@Gj!7^Sb3YKOmSQrb!(c$t-?%^nN49F}#H}-!Bo|m44 zupu*3Qx_^Hr&Y5pJC#XsR-CEUL~WuliA1)TYT0D1dxdUUtEcWuq1A#WF)y_w(abUu zeX3e>cX~2aB$95Lst%`gx>|{uYd5QzmdU+h?f>{zxE4pe+nb|q{Qh2@*qCF(Ji=qh zV{jkuD&T1o+rt{`l#PGb=o5x-oulEejP{kk)+tWFoc~&Xj%(3ZiH9q%jdR|GY}@`V zuCd|wgxIRtzuhPH4`k~tuQS8?zI-y^m>2MKuX5aHDEZ;lS=Y}!zybg4kZbF2*+QfJ zdieg?AvHFKQZ@y9nPKn#{zsS%TK~E^zbeOF@z-}_u8q7Q`nBmYYlj0*41Emh1bom9 zgPSJp#72i(yWANFX?Q1KZy%3?PCxd&9b)dkH54EJ3#Y7ocP^1SX^CXphNaR6dNETP jwoG)p+rc~&_^{yaa0eTkh2T9v!12#oUSS&o=HB-oewTGB literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/sig_pause.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/sig_pause.c new file mode 100644 index 0000000..3dcc7b6 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/sig_pause.c @@ -0,0 +1,14 @@ +#include +#include "sig.h" +#include "hassgprm.h" + +void sig_pause(void) +{ +#ifdef HASSIGPROCMASK + sigset_t ss; + sigemptyset(&ss); + sigsuspend(&ss); +#else + sigpause(0); +#endif +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/sig_pause.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/sig_pause.o new file mode 100644 index 0000000000000000000000000000000000000000..0b65b8bc53ddb78e39103d202e2e32d9abacb8aa GIT binary patch literal 1424 zcmbtTO=}cE5Ut5XvxzZ`A{a2>f*=Z}aifIbK~@rz6~u$$K@{TbrZvILX4&q*CYJ>E zO2>*5@BT!JX>iufwrX5uY{3JRZmmyq?TtD>FyQ za0~{^+Vb+F`kfWq-paf6hvtDmqvqruw!hrCP zD-LGsLPg#WzA4tIQw#QN(6Je$QDC>~>wx fb~pG8>>Yx;13o^f1m6P$Jib}s>x?1b;`{ys&LLsv literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket.h b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket.h new file mode 100644 index 0000000..4fba762 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket.h @@ -0,0 +1,53 @@ +#ifndef SOCKET_H +#define SOCKET_H + +#include "uint16.h" +#include "uint32.h" + +extern int socket_tcp(void); +extern int socket_udp(void); +extern int socket_tcp6(void); +extern int socket_udp6(void); + +extern int socket_connect4(int,const char *,uint16); +extern int socket_connect6(int s,const char *ip,uint16 port,uint32 scope_id); +extern int socket_connected(int); +extern int socket_bind4(int,const char *,uint16); +extern int socket_bind4_reuse(int,const char *,uint16); +extern int socket_bind6(int s,const char *ip,uint16 port,uint32 scope_id); +extern int socket_bind6_reuse(int s,const char *ip,uint16 port,uint32 scope_id); +extern int socket_listen(int,int); +extern int socket_accept4(int,char *,uint16 *); +extern int socket_accept6(int s,char *ip,uint16 *port,uint32 *scope_id); +extern int socket_recv4(int,char *,int,char *,uint16 *); +extern int socket_send4(int,const char *,int,const char *,uint16); +extern int socket_recv6(int s,char *buf,unsigned int len,char *ip,uint16 *port,uint32 *scope_id); +extern int socket_send6(int s,const char *buf,unsigned int len,const char *ip,uint16 port,uint32 scope_id); +extern int socket_local4(int,char *,uint16 *); +extern int socket_remote4(int,char *,uint16 *); +extern int socket_local6(int s,char *ip,uint16 *port,uint32 *scope_id); +extern int socket_remote6(int s,char *ip,uint16 *port,uint32 *scope_id); + +/* enable sending udp packets to the broadcast address */ +extern int socket_broadcast(int); +/* join a multicast group on the given interface */ +extern int socket_mcjoin4(int,char *,char *); +extern int socket_mcjoin6(int,char *,int); +/* leave a multicast group on the given interface */ +extern int socket_mcleave4(int,char *); +extern int socket_mcleave6(int,char *); +/* set multicast TTL/hop count for outgoing packets */ +extern int socket_mcttl4(int,char); +extern int socket_mcttl6(int,char); +/* enable multicast loopback */ +extern int socket_mcloop4(int,char); +extern int socket_mcloop6(int,char); + +extern const char* socket_getifname(uint32 interface); +extern uint32 socket_getifidx(const char *ifname); + +extern void socket_tryreservein(int,int); + +extern int noipv6; + +#endif diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket.lib b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket.lib new file mode 100644 index 0000000..e69de29 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_accept.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_accept.c new file mode 100644 index 0000000..22c44d4 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_accept.c @@ -0,0 +1,21 @@ +#include +#include +#include +#include +#include "byte.h" +#include "socket.h" + +int socket_accept4(int s,char ip[4],uint16 *port) +{ + struct sockaddr_in sa; + int dummy = sizeof sa; + int fd; + + fd = accept(s,(struct sockaddr *) &sa,&dummy); + if (fd == -1) return -1; + + byte_copy(ip,4,(char *) &sa.sin_addr); + uint16_unpack_big((char *) &sa.sin_port,port); + + return fd; +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_accept.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_accept.o new file mode 100644 index 0000000000000000000000000000000000000000..f2f458fc43bbc5ad31a0ea1727426c17b704c86e GIT binary patch literal 1584 zcmbu9&1(};5Wr`hB zmZAVv4d!ElFtnE3=o}HS0g*|4G(U0UYJ=R~^{mI)$Z#~ZpC&*qa6s|f8t6{n3H=QMRga&vD z(pKuVS{T}_bpidf=fCDJV=na--yv!xs{V=sQmg(I&f&uBiG1^Npz54-ej16&S3Hl5 z>YK7B!D+)`#um|UGDBQs~G=RY7r6LVX#&Dl|SRSw0G2}h98+0FCMAWN(N zLcTu*^y^~Q*M0h$;xh1Kq%*a)Qzu4!q;*0(?S_fVCe_AL+kZ|u?yzBM9H2$>KcV%b zzBdQC`K=*>a|dvG57XkI+X^;AQSyTzYzr2Q+e?seDECBI3R>+RY}J|~w_Mt4w(;+! mRIWXussI-g72h@8*{@L|>l&wbT=DxFr@L3&k(^@n_vSY}>X)nl literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_accept6.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_accept6.c new file mode 100644 index 0000000..a8a9a07 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_accept6.c @@ -0,0 +1,44 @@ +#include +#include +#include +#include +#include "byte.h" +#include "socket.h" +#include "ip6.h" +#include "haveip6.h" +#include "error.h" + +int socket_accept6(int s,char ip[16],uint16 *port,uint32 *scope_id) +{ +#ifdef LIBC_HAS_IP6 + struct sockaddr_in6 sa; +#else + struct sockaddr_in sa; +#endif + unsigned int dummy = sizeof sa; + int fd; + + fd = accept(s,(struct sockaddr *) &sa,&dummy); + if (fd == -1) return -1; + +#ifdef LIBC_HAS_IP6 + if (sa.sin6_family==AF_INET) { + struct sockaddr_in *sa4=(struct sockaddr_in*)&sa; + byte_copy(ip,12,V4mappedprefix); + byte_copy(ip+12,4,(char *) &sa4->sin_addr); + uint16_unpack_big((char *) &sa4->sin_port,port); + return fd; + } + byte_copy(ip,16,(char *) &sa.sin6_addr); + uint16_unpack_big((char *) &sa.sin6_port,port); + if (scope_id) *scope_id=sa.sin6_scope_id; + + return fd; +#else + byte_copy(ip,12,V4mappedprefix); + byte_copy(ip+12,4,(char *) &sa.sin_addr); + uint16_unpack_big((char *) &sa.sin_port,port); + if (scope_id) *scope_id=0; + return fd; +#endif +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_accept6.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_accept6.o new file mode 100644 index 0000000000000000000000000000000000000000..50e29c9809e5b48fa1c542843b21472735019620 GIT binary patch literal 1816 zcmbu9-Afcv6u|F(sB0}{(u0uT2A43%p)s>1B34}U8e>QwVj(QEv!gD$AM9RXt)O5j z7&fCnp{MAv=N?4J$d_Jv2;cH4gbIovd(IczFXcB{c3rf?oN2`893Xl{+Ug9Z`tZ~ z+RMC;Z_>247e?=3h5GK^h_}Jd&ebo_FrUVpn7O{z1tI2r@Kf08T^hE$AHFmB;0up6 z(zIv98zX6Nn>A)>f;ECy!+rO$2~;xIU!t`ZhnJ{&Cyw2s zYf(Vv`uZh6GO%sV{pJU%#%%%5Tm+M;C2=?uQc_7v?}hBZE&~7iIKCpO^j@{N(`U6 z3z@l!U2uuvlnMp62r0!9ca8BYHwLQQb{26a|0M|+jYr(BRY?ioU#k+sQ&Qy^IJld- z%!q=|Mc@Ev>=P4ykI*Lsj|g9?9_8LihFb4+3K-V>*YU$J7F&hkQAPGost{~Be~C>n z^f~#lj%J2jC$7H@9ywm}6tJMBP6^ltaaHu(2?**8^GiW6AomC`eecxqH_=fpk%nE(wuVc>Y8 z`z7*wm4C+~L|h65cZ1!n%x6o)j)T^}H4OE);DarAx&!(D^iaVrm)%^s;?Cu3& +#include +#include +#include +#include "byte.h" +#include "socket.h" + +int socket_bind4(int s,const char ip[4],uint16 port) +{ + struct sockaddr_in sa; + + byte_zero(&sa,sizeof sa); + sa.sin_family = AF_INET; + uint16_pack_big((char *) &sa.sin_port,port); + byte_copy((char *) &sa.sin_addr,4,ip); + + return bind(s,(struct sockaddr *) &sa,sizeof sa); +} + +int socket_bind4_reuse(int s,const char ip[4],uint16 port) +{ + int opt = 1; + setsockopt(s,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof opt); + return socket_bind4(s,ip,port); +} + +void socket_tryreservein(int s,int size) +{ + while (size >= 1024) { + if (setsockopt(s,SOL_SOCKET,SO_RCVBUF,&size,sizeof size) == 0) return; + size -= (size >> 5); + } +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_bind.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_bind.o new file mode 100644 index 0000000000000000000000000000000000000000..ce6822bc193232fc56084672f68b07283e2542d5 GIT binary patch literal 2136 zcmbtU&1(}u6rUukjT)0Ef&mK+x=IUnX;eh~BB8ae8a=2zsFgGyTU%_CkZiRr(prLr zAr|@7i6Bc<|z-XN!kgQLutSv1)z4-I;c~q!<0c?0fI`zUJ-D?C7~DAazgpBOxL?vD*R7B^Wru-zQ(UHGjMBPU-18?=pYyYj=v!RAKg>3yfQX>^Ru*c@MI z<6ozcXxr6JHKJGh)M&DrQyY_{wa_L`%ub^JBKj}!74%2zM)aLXssTP{&oPCUV-4}9 zO$}fet7_=^T#_${xpZm~MvDkqM5%h?ECueN1$c(9GS6Vx;|tXJC#ga`aacen9*JN$ z5sXxP`wf&5OmV=s`?%^`lTdmvH79lMKo_q%iE-w=6H zxbtDxYE`su&H8)XL2;PfJ^wc1YV}_d2l77oopASe`kXrA6!vY^$w}Q;^NnF2wRQr& z))xjZhLnYc^sP;~(cxp_QaI=k>AM~Kk^h(j#Jler(lim@1%qJyt4N-rRV)77CVa;x zd}|Mi5WqR{DEh{avG*mLmM(Li>n`dRiL{OnQs14#hCla}OPfh2$r(vo~c96<2Sz6TvV?z)VRk`91FjznB2lJ63>l#-tp F{9o=R9Mu2- literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_bind6.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_bind6.c new file mode 100644 index 0000000..8a5a7cd --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_bind6.c @@ -0,0 +1,45 @@ +#include +#include +#include +#include +#include "byte.h" +#include "socket.h" +#include "ip6.h" +#include "haveip6.h" +#include "error.h" + +int socket_bind6(int s,const char ip[16],uint16 port,uint32 scope_id) +{ +#ifdef LIBC_HAS_IP6 + struct sockaddr_in6 sa; + + if (noipv6) { +#endif + int i; + for (i=0; i<16; i++) + if (ip[i]!=0) break; + if (i==16 || ip6_isv4mapped(ip)) + return socket_bind4(s,ip+12,port); +#ifdef LIBC_HAS_IP6 + } + byte_zero(&sa,sizeof sa); + sa.sin6_family = AF_INET6; + uint16_pack_big((char *) &sa.sin6_port,port); +/* implicit: sa.sin6_flowinfo = 0; */ + byte_copy((char *) &sa.sin6_addr,16,ip); + sa.sin6_scope_id=scope_id; + + return bind(s,(struct sockaddr *) &sa,sizeof sa); +#else + errno=error_proto; + return -1; +#endif +} + +int socket_bind6_reuse(int s,const char ip[16],uint16 port,uint32 scope_id) +{ + int opt = 1; + setsockopt(s,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof opt); + return socket_bind6(s,ip,port,scope_id); +} + diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_bind6.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_bind6.o new file mode 100644 index 0000000000000000000000000000000000000000..9a8b8dd7222e7d771e7dc3cee114df53215b3f58 GIT binary patch literal 2288 zcmbuA-D?v;5WqJdwI9|dmO=|E&BG}Q_GoMgK~xfq_AIAVQBkObOLDQH`8bk`w56aB zEG%h6{{sCVd{FvO0tzh%;zJAi=989Mw1R~ol{$0TZMR4Aq62rk^P8ESnZ4V)hnLjL zPKSeVagYmSPvevj!?`yPS7-gtNP{ZOf@;~6LQ3ha@+N8J!>&GK(`)n{whis3r5dyuR4S^} z6QCen+|H$l)Ptjy$Mb5Hep2c82xUb>-agFh!@Q6@Ee%4-;2Q|& zfeXbkbAvdhybf1qYui&;3G2rTWgTy$^X|Ept52L2m)bQ}I)Juw$U!oA8=Z5PTE@CU z73aJQ^^uDg&-zYA^jJ#E`iA8p`OJV{_MfUx36Tra8B>eFXy)tV1fS*gv?iPSlu6`- zW@SFCVPdZdZB^zt$Q-eMJhwca_a6e*sMQ*S{a_cx?t2A{c831F_J-IZ zcHhIm?RzK2-(_)pu*aj`D3xJ-qzGAN0SCbkd$;%B4y;lBAbWqFfn5}Pe$gh*(a%kO z?ud-fT@7~(>u6L7@Ict(H%tqI4m-`Ja!kQ8=o~Lf19_!l!>=<13vxZ?(6F$_0 zpKroPoA8@Wc%li +#include +#include +#include +#include "readwrite.h" +#include "byte.h" +#include "socket.h" + +int socket_connect4(int s,const char ip[4],uint16 port) +{ + struct sockaddr_in sa; + + byte_zero(&sa,sizeof sa); + sa.sin_family = AF_INET; + uint16_pack_big((char *) &sa.sin_port,port); + byte_copy((char *) &sa.sin_addr,4,ip); + + return connect(s,(struct sockaddr *) &sa,sizeof sa); +} + +int socket_connected(int s) +{ + struct sockaddr_in sa; + int dummy; + char ch; + + dummy = sizeof sa; + if (getpeername(s,(struct sockaddr *) &sa,&dummy) == -1) { + read(s,&ch,1); /* sets errno */ + return 0; + } + return 1; +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_conn.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_conn.o new file mode 100644 index 0000000000000000000000000000000000000000..02f3a713e17716ad022a1326338ab322372278ba GIT binary patch literal 1936 zcmbW1-%Aux6vxl(Zuuiyx9CAAa2|#*sKF@_iKrD#N7^F#0hPi!JA3_s?yl_KKrJv> zCg&cTP2;V>mRo;g zj&4k>xD9S~hBWx#tcPLFJ8}kFqZ{p=;09yXwj0b^JI;D8C|cigX#c_#ef`1Tk>H0L zd|smj!TWHo+jwjx+F$>i*i2c8C@Y~=dGe)wlsd)uAaS9nV(sg?Dr!)1$P`aCJ6!|WN7Qhnq57OC2 z;(79Es(vWM!vg~s&8|UKnD)wMkA1;Df6lR;Gm!~k*A`0LD`3y7Q9mWEDx39e&gMDT zMUQ)67iu-IL&~P|6IHLo!1gPp5-Vd!xx$$}eB_W@;||fE7Cb4&vdd6#jPzV*F^1MW==@%sOQ{mrRLT7J zREV~$Ut$Lhy(aRFH$@Th{?PvEqR9Dj|5;>lTb&ZH6aA|6*b#KjP|bYzXe%b{&8`CO6XUm=U08IO>rsszN<26Cu83j z)e%<-@wgKv9)0?9UD+r1b}32JCqY~a1-GMpT&XAg_aHN|>E9Y6p!*)j=^oNLHz^1e z{-dz(#}*fVZ67|m4`=&us8#$K#`AuqT(*66#C*<*Fv<8FW7RVK#H!3IY7sq9Sl}$b z$f^~1I9=vWZ+;GcYx%k9NnEiyOFMt6Gfc9HOU_lL=kVp qCix43DB?%4N&b=`ig+5E +#include +#include +#include +#include +#include "byte.h" +#include "socket.h" +#include "ip6.h" +#include "haveip6.h" +#include "uint32.h" +#include "ip4.h" + +int socket_connect6(int s,const char ip[16],uint16 port,uint32 scope_id) +{ +#ifdef LIBC_HAS_IP6 + struct sockaddr_in6 sa; + + if (noipv6) { +#endif + if (ip6_isv4mapped(ip)) + return socket_connect4(s,ip+12,port); + if (byte_equal(ip,16,V6loopback)) + return socket_connect4(s,ip4loopback,port); +#ifdef LIBC_HAS_IP6 + } + byte_zero(&sa,sizeof sa); + sa.sin6_family = PF_INET6; + uint16_pack_big((char *) &sa.sin6_port,port); + sa.sin6_flowinfo = 0; + sa.sin6_scope_id = scope_id; + byte_copy((char *) &sa.sin6_addr,16,ip); + + return connect(s,(struct sockaddr *) &sa,sizeof sa); +#else + errno=EPROTONOSUPPORT; + return -1; +#endif +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_conn6.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_conn6.o new file mode 100644 index 0000000000000000000000000000000000000000..8b76c41ba025dc0bc164f6c85a676305910d1939 GIT binary patch literal 2200 zcmbuA&1(}u6u@6T`e`(^cqk||hea#c#b^x0gQPavtu9i97KCEV$Hs;x*^q3tErLR= zc8M*be}s7UQ0yTD6j~6x6+DUuEwrG5f`>|dZ+E7dE}M%!$j*De_c3o~XEqNmsh7PT z4{-6o1!!2D;^=MYF-wg>06IW1^U^2P%t)K&hKl-k)ik8vgXSN_oRB^$^V>?bg~CV7 zpM&Oyg}N~iuCEfP1@NJoUpL8Es0SZC$C3NG9KL1CS38D-!cvr_`;s@f@+-UMmpZ|! zLa1FeKi4QdTwjYzepDci9raiNt9F4ear2v5~BOwve#oT^knwx~9l$d;1@4dk?5C}>3tDe8tM4__PWuNcYnl-1AwJVKaE z%V~8Ki80$+tKg$oBg#=UthXdW)Ni-hAjA%1Cz_8c=l@)=Z7D=`>AdDTz8E6aO;G)+Z!g%7U`J8x3|ju4j-^fAz->s-9kV7zJ-uG z?;53@Xu|0nyT!+v@T*PuSQD-_;d&E(uL*zBghNG7PiaOXtrv??IW3x6+K56?&z0^* zVLVbumP%TtRMxV&8A#0uH~HI;%Uowwz;}?lt|mTx1H}2|DvU{yO6nOaGi)ZZX9f zKP~WssPj6D0zV}1R{{?T{EfireDFHk0;g{P=R1s3pWRHS!Ot!p^(n@O$caMn +#include +#include +#include +#include "socket.h" + +int socket_tcpnodelay(int s) +{ + int opt = 1; + return setsockopt(s,IPPROTO_TCP,1,&opt,sizeof opt); /* 1 == TCP_NODELAY */ +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_delay.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_delay.o new file mode 100644 index 0000000000000000000000000000000000000000..f773390a12e521e742f702a31e9c27d424335ce4 GIT binary patch literal 1384 zcmbu9&r94;5XUFR*4=gyl|2Mn=u)Iu>^@u-5f5dH>yLtzB6#R&$;MZd{gGw!4z3pu zo(2De{u#xCJ+#n&#e;`>7wmkq@3nE7QyoZV<})*yc@vV8jh)Rg&m$)uy`{gNqeMXl z)>B-k5*2Ct^g4L=b)3lsGPcilX3Lk4+4|X-ErVR~#aTas?=YyG-if^9UGk2mJijzi zIOja@=QcJE-I%PT?$-MHT4k=GTZdt{SyJM(woqLv9!z$HywNQnyZe z#!O%;W5ayL7q%*8_0fm~Ht>Ws`V_41_$$kO%bn^tLulFS4af1!|E*u)TFf=ZS62Gg zS;#`R-TV&M*pM?J_A%%DK(5}Mzs?N(rF^mAg$T&p_Z*iDCErAyb7k%{2juRM>*_zb zLaSvxe7QTM26idGY~54VIJ-Q5ky&2 +#include +#include +#include "socket.h" + +uint32 socket_getifidx(const char* ifname) { + return if_nametoindex(ifname); +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_getifidx.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_getifidx.o new file mode 100644 index 0000000000000000000000000000000000000000..ad44d47d0893ebfdf358a636788a52e4d78ccaf0 GIT binary patch literal 1352 zcmbW1%}YW-5WwfDWtIo~I0OX=K@{Yo79Bc-(1!)lA?VOap1S74e1dNe)}?=;TmN3y zZgmfA=DCyW@J=o~X683DJF~N{Zf zv-ZpxkrhPT7TOuX$lSDvo7T6ClIkp3oB5vQY0Ft$vm&Idb%=i2bKd+D%%#3k__>Sg zmtBZD_s_V3itLGe<%IJS;(R`T4H?y!Yh=NWaLCvj^h-u5A0m%U8M}%OIXjBw{6|i- zQs$E_XGfvmc2j<5E6C{V^87huN%cSNP^;*7m#pvlT%F=F@H2K9>*>UaQ6EX25Kp>c z;_`J&Dy08U$rYJrX8~I4_^mnp@Q%C4 +#include +#include +#include "socket.h" + +static char ifname[IFNAMSIZ]; + +const char* socket_getifname(uint32 interface) { + char *tmp=if_indextoname(interface,ifname); + if (tmp) + return tmp; + else + return "[unknown]"; +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_getifname.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_getifname.o new file mode 100644 index 0000000000000000000000000000000000000000..f4a8f61ab330e4d774f818238f00cc01e3ee7d34 GIT binary patch literal 1592 zcmbtUF>4e-6n>kHdWlhEum~u)Scrldyl4?3$U$<+7NQ^sg2=IVH}Q`1cI9>?moyPV zigcF#3`;AEXdkfhCs^3n3-P_3_jZT5>zrcW_rCYOnKy4{_MrJ>YbFRlMgWhY@`MFg zbI3+PH{cS?LwxwV_Lcl!^ofs8z7+Q8M|`Du5+8oAeIvgbuimGFG}}#IGj)w^u>Tx_ z@nR4zT&R7-wTQpLv0G#}FE1AE_Qu9~bZ1ky`$-x-R1ehZN?q0OS_q)>y`f3kXwAsl zo}iI_n<%5l22?jO38;3SgBoSzP&!V7E+y$+YiE=UHKj-Bnw?seBSr{{O5iPA#V}F_LZRSJv#dHOD)?e!$ z#%WGp|BiKjy}n<^JgRGz^TmjMUI@07OG9jv@l3&1pAQW0S5$#y|3Wtq_}hIBU@o6*;_nU;Y8QifO0- literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_ip4loopback.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_ip4loopback.c new file mode 100644 index 0000000..1bbbe95 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_ip4loopback.c @@ -0,0 +1,2 @@ + +const char ip4loopback[4] = {127,0,0,1}; diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_ip4loopback.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_ip4loopback.o new file mode 100644 index 0000000000000000000000000000000000000000..17dce96a22a28f594f143c7ba749a1ccdf166682 GIT binary patch literal 1066 zcmbVLO-sW-5S=tttG8Z6@L=_#f?cfUBq)Jadr@zmC0PTOnrvzIpr`&Ne~y2{U!XJY zj$Oup(1p#L_h#PgN0P<$?M*9+fJX#Zuw<+Pye~sYf8rFjU;`F_<>TS-qIWbZ@<~?p z5_PW5`U5pMb|HYO-%6Y1h<5JqnIl`gT2N1!%|PXK4Qg&2(WWem3UigQg&N;K^lO{x zX|Rjc!d8ffxvKvJy|jJ{XE;(%lozzS(iw4ZTS3>I`O#i#z=2E3F%EcBwfB;w_5z?Yi51T1;KM0<8ILBw_|Pe Uw6KqpS@L4cEXRLMX$Tm6101_H^Z)<= literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_listen.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_listen.c new file mode 100644 index 0000000..abdb483 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_listen.c @@ -0,0 +1,10 @@ +#include +#include +#include +#include +#include "socket.h" + +int socket_listen(int s,int backlog) +{ + return listen(s,backlog); +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_listen.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_listen.o new file mode 100644 index 0000000000000000000000000000000000000000..4d28725e13d3891d11ea0fe8628468026c8b672e GIT binary patch literal 1336 zcmbVLJxc>Y5S{a)Ni;TAA9?Lb$7kwdBEbq1h<$r|5CTQVHBLI6Lnmvs_H>%0;u?PV8Rw^GfH)btB z%IL8H^&FZIR4a}_C8+K+Uq<0TgK7^4107*XG&EW@?jI|$3EMrlgN5t>S+t)O!LC_< zZbrn)B5xc0oWRH}SmKtAt)iwn1?w}uXK~-+tZvv4TGl$mIGwpD{|vd**AjlNaQ!0} zM4S6(xQd4CiDE&<`~)$d=dU3~^`(q0uqy&G_ZH(4Bg&`Xu`6@eF(7wGxy*lJqSca5 zzT6$9PVAxl&ejm4+2#C2#Iovt*`?C|;fk#9#$227a_}>CF}D58jZq(2oe-XN!-UJ% zkyh~kr{s!^=jQ?RX#X2dKYSwHyL@X2IUcrq+BEy!*yu>LVa|sX#zfu|-3{&dcbZCo LHVM5)_ul>hL~Bfq literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_local.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_local.c new file mode 100644 index 0000000..1473d91 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_local.c @@ -0,0 +1,17 @@ +#include +#include +#include +#include +#include "byte.h" +#include "socket.h" + +int socket_local4(int s,char ip[4],uint16 *port) +{ + struct sockaddr_in sa; + int dummy = sizeof sa; + + if (getsockname(s,(struct sockaddr *) &sa,&dummy) == -1) return -1; + byte_copy(ip,4,(char *) &sa.sin_addr); + uint16_unpack_big((char *) &sa.sin_port,port); + return 0; +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_local.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_local.o new file mode 100644 index 0000000000000000000000000000000000000000..77021d4a4ef3a618e28108260cfd76ce5486f24e GIT binary patch literal 1576 zcmbu9UuzRV5Wweh(X?75iVuQ84?LubT|5mX_#lDQb}Kx&ND&CG9hc4p`Pytq?c&R7;GvEVlR z^%MnI*I;>q%PAg7DuDc$bA&b+d#r^*8=gR)Yo+;ZlZ!g|w>oFco)ZY+4ryONjytk-V~ zzm8gT6TPXdZrJjf2zLdrhA(_z^ZPmZR9vWs(6wAwjs&mr$X(TFN@iH>1Z^}r5i$=g) zyNYp>QA#cirmQ`U%$%K`|Ck(2%x%dxXGhD|XYab3*% zdQ7)zT^4?fb*5}Pbz;;t#CeS#>&>DepppiM$+_4npCiWrgT literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_local6.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_local6.c new file mode 100644 index 0000000..23427c3 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_local6.c @@ -0,0 +1,39 @@ +#include +#include +#include +#include +#include "byte.h" +#include "socket.h" +#include "ip6.h" +#include "haveip6.h" +#include "error.h" + +int socket_local6(int s,char ip[16],uint16 *port,uint32 *scope_id) +{ +#ifdef LIBC_HAS_IP6 + struct sockaddr_in6 sa; +#else + struct sockaddr_in sa; +#endif + unsigned int dummy = sizeof sa; + + if (getsockname(s,(struct sockaddr *) &sa,&dummy) == -1) return -1; +#ifdef LIBC_HAS_IP6 + if (sa.sin6_family==AF_INET) { + struct sockaddr_in *sa4=(struct sockaddr_in*)&sa; + byte_copy(ip,12,V4mappedprefix); + byte_copy(ip+12,4,(char *) &sa4->sin_addr); + uint16_unpack_big((char *) &sa4->sin_port,port); + return 0; + } + byte_copy(ip,16,(char *) &sa.sin6_addr); + uint16_unpack_big((char *) &sa.sin6_port,port); + if (scope_id) *scope_id=sa.sin6_scope_id; +#else + byte_copy(ip,12,V4mappedprefix); + byte_copy(ip+12,4,(char *) &sa.sin_addr); + uint16_unpack_big((char *) &sa.sin_port,port); + if (scope_id) *scope_id=0; +#endif + return 0; +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_local6.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_local6.o new file mode 100644 index 0000000000000000000000000000000000000000..899da8ddd12c0accb6ffe9c30f6be07dc2ac9ad2 GIT binary patch literal 1808 zcmbu9&1(}u6u@6TYCjAb#Y4eDa~PzeUEEqr6_H4*ok}dV)Phh5n`GOD=8I$si3%Qq z!V&}eA9xh+UObebf*@W!>p`TTh~gy&p?z;N6F0-=q7Qc8yx;qpuiXdN64!%)04NE- z75Hl@3efVvxQpWufnngzI{Tb(GVCXJekYt9Yjb?<@%neZ=zQeORW`<*uZzxyck^s) z3={V#x!&Fv7dPscSx_ud%#hjIjUwmHC)dxL_gOIE{BRAkb@SmDG18c4qgS0UGh4i| z&L(&x$Ic}h88(~1QJmM`@;67v;T4tNjdW_6Em>`qg?aN{1iOUMzoO#4wwV_K;R3E^T+M9v_{OS5Bfqd#cN_EcjeHMo?3qA!(0FeM<6> zw3Ui@?wewy^+2sz z=GVVXn}xF0QQf!Rzw6Kj6c>hH`x2-m&-CFJ`tXH594f{1wk?vmV%o~h80lUcHf=!x1^V}-YQj#Yi=`Uu zWDCNaN$wO%`0GigvYW6rowrIQJ5ws#8`&!Mn!<;K?gX9fpZ$)k5JVwP--6;vf+)o4 ijwt?=APU9O-(1NvIne98?89GsxVL^xa;i_YlpFwanbUIs literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_opts.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_opts.c new file mode 100644 index 0000000..ce5d170 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_opts.c @@ -0,0 +1,10 @@ +#include +#include +#include +#include +#include "socket.h" + +int socket_ipoptionskill(int s) +{ + return setsockopt(s,IPPROTO_IP,1,(char *) 0,0); /* 1 == IP_OPTIONS */ +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_opts.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_opts.o new file mode 100644 index 0000000000000000000000000000000000000000..40eacc9b2ce8a138d1b600900e8a51faa5e532a4 GIT binary patch literal 1360 zcmbW0y-EW?5Xa{{HBlo*u@DrzLPSAVPesH+0)7NREJQ&oxx^JiJ}%_8h&HyCzJ>2# zW$UBZX=5em%-yVBhO1n-%*=1*pV`@E@Ar=m`Wy%Ba$pDkB1_SxU@68WD8LZx`!D|M zGbR1cx0okClk7WpC*X98j$6p(AF+)14Clt##-_ZxyX`IP=}IkVc^hh7tu6b?Urby8 z72P&XP(f=tiM_F2M>hgxbk~5o3QPd15=Ee5s&6i@J3&)}s)o&`Zed9)G+LF9&z2(- zRO{&-{LA-HMbi%ob&2Di8Icu5-89Dif>G!VByfsz!)U2bo@2}BnY+xbIkk?kvey#k z=|BIg-$X6#s}H~QI_F?D4bivzx7bHV?ul|+8S@jedOLp!8TFUzfx)au$l629OGc6> zp|hc^rTdj}+aVa0lJL^W!((H2nA!J$o-&w!HdTV5V%cZ5de)#y7 zoMJcg#E56@gm~5s6X#17P2ArpdlN3?dI3gb_)VntW8d2xa{1O`aTHeT+FXWh6R9e2 lRBK~g3tLgW)@VSa4RJ&Oqp>KtBRcD^?__z*>0PGp?+3C4Q;q-t literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_recv6.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_recv6.c new file mode 100644 index 0000000..a86ca96 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_recv6.c @@ -0,0 +1,44 @@ +#include +#include +#include +#include +#include "byte.h" +#include "socket.h" +#include "ip6.h" +#include "haveip6.h" +#include "error.h" + +int socket_recv6(int s,char *buf,unsigned int len,char ip[16],uint16 *port,uint32 *scope_id) +{ +#ifdef LIBC_HAS_IP6 + struct sockaddr_in6 sa; +#else + struct sockaddr_in sa; +#endif + unsigned int dummy = sizeof sa; + int r; + + byte_zero(&sa,dummy); + r = recvfrom(s,buf,len,0,(struct sockaddr *) &sa,&dummy); + if (r == -1) return -1; + +#ifdef LIBC_HAS_IP6 + if (noipv6) { + struct sockaddr_in *sa4=(struct sockaddr_in *)&sa; + byte_copy(ip,12,V4mappedprefix); + byte_copy(ip+12,4,(char *) &sa4->sin_addr); + uint16_unpack_big((char *) &sa4->sin_port,port); + return r; + } + byte_copy(ip,16,(char *) &sa.sin6_addr); + uint16_unpack_big((char *) &sa.sin6_port,port); + if (scope_id) *scope_id=sa.sin6_scope_id; +#else + byte_copy(ip,12,(char *)V4mappedprefix); + byte_copy(ip+12,4,(char *) &sa.sin_addr); + uint16_unpack_big((char *) &sa.sin_port,port); + if (scope_id) *scope_id=0; +#endif + + return r; +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_recv6.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_recv6.o new file mode 100644 index 0000000000000000000000000000000000000000..a2c17144a47f340f4c6ca0f0b79c85fb2110e1c2 GIT binary patch literal 1984 zcmbuA&1(}u6u>7RHmSx^#e<+?4ue)`7gtLv9wepFZe*+CM^Pxmd~BM~=7VHg+EVop zDh_M3SC5|bZ}1QT6~u#B5Txj(Cn+eXP_PFjzPCHuOqR_>-(lyy-}~A(JCi)Ps9y4V zJj50cxj@>MO=0!6^{A;vNr?0kg-y|Qh0W3p_CaMCx~YP`B{x;3(;q5ZraMaQTTZR( zw11TSiL>p-QOH)Pqs zRa7vqsStl#HJ0gJrS>|vmR*HHa`P2-XoTQlmQm{WLeR_K@B@*X7VBvA_4y%80r4zd zC!U3Vk1rGmuEIuAU^p2{5I6Sn!=74Ts;~Ui`@~oGKQ@O!=lIyz`S3tYOXZWr@UV1N zIx{3o@+nItM5-dEvBcK$C3LpF}psUad0{r#=mfbF0luIIrmP?zk`M#&a!Ab_s$IG7bC|L z_5sA%o%8nsbL*eu=O<+rYd@U*+n!Dh1>|x!V^;zI*#S+W2;- z?7$Gu4~2m7J{=U^C&&jp2HbhqFzsX)e!2@E>B2|5@Ect?sg}|+nx3d=>G_D1?l4Je zQP&bnTBStLovoA#q*%(A=OdOUT`Dhuh)7 SUjF?sUaTMH@mOEHFMk1Lg9G&d literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_remote.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_remote.c new file mode 100644 index 0000000..d65d9f8 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_remote.c @@ -0,0 +1,17 @@ +#include +#include +#include +#include +#include "byte.h" +#include "socket.h" + +int socket_remote4(int s,char ip[4],uint16 *port) +{ + struct sockaddr_in sa; + int dummy = sizeof sa; + + if (getpeername(s,(struct sockaddr *) &sa,&dummy) == -1) return -1; + byte_copy(ip,4,(char *) &sa.sin_addr); + uint16_unpack_big((char *) &sa.sin_port,port); + return 0; +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_remote.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_remote.o new file mode 100644 index 0000000000000000000000000000000000000000..c082e4410fa3a5440df1cde68ac9c394ee5a08b6 GIT binary patch literal 1576 zcmbu9QEL-H5P;`$(X?75iVuPT4?LubJv=QX_#lB)yOl#k^g$@3m&@A5<}M-GLL-7g zKsaK-AL4_*Kne=_1N;po4}$t2^g)O-ce{F7?nwvkX6Kuko88&HeR12nQ!orrV!$o< zYbgq_nSr$g*I)tWfyEvByBD|YqxJX;i#O~E8-1;^_$S+cXjfQ#_-WOylrdpKNu#5w zxJaI&d+@%9fW_Yu2it#c7rgi|G28<--mon;?%0doxMg2sqmR`Oln-z=RbV`O0LEU~ zFc(U5Z*XoE1$LH`{(>Eju@y>r1ZVUQUMq&R`e{ zzlmD(Q@yQ5ectgM!S@6>EnoQHGzSB463Vw5Px^ky!3nxy$RiAix`I1v_Z}?`gdgmr zwg2O7VJ@})xb}^jw3D@FeAMc!oJT`;AdBJivD9ReoPwQF(pKuN8faRt zbrt>e&40~b!CabG0iUeAlSVZQajfRAu!{qIPUI`ghN^Ya`l%%5zu+h z<8+SmI1IYM4i}9+59#6vX68_7+^B k;wZG&v}eDjsniLg5T`S)_@1?*IS* literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_remote6.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_remote6.c new file mode 100644 index 0000000..e60a539 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_remote6.c @@ -0,0 +1,39 @@ +#include +#include +#include +#include +#include "byte.h" +#include "socket.h" +#include "ip6.h" +#include "haveip6.h" +#include "error.h" + +int socket_remote6(int s,char ip[16],uint16 *port,uint32 *scope_id) +{ +#ifdef LIBC_HAS_IP6 + struct sockaddr_in6 sa; +#else + struct sockaddr_in sa; +#endif + unsigned int dummy = sizeof sa; + + if (getpeername(s,(struct sockaddr *) &sa,&dummy) == -1) return -1; +#ifdef LIBC_HAS_IP6 + if (sa.sin6_family==AF_INET) { + struct sockaddr_in *sa4=(struct sockaddr_in*)&sa; + byte_copy(ip,12,V4mappedprefix); + byte_copy(ip+12,4,(char *) &sa4->sin_addr); + uint16_unpack_big((char *) &sa4->sin_port,port); + return 0; + } + byte_copy(ip,16,(char *) &sa.sin6_addr); + uint16_unpack_big((char *) &sa.sin6_port,port); + if (scope_id) *scope_id=sa.sin6_scope_id; +#else + byte_copy(ip,12,V4mappedprefix); + byte_copy(ip+12,4,(char *) &sa.sin_addr); + uint16_unpack_big((char *) &sa.sin_port,port); + if (scope_id) *scope_id=0; +#endif + return 0; +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_remote6.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_remote6.o new file mode 100644 index 0000000000000000000000000000000000000000..2bc60db84c6889548e1d145733f508532eb220f5 GIT binary patch literal 1808 zcmbu9&1(}u6u@6TYCjAb#Y4eDBMef(E^aNgib$l@P9>IFswfn~CYhw6%?HU8S`|D5 zg(U{`Kkz8ty?7`=1wp)e)`Lhv5yeXmLVa&D({6|DMIY?GdA~RBy?HaU``}9IYB&@E zEg`rByOyQ^Z68c}I0-T62ktJh&nY*@escGB%3Wn0j;}4=_|9kDkG!?WhPeB6*8T8q znhgzM;1&fpI@|JmzHyO-Ux(2yd>kGpS~dO{Q>^$V-CTBCWm{xX-ntjVDpB+VmH7680s)S7 z6@>0CKxjQ4io|;Ro?!2^bb3hM)9c#fNTcV*q4`JAR+#LWsi_Nzk!g`BI_1Q;b=Ddi zwJrNpcL-qBH%ijUpq90+Ue=?USamEZ)+JauM>=3->UFR@Dwfmvno|;BWhv-d3A3sR9lnqu$N_ z`;i6J@6cwU-0rHKw^@J3VGL+q6n6DF<}X%vaf1tF_K)XMbt$!tiG z&Q_`$uvRQfdm_D7uHw%pohcUJ)_BRORz +#include +#include +#include +#include "byte.h" +#include "socket.h" +#include "ip4.h" +#include "ip6.h" +#include "haveip6.h" +#include "error.h" + +int socket_send6(int s,const char *buf,unsigned int len,const char ip[16],uint16 port,uint32 scope_id) +{ +#ifdef LIBC_HAS_IP6 + struct sockaddr_in6 sa; +#else + struct sockaddr_in sa; +#endif + + byte_zero(&sa,sizeof sa); +#ifdef LIBC_HAS_IP6 + if (noipv6) { +#endif + if (ip6_isv4mapped(ip)) + return socket_send4(s,buf,len,ip+12,port); + if (byte_equal(ip,16,V6loopback)) + return socket_send4(s,buf,len,ip4loopback,port); +#ifdef LIBC_HAS_IP6 + errno=error_proto; + return -1; + } + sa.sin6_family = AF_INET6; + uint16_pack_big((char *) &sa.sin6_port,port); + byte_copy((char *) &sa.sin6_addr,16,ip); + return sendto(s,buf,len,0,(struct sockaddr *) &sa,sizeof sa); +#else + errno=error_proto; + return -1; +#endif +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_send6.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_send6.o new file mode 100644 index 0000000000000000000000000000000000000000..57dec4b3662753c8d1c7edfcf0b7f64f773a2a80 GIT binary patch literal 2368 zcmbuAO=uHA6o4m9YO7XLtAhALD=fBxE{%pDqLSLwZgCYAELFsHlWcS`$u65!S}k~} zRfe?c#iJg)c@VtWdMFVKB3`_RMG$+lSPu#!JqY!^%}hI8vKM`jo%g=?GjDcwCbxRj zV|Aer;SwT8$g;&LA)R&0deT#qq=~F13cVn`S7}z7ja5{dm*!OJN5qFMj3TM5Hyub0KR~=%*K)pAxkpn{fE%dVuTC%z_L zdBw|{u|L{8u?RB%42@0r014eVLqdbip>R_};{$l{5-@B7C5{`>e=j^98LJ;@IKBST zomKajwxPGX`(Rr~%1E1fu`Mp|m-p?B$+6v4l@Pf!RB-h)jIL81uW-#V^1AFAgD#P? zx~mg8T`CdTqsA32=ja84$Qi3pFp3aTv|K~(J$ZI-$<;Ggy}thE(FV!5tW~}uNoIR% z7JRrxqHF^rA_At*G*p#S?BiVnCaR6hzlDvv7!Na>4=&5&HXr?S?EweY{MY;hwnr{sIsMQJbT04xKEs_^zV|ZzmD;;6N7A0UjPc1?}{JiY|?mugo)*is+ z0Dd@t_XhAY0sLYB#~Y|tpEm>eXaFAz;Ew`0DOs7ThO3o~Vm2XXR+uC`$HT0l za-Jzz2mhIQyvaDmuVXq6*O~5*zsoqruV*?A51EefQTXxt&jpVA&H1#z@h;)~v%p&f ezLgzdfBl^T-zdbl3mpHWdHpufQLulk#pN$u2};-i literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_tcp.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_tcp.c new file mode 100644 index 0000000..aada07d --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_tcp.c @@ -0,0 +1,16 @@ +#include +#include +#include +#include +#include "ndelay.h" +#include "socket.h" + +int socket_tcp(void) +{ + int s; + + s = socket(AF_INET,SOCK_STREAM,0); + if (s == -1) return -1; + if (ndelay_on(s) == -1) { close(s); return -1; } + return s; +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_tcp.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_tcp.o new file mode 100644 index 0000000000000000000000000000000000000000..4c50e1750dd0bb1daf1a890c374e36be7c13e2aa GIT binary patch literal 1520 zcmbW1F>4f25P)ZIqq&%HT!O`kf?FJ7#5~+YQdoqAM6*JW5U>ye=icT?BzL>v_7zDQ zi-W+DCWVE+#t2cgwn``1D8#~aDFWxr?t5`FY?=)0&CEA5@6Eiod+(kuJ*!w27_ndu z{(FW3cm?QX*n=?`0Y6=B{`J#N^VI$B_y06LQr-20-&(<6Vc z)2#b@tIew4|J*oCf4HC0<1FR)CzS!*%oSKWD`0KaEqiRZx{qrUzoTO-q?c>XZl!O- z;{5y*=l+6hzYQYiv6vClQ?76)a}z)$+g%m3QLA3A*NxSaoj@qLr9i9&Dge<=5)c`c z>#aAvpesRyakncYOo?J8#o~*XQ;7<~4c*Drm4l^pWY^gep7ygD3$c2^Ci6BvLyVET ze=Uc;j@>{_`&6~x(E6U{w)TyBZw#jSUJo%&YhJZ}7Hg?5dSi<6K|7C%5N*@H!7duS zCyE{E`OTa(KOs|ZxQC4P=kiU1yDY$SpJSXeD*46gjLUP!F~HA`a!vg!Q>ZnsC!e1k zrF!~M99=MqjArNak02}C|Fu3pe*S!aEH4$x8-kNTSY*>1%Vgq=8% n+4qb~Wp_$ +#include +#include +#include +#include +#include "ndelay.h" +#include "socket.h" +#include "haveip6.h" +#include "error.h" + +#ifdef LIBC_HAS_IP6 +int noipv6=0; +#else +int noipv6=1; +#endif + +int socket_tcp6(void) +{ +#ifdef LIBC_HAS_IP6 + int s; + + if (noipv6) goto compat; + s = socket(PF_INET6,SOCK_STREAM,0); + if (s == -1) { + if (errno == EINVAL || errno == EAFNOSUPPORT) { +compat: + s=socket(AF_INET,SOCK_STREAM,0); + noipv6=1; + if (s==-1) return -1; + } else + return -1; + } + if (ndelay_on(s) == -1) { close(s); return -1; } +#ifdef IPV6_V6ONLY + { + int zero=0; + setsockopt(s,IPPROTO_IPV6,IPV6_V6ONLY,(void*)&zero,sizeof(zero)); + } +#endif + return s; +#else + return socket_tcp(); +#endif +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_tcp6.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_tcp6.o new file mode 100644 index 0000000000000000000000000000000000000000..c90a1f94d1716a041c42f7d8cbff3355260e35c0 GIT binary patch literal 1864 zcmbu9&ubGw6vrn`wXN2ql_J3(G)NJPc4@4HqEHeVZH1zs)FL8byWP^zW;bM~(t7a_ zEQC_<=+XbcoY*Ry?D!^5Z`xpCLPDk$p<^{&F9VgF|)J#`rgd_j#!K- ziLnWGGE;7FD3^IjII6% zwW`;l!bH6T(GMC~-8lM~9L!Pj%wGLSq!RH*@5xCb>XDAUddy;LeX)3NSNB^Ayi5!a zWCue&(U(u83W?ELd;`U%CMWNtuNU0;lI^8$TVvL(k&KlY4o$|aV7<)kdD6TZ>Lq1W z-4)y7?iy#-g3WDa%?AOq1a+5+i&eYqGRyJHW!Ix6p3hxt>f!82z-?z4o&1-iDH`W; z+Q^cVbFo*=*QePqFVTb7W=cgS+>;Kxf7I!g^OV%rB#+CvQpd_Lv{~yW`H{0-yt&?- zXDJqa;T8TRfF$FgYK^LY1u|rqIpG`a3RkFoV*j{=Dqis%FF5i z$*^!P3P!B$CuW|V9{&szP0X~I|8sW4w&kHL$$+!Ouy=F+J;b8wr{w*aCBH6aech+q zSl7vZH+81$c;tzpkEl+-quwyM_^qh4Egf&|vW0{ZXYx{LI7#+-tsnKh;k)YB>Z%T| z5;wm=q{9z0ijTG76K(jTHk<{%v+VLBcPd%S(Pzx_OO=;diI}%Qzq9qC@3Fw;2=XhO z6^m}Q>iNYL-?4d#e9np=xKyfjQn*973&+h+uE0qGj&Dct8-OI>xKoNh1tbCQrAP4v lKoanC^eDasNMh!H7h=KDPeb +#include +#include +#include +#include "ndelay.h" +#include "socket.h" + +int socket_udp(void) +{ + int s; + + s = socket(AF_INET,SOCK_DGRAM,0); + if (s == -1) return -1; + if (ndelay_on(s) == -1) { close(s); return -1; } + return s; +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_udp.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_udp.o new file mode 100644 index 0000000000000000000000000000000000000000..5f852c67ac7e56ecde842d7736f838fa49571b7c GIT binary patch literal 1520 zcmbW1L2J}d5P&C}+HSQhTk){cf;lW=#XgJ`4<01Y+D0fM1rI`D&1PR|>24yMS7^O> zSP()lJ$Uffs8CBid+JT_qEHWd>p@s&lJ{ylq?Zn4XXcxkyqWi2_RZtv#foKt5epu{ zf6q_=uK>LadoTgx;HRt2-+tO{p15EA!LP=L3I;#Y&rix4oD9=_RZ9;~y#qCw9{Ic7 zX5HUiZC3rk=f-~e&Ha=fXDP?usSMy+uE2V|0@iljvM0u>d)NcBB8YSqv6y0QAQ8we%06^Krt0ub#a0g+L; z-dgJiJqaR=dp#LpN)#(8mYzPJO;iwW>P{}M94w`+9c8cZw4cpbh}8==nN#?TFh=g) zr5yS?b{RFTQ`LS$>zkU}+BfQ*F_`9S-N87$^P=?+u$KCw8&j0`+PPbVXq)~GcG2KH zQS3<1Z|0==37LAsJ!G^#moFOJU;&={1mm1h$q!a%T%J3L0ls&XYwBN^Lali{`F!sv z)zh2e=z=TAXm&pTII^N5Owh1XQvfM5O(84 oX5TZuDmzm;o4>8$aXMqe9kfX(w|GDP0iz#;ssI20 literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_udp6.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_udp6.c new file mode 100644 index 0000000..3769b1d --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_udp6.c @@ -0,0 +1,38 @@ +#include +#include +#include +#include +#include "haveip6.h" +#include "socket.h" + +#ifndef EAFNOSUPPORT +#define EAFNOSUPPORT EINVAL +#endif + +int socket_udp6(void) +{ +#ifdef LIBC_HAS_IP6 + int s; + + if (noipv6) goto compat; + s = socket(PF_INET6,SOCK_DGRAM,0); + if (s == -1) { + if (errno == EINVAL || errno == EAFNOSUPPORT) { +compat: + s=socket(AF_INET,SOCK_DGRAM,0); + noipv6=1; + if (s==-1) return -1; + } else + return -1; + } +#ifdef IPV6_V6ONLY + { + int zero=0; + setsockopt(s,IPPROTO_IPV6,IPV6_V6ONLY,(void*)&zero,sizeof(zero)); + } +#endif + return s; +#else + return socket_udp(); +#endif +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_udp6.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_udp6.o new file mode 100644 index 0000000000000000000000000000000000000000..3f30d269ec21ec7634b225da79ca331b8d5194b1 GIT binary patch literal 1712 zcmbVM&1(};5T9+TO*OPz5fK#{q=6V5zyJ7c5svsVM zkWhpk6#P#V54BLCck$4hcoX#EEe9daZ}+`)``BJOuy1C5^Zh>d_43NSA;Ta=2HmA2 zO`$}c7+4750%d5F9+lgF%3@yQ}l>u1DO0aQ6Ea1b_t7F+Ls ze?-QMSeT5L56RdvjZ|hNy~7UI7{dp8hh=fhERJQ{$QM#+Y3WY(X3?qEZ8tk_-L`Jc z=B(UwBobM{i-xeP%!MEEbtU=ErfmslOOUl{3!AKJ5Ret3&U$6dw;K*wHLuZdTy}9i z;aH^yPi6yQ*EUr3Q}ZlGV*ayQhJw_?Sz|UcCPTc+A5KT7v`n}o4LDfTNlX2*Gk8bxD3Bx`rD6VN=_y282U)+1bEU31D8#z#FD25Qyw>@XyiD++Bkm~ zV*RN1hIggEH3VNj0mpwa$$$O?oC2@5;fP9WwVAhSagAKB-h7^y5Cx8atJf4%sW`sx zdX-JDW{bM#a_YfExC1!LfBlHmzY;j^zQRi^gMi~sDEu)%CgAwBEBqBeCOuClfDrmu6at(cOK&)H0qq zbC;ug*hc4EW$hu;R<pcOxUr6F+5ThfrTHyfZiPl{xh8VTx)q?{ z9_^1!Xy2d(p1r^g?osx?FT=AP%<{9l{kJ5X;{Bxg*(rWz9{OQ=HxTJP)1um`0myHf zzimEL&*Uud`PS!1xi)-O+$ZffzA^HfPC|auKO~>urh1zH=Qdk^r6$hrF7l4^oS*wr aX7Nnv$Cn_Hd9EgTp`NC55yQhT1HJ&|+&f7C literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_v6any.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_v6any.c new file mode 100644 index 0000000..c6d0cbb --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_v6any.c @@ -0,0 +1,2 @@ + +const unsigned char V6any[16]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_v6any.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_v6any.o new file mode 100644 index 0000000000000000000000000000000000000000..94b480437ff29d8aa415369eaa41f0afa809b96a GIT binary patch literal 1070 zcmbVKO-sW-5S=vj^JFhl@L)ZuU>B;zgP<%_?M20lUS$&(l#&FRMeNDH=FjkN_zQH# z-LcCwr!H*Xyf^c9vdMg0-CVbl1b8KI0dvMGz~?*!{TFN4gtbTw;dnGU>m6L$?A4UL zp*m5={ec=B`Vc_Xv%;AS(M>(RaOCW}1NCg20hQG?sA=U%UKNEcF;`a3s`1@Jzjh{{ zEcRYP*+CE8cU5?`;7r>b1l&U;e=2k>I8*80$HY4BW&KC!rT#74@zQ~8#UjR%4^bn( zT=zlP6$x2;j(Mq(r4l}-vbKW>d3UO1|1BE>N=R6VjXBkaRgszFWF5&8)BZAbQd~bfR2~#93Bbb7cy}%^#A|> literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_v6loopback.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_v6loopback.c new file mode 100644 index 0000000..b81ee65 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_v6loopback.c @@ -0,0 +1,2 @@ + +const unsigned char V6loopback[16]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1}; diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_v6loopback.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/socket_v6loopback.o new file mode 100644 index 0000000000000000000000000000000000000000..7b68baca040ab2a5d10e44d9e6117b1837e9b6a4 GIT binary patch literal 1080 zcmbVL%}T>S5S}#k_hb)3!GrOnf?cQ<4}!8#wHFmHdX-HKC^cDW7SWTh=41F8K7r13 zciJ%K)P?Q$GxKG->Gt#D>arC@z$=0?m@9SxzUCD4lxtXrm6|)H5sZezlVtBaPoGVh z4AhZ2?DbWD-%|ipeH6~5h;HKXiJ8ma9jHg+45+lKKuxR{nJtRE#9C=xu0}U^y~>$v zEN3sIw=hNLT^4CAG|M)VfIEnkkA<&=W-0T#SXjlqX#N1RG{1$rzH|^9brZSN1N0~_ z*KIJiMM3tSVqJO^u_DJ(_I9u!&rZFZzvf^-nI|pJPOUmT^gHC%5a~VBrq%TTkeGGCw`x2?I4L`rqCmlDwG4h*ELVnXXBwyYpKP~=uo7rFTr1rUqyi V8|Uuf?fAvo*A)M5Duer(fIn2EHVXg% literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/str.h b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/str.h new file mode 100644 index 0000000..a2a4b75 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/str.h @@ -0,0 +1,14 @@ +#ifndef STR_H +#define STR_H + +extern unsigned int str_copy(char *,const char *); +extern int str_diff(const char *,const char *); +extern int str_diffn(const char *,const char *,unsigned int); +extern unsigned int str_len(const char *); +extern unsigned int str_chr(const char *,int); +extern unsigned int str_rchr(const char *,int); +extern int str_start(const char *,const char *); + +#define str_equal(s,t) (!str_diff((s),(t))) + +#endif diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/str_chr.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/str_chr.c new file mode 100644 index 0000000..042dfa2 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/str_chr.c @@ -0,0 +1,17 @@ +#include "str.h" + +unsigned int str_chr(register const char *s,int c) +{ + register char ch; + register const char *t; + + ch = c; + t = s; + for (;;) { + if (!*t) break; if (*t == ch) break; ++t; + if (!*t) break; if (*t == ch) break; ++t; + if (!*t) break; if (*t == ch) break; ++t; + if (!*t) break; if (*t == ch) break; ++t; + } + return t - s; +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/str_chr.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/str_chr.o new file mode 100644 index 0000000000000000000000000000000000000000..8d962526a5ae34e8ea8818835a2a92b639d7e48e GIT binary patch literal 1400 zcmbW1&ubGw6vy9YR};0cQF{;+llD>zc4%r3i$YmwH7SUQREihtCT>X8{2-Y^^`hWj zdJy_Qco$E(nj&~l55@n%i@kZP-o}(lEbqO~yzjhuZ?k!S|KWq2ECpgHdr-<*#5ZdnN1i_{BJ_gs z&bRqLlXJfNr4M|~z26K%`Y*1G(mYPWnobQl@1BseTXfv1d|@9wGryts4wRjk>gwv< z@~ySFz8!VS%i@k$TBwN1eCiU3!P~Zs>aen(+LrcYyemn(jATTjJ{XYb$8RDLx3-%7 zs2!7NbldH?gOpBJ#-jS@>B2xpjn~=YXZNo|%CGXgaYU%%e|iKf8hJB_S??O$V`y2P z!R8Pb@SIg&ftE|<@MKp()nCj)_*^TyZX+=7#QQJKrCHZfLlS4YZz!EMrk-PScAVQ&L;0zM7h$<~vwxn8t$t0-@2b*k zW7gN)w4CSB@rlVfcC8a*ZtH}(?S{;4Z=QMHRuGhyWosElnzwAEH1vijz2M1xcjjA_W#0 zj6{$kbz|or=;ndRDgzlyC&a>xIx#WAd-ffelczq(dGCGheec~p$FFX$uUd?OHU_ug zU#2O*C;^=aJ8&AZz=Lx<7%Lv|H=mLEA@@I`=fNi9!73xZr}&4MTgWZq?-hR+@q0FM zdwp28E5pZjaU?g6>OAMb5)Uf4Rf!cxy$wIyl~0J^CM65Wk{`-D1W;Wlq;`70}4b;oVx7sWNPFjo+T**F9c-4{*i zR?*8&?6-9!y}krdcclxW+U51~)M{`~2)}AGs zA3wf;QhLQ>#ukps|GOiyNu%x(=A^d`o+p@M8G~KMJd4k9^##;YD+`~b>HhOch%xm_ z+Eq-RW}Rl-x~>F(zJX)bB~pQ`ztReJ5r{+gSf>N4>2x5+8DQzu3|?Iy(2 vPDniM%@ZF_Ym40cN&qIXayoIIzuyaf-COmYMnlv~<7EOfg3#?wU(36Kk ze~gD71N{R+FZ~IEC-IV-&g{OY>$oQ$?0z%f%=c#Aux~qS8)ZufFiXG^ym*EMIE;~{ zkS@U>WT4m$mO)r#=MSjzPk$RkHNAZwlnvgMvR z(mgpiZaEDXWc|F+aGRLYJXfx)Z0#02<VpU;kR^Li-%weSNXot>Yb=8{yu zr}bl6Z-Cb~JV(k)!TlrW$+r_HMtssqh)?Q}c-a2 zW|4&fU4U1RfZ&(k^OD`ZF6F&cC+GKyNe59rUrafj4+LWf=Mly_Nx!$Abi22D8u^sF zc6#OIZ}er*zpg1i-5s2IL4Eu*Tn`YyJC4rrCOC(aj{7>EI71Ebvs~NeI0)sHm9Lpk z#i+6yHZwW3sJ>(a70eG)0M$Nf=&*uOw}!E9G94XiP~Srxf~vIJpjy#>sG|B#tra#R zP}PG*BWj|gd7vXz-q^~vby(fAn?FCFK`UMTg*c+Xc;t@AO$yx{V)DC!KNr|Q&mMUawe+(W%50XCs=3vhF?OS`pfl`iL@w4Z4v8| zBg=2$Gf--$upr-#w8sC<7&%HmVfl6>P4NBi*!Pk+-b9)E)4Po8f6x9DiLE93Tcwed zbRPV97$F(BV_%Hs7s,safrom->len); +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/stralloc_cat.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/stralloc_cat.o new file mode 100644 index 0000000000000000000000000000000000000000..4c094a7b9290e924ff792c3e3bba6768a74b62a8 GIT binary patch literal 1352 zcmbVM&r1SP5T11{wLDmK5GwK%Mfu1I4;@0VvOpq&f==?>HjMlM?jEd5-M#c5^zYTJ zZXN=gao^}V?a2o+^L;blo0<3a`FdJCi&+-%vfvmdh*^Na#D&txFF_ho(7#Qd_lsZS z=!)^Imus+k8Ou&5lJB@7@oOfwIL=0=QZ66mwocsoqi*L8)q&d27gS+8Z~>I}-12oD zt=|o7gT1cX)XH~zKB#-`YfyF112tmZM(v@iTP`T4(`vbGOlfy~S5+==@}94qr*H=| z`8ib4In4`o$>6COk;{m@Rm5?@5zNj7WY)wM&{CbG!OU+O-Zng&Dm%i;TDushJ!jPy zQA>Tr@E2ZJ2JD4N^tpeg3+Tw6D7F_dKT)jb`Af)AeYxHYu^|F7_X6XRBgu!*F_gJW z7?5X2xvalqp|Mg=Se_lF4$P+CMn~Tf%`WFpAs1Eu(;VuK(X)~DnU|LG;_x$+JYhTX z#E6gTg!rf%Cf;1KC}NMNoDSHKm?jX>ds+_l!|!d~#Qq8JUqd&W9jE4KUpWwlQ=lFw Vxgy;Wo%Qc9Sh*k!^e)5q_XqtLP|pAW literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/stralloc_catb.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/stralloc_catb.c new file mode 100644 index 0000000..b606e32 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/stralloc_catb.c @@ -0,0 +1,12 @@ +#include "stralloc.h" +#include "byte.h" + +int stralloc_catb(stralloc *sa,const char *s,unsigned int n) +{ + if (!sa->s) return stralloc_copyb(sa,s,n); + if (!stralloc_readyplus(sa,n + 1)) return 0; + byte_copy(sa->s + sa->len,n,s); + sa->len += n; + sa->s[sa->len] = 'Z'; /* ``offensive programming'' */ + return 1; +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/stralloc_catb.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/stralloc_catb.o new file mode 100644 index 0000000000000000000000000000000000000000..417a6aae767a6b32b94ad2802a9cb6dcd47f8d2e GIT binary patch literal 1608 zcmbu9&5P4O6u@7a>SlG(`f(_@&>W(y;0|^b5kCu6cUFsn;6Yg^Ng7!(ZI^ZyT0M9u zDnk`K`nPy0DB@8B{{c@GL=-#-3hTUN#!hFm7ad66d%rht-kUd*Ji1)FlCvyO!-5Mi zu@nX9X|R&u3e3SQP`>JoDUZExl>e&nhWC>Wz7*-;BCPNq{3E;Ze8U>!{PKs#BepPn z=+yY9@`&1J`PYQ=v0ZiO@BptmeDpS-yYmV&@%MB%@6loGIkjQKE6~B4;_JPo3T(xn zlWGnoZvgATO|W_e%buHYUWk?E1;+=+Q+!>0Vh{4QJ?^s{S^&${>KS+8QWV_tTkc76 zf-EhTN%?510+4RM$^1Y_)=A}>(mGM>6BhLtkcQ8EAVIeaB%#q-{cgu^MnJ-Lvl+F- zlvbNXWcm87#V+&1`)Tg~c)KDN8@1C|qay8OubQu*>8KtOPu^f?j(4PxO5ZLaF^?nd zqLfD@x23JbJEa)X%ymroam{~?KP6(ZE_sSVONYvTS^+6l{R)?bV%CJdntOzC!J$FPp9N|0xrFmhR>T3AZ^?=GhuHq1-| zVPXIGYxSt_4bR>D)-ZT!8-8vZ4&pE4$8kHXhdv8PIBid?PUJWG>+wbxf>dMMQScHijBBVKf1cV@ns@6C_5$>F{B{gUUAh(~wmk0&Tm z-2$6A+@w`np)lL8eQjsG+Rrfi9?rg0_p;+K`|$}WVfLY&eGHHGYvuM)uU5(4hO>9o z&pG>i{wDHXJR)ye@%+{0@++=!k#Rhb9lRdAEY1AZxd1k#wYz&esNapd&-5s`uC~?I zMng5O7ABEOo)1&qWt~n6-4|;T541|-X-cZ6Q%$OyB&2dQ?suL}^e`qBjfcZ{#3`e3 z8mrdB#~Vqiql2RMf4l?cVuh!jGn&TFXSHG#%Z7P@pCt!_+dox+nfsCMV zd&9lEzcrAr`~@feH_?N^IO;??O;j}R!|M#<(Hz>vdGa0N4sjR9CxvVy$O0VSuHXUN J5McJb{{pmkavT5v literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/stralloc_copy.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/stralloc_copy.c new file mode 100644 index 0000000..02f8c47 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/stralloc_copy.c @@ -0,0 +1,7 @@ +#include "byte.h" +#include "stralloc.h" + +int stralloc_copy(stralloc *sato,stralloc *safrom) +{ + return stralloc_copyb(sato,safrom->s,safrom->len); +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/stralloc_copy.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/stralloc_copy.o new file mode 100644 index 0000000000000000000000000000000000000000..8e5e611689b71534ae45b07086d9e9b29a3f4325 GIT binary patch literal 1352 zcmbVMK}!Nr5T11{wLDmK5DM}X1^Lhl4;@0VvOpq&f=;r#Z5XK=x(Dr2cQ5^e{$Abc z<{_{d_l@ojd-8$IeBaFXX5PGgzMVDB6NUl23^;)~VisULccD7p7^apN8{FaWb&a%;|*J{Uw-BZ_ovbu#Mb*K)CWmVn_TmaP{c6`f5 z>-PfNVz1}6E#NUZ>-BF{SJIuBu<%7W=;CJcm12 z$Ska-YfuW4=yU%}m(h_uQLGemexg{<=dU71_2qik#I^{?+)Ip0jwGK#$57_3 zVL;A~a#?@RLT#mYY!PuPr| z81ZqP5FdBL#Oq5IMazc;#f`PQal{MWGBZO>^s-pf!q5W!Jo Xqkt>Y9nq}+Cc!G8PmA7V`2PL@T6j`k literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/stralloc_eady.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/stralloc_eady.c new file mode 100644 index 0000000..3a31f4b --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/stralloc_eady.c @@ -0,0 +1,6 @@ +#include "alloc.h" +#include "stralloc.h" +#include "gen_allocdefs.h" + +GEN_ALLOC_ready(stralloc,char,s,len,a,i,n,x,30,stralloc_ready) +GEN_ALLOC_readyplus(stralloc,char,s,len,a,i,n,x,30,stralloc_readyplus) diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/stralloc_eady.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/stralloc_eady.o new file mode 100644 index 0000000000000000000000000000000000000000..5060db7baed23a6b4217ab2a605feb0edc29576e GIT binary patch literal 1808 zcmbW1&1(};5Wr`%)uy_bR78Rw?H+ABZ>CFD&%t)r&{5QmP;d3Uy}pJ@fL|Aar0eGryTPZ|1$-+`Dk;VnR`X zivnk%?Qsf_Nwn=kXcj<&J}~{M?562E*{BRF+X=MyI_?{2KKK2jz8y$VDQ6Fo({{Q-U zO5LLDixen#FN3m>R#dGwxq=5l{1A&Rk)GJ2KTI@L;=?f6TT~hm9fQ zWG-*yk3}Yc(O9f{RtdG|MtYW8uI*TcXD@hQ%vhcUMyb&NBc%51bj7u*HW=l4wQAQe zrB?TBqd0Lj*YK?J9P4EJO2?&i?>nUu1?KltP>{4>lX(!I9*L2ApB22xV!KdNsqig9 zonib4<0|vHnw0kCT;A(A2B_wC*Pp_*w3YDLpa*cB?Qe!&`-k_>NgfTkCyISy^Pgae zH2)5K_o0E=#_Ac9fo>VNrCp zU^m({yF7m%vbg<6*!i8uxG3`eVobCtuLr(uiHzH7?1@nyah(v4yJ6yNNM4v}_1~18 z0Tp^X0eW=)dxd_MSVk7L{H;+a*M$!ur#dT?gu?3p{>xa7Q!h{3*36<&Zu>5Q+s=Fg xqPS~EhLjPNgDXtaUDKWY*@~ntaC*l%|0r-VpI->o5%YDHPfUEDMkLPX`wKGQ+V=ne literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/stralloc_opyb.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/stralloc_opyb.c new file mode 100644 index 0000000..593029d --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/stralloc_opyb.c @@ -0,0 +1,11 @@ +#include "stralloc.h" +#include "byte.h" + +int stralloc_copyb(stralloc *sa,const char *s,unsigned int n) +{ + if (!stralloc_ready(sa,n + 1)) return 0; + byte_copy(sa->s,n,s); + sa->len = n; + sa->s[n] = 'Z'; /* ``offensive programming'' */ + return 1; +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/stralloc_opyb.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/stralloc_opyb.o new file mode 100644 index 0000000000000000000000000000000000000000..39ee50d9cf864ff115da17c977be7b77b99d3ec7 GIT binary patch literal 1504 zcmbu9&5P4e5Wpu*b+fui6%Pd$3=%}aeQW$eJxF1#eG5ewK~PcJB#o??w$kLV6~seP zctpXY$Nf7zEhyqq^dcTSc-n&p1wjwWI+MI-(?`ANKr%DGnR)ZxytEJM%?l;N03`;T zgR!S5z)AtuGF*c>m<29wIGf^KQ*@jk%i`OU*x({^zVOlKDi^;tDbs!Xa3eXu)BDgA zpWF@cF{3=KgZLnBTCd8L>(6O*@rI}K4o@S;YNj2h!bdNwFZO1=0E~N=!C0#p=G=_+ z6tm}%(?imxSAA4&JT6_@Wj`{>g~rm-S^LoW(7)~V>=W!bJGS65_i%0kuz1)_JRfy3 z$n~nS24Uo}BwR~?b-cs_=EpIxjE1YNTLZ5f0t@=xZrH<=UOx$0vh$TNI%+Nz`{ncS(2hb1RpV6ht9T->~8~ K+9bq^_x~Hl0frd> literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/stralloc_opys.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/stralloc_opys.c new file mode 100644 index 0000000..860c7e0 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/stralloc_opys.c @@ -0,0 +1,8 @@ +#include "byte.h" +#include "str.h" +#include "stralloc.h" + +int stralloc_copys(stralloc *sa,const char *s) +{ + return stralloc_copyb(sa,s,str_len(s)); +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/stralloc_opys.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/stralloc_opys.o new file mode 100644 index 0000000000000000000000000000000000000000..02bad2e14ec31fa6897e40922de79644ce440f85 GIT binary patch literal 1456 zcmbu9zl#%55XWb;r?{V=&#X12JU?CiY&1NNs`61aYayAyJ zmb0+*&+u;$d;bGl6)Y4BEe_84?!NIh!`kS;?wk3{o1Gu;B`@!F?^hg$L>#(9$Cgl{ zW&yS{+@^I}BR}13eCwuz#xFnp;V-_{chW;Y{rMSN{Pbft{p26)Hmco&L8F$w^B3>y zU$W@)*_+6D@rayx&2iUPtFJl7Mdo-QH}QJ#s?*$X@y4f<< zHd>~2C0B_|ygyEYKCj6vUx%X2qETRyXr7Q61W7=qAID@e8V!3-XTdlk6HdqDXu?}2 z(Io!0qQ@kQi)!KEt zUbft|wk&f|)T(n`Wk0_8ukklH7IjtlDT?I3RfMcd{eoMp=$hbrWBZpr(La#H3vV++ zel2e;xTG9GxVDObf ze`}1W`4>+7ZxW0~)37&vz8{X6uy_y(_3iE}6|)~~B5b{Q zSS*IU^sn*YL5lhZhzGA;J$R@GL8wq?vhTU+m{T8wnfcAkn~#vZT77uG;5cB91IsY7 zECpD~z-o%CFa;AJldZ~;Ov1`<+5b_N$*=bmD3jyw6cl`UeHhOSHofV$s~`uH$=Ch| z=S?w4HobQgmwc9kt%@fHVWlMdpUNNMGNs{hUOob+S908`aqj>_iC;}U02?INFZla~ zz6)zBD|h|bd%E^awfseKTijX*L@+m00YtRdj8zR~+#SkYt95m#M67!;h=z(4h*}hZ zNU7f4-s!5Q22pP}o4SP|t#+)%+WO;#C|337rjxS^A5&=qW9*8mvC|ndzEVaf^$I>k z#>jknZV1c9cOE6x@r-Tx4Z~f-tvIj>lf2eE`svQI=HJ0w>Z^cH_SpJ2vk-OLzr_J6 zyeIPYa^@#w^X>dqWK^G@Lj$fc2akP#e$FW68_TmMkG+TvzB`Jw`A=-3kvyMlzB>wC zGD|r!d6Ot^481cMLi08dw;-*Pf#Qitr zX@?8rrvX~D|4W&E?DuvZdFj7s1o+obVc4#3cXX>E>LXiqh>Yy6R*k(*_##SgnK5_K SyP}={IT;?`aQZ&8@9{4?TyYEl literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/strerr.h b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/strerr.h new file mode 100644 index 0000000..702f588 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/strerr.h @@ -0,0 +1,78 @@ +#ifndef STRERR_H +#define STRERR_H + +struct strerr { + struct strerr *who; + char *x; + char *y; + char *z; +} ; + +extern struct strerr strerr_sys; +extern void strerr_sysinit(void); + +extern char *strerr(struct strerr *); +extern void strerr_warn(char *,char *,char *,char *,char *,char *,struct strerr *); +extern void strerr_die(int,char *,char *,char *,char *,char *,char *,struct strerr *); + +#define STRERR(r,se,a) \ +{ se.who = 0; se.x = a; se.y = 0; se.z = 0; return r; } + +#define STRERR_SYS(r,se,a) \ +{ se.who = &strerr_sys; se.x = a; se.y = 0; se.z = 0; return r; } +#define STRERR_SYS3(r,se,a,b,c) \ +{ se.who = &strerr_sys; se.x = a; se.y = b; se.z = c; return r; } + +#define strerr_warn6(x1,x2,x3,x4,x5,x6,se) \ +strerr_warn((x1),(x2),(x3),(x4),(x5),(x6),(se)) +#define strerr_warn5(x1,x2,x3,x4,x5,se) \ +strerr_warn((x1),(x2),(x3),(x4),(x5),0,(se)) +#define strerr_warn4(x1,x2,x3,x4,se) \ +strerr_warn((x1),(x2),(x3),(x4),0,0,(se)) +#define strerr_warn3(x1,x2,x3,se) \ +strerr_warn((x1),(x2),(x3),0,0,0,(se)) +#define strerr_warn2(x1,x2,se) \ +strerr_warn((x1),(x2),0,0,0,0,(se)) +#define strerr_warn1(x1,se) \ +strerr_warn((x1),0,0,0,0,0,(se)) + +#define strerr_die6(e,x1,x2,x3,x4,x5,x6,se) \ +strerr_die((e),(x1),(x2),(x3),(x4),(x5),(x6),(se)) +#define strerr_die5(e,x1,x2,x3,x4,x5,se) \ +strerr_die((e),(x1),(x2),(x3),(x4),(x5),0,(se)) +#define strerr_die4(e,x1,x2,x3,x4,se) \ +strerr_die((e),(x1),(x2),(x3),(x4),0,0,(se)) +#define strerr_die3(e,x1,x2,x3,se) \ +strerr_die((e),(x1),(x2),(x3),0,0,0,(se)) +#define strerr_die2(e,x1,x2,se) \ +strerr_die((e),(x1),(x2),0,0,0,0,(se)) +#define strerr_die1(e,x1,se) \ +strerr_die((e),(x1),0,0,0,0,0,(se)) + +#define strerr_die6sys(e,x1,x2,x3,x4,x5,x6) \ +strerr_die((e),(x1),(x2),(x3),(x4),(x5),(x6),&strerr_sys) +#define strerr_die5sys(e,x1,x2,x3,x4,x5) \ +strerr_die((e),(x1),(x2),(x3),(x4),(x5),0,&strerr_sys) +#define strerr_die4sys(e,x1,x2,x3,x4) \ +strerr_die((e),(x1),(x2),(x3),(x4),0,0,&strerr_sys) +#define strerr_die3sys(e,x1,x2,x3) \ +strerr_die((e),(x1),(x2),(x3),0,0,0,&strerr_sys) +#define strerr_die2sys(e,x1,x2) \ +strerr_die((e),(x1),(x2),0,0,0,0,&strerr_sys) +#define strerr_die1sys(e,x1) \ +strerr_die((e),(x1),0,0,0,0,0,&strerr_sys) + +#define strerr_die6x(e,x1,x2,x3,x4,x5,x6) \ +strerr_die((e),(x1),(x2),(x3),(x4),(x5),(x6),0) +#define strerr_die5x(e,x1,x2,x3,x4,x5) \ +strerr_die((e),(x1),(x2),(x3),(x4),(x5),0,0) +#define strerr_die4x(e,x1,x2,x3,x4) \ +strerr_die((e),(x1),(x2),(x3),(x4),0,0,0) +#define strerr_die3x(e,x1,x2,x3) \ +strerr_die((e),(x1),(x2),(x3),0,0,0,0) +#define strerr_die2x(e,x1,x2) \ +strerr_die((e),(x1),(x2),0,0,0,0,0) +#define strerr_die1x(e,x1) \ +strerr_die((e),(x1),0,0,0,0,0,0) + +#endif diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/strerr_die.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/strerr_die.c new file mode 100644 index 0000000..850028b --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/strerr_die.c @@ -0,0 +1,31 @@ +#include "buffer.h" +#include "exit.h" +#include "strerr.h" + +void strerr_warn(char *x1,char *x2,char *x3,char *x4,char *x5,char *x6,struct strerr *se) +{ + strerr_sysinit(); + + if (x1) buffer_puts(buffer_2,x1); + if (x2) buffer_puts(buffer_2,x2); + if (x3) buffer_puts(buffer_2,x3); + if (x4) buffer_puts(buffer_2,x4); + if (x5) buffer_puts(buffer_2,x5); + if (x6) buffer_puts(buffer_2,x6); + + while(se) { + if (se->x) buffer_puts(buffer_2,se->x); + if (se->y) buffer_puts(buffer_2,se->y); + if (se->z) buffer_puts(buffer_2,se->z); + se = se->who; + } + + buffer_puts(buffer_2,"\n"); + buffer_flush(buffer_2); +} + +void strerr_die(int e,char *x1,char *x2,char *x3,char *x4,char *x5,char *x6,struct strerr *se) +{ + strerr_warn(x1,x2,x3,x4,x5,x6,se); + _exit(e); +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/strerr_die.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/strerr_die.o new file mode 100644 index 0000000000000000000000000000000000000000..9249f5cf86ce8bd515fb211afcb1c58d0153dcb2 GIT binary patch literal 2656 zcmbW1-%Aux6vywnYi_CI7ClHtF0qtC4*r6oAF`9XIo4X>uL6H;yE==KuCgm?G0zudch3p3u{&d9R?Wkg4G_dMqhY0^Mpq~!#Ul=d|&zJ!GR%dP#e;Q zwd7|U&R|nT{vP|cZvWKnW!-+2u$SPJLS6Pty%3AkB?^g1ShoWaXF~gZ)1u=rIAzB6 z;#AOlSG$>SF68r9lm+j>MYRIk?~E{Z5HIeu61rOwSE}#$<4X8;Agj^t_J!6iD7qcGbENJY#b>1vhFb#Op6J*75f)B z3XZ%d9Baf!jn*{`&kyfN#EbL008FffOC3|q7gS53hxU>O!;qu$h7dxNbL|EupFQeC z{1|pfljE`PmFh#O8+4rqR6utp{N(*3^U8mjzrR6un&Q8lzc?T{s0*;~>k@Xl{!ORg zs{EcS!S#9FFmk?0DT#kmHH!Ihx0{>4cq$uX3b=d7I-PGHuzm28YZ#;Ix8PV8Ui!8z z_&MO1w~-&TsH^@h^b9_DMlP2e9XHew(V0!0n<^=B`oa(Xuu;Ck~`T>W!oa#pi zr}`b50C7kMi5l;1@ xK=E#AH3j(llkcURa5_&P;aFwj-iHaVBK!d1m4t`E$A;^n-!=TsViR1{$A55(s#pL3 literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/strerr_sys.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/strerr_sys.c new file mode 100644 index 0000000..b484197 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/strerr_sys.c @@ -0,0 +1,12 @@ +#include "error.h" +#include "strerr.h" + +struct strerr strerr_sys; + +void strerr_sysinit(void) +{ + strerr_sys.who = 0; + strerr_sys.x = error_str(errno); + strerr_sys.y = ""; + strerr_sys.z = ""; +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/strerr_sys.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/strerr_sys.o new file mode 100644 index 0000000000000000000000000000000000000000..9ea9ff3686f092517aab12ca473807c9cc5f3625 GIT binary patch literal 1752 zcmbtU&ui3B5S}#EuCYW6$CKF!NA5Hv^KA7Pf(uh#l|N47R;O2 z#$Y-{0VdDLAvu;omqbY~dYi|C1WY#@43ZQx(#$4i=lQFZ!p7ZQZtOoyfVniN!RfiC*PeNr3`r}o18F*+$H?E=O=E`{-^v&XklD0 zcYhtzm~_+deWW?T{=|tre*E2%(xvs!y^U4aFDLMal=U)|IyR5+s_IkT z= argc) || !argv[optind]) return optdone; + if (optpos && !argv[optind][optpos]) { + ++optind; + optpos = 0; + if ((optind >= argc) || !argv[optind]) return optdone; + } + if (!optpos) { + if (argv[optind][0] != '-') return optdone; + ++optpos; + c = argv[optind][1]; + if ((c == '-') || (c == 0)) { + if (c) ++optind; + optpos = 0; + return optdone; + } + /* otherwise c is reassigned below */ + } + c = argv[optind][optpos]; + ++optpos; + s = opts; + while (*s) { + if (c == *s) { + if (s[1] == ':') { + optarg = argv[optind] + optpos; + ++optind; + optpos = 0; + if (!*optarg) { + optarg = argv[optind]; + if ((optind >= argc) || !optarg) { /* argument past end */ + optproblem = c; + return '?'; + } + ++optind; + } + } + return c; + } + ++s; + if (*s == ':') ++s; + } + optproblem = c; + return '?'; +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/subgetopt.h b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/subgetopt.h new file mode 100644 index 0000000..b4b63e1 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/subgetopt.h @@ -0,0 +1,24 @@ +#ifndef SUBGETOPT_H +#define SUBGETOPT_H + +#ifndef SUBGETOPTNOSHORT +#define sgopt subgetopt +#define sgoptarg subgetoptarg +#define sgoptind subgetoptind +#define sgoptpos subgetoptpos +#define sgoptproblem subgetoptproblem +#define sgoptprogname subgetoptprogname +#define sgoptdone subgetoptdone +#endif + +#define SUBGETOPTDONE -1 + +extern int subgetopt(int,char **,char *); +extern char *subgetoptarg; +extern int subgetoptind; +extern int subgetoptpos; +extern int subgetoptproblem; +extern char *subgetoptprogname; +extern int subgetoptdone; + +#endif diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/subgetopt.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/subgetopt.o new file mode 100644 index 0000000000000000000000000000000000000000..2fa776dddb82d90a84c211f970a43fac2e241724 GIT binary patch literal 2232 zcmbW2&1(}u6u@VbXg`c>E0qcgjUax2S*+IDgi;gQ+6@$K{Wy3KNz%2gHXkG#sXf?0 zl0yiQf?gF*{sA6DFJ)UHwkI#5M=xH)i-Jf+A-*>|&z-L6#dn$ae)B$Oc9P}s$qODu zVI&G0VU9(Vv8>0@BV3IzKkHz6<%j-e7wxI#@1Ty=_9BReeya6Ppv01Edd=U^E1PQh z9pC2x;}uISm-)U`99Ecl1so@9J&jn>ik2)Ts;>GyV^!|^<*?dU1Xrf6TA>ZK{1{Zd zw6649#c)`CWa-Mf`odGT3LmSy_N(*YP~CXF60OG+r@zo!d;9*Bo?MGoH}%qRgPEgh zpWUOcQ5*^u25f&k1$8x|l(vFuxdKMTioWEqa<$oPI!V>OF~;nXp`z%sxTJ&&UvZN9 zwA4VX?(oFK~5Wu`24DPDhD`wDc6{1D$^Y+1h8iP6z;;P{x4n2)Ce1KJtwbg*CRKVhqk zY5998GoFCe%-QQ4X*pvdu9?Q7$+Vfc8E0A|pJy7U#@x+Yxp>N8S~8PL8EJ4yXG}wz zxOgp?H{;1WqLcq$0uYL0>~^Jy2z%R%z`9(12f_Ba7@C1L8y3YGb%Kd%yN%fau^tuN zD{NXU5l8;S-L+1_2Ku<;H$*($BgMP(4Z;SxO3#tIQv4|j6stSFAGo_GbbTruX-=FU zUmnF1j{p;`g67DUfPD_)n%g%9)XmVb*F6xA{@1q~xcltn`0FB$7I!VQTb0W4pBcuc zM8F>K!`a>QcK~Zu-x43>4cM2(U0>dlb@cPGZ%vtz?rnKu*hi~Qkhi*FYzr^i-8 literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/systype b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/systype new file mode 100644 index 0000000..6926690 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/systype @@ -0,0 +1 @@ +linux-2.6.26-2-amd64-:-:-:genuineintel-00020652-bfebfbff-:- diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tai.h b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tai.h new file mode 100644 index 0000000..28ee9e6 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tai.h @@ -0,0 +1,26 @@ +#ifndef TAI_H +#define TAI_H + +#include "uint64.h" + +struct tai { + uint64 x; +} ; + +#define tai_unix(t,u) ((void) ((t)->x = 4611686018427387914ULL + (uint64) (u))) + +extern void tai_now(struct tai *); + +#define tai_approx(t) ((double) ((t)->x)) + +extern void tai_add(struct tai *,struct tai *,struct tai *); +extern void tai_sub(struct tai *,struct tai *,struct tai *); +#define tai_less(t,u) ((t)->x < (u)->x) + +#define TAI_PACK 8 +extern void tai_pack(char *,struct tai *); +extern void tai_unpack(char *,struct tai *); + +extern void tai_uint(struct tai *,unsigned int); + +#endif diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tai_pack.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tai_pack.c new file mode 100644 index 0000000..5e662cf --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tai_pack.c @@ -0,0 +1,16 @@ +#include "tai.h" + +void tai_pack(char *s,struct tai *t) +{ + uint64 x; + + x = t->x; + s[7] = x & 255; x >>= 8; + s[6] = x & 255; x >>= 8; + s[5] = x & 255; x >>= 8; + s[4] = x & 255; x >>= 8; + s[3] = x & 255; x >>= 8; + s[2] = x & 255; x >>= 8; + s[1] = x & 255; x >>= 8; + s[0] = x; +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tai_pack.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tai_pack.o new file mode 100644 index 0000000000000000000000000000000000000000..a6393bbd3609653b87293adeed0da7c7e7ce24f0 GIT binary patch literal 1256 zcmbVLu}T9$5S`1#+^H#|Cp2JmHxV)J+@9peP*t^5yql{&NSr#0?UuIYUFF}?^bQz|>h1z{? z=sUINPj~3&Vwi{_8-pD~CI)K+&I`=xt*zTrum%Oo&O7b{_8@*q*LF3Iz^_#HytQi3 zXv>bbBeum>u_Q|CaR?xyn^4IHqUy)kGLZ@f3dDs}5=0}4K=gxaDS}r0vM<8`M6(-) zK?fzBt_p;Ia$by-Y+fasj~_3hl}49iTaLejj=2&)1_SmRW&ot61k8SzejX zq+C0L1wK2{8vmIwYUF;(`Rqvgp*MZkz9~eyJHJ28C9VIHp5MIo8{qv7&yjRl`1sec.x = u->sec.x + v->sec.x; + t->nano = u->nano + v->nano; + t->atto = u->atto + v->atto; + if (t->atto > 999999999UL) { + t->atto -= 1000000000UL; + ++t->nano; + } + if (t->nano > 999999999UL) { + t->nano -= 1000000000UL; + ++t->sec.x; + } +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/taia_add.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/taia_add.o new file mode 100644 index 0000000000000000000000000000000000000000..db110d5965e6236a3489d2878feac8f0a697d796 GIT binary patch literal 1288 zcmbVLu}T9$5S`0~qkiZROqvn<$wKV(>de2B~kbRNdQ0ojX5 zJ0ZJC+1qubU36r(ScGi^T| z^Z>AKkHBiXmYqsE_jm^4=XLE^#~_png{}1Ro>x9sjr6A25bK$&$gT`h0MWXs`>Kr5 zZw_M3WWLw-K~$BmK$Kf85KZq=39oi~)>L&5MCGbp_Zlc^T=||T9iC)bzN%b=n-8DQ zp_N9PU|Zxh{&z>@T&7z@On#g34-6X^H;Il*7#)0u^=Hvb{bTrq*P{k&VG?ud6<(_d z_?f8wp~+b-9??4EH+&9x>d)7UCKgzMYxl6uIkLPnpMhLEi3L78(i%Vie%w!(&yM_N zDE$BcjAEp_^ZV0WqWbss{ARS@1m559Jd!RBpWmD(Y)4Lv_{f_eA9X^~M}2wXlTmGv j=YI)63YAl#^Zd@+SLfsec) + taia_frac(t); +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/taia_approx.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/taia_approx.o new file mode 100644 index 0000000000000000000000000000000000000000..ebc4bbae9c80faba8374aad65a1cc9b7dbed6558 GIT binary patch literal 1440 zcmbVMK}#D^5T13TCarX}2nrR;-kTsE*Fch^3N8-(uS?(=gh2m zIbAS?=ZOhm8atK9mJp+Qg6m?{!!2u~uo;2*WFrfv)M$W-)o^|7bKO=#Fy&gM5>_#! zT8l!n{Px3iBeLa9uH^oZ$5a|^pE|;49`~5?CCzq(Cun9m^x9hOP0Sfq9w5>^S>~gR zPg!@F3ml4}P~Y_e{dDGi^XD;_>gvIrUPnx%e(_2D!V75Vn#lKs`eQatto * 0.000000001 + t->nano) * 0.000000001; +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/taia_frac.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/taia_frac.o new file mode 100644 index 0000000000000000000000000000000000000000..1ed97766b9ffeec01b709ea527513512983338ef GIT binary patch literal 1544 zcmbW1y-yTT5Wr_ykmD7MDv-WecPr5w$Y!)+G?UJ97Jq(*_b_ zVQgspKPc%$Y}5)Z2({HEGk5HOWvxWaiMIkZ|?IN=w&6P(ia^4;vWYXqr&XFFq+oMhENZ?Ob$Sz(l%=OQJx< z+UL%UEHC1&q1`VSnMVT&ylQ89y zf8Hmb{v_UeL8=IjFiZ-WXsu6_>LV)&L)f^8^%wbe+XGt|6Myje!CbJi|o%_YKrTJ zKc|wD?PgAlc-BscXWcMyyGhZ+{pU3%0WQ#K&&ybB{;v*C>nw+U=M$;@_ujYBYnuLV f0u_K-sLntS#K~7|3A!t)dUBdb!E(Br^gaFsFnNIx literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/taia_less.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/taia_less.c new file mode 100644 index 0000000..13b7288 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/taia_less.c @@ -0,0 +1,12 @@ +#include "taia.h" + +/* XXX: breaks tai encapsulation */ + +int taia_less(struct taia *t,struct taia *u) +{ + if (t->sec.x < u->sec.x) return 1; + if (t->sec.x > u->sec.x) return 0; + if (t->nano < u->nano) return 1; + if (t->nano > u->nano) return 0; + return t->atto < u->atto; +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/taia_less.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/taia_less.o new file mode 100644 index 0000000000000000000000000000000000000000..cdcd686411b2f9254751fb7524ac5fb6eb24fbd1 GIT binary patch literal 1280 zcmbVLJ4*vW5S~jya=y4If`WmIjYcqwQ4t>?fy5+&ScukP6HgM%1MUudG}^~P{4rt~ z$RDt@v$eIe(;2g?=Wvw+$2Z@%^X=@;-QDaRlp=-!It+mQ+CqpVoj`Ob0W7iOaX*<)%Il#(RYW~ z(3$UC`XElFFG18i4}|Nqq;MM5Ggr195cO`m?R2oD)Ab!uK0L{KzO0`IoBuzbLo1CU z&bG)a{^yRUC0X4(a`H!+e#f|`F`Xz}L^SdFuRn)g>L0-;825^-1VzlLS1^{5@H5f+ zn-XVL@rbI^ey#7IPW^fGm0+_4UW=bxsQ;DuH0AzDT;Q{#TJ1m9Mupr@oX?I*Kh&l# z$~THgcjxz~xrFt9R`Z)tehs|8);UsL4BkJvPCObqG19|sLVDN +#include +#include "taia.h" + +void taia_now(struct taia *t) +{ + struct timeval now; + gettimeofday(&now,(struct timezone *) 0); + tai_unix(&t->sec,now.tv_sec); + t->nano = 1000 * now.tv_usec + 500; + t->atto = 0; +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/taia_now.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/taia_now.o new file mode 100644 index 0000000000000000000000000000000000000000..5dbd5f457ea391e822f72f703dd576d2023a07ff GIT binary patch literal 1408 zcmbtT&1(};5TDJaHq{VTu^=e8NRbNmK~yC4AS<4*&5qdMmf9ZKy4dmKy@b*P#J3bTRUTuT2Q@Fn%W_z z3`fqY&cml`6K8ra^Vi2iW^I6IIj7v>H(YZ!a6rd?PzD)>}N>;4X^2LXve>gbBR4p@3DAqe*lpwU{wGB literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/taia_pack.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/taia_pack.c new file mode 100644 index 0000000..1f1b051 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/taia_pack.c @@ -0,0 +1,20 @@ +#include "taia.h" + +void taia_pack(char *s,struct taia *t) +{ + unsigned long x; + + tai_pack(s,&t->sec); + s += 8; + + x = t->atto; + s[7] = x & 255; x >>= 8; + s[6] = x & 255; x >>= 8; + s[5] = x & 255; x >>= 8; + s[4] = x; + x = t->nano; + s[3] = x & 255; x >>= 8; + s[2] = x & 255; x >>= 8; + s[1] = x & 255; x >>= 8; + s[0] = x; +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/taia_pack.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/taia_pack.o new file mode 100644 index 0000000000000000000000000000000000000000..d5b1c6020fa2264df66d168dfa7c9f60294d2e4e GIT binary patch literal 1424 zcmbu8K}#D^5P)a1(X7^nC_)8=?m>zLeUP>k@gN%$n+=pAtv!f>zQip`O_XF0(Mu1x zC@S~^Jos0{{)qkr4?VQ>(2HPa_PuAH!=7~D?aX{Lvv1x!-nYf~?=p@9MjV)j|DK@$ zOBM_g9Ka9^Kxw&lbn_`Z`V;nkde;;PkIRMH>GGs^xR47kuTk|Y)u&Vz6A-$}%P8fL zDjilPy|DM)TP>|!C3^sjYV90+1gBeY+@YLzhP_N6r$w?tpM`wkBvZ+c_1tRSN55Jw z&-qi8sJ<;*{u}XHyqYPB;!9-$h|Yd9mUYx|Tj?!hwWA#=;;0*g*p#sZQSWp>BsAJu z|I(Jt2t;GI*^FA4(%Ow9QT_0FrW4D?SL)iPZidh+?~sD4QgPh3{|2Y@713@cY(g#&%ODMt!7pLOkt;iR&iKkF|F1PI*7z zLhe35?5B&3*<>XU@=21q6PoSKtrA~zdWZIX{R3wv BZKwbM literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/taia_sub.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/taia_sub.c new file mode 100644 index 0000000..7956647 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/taia_sub.c @@ -0,0 +1,21 @@ +#include "taia.h" + +/* XXX: breaks tai encapsulation */ + +void taia_sub(struct taia *t,struct taia *u,struct taia *v) +{ + unsigned long unano = u->nano; + unsigned long uatto = u->atto; + + t->sec.x = u->sec.x - v->sec.x; + t->nano = unano - v->nano; + t->atto = uatto - v->atto; + if (t->atto > uatto) { + t->atto += 1000000000UL; + --t->nano; + } + if (t->nano > unano) { + t->nano += 1000000000UL; + --t->sec.x; + } +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/taia_sub.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/taia_sub.o new file mode 100644 index 0000000000000000000000000000000000000000..e49dfe89948c064aa8b012b245434b2914406194 GIT binary patch literal 1288 zcmbVLPcH*e5T9+)MZ*#j35hx()kkqbB8`82lBNgY+`QHbp>5J#Nx3-m)b!%uAU+Lo z5ud;}a3wwfGxeUX$(}mN>&)*r^LsOIHoe)+?L{mLj9IV=9b{O5On}U^=?n~l4YJiI zlaX9&&z7ycBb%{Y^HCdBM<;Yfp$AZ&)^}wk3Pv^R>g`~PNhY9{x<{= z-c{LGMf85{*Poimck4cgW92IlMb86Kb1#%|PYWkCRdzv?s^zjT;>x|y;8^}|CZZDdcW(i)qgL%%8k0GSk=`ujtqlMM(9_%b`)My>{onNd#d%b*2j5Wl@yCgmh_we$Z&2!D)X0`T|x3 literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/taia_uint.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/taia_uint.c new file mode 100644 index 0000000..167936c --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/taia_uint.c @@ -0,0 +1,10 @@ +#include "taia.h" + +/* XXX: breaks tai encapsulation */ + +void taia_uint(struct taia *t,unsigned int s) +{ + t->sec.x = s; + t->nano = 0; + t->atto = 0; +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/taia_uint.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/taia_uint.o new file mode 100644 index 0000000000000000000000000000000000000000..2bf881ad5eadc7b6f9a09ae2c3a260d436d514e1 GIT binary patch literal 1224 zcmbVLJxc>Y5S>eciC+*!R8TNhDwxHnASg&6(O8IuDAda*~uESMXINr>g_jY#Y*oTAT!<6TNT^{ViUuIcEhb+f*8O9+8z3-!s zT8;?Be2l%FcYv8#gSPuq@Va>~J(0~l;U2^bDWAdjRj=~F;+caYXgDZ$M{$c$k^iuy6e(tjU zH(V0q_*XmJI>!7=RDLz&ywQ#to%LIO4|(d(*P|hpSb=M+SmzvBUYO6OTswsYK0DG{ z|Cu!!`3}%HvKfdF+{pMzdy|-ssFQ?-<BNZJJ6yDgBYM-cBXl{r~L(O2tb|y literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tcp-environ.5 b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tcp-environ.5 new file mode 100644 index 0000000..fecad70 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tcp-environ.5 @@ -0,0 +1,66 @@ +.TH tcp-environ 5 +.SH NAME +tcp-environ \- TCP-related environment variables +.SH DESCRIPTION +The following environment variables +describe a TCP connection. +They are set up by +.BR tcp-env , +.BR tcpclient , +and +.BR tcpserver . +Note that +.BR TCPLOCALHOST , +.BR TCPREMOTEHOST , +and +.B TCPREMOTEINFO +can contain arbitrary characters. +.TP 5 +PROTO +The string +.BR TCP . +.TP 5 +TCPLOCALHOST +The domain name of the local host, +with uppercase letters converted to lowercase. +If there is no currently available domain name +for the local IP address, +.B TCPLOCALHOST +is not set. +.TP 5 +TCPLOCALIP +The IP address of the local host, in dotted-decimal form. +.TP 5 +TCPLOCALPORT +The local TCP port number, in decimal. +.TP 5 +TCPREMOTEHOST +The domain name of the remote host, +with uppercase letters converted to lowercase. +If there is no currently available domain name +for the remote IP address, +.B TCPREMOTEHOST +is not set. +.TP 5 +TCPREMOTEINFO +A connection-specific string, perhaps a username, +supplied by the remote host +via 931/1413/IDENT/TAP. +If the remote host did not supply connection information, +.B TCPREMOTEINFO +is not set. +.TP 5 +TCPREMOTEIP +The IP address of the remote host. +.TP 5 +TCPREMOTEPORT +The remote TCP port number. +.TP 5 +TCPINTERFACE +The interface name ("eth0") for IPv6 connections using link-local +addresses. +.SH "SEE ALSO" +tcpclient(1), +tcpserver(1), +tcp-env(1), +tcp(4) diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tcpcat b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tcpcat new file mode 100755 index 0000000..5a83ec2 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tcpcat @@ -0,0 +1,3 @@ +#!/bin/sh +# WARNING: This file was auto-generated. Do not edit! +exec /usr/local/bin/tcpclient -RHl0 -- "${1-0}" "${2-17}" sh -c 'exec cat <&6' diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tcpcat.1 b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tcpcat.1 new file mode 100644 index 0000000..4c51ed5 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tcpcat.1 @@ -0,0 +1,20 @@ +.TH tcpcat 1 +.SH NAME +tcpcat \- print data from a TCP port +.SH SYNTAX +.B tcpcat +.I host +.I port +.SH DESCRIPTION +.B tcpcat +connects to +.I port +on +.I host +and prints any data it receives. + +.B tcpcat +can be used to transfer binary data. +It does no conversions. +.SH "SEE ALSO" +tcpclient(1) diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tcpcat.sh b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tcpcat.sh new file mode 100644 index 0000000..2825411 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tcpcat.sh @@ -0,0 +1 @@ +exec HOME/bin/tcpclient -RHl0 -- "${1-0}" "${2-17}" sh -c 'exec cat <&6' diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tcpclient b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tcpclient new file mode 100755 index 0000000000000000000000000000000000000000..59da91d4cf7cd3d8d63ee83c968e1bff4ddf5ea6 GIT binary patch literal 48688 zcmcG1349bq7I#l(CIk%WD2Gu&MjhBhIWjI{0zqbALV7Sr5D*j*LJr9il9==mJka1w zFzqlHUEO8XUD;jNWiNGgH{j?d6Rv<~zzdI+c+x|-M8p8XeE;{ldoqc5?C<-&=9j6i zSFfsGy?XWP)vK!Jp4|MY2_}z$9b}~r&6@<)<9Mxf2LXzMVh6oo4iGWz~ z=j0R$wKpRS>qQ%3l8$FaXrcE69gyJEUi5H?7DFA{V^ByT)z|$v^;a#-e@crQp&-~8 zK>3K)0zJLpsYMJo!mUIQp2qXE(8x#RQN9&=z7={tBV4Z&W`sujsBQE&L~q}a1Set? zcT%8J)g3Y~05AAlE~fXc2MCKoXOD1=j%b8NzM05JbpF)GpmR)l+2V0y$CMY3Dle<> zt{Ala^Wk2=bKQ7&-SR1##@VIm4zc)~E-}}6W zl$c22yLjd;^toP2|B!_7rah~-_r~J5mkuiIR4_x59{#CUhuaF z8PA{b7mxoWLj@tD7ra1+%e~;~I($qo_|J8C3hIw9pZG=3FYp%+H|l+(7yJ@J#`78e z;_(f>QF=VQ4sm*#@D~sNJwpXyeJ?n*lOB@kczmP$8NJ|!oL|!mZt!zTFSs3XddA@| zzI;Q*7xjW0^&aU3XMqK5Z!dTq;`BU(zxeVeg75SULU;*Aq3y4WIBwKC@O$6`06+IE z_(_0M`AhV9qmE0%&%%YbE~~6qSR)r!%L^9@P&Y-SUB(GDl|@TSWTB|CqN1co78aJQ zD3gU-OXRAuVh$**DXG9u*{vnZs^r^ifW2^GNp*Ea<-+pHqC&Z>vO-u~28`;G!eXJS zvb-E`Maz*(rot<$WMNrhIZ(O0l9K9*!eu4&UQ<%NeDUoZD_MaYB|=&0LW;_jD6V7$ z;Vh}FkqvygY*|TVX>sB0L`z{2S6ozHSyLiZR+Ut6iKvgUON%Pxa*#>w)Em95u&hF; ztuB*GgwpDg5^6)m^0I0WpO^2MJZ0gPqpuu&6|sx-P{RMkKPtn7f25EMrR2S^3@S1~ z7>fR(CvC$b4oSBedXE4`|6B2H=sALC>G-6>^&$u?IOE{@)X8uu4sKzH_EQiCr#g&h zUL2fgGM+_oaH`vQmc+pgS*5h9I5-*{dsf83X}&O?x;Xeb1`uIG9GvD0<7te8)7)h| z>*C^@g+ucSDMcH~)(Uruon>BxGHUrKQjnBS(TJ1dM=5>|#WOj+pW-Bv5gW%pp*V?RB$eauQ=CLFB5-^+ z#YyxcN6r8+{AG%h$VEChzM0}AYLRx1hbT@W7726wIf|2LMV{sOUnx!^6mKTw=R zDbmRCM=4Gs6shC*Llh^`iBxg?eu|UGL>6)UUW${bL<%^52gOMgB2JE1Q=CK~l8HD% zejEoq%C1`^Oy2V*4Rk0AqA|C$83UBAC?oM z?JOFN@y{Gd`Fs{3)=f-9hX~$lH!XQ;kst*IQU6J!7Ez?N%Pa-wMWyWbYle%%>WC02 zIN2mA)`K82I&d3f1qSU!3`o_VY`4CGR})n?f9ICc($dl5Fh6Az=19JY->kEt0OfP} z!c7Ds+EQDpP?1O3veOm)l;m~i7L7`fmX_<-nd=BUb~<)9uejGKv=mdOHn*MipVVft zQz`218vylfO{40%>x<7HO7c5}=E3-BsXS{D55$Uy(d(M)y1_NaHG7V7y2ZJ1kuXbA zzCxMl>R0HR77}+yI6qiyx2cbQ8;!P*ygS0`TD(hvtDXSo0}~&_uli&GY;UwHl!59c z=Iuo|j1nYfB75$%MAo|p?zOKp3NBy+semX}GI{(?IgroLt^Xi=_ybg5>ZPpte zweieWDh_i4Wvv!Ufr-C)!X`93p-0p{Wss_B42sgmHtT5Mvl=J_0P(?y(-WCVapWsR zzI^2ibr-aU6mZ*ZrHXYpsOE7A`Ens0qHrOBh9VEwi+mYWU%_8d-@avnP#+fSqmWBR z>F%F4>vO-+>euLud;lDA7~1iW4v*{v1c{pbpxj-*qjISolbE9ZVE~lP(mE-aW2&2U zh3J0`YNUA{VGIREq=Adn^0!&9LAl(%+W4lVzFl4d-SOSJeGMtSFI@yk&h^VdXismS^u5ZnRlbI6xlAC`hcws=#(#@&dw zIa!xU0W$^#czWhfBpgpc3xcjM5viLbi1j-lWr2zBV0>T-kl`+`*3|% ztwKpHjnsb|XLA4f??avtL7La&r=^P0=4U{1!zR)HhrXc7YDeRIU81=9Q{ei#Qbm6V zFRuSkf8{zpYnB@@`syg-V!hB$EI^#tiPj_6f50in2k8IKLS1fyHOZ3ss%=Pa5itJL zKnb;BdmTkk;!fA55q_ueLbz#>5PB4E&6Lnm=W{|uSnT0V$kKqCf>Q=czAct)tB)$W zcMj@NpPfe}MwM-%|KEs<8wXv7#6bU%_+`PxAYFrD#?6}#3=HWU%D!>X!6zYdhdqJm z)RW)-+9pV*kJM)|`#{Y7>w)SBBlCS-(P(b{XWo8Ldi#H6gLYjaZoKNB$lF5ns*{ST z%!w-UE8);dux5K5B?!$l&pE=9X|MX&Vy)1xAU&x6CEzk6DD@-tG>w3DIyWK*furjI zb;5~gGywhbChGMn$aybvhG_m{_EYA%>0ESu2eKJT=SOwq(s*W$Lz$xQd9K!vqCq+J zttJ^?YQ_66KnJ^gTTLF{wj`JD+XS)x_-Uw0Qo&G_pMJyRJy!p{)Q3HFG<9N3&38hP zMru%_CLghUOMWEZ^OWy`SiZnj;~udI^~Xj3O^Jf=f*Vwa7U9R}_hYm5elMfJ)_)MV zSie*B=K{I81yw{Am2k_;z|^}|{e_<4A!LAX zi1imF0Fm^h-mhvphH0!*HF;-J?m$i{F!V2I0FUsCKq97;mQM)j93ANtOgF7r z=@<~r&k`Yr)q_T}79}#d!~bBA`+Q+Hxrb4ZLGFvWTKj5H9+B(6oXC9%#cAX56!OK! zqekp$qQj@>3xHVP#I3)C61@9oT5t6ptbOa9-TnIkq$V)v_rR~;E!MB3p>(|EQedbK zy~Nv4V!(PQVT8r{QzS;mTQUhl)G_vgR^<@S&gw;z^^VN3f^M{0;7MBjrAvozVs2iw zl!pGq&rzz{C6UIAs_T)J?TmNyk9J6S@Y~c1x>z-F3*}+nPRqf$L`10@p3B zg55s?EY4f$@q*$@o%!9{VLj(mnO1U=~%H(J+$Xy~LH*V}{_NR9&5 zUjX6`^k4XpP3w798^ zfY@Kl{fnNt_gt&xzFEtiO}S~(Bzs58O*$E4eMT{gk7=tn(1OOF%$Kh~V&vba48Hv2 zd@oYIJSam=Uo_8zaME1(*fHo+nq;B<`+)F3Zfa@kjwIMN=fZA@9E9p7`pJHN&;~KE zjzB<&*xClkrE6P z@G(_E+f%_RjgP;$QPW17pn)O2vL zG!o#LA-0&ZY>#De?EF!(GAYOJ&@FKe2uZow-YzNS_C1pFO1@HT@5o0)^(bHGE3*Aa zzH*nni~C7hbs(KOM>(CVyy{Zk$yM6aVHj8SVega|vFeN}d!)eM?X=XA0*~9fKx%&A zNjv%F^8rug@L%>c4qvj{2yfL^DiTw)Q)qeiuNZ@`I|RY4e9_WQkzH3}wL@>slqMrn^MmE~R4Mqly%7M{raJsKFS0q2A(F4` zQy&I#E^*^=n##K75??-2HdDeC<3Kg+AECMGKEmFoUH}MCzaiAu;!$bSC4{<#W?4r) zbQMvwPfbL~tDdnSo2fyq!N1!N16ijf45k6q@qyZx_yi^(dWbS-{2ZB8lUV-^*#J#` z&Xr@6Kgj7Tznjxvelw?EX``I!JCy)Ecu#W9c=6$|*c3Kx>3jhtNVIO6qK(ET6tHS# z67}iw-_o+sDMbDZSe$>yH3y>Nn(b2Ff`^72S!qg+y%f$Ni;4X$TE8A217nzaQR`14 zRsyBZj1q)W-(B`Z!Fx4#vexk{fDND2R`r`sw0_WoicL^b$+fhJ^e47<*)d;+3b z%kSI|^$IKjrV-ZaBD< z)5OGA-Ad~m;$i{Y?<4~CO<QJOpk4zQ3SLs>yg9+%3 z*8|oh)EuHNa4CssNP*IB*x6fR_L3Xovu+~i5a~T1GVa)ohIn72ESz1-rL?dZ>3sC>OE%`y&p6b}`+LR0i5>F22D_^SHu?DFRyOeG6MhOTPdxCc- zs)cY*xRw2kq=LJ^P&UiI5;wZ-7nhQs;Sh?zK=W<3NH9$CeWVOMarRS3GGoK>sn1LzJa{0idprhdQ!fy!nr@nVBc z(SHuoB{VB3Upb>TL9JjWu7w(DCWVr(e4~B>M*%pqS_MINu>z5+`3o3?W ztcm9$C)NBw*s=lG|oql-H22>K)ovja)l`4FdOB8DO_ zC$cW{4(ioK=#H!{jqr0rs!*Mo0tn10tV&23?`jeLj!EF}uoqg0O!c`mYGY?JxtF{B zmsI}|iDs)}jSdx#8Q*~=kPdd}uz^SAzFENR_?Z;+CR4MfF#m3bSU^hVk-RJdMN165 zB9SKCr=C79t|fFJgCw~Rx1_T*Fz5#G2(;(vteT|LzE`9DNFRgttcOB{q2zT*`rI!MiRqscQ*bo^G1lV7ZJ^ zOtBQXSBelzxd|zRA9SaisF`Wh;8YqLw$MuIBh!}V6vzztrtGB=lmtGcNB(#n4kI-- zx@LQnSD}(t9iUkt`>5#K4P2!?c$3Mo+buR(`Zx}{UL^HVzuWZ!g|6VW(Oe7^w`+!4X@a;Fb8!VRWkHpmv5Sp*mr0j9|wwPS2PV9rwb78f$0MzeBek#WMlB=$( zMO=Lk@UuT!J|9gEyMuMKKjmueNb0<}v@xf}rECT<%Wna~_@3#?p5QD~{Xrs9bni#n z+jxbAknUP@lRNez5Xb4{*~bh+aoOcQFaqLQwHObD*Jlap%S*PB$kOWBd@ z-|cP~Xp#GZsNInfBu&Z}Bv|(kB0-a1M8)pT&L$SuIC;fZPxjI3A)Vv2`6*{o?MQzZ z^YMkCFE}t2ZhL(oxi=8>D-O3N>bXl^ei7EG#S%zj6!XZeU&sSVf{YBjl_xx63iMR(^{eO&&;p5=ENjIOzk-Sts@Pi7XZ!?2tl zu#N-UQ0bKc>qxvo->W9YdI?^obpcC#$KMtS-^li`F!U!!sDg5}K7d#6 zsDL%l4XPv1g#qhb-Jsj>D*8LnJ+zM7t+g+3Zvkrg`MvA$tGEa5kf4<%-^onx7n!@s zZVB95M=AFbEqa>GyFXxk91Vqmb<7=@_y}IzfvXHw$j)VRyIk4V=0Lp(WywBT%Ya1V{{S^B(TUQ;*TfL*u(cb#y;j0yaPe2#`RY8$O)VGz^XI0s}FCNla(Wpw=tWrT(?;d z)!F!Doz|a`f08b>Hmri*GIBm+)jlTapBJ{kp z>J%Y+KapU>+n~o`CD#lGoa~~*>Lz*(KL2cwd_KzOJC*AFTs_i()r|GhRW?EW)5r9B z5ngG!n!jKRO?6P+Jn5X)CY@CWXd9pQB{BMQ2557{&-B^uaeDzJVg)o0A+3lOQGC@_ z%Cn`k(e(l?pFLPSDG@f}L8CT%Y{uMA6Je7S{JY&onXnikr9`U~Cqk|LXwN!3CaD!@ zFd21^aXa_3@wQhzeJMfT$NrO6C@eF?BLKxrzRMY9e+*?j&2n8)(LWwt=<70hAJ2q- ziZ~F18UX*_#vbe`bU;!dZwL+aMBhC&YwcjEXohVQ$P%PCJ2qs?<4W76Vhtb#@65zp zsy=xcYeh^xQxMMuN2b79$i+6<6emJ5?~}mZ#tn(`tCZ6sbZ(__>zb1vtei))(6@6O z2YIKQ+ud>oj%OEUt0ig~+$t_uLPJWeCJPn=;>LF6J>OxIS}=j@O!sXw`A+xqzRF0h zK)!v6V>j>!WfY^ZRq9Q^Dw5Tyrl+9w-GVR+jYM-{NLlC8JP=$FRWm<|M%$(gK~shK zyxSdTk1%fnlcf5noUCpHqSR(4MCzJnX_5%snM#TM)kisTN-7uAXxJUPW+f>Hi*4#% zoM)w;rD4MkaR?q zEuw!lw{M@C3Q20#EY`#70CYH37T|L}u)Q`x2&^0un7$;0r7i5rFNph3WHAAY)D*NU z0I92Klq-B)=YY?0DOGYeDxr49TC{pJ@dGIjBL%%><6&k@EEt`K)jRYQWls#;mTOBO z8i5~!8T<9QHkMf=Ibsu3+#z4v zA==S{`uny5`2GE%?Jvdm$J(x5{jm}N>W|!-7e3gBELnEJ=(B32R-1+wVT><(@}@O z3|LJk3kdx*(0gSi=7X_AW1WpbCUA0`Yk-A^b=>>3 zh_ny`L8?}U`rg-+RrJ&O5>IeWc{dsA(^Dw7SU-+N8P>E3p+i|rr9DEvqR54W zK$WU*z88&hqa%rc@%mlkA11_Z24dFG7>LOdLlGQQF9dC+zB>~U+1kc;DqMlwA)(y*HRFUNF*7esI49=xsycyyGS|iw_k|>yYD*@Xz8?GBz9i~2$l8#T=2?X zm$EEPO-ALsJ=W&I>?r#00g5Z&O`}!XCu*V#JPfSF_H$IMe+7)tdO$=E=0^D1-uC`nWXaYjkw(u3)!#H&e4R|FNbW6rjkJ&4z%b2%! z|I=m8m0S~YlUz!!B-T#{K3O-ZAix6+L6g*r7wMA<&7jR_O}?Tzv-YaC3$@zN@#yIY zpZ6huC(%z-kldqS@GSB*IL-4pct~`lF&(MuBkynn*A55gbXwAwmU~-~gBp7Z=OZWs zhFL1bKLD?Yp>!UEIt1MSH*wG2SC=1UB>(F`>hAb(To#qKwy2!H0cdok|0+Z@KC5?v zGEZAB@lNku2PkTE`Eu-)m{-L5Yp676UwCn$IK=wVl(#X`ms<+EE509}ep_oM=LzJd ziA^uXxMU?R>3xSqwW-aetW3l1`~AoR31soBe;yi~T0a!r*aTjo{{aCV$jQ?HB|4E9 z2>>2v55@cQUL$?b!TSsB{4n+xpjBZDjTU@>qQST=1181m%`h`qJ_2;l?Hcg`*f(@=8J|+K?e*P0Pu%x^L+v_#nWRT!_ zfai0cnw-J<&2NVQK)uxOmhFz6?2qb9r1@OgB4MTtPKnm#Bna}%>;*~C;GnOK$x^`Ei|2<-N!rC=w-{8?3|uW5{Rc zP_~QU$Vdt}lTb+E?%cE$Hmv zz%i2fE_F|LlNbpj9_hKT_L3sozyX~f@$3CJ zwe>zMPOL^-s^Ff6<5@jP>-4UuJRFN^taQO`DKNxNgE;90!l9u>%iFX_CRB4QEe7tE zb@H-_P3KF&87BX3`Fu^UH*J=J7K|uNG7`YvL&}bfuI~L78lT;H1|WZLe6eY;OW7d> zuQRzax_+=+$L@?HuI#XUPR!xxL<^6)mF?=k!D%@D!s5f5X?(J=Tn8o!+R7Y!poMQ| zD(W};!*T{}MC?wPAwh7X?^SOAYhlcNLJI(QMhCl8{ghppzrYbj6v|ACV}x^2)UM8R zVdtH-JTf(@Jfek7AGi)QeMk^mD8$y&bExHHvCoDVo6nAeUxR;u57>osWqjzyplNuW zCZKJQUJQ_*LAvp#ypO3uU5#~=K55HVwHFZw$9)}rAbZ;__M3g-%myrcH~~;Cnh>0v8NwVYAjza!FC%>*=TOPMgC?i{pbQ;0 zAUL_DVYXe&xuCXBaIy`UqS%CZaPkuX`FSnBPc0kHx&%&6v^CYxBRc=6<*hqZKK%27+OiemE`?u*|5 z({Zr#JRWb%kkdKh19Z`_Zo+8!P=3+p5MdAOsSc{;v1_=Nh0;3Twp8q$bnfDOfkDqL zLsh%wC!m%Hv6Q;XyYvkxO^&g9 zQ2$F17INaJxe*1n94Ep@UclN$Tl16sNW+Fr4AeUeY;R#IKOYO|5hQIQUy&5tL{Mnu zAhu(hY2Bl-tO6_x5%a)AI$-fS)Nq^C0)kU9VYFG_FW1k`{|ueS?F2XUmUUzt>U>JG z1!?!A*$eVoh)`A1gzM9QwF&t_q@R>JPV8b|1q;|DP$aloz#gGQ35ZsqSQ7d5Z6J&OH}OMPEy%Hfhy%=Fi)(HiC0fkvn&PuJUcfYqSr1_x}Ux zpBpI^ZOb?mX-1SRwR7n7*T6oVeKbG85wQv9$~T*&V3n!vgiStJccQQN;m$84^U#e; zZD6)W?*O7#d0(A{9>L`KP~>`4MVelFxy;y$~Dyy`#}_@zF52^TV1x85EH>!|6* z@tP;~<29PUI6v?&JDsn|54^<3Ua-WaLNxzFOD5=2Z^2%bw#wWziRcvFU7ElNPop2h zgIU&STYN3?c^%2k49Yh`%P0D`5$l!hEsUSa)QSFENF1t392lIfgYyVHpV_fj{mjOF z=f4ubz@RfrZFJn&9|3*2j^oo)6=taK(w-E{5yXZF$dfj~0uL&{Zpn_HVUbUZ|Oy|>bmCrkW%W~b_Y;Bxv zMGM&r{vgn(w1a4=Cga?wVx9hKBnPb5paMeL0VM2)^1(sfZi4d}^bZAsPXCj@(dZWl zs2r}#N$=-iG3Xz0C|(`qJspKQKi_=S{c$KO2}L=oHt8sI8yh@{Or@?O1qR;~W)wl4xC2f< zx@B@NY?x*;$tcBdkK#>GYa!cGky@8CQjo8Sb+HNVJ)(XFnLWX=BZ>J#hib41R1Dok zAz+%0ID&wMI`Atj^(ptc@tBA7z9X+BR`n-&4O&Mu#C6S1qyLc_=>Nwu8)g7`7p|`v z9fO5|-UD|dQQ1!&Ao@3>6iMr?N`SeyYWJX)hfz+fQ6u%j?*PyhT-K+vucog#<7wC{ zL2@NP8(oGnpe)_WnT$gr8_LEC(X>xp1KuIkN)>Mp!C9xnWx%x)DF2QL@)5W`hy^LA zE8jeP*AfzUl3|$5>J&ZkOZXAorh}cUbo;01%Z!(S0)}U*!*rb2fD@QSi=&ZJ0N!;s zG;e=>p4qL;N|Fa*b6#o3ma_@x#17z`n2K{^+GQc?pjy4x>ZvZ}V|~}I4#aEwahQ|S zArGq94~@fClZ~{;bDAd-)A6xeZG?)w(~HrB`l$E%Hfx6tYdP`{;2wuZ3F0L$(B>x2 zzZ->x=nW;(+;n9U%}9HYPn(;5hc`&5(3wK|82h$}*B_UkZl)4ptocSgLm2A*3&CTU zu3l>hJwx8=lw9 z);n6)$v<&^r(;H=J;9ZU>PZ~eGhDMD?d8&1<>$nWv+bjUlcS~eyXkPyXwknIjr9a` z6M{1>SVS6!jB=CtkkJi>{mjd%Py+^$=C}B86v>cx5FP3ond)M50CbD~55PLEgia=n z>`_w}C$$C#nlJ(HVHESd-ZS80kERuSI5VF<^ zm=@7bOFN{+h@`Z!T3US>(t5WcO;4MSG;W7QtastP`+yIXaP$fqS;=r2vEXP?>*6*R+-sxxG)U8^&o*ZG82{IMbwPm-iA?k>Kikc)qo0-9fX7Jp-`_=PAw zFbijd$@aJo1xDzH^`o+x`T({kJgZ{?WZ7X&v{&81r@11R0^CUUn{gh1&vVfN1^$6! z%n#*l^%RgH48wF`&^-g)tACx}3T?oX-X^~RISFDIksG0P4Rf)P){EL|R{6U1poN@a zslL;u<%^AS4r4i|-tb{GihV}i^|((7dxE$e#LHLp<#gy9RZrRrEG0ZWSWKz#tgC-V zD&c*?2(*TK6cE%<`==fYHiIC|KNmX#j4gV0zTv#sJaiPh>D0_H*gRS)2QV?#s18#MNt26qvATE49H`;PROzrs9j^j=>&Jq)#3vq5eDVY_bvQ0wAqzkagIhGy z%2%RO20OykpQWxg_tr$zfbpHZt@emEX*^8?#qQ~0MFI-U+GzpW4TXyn=R&k84li)( z!w;zzLL-xvp`dq;imCl)!Y37)Jz2!g)acgQHAlr8TaSwKtdjvgDvoTA)S{)hAC@4Q z6D6gO6quYOndxwD9$GpXj{K>q(!}V_N3j8rm%3b(e0fPGX_WA?29N?k|Qa33r8#oO&?U6O<8W-Oev!%+Hq0<%*xJ7s>U+RDb$WYJQeX&@gdp)HtN}gKBsdI zM%)qB>`H@4vmCf0L8pb#iTl*SFQVW1P&0BlB{TTbrk#M16tgCBWnt9}@~y{EFm_GI z0iS9(%fJ&BJ;RZwzD_NLfOsI#Nez?xNUbV@L@lstfrUh=VX|3^C1`<(0vDz=DnDsH zJdiPdCrVc&h(lCpQN2aGk$Tx4+d?o19Ub)E(!e4`kn{3byNT^nthST{O^fFoJw? zd{X%>!`_5~rI`yy{aw*_`0R;SR42jGrmG4qb8UkBU%D6+KdF(^3wup6jz~ZS^ghpl zYK{;QJde^KR8I3bhrwDgsoI_u-06@wtYZQ*k^{8>&Vd}7fkFuY0561*-^i21BPGYK({6L6$*kdro==>e+)Lap$LDoCd=qA_Mnwbtf zL%zSu1s2%u^G77F+P)BPF3{GHgxePbhm-pH2tpFu$xX#KQfM29_OBoev3aFtxGEp1Uk)YV2Ez`k+aajvY41+f?))(TeZ8e+ zLBC_$5Cir<$m2FG<5|FvN$TJq?ccHRaeq($W`h&P@Mz?&)jOHb3xheDa!ZG?<+c4l z-!Wg+SD>jNI05U?>uu0+Y@)pkU;2wQiGWv~!x#?;yBHxSO$uVxgdz8&NBK~~{x<|A z5!AvidmmVT1J<;_KpVWKmrwM*F^$aL$ch-rL~6JG&HhF?rF`wZFrG@1;qLjuu^WzV zOxW~siw*zM1Vq0d^Qy8J95z3X#r|=qgZF{4TE}>%^Fy6Oj&Sxjvy`vAedu&8^tpN` zNTES`m~(G?j$8$C^ZzWIvu~O$pkThT8LQLF0E=;7yKmFo9&9e+ z&e$ecTqGTrslOuPc9ZfMG86X<;27#2N!-pxh4yrDv-Dr60m9G6qP%<9lhnBj^|LWhjA1$lrz?)2*&Ijw^C7`}-D6$l^J z1;D)wukb(A<(N#ka>M5H_S!FlcbL!@t^3UCfB`6yYeq1t$80Nf5u>s}xkwcqVA%WCX;zOHd3(7}**U;|F z+w=-+1S@bu4bay^A}h}&>(;F$#;pWn{Nbu;J;%JYz%tAgc#Frd!|S87*ha?QvwVf5 zoM|Z_!T20bd<@7md_P7W)w}`z3k`nSN^qQ4h0JU9;=3}O<5NzNzhH6GKpk2kZ_aNf z43@aa5TM10KjhP+eA7Gz&7+z69r~1-w%Lqzi`oJoyApQQ<=`%C{do|fmcNoGMS{bD zMQh8ZXAqY}_nusAkn%YYx-F>UM1r|4OMs7u*cP0JYiMutp%(JC`~rnSGb)=~7J({d zoBA6p|47cLKQZ^8&s)HpsHSkEv=ijb{~<0=9`zdxHgKl~hNTAhLIW(;8qYZNeJkM1 zfIy`|rD3g)i;&O>e|!c<$C~jINS!cf>U0}uX~lPg(Ek$#EksoG=kWUse$V9hS^Q2b zmUfbXjxqGZ`~}M_$CR7I zH**iGrCNI?2fUcPA-EFGMAB{9#HU&L!JYhudJ^xXneNDkS=5G9G_L6%ylzf1&bDu9 z1RQHBH2JaKNf1$zTg@K&icKQ6Q<#U)Q#j`cOJy(YqIsHV*%j<9e1wA!QlPi-8lg=M zE|1PdWTGmz0ltff*#`Dk%pPJpj8vj;;=NE!P#)ik{=bmWa7F6HkYHt7!1~U$HtI~P z@AM>jDC7%69Tpld6N>d^fP(C21F;FVMA$^BX-KU*F~)lUUxlkjrp`|x z2dJQosAwT7-aw7K^=wFwK3{44TXkR)$fjO`dkkjHSbLk_-T)9i>Z!k@Zd!QlbL>_t zC=z(wz5yw8!ueT*a9>gWxV0bEGK&}EHu3#97{i@ye-cNdQIv^ zV6$T@J#Z&Z9e#rO)jR=a)jgPl71a!LD=+}A3Vepkl5ms8EEp2K2NBriME~~&M{Wn1 zF##ZY&SpPv#rD8Yu{ZVh4L8c<@~C~ho~Cx8ow7$cV$MqnR3>L{s~)ONPZ)A&27U9Q zhkZxeJgxi9!P%)7!-kuitn5}J{YdkAcPLAfJ9p^oF{Kt>bS!&TB8{gGGfud|P1O14 z-uGXrecz>rNcp<@!tWskdW>ATOvm7hVUIB#g&G~N5FM`=>#1J!9K3lCVkh1AYE|{dtTA z!`at|v;`KUvRD5pU-O0$`cS3q2PW-8Z0(Y_8C$!`JFq7kEDr4H#>B8kzrr4vuC$RU z@OsRX+r84tSCV02-HfkB^+K)c<`DQXDd&S^$}N&$RI6NM!s zIg^qfqg=E&)qxigaJ2@6Ii+DH67V(#UIY`%`vP(wbwlmaAtiMlCrtbp00_H&T93`W zwTCgM_wc`vzEtq(mUkrO<$R?Ta*;Y6Za{d)p@s4>H^En}(l=39J^t#cxUSJSpD{&cse`aE0QhBqwNnt*7x4;6*nogA(pYE_pf`E6?4th|3c;7=R<}GsHbbt=Rb7F42c2-r{uYaAd$WaMADQbbNCZw(=|><_89D_Y{R)n4?@`b8>=P zv7V4HH(jF7uVQmJdxz-%Ewa(!CP%n#JbfQVGHn){68vHBUZwwgz<*&95R@HT8eKt; z3Ez+fh@R{>l>S$Ow7UzWqE?rJ<#*0@L7swnf@!pDugex(ZPo>Pp=@^q`hPUVMm6em*4<$m?>#~-3C;uo4jtDMv?M5lo&hQ* z-E;t9roszQv^o1-DPY+S-~a%{wLEhZe@3AySJ0K9Snoil&fno3SJx}>&W@!<(gqzg zvFZL9=w{pl!`wy#a}RnKOX^qiY&2WAl-FUyWMOCfBqn#hZ9w~HH>FV1ME^r*BGPOM z(rC)1v}^RVwVXz`TR`_dbsxa-Gi5(P{TD6w$PS>HlCnF(nBgpVf#E3Q9@baM*bUJN zAaAUC=absBX(Oc$S^d6yXqexV#f@)Mmdq}UyjL{45uoNokV^10fWZ;D&rhqH@nDnb47oiU2qE8 zn~bj}y+s7nLeqE7WI2Gh!QfIWFqun0J4OZt*c3cZXA^F9=xkEoJEsR{Ggg_QHbvxa_6k!(q`K& zQt(bp`E0at|HP`eoU7>kt06D257{vMsqOh>{SUXNUwnK1gQ4($)t;C75_fvF=g$n( zS#}dwVYCOwv|$Q<1fMD1|0)0NVO&_nvB5Y z6`C{fqwFOq!Hb|)pv~AcfaQgQNveQi=r;6V`CMO@{vBp-hbE6keI#jWo5m_-OPkdV zdWaD3>dq#zGif?fI@S6o^mSY3daXYqp8}%2@-H7C2w3}S%_&6jRI=8bB}VZ$HU_&o zSr_u24S?DKCI3LF+yLy=sZQkk4*eg;=;sRPN9|)&&}Q{d*6Dwwb7LHNjnb;2E*|*Nr3XMOF5>ljUp@GZ-F0Y zI61X=flmXa2)$1>BVMx@Yk_`0AkcdO&|`&G9}Q(f?TY?4q1z`+T$y7NLfH)1%z!Ea z(ANa(=$NGlu;8=iT{X)Ow*h-FF z7FzNE)mq81l+aV0R>(0i^c=@#aV#~ojbphSJ1?}0V^?!*K&XLB$>7+)(5IYs5yu9H zzT#Maj-4N}1gO3!q}~@z3q8yEzU0^ip-VaKQ;uB}8p*M@IW{De&9OF)4Gmq(u@^XY zaj1}Ef8*G&P%X!P%dtyBt2y=n$1V;1hGVNZRvr2W$7(n>FZ2q>N;r07Xb;Eca_pwi z*BtY3YWAqU`q^yEQa` zW549slF$f_)pM*YbT!9nIrfXtwHzzs*wWAfj?qDCU$i{5lw;F5wk&iP$0l*CGStX1 z2glMwf8^L@9J7a-I7SDlebK7WPLB2A*lnRVId%eS%NPAw=rfLWa%^s>i(~)g*d3uh zYpF$Va7+$e#IaV6O%AoQ^gPe8;UNd7{fT2ELT--n`Kf45=oXGCoOVs98Zr4EUvyHa zj^4b!=;fhx^tRL&ofdkY-U@xuD?(f8ZLTls482Ql(|yq?p+odG#TRvlPSIPoFPa-V z2Xx3|e9@_)3+QdQFDivb(c48KCjwvex=q(1ltg!X{C-+{4}I5TKj+p*c|YgXq`3W@ zS%Ae&2+j13AWQ-II(Uxe&`Mf$CW@g3OW1O^i@y3}q1yv)oDaa%uC%vySu-}TI!P#Z zUy2VDS&WY&L_#P|Gubd>?^{P(=w6&=;*Zg=zXoQ$X8--Df6IZ=*$V3RZ=In@pqGDZ z8iXOq9q~J7D0~&I@*yJ+# z4w+pIPLqu919$$M^NUUHeiooMxJ8RRnqpSp88c#5*+#KMyy7F5trp)Qi=09bGu7c1 z&EBo?C%{nu3grlv$GBVs1P~By$cxIwcsZj{at4%~X~;Vx7l4weMoCnj0!kccH(PJsdR`y!!Iee#bPy+6{P$@I*Z>1x z=vrw$m;w~fj+=O>j_kcdj{c*&4|*l2LEOOVS67zz7}s4Y8>eG#|;>t{fry9mf&I=_AQ^rmut{p&Zqm7t1e|nqPZWd#FB1IYPb`>6=d^ zxG(WVy1umsXmdWtO$O=MK2nQ;t&Jl(W9B;q{C$icv^*r4!cqq9*#=#ilCrBI5&Nx5 z*r0*7^N!7#B{q#CpI`+I^!g95SLTSSpJJg) zl`tRy0Q$ZN0UXiJ=57W;Z2A9|@~N4S4Cc>e%(tLLVa5fMC!@LaHN@!UJi10*>CAdZ{sjQ6#Q?a405<{vb(CkujcO0o*O{mB zUu=Sh0yp}AI6G?>^wc$gup$HG%B)>9MhjSxA$}?1tjBOY8&ONvE^iB|Ez(cApX#UT zF@qzx%Z&@bS?ywd8`?ol3+e3OELDmlMEI+>6atlFF$m9e-T)4YEodC!^8M(Zf0OWXrPK$@cb+QF% z*olHKP(b1U_yeC2o6h^@{qFnVV$&{Tcrzcgao@C?ft`^?I20!d@=bO3(5K<%n&i24 z_ax9;f;_$M9y8wZ%w8P65jv-8{ZY4qk_!^#(RC{*8FL4htMMJ)J$Y!|3M#9>h-GED&o_C8QxslKIRnuI?_jYh zf3VrVlfKRAJ|Ba3vjvQ7!9lcceWZCTasE}W#o2ImY3rdRXG5(C)jI`x(E!>hPqB%# z@%i+jmG)94aSQi%o~iYdSUeBBpPRr4B*yxSmIE1j?We@&kI!f3e8BI~`bPYJAKLsm z8Eiw~hw%reUE3xbWIBrsD$~cG1fBWdB$6KLOGp zp_YsBBVP=4cUS@&Bon@0K*nJhhYzKo+e$kd*vy4f?NtBT!5%ssgRPGK+jE8SbODg% z2lv1ekS^jJwC_~1cYVB@lD@9&hffryVuL5R95=8ItMW;hu2g|O?#YD2kr3n104@(` zbWXTh!d^2^0HI@xnp;u*mN&>t6dEiT*by^X5YzV zZznnblpXQ3$IipKwp$X>Rk{oJOLR6)hK%f{htBV0xlFH7KQ_!Bt)H{DVBXjUex6R1 zE9xeU$E8=CP4lL>=n}`Brt$f~BHaC>t>!H9ieo&(w?@Y{Xa^n#RD987PjHCE`v+wQ zg}9cFFK*F69>N}vg{9JpPl{w<|08!tWD@dp)8kem5%Tfp!+~YX4VFN;FHLZKfIXbL zmBM(@Pqq>^h>E##bYwmqQ{sIvxLwoKgOnV`Nv3?bOOx_(y-f5s0Y+ai@pUENUFF7U z1=BX#56XhX+*By{DqRJbh$HV#|HWssekEgYHU|#;#I>2$SM9XE+JjL-erhHpbzjT$>{iBx@kvHP}} z%WVq?P-esb<6T%@R;5L&v}jdjwX6YV+xS1}_R94CiEE&84Tt_)ZVezCIAs;3l^V!n zE31%8s!I!t2#5a9ZyT3cRb6>&b>T8BWhx36mzUV&N?U2!t={SqTcuY=sqijaTvBZ- zt*o|Dd+=YBS5_BRmzCdcJ8K?KfvvE(xVogK#>hf!=)s3rRr>#lPPH-;e!9!V|4nYI zE?HJ7mly?(2Ud4F{`Yg6x5`#rQd3l2RwaYHaX|Q?^sA9h&8jT5EknW8x5raeS|}Hm z17YmAV)ydfW>UA5jjtLnkDoohe7tA8kSUBG?+_eUUOhS!{~VN6sHn8{Zf=N*>u1cKA>cKC#uQh6!Hnx?$0DAB z*sC;S7Q?U4ojzlBu7Rb+fEE+K@iv|PCB@tUC|5)3S%BxdsWak;tM*pds4Ans7Nt7* z^_MAHSkNnO!2f@R&L62SQ%_I*5xgIxPtfxp5qq}x*8&UR3ew_HjZ6fCg~^}Q9YybDRpa#H-Pg^U;+i7mLfFTY$VFqI ziz>^PkA}3D3Zx`!N~)Jbp~b!THA*!?lYm05&z*a{XLjyXPkydeP;o^~bxCb?nOq|9 z2z1Yw?($qGOd2m-FDd@^U-L88`N%sX z)N@9kd(A|lz%^SE#z04mALFg5rWaw1Fy2;HUS4u*VY#icN-nFcu#FmJgvjBf#;2CZJ;hZVAIvA5=S7qsTrk1%F8O2>KVEzE~{7$Ljncr(jdgTufm|g zhFP!#Gk!Vh*6Nex+qJHx7A-Ej)tE4g%W9U|YN}vAU^1vFDOt+qLU*$S>eo?~6)+39 zqqVvODrH$=#qBntutw`WHZ3p*R~J^?T0-TMjOg>S4vPtcAusVlp%JRht6)iuTvnk; zj$wD`L!nr}SSOpSyLZYeiYlwAM~UZJXUn&fz!)(udpTr{n%5Itefzi7e>TKaG;Y#aheaKpKwTEsMRSrBIn#{~MI($RLNv=#J^^sab+&>=rey|s6v)wb)$;v z8iB?5HgBa|2o+RRQc_Ia3B#|%cHPujn&d7itSCm`V|0>Uff9&`Lu~w%mvar>DcldX z8X2r!W(-!+ZPloy3M!=77)Ck@O-bHr;sdHNq!dE}(oEPaTC5C=G?vmbs4uy!v<$_P zVZ0p0E<@LrRcK;}e$+cypwVWlDZw-coWf#+a#>A@uGng-mtk%-)KgLAvSr?ivLbB= zX*z$Iw_Gk;Qdwmyl*!&FnfF#Kt$Pv z^~NR+ee94%)bzhT8|gX`bInIZqm|_~WYgJ5>f6W$cM1&SICEO-mjz46$m#WY($uaJ>)RO5q41cSTrhN$2R@(Xw-&q z140Sm9)yb!ru`QA3I03Ki*OUdFhU8(m{f%85YqPa9-QB@AyoeazXrk$IP<#%VfqGK z2%-32K{vuQ+)UVmP(pYF;SPjJutw5wnKld&?bui6Lcfo z@o(gVP1n$bd)W z2vvl22(!Y`=z4-93?uA9xCdccE9gcz4`C7v$`uH02pbS)AzX*B0Abo@&_Qs74G7b> zfPV;gAlyOmt)K_tJcOzJ0Y{jLFlig|Biw_q3SruIv;*M=gqskm2=^dd*M|HElkkzc z)D+N*Fdg9%gieGz5Y9uWzKr|?e+Bg;-192BOzHc;A4*rjABrPP#ev7P2-=6R3!xL?iv8#xgnJNH zAyg4IP&&f(2$MQNAHp<*?Fc1=D#8^Ag+ZtfVH(1D2hmQ1>kcD7!Y+jC5vCtOeuNDO z+bR4Kbm0EQI)v#6=|OS)nC`e6nUnh@HDWPCaI6l5_5Gc~&k4hwVxxfIWAWDk z_&5USaDwII&z9m8=0GNd$tkImQ_?1<*e0i>yHYY&C$6yuEo;pWBuFV)zCL*=i-3d2 zjz2&C>V`T6`tKlwX{!@`eWnL3Ypge>Je%-9!dhBYX?TA}7{=bxqXa zu-Y;uCEcCk^jWFAxA3>f_QQB1f%7f?giD-4e_FhuJd_qRuSKD@HI_W4+MQBo@+Gc@ zZl!WZ0x$Jar|>7jXF3<9EFubtT7c*w{>(;t_%f$ZO@Qk_m3egn@vR zJAWQY7`5|Zq}xV1g*z#o`xz9)_j9JtO6`0JcBq(?fKR1U>7=JB1sJ;0}Po3Zte#Q{(hv3D4I|09) zK)O6qd3OOG20V}8hCHvP@$9ou`r}ky4$iJn`dQ@UC8RGx`dyUHa^m6ffFAW(S6kMY z(GIHrGvIXq??S@U<%HznTfl{hP9dd-JQ$)tT8qYhUWyZFcKnURAWyxo07i9igC0$aSCaU z{FFvC1`oBT9QmG|?i8LO0QVQ`Z;boZmZ{Wdc_{_dUk?Ls(REH?HsR?H!T(P60zQ*q zae9ruvu2y&6e@IF3JCv0z#9Q)`O(veAIAXi0G#EH<-tR$haXBGh|bI`a0)jP#E?rL zq{*h0I~M7UNbgNwKHx_H*QZv>&2$t4o;uShT+I;ehv>Tt@B+Yl<39{|72pVB54RtH zx?XUicPrqHfL9atv^AF1)_hVHGe~|Z-)Bfqz1}G-qx9>*?F65h@_kF?0sc#Z^LV~C zHl8VcND}xu%PBl~mUNPv9HfVlK8Mo5Cz?7TIXr*5NvlpF3Mf(ILphZ<+bN9DK>SPf z_yI2f{A_xK(x0Sykk0&@wg%L5SH$vfMY=G@DZEAyo;M3pGS`@cG#n`ZXGm{H`q}c6 zTw3~qKQ}np4vCXXwkyyMNVCsM<%|U0df=U{97@kedI!?~ig#fesi5xpoBE*~>5X%p zLK&s&{XlR(;KDpzZ{~K-V~+!#3HWfrkDK5A1^6Ps7Z6-8XDnV{1w0J+1^=hLtBH-W z2*YEk)gZ2`*4SucK1@s`mM{GD1d)tTEfRhT8YPJIYiY{@rCsUrrveoak<``$M>IVU zQqY(lh=!ygYeHgT)HH?zi9~zwXh;v3aA=CpGxNT?U#Hc0(A!S3`_4S?JoEqib~a_j z(I3q-_wlAoGGi+z+l|j^+=(W(SyLc@dBuH{>D2>I-m-@OvXkizRjtd^4YGf6rsH0L zmcjXeO9PGwB+L2--uQNF&JqAGeNIca=le|mZENz3_wvc=H#qwIF~;@Vd8PwBU&&xx z`r)X*1$`d+4Fp{KVIiX*j`}I+i_jk@uq|VG z)Z(d&LH0{M?szt_<^=*64HU#1f#-okl$`5-0R6x}A{y+E)OSOlZJT@iFx>&@TcA&; zOZ)*p~@{T=8h+W)>BwF@v$cUrTF zgw*(I0G!~Ddt{8yM>mo@W=m)AR-pH9}e`a?gu3;Po}PQQWcVM%|7{G6*t*?rcXj~IoHcx?t>`)98^4ZxQGNAr~&^JxNZfo~^@a-+Vi>?_QQ`VQ!ap`UA> zQGW{hs87~2*@u>-&XpIS?}z>>;;Lgg$Cz)ynu7{L62Aew2>e)p|H1eNtQiaN>PG+^ zl>J_GOs5`r0^IFyDZCMQ5%>|oC|Hm6!0jPxz9xYAq4zW1&6r*{^EqtID(b}%KSdt! zZxw_jeja%Ch&8_j_!Z!j!21IH2jKa4XV>F*;N!s4{l@gCfKSYU*JhDEaEOv){00K= z&BmL6XMry)#rEaj4&2Ux7l7x1H>ct^!ao4K2%Ps|zrNr+KgiAAtuJCln7O`?cOATz zqt-0tWI?;*w&)EFk+(gh?y$|c&?AyB-xPSC9=B$PL;M%(S^FsJ4?L_-1MsNdn%7eC zd46aD-Vc0=c-ek|MWcL9XS#H1XL&lXv*cmBV)4~6UDhoJ{9}UahN@22baAVlVQ-*{ z4$qpL^P$;c#eMD3UjpcuD9*PI!II$I))UsrYWIzPtg_Dc=k&c^db0C;Sl6(m#)st? zVAhHrTdZ@7Bx7tn&ee&0LZk|}Ng)u8Bo5Lx85WPWqiiqcNg+lLTIW-I@&O;_(U5M5 z7p1$r=0APU*JoVfqY+*Gw4Go&bK$e1mt_8Tarj~~XCAkupQc4-9wE0Nbk{v`5Ok+(%oi_9#L{6)qhSBcyxa)-zsk;g<1iu_#UoRtR1 z{z!kG3L@$_Ss{4;r6hIF?=*0mfez`7$>gbKy6;LW<~UTQ)l~bJep{Xm&eN%FO8Qj^4^NN z(kzwXfICEGmQ+@U%BonI29-^+ayY2$29-lmAZ>Y2(UAL zY4xj%3vIhhysPIxoNMdLnYiOf51ux9S=jG2c#+5F$uk12(CzQ+ZX-c_`R)SK-;Hm+ ztu}EN0?_q#;MXc9?##7z;nzEzt+@_xHDqGGSnflHUhLTkCDO#x)1An$7s=o&c4_-` z+VP$l@8kFJ%{Z<_|ApgSjdv}*=b0*t5S#$C-=&@2-xPZs9@-X^UteVrg56Jm$c4&Z zYBy2jIe2)7RKBgU2pQN_oG{~FxH$Bx-9pn@2n;`N>s7wmU$SB_p{wzC8ArTwnqE_l-Xo5H^-{PCc{m9KWbcLM&X*f~bU0620$ zbMjJoiXIC1Y9HKs!pESUBkeSQ#g4+mB5M2RPgsOt2NwPrH9R`BY@d{%`4FBo|L%}= zs=Grz2H(`CT@ZAC<4*I>oU<BFwb3{?X;c#i+gP sgee9CIP!4m`)By1iAoqf%3rC5bkT-!({)cLu*v +#include +#include +#include "sig.h" +#include "exit.h" +#include "sgetopt.h" +#include "uint16.h" +#include "fmt.h" +#include "scan.h" +#include "str.h" +#include "ip4.h" +#include "ip6.h" +#include "uint16.h" +#include "socket.h" +#include "fd.h" +#include "stralloc.h" +#include "buffer.h" +#include "error.h" +#include "strerr.h" +#include "pathexec.h" +#include "timeoutconn.h" +#include "remoteinfo.h" +#include "dns.h" +#include "byte.h" + +#define FATAL "tcpclient: fatal: " +#define CONNECT "tcpclient: unable to connect to " + +void nomem(void) +{ + strerr_die2x(111,FATAL,"out of memory"); +} +void usage(void) +{ + strerr_die1x(100,"tcpclient: usage: tcpclient \ +[ -46hHrRdDqQv ] \ +[ -i localip ] \ +[ -p localport ] \ +[ -T timeoutconn ] \ +[ -l localname ] \ +[ -t timeoutinfo ] \ +[ -I interface ] \ +host port program"); +} + +int forcev6 = 0; +int verbosity = 1; +int flagdelay = 1; +int flagremoteinfo = 1; +int flagremotehost = 1; +unsigned long itimeout = 26; +unsigned long ctimeout[2] = { 2, 58 }; +uint32 netif = 0; + +char iplocal[16] = { 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0 }; +uint16 portlocal = 0; +char *forcelocal = 0; + +char ipremote[16]; +uint16 portremote; + +char *hostname; +static stralloc addresses; +static stralloc moreaddresses; + +static stralloc tmp; +static stralloc fqdn; +char strnum[FMT_ULONG]; +char ipstr[IP6_FMT]; + +char seed[128]; + +main(int argc,char **argv) +{ + int fakev4=0; + unsigned long u; + int opt; + char *x; + int j; + int s; + int cloop; + + dns_random_init(seed); + + close(6); + close(7); + sig_ignore(sig_pipe); + + while ((opt = getopt(argc,argv,"46dDvqQhHrRi:p:t:T:l:I:")) != opteof) + switch(opt) { + case '4': noipv6 = 1; break; + case '6': forcev6 = 1; break; + case 'd': flagdelay = 1; break; + case 'D': flagdelay = 0; break; + case 'v': verbosity = 2; break; + case 'q': verbosity = 0; break; + case 'Q': verbosity = 1; break; + case 'l': forcelocal = optarg; break; + case 'H': flagremotehost = 0; break; + case 'h': flagremotehost = 1; break; + case 'R': flagremoteinfo = 0; break; + case 'r': flagremoteinfo = 1; break; + case 't': scan_ulong(optarg,&itimeout); break; + case 'T': j = scan_ulong(optarg,&ctimeout[0]); + if (optarg[j] == '+') ++j; + scan_ulong(optarg + j,&ctimeout[1]); + break; + case 'i': if (!scan_ip6(optarg,iplocal)) usage(); break; + case 'I': netif=socket_getifidx(optarg); break; + case 'p': scan_ulong(optarg,&u); portlocal = u; break; + default: usage(); + } + argv += optind; + + if (!verbosity) + buffer_2->fd = -1; + + hostname = *argv; + if (!hostname) usage(); + if (!hostname[0] || str_equal(hostname,"0")) + hostname = (noipv6?"127.0.0.1":"::1"); + + x = *++argv; + if (!x) usage(); + if (!x[scan_ulong(x,&u)]) + portremote = u; + else { + struct servent *se; + se = getservbyname(x,"tcp"); + if (!se) + strerr_die3x(111,FATAL,"unable to figure out port number for ",x); + portremote = ntohs(se->s_port); + /* i continue to be amazed at the stupidity of the s_port interface */ + } + + if (!*++argv) usage(); + + if (!stralloc_copys(&tmp,hostname)) nomem(); + if (dns_ip6_qualify(&addresses,&fqdn,&tmp) == -1) + strerr_die4sys(111,FATAL,"temporarily unable to figure out IP address for ",hostname,": "); + if (addresses.len < 16) + strerr_die3x(111,FATAL,"no IP address for ",hostname); + + if (addresses.len == 16) { + ctimeout[0] += ctimeout[1]; + ctimeout[1] = 0; + } + + for (cloop = 0;cloop < 2;++cloop) { + if (!stralloc_copys(&moreaddresses,"")) nomem(); + for (j = 0;j + 16 <= addresses.len;j += 4) { + s = socket_tcp6(); + if (s == -1) + strerr_die2sys(111,FATAL,"unable to create socket: "); + if (socket_bind6(s,iplocal,portlocal,netif) == -1) + strerr_die2sys(111,FATAL,"unable to bind socket: "); + if (timeoutconn6(s,addresses.s + j,portremote,ctimeout[cloop],netif) == 0) + goto CONNECTED; + close(s); + if (!cloop && ctimeout[1] && (errno == error_timeout)) { + if (!stralloc_catb(&moreaddresses,addresses.s + j,16)) nomem(); + } + else { + strnum[fmt_ulong(strnum,portremote)] = 0; + if (ip6_isv4mapped(addresses.s+j)) + ipstr[ip4_fmt(ipstr,addresses.s + j + 12)] = 0; + else + ipstr[ip6_fmt(ipstr,addresses.s + j)] = 0; + strerr_warn5(CONNECT,ipstr," port ",strnum,": ",&strerr_sys); + } + } + if (!stralloc_copy(&addresses,&moreaddresses)) nomem(); + } + + _exit(111); + + + + CONNECTED: + + if (!flagdelay) + socket_tcpnodelay(s); /* if it fails, bummer */ + + if (socket_local6(s,iplocal,&portlocal,&netif) == -1) + strerr_die2sys(111,FATAL,"unable to get local address: "); + + if (!forcev6 && (ip6_isv4mapped(iplocal) || byte_equal(iplocal,16,V6any))) + fakev4=1; + + if (!pathexec_env("PROTO",fakev4?"TCP":"TCP6")) nomem(); + + strnum[fmt_ulong(strnum,portlocal)] = 0; + if (!pathexec_env("TCPLOCALPORT",strnum)) nomem(); + if (fakev4) + ipstr[ip4_fmt(ipstr,iplocal+12)] = 0; + else + ipstr[ip6_fmt(ipstr,iplocal)] = 0; + if (!pathexec_env("TCPLOCALIP",ipstr)) nomem(); + + x = forcelocal; + if (!x) + if (dns_name6(&tmp,iplocal) == 0) { + if (!stralloc_0(&tmp)) nomem(); + x = tmp.s; + } + if (!pathexec_env("TCPLOCALHOST",x)) nomem(); + + if (socket_remote6(s,ipremote,&portremote,&netif) == -1) + strerr_die2sys(111,FATAL,"unable to get remote address: "); + + strnum[fmt_ulong(strnum,portremote)] = 0; + if (!pathexec_env("TCPREMOTEPORT",strnum)) nomem(); + if (fakev4) + ipstr[ip4_fmt(ipstr,ipremote+12)] = 0; + else + ipstr[ip6_fmt(ipstr,ipremote)] = 0; + if (!pathexec_env("TCPREMOTEIP",ipstr)) nomem(); + if (verbosity >= 2) + strerr_warn4("tcpclient: connected to ",ipstr," port ",strnum,0); + + x = 0; + if (flagremotehost) + if (dns_name6(&tmp,ipremote) == 0) { + if (!stralloc_0(&tmp)) nomem(); + x = tmp.s; + } + if (!pathexec_env("TCPREMOTEHOST",x)) nomem(); + + x = 0; + if (flagremoteinfo) + if (remoteinfo6(&tmp,ipremote,portremote,iplocal,portlocal,itimeout,netif) == 0) { + if (!stralloc_0(&tmp)) nomem(); + x = tmp.s; + } + if (!pathexec_env("TCPREMOTEINFO",x)) nomem(); + + if (fd_move(6,s) == -1) + strerr_die2sys(111,FATAL,"unable to set up descriptor 6: "); + if (fd_copy(7,6) == -1) + strerr_die2sys(111,FATAL,"unable to set up descriptor 7: "); + sig_uncatch(sig_pipe); + + pathexec(argv); + strerr_die4sys(111,FATAL,"unable to run ",*argv,": "); +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tcpclient.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tcpclient.o new file mode 100644 index 0000000000000000000000000000000000000000..6949882dd794f0e3da264bcf1b752904519c9c5a GIT binary patch literal 18968 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%0A5zk(WR&)+%3F+Q?gXA;MF z;%OW{m})J~`YVXr`Ypt5ef+g4Cgi8XhuhmB^l{#C>J;2#2*<60FBH62=&u6K`uNjr zOjs{I4>13>(81FO;e+XW79Z18shfq)YGAB$r{JF8cMBak@9eJ%e5zP+#iI5*&*@ zL-o!kZu^P9>BWS60em>l=U6%~q7kH^u$S$Z(<0?bwa-x^6XDU zaMWQQ7do=v@#oZ-uwAm>Qx5xX!7*-!urQ>r5V!mNYeHYf;Rd0D?V7DsV4Mps`|D<* zBcD%hCvNxqzdCe&COG>42dejep)dX1BRD>9!%y~fdRFMjcs?&U>hp8XOM=UGy(&1` zA4AVM?-0j+kLIx7Alb<4;c@7bg<8=S7XM_n-{- z``Loab)$|r`vXOEsu%W)fw0c`g5!P*^HoAeu48KiuK@cttq$v((78zHY!dc3Ut(k* z6>f2qb%6EFg{tsk6x9tP^tRthel2bZtsq zA?$HZbNq9H%kexQ_#&{!m}0ud;)W`9y~SDohl0y}i93kn0o%*t`7Vodd;eYN$o1rx zf}@YTmc3%>;5{4D>%#sL$g`ivV#h+l%QF5|7H5CXByRU($g@O7cZStshy>9g!v zXPd=Y=erJ_ot8c8++%UpdCH+vu)#djI6hnG{(IaB zrZC16=PBJT)yc#${&N5D3}KJ2o*B|PM{v~V_BIg5ZsxfKr)rJRm-F#b!Iyv?$6*t3 z?)SAQ0x2pu`g1^2_+Q|HOMmjjZGXN-+#YZLBy>=p|IV>PaH;99ZOurH@SpxW_2nK;i2_U9CfldL+|p|i%aXPs7yvrdOY=gYz#<8vDceN}Kdo^N#M z{KT?ne|B1&{n_u(;c_^wFm_}31&P-==7$X~{)U73on+6y(`3%}9+k5>KC5H0d7Z(N zIPNWDvh5o+oy@}y&hx|8`JBUkvx9GO@Qj1^I(WauZ=!f!ZE=q0b_d_#;5S)(JL%tM z@eJ`hEzb4c=ip-wzSqGIIQVl8{<4D~wD@N7|80x65kG2iZkHZVaE-@9HQDpud6=_( zH3DJJe6E9g4!+pI`TmBN(G}KT?yzrk@UVmP{n^&X-#=oq`DO>-;@}wv?{)Bgiyx)@ z)fVSCYh7K1)S)e!2cG@kYwGS-hX} F{|m+qwSxcv literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tcprules b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tcprules new file mode 100755 index 0000000000000000000000000000000000000000..570b82948fa94bebba6fd526a8ca8a1496af9d48 GIT binary patch literal 24600 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 255) top = 255; + + while (bot <= top) { + if (!stralloc_copyb(&key,address.s,left)) nomem(); + if (!stralloc_catb(&key,strnum,fmt_ulong(strnum,bot))) nomem(); + if (!stralloc_catb(&key,address.s + right,address.len - right)) nomem(); + if (cdb_make_add(&c,key.s,key.len,data.s,data.len) == -1) die_write(); + ++bot; + } + + return; + } + } + + if (cdb_make_add(&c,address.s,address.len,data.s,data.len) == -1) die_write(); +} + +main(int argc,char **argv) +{ + int colon; + char *x; + int len; + int fd; + int i; + char ch; + + fn = argv[1]; + if (!fn) usage(); + fntemp = argv[2]; + if (!fntemp) usage(); + + fd = open_trunc(fntemp); + if (fd == -1) + strerr_die4sys(111,FATAL,"unable to create ",fntemp,": "); + if (cdb_make_start(&c,fd) == -1) die_write(); + + while (match) { + if (getln(buffer_0,&line,&match,'\n') == -1) + strerr_die2sys(111,FATAL,"unable to read input: "); + + x = line.s; len = line.len; + + if (!len) break; + if (x[0] == '#') continue; + if (x[0] == '\n') continue; + + while (len) { + ch = x[len - 1]; + if (ch != '\n') if (ch != ' ') if (ch != '\t') break; + --len; + } + line.len = len; /* for die_bad() */ + + colon = 0; + for (;;) { + int tmp; + tmp = byte_chr(x + colon,len - colon,':'); + colon += tmp; + if (colon == len) continue; + if (byte_equal(x+colon+1,4,"deny") || byte_equal(x+colon+1,5,"allow")) break; + ++colon; + } + + if (!stralloc_copyb(&address,x,colon)) nomem(); + if (!stralloc_copys(&data,"")) nomem(); + + x += colon + 1; len -= colon + 1; + + if ((len >= 4) && byte_equal(x,4,"deny")) { + if (!stralloc_catb(&data,"D",2)) nomem(); + x += 4; len -= 4; + } + else if ((len >= 5) && byte_equal(x,5,"allow")) { + x += 5; len -= 5; + } + else + die_bad(); + + while (len) + switch(*x) { + case ',': + i = byte_chr(x,len,'='); + if (i == len) die_bad(); + if (!stralloc_catb(&data,"+",1)) nomem(); + if (!stralloc_catb(&data,x + 1,i)) nomem(); + x += i + 1; len -= i + 1; + if (!len) die_bad(); + ch = *x; + x += 1; len -= 1; + i = byte_chr(x,len,ch); + if (i == len) die_bad(); + if (!stralloc_catb(&data,x,i)) nomem(); + if (!stralloc_0(&data)) nomem(); + x += i + 1; len -= i + 1; + break; + default: + die_bad(); + } + + doaddressdata(); + } + + if (cdb_make_finish(&c) == -1) die_write(); + if (fsync(fd) == -1) die_write(); + if (close(fd) == -1) die_write(); /* NFS stupidity */ + if (rename(fntemp,fn)) + strerr_die6sys(111,FATAL,"unable to move ",fntemp," to ",fn,": "); + + _exit(0); +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tcprules.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tcprules.o new file mode 100644 index 0000000000000000000000000000000000000000..9b5eee260809068f1a3b0a5616fcec2d14636541 GIT binary patch literal 11816 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 literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tcprulescheck b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tcprulescheck new file mode 100755 index 0000000000000000000000000000000000000000..960cb88fc855171a028aac369d6e2b867e272a79 GIT binary patch literal 16864 zcmeHudw5gVmG9QWpb*D$8XgXD;Dm_OPJ&}6gxWk33CnOy3^)M-NqAV;GFEL%j&#JM zNg6Yz{oZj4)PUn7QZd)##q#!WFkfx18p`}TaIOHW`LdXk9TG0Ki zb1B~n*_~{EAr#V(^A{~+)uum8d2-vexTs$~uB&lnmutX~ z4C!#ZGFp*HyTvm@zTNsFN(okxaR`NhF0^5Jq~a{NRoM)p}6P>p8IdyYBmc zzMV|CVj(@!Wm;zd`&t&>Y1BPA_?x5vWfiXM{z(I$n1k0-XOt+e?Eb%JRESwQc&C9c z&cT-$_|zPnd`?Bim93xpQCWd28}B3#MZ%Shmk@~ZIIf$-^+L>OAePsL=wrAphkpzB zwU_B10#5qn(QbSqkMJix)~s3A9ty6BD88_=W{p7DHByw#5NrG!1Bz&G_jRC;KO7E* z*0hBheM%q{6k)%wNwh`${#McMYXdCWqd~oA^G2vrM5x0bgdC|ebhrBgL9rnmQ2e4f z?Dvz>;QBxq+UD2Q&aGZ^XW5-)ce7PiMCO(M>4sYnffQI~a78Bu5Uy6yr8kRh(;K)( zF=~W@-eUNXa+Mjc)UeCwPw{W027*O03pY{`f}e-eH^3#WaWDR(z;m2{iFBEXS_XXl2(ES&O&S>)I$N9sCwGWC7> zm~$gSDR#iom%jVUX_81!{S!W&lijEh-$G(TgK3nhpAb(=Ff_pYN#e=HLrLaO5Kpch z+QIy5#FI;hdYL~$Jh^hHhxwO?Cl?NNGQXdAn%+EVfeY0E0{rl>f^mjPiB6SA@KI`cr z-^lU2w{Mq(+?`ac=>c|4Pj*=*tM4tLj-7K#$|U5U`*x*p%aY^crht{F4HC2OyiHE5 zNXu2PMW#9@cakA;Vy;D2^De;1^w@*kD?aWcaOf01@nYWVs9I>aM-KNjH#e6#C+j<4 znH-z*!&@;B##JWnVpXuMaPJumRIBzK_N3pT^*Y?ATPdq6U4ydP=1SG6O|CO_sGWzo zm38rE$HMM+on1eMioIK0nDyKFsQnMrFj-mc+x2%;b$XAd4pGB)aJA~e)bn8K)DL9! zU_~;u8n=ho`Lt5CP)*6|kgUF@zPPvJDkyUy5@JbS8SyJ?8kSf7e?>a7du zwBd)Eio-P($=y5ATBn}a(*U}ca+=)lbvZg$H=ts7(JWI(aO)cWH@$zw;ff=B%BgRY z*_Zlc`u+fYhi<_t_IQ>qQ$OEx6kV6d>K|du^S4PN^*-#7<99zpD;uA)9Z-DS-+)P7 zKtKWcM<9D%gHY-P^sG2ikyKC1>RYLM#tTt((4!t$|Cn>9ZT4+S(QL0$=SeJeS=52j zW3r`h_(-#JvX_N-^_(~VHOPi~(F5cuSszXge0GIT!KQ!8t!@t+1eg`wW>WSf(ntRCPK?+U8=Rukb zLR4{`uT?Kn{7Dr+T)mtC}J)9#*h|8t25Q^(19P-spnGPxtLCOC)K`aFLsUc zP-f_t^*-Hu#$@ztV#wJQgfVsM`?~Tb1AK_Vb1AQ(&)HoEWMqG529Fp5C5FIt8G##s zkP-LnxjHjujnVr{^vaBR2Ep8&bauVR;JMTQwjIsE*?pW5!+Td5vU>o=^J1kE`SNyS ze-2mc@jQE`P8BJh*MKgulm)8tmZ7RhU_8#9-aIk8Ec#pWR-D3K5eLZm*$#!&l)E}~18 zhG~X|6M!>*IgYJFe)$!H=Tf^M%6{phJB@DF(9h9`9o9de@2&`9J^xZvBGn;IkxnRX zDVrA6s-Ma6Z>Y!Q?z2j5e13k_p~x+%sxRQraeZIMRw~>D#c2vej!2G1?2V$np3*~A z1L33UOBG2+MI@DjM#=u(2q$S-SD%Cyl#~j$NCoz{);Cwob zT^SvpdIhz(n3XpfV<~U&Si^ruGu((#OAk_BQ5^ENTFZf+;XM^_vs(;>&;);bmU|xb zEJK#$^cXv}BEGm##ttl0m%8%14?DZQgWWABye_vKOWI}C?iwy8c{!oDWI6G;%bmJv ztPt_)v9r7`S!sz^7tX4doG}-~;`bF%H@AivV6(oJ+KW}gRGeL>35d^jQFC4D&~@nR zb=8r@r_d6=uQ*;U#g`PtstYX%`@YzIN7a6HNm2A~)ccBtyE&i4>s)o0Dqm|V|65W% zV%|4(?Q$Fwsv1zeu3~5RgP45x5gOCk6-Re(VxvPnMya82c$%KSF*S)6b-!R?iPvK{*_6lB@ zM^<@OdRBQ>d)6SP+*oI7$pYD@xJ#7Cv3`5%{~#2|Oc-CB@LC;ewQCop+u_4<{BbPO zZ{-89=)vC!VmU7L)cRQuh&Omw^|{ zxEECFgUS_0)atSOQjT*GY2OJO0z$SeDaJYsoq{$aKN$OC=w}R>ciDU8?zG~JNAgqN zvly?RPuP!O!U%(vv~_R_Q9qS8pW05IQ!k_r!mR!p-fHS92aadzn|o=Vsdqo8y%}}N zSetTopj`Fhx38Du-*s&x+4#S@dWmj6K&twBa6aJsQ3dW+$9J=ekD)@wMv>M1O1}(m zmdolgq1NON@9ybQzjQlyzPRs1p5@DmfxhOR?z6k|#tEU6B<8_S%4mx*Pv_1F>LDzN zW#3?4BH!WMd8Fc1x$0c>1ND$`(lX9lo70`RC55k&QMm_|f{Nr&`m>C`KBd!K)_E?T zH}Pg<(+|!piS-v&^>3J5dS1;N4MKCvi8S#R&c>EjBuE|^;Mx4A^kh7s3JLkgId5=QYyO4_ z!}l8Th5@{#@6}okR<-6wZuL~1GJNE9&VLVsdDXX5*Xo+0NA-js*Yn~M2h*WOb{gi4 z{dO6DC^)%a!5?2hZ^j=KO2;UaKEspF1%A>Qz8dSU9`|tY#A_V!Rr#fTo~k$2-=+4; zwkHs3SVr~D)T=m^S!gqVlzNfU4{lY5;c$l@X%x~pC+i{*K$=Bte-AQVOS^;mnK60E z^Usy$^Bi1%h51y$6Z+=FCoiqB$QO8R%}1gVjKEq9oWdtkMLdOcUG{sGTbI69`*LkW(Wuc6oQWJxTDkCoj)yzLC+(p=g;80v%ex4`!enHQXo4x4_(PW zU2yCb{4<2pc$R-IA1~f3%RdAQGxDD03)Ox~LcjJb!}%E9Llf3_Ryvw4_erv^Tt9B%egEIA@i7G)vU{OEk;0*$nV%0(a_QkqMr?5#X~7 z-XM3s9^DP;6TtMRxu>{c&Z_`M;+^jJLwml&*19DBFTq2pdQQfTTz#od-G}8ZT!`@Gw=)p zKO*2^2ENU}cL```pq+td2-wWPN(TOlfH(v9F|dh%XBn8uKobE!WuTOSM+kVCfg%PL z5pbM=(F}M9ILW|S96)BxnNGlY2Hs=f>jV_sLeoFWz(fLWWS|c~EN#tHRV%#GE4&22X@H(q;_xoeo4pnb$#nqI=Bi?nSl_c3$VYu9|8YLob1~P?+>P1{=5{kTNvmV-$IMOE)-v}!=5Ep+W$qc~rf6NvZDua4ZDTIN z+zM?cbAIL?()yTN&fLS=Aak|MJ)(Wg+$`o+YFCwz)zg?;rAf?9W^T3i4d$+8ZjE+7 zb2jE0v;cFTBj3c*KJBlW`+&K%+H=hPp1DSCH*>#au1R}^xnD5n*Z#oVPnc`g&M@~Z zbL+H=%>6xcE!wrEWM?;X0c{F%8<_j1HiNkUbFG@p+#}4jX%8~Dkhykk9dq|G7t$VM zu7bG|?P=z2X3nKO%iK8TI<%iLH=4OewLQ#zfm{$ve_eZpxnbs(Yws}k26NxiK4I<^ z<`iwztu%*y%+1wyarFF@xv5$)xBYMCZqe>w?w^>Ot<^H8GIx)*3Y_v}EPb!mO0{S# zeXACuT5Bx5K>MFm^TpD)X+NRb@>trf?WfwpSh`yKJ=LmXX|MJ^)v99Y8tp9A?ue!5 zX?9qoOpT>wt%zzjXt#mH(u;Ogfyz$rK=%1_;L`Is&O@oMJip7ad+~DfGxeCVI1$DB zIn03Hkd@$Z8)p+73T(4*hob$Yrfj&K$FEbX9cuDLyY=DB>#wgo-1BpCJQp4+#p;;p z8|M-8c?g-ji0r@tQ>j(Y*ycOpq5P_Y;T!pZZ{$>hTT0Q$^MJZvJ-zRwEwQw45{~%G z^VK6M(vL@`LuzaO@FC-Tu5QRj^SM;wQ{&me=KP1Gb7yk+hkQHA_Sa?YAyYmNPrQOD zUby9xiX_`Hev*1xx8qrO5qA8N?D(a5zs<4d!Y4WQd_UtEy+Zy;slVY9ELI3_PxZwk zXW_YVAr4BsQd8vk6F4zosc`aK4iCuj8iCi*s~j)d3;)a-v3^!b$5wisgV(4~uKv!W zewJEI=Ba&H|L)h7sd9W7UR%D8Cu^L)KE>>4OjI4*Yn3p(le^%T#9#MWXV;G)S~V)%{|Hr^<%KM*pMwc59jV-SwA<&zJOeZ zMOj{1ugl#N`vP(uR^{%>dXg)PeSt3>I&8|+%6c34N%a0EHe^>uR~AA~bWiDd8V}EK zoiIbFXRg50>msbLISHJKI-EPLF#D;|O0#q4Tnp^2!wlra0?SjF$OF!u9!u=B&GVGo zqTp$K_%4>m>%lR0bbZR}v@2!A<;5=Az~w0taidTjCCB#JW2fy(0U-Yb-cJD;@R9o2HIU+0rns#%qVoln|On{SKaVO9*!)7QCk zBQ@7sm9ox_)Qq)cf9mVmSt*noJ2#T9dQ0>-_zvRyrx=y?BdRn$KJ|@cd{!L6tJd*d zNo8K8eL{3PEFW(HS6S(uV2Ms8)(W;1tTj5`xwCG(t?RHd5%>g~9NTZNJf!T!ga1gr z;F!la<|xjc^Wn|q)_sEx3nsoC?@PEcfvGx5fBi8ckM}ANvFtmcchAV#%>I{H-_w)( z{)D#f@jCT!Y}~}ORwtes5_6h}U@s5SqaD6iQ0R@*N*BJp!}ngL7d+}kJi*KRF4*vb zB=yG=lz~1}iYs2H{eTpLSMXl-oF_f@EjiX_k*kKoCr7gH$afp`wh(9Z$MHHTcA(On zf9Cr@JlYKw;K)rcIIe%5e)huaBFBau_#QD1Z{m6QV}3rM@9O9rpZdu=u!Roh^xZb@ zH7H7BM>yK%k2JRU8(U{e(TH!If2MQ^DshLh#-_Dj?ceNEd~Fa5`qsAjB_$-$H~f-V zT3!D@&BDb?YijF7c^Uu9!WPY2Ji^I~mn;=CCDG(>_C?#2nPcd80UM;oP%!9kq#q58 z5j4IeW{yFh;HFDjB7Q|Oehtv>4=U1nUpT;)2)A(05y6mzA0ULnA`nziiFPRdCMmKh zqWIgTMvNmuQAG+hOYQ#lP67yqmfO}(GgYdfCPx4 zmIZumH0Mov|A&XccS2p;kXc108+=UG0HL1pbiVg@C_F_!=9b&*Yl?>jRB`HXN>N4y=Rb zCV^3vP-CdgbVEe)Nlk$;982?sdm_=s7P5_0314_!l-<~dnPV|SQd=mvPWU(a8>Qw@ zxZQWjyqgd-;Xns8@u>X64QOm^319+-N`FMGMLhVLnt1NyR-ZmO*i8mwN!f1paAP=>&eu-8lVu&k>v9vU!wSjf!sy789 ztx}}J2P>jM`b`Q)&d9X**DBLO!8R-vMTS0>AT8}a1R_}&(N~Ywn*u593$F8%eu|Mx zu}m&LBFyg6mG??+z=Ed6Afa=HMa14Obqb_*NtQi$+uRYSr(-CF_vX*w7JUMLpQf>=llnxF>!;wZ8I5!jxlOHgQ8Ku|~ zh-T`|p~cC-Y~v^mAekwF<^a@&k%ZU7_I507AgG5SvYoNO_<>mvyVbuQ-lkvyRRR&e zk=P>P_D~f0U(fc9p?3VNEYPTLAsuVSy(Q2R>X3X2WnhZ=Xs|Viurh>bc*Sp~Dx@*m z%1v2GT+hsnK6o9I@-=aa#%AUGmAPve8-!Akp8WYPD`?+wx^DDcHdBo(Y8$557U5)~ zTSR%nr?eP)EH~I@(Qiekf$#YP-qxYs^F}(o1GMAKbb0`^{H=8Q4Cuhy>2x7(^Mjxz zpgZU&0($1%bh;B%yq8XI1C>B`P&?=VXc9CcY*e#(&^)%1EA+Y8-~(p$u2}Ms2jBYB;-LGKsSPRg7$zWL3eCKiWaQF9u3i zhXcQ1qaG^?+zIPe+ZKBaBkOImLFq?JuM;r0pwLrLw8gg7Di=sGJISuZRX+y5&7t-M zvAl%!{(^E+0hZby$5nW>ThPlev0$rxOWwk#tqB`C#YT}`-^I1#8h7S5o?uz-XP`;o zzan747F*0-S0HUAB|=Qcbre@mfm>7&1iR)I6wNJ=<`$HA3d%hNm9f!VMs3YY*q^pN zW1U|>lSQHN@+r0o-TeDt1`V9PlOF_rBY~cR!Wi_D{j*8*TDN$b@C93}Fp6w~N%X%(hxn7`VaI&V0Bp{xXbII_LtG#iS~aXJ&3n0c7zfIEm-p7DYTc5|LXeM(ZLOzbO>)j zArYz<(;f$YrFqXrd+!z6r$c@v+6U1-1%9V_Jwx+)n${;_uPG?mnunQf8Radg^cJ{d zqtOS2#{CZD3X9z0P69aI9?1B6ETEsEy&mmzsNJxa@Rx!20DqS@m{CaIyTChdbPIaS z&s|@Vv!j3EB)8a1?Tg@btT5rlzz&n9I zl!KoFJ_!7#9NdnKR(SJQaq4E~#T$&g$bJF7179N|oHE6Q+H_po>FY&87d&I#GOC#t z_Gw$fzLk?E;YPvxH!fG=P26HsI4Dua7oc2vM!A{d>u4@TE;mz5k&D~vX8QTXbcib3 ztZpL0w4=qY^G13Q16G|MgFaMxbdvcyi6Vo?Z#*t3yy!rBr#CQe`b07eCx1~f!dpzx zS<#W_=9-DS4c=k2mmBmdgPP;x8$F(nWb}spn23=&()dme3G_SZiBK&3m(W7-&#?|FFiX% z8D3@h%RF;yrzyU5qHJ9-TGrx=w1~2%O+mb$(5VvETku#-?-(y()}SryZ}X9WQR`?^ zNI(A0tBhWdin3-fXbUyreXuC=x2$On;}yr6mL|xWoG7E$ju8x~lW#Vn5jyeys1XB( zpavghtXtQ!7B3~s=xH7=3Cx`LpQMz3DeszjQ&`>LPz-?1ZP~@l?=Og~hE8ymN2vsh* z{+k7q&LXC~dHy(WOmK=JXWDP}GpUSrI@_4MdA^Yh0m+chwcmina#Uz2Q{HWykKBg5 zd7d)I&z-+7N8UW2b(rHD6DF3<0lD(6z^Dt^N5wp!_85TaXT4Ro)vOb3#+5CVfjkPDE#EoX%`Kf2)F|6>Hh?Low+gWVm27$QJYD3{dt^Vu6Jn09 zw+itDDkN|Ezr^L{rV>MbmthBk_%Quv^4+Lp%a8m$wcf-0J8H9k?)ZP7Bfnyro4c-< zrc2P@^<9K{HyjQ>r$=vg#-eDm*Rw;72icRZ6fDZS&$ zmN%b=dJXxFGq3KBvQ(9FczX9jy3F~D84Y@m89M1L)v5U@ lnH7T`0j2T3QVjWYMzP)_w{N!X**elyI>+w_vl?>c|38lD?b!eT literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tcprulescheck.1 b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tcprulescheck.1 new file mode 100644 index 0000000..3f0de24 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tcprulescheck.1 @@ -0,0 +1,25 @@ +.TH tcprulescheck 1 +.SH NAME +tcprulescheck \- try out rules for tcpserver +.SH SYNTAX +.B tcprulescheck +.I rules.cdb +.I tcpremoteip +[ +.I tcpremoteinfo +] +.SH DESCRIPTION +.B tcprulescheck +says what +.B tcpserver +will do with a connection from +IP address +.IR tcpremoteip , +following the rules compiled into +.I rules.cdb +by +.BR tcprules . +.SH "SEE ALSO" +tcprules(1), +tcpserver(1), +tcp-environ(5) diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tcprulescheck.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tcprulescheck.c new file mode 100644 index 0000000..a961d50 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tcprulescheck.c @@ -0,0 +1,57 @@ +#include "byte.h" +#include "buffer.h" +#include "strerr.h" +#include "env.h" +#include "rules.h" + +void found(char *data,unsigned int datalen) +{ + unsigned int next0; + + buffer_puts(buffer_1,"rule "); + buffer_put(buffer_1,rules_name.s,rules_name.len); + buffer_puts(buffer_1,":\n"); + while ((next0 = byte_chr(data,datalen,0)) < datalen) { + switch(data[0]) { + case 'D': + buffer_puts(buffer_1,"deny connection\n"); + buffer_flush(buffer_1); + _exit(0); + case '+': + buffer_puts(buffer_1,"set environment variable "); + buffer_puts(buffer_1,data + 1); + buffer_puts(buffer_1,"\n"); + break; + } + ++next0; + data += next0; datalen -= next0; + } + buffer_puts(buffer_1,"allow connection\n"); + buffer_flush(buffer_1); + _exit(0); +} + +main(int argc,char **argv) +{ + char *fnrules; + int fd; + char *ip; + char *info; + char *host; + + fnrules = argv[1]; + if (!fnrules) + strerr_die1x(100,"tcprulescheck: usage: tcprulescheck rules.cdb"); + + ip = env_get("TCPREMOTEIP"); + if (!ip) ip = "0.0.0.0"; + info = env_get("TCPREMOTEINFO"); + host = env_get("TCPREMOTEHOST"); + + fd = open_read(fnrules); + if ((fd == -1) || (rules(found,fd,ip,host,info) == -1)) + strerr_die3sys(111,"tcprulescheck: fatal: unable to read ",fnrules,": "); + + buffer_putsflush(buffer_1,"default:\nallow connection\n"); + _exit(0); +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tcprulescheck.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tcprulescheck.o new file mode 100644 index 0000000000000000000000000000000000000000..2700d14c4725d527cac83538db5ef46f4cea2441 GIT binary patch literal 3840 zcmbtWO>7%Q6duQ>4QYwf0wofKtdLc;lrG)2pwu7hK zCiFlcP0=a|>ZP2xzyS^%P%kJPN+Y$Q3a2PirK&xE5E7|^5F9|2Kr-*m&cx%%`U20| zo%g=^-ZyV%cV_)wU+Pp#C`7o0$g89taTMA}-A_5kY(3@WW51`s zd#KO+dOS5(XdRgSIeO_!Am6}*b-YnepIy?un~NCh(d6BFN58jBgOvA+?k#IeG?;l< zb59I->$>+q_wIS$)x~C(LT;Bn_X-Mqi#N*GYP5-VO(WE&t@LS2-=LfFexj@!6$td( z$yh6*`t3*zTbi_S&F5$vWFgdK!pMVXX8mdS7(AhMJDo`QUD;OYMQ;#=>8ibf*7BdCg7&D2QtBm3NiE33`Q$0O+?vUdex${`( z|1<^i@x0h3=_FWuUph=WB;L~yM%jODdM_B2iwY=m__20p%$^86nKENJ|@*a7yL-)!FH@i#jp2YC_l2R&+} zE*LLZB^+1@))(}I5vNC&EDyN6n|(@{z5!e4z-OCP>IxIK2m+4JYqwB8pWq(A<+B0P zo^68f2b}7#rJ!dnU}_Wou_icv{DQ_EY=Yx{3*u**;O{iSCz{~zH^Jwd;8&aAjUR3` zN5+hjMc`YQ88ux}88@vAeu_zBe+d62l;rE za{eU&j|#ZQa9+<*7Jnr0@x9|Z_}tM@ANLf;zd#U->+tpZ%7-bAyPo6M8IEhSoB7y$ z&wSK>94@ZU_ZjMor^jDS_}ke2Njh;P_XX<1qmjb)FY+ zzev>ynHBh={=9&T zI#&f;jEz7+!An+zarrH--55(s(_2{ Z`5lJy`uV<6SY3$YyTvWRoK2kN{|idlVPXIP literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tcpserver b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tcpserver new file mode 100755 index 0000000000000000000000000000000000000000..438f44b231217a42685f3ef181e2124085bd7f61 GIT binary patch literal 56000 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 D-$mhLfR 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 +#include +#include +#include "uint16.h" +#include "str.h" +#include "byte.h" +#include "fmt.h" +#include "scan.h" +#include "ip4.h" +#include "ip6.h" +#include "fd.h" +#include "exit.h" +#include "env.h" +#include "prot.h" +#include "open.h" +#include "wait.h" +#include "readwrite.h" +#include "stralloc.h" +#include "alloc.h" +#include "buffer.h" +#include "error.h" +#include "strerr.h" +#include "sgetopt.h" +#include "pathexec.h" +#include "socket.h" +#include "ndelay.h" +#include "remoteinfo.h" +#include "rules.h" +#include "sig.h" +#include "dns.h" + +int forcev6 = 0; +int verbosity = 1; +int flagkillopts = 1; +int flagdelay = 1; +char *banner = ""; +int flagremoteinfo = 1; +int flagremotehost = 1; +int flagparanoid = 0; +unsigned long timeout = 26; +uint32 netif = 0; + +static stralloc tcpremoteinfo; + +uint16 localport; +char localportstr[FMT_ULONG]; +char localip[16]; +char localipstr[IP6_FMT]; +static stralloc localhostsa; +char *localhost = 0; + +uint16 remoteport; +char remoteportstr[FMT_ULONG]; +char remoteip[16]; +char remoteipstr[IP6_FMT]; +static stralloc remotehostsa; +char *remotehost = 0; + +char strnum[FMT_ULONG]; +char strnum2[FMT_ULONG]; + +static stralloc tmp; +static stralloc fqdn; +static stralloc addresses; + +char bspace[16]; +buffer b; + + + +/* ---------------------------- child */ + +#define DROP "tcpserver: warning: dropping connection, " + +int flagdeny = 0; +int flagallownorules = 0; +char *fnrules = 0; + +void drop_nomem(void) +{ + strerr_die2sys(111,DROP,"out of memory"); +} +void cats(char *s) +{ + if (!stralloc_cats(&tmp,s)) drop_nomem(); +} +void append(char *ch) +{ + if (!stralloc_append(&tmp,ch)) drop_nomem(); +} +void safecats(char *s) +{ + char ch; + int i; + + for (i = 0;i < 100;++i) { + ch = s[i]; + if (!ch) return; + if (ch < 33) ch = '?'; + if (ch > 126) ch = '?'; + if (ch == '%') ch = '?'; /* logger stupidity */ +/* if (ch == ':') ch = '?'; */ + append(&ch); + } + cats("..."); +} +void env(const char *s,const char *t) +{ + if (!pathexec_env(s,t)) drop_nomem(); +} +void drop_rules(void) +{ + strerr_die4sys(111,DROP,"unable to read ",fnrules,": "); +} + +void found(char *data,unsigned int datalen) +{ + unsigned int next0; + unsigned int split; + + while ((next0 = byte_chr(data,datalen,0)) < datalen) { + switch(data[0]) { + case 'D': + flagdeny = 1; + break; + case '+': + split = str_chr(data + 1,'='); + if (data[1 + split] == '=') { + data[1 + split] = 0; + env(data + 1,data + 1 + split + 1); + } + break; + } + ++next0; + data += next0; datalen -= next0; + } +} + +void doit(int t) +{ + int fakev4=0; + int j; + uint32 scope_id; + + if (!forcev6 && ip6_isv4mapped(remoteip)) + fakev4=1; + if (fakev4) + remoteipstr[ip4_fmt(remoteipstr,remoteip+12)] = 0; + else + remoteipstr[ip6_fmt(remoteipstr,remoteip)] = 0; + + if (verbosity >= 2) { + strnum[fmt_ulong(strnum,getpid())] = 0; + strerr_warn4("tcpserver: pid ",strnum," from ",remoteipstr,0); + } + + if (flagkillopts) + socket_ipoptionskill(t); + if (!flagdelay) + socket_tcpnodelay(t); + + if (*banner) { + buffer_init(&b,write,t,bspace,sizeof bspace); + if (buffer_putsflush(&b,banner) == -1) + strerr_die2sys(111,DROP,"unable to print banner: "); + } + + if (socket_local6(t,localip,&localport,&scope_id) == -1) + strerr_die2sys(111,DROP,"unable to get local address: "); + + if (fakev4) + localipstr[ip4_fmt(localipstr,localip+12)] = 0; + else + localipstr[ip6_fmt(localipstr,localip)] = 0; + remoteportstr[fmt_ulong(remoteportstr,remoteport)] = 0; + + if (!localhost) + if (dns_name6(&localhostsa,localip) == 0) + if (localhostsa.len) { + if (!stralloc_0(&localhostsa)) drop_nomem(); + localhost = localhostsa.s; + } + env("PROTO",fakev4?"TCP":"TCP6"); + env("TCPLOCALIP",localipstr); + localipstr[ip6_fmt(localipstr,localip)]=0; + env("TCP6LOCALIP",localipstr); + + env("TCPLOCALPORT",localportstr); + env("TCP6LOCALPORT",localportstr); + env("TCPLOCALHOST",localhost); + env("TCP6LOCALHOST",localhost); + if (!fakev4 && scope_id) + env("TCP6INTERFACE",socket_getifname(scope_id)); + + if (flagremotehost) + if (dns_name6(&remotehostsa,remoteip) == 0) + if (remotehostsa.len) { + if (flagparanoid) + if (dns_ip6(&tmp,&remotehostsa) == 0) + for (j = 0;j + 16 <= tmp.len;j += 16) + if (byte_equal(remoteip,16,tmp.s + j)) { + flagparanoid = 0; + break; + } + if (!flagparanoid) { + if (!stralloc_0(&remotehostsa)) drop_nomem(); + remotehost = remotehostsa.s; + } + } + env("TCPREMOTEIP",remoteipstr); + remoteipstr[ip6_fmt(remoteipstr,remoteip)]=0; + env("TCP6REMOTEIP",remoteipstr); + env("TCPREMOTEPORT",remoteportstr); + env("TCP6REMOTEPORT",remoteportstr); + env("TCPREMOTEHOST",remotehost); + env("TCP6REMOTEHOST",remotehost); + + if (flagremoteinfo) { + if (remoteinfo6(&tcpremoteinfo,remoteip,remoteport,localip,localport,timeout,netif) == -1) + flagremoteinfo = 0; + if (!stralloc_0(&tcpremoteinfo)) drop_nomem(); + } + env("TCPREMOTEINFO",flagremoteinfo ? tcpremoteinfo.s : 0); + env("TCP6REMOTEINFO",flagremoteinfo ? tcpremoteinfo.s : 0); + + if (fnrules) { + int fdrules; + fdrules = open_read(fnrules); + if (fdrules == -1) { + if (errno != error_noent) drop_rules(); + if (!flagallownorules) drop_rules(); + } + else { + int fakev4=0; + char* temp; + if (!forcev6 && ip6_isv4mapped(remoteip)) + fakev4=1; + if (fakev4) + temp=remoteipstr+7; + else + temp=remoteipstr; + if (rules(found,fdrules,temp,remotehost,flagremoteinfo ? tcpremoteinfo.s : 0) == -1) drop_rules(); + close(fdrules); + } + } + + if (verbosity >= 2) { + strnum[fmt_ulong(strnum,getpid())] = 0; + if (!stralloc_copys(&tmp,"tcpserver: ")) drop_nomem(); + safecats(flagdeny ? "deny" : "ok"); + cats(" "); safecats(strnum); + cats(" "); if (localhost) safecats(localhost); + cats(":"); safecats(localipstr); + cats(":"); safecats(localportstr); + cats(" "); if (remotehost) safecats(remotehost); + cats(":"); safecats(remoteipstr); + cats(":"); if (flagremoteinfo) safecats(tcpremoteinfo.s); + cats(":"); safecats(remoteportstr); + cats("\n"); + buffer_putflush(buffer_2,tmp.s,tmp.len); + } + + if (flagdeny) _exit(100); +} + + + +/* ---------------------------- parent */ + +#define FATAL "tcpserver: fatal: " + +void usage(void) +{ + strerr_warn1("\ +tcpserver: usage: tcpserver \ +[ -461UXpPhHrRoOdDqQv ] \ +[ -c limit ] \ +[ -x rules.cdb ] \ +[ -B banner ] \ +[ -g gid ] \ +[ -u uid ] \ +[ -b backlog ] \ +[ -l localname ] \ +[ -t timeout ] \ +[ -I interface ] \ +host port program",0); + _exit(100); +} + +unsigned long limit = 40; +unsigned long numchildren = 0; + +int flag1 = 0; +unsigned long backlog = 20; +unsigned long uid = 0; +unsigned long gid = 0; + +void printstatus(void) +{ + if (verbosity < 2) return; + strnum[fmt_ulong(strnum,numchildren)] = 0; + strnum2[fmt_ulong(strnum2,limit)] = 0; + strerr_warn4("tcpserver: status: ",strnum,"/",strnum2,0); +} + +void sigterm() +{ + _exit(0); +} + +void sigchld() +{ + int wstat; + int pid; + + while ((pid = wait_nohang(&wstat)) > 0) { + if (verbosity >= 2) { + strnum[fmt_ulong(strnum,pid)] = 0; + strnum2[fmt_ulong(strnum2,wstat)] = 0; + strerr_warn4("tcpserver: end ",strnum," status ",strnum2,0); + } + if (numchildren) --numchildren; printstatus(); + } +} + +main(int argc,char **argv) +{ + char *hostname; + char *portname; + int opt; + struct servent *se; + char *x; + unsigned long u; + int s; + int t; + + while ((opt = getopt(argc,argv,"46dDvqQhHrR1UXx:t:u:g:l:b:B:c:I:pPoO")) != opteof) + switch(opt) { + case 'b': scan_ulong(optarg,&backlog); break; + case 'c': scan_ulong(optarg,&limit); break; + case 'X': flagallownorules = 1; break; + case 'x': fnrules = optarg; break; + case 'B': banner = optarg; break; + case 'd': flagdelay = 1; break; + case 'D': flagdelay = 0; break; + case 'v': verbosity = 2; break; + case 'q': verbosity = 0; break; + case 'Q': verbosity = 1; break; + case 'P': flagparanoid = 0; break; + case 'p': flagparanoid = 1; break; + case 'O': flagkillopts = 1; break; + case 'o': flagkillopts = 0; break; + case 'H': flagremotehost = 0; break; + case 'h': flagremotehost = 1; break; + case 'R': flagremoteinfo = 0; break; + case 'r': flagremoteinfo = 1; break; + case 't': scan_ulong(optarg,&timeout); break; + case 'U': x = env_get("UID"); if (x) scan_ulong(x,&uid); + x = env_get("GID"); if (x) scan_ulong(x,&gid); break; + case 'u': scan_ulong(optarg,&uid); break; + case 'g': scan_ulong(optarg,&gid); break; + case 'I': netif=socket_getifidx(optarg); break; + case '1': flag1 = 1; break; + case '4': noipv6 = 1; break; + case '6': forcev6 = 1; break; + case 'l': localhost = optarg; break; + default: usage(); + } + argc -= optind; + argv += optind; + + if (!verbosity) + buffer_2->fd = -1; + + hostname = *argv++; + if (!hostname) usage(); + if (str_equal(hostname,"")) hostname = "0"; + + x = *argv++; + if (!x) usage(); + if (!x[scan_ulong(x,&u)]) + localport = u; + else { + se = getservbyname(x,"tcp"); + if (!se) + strerr_die3x(111,FATAL,"unable to figure out port number for ",x); + uint16_unpack_big((char*)&se->s_port,&localport); + } + + if (!*argv) usage(); + + sig_block(sig_child); + sig_catch(sig_child,sigchld); + sig_catch(sig_term,sigterm); + sig_ignore(sig_pipe); + + if (str_equal(hostname,"0")) { + byte_zero(localip,sizeof localip); + } else { + if (!stralloc_copys(&tmp,hostname)) + strerr_die2x(111,FATAL,"out of memory"); + if (dns_ip6_qualify(&addresses,&fqdn,&tmp) == -1) + strerr_die4sys(111,FATAL,"temporarily unable to figure out IP address for ",hostname,": "); + if (addresses.len < 16) + strerr_die3x(111,FATAL,"no IP address for ",hostname); + byte_copy(localip,16,addresses.s); + if (ip6_isv4mapped(localip)) + noipv6=1; + } + + s = socket_tcp6(); + if (s == -1) + strerr_die2sys(111,FATAL,"unable to create socket: "); + if (socket_bind6_reuse(s,localip,localport,netif) == -1) + strerr_die2sys(111,FATAL,"unable to bind: "); + if (socket_local6(s,localip,&localport,&netif) == -1) + strerr_die2sys(111,FATAL,"unable to get local address: "); + if (socket_listen(s,backlog) == -1) + strerr_die2sys(111,FATAL,"unable to listen: "); + ndelay_off(s); + + if (gid) if (prot_gid(gid) == -1) + strerr_die2sys(111,FATAL,"unable to set gid: "); + if (uid) if (prot_uid(uid) == -1) + strerr_die2sys(111,FATAL,"unable to set uid: "); + + + localportstr[fmt_ulong(localportstr,localport)] = 0; + if (flag1) { + buffer_init(&b,write,1,bspace,sizeof bspace); + buffer_puts(&b,localportstr); + buffer_puts(&b,"\n"); + buffer_flush(&b); + } + + close(0); + close(1); + printstatus(); + + for (;;) { + while (numchildren >= limit) sig_pause(); + + sig_unblock(sig_child); + t = socket_accept6(s,remoteip,&remoteport,&netif); + sig_block(sig_child); + + if (t == -1) continue; + ++numchildren; printstatus(); + + switch(fork()) { + case 0: + close(s); + doit(t); + if ((fd_move(0,t) == -1) || (fd_copy(1,0) == -1)) + strerr_die2sys(111,DROP,"unable to set up descriptors: "); + sig_uncatch(sig_child); + sig_unblock(sig_child); + sig_uncatch(sig_term); + sig_uncatch(sig_pipe); + pathexec(argv); + strerr_die4sys(111,DROP,"unable to run ",*argv,": "); + case -1: + strerr_warn2(DROP,"unable to fork: ",&strerr_sys); + --numchildren; printstatus(); + } + close(t); + } +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tcpserver.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tcpserver.o new file mode 100644 index 0000000000000000000000000000000000000000..ba4c0ae096da6fc83b84ebd2a295e451cde3d428 GIT binary patch literal 29480 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 K9IpR=&HnO84~b?b)|C-QVMR-MY$sdS1HM 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 +#include +#include + +main() { + struct sockaddr_in6 sa; + sa.sin6_family = PF_INET6; +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/trylsock.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/trylsock.c new file mode 100644 index 0000000..fbce408 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/trylsock.c @@ -0,0 +1,4 @@ +main() +{ + ; +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/trypoll.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/trypoll.c new file mode 100644 index 0000000..249824d --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/trypoll.c @@ -0,0 +1,18 @@ +#include +#include +#include + +main() +{ + struct pollfd x; + + x.fd = open("trypoll.c",O_RDONLY); + if (x.fd == -1) _exit(111); + x.events = POLLIN; + if (poll(&x,1,10) == -1) _exit(1); + if (x.revents != POLLIN) _exit(1); + + /* XXX: try to detect and avoid poll() imitation libraries */ + + _exit(0); +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/trysgact.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/trysgact.c new file mode 100644 index 0000000..98a4b20 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/trysgact.c @@ -0,0 +1,10 @@ +#include + +main() +{ + struct sigaction sa; + sa.sa_handler = 0; + sa.sa_flags = 0; + sigemptyset(&sa.sa_mask); + sigaction(0,&sa,(struct sigaction *) 0); +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/trysgprm.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/trysgprm.c new file mode 100644 index 0000000..2797eea --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/trysgprm.c @@ -0,0 +1,10 @@ +#include + +main() +{ + sigset_t ss; + + sigemptyset(&ss); + sigaddset(&ss,SIGCHLD); + sigprocmask(SIG_SETMASK,&ss,(sigset_t *) 0); +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tryshsgr.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tryshsgr.c new file mode 100644 index 0000000..f55ff60 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tryshsgr.c @@ -0,0 +1,14 @@ +main() +{ + short x[4]; + + x[0] = x[1] = 1; + if (getgroups(1,x) == 0) if (setgroups(1,x) == -1) _exit(1); + + if (getgroups(1,x) == -1) _exit(1); + if (x[1] != 1) _exit(1); + x[1] = 2; + if (getgroups(1,x) == -1) _exit(1); + if (x[1] != 2) _exit(1); + _exit(0); +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/trysysel.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/trysysel.c new file mode 100644 index 0000000..f6ed055 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/trysysel.c @@ -0,0 +1,8 @@ +#include +#include +#include /* SVR4 silliness */ + +void foo() +{ + ; +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tryulong32.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tryulong32.c new file mode 100644 index 0000000..63156e6 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tryulong32.c @@ -0,0 +1,11 @@ +main() +{ + unsigned long u; + u = 1; + u += u; u += u; u += u; u += u; u += u; u += u; u += u; u += u; + u += u; u += u; u += u; u += u; u += u; u += u; u += u; u += u; + u += u; u += u; u += u; u += u; u += u; u += u; u += u; u += u; + u += u; u += u; u += u; u += u; u += u; u += u; u += u; u += u; + if (!u) _exit(0); + _exit(1); +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tryulong64.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tryulong64.c new file mode 100644 index 0000000..01965cb --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tryulong64.c @@ -0,0 +1,11 @@ +main() +{ + unsigned long u; + u = 1; + u += u; u += u; u += u; u += u; u += u; u += u; u += u; u += u; + u += u; u += u; u += u; u += u; u += u; u += u; u += u; u += u; + u += u; u += u; u += u; u += u; u += u; u += u; u += u; u += u; + u += u; u += u; u += u; u += u; u += u; u += u; u += u; u += u; + if (!u) _exit(1); + _exit(0); +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tryvfork.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tryvfork.c new file mode 100644 index 0000000..cc39699 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/tryvfork.c @@ -0,0 +1,4 @@ +main() +{ + vfork(); +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/trywaitp.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/trywaitp.c new file mode 100644 index 0000000..64d807e --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/trywaitp.c @@ -0,0 +1,7 @@ +#include +#include + +main() +{ + waitpid(0,0,0); +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/uint16.h b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/uint16.h new file mode 100644 index 0000000..34ab9f4 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/uint16.h @@ -0,0 +1,11 @@ +#ifndef UINT16_H +#define UINT16_H + +typedef unsigned short uint16; + +extern void uint16_pack(char *,uint16); +extern void uint16_pack_big(char *,uint16); +extern void uint16_unpack(char *,uint16 *); +extern void uint16_unpack_big(char *,uint16 *); + +#endif diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/uint16_pack.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/uint16_pack.c new file mode 100644 index 0000000..17dbfe6 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/uint16_pack.c @@ -0,0 +1,13 @@ +#include "uint16.h" + +void uint16_pack(char s[2],uint16 u) +{ + s[0] = u & 255; + s[1] = u >> 8; +} + +void uint16_pack_big(char s[2],uint16 u) +{ + s[1] = u & 255; + s[0] = u >> 8; +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/uint16_pack.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/uint16_pack.o new file mode 100644 index 0000000000000000000000000000000000000000..06c6d1c0848d5be466fa7d45638225611fbc011b GIT binary patch literal 1328 zcmbtU%`QVx5T2`O(WHolghZ_noG6V7iQJ_A7GfdnBz0StHnf%YO3TK!OON3-qzhY* z;0c5$V5WB_P9}H7Np8NGZ@%x$In$gz?jG*-IS$BjU>kljVFA(>>Go(BMj!!hCwKYs zk#IXLr<g5`k?WFdqNfFL9*)6jk2Xt6QeUBA)e4J;SSS8T=C=^3zh2Kw%&3Ca?qFSW zWO-FSNwszi3wm~>75|AC8MU8sJv)-V^QNEd8%CtN>-*DOqWZt_P#4)Rp!*B2k#zm= z^{sizW04ahKI$gKN1c%P$X_1$cvM^D^(z5Lp>o_hkNhXlyCPoRi|}w)sRfz!!Y#gF ZQ?fHVE)*+Q;Stgy0L|aN-G<_&&kxIXO*;Sp literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/uint16_unpack.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/uint16_unpack.c new file mode 100644 index 0000000..18b5b12 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/uint16_unpack.c @@ -0,0 +1,23 @@ +#include "uint16.h" + +void uint16_unpack(char s[2],uint16 *u) +{ + uint16 result; + + result = (unsigned char) s[1]; + result <<= 8; + result += (unsigned char) s[0]; + + *u = result; +} + +void uint16_unpack_big(char s[2],uint16 *u) +{ + uint16 result; + + result = (unsigned char) s[0]; + result <<= 8; + result += (unsigned char) s[1]; + + *u = result; +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/uint16_unpack.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/uint16_unpack.o new file mode 100644 index 0000000000000000000000000000000000000000..073912da5298b211ea12a020b63d333894c57dfd GIT binary patch literal 1336 zcmbtTy-EW?5T46LbN)c02nq_Gl?rAt8blN%kZ3H#LbOiq;>85LizF9_Hr94NhEI?_ zSlH$ff={4NpfhF{H{(^huzd40%RU^Q9K{R+)H2`zewb1LY)#C4%Q=_=3zFTU zk?hX*2A0vUK90YjO;Ybo@;P~gaeoFzCuNw^3F`^ZB7I5vQW6PB&q}WAP|WA|?6rdD z)}6r4ifyr#&WOzV&;$^zJ3n+>#IQNUnzBN#6N0#OLI;G~YJq5aH;(XXrE1ghJrI?K z?|T7;1dY%W#nX#)D|9N?vWb7fBIeWR#@RVJ$!(^O+!=ihtw1g=Oa8u?6&V zjZ$7&o}xT<1|58M6sz*jRiZ?mPn^$=LI?8DcbPYdNO$M=r@2Jc@5`am`{;|;*L}K8 zadG(g)HP+BkrSgnqHaQZREMNTy*%j&RcZvyU%v!^=0B_Tqy7iIJL!rmgmyg$Gdrbr daEpIfR7UwIE4lS6)qpJxdI$ZMyG&Pgz5vQ7QJ??- literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/uint32.h b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/uint32.h new file mode 100644 index 0000000..68d7231 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/uint32.h @@ -0,0 +1,11 @@ +#ifndef UINT32_H +#define UINT32_H + +typedef unsigned int uint32; + +extern void uint32_pack(char *,uint32); +extern void uint32_pack_big(char *,uint32); +extern void uint32_unpack(char *,uint32 *); +extern void uint32_unpack_big(char *,uint32 *); + +#endif diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/uint32.h1 b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/uint32.h1 new file mode 100644 index 0000000..68d7231 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/uint32.h1 @@ -0,0 +1,11 @@ +#ifndef UINT32_H +#define UINT32_H + +typedef unsigned int uint32; + +extern void uint32_pack(char *,uint32); +extern void uint32_pack_big(char *,uint32); +extern void uint32_unpack(char *,uint32 *); +extern void uint32_unpack_big(char *,uint32 *); + +#endif diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/uint32.h2 b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/uint32.h2 new file mode 100644 index 0000000..b5c7f40 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/uint32.h2 @@ -0,0 +1,11 @@ +#ifndef UINT32_H +#define UINT32_H + +typedef unsigned long uint32; + +extern void uint32_pack(char *,uint32); +extern void uint32_pack_big(char *,uint32); +extern void uint32_unpack(char *,uint32 *); +extern void uint32_unpack_big(char *,uint32 *); + +#endif diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/uint32_pack.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/uint32_pack.c new file mode 100644 index 0000000..76bc670 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/uint32_pack.c @@ -0,0 +1,21 @@ +#include "uint32.h" + +void uint32_pack(char s[4],uint32 u) +{ + s[0] = u & 255; + u >>= 8; + s[1] = u & 255; + u >>= 8; + s[2] = u & 255; + s[3] = u >> 8; +} + +void uint32_pack_big(char s[4],uint32 u) +{ + s[3] = u & 255; + u >>= 8; + s[2] = u & 255; + u >>= 8; + s[1] = u & 255; + s[0] = u >> 8; +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/uint32_pack.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/uint32_pack.o new file mode 100644 index 0000000000000000000000000000000000000000..f85d69b373e67fb3cc950ac2ca19b549ac915a89 GIT binary patch literal 1360 zcmbtUO)mpc6ur|at&gOL1tC!@1TR{W`bcDwq84Hytea^KZRk|m5hW6qmj04-WAqywW_kq8I@VkTL9I(twnwbF=}Y6m|YaKB2cG(LH3z7QE^~%DGC`j)P z)}=;~H<2?`dPlJ!XGdO>KQ=)|nI|r1*R}FcI-DCsq`S-e(_DJ>?{I#R^9E#pqe~=T z96mm!PTcJ|G17b91od7gBtIWgG;tvz6iwY}KP literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/uint32_unpack.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/uint32_unpack.c new file mode 100644 index 0000000..f484644 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/uint32_unpack.c @@ -0,0 +1,31 @@ +#include "uint32.h" + +void uint32_unpack(char s[4],uint32 *u) +{ + uint32 result; + + result = (unsigned char) s[3]; + result <<= 8; + result += (unsigned char) s[2]; + result <<= 8; + result += (unsigned char) s[1]; + result <<= 8; + result += (unsigned char) s[0]; + + *u = result; +} + +void uint32_unpack_big(char s[4],uint32 *u) +{ + uint32 result; + + result = (unsigned char) s[0]; + result <<= 8; + result += (unsigned char) s[1]; + result <<= 8; + result += (unsigned char) s[2]; + result <<= 8; + result += (unsigned char) s[3]; + + *u = result; +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/uint32_unpack.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/uint32_unpack.o new file mode 100644 index 0000000000000000000000000000000000000000..b2ba3331391faf4705827feae87e8f870ded8f05 GIT binary patch literal 1392 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 literal 0 HcmV?d00001 diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/usr/local/man/man1/tcpclient.1 b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/usr/local/man/man1/tcpclient.1 new file mode 100644 index 0000000..f82f6b3 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/usr/local/man/man1/tcpclient.1 @@ -0,0 +1,173 @@ +.TH tcpclient 1 +.SH NAME +tcpclient \- create an outgoing TCP connection +.SH SYNOPSIS +.B tcpclient +[ +.B \-46hHrRdDqQv +] +[ +.B \-i\fIlocalip +] +[ +.B \-p\fIlocalport +] +[ +.B \-T\fItimeoutconn +] +[ +.B \-l\fIlocalname +] +[ +.B \-t\fItimeoutinfo +] +[ +.B \-I\fIinterface +] +.I host +.I port +.I program +[ +.I arg ... +] +.SH DESCRIPTION +.B tcpclient +attempts to connect to a TCP server. +If it is successful, it runs +.I program +with the given arguments, +with descriptor 6 reading from the network +and descriptor 7 writing to the network. + +The server's address is given by +.I host +and +.IR port . +.I host +may be 0, referring to the local machine, +or a dotted-decimal IP address, +or a host name; +if a host has several IP addresses, +.B tcpclient +tries each in turn. +.I port +may be a numeric port number +or a port name. + +.B tcpclient +sets up several environment variables, +as described in +.B tcp-environ(5). +.SH OPTIONS +.TP +.B \-i\fIlocalip +Use +.I localip +as the IP address for the local side of the connection; +quit if +.I localip +is not available. +.TP +.B \-p\fIlocalport +Use +.I localport +as the port number for the local side of the connection; +quit if +.I localport +is not available. +.TP +.B \-I\fIinterface +Use +.I interface +as the local network interface. This is only defined for IPv6 sockets +and needed if you use link-local IPv6 addresses. +.TP +.B \-T\fItimeoutconn +Give up on the +connection attempt +after +.I timeoutconn +seconds. Default: 60. +This timeout applies to each IP address tried. +.TP +.B \-d +(Default.) +Delay sending data for a fraction of a second whenever the +remote host is responding slowly, +to make better use of the network. +.TP +.B \-D +Never delay sending data; +enable TCP_NODELAY. +This is appropriate for interactive connections. +.TP +.B \-q +Quiet. +Do not print any messages. +.TP +.B \-Q +(Default.) +Print error messages. +.TP +.B \-v +Verbose. +Print all available messages. +.SH "DATA-GATHERING OPTIONS" +.TP +.B \-h +(Default.) +Look up the remote host name for +.BR TCPREMOTEHOST . +.TP +.B \-H +Do not look up the remote host name; +unset +.BR TCPREMOTEHOST . +.TP +.B \-l\fIlocalname +Do not look up the local host name; +use +.I localname +for +.BR TCPLOCALHOST . +.TP +.B \-r +(Default.) +Attempt to obtain +.B TCPREMOTEINFO +from the remote host. +.TP +.B \-R +Do not attempt to obtain +.B TCPREMOTEINFO +from the remote host. +.TP +.B \-t\fItimeoutinfo +Give up on the +.B TCPREMOTEINFO +connection attempt +after +.I timeoutinfo +seconds. Default: 26. +.TP +.B \-4 +Fall back to IPv4 sockets. This is necessary for terminally broken +systems like OpenBSD which will not let IPv6 sockets connect to +V4-mapped IPv6 addresses. Please note that this also applies to DNS +lookups, so you will have to use an DNS resolver with an IPv6 address to +connect to IPv6 systems. Use \fBDNSCACHEIP\fR to set the DNS resolver +IP dynamically. +.TP +.B \-6 +Force IPv6 mode in UCSPI environment variables, even for +IPv4 connections. This will set \fB$PROTO\fR to \fBTCP6\fR and put +IPv4-mapped IPv6 addresses in \fBTCPLOCALIP\fR and \fBTCPREMOTEIP\fR. +.SH "SEE ALSO" +date@(1), +finger@(1), +http@(1), +mconnect(1), +tcpcat(1), +tcpserver(1), +who@(1), +tcp-environ(5) diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/usr/local/man/man1/tcpserver.1 b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/usr/local/man/man1/tcpserver.1 new file mode 100644 index 0000000..72c5ca0 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/usr/local/man/man1/tcpserver.1 @@ -0,0 +1,266 @@ +.TH tcpserver 1 +.SH NAME +tcpserver \- accept incoming TCP connections +.SH SYNOPSIS +.B tcpserver +[ +.B \-146jpPhHrRoOdDqQv +] +[ +.B \-c\fIlimit +] +[ +.B \-x\fIrules.cdb +] +[ +.B \-B\fIbanner +] +[ +.B \-g\fIgid +] +[ +.B \-u\fIuid +] +[ +.B \-b\fIbacklog +] +[ +.B \-l\fIlocalname +] +[ +.B \-t\fItimeout +] +[ +.B \-I\fIinterface +] +.I host +.I port +.I program +[ +.I arg ... +] +.SH DESCRIPTION +.B tcpserver +waits for connections from TCP clients. +For each connection, it runs +.I program +with the given arguments, +with descriptor 0 reading from the network +and descriptor 1 writing to the network. + +The server's address is given by +.I host +and +.IR port . +.I host +can be 0, allowing connections from any host; +or a particular IP address, +allowing connections only to that address; +or a host name, allowing connections to the first IP address +for that host. +.I port +may be a numeric port number +or a port name. +If +.I port +is 0, +.B tcpserver +will choose a free port. + +.B tcpserver +sets up several environment variables, +as described in +.B tcp-environ(5). + +.B tcpserver +exits when it receives SIGTERM. +.SH "OPTIONS" +.TP +.B \-c\fIlimit +Do not handle more than +.I limit +simultaneous connections. +If there are +.I limit +simultaneous copies of +.I program +running, defer acceptance of a new connection +until one copy finishes. +.I limit +must be a positive integer. +Default: 40. +.TP +.B \-x\fIrules.cdb +Follow the rules compiled into +.I rules.cdb +by +.BR tcprules . +These rules may specify setting environment variables +or rejecting connections from bad sources. + +.B tcpserver +does not read +.I rules.cdb +into memory; +you can rerun +.B tcprules +to change +.BR tcpserver 's +behavior on the fly. +.TP +.B \-B\fIbanner +Write +.I banner +to the network immediately after each connection is made. +.B tcpserver +writes +.I banner +before looking up +.BR TCPREMOTEHOST , +before looking up +.BR TCPREMOTEINFO , +and before checking +.IR rules.cdb . + +This feature can be used to reduce latency in protocols +where the client waits for a greeting from the server. +.TP +.B \-g\fIgid +Switch group ID to +.I gid +after preparing to receive connections. +.I gid +must be a positive integer. +.TP +.B \-u\fIuid +Switch user ID to +.I uid +after preparing to receive connections. +.I uid +must be a positive integer. +.TP +.B \-1 +After preparing to receive connections, +print the local port number to standard output. +.TP +.B \-4 +Fall back to IPv4 sockets. This is necessary for terminally broken +systems like OpenBSD which will not let IPv6 sockets connect to +V4-mapped IPv6 addresses. Please note that this also applies to DNS +lookups, so you will have to use an DNS resolver with an IPv6 address to +accept IPv6 connections. Use \fBDNSCACHEIP\fR to set the DNS resolver +IP dynamically. +.TP +.B \-6 +Force IPv6 mode in UCSPI environment variables, even for +IPv4 connections. This will set \fB$PROTO\fR to \fBTCP6\fR and put +IPv4-mapped IPv6 addresses in \fBTCPLOCALIP\fR and \fBTCPREMOTEIP\fR. +.TP +.B \-I\fIinterface +Bind to the network interface +.I interface +("eth0" on Linux, for example). This is only defined and needed for +IPv6 link-local addresses. +.TP +.B \-b\fIbacklog +Allow up to +.I backlog +simultaneous SYN_RECEIVEDs. +Default: 20. +On some systems, +.I backlog +is silently limited to 5. +See +.BR listen (2) +for more details. +.TP +.B \-o +Leave IP options alone. +If the client is sending packets along an IP source route, +send packets back along the same route. +.TP +.B \-O +(Default.) +Kill IP options. +A client can still use source routing to connect and to send data, +but packets will be sent back along the default route. +.TP +.B \-d +(Default.) +Delay sending data for a fraction of a second whenever the +remote host is responding slowly, +to make better use of the network. +.TP +.B \-D +Never delay sending data; +enable TCP_NODELAY. +This is appropriate for interactive connections. +.TP +.B \-q +Quiet. +Do not print any messages. +.TP +.B \-Q +(Default.) +Print error messages. +.TP +.B \-v +Verbose. +Print all available messages. +.SH "DATA-GATHERING OPTIONS" +.TP +.B \-p +Paranoid. +After looking up the remote host name, +look up the IP addresses for that name, +and make sure one of them matches +.BR TCPREMOTEIP . +If none of them do, +unset +.BR TCPREMOTEHOST . +.TP +.B \-P +(Default.) +Not paranoid. +.TP +.B \-h +(Default.) +Look up the remote host name and set +.BR TCPREMOTEHOST . +.TP +.B \-H +Do not look up the remote host name. +.TP +.B \-l\fIlocalname +Do not look up the local host name; +use +.I localname +for +.BR TCPLOCALHOST . +.TP +.B \-r +(Default.) +Attempt to obtain +.B TCPREMOTEINFO +from the remote host. +.TP +.B \-R +Do not attempt to obtain +.B TCPREMOTEINFO +from the remote host. +.TP +.B \-t\fItimeout +Give up on the +.B TCPREMOTEINFO +connection attempt +after +.I timeout +seconds. Default: 26. +.SH "SEE ALSO" +argv0(1), +fixcr(1), +recordio(1), +tcpclient(1), +tcprules(1), +listen(2), +tcp-environ(5) diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/wait.h b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/wait.h new file mode 100644 index 0000000..cdb77c3 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/wait.h @@ -0,0 +1,14 @@ +#ifndef WAIT_H +#define WAIT_H + +extern int wait_pid(); +extern int wait_nohang(); +extern int wait_stop(); +extern int wait_stopnohang(); + +#define wait_crashed(w) ((w) & 127) +#define wait_exitcode(w) ((w) >> 8) +#define wait_stopsig(w) ((w) >> 8) +#define wait_stopped(w) (((w) & 127) == 127) + +#endif diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/wait_nohang.c b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/wait_nohang.c new file mode 100644 index 0000000..bea2774 --- /dev/null +++ b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/wait_nohang.c @@ -0,0 +1,12 @@ +#include +#include +#include "haswaitp.h" + +int wait_nohang(wstat) int *wstat; +{ +#ifdef HASWAITPID + return waitpid(-1,wstat,WNOHANG); +#else + return wait3(wstat,WNOHANG,(struct rusage *) 0); +#endif +} diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/wait_nohang.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/wait_nohang.o new file mode 100644 index 0000000000000000000000000000000000000000..5858cbbfa076f9c28a2b67336b24f3c35e1f373c GIT binary patch literal 1352 zcmbW1K}$kG5Xa~FEVH6aIs^p?K@{Yo6&*T+U}Zsch=MxBs;`vt8TugW(zR}Vi@rmb zK2JBhM>ez0)^m6#7j$NRGk<4im-T7yXg}sSV3z|s@E=)7hn>SaPac;PN|O` zu1}LNU$g8wk0;=CQjR;B7<*paBidz=QuZxmimlwZ22;Cm$@~k))7|rTEjg3 z=CJxL)Y86U_zACb4sv0LzTLmYd35BSD3^ z4Q1^NCgj;st<_&xAzP`ZSe~6J +#include +#include "error.h" +#include "haswaitp.h" + +#ifdef HASWAITPID + +int wait_pid(wstat,pid) int *wstat; int pid; +{ + int r; + + do + r = waitpid(pid,wstat,0); + while ((r == -1) && (errno == error_intr)); + return r; +} + +#else + +/* XXX untested */ +/* XXX breaks down with more than two children */ +static int oldpid = 0; +static int oldwstat; /* defined if(oldpid) */ + +int wait_pid(wstat,pid) int *wstat; int pid; +{ + int r; + + if (pid == oldpid) { *wstat = oldwstat; oldpid = 0; return pid; } + + do { + r = wait(wstat); + if ((r != pid) && (r != -1)) { oldwstat = *wstat; oldpid = r; continue; } + } + while ((r == -1) && (errno == error_intr)); + return r; +} + +#endif diff --git a/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/wait_pid.o b/NONE-CKUBU/src/djbdns/ucspi-tcp-0.88/wait_pid.o new file mode 100644 index 0000000000000000000000000000000000000000..0333f9203d64679462bdc1672944b2b5463d4c6e GIT binary patch literal 1520 zcmbu8&ubG=5XWb;(Y6}WC<+CY?mH=*j{wtWoAC}CNuNi+xK&ecPfrURvfxTe?3cy zrVFr@;}+FujAkA!WV=h*uZQE4>%h$~i`lpA$9LEpzX#dYtMT0aNH-6G>95(&lV>we zx8Sgx7%Fn!J|JhU;kdPt(M_&(nmHEaI(}}~8=oq(^@$H|yY6jNX};aQ;hmoiJ5dmO zSJY*7X{xE37ltO0>c8pfpu<|HL%m|HG+Ygo4%alP26r<*U81`tc7!$R zj2eH!=yQg<#<%L7HH4P6E^-|I`LFp`ITw9Zcok*cIM<4hZQH-aO*Ujti0zp9?VOk& z$mUz#Vut!sJ{vG80&?#H$0b9`w#c)t+~j7wW@Yv7oAZ|7A7!0@m)$V9X;Kt%_omz*aA{;eV6VpO zc%dIV?@8wJTSM}h1GqYX)9WD8{>x}tb@$BNU_`zjrfHn`t4TM|Q4$loN$N+jPEiYD j-zn}GceOhh%2@ + +void nope() +{ + exit(1); +} + +main() +{ + unsigned long x[4]; + unsigned long y[4]; + int i; + int j; + char c; + + signal(SIGILL,nope); + + x[0] = 0; + x[1] = 0; + x[2] = 0; + x[3] = 0; + + asm volatile(".byte 15;.byte 162" : "=a"(x[0]),"=b"(x[1]),"=c"(x[3]),"=d"(x[2]) : "0"(0) ); + if (!x[0]) return 0; + asm volatile(".byte 15;.byte 162" : "=a"(y[0]),"=b"(y[1]),"=c"(y[2]),"=d"(y[3]) : "0"(1) ); + + for (i = 1;i < 4;++i) + for (j = 0;j < 4;++j) { + c = x[i] >> (8 * j); + if (c < 32) c = 32; + if (c > 126) c = 126; + putchar(c); + } + + printf("-%08x-%08x\n",y[0],y[3]); + + return 0; +} diff --git a/NONE-CKUBU/src/igmpproxy/igmpproxy.configure.txt b/NONE-CKUBU/src/igmpproxy/igmpproxy.configure.txt new file mode 100644 index 0000000..ccfda15 --- /dev/null +++ b/NONE-CKUBU/src/igmpproxy/igmpproxy.configure.txt @@ -0,0 +1 @@ +./configure --prefix=/usr/local/igmpproxy-0.1 diff --git a/NONE-CKUBU/src/ipt-gateway b/NONE-CKUBU/src/ipt-gateway index de0ebb6..e2a8392 160000 --- a/NONE-CKUBU/src/ipt-gateway +++ b/NONE-CKUBU/src/ipt-gateway @@ -1 +1 @@ -Subproject commit de0ebb616266e09c1ded3ae277b5b184093f9cc5 +Subproject commit e2a8392a8c0a0f47851f6d99fd35410a24c5a2f1 diff --git a/NONE-CKUBU/src/mailsystem b/NONE-CKUBU/src/mailsystem index c648e9e..728df43 160000 --- a/NONE-CKUBU/src/mailsystem +++ b/NONE-CKUBU/src/mailsystem @@ -1 +1 @@ -Subproject commit c648e9e8493c6e494d6e6dd0c8706e2ec1a38232 +Subproject commit 728df435614f331a28a0f87379d0c728456b0c43