allow /32 etc in is_ipaddr
[spider.git] / cmd / show / badip.pl
index 73db65da76df80e96329a8b84b21035844f9263a..832c98cdc470027c7194573dcf40655034b3638d 100644 (file)
@@ -1,7 +1,7 @@
 #
-# set list of bad dx nodes
+# show (or find) list of bad dx nodes
 #
-# Copyright (c) 2021 - Dirk Koopman G1TLH
+# Copyright (c) 2021-2023 - Dirk Koopman G1TLH
 #
 #
 #
@@ -9,20 +9,48 @@ my ($self, $line) = @_;
 return (1, $self->msg('e5')) if $self->remotecmd;
 # are we permitted?
 return (1, $self->msg('e5')) if $self->priv < 6;
+return (1, q{Please install Net::CIDR::Lite or libnet-cidr-lite-perl to use this command}) unless $DXCIDR::active;
+
 my @out;
 my @added;
 my @in = split /\s+/, $line;
-my @list= DXCIDR::list();
-foreach my $list (@list) {
-       if (@in) {
-               for (@in) {
-                       if ($list =~ /$_/i) {
-                               push @out, $list;
-                               last;
-                       }
+my $maxlth = 0;
+my $width = $self->width // 80;
+my $count = 0;
+
+#$DB::single = 1;
+
+# query
+if (@in) {
+       foreach my $ip (@in) {
+               if (DXCIDR::find($ip)) {
+                       push @out, "$ip DIRTY";
+                       ++$count;
+               } else {
+                       push @out, "$ip CLEAN";
                }
-       } else {
-               push @out, $list;
-       } 
+       }
+       return (1, @out);
+} else {
+# list
+       my @list = map {my $s = $_; $s =~ s!/(?:32|128)$!!; $maxlth = length $s if length $s > $maxlth; $s =~ /^1$/?undef:$s} DXCIDR::list();
+       my @l;
+       $maxlth //= 20;
+       my $n = int ($width/($maxlth+1));
+       my $format = "\%-${maxlth}s " x $n;
+       chop $format;
+
+       foreach my $list (@list) {
+               ++$count;
+               if (@l > $n) {
+                       push @out, sprintf $format, @l;
+                       @l = ();
+               }
+               push @l, $list;
+       }       
+       push @l, "" while @l < $n;
+       push @out, sprintf $format, @l;
 }
+
+push @out, "show/badip: $count records found";
 return (1, @out);