Перенос учётных записей с другого FTP-сервера

На этой странице размещен скрипт на Perl, который читает файл с учетными записями G6FTPD под именем users.ini, извлекает из него некоторую информацию (логин, пароль, директории и права) и записывает ее в файл с учетными записями для сервера FilleZilla "FileZilla Server.xml".

Код

#!C:\Perl\bin -w
use Digest::MD5 qw(md5_hex);

sub copyrights
 {
 my (@perm)=@_;
 my $rights="";
  if ($perm[0] eq "-")
   {$rights.= '<Option Name="FileRead">0</Option>'."\n"; }
  else 
   {$rights.= '<Option Name="FileRead">1</Option>'."\n"; }
  if ($perm[1] eq "-")
   {$rights.= '<Option Name="FileWrite">0</Option>'."\n"; }
  else
   {$rights.= '<Option Name="FileWrite">1</Option>'."\n"; }
  if ($perm[2] eq "-")
   {$rights.= '<Option Name="FileDelete">0</Option>'."\n"; }
  else
   {$rights.= '<Option Name="FileDelete">1</Option>'."\n"; }
  if ($perm[3] eq "-")
   {$rights.= '<Option Name="FileAppend">0</Option>'."\n"; }
  else
   {$rights.= '<Option Name="Fileappend">1</Option>'."\n"; }
  if ($perm[4] eq "-")
   {$rights.= '<Option Name="DirCreate">0</Option>'."\n"; }
  else
   {$rights.= '<Option Name="DirCreate">1</Option>'."\n"; }
  if ($perm[5] eq "-")
   {$rights.= '<Option Name="DirList">0</Option>'."\n"; }
  else
   {$rights.= '<Option Name="DirList">1</Option>'."\n"; }
  if ($perm[6] eq "-")
   {$rights.= '<Option Name="DirDelete">0</Option>'."\n"; }
  else
   {$rights.= '<Option Name="DirDelete">1</Option>'."\n"; }
  if ($perm[7] eq "-")
   {$rights.= '<Option Name="DirSubdirs">0</Option>'."\n"; }
  else
   {$rights.= '<Option Name="DirSubdirs">1</Option>'."\n"; }
  return $rights;
 }

open FICHIER,"< users.ini" or die "File can t be read !";

$motiflogin = 'Login=';
$motifpass = 'Pass=';
$motifdir='Dir';
$motifattr='Attr';

$debut='<FileZillaServer>

<Settings>
<Item name="Admin port" type="numeric">14147</Item>
</Settings>
<Groups/>
<Users>
';


$paramdivers = '<Option Name="Group"/>
<Option Name="Bypass server userlimit">0</Option>

<Option Name="User Limit">0</Option>
<Option Name="IP Limit">0</Option>
<Option Name="Enabled">1</Option>
<Option Name="Comments"/>
<Option Name="ForceSsl">0</Option>

<IpFilter>
<Disallowed/>
<Allowed/>
</IpFilter>
<Permissions>';


$userfin='</Permissions>
<SpeedLimits DlType="0" DlLimit="10" ServerDlLimitBypass="0" UlType="0"
 UlLimit="10" ServerUlLimitBypass="0">
<Download/>
<Upload/>

</SpeedLimits>
</User>';

$fin = '</Users>
</FileZillaServer>';

$i=0;
$fz=$debut;
while ($ligne = <FICHIER>){

 if ($ligne =~ /^$motiflogin[\.\w-]*/i) {
  @tab=split(/=/,$&);
  $fz.= "<User Name=\"".$tab[1]."\">\n";
  $i++;
  $h=1;
  }
 elsif ($ligne =~ /^$motifpass[\w-]*/i) {
  @tab=split(/=/,$&);
  $fz.= "<Option Name=\"Pass\">".md5_hex($tab[1])."</Option>\n"; 
  $fz.= $paramdivers."\n";
  }
 elsif ($ligne =~ /^$motifdir[\w\ \.\:=]*/i) {
  @tab=split(/=/,$&);
  $fz.= "<Permission Dir=\"".$tab[1]."\">\n"; 
  }
 elsif ($ligne =~ /^$motifattr[-\w=]*/i) {
  @tab=split(/=/,$&); 
  @perm=split(//,$tab[1]);
  $fz.= copyrights(@perm);
  $fz.= '<Option Name="IsHome">'.$h.'</Option>'."\n";
  $fz.= '<Option Name="AutoCreate">0</Option>'."\n".'</Permission>'."\n";
  $h=0;
  }
 elsif ($ligne =~ /^\n/i) {
  $fz.= $userfin."\n";
  }
}   
$fz.= $fin;
close FICHIER;
 
open WRITER,"> FileZilla Server.xml" or die "File can t be write !\n";
print WRITER $fz;
close WRITER;

print " ".$i.' account created';