[ Avaa Bypassed ]




Upload:

Command:

www-data@3.144.12.160: ~ $
#!/usr/bin/perl
# userpermissions_form.cgi
# Display a the list of users and their permissions
# Author: Mattias Gaertner
#
# Abstract:
#   - Allows editing the user permissions for a directory with an 
#     .ftpaccess file.
#   - It has a select field to easily add a user to the .ftpaccess file.
#   - Shows a list of users with their permissions.
#   - Provides minimum allowed commands (at the moment hardcoded in
#     $MiniumCommands).
#     These commands will applied to any new and changed permissions.
#   - Shows names instead of the hard to remember FTP abbreviations
#     (e.g. PBSZ).
#   - Commands can be combined. For example: RNFR and RNTO are shown 
#     as only one permission.
#   - adds automatically a DenyAll All limit, so the default is to allow
#     nothing.
#   
# ToDos:
#   - multi language support 
#   - a page to config the minimum commands
#   - a page to config the tuples (combined commands)
#   - Probably some functions already exists in webmin and can be replaced

require './proftpd-lib.pl';

&ReadParse();

# read .ftpaccess file
$file = $in{'file'};
$title = &text('ftpindex_header', "<tt>$in{'file'}</tt>");
$return = "ftpaccess_index.cgi";
$rmsg = $text{'ftpindex_return'};

&ui_print_header($title, "Edit User Permissions", "",
	undef, undef, undef, undef, &restart_button());

#########################################
# Navigation parameters
foreach $h ('virt', 'idx', 'file', 'limit', 'anon', 'global') {
    if (defined($in{$h})) {
	$NavigationData.="<input type=hidden name=$h value='$in{$h}'>\n";
	push(@args, "$h=$in{$h}");
    }
}
$args = join('&', @args);


# These are the FTP Commands, that any user have
$MinimumCommands="CWD XCWD CDUP XCUP PORT PASS PASV EPRT EPSV"
  ." PWD XPWD SIZE HELP NOOP AUTH ABORT USER LIST TYPE PROT QUIT PBSZ MDTM MODE";

$Commands{"CWD"}="Change working directory";
$Commands{"XCWD"}=""; 
$Commands{"CDUP"}="";
$Commands{"XCUP"}="";
$Commands{"PORT"}="";
$Commands{"PASV"}="enter passive mode";
$Commands{"EPRT"}="";
$Commands{"EPSV"}="";
$Commands{"RNFR"}="Rename From";
$Commands{"RNTO"}="Rename To";
$Commands{"DELE"}="Delete File";
$Commands{"RMD"}="Remove Directory";
$Commands{"XRMD"}="X Remove Directory";
$Commands{"MKD"}="Create Directory";
$Commands{"XMKD"}="X Create Directory";
$Commands{"MODE"}="";
$Commands{"PWD"}="";
$Commands{"XPWD"}="";
$Commands{"SIZE"}="";
$Commands{"SITE_CHMOD"}="Change Unix File Permissions";
$Commands{"STAT"}="Return Server Status";
$Commands{"SYST"}="Prints System Info";
$Commands{"HELP"}="";
$Commands{"NOOP"}="";
$Commands{"AUTH"}="";
$Commands{"PBSZ"}="";
$Commands{"PROT"}="";
$Commands{"TYPE"}="Set Transfer Type";
$Commands{"MODE"}="Set Transfer Mode";
$Commands{"MDTM"}="List Modification Time";
$Commands{"RETR"}="Retrieve (Read)";
$Commands{"STOR"}="Store (Write)";
$Commands{"STOU"}="Store Unique";
$Commands{"APPE"}="Append";
$Commands{"REST"}="Restart Write";
$Commands{"ABOR"}="Abort";
$Commands{"USER"}="";
$Commands{"PASS"}="";
$Commands{"LIST"}="List remote files";
$Commands{"QUIT"}="";
$Commands{"TupleRMD"} = "Remove Directory";
$Commands{"TupleMKD"} = "Make Directory";
$Commands{"TupleRN"} = "Rename";
$Commands{"TuplePWD"} = "Print Working Directory";

# Not implemented by proftpd:
#$Commands{"STRU"}="Specify File Structure";

