X-Git-Url: http://dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FDXCommandmode.pm;h=01395c9052a52c429b2a27e547b608a575294689;hb=6ec22e78a4a344ce675645fabf18b2a1971f364a;hp=00c82125097dcea4fe077ff4bafc3322d3ea8ccd;hpb=ad222bb929a17f8ad54c567d4f59f68c5d1a8bbd;p=spider.git diff --git a/perl/DXCommandmode.pm b/perl/DXCommandmode.pm index 00c82125..01395c90 100644 --- a/perl/DXCommandmode.pm +++ b/perl/DXCommandmode.pm @@ -45,6 +45,7 @@ use Time::HiRes qw(gettimeofday tv_interval); use Mojo::IOLoop; use DXSubprocess; use Mojo::UserAgent; +use DXCIDR; use strict; use vars qw(%Cache %cmd_cache $errstr %aliases $scriptbase %nothereslug @@ -105,6 +106,7 @@ sub start $self->{name} = $name ? $name : $call; $self->send($self->msg('l2',$self->{name})); + $self->send("Capabilities: ve7cc rbn"); $self->state('prompt'); # a bit of room for further expansion, passwords etc $self->{priv} = $user->priv || 0; $self->{lang} = $user->lang || $main::lang || 'en'; @@ -141,12 +143,14 @@ sub start $self->{here} = 1; $self->{prompt} = $user->prompt if $user->prompt; $self->{lastmsgpoll} = 0; - + $self->{rbnseeme} = $user->rbnseeme; + RBN::add_seeme($call) if $self->{rbnseeme}; + # sort out new dx spot stuff $user->wantdxcq(0) unless defined $user->{wantdxcq}; $user->wantdxitu(0) unless defined $user->{wantdxitu}; $user->wantusstate(0) unless defined $user->{wantusstate}; - + # sort out registration if ($main::reqreg == 2) { $self->{registered} = !$user->registered; @@ -157,13 +161,13 @@ sub start # establish slug queue, if required $self->{sluggedpcs} = []; $self->{isslugged} = $DXProt::pc92_slug_changes + $DXProt::last_pc92_slug + 5 if $DXProt::pc92_slug_changes; - $self->{isslugged} = 0 if $self->{priv} > 0 || $user->registered || $user->homenode eq $main::mycall; + $self->{isslugged} = 0 if $self->{priv} || $user->registered || ($user->homenode && $user->homenode eq $main::mycall); # send the relevant MOTD $self->send_motd; # sort out privilege reduction - $self->{priv} = 0 unless $self->{hostname} eq '127.0.0.1' || $self->{hostname} eq '::1' || $self->conn->{usedpasswd}; + $self->{priv} = 0 unless $self->{hostname} eq '127.0.0.1' || $self->conn->peerhost eq '127.0.0.1' || $self->{hostname} eq '::1' || $self->conn->{usedpasswd}; # get the filters my $nossid = $call; @@ -204,6 +208,11 @@ sub start $self->tell_login('loginu'); $self->tell_buddies('loginb'); + + # is this a bad ip address? + if (is_ipaddr($self->{hostname})) { + $self->{badip} = DXCIDR::find($self->{hostname}); + } # do we need to send a forward/opernam? my $lastoper = $user->lastoper || 0; @@ -258,7 +267,7 @@ sub normal $cmdline =~ s/^\s*(.*)\s*$/$1/; if ($self->{state} eq 'page') { - my $i = $self->{pagelth}; + my $i = $self->{pagelth}-5; my $ref = $self->{pagedata}; my $tot = @$ref; @@ -269,7 +278,7 @@ sub normal } # send a tranche of data - while ($i-- > 0 && @$ref) { + for (; $i > 0 && @$ref; --$i) { my $line = shift @$ref; $line =~ s/\s+$//o; # why am having to do this? $self->send($line); @@ -397,7 +406,7 @@ sub normal } # check for excessive swearing - if ($self->{badcount} && $self->{badcount} >= $maxbadcount) { + if ($maxbadcount && $self->{badcount} && $self->{badcount} >= $maxbadcount) { LogDbg('DXCommand', "$self->{call} logged out for excessive swearing"); $self->disconnect; return; @@ -552,6 +561,7 @@ sub run_cmd if ($package && $self->can("${package}::handle")) { no strict 'refs'; dbg("cmd: package $package") if isdbg('command'); +# Log('cmd', "$self->{call} on $self->{hostname} : '$cmd $args'"); my $t0 = [gettimeofday]; eval { @ans = &{"${package}::handle"}($self, $args) }; if ($@) { @@ -641,6 +651,7 @@ sub disconnect return if $self->{disconnecting}++; delete $self->{senddbg}; + RBN::del_seeme($call); my $uref = Route::User::get($call); my @rout; @@ -648,7 +659,7 @@ sub disconnect # @rout = $main::routeroot->del_user($uref); @rout = DXProt::_del_thingy($main::routeroot, [$call, 0]); - dbg("B/C PC17 on $main::mycall for: $call") if isdbg('route'); + # dbg("B/C PC17 on $main::mycall for: $call") if isdbg('route'); # issue a pc17 to everybody interested $main::me->route_pc17($main::mycall, undef, $main::routeroot, $uref); @@ -1008,8 +1019,9 @@ sub format_dx_spot my ($slot1, $slot2) = ('', ''); my $clth = 30 + $self->{width} - 80; # allow comment to grow according the screen width - my $comment = substr (($_[3] || ''), 0, $clth); - $comment =~ s/\t/ /g; + my $c = $_[3]; + $c =~ s/\t/ /g; + my $comment = substr (($c || ''), 0, $clth); $comment .= ' ' x ($clth - (length($comment))); if (!$slot1 && $self->{user}->wantgrid) { @@ -1049,7 +1061,21 @@ sub format_dx_spot } } - return sprintf "DX de %-8.8s%10.1f %-12.12s %-s $t$slot2", "$_[4]:", $_[0], $_[1], $comment; + my $o = sprintf("%-9s", $_[4] . ':'); + my $qrg = sprintf "%8.1f", $_[0]; + if (length $qrg >= 9) { + while (length($o)+length($qrg) > 17 && $o =~ / $/) { + chop $o; + } + } + my $spot = sprintf "%-12s", $_[1]; + my $front = "DX de $o $qrg $spot"; + while (length($front) > 38 && $front =~ / $/) { + chop $front; + } + + + return sprintf "$front %-s $t$slot2", $comment; } @@ -1313,7 +1339,6 @@ sub send_motd $self->send_file($motd) if -e $motd; } - # Punt off a long running command into a separate process # # This is called from commands to run some potentially long running @@ -1406,7 +1431,7 @@ sub spawn_cmd sub user_count { - return ($users, $maxusers); + return ($users, $maxusers); } 1;