my $name = $user->{name};
# log it
- my $host = $self->{conn}->{peerhost} || "unknown";
+ my $host = $self->{conn}->{peerhost};
+ $host ||= "AGW Port #$self->{conn}->{agwport}" if exists $self->{conn}->{agwport};
+ $host ||= "unknown";
Log('DXCommand', "$call connected from $host");
$self->{name} = $name ? $name : $call;
if ($cmd) {
# strip out // on command only
$cmd =~ s|//|/|g;
+ $cmd =~ s|^/||g; # no leading / either
+ $cmd =~ s|[^-?\w/]||g; # and no funny characters either
my ($path, $fcmd);
# first expand out the entry to a command
($path, $fcmd) = search($main::localcmd, $cmd, "pl");
- ($path, $fcmd) = search($main::cmd, $cmd, "pl") if !$path || !$fcmd;
+ ($path, $fcmd) = search($main::cmd, $cmd, "pl") unless $path && $fcmd;
if ($path && $cmd) {
dbg("path: $cmd cmd: $fcmd") if isdbg('command');
sub process
{
my $t = time;
- my @dxchan = DXChannel->get_all();
+ my @dxchan = DXChannel::get_all();
my $dxchan;
foreach $dxchan (@dxchan) {
my $pkg = shift; # ignored
my $s = shift; # the line to be rebroadcast
- foreach my $dxchan (DXChannel->get_all()) {
+ foreach my $dxchan (DXChannel::get_all()) {
next unless $dxchan->{sort} eq 'U'; # only interested in user channels
next if grep $dxchan == $_, @_;
$dxchan->send($s); # send it
# gimme all the users
sub get_all
{
- return grep {$_->{sort} eq 'U'} DXChannel->get_all();
+ return grep {$_->{sort} eq 'U'} DXChannel::get_all();
}
# run a script for this user
my @parts = split '/', $short_cmd;
my $dirfn;
my $curdir = $path;
- my $p;
- my $i;
- my @lparts;
- for ($i = 0; $i < @parts; $i++) {
- my $p = $parts[$i];
- opendir(D, $curdir) or confess "can't open $curdir $!";
- my @ls = readdir D;
- closedir D;
- my $l;
- foreach $l (sort @ls) {
- next if $l =~ /^\./;
- if ($i < $#parts) { # we are dealing with directories
- if ((-d "$curdir/$l") && $p eq substr($l, 0, length $p)) {
- dbg("got dir: $curdir/$l\n") if isdbg('command');
- $dirfn .= "$l/";
- $curdir .= "/$l";
- last;
- }
- } else { # we are dealing with commands
- @lparts = split /\./, $l;
- next if $lparts[$#lparts] ne $suffix; # only look for .$suffix files
- if ($p eq substr($l, 0, length $p)) {
- pop @lparts; # remove the suffix
- $l = join '.', @lparts;
- # chop $dirfn; # remove trailing /
- $dirfn = "" unless $dirfn;
- $cmd_cache{$short_cmd} = join(',', ($path, "$dirfn$l")); # cache it
- dbg("got path: $path cmd: $dirfn$l\n") if isdbg('command');
- return ($path, "$dirfn$l");
- }
- }
- }
- }
+ while (my $p = shift @parts) {
+ opendir(D, $curdir) or confess "can't open $curdir $!";
+ my @ls = readdir D;
+ closedir D;
+
+ # if this isn't the last part
+ if (@parts) {
+ my $found;
+ foreach my $l (sort @ls) {
+ next if $l =~ /^\./;
+ if ((-d "$curdir/$l") && $p eq substr($l, 0, length $p)) {
+ dbg("got dir: $curdir/$l\n") if isdbg('command');
+ $dirfn .= "$l/";
+ $curdir .= "/$l";
+ $found++;
+ last;
+ }
+ }
+ # only proceed if we find the directory asked for
+ return () unless $found;
+ } else {
+ foreach my $l (sort @ls) {
+ next if $l =~ /^\./;
+ next unless $l =~ /\.$suffix$/;
+ if ($p eq substr($l, 0, length $p)) {
+ $l =~ s/\.$suffix$//;
+ $dirfn = "" unless $dirfn;
+ $cmd_cache{$short_cmd} = join(',', ($path, "$dirfn$l")); # cache it
+ dbg("got path: $path cmd: $dirfn$l\n") if isdbg('command');
+ return ($path, "$dirfn$l");
+ }
+ }
+ }
+ }
+
return ();
}
return unless $self->{wwv};
if ($self->{wwvfilter}) {
- ($filter, $hops) = $self->{wwvfilter}->it(@_ );
+ ($filter, $hops) = $self->{wwvfilter}->it(@_[7..$#_] );
return unless $filter;
}
{
my $s = shift; # the line to be rebroadcast
- foreach my $dxchan (DXChannel->get_all) {
+ foreach my $dxchan (DXChannel::get_all) {
next unless $dxchan->{enhanced} && $dxchan->{senddbg};
$dxchan->send_later('L', $s);
}