# Here you can group commands
$CommandTuples{"TupleRMD"} = "RMD XRMD";
$CommandTuples{"TupleMKD"} = "MKD XMKD";
$CommandTuples{"TupleRN"} = "RNFR RNTO";
$CommandTuples{"TuplePWD"} = "PWD XPWD";

# Create CommandToTuple array
foreach $TupleName(sort keys %CommandTuples){
    foreach $Command(split (" ",$CommandTuples{$TupleName})){
	next unless ($Command);
	$CommandToTuple{$Command}=$TupleName;
    } 
}


#########################################
# Get user list and read old permissions
&GetUsers();
&GetFTPAccessUserPerms($file);

#########################################
# Parse Input and update .ftpaccess file

foreach $ParamName(keys %in){
    #print "Name=\"$ParamName\" Value=\"".$in{$ParamName}."\"<br>\n";
    if($ParamName eq "AddUser"){
	$Username=$in{$ParamName};
	if($Username =~ /^[a-zA-Z0-9_]+$/){
	    &AddUser($Username,$file);
	}
    }
    if($ParamName eq "DeleteUser"){
	$Username=$in{$ParamName};
	if($Username =~ /^[a-zA-Z0-9_]+$/){
	    if($in{"Confirm Delete User"} eq "on"){
		&DeleteUser($Username,$file);
		#print "New used usernames: $UsedUsernames<br>\n";
	    } else {
		print "<H2>To really delete a user, please check the confim checkbox.</H2>\n";
	    }
	}
    }
    if($ParamName eq "ChangePermissions"){
	$Username=$in{$ParamName};
	if($Username =~ /^[a-zA-Z0-9_]+$/){
	    &ChangePermissions($Username,$file);
	}
    }
}


#########################################
# select box and button for add user
print "<form action=userpermissions_form.cgi method=get>\n";
print $NavigationData;
print "<H3>Add an User to the permission table</H3>\n";
print "<select name=\"AddUser\">\n";
foreach $Username (sort split(" ",$Usernames)){
    print "<option value=\"$Username\">$Username</option>\n";
}
print "</select>\n";
print "<input type=submit value=\"Add User\"><br>\n";
print "</form>\n";

#########################################
# Print Permissions

$MaxColumns=4;
foreach $Username(sort split (" ",$UsedUsernames)){
    #print "User: $Username  Allowed=\"".$UserAllowedCommands{$Username}."\" Denied=\"".$UserDeniedCommands{$Username}."\"\n";
    print "<form action=userpermissions_form.cgi method=get>\n";
    print $NavigationData;
    print "<input type=hidden name=\"ChangePermissions\" value=\"".$Username."\">\n";
    print "<HR WIDTH=\"100%\">\n";
    print "<H2>User: $Username</H2>\n";
    print "<table border=1>\n";
    $Column=0;
    $Row=0;
    foreach $Command(sort keys %Commands){
	if($MinimumCommands =~ /$Command/i){
	    # skip minimum permissions, that all users are allowed to
	    next;
	}
	if($CommandToTuple{$Command}){
	    # skip commands that belong to a tuple
	    next;
	}
	$FTPCommands=$Command;
	if($CommandTuples{$FTPCommands}){
	    $FTPCommands = $CommandTuples{$FTPCommands};
	}


	if($Column == 0){
	    if($Row==0){
		print "  <tr>\n";
		for ($i=0; $i<$MaxColumns; $i++){
		    print "    <td>Command</td><td>Allow/Deny/Default</td>\n";
		}
		print "  </tr>\n";
	    }
	    print "  <tr>\n";
	}
	$CommandDesc=$Commands{$Command};
	if(!$CommandDesc){
	    $CommandDesc = $Command;
	}
	print "    <td>$CommandDesc</td><td>\n";
	if(&CommandContains($UserAllowedCommands{$Username},$FTPCommands)){
	    $AllowChecked=" checked";
	} else {
	    $AllowChecked="";
	}
	if(&CommandContains($UserDeniedCommands{$Username},$FTPCommands)){
	    $DenyChecked=" checked";
	} else {
	    $DenyChecked="";
	}
	if($AllowChecked || $DenyChecked){
	    $DefaultChecked = "";
	} else {
	    $DefaultChecked = " checked";
	}
	print "      <input type=\"radio\" name=\"".$Command."\" value=\"allow\"".$AllowChecked.">\n";
	print "      <input type=\"radio\" name=\"".$Command."\" value=\"deny\"".$DenyChecked.">\n";
	print "      <input type=\"radio\" name=\"".$Command."\" value=\"default\"".$DefaultChecked.">\n";
	print "    </td>";
	$Column++;
	if($Column == $MaxColumns){
	    print "  </tr>\n";
	    $Column=0;
	    $Row++;
	}
    }
    if($Column > 0){
	print "  </tr>\n";
    }
    print "</table>\n";
    print "<input type=submit value=\"Change Permissions\">\n";
    print "</form><br>\n";

    print "<form action=userpermissions_form.cgi method=get>\n";
    print $NavigationData;
    print "<input type=hidden name=\"DeleteUser\" value=\"".$Username."\">\n";
    print "<input type=submit value=\"Delete User Permissions\">\n";
    print "<input type=checkbox name=\"Confirm Delete User\">I'm sure<br>\n";
    print "</form>\n";
}


