#!/usr/bin/awk -f # compose a tinydns-fromatted data file from multiple input files function ip6_hex(ip6, hex, i, arr) { sub("::", substr("::::::::", split(ip6, arr, ":") - 1), ip6) split(ip6, arr, ":") for (i = 1; i <= 8; i++) hex = hex substr("0000" arr[i], length(arr[i]) + 1) return hex } /^$/ { next } FILENAME != "rr.soa" { print(FNR > 1 ? "" : "\n# " FILENAME "\n") } FILENAME == "rr.soa" { domain[++i] = $1 } FILENAME == "rr.host" { for (i = 2; i <= NF; i++) { if (index($i, ":") == 0) { host4[$1] = $i print("=" $1 "." domain[1] ":" host4[$1]) } else { host6[$1] = ip6_hex($i) print("6" $1 "." domain[1] ":" host6[$1]) } } } FILENAME == "rr.alias" { for (i = 2; i <= NF; i++) { if (host4[$1]) print("+" $i ":" host4[$1]) if (host6[$1]) print("3" $i ":" host6[$1]) } } FILENAME == "rr.ns" { if (host4[$1]) print("+" $2 "." domain[1] ":" host4[$1]) if (host6[$1]) print("3" $2 "." domain[1] ":" host6[$1]) for (i in domain) { print("." domain[i] "::" $2 "." domain[1]) } } FILENAME == "rr.mx" { for (i in domain) { print("@" domain[i] "::" $1 "." domain[1]) } } END { print("") }