summaryrefslogtreecommitdiff
path: root/contrib/whoisd/whoisd.pl
diff options
context:
space:
mode:
authorSeekingFor <SeekingFor@sfor.something>2013-10-30 02:37:50 +0000
committerSeekingFor <SeekingFor@sfor.something>2013-10-30 02:37:50 +0000
commit384487ab14b45ecd40783ed2ddaa6ef433f542e6 (patch)
tree521981f2d9d5fe9fa86e95ab99a91fb5f09b3bf7 /contrib/whoisd/whoisd.pl
parent0bc662fa9ad68bf3bc11a5f388fc6a4eb2f010fc (diff)
parente4734d7592a11fbb206b4da851f7b1cd8d10b7c8 (diff)
downloadresdb-384487ab14b45ecd40783ed2ddaa6ef433f542e6.tar.gz
resdb-384487ab14b45ecd40783ed2ddaa6ef433f542e6.zip
Merge git://1.41.41.1
Diffstat (limited to 'contrib/whoisd/whoisd.pl')
-rwxr-xr-xcontrib/whoisd/whoisd.pl55
1 files changed, 39 insertions, 16 deletions
diff --git a/contrib/whoisd/whoisd.pl b/contrib/whoisd/whoisd.pl
index 5b9aa54..67636c9 100755
--- a/contrib/whoisd/whoisd.pl
+++ b/contrib/whoisd/whoisd.pl
@@ -6,22 +6,37 @@
use strict;
+#maybe chroot this whoisd?
my $RESDB = "/services/resdb/resdb";
+my $HACK=0;
my $QUERY=<stdin>;
$QUERY =~ s/\r\n//g;
+$QUERY =~ s/\///g;
+if($QUERY eq '') {
+ printf "%% error. no query. wtf?";
+ exit 0;
+}
my $out;
my $title;
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";
+ $HACK=1;
+}
+
# ASNs
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;
@@ -39,12 +54,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;
- chdir("$RESDB/db/ip");
+ printf "%% IP section for %s\n", $QUERY unless $HACK;
+ chdir("$RESDB/db/ip") || die "%% error";
@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 +67,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;
}
@@ -64,9 +79,16 @@ 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");
- for($i=scalar(@parts)-1;$i>=0;$i--) {
- chdir($parts[$i]);
+ 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;
+ }
}
foreach(split(/\n/,`grep '' -r .`)) {
$out = $_;
@@ -81,25 +103,26 @@ 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");
+chdir("$RESDB/db/usr") || die "%% error";
if(chdir($QUERY)) {
foreach(split(/\n/,`grep '' -r .`)) {
$out = $_;
$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");
+chdir("$RESDB/db/as") || die "%% error";
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`)) {