#########################################
# print textarea

print "<HR WIDTH=100%>\n";
print &text('manual_header', "<tt>$file</tt>"),"<p>\n";

print "<form action=manual_save.cgi method=post enctype=multipart/form-data>\n";
print $NavigationData;

print "<br><textarea rows=15 cols=80 name=directives>\n";
$lref = &read_file_lines($file);
if (!defined($start)) {
	$start = 0;
	$end = @$lref - 1;
	}
for($i=$start; $i<=$end; $i++) {
	print &html_escape($lref->[$i]),"\n";
	}
print "</textarea><br><input type=submit value=\"$text{'save'}\"></form>\n";

#########################################
# print footer

&ui_print_footer("$return?$args", $rmsg);

exit;

#########################################################

sub GetUsers(){
    my $UserCount=0;
    setpwent();
    while(my @uinfo = getpwent()) {
	if ($uinfo[2] > 100) {
		$UserCount++;
                $Users[$UserCount]=$uinfo[0];
		$Usernames.=" ".$uinfo[0];
	}
    }
    endpwent();
}

sub GetFTPAccessUserPerms(){
    # Fills global variables:
    # $UsedUsernames, %UserAllowedCommands, %UserDeniedCommands

    my ($FTPAccessFile) = @_;

    ##################################################
    # Read .ftpaccess file
    my $Commands = "";

    open FTPACCESS, "$FTPAccessFile" or &error("Can't open $FTPAccessFile: $!");
    while (my $line=<FTPACCESS>){
        chomp $line;
        #print $line."\n";
        if($line =~ /<Limit (.*)>/i){
            $Commands = $1;
            #print "Limit $Commands\n";
        }
        if($line =~ /<\/Limit(.*)>/i){
            $Commands = "";
            #print "End Limit $Commands\n";
        }
        if($Commands){
            #print "$line\n";
            if($line =~ /AllowUser (.+)/i){
                my $AllowedUsernames = $1;
                #print "AllowUser $AllowedUsernames\n";
                foreach $AllowedUsername (split (" ",$AllowedUsernames)){
                    next unless ($AllowedUsername);
                    $UserAllowedCommands{$AllowedUsername}.=" ".$Commands;
                    #print "AllowUser $AllowedUsername\n";
                }
            }
            if($line =~ /DenyUser (.+)/i){
                my $DeniedUsernames = $1;
                foreach $DeniedUsername (split (" ",$DeniedUsernames)){
                    next unless ($DeniedUsername);
                    $UserDeniedCommands{$DeniedUsername}.=" ".$Commands;
                }
            }
        }
    }
    close FTPACCESS;

    ##################################################
    # collect all mentioned users in table
    $UsedUsernames="";
    foreach $Username(keys %UserAllowedCommands){
        #print "Adding $Username\n";
	$UserAllowedCommands{$Username}=
	    &UnifyAndExpandCommands($UserAllowedCommands{$Username}." ".$Commands);
        if($UsedUsernames !~ /\b$Username\b/){
            $UsedUsernames.=$Username." ";
        }
    }
    foreach $Username(keys %UserDeniedCommands){
	$UserDeniedCommands{$Username}=
	    &UnifyAndExpandCommands($UserDeniedCommands{$Username}." ".$Commands);
        if($UsedUsernames !~ /\b$Username\b/){
            $UsedUsernames.=$Username." ";
        }
    }
}

