diff --git a/bin/setup-eval-netns.sh b/bin/setup-eval-netns.sh index fb2eaee..fd048e9 100755 --- a/bin/setup-eval-netns.sh +++ b/bin/setup-eval-netns.sh @@ -2,36 +2,43 @@ set -e set -u +set -x ip netns delete evalserver >& /dev/null && echo "Removed old evalserver namespace" || echo "No evalserver namespace yet" -ip link delete evalserver-public type veth >& /dev/null && echo "Removed old evalserver veth device" || echo "No evalserver veth device yet" +ip link delete evals-public type veth >& /dev/null && echo "Removed old evalserver veth device" || echo "No evalserver veth device yet" ip netns add evalserver -ip link add evalserver-private type veth peer name evalserver-public -ip link set evalserver-private netns evalserver +ip link add evals-private type veth peer name evals-public +ip link set evals-private netns evalserver sleep 1 -ip addr add 192.168.197.1/24 dev evalserver-public -ip link set evalserver-public up +ip addr add 192.168.197.1/24 dev evals-public +ip link set evals-public up ip netns exec evalserver ip link set dev lo up -ip netns exec evalserver ip addr add 192.168.197.2/24 dev evalserver-private -ip netns exec evalserver ip link set evalserver-private up +ip netns exec evalserver ip addr add 192.168.197.2/24 dev evals-private +ip netns exec evalserver ip link set evals-private up ip netns exec evalserver ip route add default via 192.168.197.1 iptables -N EVALSERVER-FORWARD || iptables -F EVALSERVER-FORWARD iptables -t nat -N EVALSERVER-POST || iptables -t nat -F EVALSERVER-POST +iptables -N EVALSERVER-OUTPUT || iptables -F EVALSERVER-OUTPUT +iptables -t nat -N EVALSERVER-OUTPUT || iptables -t nat -F EVALSERVER-OUTPUT iptables -A EVALSERVER-FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT -iptables -A EVALSERVER-FORWARD -i evalserver-public -d 192.168.32.1 -j ACCEPT -iptables -A EVALSERVER-FORWARD -i evalserver-public -d 192.168.197.0/24 -j ACCEPT -iptables -A EVALSERVER-FORWARD -i evalserver-public -d 192.168.0.0/16 -j REJECT -iptables -A EVALSERVER-FORWARD -i evalserver-public -d 10.0.0.0/8 -j REJECT +#iptables -A EVALSERVER-FORWARD -i evals-public -d 192.168.32.1 -j ACCEPT +iptables -A EVALSERVER-FORWARD -i evals-public -d 192.168.197.0/24 -j ACCEPT +iptables -A EVALSERVER-FORWARD -i evals-public -d 192.168.0.0/16 -j REJECT +iptables -A EVALSERVER-FORWARD -i evals-public -d 10.0.0.0/8 -j REJECT #iptables -t nat -A EVALSERVER-POST -s 192.168.196.0/24 -d 192.168.196.0/24 -j ACCEPT -#iptables -t nat -A EVALSERVER-POST -s 192.168.196.0/24 -o evalserver-public -j MASQUERADE +iptables -t nat -A EVALSERVER-POST -s 192.168.197.0/24 -o evals-public +iptables -A EVALSERVER-OUTPUT -d 192.168.197.1/32 -p tcp -m tcp --dport 9040 --tcp-flags FIN,SYN,RST,ACK SYN -j ACCEPT +iptables -t nat -A EVALSERVER-OUTPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -s 192.168.197.0/24 -d !192.168.197.0/24 --j REDIRECT --to-ports 9040 + iptables -t filter -D FORWARD -j EVALSERVER-FORWARD || echo "No filter chain loaded" #iptables -t nat -D POSTROUTING -j EVALSERVER-POST || echo "No nat chain loaded" #iptables -t nat -A POSTROUTING -j EVALSERVER-POST iptables -t filter -I FORWARD 1 -j EVALSERVER-FORWARD +iptables -t filter -I OUTPUT 1 -j EVALSERVER-OUTPUT diff --git a/cpanfile b/cpanfile index e154fbd..3d04910 100644 --- a/cpanfile +++ b/cpanfile @@ -49,7 +49,7 @@ requires 'MooseX::Declare'; requires 'Function::Parameters'; requires 'Rand::MersenneTwister'; -requires 'arybase'; +# requires 'arybase'; # removed in 5.29 requires 'Errno'; requires 'JSON'; requires 'JSON::PP'; @@ -147,3 +147,6 @@ requires 'Array::Utils'; requires 'DBD::SQLite'; requires 'Mojo::SQLite'; requires 'FFI::Platypus'; +requires 'Perl6::Take'; +requires 'List::AllUtils'; +requires 'IRC::FromANSI::Tiny'; diff --git a/plugins/get.pm b/plugins/get.pm index 76d01e2..4696591 100644 --- a/plugins/get.pm +++ b/plugins/get.pm @@ -17,7 +17,7 @@ package sub { my( $said ) = @_; - my $ua = LWP::UserAgent->new( agent => "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36" ); + my $ua = LWP::UserAgent->new( agent => "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko, really Perlbot) Chrome/45.0.2454.85 Safari/537.36" ); my $url; diff --git a/plugins/perldoc.pm b/plugins/perldoc.pm index 0f306cf..9972aa4 100644 --- a/plugins/perldoc.pm +++ b/plugins/perldoc.pm @@ -52,13 +52,18 @@ sub command { my $url = ""; - if ($said->{body} =~ /-q\s+(.*?)\s*(?:#.*)?/i) #faq questions + if ($said->{body} =~ /-(q|s)\s+(.*?)\s*(?:#.*)?\s*$/i) #faq questions {#http://perldoc.perl.org/search.html?q=foo+bar - my $trimmed = $1; + my ($oper, $trimmed) = ($1, $2); $trimmed =~ s/^\s*(\S+)\s*$/$1/; - my $query = uri_encode($trimmed); + my $query = uri_encode($trimmed, {"encode_reserved" => 1}); $query =~ s/%20/+/g; - $url = "https://perldoc.pl/search?q=".$query; + + if ($oper eq 'q') { + $url = "https://perldoc.pl/search?no_redirect=1&q=".$query."#FAQ"; + } else { + $url = "https://perldoc.pl/search?q=".$query; + } # $url = makeashorterlink($url); } elsif ($said->{body} =~ /-f\s+(\S+)\s*/i) #functions, only use the first part of a multiword expression @@ -67,7 +72,7 @@ sub command { my $func = $1; $func =~ s/^\s*(.*)\s*$/$1/; #trim whitespace - $func = lc($func); #all functions are lowercase, except the exception below + #$func = lc($func); #all functions are lowercase, except the exception below $func = "-X" if ($func eq "-x"); #only case where it isn't lowercase, its easier to test at this point diff --git a/plugins/supereval.pm b/plugins/supereval.pm index 5b2cd2c..45fdde3 100644 --- a/plugins/supereval.pm +++ b/plugins/supereval.pm @@ -36,7 +36,7 @@ sub make_pastebin { } } -my @versions = ('', qw(1 2 3 4 5.0 5.1 5.2 5.3 5.4 5.5 5.6 5.6t 5.8 5.10 5.12 5.14 5.16 5.18 5.20 5.22 5.24 5.26 5.26t 5.28 all)); +my @versions = ('', qw(1 2 3 4 5.0 5.1 5.2 5.3 5.4 5.5 5.6 5.6t 5.8 5.8.8 5.10 5.10.0 5.12 5.14 5.16 5.18 5.20 5.22 5.24 5.26 5.28 5.8t 5.10t 5.12t 5.14t 5.16t 5.18t 5.20t 5.22t 5.24t 5.26t 5.28 tall all)); sub new { my( $class ) = @_; @@ -141,7 +141,18 @@ sub command { } else { $resultstr = make_pastebin($said->{channel}, $code); } - + + # clean up the output of @INC and friends. + $resultstr =~ s|/home/ryan/perl5/perlbrew/perls/perlbot-blead-[^/]+|\$BLEAD|g; + $resultstr =~ s|/perl5/perlbrew/perls/perlbot-blead-[^/]+|\$BLEAD|g; + $resultstr =~ s|/home/ryan/perl5/perlbrew/perls|\$PERLS|g; + $resultstr =~ s|/perl5/perlbrew/perls|\$PERLS|g; + + if ($type eq 'perl6' || $type eq 'bash') { + use IRC::FromANSI::Tiny; + $resultstr = IRC::FromANSI::Tiny::convert($resultstr); + } + $resultstr =~ s/^(\x00)+//g;