40 lines
1.0 KiB
Perl
40 lines
1.0 KiB
Perl
|
#!/usr/bin/perl -w
|
||
|
use warnings;
|
||
|
use strict;
|
||
|
use POSIX qw(O_RDWR O_CREAT O_EXCL tmpnam);
|
||
|
use Sys::Hostname; # for 'hostname'
|
||
|
|
||
|
die "Simple anonymous FTP command line client\n Usage: $0 <server> <command>\n" unless scalar(@ARGV)>=2;
|
||
|
|
||
|
my ($ftp_server,@ftp_command)=@ARGV;
|
||
|
|
||
|
my $ftp_resultfile;
|
||
|
do {
|
||
|
$ftp_resultfile = tmpnam();
|
||
|
sysopen FTP_RESULT, $ftp_resultfile, O_RDWR|O_CREAT|O_EXCL;
|
||
|
} until (defined fileno(FTP_RESULT));
|
||
|
|
||
|
if (open (FTP, "|ftp -n > $ftp_resultfile 2>&1")) {
|
||
|
print "Client running, sending command\n";
|
||
|
|
||
|
print FTP "open $ftp_server\n";
|
||
|
my $email=getlogin.'@'.hostname;
|
||
|
print FTP "user anonymous $email\n";
|
||
|
print FTP "@ftp_command\n";
|
||
|
close FTP;
|
||
|
} else {
|
||
|
die "Failed to run client: $!\n";
|
||
|
}
|
||
|
|
||
|
print "waiting for response\n";
|
||
|
my @ftp_results = <FTP_RESULT>;
|
||
|
check_result(@ftp_results);
|
||
|
close FTP_RESULT;
|
||
|
unlink $ftp_resultfile;
|
||
|
print "Done\n";
|
||
|
|
||
|
sub check_result {
|
||
|
return unless @_;
|
||
|
print "Response:\n";
|
||
|
print "\t$_" foreach @_;
|
||
|
}
|