sub UnifyAndExpandCommands(){
    (my $Commands) = @_;
    my $NewCommands = "";
    foreach $Command(split(" ",$Commands)){
	next unless($Command);
	if($CommandTuples{$Command}){
	    $NewCommands.=" ".$CommandTuples{$Command};
	} else {
	    $NewCommands.=" ".$Command;
	}
    }
    return &UnifyCommands($NewCommands);
}

sub UnifyCommands(){
    (my $Commands) = @_;
    my $NewCommands = "";
    foreach $Command(split(" ",$Commands)){
	next unless($Command);
	next if($NewCommands =~ /\b$Command\b/i);
	if($NewCommands){
	    $NewCommands.=" ";
	}
	$NewCommands.=$Command;
    }
    return $NewCommands;
}

sub AddUser(){
    (my $Username, $FTPAccessFile) = @_;

    if($Usernames =~ /\b$Usernames\b/){
	print "<H2>Username $Username does not exist.</H2>\n";
	return;
    }

    if ($UserAllowedCommands{$Username} || $UserDeniedCommands{$Username}){
	# user already exists
	print "<H2>Username $Username already exists.</H2>\n";
	return;
    }
    $UserAllowedCommands{$Username}=$MinimumCommands;
    $UserDeniedCommands{$Username}="";
    if($UsedUsernames !~ /\b$Username\b/){
	$UsedUsernames.=$Username." ";
    }

    &WritePermissions($FTPAccessFile);
}

sub DeleteUser(){
    (my $Username, $FTPAccessFile) = @_;

    if($UsedUsernames =~ /\b$Usernames\b/){
	print "<H2>Username $Username does not exist in table.</H2>\n";
	return;
    }

    if ((!$UserAllowedCommands{$Username}) && (!$UserDeniedCommands{$Username})){
	# user already deleted
	print "<H2>Username $Username is already not in table.</H2>\n";
	return;
    }
    $UserAllowedCommands{$Username}="";
    $UserDeniedCommands{$Username}="";
    $UsedUsernames =~ s/\b$Username\b *//;

    &WritePermissions($FTPAccessFile);
}

sub ChangePermissions(){
    (my $Username, $FTPAccessFile) = @_;

    if($UsedUsernames =~ /\b$Usernames\b/){
	print "<H2>Username $Username does not exist in table.</H2>\n";
	return;
    }

    foreach $Command(keys %Commands){
	#print "$Command value=".$in{$Command}."<br>\n";

	if($CommandToTuple{$Command}){
	    # skip commands in tuples
	    next;
	}

	my $FTPCommands=$Command;
	if($CommandTuples{$FTPCommands}){
	    $FTPCommands = $CommandTuples{$FTPCommands};
	}

	if ($in{$Command} eq "allow"){
	    $UserAllowedCommands{$Username}.=" ".$FTPCommands;
	    #print "Allow $Username $Command<br>\n";
	} else {
	    $UserAllowedCommands{$Username} =
		&RemoveCommands($UserAllowedCommands{$Username},$FTPCommands);
	}
	if ($in{$Command} eq "deny"){
	    $UserDeniedCommands{$Username}.=" ".$FTPCommands;
	    #print "Deny $Username $Command<br>\n";
	} else {
	    $UserDeniedCommands{$Username} =
		&RemoveCommands($UserDeniedCommands{$Username},$FTPCommands);
	}
    }
    $UserAllowedCommands{$Username}=
	&UnifyCommands($MinimumCommands." ".$UserAllowedCommands{$Username});
    $UserDeniedCommands{$Username}=
	&UnifyCommands($UserDeniedCommands{$Username});

    &WritePermissions($FTPAccessFile);
}

