67 lines
1.1 KiB
C
67 lines
1.1 KiB
C
package ProFTPD::TestSuite::ProxiedFTP;
|
|
|
|
use strict;
|
|
use vars qw(@ISA);
|
|
|
|
use Carp;
|
|
use Net::FTP;
|
|
|
|
@ISA = qw(Net::FTP);
|
|
|
|
my $proxy_info = undef;
|
|
|
|
sub new {
|
|
my $class = shift;
|
|
my ($addr, $port, $proxy, $timeout) = @_;
|
|
$timeout = 5 unless defined($timeout);
|
|
my $debug = undef;
|
|
|
|
$proxy_info = $proxy;
|
|
|
|
if ($ENV{TEST_VERBOSE}) {
|
|
$debug = 10;
|
|
}
|
|
|
|
my $self = $class->SUPER::new($addr,
|
|
Port => $port,
|
|
Timeout => $timeout,
|
|
Debug => $debug,
|
|
);
|
|
|
|
unless ($self) {
|
|
croak($@);
|
|
}
|
|
|
|
return $self;
|
|
}
|
|
|
|
# Override response() from Net::Cmd to trigger sending the PROXY command
|
|
sub response {
|
|
my $self = shift;
|
|
|
|
if (defined($proxy_info)) {
|
|
if (ref($proxy_info)) {
|
|
my ($proto, $src_addr, $dst_addr, $src_port, $dst_port) = @$proxy_info;
|
|
$self->command("PROXY", $proto, $src_addr, $dst_addr, $src_port, $dst_port);
|
|
|
|
} else {
|
|
$self->rawdatasend($proxy_info);
|
|
}
|
|
|
|
$proxy_info = undef;
|
|
}
|
|
|
|
$self->SUPER::response();
|
|
}
|
|
|
|
sub login {
|
|
my $self = shift;
|
|
|
|
unless ($self->SUPER::login(@_)) {
|
|
croak("Failed to login: " . $self->code . " " . $self->message);
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
1;
|