From 85e32860a7dd614f433018d3e0371ecf4a96543f Mon Sep 17 00:00:00 2001
From: epoch <epoch@hacking.allowed.org>
Date: Fri, 23 Aug 2013 03:24:54 +0000
Subject: Added a whoisd to make for easier querying of the resdb's info. Read
 the source.

---
 contrib/whoisd/README    |  8 ++++
 contrib/whoisd/whoisd.pl | 99 ++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 107 insertions(+)
 create mode 100644 contrib/whoisd/README
 create mode 100755 contrib/whoisd/whoisd.pl

(limited to 'contrib/whoisd')

diff --git a/contrib/whoisd/README b/contrib/whoisd/README
new file mode 100644
index 0000000..228197c
--- /dev/null
+++ b/contrib/whoisd/README
@@ -0,0 +1,8 @@
+RTFS
+
+todo:
+  ipv6
+  more info in responses?
+  make it compatible with traceroute -A ?
+
+add any other features you'd like either in here or the source. You know perl, right?
diff --git a/contrib/whoisd/whoisd.pl b/contrib/whoisd/whoisd.pl
new file mode 100755
index 0000000..8580475
--- /dev/null
+++ b/contrib/whoisd/whoisd.pl
@@ -0,0 +1,99 @@
+#!/usr/bin/perl
+# coded by epoch.
+# use inetd or tcpserver or something else.
+# waste of time to do manual sockets for something like this.
+# this isn't my baby. you can murder it if you want.
+
+use strict;
+
+my $RESDB = "/services/resdb/resdb";
+
+my $QUERY=<stdin>;
+$QUERY =~ s/\r\n//g;
+my $out;
+my $title;
+my $value;
+my @parts;
+my $i;
+
+# ASNs
+if($QUERY =~ m/^AS(.+?)$/) {
+ printf "%% AS section for %s\n", $QUERY;
+ my $AS=$1;
+ chdir("$RESDB/db/as");
+ if(chdir($AS)) {
+  foreach(split(/\n/,`grep '' -r .`)) {
+   $out = $_;
+   $out =~ s/^\.\///g;
+   $out =~ m/^(.+?):(.+?)$/;
+   ($title, $value) = ($1, $2);
+   printf "%-20s %s\n", $title . ":", $value;
+   if($title eq "owner") {
+    $QUERY = $value;
+   }
+  }
+ } else {
+  printf "AS not found.";
+ }
+}
+
+# IPv4 addresses
+if($QUERY =~ m/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/) {
+ printf "%% IP section for %s\n", $QUERY;
+ chdir("$RESDB/db/ip");
+ foreach(split(/\./,$QUERY)) {
+  chdir(sprintf("%02x",$_));
+ }
+ foreach(split(/\n/,`grep '' -r .`)) {
+  $out = $_;
+  $out =~ s/^\.\///g;
+  ($title, $value) = split(/:/,$out);
+  printf "%-20s %s\n", $title . ":", $value;
+  if($title eq "owner") {
+   $QUERY = $value;
+  }
+ }
+}
+
+
+# if we get here and there's still a . in the query it is probably a domain.
+if($QUERY =~ m/\./) {
+ printf "%% domain section for %s\n", $QUERY;
+ @parts=split(/\./,$QUERY);
+ chdir("$RESDB/db/dom");
+ for($i=scalar(@parts)-1;$i>=0;$i--) {
+  chdir($parts[$i]);
+ }
+ foreach(split(/\n/,`grep '' -r .`)) {
+  $out = $_;
+  $out =~ s/^\.\///g;
+  $out =~ m/^(.+?):(.+?)$/;
+  ($title, $value) = ($1, $2);
+  printf "%-20s %s\n", $title . ":", $value;
+  if($title eq "owner") {
+   $QUERY = $value;
+  }
+ }
+}
+
+# default to assuming it is a name.
+printf "%% user section for %s\n", $QUERY;
+
+chdir("$RESDB/db/usr");
+if(chdir($QUERY)) {
+ foreach(split(/\n/,`grep '' -r .`)) {
+  $out = $_;
+  $out =~ s/^\.\///g;
+  $out =~ m/^(.+?):(.+?)$/;
+  ($title, $value) = ($1, $2);
+  printf "%-20s %s\n", $title . ":", $value;
+ }
+} else {
+ printf "%-20s missing db/usr file.\n", "warning" . ":";
+}
+chdir("$RESDB/db/as");
+foreach(split(/\n/,`grep '^$QUERY\$' */owner | cut -d/ -f1`)) {
+ $out = $_;
+ $out =~ s/\n//g;
+ printf "%-20s %s\n", "ASN" . ":", $out;
+}
-- 
cgit v1.2.3