sub WritePermissions(){
    # Read .ftpaccess file, remove all user command permissions
    # and add new set of user permissions
    (my $FTPAccessFile) = @_;
    my $NewConfig = "";
    my $OldCommands = "";
    my $Username;

    # Lock .ftpaccess file
    &lock_file($FTPAccessFile);
    &lock_file($FTPAccessFile);


    # Read old .ftpaccess file
    open FTPACCESS, "$FTPAccessFile" or die "Can't read $FTPAccessFile: $!";
    $DenyAllBlockFound = 0;
    while(my $line = <FTPACCESS>){
	my $ShortLine = $line;
	chomp $ShortLine;
        #print $ShortLine."\n";
        if($ShortLine =~ /<Limit (.*)>/i){
	    # start of Limit block
            $OldCommands = $1;
            #print "Limit $OldCommands\n";
	    $LimitBlock = $line;
	    $ImportantLimitLineFound = 0;
	    $DenyAllFound = 0;
        } elsif($ShortLine =~ /<\/Limit(.*)>/i){
	    # end of Limit block
            #print "End Limit $OldCommands\n";
	    $LimitBlock .= $line;
	    if($ImportantLimitLineFound){
		$NewConfig .= $LimitBlock;
	    }
	    if(($OldCommands =~ /\bALL\b/i) && ($DenyAllFound)){
		# this was a DenyAll for All commands block
		$DenyAllBlockFound = 1;
	    }
            $OldCommands = "";
        } elsif($OldCommands){
            #print "$ShortLine\n";
            if($ShortLine =~ /AllowUser (.*)/i){
		# AllowUser line -> will be replaced, not important
            } elsif($ShortLine =~ /DenyUser (.*)/i){
		# DenyUser line -> will be replaced, not important
            } elsif($ShortLine =~ /^ +$/){
		# empty line -> not important, but keep it for readability
		$LimitBlock .= $line;
	    } else {
		# other limit directive -> important
		$LimitBlock .= $line;
		$ImportantLimitLineFound = 1;
		if($ShortLine =~ /\bDenyAll\b/i){
		    $DenyAllFound = 1;
		}
	    }
        } else {
	    # other directives -> keep
	    $NewConfig .= $line;
	}
    }
    close FTPACCESS;

    # Append new directives

    # Append DenyAll block if not already there
    if(!$DenyAllBlockFound){
	$NewConfig.="<Limit All>\n";
	$NewConfig.="  DenyAll\n";
	$NewConfig.="</Limit>\n";
    }

    # Append Limit blocks for users
    foreach $Username (sort split(" ",$Usernames)){
	my $CurAllow = $UserAllowedCommands{$Username};
	if ($CurAllow){
	    $NewConfig.="<Limit ".$CurAllow.">\n";
	    $NewConfig.="  AllowUser ".$Username."\n";
	    $NewConfig.="</Limit>\n";
	}
	my $CurDeny = $UserDeniedCommands{$Username};
	if ($CurDeny){
	    $NewConfig.="<Limit ".$CurDeny.">\n";
	    $NewConfig.="  DenyUser ".$Username."\n";
	    $NewConfig.="</Limit>\n";
	}
    }
    #print "<br>\n".$NewConfig."<br>\n";

    # Write new .ftpaccess file
    open FTPACCESS, "> $FTPAccessFile" or die "Can't append to $FTPAccessFile: $!";
    print FTPACCESS $NewConfig;
    close FTPACCESS;

    # Unlock .ftpaccess file
    &unlock_file($FTPAccessFile);

    $logtype = 'ftpaccess'; 
    $logname = $in{'file'};
    &webmin_log($logtype, "user permissions", $logname, \%in);
}

sub CommandContains(){
    (my $Commands, my $SubSet) = @_;
    foreach my $Command(split(" ",$SubSet)){
	next unless($Command);
	if($Commands =~ /\b$Command\b/i){
	    return 1;
	}
    }
    return 0;
}

sub RemoveCommands(){
    (my $Commands, my $SubSet) = @_;
    foreach my $Command(split(" ",$SubSet)){
	next unless($Command);
	$Commands =~ s/\b$Command\b *//gi;
    }
    return $Commands;
}

# end.

Filemanager

