harden DXCIDR from router/proxy html measges
[spider.git] / cmd / set / badip.pl
1 #
2 # set list of bad dx nodes
3 #
4 # Copyright (c) 2021 - Dirk Koopman G1TLH
5 #
6 #
7 #
8 my ($self, $line) = @_;
9 return (1, $self->msg('e5')) if $self->remotecmd;
10 # are we permitted?
11 return (1, $self->msg('e5')) if $self->priv < 6;
12 return (1, q{Please install Net::CIDR::Lite or libnet-cidr-lite-perl to use this command}) unless $DXCIDR::active;
13
14 my @out;
15 my @added;
16 my @in = split /\s+/, $line;
17 my $suffix = 'local';
18 if ($in[0] =~ /^[_\d\w]+$/) {
19         $suffix = shift @in;
20 }
21 return (1, "set/badip: need [suffix (def: local])] IP, IP-IP or IP/24") unless @in;
22 for my $ip (@in) {
23         my $r;
24         unless (is_ipaddr($ip)) {
25                 push @out, "set/badip: '$ip' is not an ip address, ignored";
26                 next;
27         }
28         eval{ $r = DXCIDR::find($ip); };
29         return (1, "set/badip: $ip $@") if $@;
30         if ($r) {
31                 push @out, "set/badip: $ip exists, not added";
32                 next;
33         }
34         DXCIDR::add($suffix, $ip);
35         push @added, $ip;
36 }
37 my $count = @added;
38 my $list = join ' ', @in;
39 DXCIDR::clean_prep();
40 #$DB::single = 1;
41 if ($count) {
42         DXCIDR::append($suffix, @added);
43         push @out, "set/badip: added $count entries to badip.$suffix : '$list'";
44 } else {
45         push @out, "set/badip: No valid IPs, not updating badip.$suffix with '$list'";
46 }
47 return (1, @out);