1
0
This repository has been archived on 2024-07-22. You can view files and clone it, but cannot push or open issues or pull requests.
TP-Link_Archer-XR500v/EN7526G_3.18Kernel_SDK/apps/public/linux-atm/extra/hosts2ans.pl
2024-07-22 01:58:46 -03:00

72 lines
2.3 KiB
Perl
Executable File

#!/usr/bin/perl
#
# Usage:
#
# hosts2ans.pl [-r] [ domain [ host [ email ] ] ] </etc/hosts.atm >zonefile
#
# Where domain is the name of the domain to create, e.g. lrc.epfl.ch (if
# omitted, hostname -d is used)
# host is the name of the primary DNS server of that domain, e.g.
# lrcpcs.epfl.ch (if omitted, hostname -f is used)
# email is the e-mail address of the DNS administrator of that
# domain, e.g. root@lrc.epfl.ch (if omitted, root@host is used)
# zonefile is the name of the output file, e.g. lrc.zone
#
# Trailing dots in domain, host, and email are silently removed.
#
# With -r, the reverse mapping (PTR) is created. Otherwise, the forward mapping
# (ATMA) is created.
#
# Example: host2ans.pl lrc.epfl.ch </etc/hosts.atm >/etc/named/lrc.zone
if ($ARGV[0] eq "-r") {
shift(@ARGV);
$rev = 1;
}
$master = $tmp = `hostname -f` unless defined($master = $ARGV[1]);
$master =~ s/\n//;
$master =~ s/\.$//;
($domain = $master) =~ s/^[^.]*\.// unless defined($domain = $ARGV[0]);
$domain =~ s/\.$//;
$email = "root\@$master" unless defined($email = $ARGV[2]);
$email =~ s/@/\./;
$email =~ s/\.$//;
print "; ".($rev ? "Reverse mapping" : "Authoritative data")." for $domain".
"\n\n";
print "@\t\tIN\tSOA\t$master. $email. (\n";
@t = localtime(time);
$t[5] += 1900 if $t[5] < 100; # Perl bug ?
printf("\t\t\t\t%04d%02d%02d%02d\t; Serial\n",$t[5],$t[4],$t[3],$t[2]);
print "\t\t\t\t10800\t\t; Refresh (3h)\n";
print "\t\t\t\t3600\t\t; Retry (1h)\n";
print "\t\t\t\t3600000\t\t; Expire (1000h)\n";
print "\t\t\t\t86400 )\t\t; Minimum (24h)\n";
print "\t\tIN\tNS\t$master.\n";
print "localhost\tIN\tA\t127.0.0.1\n" unless $rev;
while (<STDIN>) {
chop;
s/#.*//;
s/\s+$//;
s/^\s+//;
next if /^$/;
($addr,$host) = split(/\s+/);
$addr =~ s/\.//g;
$host =~ s/\..*//;
$host =~ s/\.$//;
if ($rev) {
$pfx = substr($addr,0,26);
$tail = substr($addr,26,14);
if ($pfx ne $origin) {
$origin = $pfx;
$single = substr($pfx,6,20);
print "\$ORIGIN ".join(".",reverse split("",substr($pfx,6,20))).
".".substr($pfx,2,4).".".substr($pfx,0,2).".AESA.ATMA.INT.\n";
}
print substr($tail,12,2).".".substr($tail,0,12)."\tIN\tPTR\t$host.".
$domain.".\n";
}
else {
print $host.(length($host) < 8 ? "\t" : "")."\tIN\tATMA\t$addr\n";
}
}