Name Type Size Permission Actions
images Folder 0755
lang Folder 0755
CHANGELOG File 484 B 0644
allmanual_form.cgi File 1.07 KB 0755
allmanual_save.cgi File 652 B 0755
anon_index.cgi File 2.64 KB 0755
apply.cgi File 349 B 0755
backup_config.pl File 797 B 0755
config File 179 B 0644
config-AlmaLinux-7.0-ALL File 292 B 0644
config-Amazon-Linux-2-ALL File 258 B 0644
config-CentOS-Linux-7.0-ALL File 292 B 0644
config-CentOS-Stream-Linux-8.0-ALL File 292 B 0644
config-CloudLinux-8.0-ALL File 292 B 0644
config-Oracle-Linux-8.0-ALL File 292 B 0644
config-Redhat-Enterprise-Linux-7.0-ALL File 258 B 0644
config-Rocky-Linux-7.0-ALL File 292 B 0644
config-Scientific-Linux-7.0-ALL File 258 B 0644
config-Ubuntu-Linux File 231 B 0644
config-cobalt-linux File 157 B 0644
config-coherent-linux File 157 B 0644
config-debian-linux File 227 B 0644
config-debian-linux-10.0-ALL File 231 B 0644
config-debian-linux-4.0-9.0 File 235 B 0644
config-freebsd File 173 B 0644
config-freebsd-8-ALL File 269 B 0644
config-gentoo-linux File 165 B 0644
config-mandrake-linux File 219 B 0644
config-msc-linux File 157 B 0644
config-open-linux File 157 B 0644
config-openSUSE-Linux-15.0-ALL File 223 B 0644
config-redhat-linux File 222 B 0644
config-redhat-linux-10.0-23.0 File 262 B 0644
config-redhat-linux-24.0-ALL File 308 B 0644
config-slackware-linux File 157 B 0644
config-sol-linux File 195 B 0644
config-suse-linux File 227 B 0644
config-syno-linux File 179 B 0644
config-trustix-linux File 227 B 0644
config-turbo-linux File 237 B 0644
config-united-linux File 227 B 0644
config.info File 803 B 0644
config.info.ca File 970 B 0644
config.info.cs File 720 B 0644
config.info.de File 933 B 0644
config.info.es File 241 B 0644
config.info.fa File 792 B 0644
config.info.fr File 1.02 KB 0644
config.info.hu File 0 B 0644
config.info.ja File 789 B 0644
config.info.ko File 686 B 0644
config.info.nl File 661 B 0644
config.info.no File 626 B 0644
config.info.pl File 696 B 0644
config.info.pt_BR File 769 B 0644
config.info.ru File 349 B 0644
config.info.uk File 376 B 0644
config.info.zh_TW File 410 B 0644
create_dir.cgi File 1.08 KB 0755
create_ftpaccess.cgi File 784 B 0755
create_limit.cgi File 1.16 KB 0755
create_virt.cgi File 1.01 KB 0755
delete_ftpaccess.cgi File 408 B 0755
dir_index.cgi File 2.67 KB 0755
edit_anon.cgi File 1.13 KB 0755
edit_aserv.cgi File 2.03 KB 0755
edit_dir.cgi File 2.07 KB 0755
edit_dserv.cgi File 2.11 KB 0755
edit_ftpaccess.cgi File 1.07 KB 0755
edit_ftpusers.cgi File 589 B 0755
edit_global.cgi File 1011 B 0755
edit_limit.cgi File 3.77 KB 0755
edit_lserv.cgi File 4.19 KB 0755
edit_net.cgi File 777 B 0755
edit_virt.cgi File 1020 B 0755
edit_vserv.cgi File 1.37 KB 0755
feedback_files.pl File 126 B 0755
find_ftpaccess.cgi File 1.01 KB 0755
ftpaccess.cgi File 1.37 KB 0755
ftpaccess_index.cgi File 1.81 KB 0755
index.cgi File 8.11 KB 0755
install_check.pl File 429 B 0755
limit_index.cgi File 2.9 KB 0755
log_parser.pl File 3.14 KB 0755
manual_form.cgi File 3.91 KB 0755
manual_save.cgi File 3.14 KB 0755
mod_auth.pl File 2.68 KB 0755
mod_core.pl File 41.29 KB 0755
mod_ldap.pl File 9.01 KB 0755
mod_log.pl File 3.14 KB 0755
mod_ls.pl File 4.4 KB 0755
mod_pam.pl File 676 B 0755
mod_readme.pl File 426 B 0755
mod_site.pl File 443 B 0755
mod_unixpw.pl File 1.54 KB 0755
module.info File 204 B 0644
module.info.af File 0 B 0644
module.info.af.auto File 151 B 0644
module.info.ar File 0 B 0644
module.info.ar.auto File 193 B 0644
module.info.be File 0 B 0644
module.info.be.auto File 225 B 0644
module.info.bg File 0 B 0644
module.info.bg.auto File 230 B 0644
module.info.ca File 141 B 0644
module.info.ca.auto File 16 B 0644
module.info.cs File 23 B 0644
module.info.cs.auto File 139 B 0644
module.info.da File 0 B 0644
module.info.da.auto File 162 B 0644
module.info.de File 151 B 0644
module.info.de.auto File 16 B 0644
module.info.el File 0 B 0644
module.info.el.auto File 265 B 0644
module.info.es File 25 B 0644
module.info.es.auto File 139 B 0644
module.info.eu File 0 B 0644
module.info.eu.auto File 159 B 0644
module.info.fa File 0 B 0644
module.info.fa.auto File 220 B 0644
module.info.fi File 0 B 0644
module.info.fi.auto File 150 B 0644
module.info.fr File 24 B 0644
module.info.fr.auto File 143 B 0644
module.info.he File 0 B 0644
module.info.he.auto File 197 B 0644
module.info.hr File 0 B 0644
module.info.hr.auto File 162 B 0644
module.info.hu File 30 B 0644
module.info.hu.auto File 136 B 0644
module.info.it File 0 B 0644
module.info.it.auto File 159 B 0644
module.info.ja File 26 B 0644
module.info.ja.auto File 175 B 0644
module.info.ko File 23 B 0644
module.info.ko.auto File 147 B 0644
module.info.lt File 0 B 0644
module.info.lt.auto File 151 B 0644
module.info.lv File 0 B 0644
module.info.lv.auto File 161 B 0644
module.info.ms File 148 B 0644
module.info.ms.auto File 16 B 0644
module.info.mt File 0 B 0644
module.info.mt.auto File 168 B 0644
module.info.nl File 23 B 0644
module.info.nl.auto File 128 B 0644
module.info.no File 22 B 0644
module.info.no.auto File 134 B 0644
module.info.pl File 29 B 0644
module.info.pl.auto File 137 B 0644
module.info.pt File 0 B 0644
module.info.pt.auto File 155 B 0644
module.info.pt_BR File 28 B 0644
module.info.pt_BR.auto File 136 B 0644
module.info.ro File 0 B 0644
module.info.ro.auto File 157 B 0644
module.info.ru File 28 B 0644
module.info.ru.auto File 194 B 0644
module.info.sk File 0 B 0644
module.info.sk.auto File 162 B 0644
module.info.sl File 0 B 0644
module.info.sl.auto File 152 B 0644
module.info.sv File 0 B 0644
module.info.sv.auto File 152 B 0644
module.info.th File 0 B 0644
module.info.th.auto File 309 B 0644
module.info.tr File 0 B 0644
module.info.tr.auto File 164 B 0644
module.info.uk File 0 B 0644
module.info.uk.auto File 224 B 0644
module.info.ur File 0 B 0644
module.info.ur.auto File 237 B 0644
module.info.vi File 0 B 0644
module.info.vi.auto File 189 B 0644
module.info.zh File 0 B 0644
module.info.zh.auto File 146 B 0644
module.info.zh_TW File 27 B 0644
module.info.zh_TW.auto File 127 B 0644
proftpd-lib.pl File 23.42 KB 0755
save_anon.cgi File 594 B 0755
save_aserv.cgi File 1.7 KB 0755
save_dir.cgi File 874 B 0755
save_dserv.cgi File 1.37 KB 0755
save_ftpaccess.cgi File 486 B 0755
save_ftpusers.cgi File 342 B 0755
save_global.cgi File 529 B 0755
save_limit.cgi File 1.02 KB 0755
save_lserv.cgi File 1.79 KB 0755
save_virt.cgi File 496 B 0755
save_vserv.cgi File 1.55 KB 0755
start.cgi File 223 B 0755
stop.cgi File 207 B 0755
userpermissions_form.cgi File 16.7 KB 0755
virt_index.cgi File 2.62 KB 0755