Transfer user accounts from Another FTP Server

From FileZilla Wiki
Revision as of 18:11, 22 January 2013 by 81.64.159.115 (talk) (→‎Code)
Jump to navigationJump to search

This is a perl script that read G6FTPD user accounts file users.ini, extract some information (login, password, folder and rights) and write it in FilleZilla Server account file "FileZilla Server.xml".

Sorry I can't find how write code properly in this Wiki :s

Code

#!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> <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> <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.= $userfin."\n"; $fz.= $fin; close FICHIER;

open WRITER,"> FileZilla Server.xml" or die "File can't be written !\n";
print WRITER $fz;
close WRITER;

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

JeF

geek AT jfmcorp DOT org