X-Git-Url: http://dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FDXCommandmode.pm;h=46d2b1d38bd4d450f0f95b0fbda2e7b37281f274;hb=8e14149148baba63ce5ae2b95aacda8ab6dd0d87;hp=f6d890b17c5919eb74254854fa7d77aea04b1c9f;hpb=61a666ccf108505f0cec2e5c682fde019fc3a051;p=spider.git diff --git a/perl/DXCommandmode.pm b/perl/DXCommandmode.pm index f6d890b1..46d2b1d3 100644 --- a/perl/DXCommandmode.pm +++ b/perl/DXCommandmode.pm @@ -49,7 +49,8 @@ use DXCIDR; use strict; use vars qw(%Cache %cmd_cache $errstr %aliases $scriptbase %nothereslug - $maxbadcount $msgpolltime $default_pagelth $cmdimportdir $users $maxusers); + $maxbadcount $msgpolltime $default_pagelth $cmdimportdir $users $maxusers +); %Cache = (); # cache of dynamically loaded routine's mod times %cmd_cache = (); # cache of short names @@ -74,14 +75,15 @@ sub new # routing, this must go out here to prevent race condx my $pkg = shift; my $call = shift; -# my @rout = $main::routeroot->add_user($call, Route::here(1)); - DXProt::_add_thingy($main::routeroot, [$call, 0, 0, 1, undef, undef, $self->hostname], ); + # my @rout = $main::routeroot->add_user($call, Route::here(1)); + my $ipaddr = alias_localhost($self->hostname); + DXProt::_add_thingy($main::routeroot, [$call, 0, 0, 1, undef, undef, $ipaddr], ); - # ALWAYS output the user + # ALWAYS output the user (except if the updates not enabled) my $ref = Route::User::get($call); if ($ref) { $main::me->route_pc16($main::mycall, undef, $main::routeroot, $ref); - $main::me->route_pc92a($main::mycall, undef, $main::routeroot, $ref) unless $DXProt::pc92_slug_changes; + $main::me->route_pc92a($main::mycall, undef, $main::routeroot, $ref) unless $DXProt::pc92_slug_changes || ! $DXProt::pc92_ad_enable; } return $self; @@ -348,7 +350,7 @@ sub normal my $sendit = $cmdline =~ s|^/+||; if (@bad = BadWords::check($cmdline)) { $self->badcount(($self->badcount||0) + @bad); - LogDbg('DXCommand', "$self->{call} swore: '$cmdline' with words: '" . join(',', @bad) . "'"); + LogDbg('DXCommand', "$self->{call} swore: '$cmdline' with badwords: '" . join(',', @bad) . "'"); } else { my @in = $self->run_cmd($cmdline); $self->send_ans(@in); @@ -369,7 +371,7 @@ sub normal # send what has been said to whoever is in this person's talk list if (@bad = BadWords::check($cmdline)) { $self->badcount(($self->badcount||0) + @bad); - LogDbg('DXCommand', "$self->{call} swore: '$cmdline' with words: '" . join(',', @bad) . "'"); + LogDbg('DXCommand', "$self->{call} swore: '$cmdline' with badwords: '" . join(',', @bad) . "'"); } else { for (@{$self->{talklist}}) { if ($self->{state} eq 'talk') { @@ -401,12 +403,12 @@ sub normal } $self->send_ans(@ans); } else { - if (@bad = BadWords::check($cmdline)) { - $self->badcount(($self->badcount||0) + @bad); - LogDbg('DXCommand', "$self->{call} swore: '$cmdline' with words: '" . join(',', @bad) . "'"); - } else { +# if (@bad = BadWords::check($cmdline)) { +# $self->badcount(($self->badcount||0) + @bad); +# LogDbg('DXCommand', "$self->{call} swore: '$cmdline' with badwords: '" . join(',', @bad) . "'"); +# } else { $self->send_ans(run_cmd($self, $cmdline)); - } +# } } # check for excessive swearing @@ -452,7 +454,8 @@ sub send_chats my $msgid = DXProt::nextchatmsgid(); $text = "#$msgid $text"; - $main::me->normal(DXProt::pc93($target, $self->{call}, undef, $text)); + my $ipaddr = alias_localhost($self->hostname || '127.0.0.1'); + $main::me->normal(DXProt::pc93($target, $self->{call}, undef, $text, undef, $ipaddr)); } sub special_prompt @@ -667,7 +670,7 @@ sub disconnect # issue a pc17 to everybody interested $main::me->route_pc17($main::mycall, undef, $main::routeroot, $uref); - $main::me->route_pc92d($main::mycall, undef, $main::routeroot, $uref) unless $DXProt::pc92_slug_changes; + $main::me->route_pc92d($main::mycall, undef, $main::routeroot, $uref) unless $DXProt::pc92_slug_changes || ! $DXProt::pc92_ad_enable; } else { confess "trying to disconnect a non existant user $call"; } @@ -1027,41 +1030,45 @@ sub format_dx_spot $c =~ s/\t/ /g; my $comment = substr (($c || ''), 0, $clth); $comment .= ' ' x ($clth - (length($comment))); - - if (!$slot1 && $self->{user}->wantgrid) { - my $ref = DXUser::get_current($_[1]); - if ($ref && $ref->qra) { - $slot1 = ' ' . substr($ref->qra, 0, 4); + + if ($self->{user}) { # to allow the standalone program 'showdx' to work + if (!$slot1 && $self->{user}->wantgrid) { + my $ref = DXUser::get_current($_[1]); + if ($ref && $ref->qra) { + $slot1 = ' ' . substr($ref->qra, 0, 4); + } } - } - if (!$slot1 && $self->{user}->wantusstate) { - $slot1 = " $_[12]" if $_[12]; - } - unless ($slot1) { - if ($self->{user}->wantdxitu) { - $slot1 = sprintf(" %2d", $_[8]) if defined $_[8]; - } elsif ($self->{user}->wantdxcq) { - $slot1 = sprintf(" %2d", $_[9]) if defined $_[9]; + if (!$slot1 && $self->{user}->wantusstate) { + $slot1 = " $_[12]" if $_[12]; } - } - $comment = substr($comment, 0, $clth-length($slot1)) . $slot1 if $slot1; + unless ($slot1) { + if ($self->{user}->wantdxitu) { + $slot1 = sprintf(" %2d", $_[8]) if defined $_[8]; + } + elsif ($self->{user}->wantdxcq) { + $slot1 = sprintf(" %2d", $_[9]) if defined $_[9]; + } + } + $comment = substr($comment, 0, $clth-length($slot1)) . $slot1 if $slot1; - if (!$slot2 && $self->{user}->wantgrid) { - my $origin = $_[4]; - $origin =~ s/-#$//; # sigh...... - my $ref = DXUser::get_current($origin); - if ($ref && $ref->qra) { - $slot2 = ' ' . substr($ref->qra, 0, 4); + if (!$slot2 && $self->{user}->wantgrid) { + my $origin = $_[4]; + $origin =~ s/-#$//; # sigh...... + my $ref = DXUser::get_current($origin); + if ($ref && $ref->qra) { + $slot2 = ' ' . substr($ref->qra, 0, 4); + } } - } - if (!$slot2 && $self->{user}->wantusstate) { - $slot2 = " $_[13]" if $_[13]; - } - unless ($slot2) { - if ($self->{user}->wantdxitu) { - $slot2 = sprintf(" %2d", $_[10]) if defined $_[10]; - } elsif ($self->{user}->wantdxcq) { - $slot2 = sprintf(" %2d", $_[11]) if defined $_[11]; + if (!$slot2 && $self->{user}->wantusstate) { + $slot2 = " $_[13]" if $_[13]; + } + unless ($slot2) { + if ($self->{user}->wantdxitu) { + $slot2 = sprintf(" %2d", $_[10]) if defined $_[10]; + } + elsif ($self->{user}->wantdxcq) { + $slot2 = sprintf(" %2d", $_[11]) if defined $_[11]; + } } } @@ -1372,7 +1379,7 @@ sub spawn_cmd no strict 'refs'; # just behave normally if something has set the "one-shot" _nospawn in the channel - if ($self->{_nospawn}) { + if ($self->{_nospawn} || $main::is_win == 1) { eval { @out = $cmdref->(@$args); }; if ($@) { DXDebug::dbgprintring(25); @@ -1438,5 +1445,20 @@ sub user_count return ($users, $maxusers); } +# alias localhost if required. This is designed to repress all localhost and other +# internal interfaces to a fixed (outside) IPv4 or IPV6 address +sub alias_localhost +{ + my $hostname = shift; + if ($hostname =~ /./) { + return $hostname unless $main::localhost_alias_ipv4; + return (grep $hostname eq $_, @main::localhost_names) ? $main::localhost_alias_ipv4 : $hostname; + } elsif ($hostname =~ /:/) { + return $hostname unless $main::localhost_alias_ipv6; + return (grep $hostname eq $_, @main::localhost_names) ? $main::localhost_alias_ipv6 : $hostname; + } + return $hostname; +} + 1; __END__