--- /dev/null
+#!/bin/sh
+mkdir -p $HOME/backup/spool 2>/dev/null
+cd $HOME/spool
+rsync -aRH --delete --exclude "*/*@*.*" --delete-excluded * $HOME/backup/spool/
open $fph,">$fph" or die "$0: cannot write to $fph - $!\n";
print {$fph} $_;
close $fph;
- system "cp $FEXLIB/fup.pl $vhd/lib/fup.pl";
+ cpa("$FEXLIB/fup.pl","$vhd/lib");
foreach $i (qw'dop fex.pp fup.pl lf.pl reactivation.txt') {
# symlink "$FEXLIB/$i","$vhd/lib/$i";
symlink "../../lib/$i","$vhd/lib/$i";
$0 -M # list pending files with TO/FROM/FILE
$0 -M TO/FROM/FILE # resend notification email
$0 -m "reason" # enter maintenance mode (reason "exit" to leave)
-$0 -A alias:hostname # add new virtual server
-$0 -V virtualhost ... # operations on virtualhost (alias or hostname)
$0 -E # show usage examples
EOD
+# $0 -A alias:hostname # add new virtual server
+# $0 -V virtualhost ... # operations on virtualhost (alias or hostname)
if (-x "$FEXHOME/cgi-bin/fac") {
print "See also web admin interface $proto://$hostname$port/fac\n";
}
our ($SH,$windoof,$sigpipe,$useragent);
our ($FEXSERVER);
-our $version = 20150615;
+our $version = 20150729;
# server defaults
my $server = 'fex.rus.uni-stuttgart.de';
our ($fexhome,$idf,$tmpdir,$windoof,$useragent);
our ($xv,%autoview);
our $bs = 2**16; # blocksize for tcp-reading and writing file
-our $version = 20150615;
+our $version = 20150729;
our $CTYPE = 'ISO-8859-1';
our $fexsend = $ENV{FEXSEND} || 'fexsend';
our ($FEXID,$FEXXX,$HOME);
our (%alias);
our $chunksize = 0;
-our $version = 20150615;
+our $version = 20150729;
our $_0 = $0;
our $DEBUG;
my $fexcgi; # F*EX CGI URL
my @files; # files to send
my %AB = (); # server based address book
-my ($server,$port,$sid);
+my ($server,$port,$sid,$https);
my $proxy = '';
my $proxy_prefix = '';
my $features = '';
or: $0 -x \# [-C -k -D -K -S]
options: -v verbose mode
-d delete file on fex server
- -c compress file
+ -c compress file with gzip
-g encrypt file with gpg
-m limit limit throughput (kB/s)
-i tag use ID data [tag] from ID file
$port = 443 if $server =~ s{https://}{};
$port = $1 if $server =~ s/:(\d+)//;
-if (0 and $port == 443) {
- $opt_s and die "$0: cannot use -s with https due to stunnel bug\n";
- $opt_g and die "$0: cannot use -g with https due to stunnel bug\n";
+if ($port == 443) {
+ # $opt_s and die "$0: cannot use -s with https due to stunnel bug\n";
+ # $opt_g and die "$0: cannot use -g with https due to stunnel bug\n";
+ $https = $port;
}
$server =~ s{http://}{};
}
}
}
+ unless ($opt_d or $location) {
+ if (scalar(@r) == 1) {
+ die "$0: server error: @r\n";
+ } else {
+ if ($r[0] !~ /HTTP.1.. 2/ and $r[0] =~ /HTTP.[\s\d.]+(.+)/) {
+ die "$0: server error: $1\n";
+ } else {
+ die "$0: server error:\n".join("\n",@r)."\n";
+ }
+ }
+ }
}
}
$SIG{ALRM} = sub { retry("timed out") };
while (my $b = read $file,$buf,$bs) {
alarm($timeout*2);
- syswrite $SH,$buf or &sigpipehandler;
+ if ($https) {
+ print {$SH} $buf or &sigpipehandler;
+ } else {
+ syswrite $SH,$buf or &sigpipehandler;
+ }
alarm(0);
$bytes += $b;
if ($filesize > 0 and $bytes+$seek > $filesize) {
if ($proxy) {
tcpconnect(split(':',$proxy));
- if ($port == 443) {
+ if ($https) {
printf "--> %s\n",$connect if $opt_v;
nvtsend($connect,"");
$_ = <$SH>;
} else {
tcpconnect($server,$port);
}
-# if ($port == 443 and $opt_v) {
+# if ($https and $opt_v) {
# printf "%s\n",$SH->get_cipher();
# }
}
undef $SH;
}
- if ($port == 443) {
+ if ($https) {
# eval "use IO::Socket::SSL qw(debug3)";
&enable_ssl;
$SH = IO::Socket::SSL->new(
x-Mobile
X-Country
X-ClickOnceSupport
+ X-Newrelic
.*:\s*$
);
eval 'use Net::INET6Glue::INET_is_INET6';
-our $version = 20150615;
+our $version = 20150729;
my %SSL = (SSL_version => 'TLSv1');
my $sigpipe;
# already downloaded?
if ($limited_download and $limited_download !~ /^n/i
and $from ne $to # fex to yourself is ok!
- and $to !~ /$amdl/ # allowed multi download recipients
and $from !~ /^_?fexmail/ # fexmail is ok!
and $to !~ /^_?fexmail/ # fexmail is ok!
and $to !~ /^anonymous/ # anonymous fex is ok!
+ and $to !~ /$amdl/ # allowed multi download recipients
and $http_client !~ /$adlm/ # allowed download managers
and $file !~ /\/STDFEX$/ # xx is ok!
and (slurp("$file/comment")||'') !~ /^!\*!/ # multi download allow flag
our ($FEXHOME);
our ($spooldir,$durl,$tmpdir,@logdir,$logdir,$docdir,$hostname,$admin,$fra);
our ($keep_default,$recipient_quota,$sender_quota,$fex_yourself);
-our ($sendmail,$mdomain,$fop_auth,$mail_auth,$faillog);
+our ($sendmail,$mdomain,$fop_auth,$mail_auth,$faillog,$amdl);
our ($dkeydir,$ukeydir,$akeydir,$skeydir,$gkeydir,$xkeydir);
our ($MB,$DS);
our $RB; # read POST bytes (total)
if (-x "$FEXHOME/cgi-bin/login") {
print $info_login||$info_1;
}
- print "</body></html>\n";
+ pq(qq(
+ '<p><hr><p>'
+ '<b>'
+ 'Warning: the recipient must not be a mailing list, because after'
+ 'download the file will be no more available!'
+ '</b><br>'
+ 'Contact <a href="mailto:$ENV{SERVER_ADMIN}">fexmaster</a>'
+ 'if you want to fex to a mailing list,'
+ 'he can allow multiple downloads for specific addresses.'
+ '</body></html>'
+ ));
exit;
}
' <p><input type="submit" value="check ID and continue"><p>'
));
if (not $nomail and (
- @local_domains and @local_hosts and ipin($ra,@local_hosts)
- or @local_rdomains and @local_rhosts and
- (not @registration_hosts or ipin($ra,@registration_hosts))
- or @demo
+ @local_domains and @local_hosts or
+ @local_rdomains and @local_rhosts or
+ @demo
)) {
pq(qq(
'You can <a href="/fur">register yourself</a> '
$keep{$to} = $1 if $to =~ /:keep=(\d+)/i;
$autodelete{$to} = $1 if $to =~ /:autodelete=(\w+)/i;
}
+ $autodelete{$to} = 'NO' if $to =~ /$amdl/; # mailing lists, etc
if (-e "$to/\@CAPTIVE") {
my $v;
$v = readlink "$to/\@AUTODELETE" and $autodelete{$to} = $v;
'Content-Length: 0',
""
);
- &reexec;
+ } else {
+ nvt_print(
+ "HTTP/1.1 302 Found",
+ "Location: $ENV{PROTO}://$ENV{HTTP_HOST}/fup",
+ 'Content-Length: 0',
+ ""
+ );
}
+ &reexec;
} elsif ($v eq 'LOCALE' and $vv =~ /^(\w+)$/) {
$locale = $1;
} elsif ($v eq 'REDIRECT' and $vv =~ /^([\w?=]+)$/) {
&check_maint;
-unless (@local_domains or @local_rdomains) {
+unless (@local_domains and @local_rdomains) {
html_error($error,
"No domains for registrations are defined.",
"Contact $ENV{SERVER_ADMIN} for details."
);
}
+unless (@local_hosts and ipin($ENV{REMOTE_ADDR}||0,@local_hosts)) {
+ html_error($error,
+ "Registrations from your host ($ENV{REMOTE_ADDR}) are not allowed.",
+ "Contact $ENV{SERVER_ADMIN} for details."
+ );
+}
+
# look for CGI parameters
our %PARAM;
&parse_parameters;
+2015-07-29 install: fixed various bugs
+2015-07-15 dop: symbolic links generate a HTTP 302 (temporarily redirection)
+ instead of a HTTP 301 (permanently redirection) response
+2015-06-16 fexsend: fixed bug hangs with https
+ new fex.ph config variable @mailing_lists
+2015-06-15 fup: always display fur link, if @local_domains is defined
2015-06-10 fexsrv: fixed warning with https and SIGCHLD
2015-05-16 fexsrv/dop: added active and passive redirect support
2015-05-12 fuc: fixed bug undefined subroutine end_html
etc) have their UTF-8 flag turned off. This means, they contain UTF-8 data
in binary representation.
+F*EX has support for many languanges. For every language a translated
+version will be installed in $HOME/locale/
+The switch is done at runtime via locale cookie (by fexsrv).
+Some common functions from fex.pp must be present at any time for any
+locale in any language, eg notification functions. Therfore there is
+$HOME/lib/lf.pl (extracted functions from fex.pp).
I have additional authentication modules for RADIUS, LDAP, mailman and
POP. Please email me if you are interested.
-fex-20150615
+fex-20150729
#
service fex
{
- socket_type = stream
- wait = no
- type = unlisted
- protocol = tcp
- bind = ADDRESS
- port = PORT
- cps = 10 2
- user = fex
- groups = yes
- server = FEXHOME/bin/fexsrv
- nice = 0
- disable = no
+ socket_type = stream
+ wait = no
+ type = unlisted
+ protocol = tcp
+ #flags = IPv6
+ bind = ADDRESS
+ port = PORT
+ cps = 10 2
+ user = fex
+ groups = yes
+ server = FEXHOME/bin/fexsrv
+ nice = 0
+ disable = no
}
# configuration for https/SSL see /home/fex/doc/SSL
# configuration for IPv6 see /home/fex/doc/IPv6
Q: F*EX is not working at all! I cannot connect to it with my web browser!
A: Check your routing, ipfilters and firewall setup.
Also check if xinetd is running. If it is linked with tcp-wrapper, configure it correctly (hosts.allow).
+ /etc/xinetd.d/fex should not contain a line "only_from"
F*EX needs port 80/tcp for HTTP and optionally port 443/tcp for HTTPS.
+ Test the connection with: telnet YOURFEXSERVER 80
Q: What is the difference between all these user types (full, sub, group, external, ...)?
-A: See http://fex.belwue.de/users.html
+A: See http://fex.rus.uni-stuttgart.de/users.html
Q: How can I integrate F*EX in the existing user management at my site?
A: F*EX has several authentification modules: local, RADIUS, LDAP, mailman and POP.
</pre>
Q: How can I change user settings like quota, restrictions or keep time?
-A: Use <code>/home/fex/bin/fac</code>
+A: Use /home/fex/bin/fac
Q: How can I delete or temporarly disable a user?
-A: Use <code>/home/fex/bin/fac</code>
+A: Use /home/fex/bin/fac
Q: I have BIG files already on the fexserver host. Can I upload just a
link instead of the whole file?
Q: I want the Bcc mails to fex (admin user) to be sent to another address.
A: Set variable $bcc in /home/fex/lib/fex.ph
+Q: My users want to fex to mailing lists, but after first download the file is no more available!?
+A: Add the mailing list address to @mailing_list in /home/fex/lib/fex.ph
+ This allows multiple downloads.
+
Q: I need more security! How can I enable (https) encryption?
A: Read doc/SSL and also look for "fop_auth" in doc/concept
(doc is a local directory in your installation or online http://fex.belwue.de/doc/)
A: The auth-ID is an internal identification which authentificates the user. It will be first generated by the admin or the automatic registration process and can later be modified by you, the user. Think of some kind of a low security password.
Q: What is the difference between all these user types (full, sub, group, external, ...)?
-A: See http://fex.belwue.de/users.html
+A: See http://fex.rus.uni-stuttgart.de/users.html
Q: I have uploaded a HUGE file but misspelled my recipient's address. Now I have got an error bounce email. Must I re-upload the HUGE file?
A: No, it is not necessary. You can redirect the file with "user config & operation control"
A: Generally, no, because they suck: they are not RFC compliant and produce a LOT of unnecessary server load.
But there is one exception: axel http://axel.alioth.debian.org/
-Q: When I hit [ESC] in firefox the upload is canceled. Why?
-A: This is a built-in feature of firefox: ESC terminates the current operation.
- Simple solution: do not hit ESC in Firefox.
- Complex solution: ask the Firefox developers to add keyboard configuration.
+Q: Why is there an error "FILE has already been downloaded"?
+A: Either you or someone else have already downloaded this file. Now it is gone.
+ Downloads are limited to a specific recipient. One cannot share it.
+ Perhaps the sender has fexed it to a mailing list (which is a bad idea!)?
+Q: Can I fex to a mailing list?
+A: Generally: no, because the first download makes the file no more available for others.
+ Contact $SERVER_ADMIN$, he can allow multiple downloads for specific addresses.
+
Q: Sending as a F*EX user is easy, but how to receive files from others, outside?
A: Register them as your subusers, create a F*EX group or a one-time upload key with "user config & operation control"
See also http://fex.belwue.de/usecases/foreign.html
our ($fexhome,$idf,$tmpdir,$windoof,$useragent);
our ($xv,%autoview);
our $bs = 2**16; # blocksize for tcp-reading and writing file
-our $version = 20150615;
+our $version = 20150729;
our $CTYPE = 'ISO-8859-1';
our $fexsend = $ENV{FEXSEND} || 'fexsend';
our ($FEXID,$FEXXX,$HOME);
our (%alias);
our $chunksize = 0;
-our $version = 20150615;
+our $version = 20150729;
our $_0 = $0;
our $DEBUG;
my $fexcgi; # F*EX CGI URL
my @files; # files to send
my %AB = (); # server based address book
-my ($server,$port,$sid);
+my ($server,$port,$sid,$https);
my $proxy = '';
my $proxy_prefix = '';
my $features = '';
or: $0 -x \# [-C -k -D -K -S]
options: -v verbose mode
-d delete file on fex server
- -c compress file
+ -c compress file with gzip
-g encrypt file with gpg
-m limit limit throughput (kB/s)
-i tag use ID data [tag] from ID file
$port = 443 if $server =~ s{https://}{};
$port = $1 if $server =~ s/:(\d+)//;
-if (0 and $port == 443) {
- $opt_s and die "$0: cannot use -s with https due to stunnel bug\n";
- $opt_g and die "$0: cannot use -g with https due to stunnel bug\n";
+if ($port == 443) {
+ # $opt_s and die "$0: cannot use -s with https due to stunnel bug\n";
+ # $opt_g and die "$0: cannot use -g with https due to stunnel bug\n";
+ $https = $port;
}
$server =~ s{http://}{};
}
}
}
+ unless ($opt_d or $location) {
+ if (scalar(@r) == 1) {
+ die "$0: server error: @r\n";
+ } else {
+ if ($r[0] !~ /HTTP.1.. 2/ and $r[0] =~ /HTTP.[\s\d.]+(.+)/) {
+ die "$0: server error: $1\n";
+ } else {
+ die "$0: server error:\n".join("\n",@r)."\n";
+ }
+ }
+ }
}
}
$SIG{ALRM} = sub { retry("timed out") };
while (my $b = read $file,$buf,$bs) {
alarm($timeout*2);
- syswrite $SH,$buf or &sigpipehandler;
+ if ($https) {
+ print {$SH} $buf or &sigpipehandler;
+ } else {
+ syswrite $SH,$buf or &sigpipehandler;
+ }
alarm(0);
$bytes += $b;
if ($filesize > 0 and $bytes+$seek > $filesize) {
if ($proxy) {
tcpconnect(split(':',$proxy));
- if ($port == 443) {
+ if ($https) {
printf "--> %s\n",$connect if $opt_v;
nvtsend($connect,"");
$_ = <$SH>;
} else {
tcpconnect($server,$port);
}
-# if ($port == 443 and $opt_v) {
+# if ($https and $opt_v) {
# printf "%s\n",$SH->get_cipher();
# }
}
undef $SH;
}
- if ($port == 443) {
+ if ($https) {
# eval "use IO::Socket::SSL qw(debug3)";
&enable_ssl;
$SH = IO::Socket::SSL->new(
eval 'use Net::INET6Glue::INET_is_INET6';
-our $version = 20150615;
+our $version = 20150729;
my %SSL = (SSL_version => 'TLSv1');
my $sigpipe;
-fex-20150615
+fex-20150729
}
}
close P;
- print "Your IP [$guessed_ip] : ";
- chomp($ip = <STDIN>);
+ unless (-f $xinetd) {
+ print "Your IP [$guessed_ip] : ";
+ chomp($ip = <STDIN>);
+ }
$ip ||= $guessed_ip;
}
}
chownr('fex',"$FEXHOME/spool/.");
+# fex-VM?
+if (open my $setup,'/root/bin/setup') {
+ while (<$setup>) {
+ exit if /#.*X-VM/;
+ }
+ close $setup;
+}
+
system(qw'perl -p -i -e',
's:href="/?FAQ.html":href="/FAQ/FAQ.html":',
"$FEXHOME/lib/fup.pl"
eval $conf;
-die "no \$spooldir in $fph\n" unless $spooldir;
+# die "no \$spooldir in $fph\n" unless $spooldir;
+$spooldir ||= '/home/fex/spool';
die "\$spooldir=$spooldir is not a directory, see $fph\n" unless -d $spooldir;
symlink $spooldir,"$FEXHOME/spool" unless -e "$FEXHOME/spool";
@sds1 = stat "$spooldir/.";
last if $admin =~ /.\@./;
print "admin must be a valid email address!\n";
}
+ $aa = "$spooldir/$admin/@";
while (not $admin_pw) {
print "F*EX admin password: ";
$admin_pw = <STDIN>;
if ($crontab !~ /fex_cleanup/) {
open $crontab,">fex.cron" or die "cannot create fex.cron - $!\n";
print {$crontab} $crontab,"\n";
+ print {$crontab} " 3 2 * * * exec $FEXHOME/bin/backup\n";
print {$crontab} " 3 3 * * * exec $FEXHOME/bin/fex_cleanup\n";
close $crontab;
- system qw(crontab -u fex fex.cron);
+ system qw'crontab -u fex fex.cron';
}
- chownr('fex:root',"$FEXHOME $FEXHOME/spool/.");
+ chownr('fex:root',$FEXHOME,"$FEXHOME/spool/.");
chmodr('go-r',"$FEXHOME/lib","$FEXHOME/cgi-bin","$FEXHOME/spool/.");
print "\n";
$doc = "$path/$link";
$doc =~ s:/+:/:g;
$doc =~ s:^/::;
- $host = $ENV{HTTP_HOST} || $hostname;
nvt_print(
- "HTTP/1.1 301 Moved Permanently",
- "Location: $ENV{PROTO}://$host/$doc",
+ "HTTP/1.1 302 Found",
+ "Location: /$doc",
"Content-Length: 0",
- "Connection: close",
""
);
&reexec;
## optional: allow anonymous upload without authentication for these IP ranges
# @anonymous_upload = qw(127.0.0.1 ::1 10.10.100.0-10.10.200.255 129.69.1.129);
+## optional: mailing list addresses (allows multiple downloads)
+# @mailing_lists = qw(admin@my.domain *@listserv*);
+
## optional: forbidden addresses
-# @forbidden_recipients = qw(nobody@* *@listserv*);
+# @forbidden_recipients = qw(nobody@* postmaster@else.where);
## optional: forbidden ip addresses for CGIs
# @forbidden_hosts = qw(64.124.0.0-64.125.255.255);
# allowed download managers (HTTP User-Agent)
$adlm = '^(Axel|fex)';
-# allowed multi download recipients
-$amdl = '^(anonymous|_fexmail_)';
-
# local config
require "$FEXLIB/fex.ph" or die "$0: cannot load $FEXLIB/fex.ph - $!";
@logdir = ($logdir) unless @logdir;
$logdir = $logdir[0];
+# allowed multi download recipients: from any ip, any times
+if (@mailing_lists) {
+ $amdl = '^('.join('|',map { quotewild($_) } @mailing_lists).')$';
+} else {
+ $amdl = '^-$';
+}
+
# check for name based virtual host
$vhost = vhost($ENV{'HTTP_HOST'});
# $durl is first default fop download URL
# @durl is optional mandatory fop download URL list (from fex.ph)
unless ($durl) {
+ my $host = '';
+ my $port = 80;
+ my $xinetd = '/etc/xinetd.d/fex';
+
if (@durl) {
$durl = $durl[0];
} elsif ($ENV{HTTP_HOST} and $ENV{PROTO}) {
- my $host = '';
- my $port = 0;
($host,$port) = split(':',$ENV{HTTP_HOST}||'');
$host = $hostname;
unless ($port) {
$port = 80;
- if (open my $xinetd,'<',"/etc/xinetd.d/fex") {
+ if (open $xinetd,$xinetd) {
while (<$xinetd>) {
if (/^\s*port\s*=\s*(\d+)/) {
$port = $1;
$durl = "$ENV{PROTO}://$host:$port/fop";
}
} else {
- $durl = "http://$hostname/fop";
+ if (open $xinetd,$xinetd) {
+ while (<$xinetd>) {
+ if (/^\s*port\s*=\s*(\d+)/) {
+ $port = $1;
+ last;
+ }
+ }
+ close $xinetd;
+ }
+ if ($port == 80) {
+ $durl = "http://$hostname/fop";
+ } else {
+ $durl = "http://$hostname:$port/fop";
+ }
}
}
+@durl = ($durl) unless @durl;
sub reexec {
return $a if -d "$spooldir/$a"; # ok, if user already exists
if (@forbidden_recipients) {
foreach (@forbidden_recipients) {
- $fr = quotemeta;
- $fr =~ s/\\\*/.*/g; # allow wildcard *
+ $fr = quotewild($_);
# skip public recipients
if (@public_recipients) {
foreach $pr (@public_recipients) {
}
+# wildcard * to perl regexp
+sub quotewild {
+ local $_ = quotemeta shift;
+ s/\\\*/.*/g; # allow wildcard *
+ return $_;
+}
+
+
# extract locale functions into hash of subroutine references
# e.g. \&german ==> $notify{german}
sub locale_functions {
);
}
-### locale functions ###
-# will be extracted by install process and saved in $FEXHOME/lib/lf.pl
-# you cannot modify them here without re-installing!
+########################### locale functions ###########################
+# Will be extracted by install process and saved in $FEXHOME/lib/lf.pl #
+# You cannot modify them here without re-installing! #
+########################################################################
+# locale function!
sub notify {
# my ($status,$dkey,$filename,$keep,$warn,$comment,$autodelete) = @_;
my %P = @_;
}
+# locale function!
sub reactivation {
my ($expire,$user) = @_;
my $fexsend = "$FEXHOME/bin/fexsend";
print {$lf} "### auto-generated by install/translate - DO NOT EDIT! ###\n\n";
local $/;
$_ = <$fexpp>;
- s/.*\n(\#\#\# locale functions)/$1/s;
+ s/.*\n(\#\#\#* locale functions)/$1/s;
s/\nsub (\w+)/\n\$$1\{$lang\} = sub/gs;
s/\n\}\n/\n\};\n/gs;
print {$lf} $_;
add to recipients list
zur Empfänger-Liste hinzufügen
-uff d' Empfängerlischte setze
+uff d' Empfängerlischte setza
añada a la lista de destinatarios
engadir á lista de destinatarios
aggiungi alla lista di distribuzione
zaslat sobě
à votre adresse
->user config & operation control
->Benutzer Bedienungssteuerung
->Benutzr Bdienongssteierong
->configuración de usuario y control de operación
->configuración de usuario e control de operación
->configurazion utente & controllo operazioni
->nastavení uživatele a řízení provozu
->configuration utilisateur et gestion
+user config & operation control
+Benutzer Bedienungssteuerung
+Benutzr Bdienongssteierong
+configuración de usuario y control de operación
+configuración de usuario e control de operación
+configurazion utente & controllo operazioni
+nastavení uživatele a řízení provozu
+configuration utilisateur et gestion
Alternate Java client</a> (for files > 2 GB or sending of more than one file)
Alternativer Java Client</a> (für Dateien größer als 2 GB oder zum Senden von mehr als einer Datei)
Alternativní Java klient</a> (pro soubory větší než 2 GB či pro odesílání více než jednoho souboru)
Client Java alternatif</a> (pour les fichiers > 2 GB ou envoyer plusieurs fichiers d'un coup)
+Warning: the recipient must not be a mailing list, because after
+Warnung: die Empfängeradresse darf keine Mailingliste sein, weil nach dem
+Obacht: die Empfängeradress darf koi Mailinglischt sei, weil nochm
+Warning: the recipient must not be a mailing list, because after
+Warning: the recipient must not be a mailing list, because after
+Warning: the recipient must not be a mailing list, because after
+Warning: the recipient must not be a mailing list, because after
+Warning: the recipient must not be a mailing list, because after
+
+download the file will be no more available
+Download wird die Datei nicht mehr verfügbar sein
+Ronderlada isch die Datei nemme verfügbar
+download the file will be no more available
+download the file will be no more available
+download the file will be no more available
+download the file will be no more available
+download the file will be no more available
+
+Contact <a href="mailto:$ENV{SERVER_ADMIN}">fexmaster</a>
+Kontaktieren Sie den <a href="mailto:$ENV{SERVER_ADMIN}">fexmaster</a>
+Frog dr <a href="mailto:$ENV{SERVER_ADMIN}">fexmaster</a>
+Contact <a href="mailto:$ENV{SERVER_ADMIN}">fexmaster</a>
+Contact <a href="mailto:$ENV{SERVER_ADMIN}">fexmaster</a>
+Contact <a href="mailto:$ENV{SERVER_ADMIN}">fexmaster</a>
+Contact <a href="mailto:$ENV{SERVER_ADMIN}">fexmaster</a>
+Contact <a href="mailto:$ENV{SERVER_ADMIN}">fexmaster</a>
+
+if you want to fex to a mailing list
+wenn Sie an eine Mailingliste fexen wollen
+wenn Du an a Mailinglischt fexa wilsch
+if you want to fex to a mailing list
+if you want to fex to a mailing list
+if you want to fex to a mailing list
+if you want to fex to a mailing list
+if you want to fex to a mailing list
+
+he can allow multiple downloads for specific addresses
+er kann für bestimmte Adressen einen mehrfachen Download freischalten
+der ko fir beschtemmte Adressa a mehrfaches Ronderlada erlauba
+he can allow multiple downloads for specific addresses
+he can allow multiple downloads for specific addresses
+he can allow multiple downloads for specific addresses
+he can allow multiple downloads for specific addresses
+he can allow multiple downloads for specific addresses
+
You have to fill out this form completely to continue
Sie müssen dieses Formular komplett ausfüllen um fortzufahren
Du musch des Formular ganz ausffülla sonsch kosch ned weitrmacha