harden DXCIDR from router/proxy html measges
[spider.git] / cmd / set / badip.pl
index 962fc641435cc65178169fa864ab11ea12ea5ee5..bfbd89ce505900423736986a449b4d568ff02ce0 100644 (file)
@@ -9,16 +9,39 @@ 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;
-return (1, "set/badip: need IP, IP-IP or IP/24") unless @in;
-for (@in) {
-       eval{ DXCIDR::add($_); };
-       return (1, "set/badip: $_ $@") if $@;
-       push @added, $_; 
+my $suffix = 'local';
+if ($in[0] =~ /^[_\d\w]+$/) {
+       $suffix = shift @in;
+}
+return (1, "set/badip: need [suffix (def: local])] IP, IP-IP or IP/24") unless @in;
+for my $ip (@in) {
+       my $r;
+       unless (is_ipaddr($ip)) {
+               push @out, "set/badip: '$ip' is not an ip address, ignored";
+               next;
+       }
+       eval{ $r = DXCIDR::find($ip); };
+       return (1, "set/badip: $ip $@") if $@;
+       if ($r) {
+               push @out, "set/badip: $ip exists, not added";
+               next;
+       }
+       DXCIDR::add($suffix, $ip);
+       push @added, $ip;
 }
 my $count = @added;
 my $list = join ' ', @in;
-push @out, "set/badip: added $count entries: $list";
+DXCIDR::clean_prep();
+#$DB::single = 1;
+if ($count) {
+       DXCIDR::append($suffix, @added);
+       push @out, "set/badip: added $count entries to badip.$suffix : '$list'";
+} else {
+       push @out, "set/badip: No valid IPs, not updating badip.$suffix with '$list'";
+}
 return (1, @out);