From 954370bda476ad83458fde843a43f0477c6fcb42 Mon Sep 17 00:00:00 2001
From: epoch <epoch@hacking.allowed.org>
Date: Fri, 23 Aug 2013 18:22:48 +0000
Subject: updated whoid

---
 contrib/whoisd/whoisd.pl | 9 +++++++++
 1 file changed, 9 insertions(+)

(limited to 'contrib/whoisd')

diff --git a/contrib/whoisd/whoisd.pl b/contrib/whoisd/whoisd.pl
index 8580475..06c2cdf 100755
--- a/contrib/whoisd/whoisd.pl
+++ b/contrib/whoisd/whoisd.pl
@@ -97,3 +97,12 @@ foreach(split(/\n/,`grep '^$QUERY\$' */owner | cut -d/ -f1`)) {
  $out =~ s/\n//g;
  printf "%-20s %s\n", "ASN" . ":", $out;
 }
+
+foreach(split(/\n/,`grep -i -e "^$QUERY\$" "$RESDB/db/dom"/*/*/owner`)) {
+ $out = $_;
+ $out =~ s/.*\/db\/dom\/(.+?)\/(.+?)\/owner.*/\2\.\1/;
+ if ($out ne "") { #fix this comparison.
+  printf "%-20s %s\n", "domain" . ":", $out;
+ }
+}
+#printf "%-20s %s\n", "notice:","$QUERY did not claim any domains yet";
-- 
cgit v1.2.3


From bd6625e258cb8f551fa12ce1cc689f6163788235 Mon Sep 17 00:00:00 2001
From: epoch <epoch@hacking.allowed.org>
Date: Fri, 23 Aug 2013 18:43:12 +0000
Subject: fixed another bug in whoisd

---
 contrib/whoisd/whoisd.pl | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

(limited to 'contrib/whoisd')

