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
# 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
my $ref = Route::User::get($call);
my $self = shift;
my $cmdline = shift;
my @ans;
+ my @bad;
# save this for them's that need it
my $rawline = $cmdline;
} elsif ($cmdline =~ m|^/+\w+|) {
$cmdline =~ s|^/||;
my $sendit = $cmdline =~ s|^/+||;
- my @in = $self->run_cmd($cmdline);
- $self->send_ans(@in);
- if ($sendit && $self->{talklist} && @{$self->{talklist}}) {
- foreach my $l (@in) {
- my @bad;
- if (@bad = BadWords::check($l)) {
- $self->badcount(($self->badcount||0) + @bad);
- LogDbg('DXCommand', "$self->{call} swore: $l 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 {
+ my @in = $self->run_cmd($cmdline);
+ $self->send_ans(@in);
+ if ($sendit && $self->{talklist} && @{$self->{talklist}}) {
+ foreach my $l (@in) {
for (@{$self->{talklist}}) {
if ($self->{state} eq 'talk') {
$self->send_talks($_, $l);
$self->send($self->{state} eq 'talk' ? $self->talk_prompt : $self->chat_prompt);
} elsif ($self->{talklist} && @{$self->{talklist}}) {
# send what has been said to whoever is in this person's talk list
- my @bad;
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') {
}
$self->send_ans(@ans);
} else {
- $self->send_ans(run_cmd($self, $cmdline));
+# 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
- 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;
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__