home *** CD-ROM | disk | FTP | other *** search
/ Inter.Net 55-2 / Inter.Net 55-2.iso / Mandrake / mdkinst / usr / bin / perl-install / ftp.pm < prev    next >
Encoding:
Perl POD Document  |  2000-01-12  |  1.4 KB  |  70 lines

  1. package ftp;
  2.  
  3. use Net::FTP;
  4.  
  5. use install_any;
  6. use network;
  7. use log;
  8.  
  9. my %hosts;
  10.  
  11. 1;
  12.  
  13. sub fromEnv() {
  14.     # using URLPREFIX to find out information if kickstart
  15.     ($ENV{LOGIN}, $ENV{PASSWORD}, $ENV{HOST}, $ENV{PREFIX}) =
  16.       $ENV{URLPREFIX} =~ m|
  17.        ://
  18.        (?: ([^:]*)              # login
  19.            (?: :([^@]*))?       # password
  20.        @)?
  21.        ([^/]*)                    # host
  22.        /?(.*)            # prefix
  23.       |x unless $ENV{HOST};
  24.     
  25.     @ENV{qw(HOST PREFIX LOGIN PASSWORD)};
  26. }
  27.  
  28. sub new {
  29.     my ($host, $prefix, $login, $password) = @_;
  30.     my @l = do { if ($hosts{"$host$prefix"}) {
  31.     @{$hosts{"$host$prefix"}};
  32.     } else {
  33.     my %options = (Passive => 1);
  34.     $options{Firewall} = $ENV{PROXY} if $ENV{PROXY};
  35.     $options{Port} = $ENV{PROXYPORT} if $ENV{PROXYPORT};
  36.     unless ($login) {
  37.         $login = 'anonymous';
  38.         $password = '-drakx@';
  39.     }
  40.  
  41.     my $ftp = Net::FTP->new(network::resolv($host), %options) or die '';
  42.     $ftp->login($login, $password) or die '';
  43.     $ftp->binary;
  44.     $ftp->cwd($prefix);
  45.  
  46.     my @l = ($ftp, \ (my $retr = undef));
  47.     $hosts{"$host$prefix"} = \@l;
  48.     @l;
  49.     }};
  50.     wantarray ? @l : $l[0];
  51. }
  52.  
  53. sub getFile($) {
  54.     my $f = shift;
  55.     my ($ftp, $retr) = new(@_ ? @_ : fromEnv);
  56.     $$retr->close if $$retr;
  57.     $$retr = $ftp->retr(install_any::relGetFile($f));
  58. }
  59.  
  60. sub rewindGetFile() {
  61.     
  62.     foreach (values %hosts) {
  63.     my ($ftp) = @{$_ || []};
  64.     $ftp->close() if $ftp;
  65.     }
  66.  
  67.     
  68.     %hosts = ();
  69. }
  70.