diff --git a/contrib/whoisd/whoisd.pl b/contrib/whoisd/whoisd.pl
index 06c2cdf..5b9aa54 100755
--- a/contrib/whoisd/whoisd.pl
+++ b/contrib/whoisd/whoisd.pl
@@ -41,8 +41,12 @@ if($QUERY =~ m/^AS(.+?)$/) {
 if($QUERY =~ m/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/) {
  printf "%% IP section for %s\n", $QUERY;
  chdir("$RESDB/db/ip");
- foreach(split(/\./,$QUERY)) {
-  chdir(sprintf("%02x",$_));
+ @parts=split(/\./,$QUERY);
+ for($i=0;$i<scalar(@parts)-1;$i++) {
+  if(!chdir(sprintf("%02x",$parts[$i]))) {
+   printf "%-20s %s\n", "error" . ":", "IP not found.";
+   exit;
+  }
  }
  foreach(split(/\n/,`grep '' -r .`)) {
   $out = $_;
-- 
cgit v1.2.3


From 1b53ae755a154e5d3adbcc66546eba63e0d6f178 Mon Sep 17 00:00:00 2001
From: epoch <epoch@hacking.allowed.org>
Date: Sun, 6 Oct 2013 10:21:44 +0000
Subject: whoisd... don't remember. added ipv6 address for my nameserver does
 anyone still use bind_tld_zonefile? upgraded bind_tld_zonefile.sh to use ipv6
 in one place and rDNS in another

---
 contrib/whoisd/whoisd.pl                        | 34 +++++++++++++------
 db/dom/ano/allowed/ns/ns6.allowed.ano           |  1 +
 scripts/nameserver_autogen/bind_tld_zonefile    |  1 +
 scripts/nameserver_autogen/bind_tld_zonefile.sh | 44 +++++++++++++++++++------
 4 files changed, 60 insertions(+), 20 deletions(-)
 create mode 100644 db/dom/ano/allowed/ns/ns6.allowed.ano

(limited to 'contrib/whoisd')

diff --git a/contrib/whoisd/whoisd.pl b/contrib/whoisd/whoisd.pl
index 5b9aa54..f0ea59d 100755
--- a/contrib/whoisd/whoisd.pl
+++ b/contrib/whoisd/whoisd.pl
@@ -8,6 +8,7 @@ use strict;
 
 my $RESDB = "/services/resdb/resdb";
 
+my $HACK=0;
 my $QUERY=<stdin>;
 $QUERY =~ s/\r\n//g;
 my $out;
@@ -16,6 +17,15 @@ my $value;
 my @parts;
 my $i;
 
+if($QUERY eq "!!\n") {
+ $QUERY=<stdin>;
+ $QUERY =~ s/^!r(.+?)[\/,].*$/\1/;
+ printf "A500\n"; #fake this I guess. Does it even use that number for anything?
+ printf "%% Looks like you're trying -A on a BSDian traceroute with this server.\n";
+ printf "%% support will come soon for that.\n";
+ $HACK=1;
+}
+
 # ASNs
 if($QUERY =~ m/^AS(.+?)$/) {
  printf "%% AS section for %s\n", $QUERY;
@@ -39,12 +49,12 @@ if($QUERY =~ m/^AS(.+?)$/) {
 
 # IPv4 addresses
 if($QUERY =~ m/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/) {
- printf "%% IP section for %s\n", $QUERY;
+ printf "%% IP section for %s", $QUERY unless $HACK;
  chdir("$RESDB/db/ip");
  @parts=split(/\./,$QUERY);
  for($i=0;$i<scalar(@parts)-1;$i++) {
-  if(!chdir(sprintf("%02x",$parts[$i]))) {
-   printf "%-20s %s\n", "error" . ":", "IP not found.";
+  if(!chdir(sprintf("%02X",$parts[$i]))) {
+   printf "%-20s %s\n", "error" . ":", "IP not found." unless $HACK;
    exit;
   }
  }
@@ -52,7 +62,7 @@ if($QUERY =~ m/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-
   $out = $_;
   $out =~ s/^\.\///g;
   ($title, $value) = split(/:/,$out);
-  printf "%-20s %s\n", $title . ":", $value;
+  printf "%-20s %s\n", $title . ":", $value unless $HACK;
   if($title eq "owner") {
    $QUERY = $value;
   }
@@ -65,8 +75,11 @@ if($QUERY =~ m/\./) {
  printf "%% domain section for %s\n", $QUERY;
  @parts=split(/\./,$QUERY);
  chdir("$RESDB/db/dom");
- for($i=scalar(@parts)-1;$i>=0;$i--) {
-  chdir($parts[$i]);
+ for($i=scalar(@parts)-1;$i>scalar(@parts)-3;$i--) {
+  if(!chdir($parts[$i])) {
+   printf "%-20s %s", "warning" . ":", "domain not found.";
+   exit;
+  }
  }
  foreach(split(/\n/,`grep '' -r .`)) {
   $out = $_;
@@ -81,7 +94,7 @@ if($QUERY =~ m/\./) {
 }
 
 # default to assuming it is a name.
-printf "%% user section for %s\n", $QUERY;
+printf "%% user section for %s\n", $QUERY unless $HACK;
 
 chdir("$RESDB/db/usr");
 if(chdir($QUERY)) {
@@ -90,16 +103,17 @@ if(chdir($QUERY)) {
   $out =~ s/^\.\///g;
   $out =~ m/^(.+?):(.+?)$/;
   ($title, $value) = ($1, $2);
-  printf "%-20s %s\n", $title . ":", $value;
+  printf "%-20s %s\n", $title . ":", $value unless $HACK;
  }
 } else {
- printf "%-20s missing db/usr file.\n", "warning" . ":";
+ printf "%-20s missing db/usr file.\n", "warning" . ":" unless $HACK;
 }
 chdir("$RESDB/db/as");
 foreach(split(/\n/,`grep '^$QUERY\$' */owner | cut -d/ -f1`)) {
  $out = $_;
  $out =~ s/\n//g;
- printf "%-20s %s\n", "ASN" . ":", $out;
+ printf "%-20s AS%s\n", "origin" . ":", $out if $HACK;
+ printf "%-20s AS%s\n", "origin" . ":", $out unless $HACK;
 }
 
 foreach(split(/\n/,`grep -i -e "^$QUERY\$" "$RESDB/db/dom"/*/*/owner`)) {
diff --git a/db/dom/ano/allowed/ns/ns6.allowed.ano b/db/dom/ano/allowed/ns/ns6.allowed.ano
new file mode 100644
index 0000000..542e31a
--- /dev/null
+++ b/db/dom/ano/allowed/ns/ns6.allowed.ano
@@ -0,0 +1 @@
+fd63:1e39:6f73:2929::1
diff --git a/scripts/nameserver_autogen/bind_tld_zonefile b/scripts/nameserver_autogen/bind_tld_zonefile
index 344bb4e..fb224e5 100755
--- a/scripts/nameserver_autogen/bind_tld_zonefile
+++ b/scripts/nameserver_autogen/bind_tld_zonefile
@@ -1,4 +1,5 @@
 #!/usr/bin/php
+#does anyone use this?
 <?php
 print('$ttl 600'."\n");
 chdir('../db/dom/ano');
diff --git a/scripts/nameserver_autogen/bind_tld_zonefile.sh b/scripts/nameserver_autogen/bind_tld_zonefile.sh
index 72c1128..06eb802 100755
--- a/scripts/nameserver_autogen/bind_tld_zonefile.sh
+++ b/scripts/nameserver_autogen/bind_tld_zonefile.sh
@@ -3,33 +3,57 @@
 #be sure to edit these variables first.
 
 ANO_ZONEFILE=/etc/namedb/ano
+RDNS_ZONEFILE=/etc/namedb/1.in-addr.arpa
 RESDB_PATH=/services/resdb/resdb
 
-echo "; this zonefile genreated on: `date`" > $ANO_ZONEFILE
-echo '$TTL 3600' >> $ANO_ZONEFILE
-echo '@ IN SOA localns root ('`date +" %Y%m%d00"`' 60 300 3600000 3600 )' >> $ANO_ZONEFILE
-echo '@ IN NS localns' >> $ANO_ZONEFILE
-echo 'localns IN A 127.0.0.1' >> $ANO_ZONEFILE
 
 cd ${RESDB_PATH}/db/dom/ano
 
-echo -n generating zonefile... 
+echo -n "generating ipv4 reverse lookup zonefile for 1/8..."
+
+echo "; this zonefile genreated on: `date`" > "$RDNS_ZONEFILE"
+echo '$TTL 3600' >> "$RDNS_ZONEFILE"
+echo '@ IN SOA localhost. root.localhost. ('`date +" %Y%m%d%H"`' 60 300 3600000 3600 )' >> "$RDNS_ZONEFILE"
+echo '@ IN NS localhost.' >> "$RDNS_ZONEFILE"
+echo 'localhost. IN A 127.0.0.1' >> "$RDNS_ZONEFILE"
+
+for i in `ls /services/resdb/resdb/db/ip/01/*/*/ns/*`;do
+ f=$(basename $i)
+ a=$(basename $(dirname $i))
+ b=$(basename $(dirname $(dirname $i)))
+ c=$(basename $(dirname $(dirname $(dirname $i))))
+ printf "%d.%d IN NS %s\n" $[0x${b}] $[0x${c}] ${f}.
+done >> "$RDNS_ZONEFILE"
+echo done.
+
+echo -n generating .ano TLD zonefile... 
+
+echo "; this zonefile genreated on: `date`" > "$ANO_ZONEFILE"
+echo '$TTL 3600' >> "$ANO_ZONEFILE"
+echo '@ IN SOA localhost. root.localhost. ('`date +" %Y%m%d%H"`' 60 300 3600000 3600 )' >> "$ANO_ZONEFILE"
+echo '@ IN NS localhost.' >> "$ANO_ZONEFILE"
+echo 'localhost. IN A 127.0.0.1' >> "$ANO_ZONEFILE"
+
 for name in *;do
  if [ -e "${name}/ns/" ];then
   for server in "$name"/ns/*;do
-   if grep '\.ano$' <<< $name > /dev/null;then
+   if grep '\.ano$' <<< "$name" > /dev/null;then
     true
    fi
-   if grep '\.ano$' <<< $server > /dev/null;then
+   if grep '\.ano$' <<< "$server" > /dev/null;then
     true
    fi
    fqserver=`cut -d/ -f3- <<< $server`
    echo -e "${name}\tIN NS\t${fqserver}."
    for ip in `cat ${server}`;do 
-    echo -e "${fqserver}.\tIN A\t$ip"
+    if grep ':' <<< "$ip" > /dev/null;then
+     echo -e "${fqserver}.\tIN AAAA\t$ip"
+    else
+     echo -e "${fqserver}.\tIN A\t$ip"
+    fi
    done
   done
  fi
-done >> $ANO_ZONEFILE
+done >> "$ANO_ZONEFILE"
 echo done.
 echo might want to send a sighup to your named now.
-- 
cgit v1.2.3


From ada38c34846fa0da9739419e428d12fff771d3e5 Mon Sep 17 00:00:00 2001
From: epoch <epoch@hacking.allowed.org>
Date: Sun, 6 Oct 2013 11:29:47 +0000
Subject: forgot a newline

---
 contrib/whoisd/whoisd.pl | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'contrib/whoisd')

diff --git a/contrib/whoisd/whoisd.pl b/contrib/whoisd/whoisd.pl
index f0ea59d..d865c7a 100755
--- a/contrib/whoisd/whoisd.pl
+++ b/contrib/whoisd/whoisd.pl
@@ -49,7 +49,7 @@ if($QUERY =~ m/^AS(.+?)$/) {
 
 # IPv4 addresses
 if($QUERY =~ m/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/) {
- printf "%% IP section for %s", $QUERY unless $HACK;
+ printf "%% IP section for %s\n", $QUERY unless $HACK;
  chdir("$RESDB/db/ip");
  @parts=split(/\./,$QUERY);
  for($i=0;$i<scalar(@parts)-1;$i++) {
-- 
cgit v1.2.3


From a0cd5bfc306b8ee96e7a95a1d48fd6c5999df933 Mon Sep 17 00:00:00 2001
From: epoch <epoch@hacking.allowed.org>
Date: Sun, 6 Oct 2013 11:45:06 +0000
Subject: found a bug when sending just '.'... wasn't good.

---
 contrib/whoisd/whoisd.pl | 17 ++++++++++-------
 1 file changed, 10 insertions(+), 7 deletions(-)

(limited to 'contrib/whoisd')

diff --git a/contrib/whoisd/whoisd.pl b/contrib/whoisd/whoisd.pl
index d865c7a..158c075 100755
--- a/contrib/whoisd/whoisd.pl
+++ b/contrib/whoisd/whoisd.pl
@@ -22,7 +22,6 @@ if($QUERY eq "!!\n") {
  $QUERY =~ s/^!r(.+?)[\/,].*$/\1/;
  printf "A500\n"; #fake this I guess. Does it even use that number for anything?
  printf "%% Looks like you're trying -A on a BSDian traceroute with this server.\n";
- printf "%% support will come soon for that.\n";
  $HACK=1;
 }
 
@@ -30,8 +29,8 @@ if($QUERY eq "!!\n") {
 if($QUERY =~ m/^AS(.+?)$/) {
  printf "%% AS section for %s\n", $QUERY;
  my $AS=$1;
- chdir("$RESDB/db/as");
- if(chdir($AS)) {
+ chdir("$RESDB/db/as") || die "%% error";
+ if(chdir($AS) || die "%% error") {
   foreach(split(/\n/,`grep '' -r .`)) {
    $out = $_;
    $out =~ s/^\.\///g;
@@ -50,7 +49,7 @@ if($QUERY =~ m/^AS(.+?)$/) {
 # IPv4 addresses
 if($QUERY =~ m/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/) {
  printf "%% IP section for %s\n", $QUERY unless $HACK;
- chdir("$RESDB/db/ip");
+ chdir("$RESDB/db/ip") || die "%% error";
  @parts=split(/\./,$QUERY);
  for($i=0;$i<scalar(@parts)-1;$i++) {
   if(!chdir(sprintf("%02X",$parts[$i]))) {
@@ -74,8 +73,12 @@ if($QUERY =~ m/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-
 if($QUERY =~ m/\./) {
  printf "%% domain section for %s\n", $QUERY;
  @parts=split(/\./,$QUERY);
- chdir("$RESDB/db/dom");
+ chdir("$RESDB/db/dom") || die "%% error";
  for($i=scalar(@parts)-1;$i>scalar(@parts)-3;$i--) {
+  if(!$parts[$i]) {
+   printf "%% error";
+   exit
+  }
   if(!chdir($parts[$i])) {
    printf "%-20s %s", "warning" . ":", "domain not found.";
    exit;
@@ -96,7 +99,7 @@ if($QUERY =~ m/\./) {
 # default to assuming it is a name.
 printf "%% user section for %s\n", $QUERY unless $HACK;
 
-chdir("$RESDB/db/usr");
+chdir("$RESDB/db/usr") || die "%% error";
 if(chdir($QUERY)) {
  foreach(split(/\n/,`grep '' -r .`)) {
   $out = $_;
@@ -108,7 +111,7 @@ if(chdir($QUERY)) {
 } else {
  printf "%-20s missing db/usr file.\n", "warning" . ":" unless $HACK;
 }
-chdir("$RESDB/db/as");
+chdir("$RESDB/db/as") || die "%% error";
 foreach(split(/\n/,`grep '^$QUERY\$' */owner | cut -d/ -f1`)) {
  $out = $_;
  $out =~ s/\n//g;
-- 
cgit v1.2.3