mirror of
https://github.com/webmin/webmin.git
synced 2026-02-04 06:32:15 +00:00
Compare commits
278 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9dc7367dd6 | ||
|
|
1e8caabc50 | ||
|
|
64720c97ab | ||
|
|
94cdddf447 | ||
|
|
460ea14a24 | ||
|
|
dcd0daac42 | ||
|
|
2ae5345117 | ||
|
|
c87b5c6e3d | ||
|
|
4fa781805f | ||
|
|
95180b7f9d | ||
|
|
379f7aaf0b | ||
|
|
f79d1040f3 | ||
|
|
9c0d9268e1 | ||
|
|
1cbe773f6f | ||
|
|
27c09c00ec | ||
|
|
e69c6699ac | ||
|
|
c419c339db | ||
|
|
835175b098 | ||
|
|
7ebd6ae4fe | ||
|
|
89b8c53666 | ||
|
|
94e8f32e47 | ||
|
|
1456de9649 | ||
|
|
9a445e00b9 | ||
|
|
771050ba7c | ||
|
|
2de661cfd7 | ||
|
|
0e774af597 | ||
|
|
c22e70a0d1 | ||
|
|
0ee9cd2808 | ||
|
|
2b92ba535e | ||
|
|
0a765063c3 | ||
|
|
911f9fd46d | ||
|
|
c67c945e58 | ||
|
|
91f03a2109 | ||
|
|
5aed345808 | ||
|
|
34468b5eed | ||
|
|
6f581fb0f1 | ||
|
|
4f497ea7b8 | ||
|
|
30577a4161 | ||
|
|
c2d4a90639 | ||
|
|
f6706036b9 | ||
|
|
a330e913ee | ||
|
|
4b6df81888 | ||
|
|
ff42df7647 | ||
|
|
cca627a50e | ||
|
|
6ca8341261 | ||
|
|
591981563a | ||
|
|
7737685835 | ||
|
|
efe00dc8e3 | ||
|
|
cae85a9ce8 | ||
|
|
0ce2ce7236 | ||
|
|
041ed3ace4 | ||
|
|
375436621e | ||
|
|
019b0f0625 | ||
|
|
24b2bcd81b | ||
|
|
b7ede39420 | ||
|
|
d41b963859 | ||
|
|
fd857573ee | ||
|
|
6389fe1787 | ||
|
|
b67b98f6b5 | ||
|
|
2ca5006c6c | ||
|
|
d7652f88db | ||
|
|
873519e64e | ||
|
|
e44934a153 | ||
|
|
8c3ccb1503 | ||
|
|
0e77146a48 | ||
|
|
1ed3f58598 | ||
|
|
23873a5c2b | ||
|
|
a6052e1ae9 | ||
|
|
122c573f94 | ||
|
|
0de4ab8c29 | ||
|
|
2ba05ab405 | ||
|
|
0916b7ad99 | ||
|
|
c43c6a4e27 | ||
|
|
00abf8494a | ||
|
|
529112cd7a | ||
|
|
6365b6bdcd | ||
|
|
a395c32ec6 | ||
|
|
06387a59fa | ||
|
|
4cc65beacc | ||
|
|
a2de217c25 | ||
|
|
f6320c27e2 | ||
|
|
d625028e8f | ||
|
|
7da8c4dd66 | ||
|
|
7b272988e8 | ||
|
|
4d47bc8442 | ||
|
|
2ea940145b | ||
|
|
377bcacff8 | ||
|
|
1379d2cc35 | ||
|
|
37a5504f51 | ||
|
|
ea8b2fc1bf | ||
|
|
2ee32e71cf | ||
|
|
08a1f3db74 | ||
|
|
5b0606c9fc | ||
|
|
06752583db | ||
|
|
0d1f01d511 | ||
|
|
4f6b28f95c | ||
|
|
32ecbaaf02 | ||
|
|
f93251569b | ||
|
|
3176c4cd45 | ||
|
|
7ed31959e4 | ||
|
|
72234a7669 | ||
|
|
44822d651a | ||
|
|
cde3eb1bb1 | ||
|
|
f1c000d1e5 | ||
|
|
4f564b9e2a | ||
|
|
2215ee4cf8 | ||
|
|
483a9a7c5f | ||
|
|
7e75fdfa16 | ||
|
|
086e38676e | ||
|
|
54c1f071fc | ||
|
|
72a6acb7ef | ||
|
|
abe3a4858b | ||
|
|
a41915611e | ||
|
|
e4cb1a4af5 | ||
|
|
cf4c57e947 | ||
|
|
d5f9824741 | ||
|
|
5129dfbe79 | ||
|
|
4b6f58eac8 | ||
|
|
e34875ec0b | ||
|
|
40db0575f6 | ||
|
|
74d463be57 | ||
|
|
1a99e197dc | ||
|
|
19e4df6f0e | ||
|
|
49d4e0f4f3 | ||
|
|
504a7d78c7 | ||
|
|
3ecc241b54 | ||
|
|
8160e5f777 | ||
|
|
3df2f306f7 | ||
|
|
3027952e0d | ||
|
|
505d380fbb | ||
|
|
65c28ad2ab | ||
|
|
da6b642778 | ||
|
|
2d49c19716 | ||
|
|
b7c85e32c7 | ||
|
|
d2283223c3 | ||
|
|
10881d9171 | ||
|
|
770cc24f57 | ||
|
|
7b4f8f5b40 | ||
|
|
e5fe901147 | ||
|
|
017e6585b6 | ||
|
|
81d70f5cc9 | ||
|
|
72283092da | ||
|
|
0e98b4a40a | ||
|
|
b52d5c9986 | ||
|
|
47b5ee31c0 | ||
|
|
37fe61d6f3 | ||
|
|
fcaf0ffb35 | ||
|
|
cd2cb0f5d6 | ||
|
|
8bb3e372ba | ||
|
|
581ddd1491 | ||
|
|
14610a77f1 | ||
|
|
c7285f5d11 | ||
|
|
f1e5428e50 | ||
|
|
c9a9fdeedf | ||
|
|
7482794f07 | ||
|
|
675e9ec513 | ||
|
|
133b511a75 | ||
|
|
0b1fac9f51 | ||
|
|
989c759036 | ||
|
|
2afd4a1dc5 | ||
|
|
e46c7ceb44 | ||
|
|
d9cc4509d2 | ||
|
|
faa65976d7 | ||
|
|
53e306860e | ||
|
|
c64c04d3e0 | ||
|
|
e7c4c3abd9 | ||
|
|
194d48bd9e | ||
|
|
75efeb1d16 | ||
|
|
99a63d9295 | ||
|
|
ef7e2cd933 | ||
|
|
ad043d235e | ||
|
|
678cc38013 | ||
|
|
f6090947ba | ||
|
|
d53ce67174 | ||
|
|
0cfb09e436 | ||
|
|
1a4d525ef2 | ||
|
|
8bfaf2b488 | ||
|
|
af8d5d24a1 | ||
|
|
af65582191 | ||
|
|
87fe720d04 | ||
|
|
c74a867652 | ||
|
|
e4738380e1 | ||
|
|
7df549f91d | ||
|
|
7e9905ce3c | ||
|
|
594a874a4b | ||
|
|
b047220417 | ||
|
|
01165959d3 | ||
|
|
888b0f27f5 | ||
|
|
5e5a7b9cc3 | ||
|
|
0c25d52a6d | ||
|
|
d220823080 | ||
|
|
fa1929966c | ||
|
|
0effafd397 | ||
|
|
01b0a01f90 | ||
|
|
9da01f6a70 | ||
|
|
aafbe392ba | ||
|
|
8ca3de3c28 | ||
|
|
817244241a | ||
|
|
7316d87049 | ||
|
|
368d7e0297 | ||
|
|
721a1f47b3 | ||
|
|
4e668e19cb | ||
|
|
509e01eb90 | ||
|
|
2c1f20fb1d | ||
|
|
703802065f | ||
|
|
6243d45f3f | ||
|
|
de2a5e9ff2 | ||
|
|
43afab0d84 | ||
|
|
8d013ec69c | ||
|
|
7face4b2be | ||
|
|
26d05f0437 | ||
|
|
f7da281d72 | ||
|
|
af33c38d17 | ||
|
|
5abc9b538b | ||
|
|
34781fd651 | ||
|
|
ea69c0978b | ||
|
|
7f2c27df29 | ||
|
|
034a3e9f8c | ||
|
|
fdc689ad5d | ||
|
|
07c560cdf6 | ||
|
|
586af08e08 | ||
|
|
7ba6250482 | ||
|
|
f814546239 | ||
|
|
191827e425 | ||
|
|
9fef0d060b | ||
|
|
acc9f93fef | ||
|
|
527b8b1467 | ||
|
|
bf4e69bc54 | ||
|
|
60351e59c7 | ||
|
|
c031ac4b76 | ||
|
|
4ffd3753a2 | ||
|
|
b6a5b4b230 | ||
|
|
5a21764743 | ||
|
|
ca6739cda3 | ||
|
|
add5d65a6b | ||
|
|
55db94413b | ||
|
|
f21e731422 | ||
|
|
5030fab70e | ||
|
|
0b70e3676e | ||
|
|
5f6fe082e2 | ||
|
|
6a953d9670 | ||
|
|
766ccf57de | ||
|
|
4e02a9823d | ||
|
|
da43d7185c | ||
|
|
4c19095949 | ||
|
|
c07dd3cddf | ||
|
|
9fe942e958 | ||
|
|
7ba14d9de4 | ||
|
|
c455b93573 | ||
|
|
ba263882a6 | ||
|
|
f5927981a6 | ||
|
|
7dcce2a64f | ||
|
|
f9d1278a00 | ||
|
|
771e303e37 | ||
|
|
18e165e925 | ||
|
|
09c125ad9a | ||
|
|
7127ac2072 | ||
|
|
b9507b0d77 | ||
|
|
fe265aa65b | ||
|
|
f003b029b6 | ||
|
|
41c5bd30ea | ||
|
|
f5549dbe39 | ||
|
|
0b416e09e8 | ||
|
|
e01770a0a1 | ||
|
|
bcec484ebf | ||
|
|
314489fae7 | ||
|
|
87854875b7 | ||
|
|
da0b587b2b | ||
|
|
3290f4c11f | ||
|
|
7a3782a680 | ||
|
|
e1d7fc3c14 | ||
|
|
b5d1826ef7 | ||
|
|
41908574ee | ||
|
|
46f5f9715f | ||
|
|
e9a5ea229c | ||
|
|
f8a2f9595d | ||
|
|
f046efed20 | ||
|
|
d7a9fdb431 |
2
README
2
README
@@ -1,4 +1,4 @@
|
||||
Webmin Version 1.840
|
||||
Webmin Version 1.850
|
||||
--------------------
|
||||
Webmin is a web-based interface for system administration for Unix.
|
||||
Using any browser that supports tables and forms, you can setup user
|
||||
|
||||
@@ -52,11 +52,11 @@ else {
|
||||
|
||||
# Validate username, and check for a clash
|
||||
$in{'name'} =~ /^[A-z0-9\-\_\.\@]+$/ && $in{'name'} !~ /^\@/ ||
|
||||
&error(&text('save_ename', $in{'name'}));
|
||||
&error(&text('save_ename', &html_escape($in{'name'})));
|
||||
$in{'name'} eq 'webmin' && &error($text{'save_enamewebmin'});
|
||||
if (!$in{'old'} || $in{'old'} ne $in{'name'}) {
|
||||
my $clash = &get_user($in{'name'});
|
||||
$clash && &error(&text('save_edup', $in{'name'}));
|
||||
$clash && &error(&text('save_edup', &html_escape($in{'name'})));
|
||||
}
|
||||
!$access{'logouttime'} || $in{'logouttime_def'} ||
|
||||
$in{'logouttime'} =~ /^\d+$/ || &error($text{'save_elogouttime'});
|
||||
|
||||
@@ -81,4 +81,5 @@ syslog_syslog-ng=Syslog-NG
|
||||
rotate_title=Actualització d'Estadístiques
|
||||
rotate_doing=S'està processant el trànsit de xarxa registrat...
|
||||
rotate_done=...fet.
|
||||
|
||||
__norefs=1
|
||||
|
||||
@@ -658,10 +658,17 @@ else {
|
||||
# save_port_address(name, portname, &config, indent)
|
||||
sub save_port_address {
|
||||
my ($port, @vals, $dir, $n);
|
||||
foreach my $addr (split(/\s+/, $in{$_[0]})) {
|
||||
$addr =~ /^\S+$/ || &error(&text('eipacl', $addr));
|
||||
push(@vals, { 'name' => $addr });
|
||||
}
|
||||
my @sp = split(/\s+/, $in{$_[0]});
|
||||
for(my $i=0; $i<@sp; $i++) {
|
||||
$sp[$i] =~ /^\S+$/ || &error(&text('eipacl', $sp[$i]));
|
||||
if (lc($sp[$i+1]) eq "key") {
|
||||
push(@vals, { 'name' => $sp[$i++],
|
||||
'values' => [ "key", $sp[++$i] ] });
|
||||
}
|
||||
else {
|
||||
push(@vals, { 'name' => $sp[$i] });
|
||||
}
|
||||
}
|
||||
$dir = { 'name' => $_[0], 'type' => 1, 'members' => \@vals };
|
||||
($n = $_[1]) =~ s/[^A-Za-z0-9_]/_/g;
|
||||
$dir->{'values'} = [ $_[1], $in{$_[1]} ] if (!$in{"${n}_def"});
|
||||
@@ -2174,7 +2181,7 @@ return undef;
|
||||
sub start_bind
|
||||
{
|
||||
my $chroot = &get_chroot();
|
||||
my $user;
|
||||
my $user = "";
|
||||
my $cmd;
|
||||
if ($config{'named_user'}) {
|
||||
$user = "-u $config{'named_user'}";
|
||||
|
||||
@@ -271,6 +271,10 @@ edit_eloc=Hi falta la latitud i la longitud
|
||||
edit_eweight='$1' no és un pes de servei vàlid
|
||||
edit_eport='$1' no és un número de port vàlid
|
||||
edit_etarget='$1' no és un nom de servidor ni una adreça vàlida
|
||||
edit_eusage='$1' no és un número d'ús TLSA vàlid
|
||||
edit_eselector='$1' no és un número de selector TLSA vàlid
|
||||
edit_ematch='$1' no és un número de coincidència TLSA vàlid
|
||||
edit_etlsa=El certificat codificat amb TLSA és invàlid - només pot contenir bytes hexadecimals de dos dígits
|
||||
edit_return=als registres
|
||||
edit_ecname1=No pots crear un registre d'àlies de nom amb el mateix nom que un d'existent.
|
||||
edit_ecname2=No pots crear un registre amb el mateix nom que un d'existent.
|
||||
@@ -285,6 +289,9 @@ edit_dtitle=Suprimeix el Registre
|
||||
edit_rusure=Segur que vols suprimir el registre $1 del domini $2, i possiblement qualsevol registre invers o de reenviament que hi coincideixi?
|
||||
edit_dok=Sí, Suprimeix-lo
|
||||
edit_eptr='$1' no és un nom de host de registre d'adreça inversa vàlid
|
||||
edit_ealg2='$1' no és un número d'algoritme de certificat vàlid
|
||||
edit_efp='$1' no és un tipus d'empremta digital de certificat vàlid
|
||||
edit_esshfp=Hi falten les dades de la clau pública codificades en base 64 o bé no són vàlides
|
||||
edit_espfa='$1' no és un host destinació vàlid
|
||||
edit_espfa2='$1' ha de ser un nom de host, no una adreça IP
|
||||
edit_espfmx='$1' no és un nom de domini destinació vàlid
|
||||
@@ -378,6 +385,8 @@ type_HINFO=Informaci
|
||||
type_NSEC3PARAM=Paràmetres DNSSEC
|
||||
type_TXT=Text
|
||||
type_SPF=Remitent Permès des de
|
||||
type_TLSA=Certificat SSL
|
||||
type_SSHFP=Clau Pública SSH
|
||||
type_DMARC=DMARC
|
||||
type_WKS=Servei Conegut (WKS)
|
||||
type_RP=Persona Responsable
|
||||
@@ -408,6 +417,8 @@ recs_defttl=TTL per defecte
|
||||
recs_A=Adreça
|
||||
recs_AAAA=Adreça IPv6
|
||||
recs_NS=Servidor de Noms
|
||||
edit_TLSA=Certificat SSL
|
||||
edit_SSHFP=Clau Pública SSH
|
||||
recs_CNAME=Àlies del Nom
|
||||
recs_MX=Servidor de Correu
|
||||
recs_HINFO=Informació del Host
|
||||
@@ -427,6 +438,8 @@ recs_delete=Suprimeix els Seleccionats
|
||||
value_A1=Adreça
|
||||
value_AAAA1=Adreça IPv6
|
||||
value_NS1=Servidor de Noms
|
||||
recs_TLSA=Certificat SSL
|
||||
recs_SSHFP=Clau Pública SSH
|
||||
value_CNAME1=Nom Real
|
||||
value_MX1=Prioritat
|
||||
value_MX2=Servidor de Correu
|
||||
@@ -444,6 +457,13 @@ value_SRV1=Prioritat
|
||||
value_SRV2=Pes
|
||||
value_SRV3=Port
|
||||
value_SRV4=Servidor
|
||||
value_TLSA1=Ús del certificat
|
||||
value_TLSA2=Selector del certificat
|
||||
value_TLSA3=Coincidència del certificat
|
||||
value_TLSA4=Dades del certificat
|
||||
value_SSHFP1=Algoritme de la clau pública
|
||||
value_SSHFP2=Empremta digital de la clau pública
|
||||
value_SSHFP3=Dades de la clau pública
|
||||
value_KEY1=Banderes
|
||||
value_KEY2=Protocol
|
||||
value_KEY3=Algoritme
|
||||
@@ -489,6 +509,23 @@ value_dmarcaspf=Requereix alineaci
|
||||
value_dmarcadkim=Requereix alineació DKIM estricta
|
||||
value_dmarcnor=No ho enviïs
|
||||
|
||||
tlsa_usage0=Autoritat certificadora
|
||||
tlsa_usage1=Acaba l'entitat
|
||||
tlsa_usage2=Ancora de confiança
|
||||
tlsa_usage3=Domini emès
|
||||
tlsa_selector0=Certificat complet
|
||||
tlsa_selector1=Info de la clau pública
|
||||
tlsa_match0=Contingut sense hash
|
||||
tlsa_match1=amb hash SHA-256
|
||||
tlsa_match2=amb hash SHA-512
|
||||
|
||||
sshfp_alg1=RSA
|
||||
sshfp_alg2=DSA
|
||||
sshfp_alg3=ECDSA
|
||||
sshfp_alg4=Ed25519
|
||||
sshfp_fp1=SHA-1
|
||||
sshfp_fp2=SHA-256
|
||||
|
||||
warn=Avisa
|
||||
fail=Falla
|
||||
ignore=Ignora
|
||||
|
||||
192
certmgr/certmgr-lib.pl
Executable file → Normal file
192
certmgr/certmgr-lib.pl
Executable file → Normal file
@@ -60,7 +60,8 @@ sub print_sign_form {
|
||||
print &ui_table_start($text{'signcsr_header'}, undef, 2);
|
||||
print &ui_table_row($text{'signcsr_csrfile'}, &ui_textbox("csrfile", $in{'csrfile'}, 40), undef, $valign_middle);
|
||||
print &ui_table_row($text{'signcsr_signfile'}, &ui_textbox("signfile", $in{'signfile'}, 40), undef, $valign_middle);
|
||||
print &ui_table_row($text{'signcsr_keyfile'}, &ui_textbox("keycertfile", $in{'keycertfile'}, 40), undef, $valign_middle);
|
||||
print &ui_table_row($text{'signcsr_keycertfile'}, &ui_textbox("cacertfile", $in{'cacertfile'}, 40), undef, $valign_middle);
|
||||
print &ui_table_row($text{'signcsr_keyfile'}, &ui_textbox("cakeyfile", $in{'cakeyfile'}, 40), undef, $valign_middle);
|
||||
print &ui_table_row(&ui_link("/help.cgi/certmgr/signcsr_ca_pass",
|
||||
"<b>$text{'signcsr_ca_passphrase'}</b>", undef,
|
||||
"onClick='window.open(\"/help.cgi/certmgr/signcsr_ca_pass\", \"help\", \"toolbar=no,menubar=no,scrollbars=yes,width=400,height=300,resizable=yes\"); return false;'"),
|
||||
@@ -77,9 +78,12 @@ sub show_cert_info {
|
||||
my $certdata=$_[1];
|
||||
my %issuer;
|
||||
my %subject;
|
||||
my %v3ext;
|
||||
my $isreq=0;
|
||||
my @gr;
|
||||
my @fields=('CN','O','OU','L','ST','C');
|
||||
my $field;
|
||||
my $rv = "";
|
||||
if ($certdata=~/^\s*Certificate\s+Request:.*$/mi) {$isreq=1;}
|
||||
foreach $field (@fields){
|
||||
if ($certdata=~/^\s*Issuer:.*?\s+$field=(.*?)(, [A-Z]{1,2}|\/\w+=|$)/m) { $issuer{$field}=$1; }
|
||||
if ($certdata=~/^\s*Subject:.*?\s+$field=(.*?)(, [A-Z]{1,2}|\/\w+=|$)/m) { $subject{$field}=$1; }
|
||||
@@ -89,10 +93,19 @@ sub show_cert_info {
|
||||
if ($certdata=~/^\s*Subject:.*?\/Email=(\S*?)(,\s*|$)/m) { $subject{'emailAddress'}=$1;}
|
||||
if ($certdata=~/^\s*Not\s*After\s*:\s*(.*?)\s*$/m) { $subject{'expires'}=$1;}
|
||||
if ($certdata=~/^\s*Not\s*Before\s*:\s*(.*?)\s*$/m) { $subject{'issued'}=$1;}
|
||||
if ($certdata=~/^\s*MD5\s*Fingerprint=(.*?)\s*$/m) { $subject{'md5fingerprint'}=$1;}
|
||||
if ($certdata=~/^\s*(\S*)\s*Public\s*Key:\s*\((.*?)\s*bit\)\s*$/m) { $subject{'keytype'}=$1; $subject{'keysize'}=$2;}
|
||||
if ($certdata=~/^\s*Modulus\s*\(\d*\s*bit\):\s*((([0-9a-fA-F]{2}:)*\s*)*[0-9a-fA-F]{2})/ms) { $subject{'modulus'}=$1; }
|
||||
if ($certdata=~/^\s*MD5\s+Fingerprint=(.*?)\s*$/m) { $subject{'md5fingerprint'}=$1;}
|
||||
if ($certdata=~/^\s*SHA1\s+Fingerprint=(.*?)\s*$/m) { $subject{'sha1fingerprint'}=$1;}
|
||||
if ($certdata=~/^\s*SHA256\s+Fingerprint=(.*?)\s*$/m) { $subject{'sha256fingerprint'}=$1;}
|
||||
if ($certdata=~/^\s*Public\s+Key\s+Algorithm:\s*(.*?)\s*$/mi) { $subject{'keytype'}=$1;}
|
||||
if ($certdata=~/^\s*Public-Key:\s*\(\s*(\S*?)\s*bit\s*\)\s*$/m) { $subject{'keysize'}=$1;}
|
||||
if ($certdata=~/^\s*Modulus:\s*((([0-9a-fA-F]{2}:)*\s*)*[0-9a-fA-F]{2})/ms) { $subject{'modulus'}=$1; }
|
||||
if ($certdata=~/^\s*Exponent:\s*(.*?)\s*?$/m) { $subject{'exponent'}=$1; }
|
||||
if ($certdata=~/^\s*X509v3 Subject Alternative Name:\s*(.*?)\s*?$/m) { $v3ext{'san'}=$1; }
|
||||
if ($certdata=~/^\s*Serial\s+Number:\s*((([0-9a-fA-F]{2}:)*\s*)*[0-9a-fA-F]{2})\s+/ms) { $subject{'serial'}=$1;}
|
||||
if (!$subject{'serial'}) {
|
||||
if ($certdata=~/^\s*Serial\s+Number:\s*([0-9]+)\s*\(/ms) { $subject{'serial'}=$1;}
|
||||
}
|
||||
if ($certdata=~/^\s*Signature\s+Algorithm:\s*(.*)$/mi) { $subject{'sigalgorithm'}=$1;}
|
||||
if ($subject{'L'} && ($subject{'ST'} || $subject{'C'})) {$subject{'L'}.=',';} #Append commas
|
||||
if ($subject{'ST'} && $subject{'C'}) {$subject{'ST'}.=',';} #Append commas
|
||||
if ($issuer{'L'} && ($issuer{'ST'} || $issuer{'C'})) {$issuer{'L'}.=',';} #Append commas
|
||||
@@ -100,30 +113,86 @@ sub show_cert_info {
|
||||
$subject{'modulus'}=~s/$/<\/code><br>/msg;
|
||||
$subject{'modulus'}=~s/^/<code>/msg;
|
||||
$subject{'modulus'}=~s/\s+//msg;
|
||||
$rv .= "<table width=100%>\n";
|
||||
$rv .= "<tr><td width=50%><b>$text{'certmgrlib_subject'}</b></td><td width=50%><b>$text{'certmgrlib_issuer'}</b></td></tr>\n";
|
||||
$rv .= "<tr><td>$subject{'CN'}</td><td>$issuer{'CN'}</td></tr>\n";
|
||||
$rv .= "<tr><td>$subject{'O'}</td><td>$issuer{'O'}</td></tr>\n";
|
||||
$rv .= "<tr><td>$subject{'OU'}</td><td>$issuer{'OU'}</td></tr>\n";
|
||||
$rv .= "<tr><td>$subject{'L'} $subject{'ST'} $subject{'C'}</td><td>$issuer{'L'} $issuer{'ST'} $issuer{'C'}</td></tr>\n";
|
||||
$rv .= "<tr><td>$subject{'emailAddress'}</td><td>$issuer{'emailAddress'}</td></tr>\n";
|
||||
|
||||
push(@gr, '<span style="font-weight:bold;">'.$text{'certmgrlib_subject'}.'</span>');
|
||||
push(@gr, '');
|
||||
push(@gr, $text{'view_cn'});
|
||||
push(@gr, $subject{'CN'});
|
||||
if ($subject{'O'}) {
|
||||
push(@gr, $text{'view_o'});
|
||||
push(@gr, $subject{'O'});
|
||||
}
|
||||
if ($subject{'OU'}){
|
||||
push(@gr, $text{'view_ou'});
|
||||
push(@gr, $subject{'OU'});
|
||||
}
|
||||
if ($subject{'L'} || $subject{'ST'} || $subject{'C'}) {
|
||||
push(@gr, $text{'view_location'});
|
||||
push(@gr, $subject{'L'}.$subject{'ST'}.$subject{'C'});
|
||||
}
|
||||
if ($subject{'emailAddress'}){
|
||||
push(@gr, $text{'view_email'});
|
||||
push(@gr, $subject{'emailAddress'});
|
||||
}
|
||||
if ($v3ext{'san'}){
|
||||
push(@gr, "subjectAltName");
|
||||
push(@gr, $v3ext{'san'});
|
||||
}
|
||||
if ($subject{'issued'}){
|
||||
$rv .= "<tr><td colspan=2>$text{'issued_on'} $subject{'issued'}</td></tr>\n";
|
||||
$rv .= "<tr><td colspan=2>$text{'expires_on'} $subject{'expires'}</td></tr>\n";
|
||||
}
|
||||
if ($full){
|
||||
$rv .= "<tr><td>$text{'keysize'}</td><td>$subject{'keysize'}</td></tr>\n";
|
||||
$rv .= "<tr><td>$text{'keytype'}</td><td>$subject{'keytype'}</td></tr>\n";
|
||||
}
|
||||
if ($full){
|
||||
$rv .= "<tr><td>$text{'publicExponent'}</td><td>$subject{'exponent'}</td></tr>\n";
|
||||
$rv .= "<tr><td colspan=2>$text{'modulus'}:<br>$subject{'modulus'}</td></tr>\n";
|
||||
push(@gr, $text{'issued_on'});
|
||||
push(@gr, $subject{'issued'});
|
||||
push(@gr, $text{'expires_on'});
|
||||
push(@gr, $subject{'expires'});
|
||||
}
|
||||
if ($subject{'md5fingerprint'}){
|
||||
$rv .= "<tr><td colspan=2>$text{'md5fingerprint'}:<br>$subject{'md5fingerprint'}</td></tr>\n";
|
||||
push(@gr, $text{'md5fingerprint'});
|
||||
push(@gr, $subject{'md5fingerprint'});
|
||||
}
|
||||
$rv .= "</table>\n";
|
||||
return $rv;
|
||||
if ($subject{'sha1fingerprint'}){
|
||||
push(@gr, $text{'sha1fingerprint'});
|
||||
push(@gr, $subject{'sha1fingerprint'});
|
||||
}
|
||||
if ($subject{'sha256fingerprint'}){
|
||||
push(@gr, $text{'sha256fingerprint'});
|
||||
push(@gr, $subject{'sha256fingerprint'});
|
||||
}
|
||||
if ($full) {
|
||||
if ($subject{'serial'}) {
|
||||
push(@gr, $text{'view_serial'});
|
||||
push(@gr, $subject{'serial'});
|
||||
}
|
||||
if ($subject{'sigalgorithm'}) {
|
||||
push(@gr, $text{'view_sig_algorithm'});
|
||||
push(@gr, $subject{'sigalgorithm'});
|
||||
}
|
||||
push(@gr, $text{'keysize'});
|
||||
push(@gr, $subject{'keysize'});
|
||||
push(@gr, $text{'keytype'});
|
||||
push(@gr, $subject{'keytype'});
|
||||
push(@gr, $text{'publicExponent'});
|
||||
push(@gr, $subject{'exponent'});
|
||||
push(@gr, $text{'modulus'});
|
||||
push(@gr, $subject{'modulus'});
|
||||
}
|
||||
if (!$isreq) {
|
||||
push(@gr, '<br /><span style="font-weight:bold;">'.$text{'certmgrlib_issuer'}.'</span>');
|
||||
push(@gr, '');
|
||||
push(@gr, $text{'view_cn'});
|
||||
push(@gr, $issuer{'CN'});
|
||||
if ($issuer{'O'}) {
|
||||
push(@gr, $text{'view_o'});
|
||||
push(@gr, $issuer{'O'});
|
||||
}
|
||||
if ($issuer{'OU'}){
|
||||
push(@gr, $text{'view_ou'});
|
||||
push(@gr, $issuer{'OU'});
|
||||
}
|
||||
if ($issuer{'L'} || $issuer{'ST'} || $issuer{'C'}) {
|
||||
push(@gr, $text{'view_location'});
|
||||
push(@gr, $issuer{'L'}.$issuer{'ST'}.$issuer{'C'});
|
||||
}
|
||||
}
|
||||
return &ui_grid_table(\@gr, 2, undef, ['style="padding:0;"', 'style="padding:0 0 0.5% 3%;width:75%;"']);
|
||||
}
|
||||
|
||||
sub show_key_info {
|
||||
@@ -155,6 +224,79 @@ sub show_key_info {
|
||||
return $rv;
|
||||
}
|
||||
|
||||
sub show_crl_info {
|
||||
my $full=$_[0];
|
||||
my $crldata=$_[1];
|
||||
my %issuer;
|
||||
my %v3ext;
|
||||
my ($ndx, $pos);
|
||||
my $isreq=0;
|
||||
my @gr;
|
||||
my @fields=('CN','O','OU','L','ST','C');
|
||||
my $field;
|
||||
foreach $field (@fields){
|
||||
if ($crldata=~/^\s*Issuer:.*?\/$field=(.*?)(, [A-Z]{1,2}|\/\w+=|$)/m) { $issuer{$field}=$1; }
|
||||
}
|
||||
if ($crldata=~/^\s*Signature\s+Algorithm:\s*(.*)$/mi) { $issuer{'sigalgorithm'}=$1;}
|
||||
if ($crldata=~/^\s*Last\s+Update:\s*(.*?)\s*?$/m) { $v3ext{'lastupdate'}=$1; }
|
||||
if ($crldata=~/^\s*Next\s+Update:\s*(.*?)\s*?$/m) { $v3ext{'nextupdate'}=$1; }
|
||||
if ($crldata=~/^\s*X509v3 CRL Number:\s*(.*?)\s*?$/m) { $v3ext{'crlnum'}=$1; }
|
||||
if ($issuer{'L'} && ($issuer{'ST'} || $issuer{'C'})) {$issuer{'L'}.=',';} #Append commas
|
||||
if ($issuer{'ST'} && $issuer{'C'}) {$issuer{'ST'}.=',';} #Append commas
|
||||
push(@gr, '<span style="font-weight:bold;">'.$text{'crl'}.'</span>');
|
||||
push(@gr, '');
|
||||
push(@gr, $text{'view_cn'});
|
||||
push(@gr, $issuer{'CN'});
|
||||
if ($issuer{'O'}) {
|
||||
push(@gr, $text{'view_o'});
|
||||
push(@gr, $issuer{'O'});
|
||||
}
|
||||
if ($issuer{'OU'}){
|
||||
push(@gr, $text{'view_ou'});
|
||||
push(@gr, $issuer{'OU'});
|
||||
}
|
||||
if ($issuer{'L'} || $issuer{'ST'} || $issuer{'C'}) {
|
||||
push(@gr, $text{'view_location'});
|
||||
push(@gr, $issuer{'L'}.$issuer{'ST'}.$issuer{'C'});
|
||||
}
|
||||
if ($issuer{'sigalgorithm'}) {
|
||||
push(@gr, $text{'view_sig_algorithm'});
|
||||
push(@gr, $issuer{'sigalgorithm'});
|
||||
}
|
||||
if ($v3ext{'lastupdate'}) {
|
||||
push(@gr, $text{'view_last_update'});
|
||||
push(@gr, $v3ext{'lastupdate'});
|
||||
}
|
||||
if ($v3ext{'nextupdate'}) {
|
||||
push(@gr, $text{'view_next_update'});
|
||||
push(@gr, $v3ext{'nextupdate'});
|
||||
}
|
||||
if ($v3ext{'crlnum'}) {
|
||||
push(@gr, $text{'view_crl_number'});
|
||||
push(@gr, $v3ext{'crlnum'});
|
||||
}
|
||||
if ($full) {
|
||||
push(@gr, "$text{'view_revoked_certs'}:");
|
||||
push(@gr, "");
|
||||
$ndx = index($crldata, "Serial Number:");
|
||||
while ($ndx gt 0) {
|
||||
$crldata = substr($crldata, $ndx);
|
||||
$crldata=~/^\s*Serial Number:\s*(.*)$/mi;
|
||||
push(@gr, "<span style=\"padding-left:10%;\">$text{'view_serial'}</span>");
|
||||
push(@gr, $1);
|
||||
$crldata=~/^\s*Revocation Date:\s*(.*)$/mi;
|
||||
push(@gr, "<span style=\"padding-left:10%;\">$text{'view_revoke_date'}</span>");
|
||||
push(@gr, $1);
|
||||
$crldata=~/^\s*X509v3 CRL Reason Code:\s*(.*)$/mi;
|
||||
push(@gr, "<span style=\"padding-left:10%;\">$text{'view_revoke_reason'}</span>");
|
||||
push(@gr, $1);
|
||||
$ndx = index($crldata, "Serial Number:", $ndx + 1);
|
||||
}
|
||||
}
|
||||
|
||||
return &ui_grid_table(\@gr, 2, undef, ['style="padding:0;"', 'style="padding:0 0 0.5% 3%;width:65%;"']);
|
||||
}
|
||||
|
||||
sub pem_or_der{
|
||||
my $filename=$_[0];
|
||||
my $filetype=$_[1];
|
||||
|
||||
@@ -103,12 +103,15 @@ prime1=Primzahl 1
|
||||
prime2=Primzahl 2
|
||||
privateExponent=Privater Exponent
|
||||
publicExponent=Öffentlicher Exponent
|
||||
sha1fingerprint=SHA-1 Fingerprint
|
||||
sha256fingerprint=SHA-256 Fingerprint
|
||||
signcsr_ca_passphrase=CA Passphrase
|
||||
signcsr_csrfile=CSR Dateiname
|
||||
signcsr_days=Anzahl der Tage der Zertifizierung für
|
||||
signcsr_desc=Auf dieser Seite können Sie eine signiertes CSR von jemand anderem mit einem eigenen privaten Schlüssel signieren.
|
||||
signcsr_e_nocsrfile=Keinen CSR Dateinamen eingegeben
|
||||
signcsr_e_nokeyfile=Kein CA privater Schlüssel oder Zertifikats-Datei eingegeben
|
||||
signcsr_e_nopassword=Es wurde kein CA-Kennwort eingegeben
|
||||
signcsr_e_nosignfile=Kein signiertes Zertifikats-Dateiname eingegeben
|
||||
signcsr_e_signfailed=Fehler, signiertes Zertifikat nicht generiert
|
||||
signcsr_generate=Signiere Zertifikat
|
||||
@@ -121,13 +124,26 @@ signcsr_title=Signiere Certificate Signing Request
|
||||
signcsr_worked=Signiere Zertifikat generiert
|
||||
st=Staat oder Provinz (vollständiger Name)
|
||||
view_choose=Wähle
|
||||
view_cn=Common Name
|
||||
view_crl_number=CRL Nummer
|
||||
view_delete=Lösche
|
||||
view_deleted=Datei erfolgreich gelöscht
|
||||
view_download=Download
|
||||
view_e_nofile=Datei nicht gefunden oder ist keine normale Datei
|
||||
view_e_not_deleted=Fehler: Problem beim Löschen der Datei
|
||||
view_email=E-Mail-Adresse
|
||||
view_last_update=Letztes Update
|
||||
view_location=Lokalität
|
||||
view_next_update=Weiter Update
|
||||
view_o=Organisationsname
|
||||
view_ou=Organisationseinheit Name
|
||||
view_pkcs12=Als PKCS12, mit Passwort:
|
||||
view_revoke_date=Widerrufsdatum
|
||||
view_revoke_reason=Widerrufsgrund
|
||||
view_revoked_certs=Widerrufsbescheinigungen
|
||||
view_select=Bitte wähle eine Datei zum Anzeigen
|
||||
view_serial=Ordnungsnummer
|
||||
view_sig_algorithm=Signaturalgorithmus
|
||||
view_title=Zeige Zertifikat/CSR/Schlüssel
|
||||
view_update=Aktualisieren
|
||||
view_view=Zeige
|
||||
|
||||
16
certmgr/lang/en
Executable file → Normal file
16
certmgr/lang/en
Executable file → Normal file
@@ -20,6 +20,8 @@ keytype=Key Type
|
||||
issued_on=Issued on
|
||||
expires_on=Expires on
|
||||
md5fingerprint=MD5 Fingerprint
|
||||
sha1fingerprint=SHA-1 Fingerprint
|
||||
sha256fingerprint=SHA-256 Fingerprint
|
||||
|
||||
modulus=Modulus (from public key)
|
||||
publicExponent=Public Exponent
|
||||
@@ -102,6 +104,19 @@ view_deleted=File deleted sucessfully
|
||||
view_e_not_deleted=Error: Problem deleting file
|
||||
view_e_nofile=File not found or not a regular file
|
||||
view_wildcard=File Wildcard
|
||||
view_cn=Common Name
|
||||
view_o=Organization
|
||||
view_ou=Organization Unit
|
||||
view_email=Email Address
|
||||
view_location=Location
|
||||
view_serial=Serial Number
|
||||
view_sig_algorithm=Signature Algorithm
|
||||
view_last_update=Last Update
|
||||
view_next_update=Next Update
|
||||
view_revoked_certs=Revoked Certificates
|
||||
view_revoke_date=Revocation Date
|
||||
view_revoke_reason=Revocation Reason
|
||||
view_crl_number=CRL Number
|
||||
|
||||
import_title=Import Key or Signed Certificate
|
||||
import_e_nodir=No directory selected
|
||||
@@ -135,6 +150,7 @@ signcsr_generate=Sign Certificate
|
||||
signcsr_e_nocsrfile=No CSR filename entered
|
||||
signcsr_e_nosignfile=No signed certificate filename entered
|
||||
signcsr_e_nokeyfile=No CA private key file or certificate file entered
|
||||
signcsr_e_nopassword=No CA private key password entered
|
||||
signcsr_e_signfailed=Error, signed certificate not generated
|
||||
signcsr_worked=Signed certificate generated
|
||||
signcsr_saved_cert=The certificate was saved as
|
||||
|
||||
39
certmgr/lang/es
Executable file → Normal file
39
certmgr/lang/es
Executable file → Normal file
@@ -20,6 +20,8 @@ keytype=Tipo de llave
|
||||
issued_on=Fecha de certificación
|
||||
expires_on=Fecha de vencimiento
|
||||
md5fingerprint=Huella dactilar MD5
|
||||
sha1fingerprint=Huella dactilar SHA-1
|
||||
sha256fingerprint=Huella dactilar SHA-256
|
||||
|
||||
modulus=Modulus (del llave publico)
|
||||
publicExponent=Exponente Publico
|
||||
@@ -86,17 +88,30 @@ manage_decrypt=Decrypt Private Key
|
||||
manage_changepw=Change Password of Private Key
|
||||
manage_delete=Delete Certificate
|
||||
|
||||
view_title=View Certificate/CSR/Key
|
||||
view_view=View
|
||||
view_update=Update
|
||||
view_download=Download
|
||||
view_delete=Delete
|
||||
view_select=Please select a file to view
|
||||
view_choose=Choose
|
||||
view_deleted=File deleted sucessfully
|
||||
view_e_not_deleted=Error: Problem deleting file
|
||||
view_e_nofile=File not found or not a regular file
|
||||
view_wildcard=File Wildcard
|
||||
view_title=Ver el Certificado/CSR/Key
|
||||
view_view=Ver
|
||||
view_update=Actualizar
|
||||
view_download=Descargar
|
||||
view_delete=Borrar
|
||||
view_select=Por favor seleccione un archivo para ver
|
||||
view_choose=Escoger
|
||||
view_deleted=Archivo eliminado correctamente
|
||||
view_e_not_deleted=Error: Problema al eliminar el archivo
|
||||
view_e_nofile=Archivo no encontrado o no es un archivo regular
|
||||
view_wildcard=Archivo comodín
|
||||
view_cn=Nombre Común
|
||||
view_o=Organización
|
||||
view_ou=Unidad de Organización
|
||||
view_email=Dirección de email
|
||||
view_location=Locación
|
||||
view_serial=número de serie
|
||||
view_sig_algorithm=Algoritmo de firma
|
||||
view_last_update=última actualización
|
||||
view_next_update=Siguiente actualización
|
||||
view_revoked_certs=Certificados revocados
|
||||
view_revoke_date=Fecha de revocación
|
||||
view_revoke_reason=Razón de revocación
|
||||
view_crl_number=Número CRL
|
||||
|
||||
import_title=Import Key or Signed Certificate
|
||||
import_e_nodir=No directory selected
|
||||
@@ -114,3 +129,5 @@ import_upload_cert=Upload Certificate
|
||||
import_key_file=Key file to upload
|
||||
import_key_destination=Destination directory of key
|
||||
import_upload_key=Upload Key
|
||||
|
||||
signcsr_e_nopassword=No CA private key password entered
|
||||
|
||||
@@ -4,3 +4,4 @@ desc=PKI Certificate and Key Management
|
||||
name=certmgr
|
||||
version=1.8
|
||||
desc_de=PKI-Zertifikat und Schlüssel-Management
|
||||
desc_no=PKI Sertifikater og nøkler
|
||||
|
||||
36
certmgr/signcsr.cgi
Executable file → Normal file
36
certmgr/signcsr.cgi
Executable file → Normal file
@@ -15,7 +15,10 @@ if ($in{'submitted'} eq "sign") {
|
||||
if (!$in{'signfile'}) {
|
||||
$error.=$text{'signcsr_e_nosignfile'}."<br>\n";
|
||||
}
|
||||
if (!$in{'keyfile'} || !$in{'keycertfile'}) {
|
||||
if (!$in{'cakeyfile'}) {
|
||||
$error.=$text{'signcsr_e_nokeyfile'}."<br>\n";
|
||||
}
|
||||
if (!$in{'cacertfile'}) {
|
||||
$error.=$text{'signcsr_e_nokeyfile'}."<br>\n";
|
||||
}
|
||||
if (!$error) {
|
||||
@@ -27,8 +30,8 @@ if ($in{'submitted'} eq "sign") {
|
||||
$config{'incsr_filename'}; }
|
||||
if (!$in{'signfile'}) { $in{'signfile'}=$config{'ssl_cert_dir'}."/".
|
||||
$config{'sign_filename'}; }
|
||||
if (!$in{'keyfile'}) { $in{'keyfile'}=$config{'cakey_path'}; }
|
||||
if (!$in{'keycertfile'}) { $in{'keycertfile'}=$config{'cacert_path'};}
|
||||
if (!$in{'cacertfile'}) { $in{'cacertfile'}=$config{'cacert_path'}; }
|
||||
if (!$in{'cakeyfile'}) { $in{'cakeyfile'}=$config{'cakey_path'}; }
|
||||
if (!$in{'days'}) { $in{'days'}=$config{'default_days'}; }
|
||||
}
|
||||
|
||||
@@ -45,10 +48,12 @@ print &ui_hr();
|
||||
sub process{
|
||||
&foreign_require("webmin", "webmin-lib.pl");
|
||||
local %miniserv;
|
||||
local ($tempdir, $des, $out, $url);
|
||||
local $error=0;
|
||||
&get_miniserv_config(\%miniserv);
|
||||
if (!$miniserv{'ca'}) {
|
||||
&webmin::setup_ca();
|
||||
}
|
||||
}
|
||||
if ((-e $in{'signfile'})&&($in{'overwrite'} ne "yes")) {
|
||||
&overwriteprompt();
|
||||
print &ui_hr();
|
||||
@@ -57,11 +62,19 @@ sub process{
|
||||
}
|
||||
$tempdir = &tempname();
|
||||
mkdir($tempdir, 0700);
|
||||
if ($in{'password'}){ $des="-passin pass:".quotemeta($in{'password'}); }
|
||||
$out = `yes | $config{'openssl_cmd'} ca -in $in{'csrfile'} -out $in{'signfile'} -cert $in{'keycertfile'} -keyfile $in{'keyfile'} -outdir $tempdir -days $in{'days'} -config $config_directory/acl/openssl.cnf $des 2>&1`;
|
||||
if (keyfile_is_encrypted($in{'cakeyfile'})) {
|
||||
if ($in{'password'}) { $des="-passin pass:".quotemeta($in{'password'}); }
|
||||
else {
|
||||
print "<b>$text{'signcsr_e_signfailed'}</b>\n<pre>$text{'signcsr_e_nopassword'}</pre>\n";
|
||||
print &ui_hr();
|
||||
&footer("", $text{'index_return'});
|
||||
exit;
|
||||
}
|
||||
}
|
||||
$out = `yes | $config{'openssl_cmd'} ca -in $in{'csrfile'} -out $in{'signfile'} -cert $in{'cacertfile'} -keyfile $in{'cakeyfile'} -outdir $tempdir -days $in{'days'} -config $config{'ssl_cnf_file'} $des 2>&1`;
|
||||
|
||||
system("rm -rf $tempdir");
|
||||
if (!-e $in{'csrfile'}) {
|
||||
if ($out =~ /^ERROR(.*$)/mi || $out =~ /:error:/mi) {
|
||||
$error=$out;
|
||||
} else{
|
||||
$error=0;
|
||||
@@ -109,3 +122,12 @@ sub overwriteprompt{
|
||||
print &ui_table_end();
|
||||
|
||||
}
|
||||
|
||||
sub keyfile_is_encrypted{
|
||||
my $key=$_[0];
|
||||
my $encrypted=0;
|
||||
open(KFILE,$key)||return(0);
|
||||
while(<KFILE>){ if (/^Proc.*ENCRYPTED.*$/mi) { $encrypted=1; last; } }
|
||||
close(KFILE);
|
||||
return($encrypted);
|
||||
}
|
||||
|
||||
36
certmgr/view.cgi
Executable file → Normal file
36
certmgr/view.cgi
Executable file → Normal file
@@ -38,12 +38,15 @@ if (($in{'filename'}) && ($in{'view'} eq $text{'view_view'})) {
|
||||
}
|
||||
while(<FILE>){ $buffer.=$_;}
|
||||
if ($buffer=~/^\s*-+BEGIN\s*RSA\s*PRIVATE\s*KEY-*\s*$/mi) { $key=1; }
|
||||
if ($buffer=~/^\s*-+BEGIN\s*PRIVATE\s*KEY-*\s*$/mi) { $key=1; }
|
||||
if ($buffer=~/^\s*-+BEGIN\s*CERTIFICATE-*\s*$/mi) { $cert=1; }
|
||||
if ($buffer=~/^\s*-+BEGIN\s*CERTIFICATE\s*REQUEST-*\s*$/mi) { $csr=1; }
|
||||
if ($buffer=~/^\s*-+BEGIN\s*X509\s*CRL-*\s*$/mi) { $crl=1; }
|
||||
if (($key)&&($cert)) {$in{'keycertfile'}=$in{'filename'};}
|
||||
elsif ($key) {$in{'keyfile'}=$in{'filename'};}
|
||||
elsif ($cert) {$in{'certfile'}=$in{'filename'};}
|
||||
elsif ($csr) {$in{'csrfile'}=$in{'filename'};}
|
||||
elsif ($crl) {$in{'crlfile'}=$in{'filename'};}
|
||||
else {
|
||||
print "$text{'e_file'}<br>\n$text{'e_notcert'}\n<p>\n";
|
||||
&footer("", $text{'index_return'});
|
||||
@@ -135,6 +138,25 @@ if ($in{'keycertfile'}) {
|
||||
exit;
|
||||
}
|
||||
|
||||
if ($in{'crlfile'}) {
|
||||
if ($in{'dl'} eq 'yes') {
|
||||
# Just output in PEM format
|
||||
&output_cert($in{'crlfile'});
|
||||
}
|
||||
|
||||
open(OPENSSL,"$config{'openssl_cmd'} crl -in $in{'crlfile'} -text -noout|");
|
||||
while(<OPENSSL>){ $buffer.=$_; }
|
||||
close(OPENSSL);
|
||||
|
||||
print &ui_table_start($in{'crlfile'}, "width=60%", 2);
|
||||
print &ui_table_row(undef, (!$buffer ? $text{'e_file'} : show_crl_info(1,$buffer) ) );
|
||||
print &ui_table_end()."<br>";
|
||||
&download_form("crlfile", $in{'crlfile'}, "CRL");
|
||||
print &ui_hr();
|
||||
&footer("", $text{'index_return'});
|
||||
exit;
|
||||
}
|
||||
|
||||
print &ui_form_start("view.cgi", "post");
|
||||
print &ui_table_start($text{'view_select'}, undef, 2);
|
||||
print &ui_table_row($text{'view_wildcard'}.": ".&ui_textbox("wildcard", $in{'wildcard'}), &ui_submit($text{'view_update'},"update"), undef, $valign_middle);
|
||||
@@ -194,12 +216,14 @@ $rv1 .= &ui_hidden($mode, $keyfile);
|
||||
$rv1 .= &ui_submit("$text{'view_download'} $suffix");
|
||||
$rv1 .= "</form>";
|
||||
|
||||
$rv2 = "<form id='view_p12filename' action='view.cgi/$p12filename' method=post>";
|
||||
$rv2 .= &ui_hidden("pkcs12", "yes");
|
||||
$rv2 .= &ui_hidden($mode, $keyfile);
|
||||
$rv2 .= &ui_submit("$text{'view_download'} $suffix $text{'view_pkcs12'}");
|
||||
$rv2 .= &ui_password("pass","",20);
|
||||
$rv2 .= "</form>";
|
||||
if ($mode ne "crlfile") {
|
||||
$rv2 = "<form id='view_p12filename' action='view.cgi/$p12filename' method=post>";
|
||||
$rv2 .= &ui_hidden("pkcs12", "yes");
|
||||
$rv2 .= &ui_hidden($mode, $keyfile);
|
||||
$rv2 .= &ui_submit("$text{'view_download'} $suffix $text{'view_pkcs12'}");
|
||||
$rv2 .= &ui_password("pass","",20);
|
||||
$rv2 .= "</form>";
|
||||
}
|
||||
|
||||
$rv3 = "<form id='view' action='view.cgi' method=post>";
|
||||
$rv3 .= &ui_hidden("delete", "yes");
|
||||
|
||||
@@ -23,8 +23,8 @@ print &ui_table_start(undef, undef, 2);
|
||||
|
||||
if ($access{'lang'}) {
|
||||
# Show personal language
|
||||
my @langs = &list_languages();
|
||||
my $glang = $gconfig{"lang"} || $default_lang;
|
||||
my @langs = &list_languages($user->{'lang'} || $glang);
|
||||
my ($linfo) = grep { $_->{'lang'} eq $glang } @langs;
|
||||
print &ui_table_row($text{'index_lang'},
|
||||
&ui_radio("lang_def", $user->{'lang'} ? 0 : 1,
|
||||
|
||||
@@ -1,2 +1,11 @@
|
||||
line1=Opcions de Mostra,11
|
||||
sort_mode=Ordena els hosts per,1,1-Nom de host,0-Ordre d'addició,2-Descripció
|
||||
table_mode=Mostra els hosts com a,1,1-Taula,0-Icones
|
||||
conf_host_links=Proporciona un enllaç per modificar el host,1,1-Sí,0-No
|
||||
line2=Opcions d'Usuaris i Grups,11
|
||||
conf_add_user=Permet afegir usuaris,1,1-Sí,0-No
|
||||
conf_add_group=Permet afegir grups,1,1-Sí,0-No
|
||||
conf_find_user=Permet cercar a la base de dades d'usuaris,1,1-Sí,0-No
|
||||
conf_find_group=Permet cercar a la base de dades de grups,1,1-Sí,0-No
|
||||
conf_allow_refresh=Permet refrescar les llistes d'usuaris i grups,1,1-Sí,0-No
|
||||
conf_allow_sync=Permet la sincronització del servidor,1,1-Sí,0-No
|
||||
|
||||
@@ -338,7 +338,7 @@ foreach $h (@hosts) {
|
||||
# Can just run RPM command
|
||||
# XXX doesn't actually check output!
|
||||
&remote_eval($s->{'host'}, "webmin", "system(\"rpm --import \$root_directory/webmin/jcameron-key.asc >/dev/null 2>&1\")");
|
||||
($out, $ex) = &remote_eval($s->{'host'}, "webmin", "\$out = `rpm -U --ignoreos --ignorearch '$rfile' >/dev/null 2>&1 </dev/null`; (\$out, \$?)");
|
||||
($out, $ex) = &remote_eval($s->{'host'}, "webmin", "\$out = `rpm -U --ignoreos --ignorearch --nodeps '$rfile' >/dev/null 2>&1 </dev/null`; (\$out, \$?)");
|
||||
&remote_eval($s->{'host'}, "webmin", "unlink('$rfile')")
|
||||
if ($host_need_unlink);
|
||||
if ($ex) {
|
||||
|
||||
@@ -5,9 +5,11 @@
|
||||
|
||||
@ARGV >= 2 || die "usage: create-module.pl [--dir name] <file.wbm> <module>[/version] ..";
|
||||
|
||||
my $pwd;
|
||||
chop($pwd = `pwd`);
|
||||
|
||||
# Parse command-line options
|
||||
my @exclude;
|
||||
while(@ARGV) {
|
||||
if ($ARGV[0] eq "--dir") {
|
||||
shift(@ARGV);
|
||||
@@ -17,17 +19,21 @@ while(@ARGV) {
|
||||
shift(@ARGV);
|
||||
$createsig = 1;
|
||||
}
|
||||
elsif ($ARGV[0] eq "--exclude") {
|
||||
shift(@ARGV);
|
||||
push(@exclude, shift(@ARGV));
|
||||
}
|
||||
else {
|
||||
last;
|
||||
}
|
||||
}
|
||||
|
||||
$file = shift(@ARGV);
|
||||
my $file = shift(@ARGV);
|
||||
if ($file !~ /^\//) {
|
||||
$file = "$pwd/$file";
|
||||
}
|
||||
unlink($file);
|
||||
foreach $m (@ARGV) {
|
||||
foreach my $m (@ARGV) {
|
||||
# Parse module and forced version
|
||||
$m =~ s/\/$//;
|
||||
if ($m =~ /^(.*)\/(.*)$/) {
|
||||
@@ -46,6 +52,9 @@ foreach $m (@ARGV) {
|
||||
$copydir = "/tmp/create-module/$subdir";
|
||||
system("rm -rf $copydir");
|
||||
system("cp -r -L $mod $copydir 2>/dev/null || cp -R -L $mod $copydir");
|
||||
foreach my $e (@exclude) {
|
||||
system("find $copydir -name ".quotemeta($e)." | xargs rm -rf");
|
||||
}
|
||||
|
||||
# Find type from .info file
|
||||
undef(%minfo);
|
||||
|
||||
@@ -1,26 +1,26 @@
|
||||
line1=Konfigurierbare Einstellungen,11
|
||||
max_len=Maximale Kommandozeilenanzahl die angezeigt wird,3,Unbegrenzt
|
||||
max_jobs=Maximale Anzahl von Cronjobs anzeigen,3,Unbegrenzt
|
||||
show_time=Zeige Prozess-Zeiten?,1,1-Ja,0-Nein
|
||||
max_len=Maximale Anzahl der anzuzeigenden Befehlszeilen,3,Unbegrenzt
|
||||
max_jobs=Maximale Anzahl der anzuzeigenden Cronjobs,3,Unbegrenzt
|
||||
show_time=Zeige Prozess-Zeiten?,1,1-Ja,0-Nein
|
||||
show_comment=Job Kommentare anzeigen?,1,1-Ja,0-Nein
|
||||
show_run=Zeige den Status aller Aufträge an?,1,2-Ja, und erlaube Start und Stop der Aufträge,1-Ja,0-Nein
|
||||
show_run=Status aller Aufträge anzeigen?,1,2-Ja, und erlaube Start und Stop der Aufträge,1-Ja,0-Nein
|
||||
match_mode=Finde Prozesse durch,1,1-Kommando,0-Kommando und Argumente
|
||||
match_user=Benutzernamen zusätzlich ermitteln beim Finden von Prozessen?,1,1-Ja,0-Nein
|
||||
kill_subs=Alle Unterprozesse zusätzlich zum Prozess selbst töten?,1,1-Ja,0-Nein
|
||||
match_user=Benutzernamen ermitteln beim Finden von Prozessen?,1,1-Ja,0-Nein
|
||||
kill_subs=Alle Unterprozesse des Prozesses töten?,1,1-Ja,0-Nein
|
||||
hourly_only=Cronjobs auf 1x pro Stunde begrenzen?,1,0-Nein,1-Ja
|
||||
add_file=Fügt neue Jobs zu Datei hinzu,3,Reguläre crontab-Datei
|
||||
line2=Systemkonfiguration,11
|
||||
cron_dir=Crontab-Verzeichnis,0
|
||||
cron_get_command=Befehl zum Lesen der Cron-Aufträge eines Benutzers,0
|
||||
cron_edit_command=Befehl zum Bearbeiten der Cron-Aufträge eines Benutzers,0
|
||||
cron_copy_command=Befehl zum Akzeptieren eines Cron-Auftrags eines Benutzers auf stdin,0
|
||||
cron_delete_command=Befehl zum Löschen eines Cron-Auftrages eines Benutzers,0
|
||||
cron_input=Cron unterstützt Eingaben zu Cron-Aufträgen,1,1-Ja,0-Nein
|
||||
cron_dir=Crontab-Verzeichnis,0
|
||||
cron_get_command=Befehl zum Lesen der Cron-Aufträge eines Benutzers,0
|
||||
cron_edit_command=Befehl zum Bearbeiten der Cron-Aufträge eines Benutzers,0
|
||||
cron_copy_command=Befehl zum Akzeptieren eines Cron-Auftrags eines Benutzers auf stdin,0
|
||||
cron_delete_command=Befehl zum Löschen eines Cron-Auftrages eines Benutzers,0
|
||||
cron_input=Cron unterstützt Eingaben zu Cron-Aufträgen,1,1-Ja,0-Nein
|
||||
cron_allow_file=Datei die erlaubte Benutzer enthält,0
|
||||
cron_deny_file=Datei die abgelehnte Benutzer enthält,0
|
||||
cron_deny_all=Rechte ohne Allow- oder Deny-Dateien,1,0-Verweigere alle,1-Verweigere alle außer ROOT,2-Erlaube alle
|
||||
vixie_cron=Unterstützt Vixie-Cron-Erweiterungen,1,1-Ja,0-Nein
|
||||
system_crontab=Pfad zur Vixie-Cron System Crontab-Datei,0
|
||||
cron_deny_all=Rechte ohne Allow- oder Deny-Dateien,1,0-Verweigere alle,1-Verweigere alle außer ROOT,2-Erlaube alle
|
||||
vixie_cron=Unterstützt Vixie-Cron-Erweiterungen,1,1-Ja,0-Nein
|
||||
system_crontab=Pfad zur Vixie-Cron System Crontab-Datei,0
|
||||
single_file=Pfad zur Single-User-crontab-Datei,0
|
||||
cronfiles_dir=Pfad zum Verzeichnis mit zusätzlichen Cron-Dateien,3,Keiner
|
||||
run_parts=run-parts Befehl,0
|
||||
cronfiles_dir=Pfad zum Verzeichnis mit zusätzlichen Cron-Dateien,3,Keiner
|
||||
run_parts=run-parts Befehl,0
|
||||
|
||||
@@ -10,6 +10,7 @@ index_none3=Encara no tens cap treball cron.
|
||||
index_create=Crea una nou treball planificat amb cron.
|
||||
index_ecreate=Crea una nova variable d'entorn.
|
||||
index_allow=Controla l'accés dels usuaris als treballs cron.
|
||||
index_manual=Edita manualment els treballs cron.
|
||||
index_return=a la llista de cron
|
||||
index_env=Variable d'entorn
|
||||
index_move=Desplaça
|
||||
@@ -180,4 +181,12 @@ range_eend=Hi falta la data final de l'interval o b
|
||||
|
||||
delete_err=No s'han pogut suprimir els treballs Cron
|
||||
delete_enone=No has seleccionat res
|
||||
|
||||
manual_title=Edició Manual de Treballs Cron
|
||||
manual_edit=Fitxer cron a editar:
|
||||
manual_ok=Edita
|
||||
manual_editing=Utilitza la caixa de text de sota per editar el treballs Cronde $1. Ves amb compte, perquè Webmin no en farà cap validació!
|
||||
manual_efile=El fitxer seleccionat no és vàlid!
|
||||
manual_ecannot=No tens permís per editar manualment els treballs cron
|
||||
|
||||
__norefs=1
|
||||
|
||||
@@ -1,43 +1,43 @@
|
||||
desc_nl=Geplande Cron Taken
|
||||
desc_ko_KR.euc=¿¹¾àµÈ Cron ÀÛ¾÷
|
||||
risk=low medium high
|
||||
desc_ru_SU=òÁÓÐÉÓÁÎÉÅ ÚÁÄÁÎÉÊ Cron
|
||||
desc_zh_TW.Big5=©w®É°õ¦æ¤u§@ (Cron)
|
||||
desc_pl=Harmonogram zadañ Cron
|
||||
desc_de=Geplante Aufträge (Cron)
|
||||
name=Cron Manager
|
||||
desc_zh_CN=Cron ÈÎÎñµ÷¶È
|
||||
desc_pt=Tarefas Agendadas (Cron)
|
||||
category=system
|
||||
desc_tr=Zamanlandýrýlmýþ Görevler
|
||||
os_support=solaris slackware-linux redhat-linux mandrake-linux debian-linux suse-linux united-linux hpux freebsd osf1 irix unixware openserver macos open-linux turbo-linux openbsd corel-linux cobalt-linux aix netbsd msc-linux generic-linux gentoo-linux trustix-linux sol-linux coherent-linux openmamba-linux windows pardus-linux
|
||||
desc=Scheduled Cron Jobs
|
||||
desc_es=Tareas Planificadas (Cron)
|
||||
desc_sv=Schemalagda cronjobb
|
||||
desc_fr=Tâches Cron
|
||||
desc_ja_JP.euc=ͽÄêºÑ¤ß Cron ºî¶È
|
||||
desc_hu=Idõzitett futtatások (Cron)
|
||||
desc_ru_RU=Ðàñïèñàíèå çàäàíèé Cron
|
||||
desc_ca=Treballs Planificats Cron
|
||||
longdesc=Create, edit and delete Cron jobs.
|
||||
depends=proc
|
||||
readonly=1
|
||||
desc_zh_TW.UTF-8=定時執行工作 (Cron)
|
||||
desc_zh_CN.UTF-8=Cron 任务调度
|
||||
desc_ja_JP.UTF-8=予定済ã<CB86>¿ Cron 作æ¥
|
||||
desc_ko_KR.UTF-8=예약ë<C2BD>œ Cron 작업
|
||||
desc_sk=Cron Plánovaè úloh
|
||||
risk=low medium high
|
||||
desc=Scheduled Cron Jobs
|
||||
longdesc=Create, edit and delete Cron jobs.
|
||||
desc_nl=Geplande Cron Taken
|
||||
desc_ko_KR.euc=¿¹¾à µÈ Cron ÀÛ¾÷
|
||||
desc_ru_SU=òÃ<C2B2>ÓÃ<E2809C>ÉÓÃ<E2809C>ÎÉÅ ÚÃ<C5A1>ÄÃ<E2809E>ÎÉÊ Cron
|
||||
desc_zh_TW.Big5=©w®É°õ¦æ¤u§@ (Cron)
|
||||
desc_pl=Harmonogram zadañ Cron
|
||||
desc_zh_CN=Cron ÈÎÎñµ÷¶È
|
||||
desc_pt=Tarefas Agendadas (Cron)
|
||||
desc_tr=Zamanlandýrýlmýþ Görevler
|
||||
desc_es=Tareas Planificadas (Cron)
|
||||
desc_sv=Schemalagda cronjobb
|
||||
desc_fr=Tâches Cron
|
||||
desc_ja_JP.euc=Ã<>½ÄêºÑ¤ß Cron ºî¶È
|
||||
desc_hu=Idõzitett futtatások (Cron)
|
||||
desc_ru_RU=ö²ö<C2B2>ö“ö<E2809C>ö‰ö“ö<E2809C>öŽö‰ö… öšö<C5A1>ö„ö<E2809E>öŽö‰öŠ Cron
|
||||
desc_ca=Treballs Planificats Cron
|
||||
desc_zh_TW.UTF-8=定時執行工作 (Cron)
|
||||
desc_zh_CN.UTF-8=Cron 任务调度
|
||||
desc_ja_JP.UTF-8=予定済ãÂ<C2A3>¿ Cron 作æ¥Â
|
||||
desc_ko_KR.UTF-8=예약ëÂ<C2AB>Å“ Cron 작업
|
||||
desc_sk=Cron Plánovaè úloh
|
||||
desc_it=Pianificazione Cron Job
|
||||
desc_cz=Cron Plánovaè úloh
|
||||
desc_ru.UTF-8=РаÑ<EFBFBD>пиÑ<EFBFBD>ание заданий Cron
|
||||
desc_hu.UTF-8=Tervezett Cron munkák
|
||||
desc_cz.UTF-8=Cron PlánovaÄ<EFBFBD> úloh
|
||||
desc_pl.UTF-8=Harmonogram zadań crona
|
||||
desc_sk.UTF-8=Cron PlánovaÄ<EFBFBD> úloh
|
||||
desc_cz=Cron Plánovaè úloh
|
||||
desc_ru.UTF-8=Ã<EFBFBD> Ã<EFBFBD>°ÑÂ<EFBFBD>Ã<EFBFBD>¿Ã<EFBFBD>¸ÑÂ<EFBFBD>Ã<EFBFBD>°Ã<EFBFBD>½Ã<EFBFBD>¸Ã<EFBFBD>µ Ã<>·Ã<C2B7>°Ã<C2B0>´Ã<C2B4>°Ã<C2B0>½Ã<C2BD>¸Ã<C2B8>¹ Cron
|
||||
desc_hu.UTF-8=Tervezett Cron munkák
|
||||
desc_cz.UTF-8=Cron PlánovaÄÂ<EFBFBD> úloh
|
||||
desc_pl.UTF-8=Harmonogram zadań crona
|
||||
desc_sk.UTF-8=Cron PlánovaÄÂ<EFBFBD> úloh
|
||||
desc_no=Tidsplanlagte Cron jobber
|
||||
longdesc_hu=Idõzitett futtatások létrehozása, módosítása és törlése
|
||||
longdesc_hu=Idõzitett futtatások létrehozása, módosÃtása és törlése
|
||||
longdesc_ms_MY=Cipta, Ubah dan padam Tugas Cron.
|
||||
desc_ms_MY=Tugas Cron Berjadual
|
||||
longdesc_de=Erstellt, editiert und löscht Cron-Aufträge.
|
||||
longdesc_pl=Twórz, edytuj i usuwaj zadania Cron.
|
||||
longdesc_pl=Twórz, edytuj i usuwaj zadania Cron.
|
||||
longdesc_ca=Crea, edita i suprimeix treballs Cron.
|
||||
longdesc_de=Erzeugen und Bearbeiten von wiederkehrenden CRON-Aufträgen.
|
||||
longdesc_de.UTF-8=Erzeugen und Bearbeiten von wiederkehrenden CRON-Aufträgen.
|
||||
|
||||
@@ -53,7 +53,7 @@ ssl_title=Configuraci
|
||||
ssl_header=Opcions d'IMAP i POP3 en mode SSL
|
||||
ssl_key=Fitxer de claus privades SSL
|
||||
ssl_cert=Fitxer de certificats SSL
|
||||
ssl_ca=Fitxer de certificat CA SSL CA
|
||||
ssl_ca=Fitxer de certificat CA client SSL
|
||||
ssl_pass=Contrasenya del fitxer de claus
|
||||
ssl_prompt=No en cal cap
|
||||
ssl_regen=Interval entre regeneracions de paràmetres SSL
|
||||
@@ -63,7 +63,7 @@ ssl_plain=Desactiva l'autenticaci
|
||||
ssl_err=No s'ha pogut desar la configuració SSL
|
||||
ssl_ekey=Hi falta el fitxer de claus privades o bé no existeix
|
||||
ssl_ecert=Hi falta el fitxer de certificats o bé no existeix
|
||||
ssl_eca=Hi falta el fitxer de certificat CA o bé no existeix
|
||||
ssl_eca=Hi falta el fitxer de certificat CA client o bé no existeix
|
||||
ssl_eregen=Hi falta l'interval de regeneració de paràmetres o bé no és numèric
|
||||
ssl_epass=No has introduït la contrasenya del fitxer de claus SSL
|
||||
|
||||
|
||||
@@ -80,6 +80,7 @@ save_pfs='$1' ja est
|
||||
save_create_dir=No es pot crear el directori '$1'
|
||||
save_eanonuid=L'usuari d'accès anònim és invàlid
|
||||
save_eanongid=El grup d'accés anònim és invàlid
|
||||
|
||||
exports_webnfs=Clients WebNFS
|
||||
exports_ngroup=Grup de xarxa $1
|
||||
exports_net=Xarxa $1
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
config_dir=Directori de configuració de Fail2Ban,0
|
||||
client_cmd=Camí complet de l'ordre <tt>fail2ban-client</tt>,0
|
||||
server_cmd=Camí complet de l'ordre <tt>fail2ban-server</tt>,0
|
||||
init_script=Nom de l'acció d'engegada,3,No n'hi ha cap de configurat
|
||||
init_script=Noms de l'acció d'engegada,3,No n'hi ha cap de configurat
|
||||
|
||||
@@ -90,6 +90,17 @@ if (-d $jdir) {
|
||||
foreach my $f (glob("$jdir/*.conf")) {
|
||||
push(@rv, &parse_config_file($f));
|
||||
}
|
||||
|
||||
# Add jails from .local files that aren't directive-level overrides
|
||||
my %names = map { $_->{'name'}, $_ } @rv;
|
||||
foreach my $f (glob("$jdir/*.local")) {
|
||||
my @lrv = &parse_config_file($f);
|
||||
foreach my $j (@lrv) {
|
||||
if (!$names{$j->{'name'}}) {
|
||||
push(@rv, $j);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return @rv;
|
||||
}
|
||||
|
||||
@@ -441,7 +441,7 @@ while(<FDISK>) {
|
||||
$disk->{'size'} = $disk->{'cylinders'} * $disk->{'cylsize'};
|
||||
}
|
||||
elsif (/(\/dev\/\S+?(\d+))[ \t*]+\d+\s+(\d+)\s+(\d+)\s+(\S+)\s+(\S{1,2})\s+(.*)/ || /(\/dev\/\S+?(\d+))[ \t*]+(\d+)\s+(\d+)\s+(\S+)\s+(\S{1,2})\s+(.*)/) {
|
||||
# Partition within the current disk from fdisk
|
||||
# Partition within the current disk from fdisk (msdos format)
|
||||
local $part = { 'number' => $2,
|
||||
'device' => $1,
|
||||
'type' => $6,
|
||||
@@ -456,6 +456,21 @@ while(<FDISK>) {
|
||||
$disk->{'cylsize'};
|
||||
push(@{$disk->{'parts'}}, $part);
|
||||
}
|
||||
elsif (/(\/dev\/\S+?(\d+))\s+(\d+)\s+(\d+)\s+(\d+)\s+([0-9\.]+[kMGTP])\s+(\S.*)/) {
|
||||
# Partition within the current disk from fdisk (gpt format)
|
||||
local $part = { 'number' => $2,
|
||||
'device' => $1,
|
||||
'type' => $7,
|
||||
'start' => $3,
|
||||
'end' => $4,
|
||||
'blocks' => $5,
|
||||
'index' => scalar(@{$disk->{'parts'}}),
|
||||
'edittype' => 1, };
|
||||
$part->{'desc'} = &partition_description($part->{'device'});
|
||||
$part->{'size'} = ($part->{'end'} - $part->{'start'} + 1) *
|
||||
$disk->{'cylsize'};
|
||||
push(@{$disk->{'parts'}}, $part);
|
||||
}
|
||||
elsif (/^\s*(\d+)\s+(\d+)cyl\s+(\d+)cyl\s+(\d+)cyl\s+(primary|logical|extended)\s*(\S*)\s*(\S*)/) {
|
||||
# Partition within the current disk from parted (msdos format)
|
||||
local $part = { 'number' => $1,
|
||||
@@ -522,7 +537,11 @@ while(<FDISK>) {
|
||||
push(@{$disk->{'parts'}}, $part);
|
||||
}
|
||||
elsif (/Partition\s+Table:\s+(\S+)/) {
|
||||
# Parted partition table type
|
||||
# Parted partition table type (from parted)
|
||||
$disk->{'table'} = $1;
|
||||
}
|
||||
elsif (/Disklabel\s+type:\s+(\S+)/) {
|
||||
# Parted partition table type (from fdisk)
|
||||
$disk->{'table'} = $1;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -295,4 +295,5 @@ relabel_ok=Neteja i Reetiqueta
|
||||
|
||||
table_msdos=MS-DOS (Format estàndard de particions)
|
||||
table_gpt=GPT (Per a discs de 2T o més grans)
|
||||
|
||||
__norefs=1
|
||||
|
||||
@@ -15,4 +15,4 @@ $bookmarks = &read_file_lines($confdir.'/.bookmarks');
|
||||
push @$bookmarks, $path;
|
||||
&flush_file_lines("$confdir/.bookmarks");
|
||||
|
||||
&redirect("index.cgi?path=$path");
|
||||
&redirect("index.cgi?path=".&urlize($path));
|
||||
|
||||
@@ -43,6 +43,6 @@ else {
|
||||
print_errors(@errors);
|
||||
}
|
||||
else {
|
||||
&redirect("index.cgi?path=$path");
|
||||
&redirect("index.cgi?path=".&urlize($path));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -42,6 +42,6 @@ else {
|
||||
print_errors(@errors);
|
||||
}
|
||||
else {
|
||||
&redirect("index.cgi?path=$path");
|
||||
&redirect("index.cgi?path=".&urlize($path));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -74,5 +74,5 @@ if($in{'applyto'} eq '5') {
|
||||
if (scalar(@errors) > 0) {
|
||||
print_errors(@errors);
|
||||
} else {
|
||||
&redirect("index.cgi?path=$path");
|
||||
&redirect("index.cgi?path=".&urlize($path));
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@ require './filemin-lib.pl';
|
||||
get_paths();
|
||||
|
||||
if(!$in{'owner'} or !$in{'group'}) {
|
||||
&redirect("index.cgi?path=$path");
|
||||
&redirect("index.cgi?path=".&urlize($path));
|
||||
}
|
||||
|
||||
(my $login, my $pass, my $uid, my $gid) = getpwnam($in{'owner'});
|
||||
@@ -37,6 +37,6 @@ if (scalar(@errors) > 0) {
|
||||
if (scalar(@errors) > 0) {
|
||||
print_errors(@errors);
|
||||
} else {
|
||||
&redirect("index.cgi?path=$path");
|
||||
&redirect("index.cgi?path=".&urlize($path));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,25 +5,33 @@ require './filemin-lib.pl';
|
||||
get_paths();
|
||||
|
||||
if(!$in{'arch'}) {
|
||||
&redirect("index.cgi?path=$path");
|
||||
}
|
||||
&redirect("index.cgi?path=".&urlize($path));
|
||||
return;
|
||||
}
|
||||
|
||||
my $command;
|
||||
|
||||
if($in{'method'} eq 'tar') {
|
||||
$command = "tar czf ".quotemeta("$cwd/$in{'arch'}.tar.gz").
|
||||
" -C ".quotemeta($cwd);
|
||||
} elsif($in{'method'} eq 'zip') {
|
||||
$command = "cd ".quotemeta($cwd)." && zip -r ".
|
||||
quotemeta("$cwd/$in{'arch'}.zip");
|
||||
}
|
||||
if ($in{'method'} eq 'tar') {
|
||||
$full = "$cwd/$in{'arch'}.tar.gz";
|
||||
$command = "tar czf ".quotemeta($full)." -C ".quotemeta($cwd);
|
||||
}
|
||||
elsif ($in{'method'} eq 'zip') {
|
||||
$full = "$cwd/$in{'arch'}.zip";
|
||||
$command = "cd ".quotemeta($cwd)." && zip -r ".quotemeta($full);
|
||||
}
|
||||
else {
|
||||
&error("Unknown method!");
|
||||
}
|
||||
$newfile = !-e $full;
|
||||
|
||||
foreach my $name(split(/\0/, $in{'name'}))
|
||||
{
|
||||
$name =~ s/$in{'cwd'}\///ig;
|
||||
$command .= " ".quotemeta($name);
|
||||
}
|
||||
foreach my $name (split(/\0/, $in{'name'})) {
|
||||
$command .= " ".quotemeta($name);
|
||||
}
|
||||
|
||||
system_logged($command);
|
||||
my @st = stat($cwd);
|
||||
&system_logged($command);
|
||||
if ($newfile) {
|
||||
&set_ownership_permissions($st[4], $st[5], undef, $full);
|
||||
}
|
||||
|
||||
&redirect("index.cgi?path=$path");
|
||||
&redirect("index.cgi?path=".&urlize($path));
|
||||
|
||||
@@ -46,4 +46,4 @@ print &ui_hidden('path', $path);
|
||||
|
||||
print &ui_form_end([ [ save, $text{'save'} ] ]);
|
||||
|
||||
&ui_print_footer("index.cgi?path=$path", $text{'previous_page'});
|
||||
&ui_print_footer("index.cgi?path=".&urlize($path), $text{'previous_page'});
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
allowed_paths=Verzeichnisse zugänglich für Usermin Benutzer,9,60,5,\t
|
||||
max=Maximale Größe für hochgeladene Dateien,3,Unbegrenzt
|
||||
allowed_paths=Verzeichnisse auf die Usermin Benutzer zugreifen dürfen,9,60,5,\t
|
||||
max=Maximale Größe für hochzuladende Dateien,3,Unbegrenzt
|
||||
|
||||
2
filemin/config.info.de.UTF-8
Normal file
2
filemin/config.info.de.UTF-8
Normal file
@@ -0,0 +1,2 @@
|
||||
allowed_paths=Verzeichnisse auf die Usermin Benutzer zugreifen dürfen,9,60,5,\t
|
||||
max=Maximale Größe für hochzuladende Dateien,3,Unbegrenzt
|
||||
@@ -16,4 +16,4 @@ foreach $name (split(/\0/, $in{'name'})) {
|
||||
|
||||
close($fh);
|
||||
|
||||
&redirect("index.cgi?path=$path");
|
||||
&redirect("index.cgi?path=".&urlize($path));
|
||||
|
||||
@@ -5,17 +5,25 @@ require './filemin-lib.pl';
|
||||
|
||||
get_paths();
|
||||
|
||||
if(!$in{'name'}) {
|
||||
&redirect("index.cgi?path=$path");
|
||||
}
|
||||
if (!$in{'name'}) {
|
||||
&redirect("index.cgi?path=".&urlize($path));
|
||||
return;
|
||||
}
|
||||
|
||||
my $full = "$cwd/$in{'name'}";
|
||||
if (-e $full) {
|
||||
print_errors(&html_escape($in{'name'})." ".$text{'error_exists'});
|
||||
}
|
||||
else {
|
||||
my @st = stat($cwd);
|
||||
if (open(my $fh, ">$full")) {
|
||||
close($fh);
|
||||
&set_ownership_permissions($st[4], $st[5], undef, $full);
|
||||
&redirect("index.cgi?path=".&urlize($path));
|
||||
}
|
||||
else {
|
||||
print_errors($text{'error_create'}." ".
|
||||
&html_escape($in{'name'})." : ".$!);
|
||||
}
|
||||
}
|
||||
|
||||
if (-f "$cwd/$in{'name'}") {
|
||||
print_errors("$in{'name'} $text{'error_exists'}");
|
||||
} else {
|
||||
if (open my $fh, "> $cwd/$in{'name'}") {
|
||||
close($fh);
|
||||
&redirect("index.cgi?path=$path");
|
||||
} else {
|
||||
print_errors("$in{'name'} - $text{'error_create'} $!");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,16 +5,24 @@ require './filemin-lib.pl';
|
||||
|
||||
get_paths();
|
||||
|
||||
if(!$in{'name'}) {
|
||||
&redirect("index.cgi?path=$path");
|
||||
}
|
||||
if (!$in{'name'}) {
|
||||
&redirect("index.cgi?path=".&urlize($path));
|
||||
return;
|
||||
}
|
||||
|
||||
my $full = "$cwd/$in{'name'}";
|
||||
if (-e $full) {
|
||||
print_errors(&html_escape($in{'name'})." ".$text{'error_exists'});
|
||||
}
|
||||
else {
|
||||
my @st = stat($cwd);
|
||||
if (&make_dir($full, oct(755)) ) {
|
||||
&set_ownership_permissions($st[4], $st[5], undef, $full);
|
||||
&redirect("index.cgi?path=".&urlize($path));
|
||||
}
|
||||
else {
|
||||
print_errors($text{'error_create'}." ".
|
||||
&html_escape($in{'name'})." : ".$!);
|
||||
}
|
||||
}
|
||||
|
||||
if (-d "$cwd/$in{'name'}") {
|
||||
print_errors("$in{'name'} $text{'error_exists'}");
|
||||
} else {
|
||||
if( mkdir ("$cwd/$in{'name'}", oct(755)) ) {
|
||||
&redirect("index.cgi?path=$path");
|
||||
} else {
|
||||
print_errors("$text{'error_create'} $in{'name'}: $!");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,4 +16,4 @@ foreach $name (split(/\0/, $in{'name'})) {
|
||||
|
||||
close($fh);
|
||||
|
||||
&redirect("index.cgi?path=$path");
|
||||
&redirect("index.cgi?path=".&urlize($path));
|
||||
|
||||
@@ -16,5 +16,5 @@ foreach $name (split(/\0/, $in{'name'})) {
|
||||
if (scalar(@errors) > 0) {
|
||||
print_errors(@errors);
|
||||
} else {
|
||||
&redirect("index.cgi?path=$path");
|
||||
&redirect("index.cgi?path=".&urlize($path));
|
||||
}
|
||||
|
||||
@@ -39,7 +39,7 @@ if ( $current_theme ne 'authentic-theme' ) {
|
||||
|
||||
print $head;
|
||||
|
||||
print ui_table_start( "$path/$in{'file'}", undef, 1 );
|
||||
print ui_table_start(&html_escape("$path/$in{'file'}"), undef, 1 );
|
||||
|
||||
print &ui_form_start( "save_file.cgi", "post", undef, "data-encoding=\"$encoding_name\"" );
|
||||
print &ui_hidden( "file", $in{'file'} ), "\n";
|
||||
@@ -55,4 +55,4 @@ print "<script type='text/javascript'>\$(document).ready( function() { change('"
|
||||
. $in{'file'}
|
||||
. "'); });</script>";
|
||||
|
||||
&ui_print_footer( "index.cgi?path=$path", $text{'previous_page'} );
|
||||
&ui_print_footer( "index.cgi?path=".&urlize($path), $text{'previous_page'} );
|
||||
|
||||
@@ -10,41 +10,44 @@ get_paths();
|
||||
|
||||
$archive_type = mimetype($cwd.'/'.$in{'file'});
|
||||
|
||||
if ($archive_type =~ /x-bzip/) {
|
||||
$cmd = "tar xvjfp ".quotemeta("$cwd/$in{'file'}").
|
||||
" -C ".quotemeta($cwd);
|
||||
}
|
||||
elsif ($archive_type =~ /x-tar|\/gzip|x-xz|x-compressed-tar/) {
|
||||
$cmd = "tar xfp ".quotemeta("$cwd/$in{'file'}").
|
||||
" -C ".quotemeta($cwd);
|
||||
}
|
||||
elsif ($archive_type =~ /x-7z/) {
|
||||
$cmd = "7z x ".quotemeta("$cwd/$in{'file'}")." -o" .quotemeta($cwd);
|
||||
}
|
||||
elsif ($archive_type =~ /\/zip/) {
|
||||
$cmd = "unzip ".quotemeta("$cwd/$in{'file'}")." -d ".quotemeta($cwd);
|
||||
}
|
||||
elsif ($archive_type =~ /\/x-rar/) {
|
||||
$cmd = "unrar x -r -y ".quotemeta("$cwd/$in{'file'}").
|
||||
" ".quotemeta($cwd);
|
||||
}
|
||||
elsif ($archive_type =~ /(\/x-rpm|\/x-deb)/) {
|
||||
my $dir = fileparse( "$cwd/$name", qr/\.[^.]*/ );
|
||||
my $path = quotemeta("$cwd/$dir");
|
||||
&make_dir($path, 0755);
|
||||
if ($archive_type =~ /\/x-rpm/) {
|
||||
$cmd = "(rpm2cpio ".quotemeta("$cwd/$name").
|
||||
" | (cd ".quotemeta($path)."; cpio -idmv))";
|
||||
}
|
||||
else {
|
||||
$cmd = "dpkg -x ".quotemeta("$cwd/$name")." ".quotemeta($path);
|
||||
}
|
||||
}
|
||||
else {
|
||||
&error($text{'extract_etype'});
|
||||
}
|
||||
|
||||
if ( index( $archive_type, "x-bzip" ) != -1 ) {
|
||||
&backquote_logged( "tar xvjfp " . quotemeta("$cwd/$in{'file'}") . " -C " . quotemeta($cwd) );
|
||||
&redirect("index.cgi?path=$path");
|
||||
}
|
||||
elsif (index( $archive_type, "x-tar" ) != -1
|
||||
|| index( $archive_type, "/gzip" ) != -1
|
||||
|| index( $archive_type, "x-xz" ) != -1
|
||||
|| index( $archive_type, "x-compressed-tar" ) != -1 )
|
||||
{
|
||||
&backquote_logged( "tar xfp " . quotemeta("$cwd/$in{'file'}") . " -C " . quotemeta($cwd) );
|
||||
&redirect("index.cgi?path=$path");
|
||||
}
|
||||
elsif ( index( $archive_type, "x-7z" ) != -1 ) {
|
||||
&backquote_logged( "7z x " . quotemeta("$cwd/$in{'file'}") . " -o" . quotemeta($cwd) );
|
||||
&redirect("index.cgi?path=$path");
|
||||
}
|
||||
elsif ( index( $archive_type, "/zip" ) != -1 ) {
|
||||
&backquote_logged( "unzip " . quotemeta("$cwd/$in{'file'}") . " -d " . quotemeta($cwd) );
|
||||
&redirect("index.cgi?path=$path");
|
||||
}
|
||||
elsif ( index( $archive_type, "/x-rar" ) != -1 ) {
|
||||
&backquote_logged( "unrar x -r -y " . quotemeta("$cwd/$in{'file'}") . " " . quotemeta($cwd) );
|
||||
&redirect("index.cgi?path=$path");
|
||||
}
|
||||
elsif ( index( $archive_type, "/x-rpm" ) != -1 || index( $archive_type, "/x-deb" ) != -1 ) {
|
||||
my $dir = fileparse( "$cwd/$name", qr/\.[^.]*/ );
|
||||
my $path = quotemeta("$cwd/$dir");
|
||||
&backquote_logged("mkdir $path");
|
||||
if ( index( $archive_type, "/x-rpm" ) != -1 ) {
|
||||
&backquote_logged(
|
||||
"(rpm2cpio " . quotemeta("$cwd/$name") . " | (cd " . $path . "; cpio -idmv))" );
|
||||
}
|
||||
else {
|
||||
&backquote_logged( "dpkg -x " . quotemeta("$cwd/$name") . " " . $path );
|
||||
}
|
||||
}
|
||||
# Run the extraction command
|
||||
$out = &backquote_logged("$cmd 2>&1 >/dev/null </dev/null");
|
||||
if ($?) {
|
||||
&error(&html_escape($out));
|
||||
}
|
||||
|
||||
&redirect("index.cgi?path=".&urlize($path));
|
||||
|
||||
@@ -6,42 +6,55 @@ use lib './lib';
|
||||
&ReadParse();
|
||||
get_paths();
|
||||
|
||||
if(!$in{'link'}) {
|
||||
&redirect("index.cgi?path=$path");
|
||||
}
|
||||
if (!$in{'link'}) {
|
||||
&redirect("index.cgi?path=".&urlize($path));
|
||||
return;
|
||||
}
|
||||
|
||||
my $mode;
|
||||
my @errors;
|
||||
|
||||
my ($host, $port, $page, $ssl) = &parse_http_url($in{'link'});
|
||||
if (!$host) {
|
||||
# Not an HTTP or FTP URL
|
||||
push @errors, $text{'error_invalid_uri'};
|
||||
} else {
|
||||
# Looks like a valid URL
|
||||
my $file = $page;
|
||||
$file =~ s/^.*\///;
|
||||
$file ||= "index.html";
|
||||
|
||||
if(-e "$cwd/$file") {
|
||||
push @errors, "<i>$file</i> $text{'file_already_exists'} <i>$path</i>";
|
||||
} else {
|
||||
&ui_print_header(undef, "$text{'http_downloading'} $file", "");
|
||||
if ($ssl == 0 || $ssl == 1) {
|
||||
# HTTP or HTTPS download
|
||||
&http_download($host, $port, $page, "$cwd/$file", undef,
|
||||
\&progress_callback, $ssl,
|
||||
$in{'username'}, $in{'password'});
|
||||
} else {
|
||||
# Actually an FTP download
|
||||
&ftp_download($host, $page, "$cwd/$file", undef,
|
||||
\&progress_callback,
|
||||
$in{'username'}, $in{'password'}, $port);
|
||||
# Not an HTTP or FTP URL
|
||||
push(@errors, $text{'error_invalid_uri'});
|
||||
}
|
||||
else {
|
||||
# Looks like a valid URL
|
||||
my $file = $page;
|
||||
$file =~ s/^.*\///;
|
||||
$file ||= "index.html";
|
||||
$full = "$cwd/$file";
|
||||
|
||||
if (-e $full) {
|
||||
push @errors, "<i>$file</i> $text{'file_already_exists'} <i>$path</i>";
|
||||
}
|
||||
else {
|
||||
&ui_print_header(undef, $text{'http_downloading'}, "");
|
||||
|
||||
$progress_callback_url = $in{'link'};
|
||||
my @st = stat($cwd);
|
||||
if ($ssl == 0 || $ssl == 1) {
|
||||
# HTTP or HTTPS download
|
||||
&http_download($host, $port, $page, $full, undef,
|
||||
\&progress_callback, $ssl,
|
||||
$in{'username'}, $in{'password'});
|
||||
}
|
||||
else {
|
||||
# Actually an FTP download
|
||||
&ftp_download($host, $page, $full, undef,
|
||||
\&progress_callback,
|
||||
$in{'username'}, $in{'password'}, $port);
|
||||
}
|
||||
&set_ownership_permissions($st[4], $st[5], undef, $full);
|
||||
@st = stat($cwd);
|
||||
print &text('http_done', &nice_size($st[7]),
|
||||
"<tt>".&html_escape($full)."</tt>"),"<p>\n";
|
||||
&ui_print_footer("index.cgi?path=".&urlize($path),
|
||||
$text{'previous_page'});
|
||||
}
|
||||
}
|
||||
&ui_print_footer("index.cgi?path=$path", $text{'previous_page'});
|
||||
}
|
||||
}
|
||||
|
||||
if (scalar(@errors) > 0) {
|
||||
print_errors(@errors);
|
||||
}
|
||||
print_errors(@errors);
|
||||
}
|
||||
|
||||
@@ -20,6 +20,7 @@ name=Nom
|
||||
type=Tipus
|
||||
actions=Accions
|
||||
size=Mida
|
||||
ownership=Propietari
|
||||
owner_user=Usuari
|
||||
owner_group=Grup
|
||||
permissions=Permisos
|
||||
@@ -113,6 +114,7 @@ refresh=Refresca
|
||||
http_downloading=S'està descarregant
|
||||
uploading=S'està pujant, espera si et plau...
|
||||
acl_allowed_paths=Permet l'accés als directoris
|
||||
acl_allowed_paths2=(Per a usuaris no root)
|
||||
acl_allowed_for_edit=Tipus MIME permesos per a editar amb l'editor integrat
|
||||
acl_work_as=Accedeix als fitxers com l'usuari Unix
|
||||
acl_root=Root (compte amb els usuaris no fiables!)
|
||||
|
||||
224
filemin/lang/de
224
filemin/lang/de
@@ -1,150 +1,152 @@
|
||||
about_to_delete=Sie sind dabei folgende Elemente zu löschen:
|
||||
acl_allowed_for_edit=Mimetypen erlaubt für Editierungen vom eingebautem Editor
|
||||
acl_allowed_paths=Erlaube Zugriff auf Verzeichnisse
|
||||
acl_allowed_paths2=(Für Nicht-Root-Benutzer)
|
||||
acl_bytes=bytes
|
||||
about_to_delete=Sie sind dabei, folgendes zu löschen:
|
||||
acl_allowed_for_edit=Mimetypen erlaubt zum Editieren von engebautenEditor
|
||||
acl_allowed_paths=Zugang zu Verzeichnissen erlauben
|
||||
acl_allowed_paths2=(Nur für root-Benutzer
|
||||
acl_bytes=Bytes
|
||||
acl_epath=Pfad $1 existiert nicht
|
||||
acl_euser=Ausgewähter Unix Benutzer existiert nicht!
|
||||
acl_max=Die maximale Größe für hochgeladene Dateien
|
||||
acl_root=Root (gewähre mit Vorsicht an nicht vertrauenswürdige Benutzer!)
|
||||
acl_same=Gleiche wie Webmin Login
|
||||
acl_euser=Ausgewählter System-Benutzer existiert nicht!
|
||||
acl_max=Maximale Größe für hochgeladene Dateien
|
||||
acl_root=Root (nicht vertrauenswürdigen Benutzern mit Vorsicht zu gewähren!)
|
||||
acl_same=Wie bei Webmin-Login
|
||||
acl_unlimited=Unlimitiert
|
||||
acl_user=Spezifischer Unix Benutzer
|
||||
acl_work_as=Erlaube Dateien als Unix Benutzer
|
||||
acl_user=Spezifischer Syetm-Benutzer
|
||||
acl_work_as=Auf Dateien als System-Benutzer zugreifen
|
||||
actions=Aktionen
|
||||
archive_name=Archiv-Name
|
||||
are_you_sure=Sind Sie sich sicher?
|
||||
bookmark_folder=Lesezeichen des aktuellen Verzeichnisses setzen
|
||||
browse_for_upload=Nach Upload suchen
|
||||
archive_name=Archiv Name
|
||||
are_you_sure=Sind Sie sicher?
|
||||
bookmark_folder=Setze Lesezeichen für aktuellen Ordner
|
||||
browse_for_upload=Durchsuchen zum Hochladen
|
||||
chmod_additional=Zusätzlich
|
||||
chmod_all=Alle (rekursiv)
|
||||
chmod_apply_to=Anwenden an
|
||||
chmod_dir_and_its_files=Ausgewählte Dateien und Verzeichnisse und Dateien in ausgewählten Verzeichnissen
|
||||
chmod_apply_to=Anwenden auf
|
||||
chmod_dir_and_its_files=Ausgewählte Dateien und Verzeichnisse, sowie Dateien in ausgewählten Verzeichnissen
|
||||
chmod_dir_and_subs=Ausgewählte Verzeichnisse und Unterverzeichnisse
|
||||
chmod_dir_files_and_subs_files=Ausgewählte Dateien und Dateien unter ausgewählten Verzeichnissen und Unterverzeichnissen
|
||||
chmod_dir_files_and_subs_files=Ausgewählte Dateien und Dateien in ausgewählten Verzeichnissen und Unterverzeichnissen
|
||||
chmod_dir_only=Nur ausgewählte Verzeichnisse und Dateien
|
||||
chmod_execute=Ausführen
|
||||
chmod_group=Gruppe
|
||||
chmod_others=Andere
|
||||
chmod_owner=Besitzer
|
||||
chmod_owner=Benutzer
|
||||
chmod_read=Lesen
|
||||
chmod_selected=Chmod wählen
|
||||
chmod_selected=Rechte der ausgewählten Elemente ändern
|
||||
chmod_setgid=Setgid
|
||||
chmod_sticky=Sticky bit
|
||||
chmod_write=Schreiben
|
||||
chown_selected=Chmod wählen
|
||||
compress_selected=Komprimiere ausgewählte
|
||||
config_bookmarks=Bookmarks
|
||||
config_columns_to_display=Spalten zu angezeigen
|
||||
config_disable_pagination=Deaktiviert Paginierung (nur für Authentic Theme-Benutzer)
|
||||
config_per_page=Artikel pro Seite zum anzeigen (nur für alte Themes)
|
||||
config_toolbar_style=Setzt Symbolleisten-Stil auf Menü-ähnliche Ansicht,<br>mit Dropdowns ... und Cookies (nur für Authentic Theme Benutzer)
|
||||
copy_selected=Kopiere Ausgewähltes
|
||||
count_uploads=Datei(en) ausgewählt zum hochladen
|
||||
create=Erstellen
|
||||
create_file=Erstelle Datei
|
||||
create_folder=Erstelle Ordner
|
||||
cut_selected=Schneide Ausgewähltes aus
|
||||
delete=Lösche
|
||||
chown_selected=Besitzer der ausgegewählten Elemente ändern
|
||||
compress_selected=Komprimiere ausgewählte Elemente
|
||||
config_bookmarks=Lesezeichen
|
||||
config_columns_to_display=Anzuzeigende Spalten
|
||||
config_disable_pagination=Seitennummerierung deaktivieren (nur für Authentic Theme-Benutzer)
|
||||
config_per_page=Einträge zum Anzeigen pro Seite (nur für alte Themes)
|
||||
config_toolbar_style=Setze 'toolbar style' für Menü,<br>mit Dropdowns ... und Cookies (nur für Authentic Theme-Benutzer)
|
||||
copy_selected=Ausgewählte Elemente kopieren
|
||||
count_uploads=Datei(en) ausgewählt zum Hochladen
|
||||
create=Erstelle
|
||||
create_file=Datei erstellen
|
||||
create_folder=Ordner erstellen
|
||||
cut_selected=Ausgewählte Elemente ausschneiden
|
||||
delete=Löschen
|
||||
dialog_cancel=Abbrechen
|
||||
dialog_change=Ändern
|
||||
dialog_change=ändere
|
||||
dialog_compress=Komprimieren
|
||||
dialog_download=Download
|
||||
dialog_file_url=URL der Datei zum Download
|
||||
dialog_download=Herunterladen
|
||||
dialog_file_url=URL der Datei zum Herunterladen
|
||||
dialog_ok=OK
|
||||
dialog_recursive=Rekursiv
|
||||
dialog_user_name=Entferne Server Benutzername (falls einer benötigt wird)
|
||||
dialog_user_pass=Entferne Server Passwort (falls eins benötigt wird)
|
||||
edit=Editieren
|
||||
edit_file=Editiere Datei
|
||||
error_archive_type_not_supported=Archivtyp wird bisher nicht unterstützt
|
||||
error_chmod=Fehlgeschlagen Rechte zu ändern
|
||||
error_chown=Fehlgeschlagen Eigentümer zu wechseln
|
||||
error_copy=Kopieren fehlgeschlagen mit Fehler:
|
||||
error_create=fehlgeschlagen zu erstellen:
|
||||
error_creating_conf=Fehler beim Erstellen des Konfigurations-Verzeichnis
|
||||
error_cut=Verschieben fehlgeschlagen mit Fehler:
|
||||
error_delete=nicht möglich zu löschen
|
||||
error_exists=existiert bereits, überspringe
|
||||
error_group_not_found=Gruppe existiert nicht auf diesem System
|
||||
error_invalid_uri=Fehler: keine gültige URL zur Verfügung gestellt
|
||||
error_load_template=Fehler laden Template Datei
|
||||
error_numeric=Muss numerisch sein!
|
||||
error_opendir=Fehler beim Öffnen des Verzeichnis
|
||||
error_opening_file_for_writing=Kann Datei nicht zum schreiben öffnen
|
||||
error_pasting_nonsence=Einfügen in das selbe Verzeichnis macht keinen Sinn
|
||||
error_rename=Fehlgeschlagen das Umbenennen
|
||||
dialog_user_name=Benutzername für entfernten Server (falls erforderlich)
|
||||
dialog_user_pass=Passwort für entfernten Server (falls erforderlich)
|
||||
edit=Bearbeiten
|
||||
edit_file=Datei bearbeiten
|
||||
error_archive_type_not_supported=Archivtyp nicht unterstützt
|
||||
error_chmod=Rechteänderung fehlgeschlagen
|
||||
error_chown=Benutzer ändern fehlgeschlagen
|
||||
error_copy=kopieren fehlgeschlagen mit Fehler:
|
||||
error_create=erstellen fehlgeschlagen:
|
||||
error_creating_conf=Fehler beim Erstellen des Konfigurationsverzeichnisses
|
||||
error_cut=verschieben fehlgeschlagen mit Fehler:
|
||||
error_delete=löschen nicht möglich
|
||||
error_exists=existiert bereits, abgebrochen
|
||||
error_group_not_found=Gruppe nicht im System gefunden
|
||||
error_invalid_uri=Fehler: Keine gültige URL angegeben!!!
|
||||
error_load_template=Fehler beim Laden der Template-Datei
|
||||
error_numeric=muss ein Zahlenwert sein!
|
||||
error_opendir=Fehler beim öffnen des Verzeichnisses
|
||||
error_opening_file_for_writing=Datei kann nicht zum schreiben geöfnet werden:
|
||||
error_pasting_nonsence=Kopieren in das selbe Verzeichnis macht keinen Sinn
|
||||
error_rename=umbenennen fehlgeschlagen
|
||||
error_saving_file=Fehler beim Speichern der Datei
|
||||
error_title=Fehler!!!
|
||||
error_upload_emax=Hochzuladende Datei ist größer als das Limit von $1
|
||||
error_user_not_found=Benutzer nicht auf diesem System gefunden
|
||||
error_writing_file=Fehler beim Schreiben von Datei:
|
||||
errors_occured=Folgende Fehler traten bei der Ausführung auf
|
||||
extract_archive=Archive extrahieren
|
||||
error_upload_emax=Die hochgeladene Datei ist größer als die Grenze von $1
|
||||
error_user_not_found=Benutzer nicht im System gefunden
|
||||
error_writing_file=Fehler beim Schreiben der Datei:
|
||||
errors_occured=Folgende Fehler sind beim Ausführen der Aktion aufgetreten
|
||||
extract_archive=Entpacke Archiv
|
||||
extract_etype=Nicht unterstützter Archivdateityp
|
||||
file_already_exists=existiert bereits in
|
||||
files_ready_for_upload=Zeige ausgewählte Dateien an
|
||||
get_from_url=Erhalte von URL
|
||||
goto_folder=Gehe zu beinhaltetes Verzeichnis
|
||||
group_name=Gruppen-Name
|
||||
hint_chmod=Änder Berechtigungen für ausgewählte Dateien und Verzeichnisse
|
||||
hint_chown=Ändere den Besitzer von ausgewählten Dateien und Verzeichnissen
|
||||
hint_compress=Komprimiere ausgewählte Dateien und Verzeichnisse in tar.gz-Archiv
|
||||
hint_copy=Kopiere ausgewählte Dateien und Verzeichnisse zum Puffer
|
||||
hint_create_file=Erstelle neue Datei im aktuellem Pfad
|
||||
hint_create_folder=Erzeuge neues Verzeichnis im aktuellem Pfad
|
||||
hint_cut=Schneide ausgewählte Dateien und Verzeichnisse zum Puffer aus
|
||||
hint_from_url=Erhalte Datei von entfernter URL
|
||||
hint_paste=Füge Dateien und Verzeichnisse vom Puffer ein
|
||||
hint_remove=Entferne ausgewählte Dateien und Verzeichnisse
|
||||
hint_upload=Hochladen von Dateien in das aktuelle Verzeichnis
|
||||
http_downloading=Herunterladen
|
||||
files_ready_for_upload=Ausgewählte Dateien:
|
||||
get_from_url=Herunterladen von URL
|
||||
goto_folder=Gehe zum enthaltenden Ordner
|
||||
group_name=Gruppenname
|
||||
hint_chmod=Rechte für ausgewählte Dateien und Ordner ändern
|
||||
hint_chown=Benutzer für die ausgewählten Dateien und Ordner ändern
|
||||
hint_compress=Ausgewählte Dateien und Ordner zu einem tar.gz Archiv komprimieren
|
||||
hint_copy=Ausgewählte Dateien und Ordner in den Zwischenspeicher kopieren
|
||||
hint_create_file=Neue Datei im aktuellen Verzeichnis erstellen
|
||||
hint_create_folder=Neuen Ordner im aktuellen Verzeichnis erstellen
|
||||
hint_cut=Ausgewählte Dateien und Ordner in den Zwischenspeicher ausschneiden
|
||||
hint_from_url=Datei von entfernter URL herunterladen
|
||||
hint_paste=Füge Dateien und Ordner aus dem Zwischenspeicher in das aktuelle Verzeichnis ein
|
||||
hint_remove=Ausgewählte Dateien und Ordner löschen
|
||||
hint_upload=Dateien in das aktuelle Verzeichnis hochladen
|
||||
http_done=$1 von $2 heruntergeladen.
|
||||
http_downloading=Wird heruntergeladen
|
||||
index=Index
|
||||
info_total1=Total: $1 Datei und $2 Verzeichnis
|
||||
info_total2=Total: $1 Dateien und $2 Verzeichnis
|
||||
info_total3=Total: $1 Datei und $2 Verzeichnisse
|
||||
info_total4=Total: $1 Dateien und $2 Verzeichnisse
|
||||
info_total1=Gesamt: $1 Datei und $2 Verzeichnis
|
||||
info_total2=Gesamt: $1 Dateien und $2 Verzeichnis
|
||||
info_total3=Gesamt: $1 Datei und $2 Verzeichnisse
|
||||
info_total4=Gesamt: $1 Dateien und $2 Verzeichnisse
|
||||
invert_selection=Auswahl umkehren
|
||||
last_mod_time=Zeitpunkt der letzten Änderung
|
||||
menu_bookmarks=Bookmarks
|
||||
menu_edit=Editieren
|
||||
last_mod_time=Letzte änderung
|
||||
menu_bookmarks=Lesezeichen
|
||||
menu_edit=Bearbeiten
|
||||
menu_file=Datei
|
||||
menu_tools=Tools
|
||||
module_config=Modulkonfiguration
|
||||
menu_tools=Werkzeuge
|
||||
module_config=Modul-Konfiguration
|
||||
name=Name
|
||||
new_file_name=Neuer Datei-Name
|
||||
new_folder_name=Neuer Ordner-Name
|
||||
new_file_name=Neuer Dateiname
|
||||
new_folder_name=Neuer Ordnername
|
||||
new_name=Neuer Name
|
||||
no_bookmarks=Keine Bookmarks bisher
|
||||
notallowed=Sie sind nicht berechtigt auf $1 zuzugreifen. Erlaubte Verzeichnisse sind : $2
|
||||
no_bookmarks=Noch keine Lesezeichen
|
||||
notallowed=Sie haben keine Erlaubnis, auf $1 zuzugreifen. Die erlaubten Verzeichnisse sind: $2
|
||||
nothing_selected=Nichts ausgewählt
|
||||
owner_group=Eigentümer-Gruppe
|
||||
owner_user=Eigentümer-Benutzer
|
||||
ownership=Eigentümer
|
||||
owner_group=Gruppe
|
||||
owner_user=Benutzer
|
||||
ownership=Besitzer
|
||||
paste=Einfügen
|
||||
permissions=Rechte
|
||||
previous_page=vorherige Seite
|
||||
provide_file_name=Vergebe Dateiname
|
||||
provide_folder_name=Vergebe Verzeichnisname
|
||||
provide_group_name=Vergebe Gruppenname
|
||||
provide_new_file_name=Vergebe neuen Dateiname
|
||||
provide_search_query=Gebe Suchanfrage
|
||||
provide_url=Gebe URL der entfernten Datei an
|
||||
provide_user_name=Provider Benutzername
|
||||
refresh=Aktualisieren
|
||||
remove_selected=Lösche Ausgewähltes
|
||||
previous_page=vorherigen Seite
|
||||
provide_file_name=Dateinamen angeben
|
||||
provide_folder_name=Ordnernamen angeben
|
||||
provide_group_name=Gruppennamen angeben
|
||||
provide_new_file_name=Neuen Dateinamen angeben
|
||||
provide_search_query=Suchanfrage angeben
|
||||
provide_url=URL der entfernten Datei angeben
|
||||
provide_user_name=Benutzernamen angeben
|
||||
refresh=Neu laden
|
||||
remove_selected=Ausgewählte Elemente löschen
|
||||
rename=Umbenennen
|
||||
save=Speichern
|
||||
save_close=Speichern und schließen
|
||||
save_file=Speichere Datei
|
||||
save_file=Datei speichern
|
||||
search=Suche
|
||||
search_go=Finden
|
||||
search_insensitive=Groß- und Kleinschreibung Suche
|
||||
search_go=Finden!
|
||||
search_insensitive=Groß- und Kleinschreibung bei Suche beachten
|
||||
search_label=Suchanfrage
|
||||
search_results=Suchresultate für
|
||||
select_all=Alle wählen
|
||||
search_results=Suchergebnisse für
|
||||
select_all=Alle auswählen
|
||||
size=Größe
|
||||
type=Typ
|
||||
upload_files=Dateien hochladen
|
||||
uploading=Hochladen, bitte warten...
|
||||
uploading=Hochladen, bitte warten ...
|
||||
user_name=Benutzername
|
||||
warning_title=Warnung!!!
|
||||
|
||||
@@ -3,15 +3,15 @@ error_opendir=Fehler beim Öffnen des Verzeichnisses
|
||||
error_creating_conf=Fehler beim Erstellen des Konfigurationsverzeichnisses
|
||||
select_all=Alle auswählen
|
||||
invert_selection=Auswahl umkehren
|
||||
copy_selected=Ausgewählte Objekte kopieren
|
||||
cut_selected=Ausgewählte Objekte ausschneiden
|
||||
copy_selected=Ausgewählte Elemente kopieren
|
||||
cut_selected=Ausgewählte Elemente ausschneiden
|
||||
paste=Einfügen
|
||||
create_folder=Ordner erstellen
|
||||
create_file=Datei erstellen
|
||||
compress_selected=Komprimiere gewählte Objekte
|
||||
chmod_selected=Chmod gewählte Objekte
|
||||
chown_selected=Chown gewählte Objekte
|
||||
remove_selected=Lösche gewählte Objekte
|
||||
compress_selected=Komprimiere ausgewählte Elemente
|
||||
chmod_selected=Rechte der ausgewählten Elemente ändern
|
||||
chown_selected=Besitzer der ausgegewählten Elemente ändern
|
||||
remove_selected=Ausgewählte Elemente löschen
|
||||
browse_for_upload=Durchsuchen zum Hochladen
|
||||
upload_files=Dateien hochladen
|
||||
get_from_url=Herunterladen von URL
|
||||
@@ -26,8 +26,8 @@ permissions=Rechte
|
||||
last_mod_time=Letzte Änderung
|
||||
rename=Umbenennen
|
||||
edit=Bearbeiten
|
||||
extract_archive=Extrahiere Archiv
|
||||
edit_file=Bearbeite Datei
|
||||
extract_archive=Entpacke Archiv
|
||||
edit_file=Datei bearbeiten
|
||||
save=Speichern
|
||||
save_close=Speichern und schließen
|
||||
delete=Löschen
|
||||
@@ -44,7 +44,7 @@ new_file_name=Neuer Dateiname
|
||||
new_name=Neuer Name
|
||||
dialog_ok=OK
|
||||
dialog_cancel=Abbrechen
|
||||
archive_name=Archivname
|
||||
archive_name=Archiv Name
|
||||
dialog_compress=Komprimieren
|
||||
about_to_delete=Sie sind dabei, folgendes zu löschen:
|
||||
are_you_sure=Sind Sie sicher?
|
||||
@@ -62,7 +62,7 @@ chmod_setgid=Setgid
|
||||
chmod_additional=Zusätzlich
|
||||
chmod_apply_to=Anwenden auf
|
||||
chmod_dir_only=Nur ausgewählte Verzeichnisse und Dateien
|
||||
chmod_dir_and_its_files=Ausgewählte Dateien und Verzeichnisse und Dateien in ausgewählten Verzeichnissen
|
||||
chmod_dir_and_its_files=Ausgewählte Dateien und Verzeichnisse, sowie Dateien in ausgewählten Verzeichnissen
|
||||
chmod_all=Alle (rekursiv)
|
||||
chmod_dir_files_and_subs_files=Ausgewählte Dateien und Dateien in ausgewählten Verzeichnissen und Unterverzeichnissen
|
||||
chmod_dir_and_subs=Ausgewählte Verzeichnisse und Unterverzeichnisse
|
||||
@@ -71,36 +71,38 @@ dialog_user_name=Benutzername für entfernten Server (falls erforderlich)
|
||||
dialog_user_pass=Passwort für entfernten Server (falls erforderlich)
|
||||
dialog_download=Herunterladen
|
||||
error_invalid_uri=Fehler: Keine gültige URL angegeben!!!
|
||||
file_already_exists=existiert schon in
|
||||
file_already_exists=existiert bereits in
|
||||
files_ready_for_upload=Ausgewählte Dateien:
|
||||
errors_occured=Folgende Fehler sind beim Ausführen der Operation aufgetreten
|
||||
errors_occured=Folgende Fehler sind beim Ausführen der Aktion aufgetreten
|
||||
error_pasting_nonsence=Kopieren in das selbe Verzeichnis macht keinen Sinn
|
||||
error_exists=existiert bereits, abgebrochen
|
||||
error_copy=kopieren fehlgeschlagen mit Fehler:
|
||||
error_cut=verschieben fehlgeschlagen mit Fehler:
|
||||
error_create=gescheitert zu erstellen:
|
||||
error_rename=gescheitert umzubenennen
|
||||
error_chmod=Rechteänderung gescheitert
|
||||
error_chown=Gescheitert den Benutzer zu ändern
|
||||
|
||||
error_create=erstellen fehlgeschlagen:
|
||||
error_rename=umbenennen fehlgeschlagen
|
||||
error_chmod=Rechteänderung fehlgeschlagen
|
||||
error_chown=Benutzer ändern fehlgeschlagen
|
||||
|
||||
error_delete=löschen nicht möglich
|
||||
error_user_not_found=Benutzer nicht gefunden in diesen System
|
||||
error_group_not_found=Gruppe existiert nicht in diesen System
|
||||
error_archive_type_not_supported= Archivtyp noch nicht unterstützt
|
||||
error_opening_file_for_writing=Konnte Datei nicht öffnen zum Schreiben:
|
||||
error_user_not_found=Benutzer nicht im System gefunden
|
||||
error_group_not_found=Gruppe nicht im System gefunden
|
||||
error_archive_type_not_supported= Archivtyp nicht unterstützt
|
||||
error_opening_file_for_writing=Datei kann nicht zum schreiben geöfnet werden:
|
||||
error_writing_file=Fehler beim Schreiben der Datei:
|
||||
error_numeric=muss nummerisch sein!
|
||||
error_numeric=muss ein Zahlenwert sein!
|
||||
error_saving_file=Fehler beim Speichern der Datei
|
||||
hint_copy=Ausgewählte Dateien und Ordner in den Puffer kopieren
|
||||
hint_cut=Ausgewählte Dateien und Ordner in den Puffer ausschneiden
|
||||
hint_paste=Füge Dateien und Ordner aus dem Puffer in das aktuelle Verzeichnis ein
|
||||
hint_create_folder=Erstelle neuen Ordner im aktuellen Verzeichnis
|
||||
hint_create_file=Erstelle neue Datei im aktuellen Verzeichnis
|
||||
hint_compress=Komprimiere ausgewählte Dateien und Ordner zu einem tar.gz Archiv
|
||||
hint_chmod=Ändere die Rechte für die ausgewählten Dateien und Ordner
|
||||
hint_chown=Ändere den Benutzer für die ausgewählten Dateien und Ordner
|
||||
hint_remove=Lösche ausgewählte Dateien und Ordner
|
||||
hint_upload=Dateien hochladen in das aktuelle Verzeichnis
|
||||
hint_from_url=Datei herunterladen von entfernter URL
|
||||
hint_copy=Ausgewählte Dateien und Ordner in den Zwischenspeicher kopieren
|
||||
hint_cut=Ausgewählte Dateien und Ordner in den Zwischenspeicher ausschneiden
|
||||
hint_paste=Füge Dateien und Ordner aus dem Zwischenspeicher in das aktuelle Verzeichnis ein
|
||||
hint_create_folder=Neuen Ordner im aktuellen Verzeichnis erstellen
|
||||
hint_create_file=Neue Datei im aktuellen Verzeichnis erstellen
|
||||
hint_compress=Ausgewählte Dateien und Ordner zu einem tar.gz Archiv komprimieren
|
||||
hint_chmod=Rechte für ausgewählte Dateien und Ordner ändern
|
||||
hint_chown=Benutzer für die ausgewählten Dateien und Ordner ändern
|
||||
hint_remove=Ausgewählte Dateien und Ordner löschen
|
||||
hint_upload=Dateien in das aktuelle Verzeichnis hochladen
|
||||
hint_from_url=Datei von entfernter URL herunterladen
|
||||
provide_folder_name=Ordnernamen angeben
|
||||
provide_file_name=Dateinamen angeben
|
||||
provide_user_name=Benutzernamen angeben
|
||||
@@ -110,29 +112,29 @@ provide_new_file_name=Neuen Dateinamen angeben
|
||||
provide_search_query=Suchanfrage angeben
|
||||
dialog_recursive=Rekursiv
|
||||
refresh=Neu laden
|
||||
http_downloading=Es wird heruntergeladen
|
||||
http_downloading=Wird heruntergeladen
|
||||
uploading=Hochladen, bitte warten ...
|
||||
acl_allowed_paths=Erlaube Zugang zu Verzeichnissen
|
||||
acl_work_as=Zugriff auf Dateien als Unix-Benutzer
|
||||
acl_allowed_paths=Zugang zu Verzeichnissen erlauben
|
||||
acl_work_as=Auf Dateien als System-Benutzer zugreifen
|
||||
acl_root=Root (nicht vertrauenswürdigen Benutzern mit Vorsicht zu gewähren!)
|
||||
acl_same=Wie bei Webmin-Login
|
||||
acl_user=Spezifischer Unix-Benutzer
|
||||
acl_euser=Ausgewählter Unix-Benutzer existiert nicht!
|
||||
acl_user=Spezifischer Syetm-Benutzer
|
||||
acl_euser=Ausgewählter System-Benutzer existiert nicht!
|
||||
acl_epath=Pfad $1 existiert nicht
|
||||
search=Suche
|
||||
search_label=Suchanfrage
|
||||
search_go=Shake it, baby!
|
||||
search_go=Finden!
|
||||
search_results=Suchergebnisse für
|
||||
goto_folder=Gehe zum enthaltenden Ordner
|
||||
module_config=Modul-Konfiguration
|
||||
config_columns_to_display=Spalten zum Anzeigen
|
||||
config_columns_to_display=Anzuzeigende Spalten
|
||||
config_per_page=Einträge zum Anzeigen pro Seite (nur für alte Themes)
|
||||
config_disable_pagination=Seitennummerierung deaktivieren (nur für Authentic Theme-Benutzer)
|
||||
config_toolbar_style=Setze 'toolbar style' für Menü,<br>mit Dropdowns ... und Cookies (nur für Authentic Theme-Benutzer)
|
||||
config_bookmarks=Lesezeichen
|
||||
no_bookmarks=Noch keine Lesezeichen
|
||||
menu_file=Datei
|
||||
menu_edit=Bearbeite
|
||||
menu_edit=Bearbeiten
|
||||
menu_tools=Werkzeuge
|
||||
menu_bookmarks=Lesezeichen
|
||||
notallowed=Sie haben keine Erlaubnis, auf $1 zuzugreifen. Die erlaubten Verzeichnisse sind: $2
|
||||
@@ -141,14 +143,14 @@ notallowed=Sie haben keine Erlaubnis, auf $1 zuzugreifen. Die erlaubten Verzeich
|
||||
chcon_selected=Chcon Selected
|
||||
chattr_selected=Chattr Selected
|
||||
|
||||
selinux=Security context
|
||||
attributes=Attributes
|
||||
selinux=Sicherheits Kontext
|
||||
attributes=Eigenschaften
|
||||
|
||||
context_label=Context to apply
|
||||
context_label_error=Security context can not be blank
|
||||
context_label_error_proc=Failed to change security context
|
||||
attr_label=Attributes to apply
|
||||
attr_label_error=Attributes must be specified
|
||||
attr_label_error_proc=Failed to change attributes
|
||||
context_label=Anzuwendender Kontext
|
||||
context_label_error=Sicherheits Kontext kann nicht leer sein
|
||||
context_label_error_proc=Änderung des Sicherheits Kontext fehlgeschlagen
|
||||
attr_label=Anzuwendende Eigenschaften
|
||||
attr_label_error=Eigenschaften erforderlich
|
||||
attr_label_error_proc=Änderung der Eigenschaften fehlgeschlagen
|
||||
|
||||
ownership=Ownership
|
||||
ownership=Besitzer
|
||||
|
||||
@@ -11,6 +11,8 @@ create_file=Create File
|
||||
compress_selected=Compress Selected
|
||||
chmod_selected=Chmod Selected
|
||||
chown_selected=Chown Selected
|
||||
chcon_selected=Chcon Selected
|
||||
chattr_selected=Chattr Selected
|
||||
remove_selected=Remove Selected
|
||||
browse_for_upload=Browse for Upload
|
||||
upload_files=Upload Files
|
||||
@@ -20,11 +22,12 @@ name=Name
|
||||
type=Type
|
||||
actions=Actions
|
||||
size=Size
|
||||
ownership=Owner
|
||||
owner_user=Owner User
|
||||
owner_group=Owner Group
|
||||
owner_user=Owner user
|
||||
owner_group=Owner group
|
||||
permissions=Permissions
|
||||
last_mod_time=Last Modification Time
|
||||
selinux=Security context
|
||||
attributes=Attributes
|
||||
last_mod_time=Last modification time
|
||||
rename=Rename
|
||||
edit=Edit
|
||||
extract_archive=Extract Archive
|
||||
@@ -35,8 +38,8 @@ delete=Delete
|
||||
save_file=Save file
|
||||
previous_page=previous page
|
||||
count_uploads=file(s) selected for upload
|
||||
error_title=Error!!!
|
||||
warning_title=Warning!!!
|
||||
error_title=Error!
|
||||
warning_title=Warning!
|
||||
nothing_selected=Nothing selected
|
||||
error_load_template=Error loading template file
|
||||
create=Create
|
||||
@@ -49,6 +52,12 @@ archive_name=Archive name
|
||||
dialog_compress=Compress
|
||||
about_to_delete=You're about to delete following items:
|
||||
are_you_sure=Are you sure?
|
||||
context_label=Context to apply
|
||||
context_label_error=Security context can not be blank
|
||||
context_label_error_proc=Failed to change security context
|
||||
attr_label=Attributes to apply
|
||||
attr_label_error=Attributes must be specified
|
||||
attr_label_error_proc=Failed to change attributes
|
||||
user_name=User name
|
||||
group_name=Group name
|
||||
dialog_change=Change
|
||||
@@ -71,10 +80,10 @@ dialog_file_url=URL of file to download
|
||||
dialog_user_name=Remote server username(if any required)
|
||||
dialog_user_pass=Remote server password(if any required)
|
||||
dialog_download=Download
|
||||
error_invalid_uri=Error: No valid URL supplied!!!
|
||||
error_invalid_uri=Error: No valid URL supplied!
|
||||
file_already_exists=already exists in
|
||||
files_ready_for_upload=View selected files
|
||||
errors_occured=Following errors occurred while performing operation
|
||||
errors_occured=Following errors occured while performing operation
|
||||
error_pasting_nonsence=Pasting to the same directory makes no sense
|
||||
error_exists=already exists, skipping
|
||||
error_copy=copying failed with error:
|
||||
@@ -88,7 +97,7 @@ error_user_not_found=user not found on this system
|
||||
error_group_not_found=group does not exist on this system
|
||||
error_archive_type_not_supported= archive type not supported yet
|
||||
error_opening_file_for_writing=Could not open file for writing:
|
||||
error_writing_file=Error writing file:
|
||||
error_writing_file=Error writing file:
|
||||
error_numeric=must be numeric!
|
||||
error_saving_file=Error saving file
|
||||
hint_copy=Copy selected files and directories to buffer
|
||||
@@ -112,6 +121,7 @@ provide_search_query=Provide search query
|
||||
dialog_recursive=Recursive
|
||||
refresh=Refresh
|
||||
http_downloading=Downloading
|
||||
http_done=Downloaded $1 to $2.
|
||||
uploading=Uploading, please wait...
|
||||
acl_allowed_paths=Allow access to directories
|
||||
acl_allowed_paths2=(For non-root users)
|
||||
@@ -144,8 +154,11 @@ menu_tools=Tools
|
||||
menu_bookmarks=Bookmarks
|
||||
notallowed=You are not allowed to access $1. The allowed directories are : $2
|
||||
error_upload_emax=Uploaded file is larger than the limit of $1
|
||||
extract_etype=Unsupported archive file type
|
||||
|
||||
info_total1=Total: $1 file and $2 directory
|
||||
info_total2=Total: $1 files and $2 directory
|
||||
info_total3=Total: $1 file and $2 directories
|
||||
info_total4=Total: $1 files and $2 directories
|
||||
|
||||
ownership=Ownership
|
||||
|
||||
@@ -6,3 +6,7 @@ desc_no=Filbehandling
|
||||
desc=File Manager
|
||||
desc_ca=Gestor de Fitxers
|
||||
longdesc_ca=Gestor de fitxers lleuger i ràpid escrit en perl.
|
||||
desc_de=Datei Manager
|
||||
longdesc=Schneller, kleiner Datei Manager geschrieben in Perl.
|
||||
desc_de.UTF-8=Datei Manager
|
||||
longdesc_de.UTF-8=Schneller, kleiner Datei Manager geschrieben in Perl.
|
||||
|
||||
@@ -40,6 +40,6 @@ if ($cwd eq $from) {
|
||||
if (scalar(@errors) > 0) {
|
||||
print_errors(@errors);
|
||||
} else {
|
||||
&redirect("index.cgi?path=$path");
|
||||
&redirect("index.cgi?path=".&urlize($path));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@ require './filemin-lib.pl';
|
||||
&ReadParse();
|
||||
|
||||
if(!$in{'name'}) {
|
||||
&redirect("index.cgi?path=$path");
|
||||
&redirect("index.cgi?path=".&urlize($path));
|
||||
}
|
||||
|
||||
get_paths();
|
||||
@@ -12,7 +12,7 @@ if (-e "$cwd/$in{'name'}") {
|
||||
print_errors("$in{'name'} $text{'error_exists'}");
|
||||
} else {
|
||||
if(&rename_file($cwd.'/'.$in{'file'}, $cwd.'/'.$in{'name'})) {
|
||||
&redirect("index.cgi?path=$path");
|
||||
&redirect("index.cgi?path=".&urlize($path));
|
||||
} else {
|
||||
print_errors("$text{'error_rename'} $in{'file'}: $!");
|
||||
}
|
||||
|
||||
@@ -23,4 +23,4 @@ open(BOOK, ">", "$confdir/.bookmarks") or $info = $!;
|
||||
print BOOK $bookmarks;
|
||||
close BOOK;
|
||||
|
||||
&redirect("index.cgi?path=$path");
|
||||
&redirect("index.cgi?path=".&urlize($path));
|
||||
|
||||
@@ -16,21 +16,13 @@ $data =~ s/\r\n/\n/g;
|
||||
if ( $in{'encoding'} && lc( $in{'encoding'} ) ne "utf-8" ) {
|
||||
eval { $data = Encode::encode( $in{'encoding'}, Encode::decode( 'utf-8', $data ) ) };
|
||||
}
|
||||
open(SAVE, ">", $file) or push @errors, "$text{'error_saving_file'} - $!";
|
||||
print SAVE $data;
|
||||
close SAVE;
|
||||
&open_tempfile(SAVE, ">$file") || &error("$text{'error_saving_file'} : $!");
|
||||
&print_tempfile(SAVE, $data);
|
||||
&close_tempfile(SAVE);
|
||||
|
||||
if (scalar(@errors) > 0) {
|
||||
&ui_print_header(undef, $module_info{'name'}, "");
|
||||
print $text{'errors_occured'};
|
||||
print "<ul>";
|
||||
foreach $error(@errors) {
|
||||
print("<li>$error</li>");
|
||||
}
|
||||
print "<ul>";
|
||||
&ui_print_footer("javascript:history.back();", $text{'previous_page'});
|
||||
} elsif ($in{'save_close'}) {
|
||||
&redirect("index.cgi?path=$path");
|
||||
if ($in{'save_close'}) {
|
||||
&redirect("index.cgi?path=".&urlize($path));
|
||||
} else {
|
||||
&redirect("edit_file.cgi?path=$path&file=$in{'file'}");
|
||||
&redirect("edit_file.cgi?path=".&urlize($path).
|
||||
"&file=".&urlize($in{'file'}));
|
||||
}
|
||||
|
||||
@@ -25,4 +25,4 @@ if($in{'caseins'}) {
|
||||
|
||||
print_interface();
|
||||
|
||||
&ui_print_footer("index.cgi?path=$path", $text{'previous_page'});
|
||||
&ui_print_footer("index.cgi?path=".&urize($path), $text{'previous_page'});
|
||||
|
||||
@@ -17,93 +17,105 @@ $cbfunc = \&read_parse_mime_callback;
|
||||
$ENV{'CONTENT_TYPE'} =~ /boundary=(.*)$/ || &error($text{'readparse_enc'});
|
||||
$boundary = $1;
|
||||
|
||||
# Comment right now
|
||||
#if ($ENV{'CONTENT_LENGTH'} && $max && $ENV{'CONTENT_LENGTH'} > $max) {
|
||||
# &error($err);
|
||||
#}
|
||||
|
||||
# Initialize progress tracker
|
||||
&$cbfunc(0, $ENV{'CONTENT_LENGTH'}, undef, $in{'id'});
|
||||
|
||||
#Read the data
|
||||
MAINLOOP: while(index($line,"$boundary--") == -1) {
|
||||
#reset vars on each loop
|
||||
$file = undef;
|
||||
$rest = undef;
|
||||
$prevline = undef;
|
||||
$header = undef;
|
||||
$line = <STDIN>;
|
||||
$got += length($line);
|
||||
if ($upload_max && $got > $upload_max) {
|
||||
&error(&text('error_upload_emax', &nice_size($upload_max)));
|
||||
}
|
||||
# Reset vars on each loop
|
||||
$file = undef;
|
||||
$rest = undef;
|
||||
$prevline = undef;
|
||||
$header = undef;
|
||||
$line = <STDIN>;
|
||||
$got += length($line);
|
||||
if ($upload_max && $got > $upload_max) {
|
||||
&error(&text('error_upload_emax', &nice_size($upload_max)));
|
||||
}
|
||||
&$cbfunc($got, $ENV{'CONTENT_LENGTH'}, undef, $in{'id'});
|
||||
if ($line =~ /(\S+):\s*form-data(.*)$/) {
|
||||
$rest = $2; # We found form data definition, let`s check it
|
||||
} else {
|
||||
next;
|
||||
}
|
||||
# Check if current form data part is file
|
||||
while ($rest =~ /([a-zA-Z]*)=\"([^\"]*)\"(.*)/) {
|
||||
if ($1 eq 'filename') {
|
||||
$file = $2;
|
||||
}
|
||||
$rest = $3;
|
||||
}
|
||||
if ($line =~ /(\S+):\s*form-data(.*)$/) {
|
||||
$rest = $2; # We found form data definition, let`s check it
|
||||
}
|
||||
else {
|
||||
next;
|
||||
}
|
||||
|
||||
# Check if current form data part is file
|
||||
while ($rest =~ /([a-zA-Z]*)=\"([^\"]*)\"(.*)/) {
|
||||
if ($1 eq 'filename') {
|
||||
$file = $2;
|
||||
}
|
||||
$rest = $3;
|
||||
}
|
||||
|
||||
if(defined($file)){
|
||||
# OK, we have a file, let`s save it
|
||||
if (!open(OUTFILE, ">$cwd/$file")) {
|
||||
push @errors, "$text{'error_opening_file_for_writing'} $path/$file - $!"; #die "Can't open $cwd/$file for writing - $!";
|
||||
next;
|
||||
} else {
|
||||
binmode(OUTFILE);
|
||||
# Skip "content-type" as we work in binmode anyway and skip empty line
|
||||
<STDIN>; <STDIN>;
|
||||
# Read all lines until next boundary or form data end
|
||||
while(1) {
|
||||
$line = <STDIN>;
|
||||
if (!defined($line)) {
|
||||
push @errors, "Unexpected end of input";
|
||||
last MAINLOOP;
|
||||
}
|
||||
# Inform progress tracker about our actions
|
||||
$got += length($line);
|
||||
&$cbfunc($got, $ENV{'CONTENT_LENGTH'}, $file, $in{'id'});
|
||||
# Some brainf###ing to deal with last CRLF
|
||||
if(index($line,"$boundary") != -1 ||
|
||||
index($line,"$boundary--") != -1) {
|
||||
chop($prevline);
|
||||
chop($prevline);
|
||||
if (!print OUTFILE $prevline) {
|
||||
push @errors, "text{'error_writing_file'} $path/$file";
|
||||
last MAINLOOP;
|
||||
}
|
||||
last;
|
||||
} else {
|
||||
if (!print OUTFILE $prevline) {
|
||||
push @errors, "text{'error_writing_file'} $path/$file";
|
||||
last MAINLOOP;
|
||||
}
|
||||
$prevline = $line;
|
||||
}
|
||||
}
|
||||
# File saved, let`s go further
|
||||
close(OUTFILE);
|
||||
}
|
||||
} else {
|
||||
# Just skip everything until next boundary or form data end
|
||||
while(index($line, "$boundary") == -1 ||
|
||||
index($line, "$boundary--") == -1) {
|
||||
$line = <STDIN>;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (defined($file)) {
|
||||
# OK, we have a file, let`s save it
|
||||
my $full = "$cwd/$file";
|
||||
my $newfile = !-e $full;
|
||||
my @st = stat($cwd);
|
||||
if (!open(OUTFILE, ">$full")) {
|
||||
push @errors, "$text{'error_opening_file_for_writing'} $path/$file - $!";
|
||||
next;
|
||||
}
|
||||
else {
|
||||
binmode(OUTFILE);
|
||||
if ($newfile) {
|
||||
# Copy ownership from parent dir
|
||||
&set_ownership_permissions($st[4], $st[5], undef,$full);
|
||||
}
|
||||
# Skip "content-type" as we work in binmode anyway and
|
||||
# skip empty line
|
||||
<STDIN>;
|
||||
<STDIN>;
|
||||
|
||||
# Read all lines until next boundary or form data end
|
||||
while(1) {
|
||||
$line = <STDIN>;
|
||||
if (!defined($line)) {
|
||||
push @errors, "Unexpected end of input";
|
||||
last MAINLOOP;
|
||||
}
|
||||
# Inform progress tracker about our actions
|
||||
$got += length($line);
|
||||
&$cbfunc($got, $ENV{'CONTENT_LENGTH'}, $file, $in{'id'});
|
||||
|
||||
# Some brainf###ing to deal with last CRLF
|
||||
if (index($line,"$boundary") != -1 ||
|
||||
index($line,"$boundary--") != -1) {
|
||||
chop($prevline);
|
||||
chop($prevline);
|
||||
if (!print OUTFILE $prevline) {
|
||||
push @errors, "text{'error_writing_file'} $path/$file";
|
||||
last MAINLOOP;
|
||||
}
|
||||
last;
|
||||
}
|
||||
else {
|
||||
if (!print OUTFILE $prevline) {
|
||||
push @errors, "text{'error_writing_file'} $path/$file";
|
||||
last MAINLOOP;
|
||||
}
|
||||
$prevline = $line;
|
||||
}
|
||||
}
|
||||
# File saved, let`s go further
|
||||
close(OUTFILE);
|
||||
}
|
||||
}
|
||||
else {
|
||||
# Just skip everything until next boundary or form end
|
||||
while (index($line, "$boundary") == -1 ||
|
||||
index($line, "$boundary--") == -1) {
|
||||
$line = <STDIN>;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# Everything finished, inform progress tracker
|
||||
&$cbfunc(-1, $ENV{'CONTENT_LENGTH'}, undef, $in{'id'});
|
||||
#&ui_print_footer("index.cgi?path=$path", $text{'previous_page'});
|
||||
if (scalar(@errors) > 0) {
|
||||
print_errors(@errors);
|
||||
} else {
|
||||
&redirect("index.cgi?path=$path");
|
||||
}
|
||||
print_errors(@errors);
|
||||
}
|
||||
else {
|
||||
&redirect("index.cgi?path=".&urlize($path));
|
||||
}
|
||||
@@ -21,3 +21,5 @@ longdesc_de=Erstellt Regeln, Filtern und Weiterleiten von eingehende E-Mail.
|
||||
desc_pl=Filtry i przekierowanie e-maili
|
||||
longdesc_pl=Twórz regu³y filtrów i przekierowania przychodz±cych e-maili.
|
||||
longdesc_ca=Crea regles per filtrar i reenviar el correu d'entrada.
|
||||
desc_de.UTF-8=Filter und Mailweiterleitung
|
||||
longdesc_de.UTF-8=Erstellt Regeln, Filtern und Weiterleiten von eingehende E-Mail.
|
||||
|
||||
@@ -11,3 +11,4 @@ after_apply_cmd=Command to run after applying configuration,3,None
|
||||
line1=System configuration,11
|
||||
save_file=IPtables save file to edit,3,Use operating system or Webmin default
|
||||
direct=Directly edit firewall rules instead of save file?,1,1-Yes,0-No
|
||||
filter_chain=Comma sepeated list of regexes to filter out chains not managed by firewall,0
|
||||
|
||||
@@ -11,3 +11,4 @@ after_apply_cmd=Befehle zum Anwendung der Konfiguration,3,Keiner
|
||||
line1=System Konfiguration,11
|
||||
save_file=IPtables Speicherdatei zum Bearbeiten,3,Verwendung des Betriebssystems oder Webmin Standard
|
||||
direct=Direktes Bearbeiten der Firewall-Regeln anstatt von gespeicherter Datei?,1,1-Ja,0-Nein
|
||||
filter_chain=Komma getrennte Liste von Regex zum Ausfiltern von Ketten die nicht von Firewall verwaltet werden,0
|
||||
|
||||
@@ -53,9 +53,21 @@ local $lnum = 0;
|
||||
open(FILE, $_[0] || ($config{'direct'} ? "iptables-save 2>/dev/null |"
|
||||
: $iptables_save_file));
|
||||
local $cmt;
|
||||
LINE:
|
||||
while(<FILE>) {
|
||||
local $read_comment;
|
||||
s/\r|\n//g;
|
||||
s/\r|\n//g;
|
||||
# regex to filter out chains not managed by firewall, i.e. fail2ban
|
||||
if ($config{'direct'} && $config{'filter_chain'}) {
|
||||
foreach $filter (split(',', $config{'filter_chain'})) {
|
||||
# NOTE: keep ":chain ..." as reference to avoid error when rebuild active config
|
||||
# -A|-I chain ... -j chain -> skip line if machtes filter_chain
|
||||
if (/^.?-(A|I)\s+(\S+).*\s+-j\s+(.*)/) {
|
||||
next LINE if($2 =~ /^$filter$/);
|
||||
#next LINE if($3 =~ /^$filter$/);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (s/#\s*(.*)$//) {
|
||||
$cmt .= " " if ($cmt);
|
||||
$cmt .= $1;
|
||||
@@ -194,6 +206,30 @@ else {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
# get_ipsets_active()
|
||||
# return a list of active ipsets
|
||||
sub get_ipsets_active
|
||||
{
|
||||
local @rv, $name, $set={};
|
||||
open(FILE, "ipset list -t 2>/dev/null |");
|
||||
LINE:
|
||||
while(<FILE>) {
|
||||
# remove newlines, get arg and value
|
||||
s/\r|\n//g;
|
||||
local ($n, $v) = split(/: /, $_);
|
||||
($n) = $n =~ /(\S+)/;
|
||||
# get values from name to number
|
||||
$name=$v if ($n eq "Name");
|
||||
$set->{$n}=$v;
|
||||
if ($n eq "Number") {
|
||||
push(@rv, $set);
|
||||
$set={};
|
||||
}
|
||||
}
|
||||
return @rv;
|
||||
}
|
||||
|
||||
# describe_rule(&rule)
|
||||
# Returns a human-readable description of some rule conditions
|
||||
sub describe_rule
|
||||
@@ -204,13 +240,25 @@ foreach $d ('p', 's', 'd', 'i', 'o', 'f', 'dport',
|
||||
'icmp-type', 'mac-source', 'limit', 'limit-burst',
|
||||
'ports', 'uid-owner', 'gid-owner',
|
||||
'pid-owner', 'sid-owner', 'state', 'tos',
|
||||
'dports', 'sports', 'physdev-in', 'physdev-out') {
|
||||
'dports', 'sports', 'physdev-in', 'physdev-out', 'args') {
|
||||
if ($_[0]->{$d}) {
|
||||
# get name and values
|
||||
local ($n, @v) = @{$_[0]->{$d}};
|
||||
# with additional args
|
||||
if ($d eq 'args') {
|
||||
# get args
|
||||
@v = grep {/\S/} split(/ / , $_[0]->{$d});
|
||||
# first arg is name, next are values
|
||||
$n=shift(@v);
|
||||
# translate src and dest parameter for ipset
|
||||
push(@v, &text("desc_". pop(@v))) if ($n eq "--match-set");
|
||||
}
|
||||
# uppercase for p
|
||||
@v = map { uc($_) } @v if ($d eq 'p');
|
||||
@v = map { join(", ", split(/,/, $_)) } @v
|
||||
if ($d eq 's' || $d eq 'd');
|
||||
local $txt = &text("desc_$d$n", map { "<b>$_</b>" } @v);
|
||||
# merge all in one for s and d
|
||||
@v = map { join(", ", split(/,/, $_)) } @v if ($d eq 's' || $d eq 'd' );
|
||||
# compose desc_$n$d to get localized message, provide values as $1, ..., $n
|
||||
local $txt = &text("desc_$d$n", map { "<strong>$_</strong>" } @v);
|
||||
push(@c, $txt) if ($txt);
|
||||
}
|
||||
}
|
||||
@@ -488,5 +536,16 @@ foreach $s (&list_cluster_servers()) {
|
||||
return undef;
|
||||
}
|
||||
|
||||
# validate_iptables_config()
|
||||
# Tests that the rules file can be parsed
|
||||
sub validate_iptables_config
|
||||
{
|
||||
my $out = &backquote_command(
|
||||
"iptables-restore --test <$iptables_save_file 2>&1");
|
||||
return undef if (!$?);
|
||||
$out =~ s/Try\s.*more\s+information.*//;
|
||||
return $out;
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
|
||||
@@ -48,8 +48,9 @@ if (!$config{'direct'} && &foreign_check("init")) {
|
||||
# Check if the save file exists. If not, check for any existing firewall
|
||||
# rules, and offer to create a save file from them
|
||||
@livetables = &get_iptables_save("iptables-save 2>/dev/null |");
|
||||
&shorewall_message(\@livetables);
|
||||
&firewalld_message(\@livetables);
|
||||
|
||||
# Display warnings about active external firewalls!
|
||||
&external_firewall_message(\@livetables);
|
||||
if (!$config{'direct'} &&
|
||||
(!-s $iptables_save_file || $in{'reset'}) && $access{'setup'}) {
|
||||
@tables = @livetables;
|
||||
@@ -127,6 +128,15 @@ else {
|
||||
@tables = &get_iptables_save() if ($need_reload);
|
||||
}
|
||||
|
||||
# Check if the current config is valid
|
||||
if (!$config{'direct'}) {
|
||||
my $err = &validate_iptables_config();
|
||||
if ($err) {
|
||||
print "<b>",&text('index_evalid',
|
||||
&html_escape($err)),"</b><p>\n";
|
||||
}
|
||||
}
|
||||
|
||||
# Work out the default table
|
||||
if (!defined($in{'table'})) {
|
||||
foreach $t (@tables) {
|
||||
@@ -171,16 +181,30 @@ else {
|
||||
$form++;
|
||||
}
|
||||
|
||||
# Display a table of rules for each chain
|
||||
foreach $c (sort by_string_for_iptables keys %{$table->{'defaults'}}) {
|
||||
print &ui_hr();
|
||||
@rules = grep { lc($_->{'chain'}) eq lc($c) }
|
||||
@{$table->{'rules'}};
|
||||
print "<b>",$text{"index_chain_".lc($c)} ||
|
||||
&text('index_chain', "<tt>$c</tt>"),"</b><br>\n";
|
||||
print "<form action=save_policy.cgi>\n";
|
||||
print &ui_hidden("table", $in{'table'});
|
||||
print &ui_hidden("chain", $c);
|
||||
# Display a table of rules for each chain
|
||||
CHAIN:
|
||||
foreach $c (sort by_string_for_iptables keys %{$table->{'defaults'}}) {
|
||||
print &ui_hr();
|
||||
@rules = grep { lc($_->{'chain'}) eq lc($c) }
|
||||
@{$table->{'rules'}};
|
||||
print "<b>",$text{"index_chain_".lc($c)} ||
|
||||
&text('index_chain', "<tt>$c</tt>"),"</b><br>\n";
|
||||
|
||||
# check if chain is filtered out
|
||||
if ($config{'filter_chain'}) {
|
||||
foreach $filter (split(',', $config{'filter_chain'})) {
|
||||
if($c =~ /^$filter$/) {
|
||||
# not managed by firewall, do not dispaly or modify
|
||||
print "<em>".$text{'index_filter_chain'}."</em><br>\n";
|
||||
next CHAIN;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
print "<form action=save_policy.cgi>\n";
|
||||
print &ui_hidden("table", $in{'table'});
|
||||
print &ui_hidden("chain", $c);
|
||||
|
||||
if (@rules) {
|
||||
@links = ( &select_all_link("d", $form),
|
||||
&select_invert_link("d", $form) );
|
||||
@@ -189,10 +213,10 @@ else {
|
||||
# Generate the header
|
||||
local (@hcols, @tds);
|
||||
push(@hcols, "", $text{'index_action'});
|
||||
push(@tds, "width=5", "width=10% nowrap");
|
||||
push(@tds, "width=5", "width=20% nowrap");
|
||||
if ($config{'view_condition'}) {
|
||||
push(@hcols, $text{'index_desc'});
|
||||
push(@tds, "");
|
||||
push(@tds, "nowrap");
|
||||
}
|
||||
if ($config{'view_comment'}) {
|
||||
push(@hcols, $text{'index_comm'});
|
||||
@@ -209,11 +233,24 @@ else {
|
||||
local $act =
|
||||
$text{"index_jump_".lc($r->{'j'}->[1])} ||
|
||||
&text('index_jump', $r->{'j'}->[1]);
|
||||
if ($edit) {
|
||||
|
||||
# check if chain jump TO is filtered out
|
||||
local $chain_filtered;
|
||||
if ($config{'filter_chain'}) {
|
||||
foreach $filter (split(',', $config{'filter_chain'})) {
|
||||
if($r->{'j'}->[1] =~ /^$filter$/) {
|
||||
$chain_filtered=&text('index_filter_chain');
|
||||
$act=$act."<br><em>$chain_filtered</em>";
|
||||
}
|
||||
}
|
||||
}
|
||||
# chain to jump to is filtered, switch of edit
|
||||
if ($edit && !$chain_filtered) {
|
||||
push(@cols, &ui_link("edit_rule.cgi?table=".&urlize($in{'table'})."&idx=$r->{'index'}",$act));
|
||||
}
|
||||
else {
|
||||
push(@cols, $act);
|
||||
# add col for not visible checkmark
|
||||
push(@cols, "", $act);
|
||||
}
|
||||
if ($config{'view_condition'}) {
|
||||
push(@cols, &describe_rule($r));
|
||||
@@ -261,16 +298,16 @@ else {
|
||||
"&chain=".&urlize($c)."&new=1&".
|
||||
"before=$r->{'index'}'><img src=".
|
||||
"images/before.gif border=0></a>";
|
||||
push(@cols, $adder);
|
||||
|
||||
if ($edit) {
|
||||
print &ui_checked_columns_row(
|
||||
\@cols, \@tds, "d", $r->{'index'});
|
||||
}
|
||||
else {
|
||||
print &ui_columns_row(\@cols, \@tds);
|
||||
}
|
||||
}
|
||||
push(@cols, $adder);
|
||||
# chain to jump to is filtered, switch of edit
|
||||
if ($edit && !$chain_filtered) {
|
||||
print &ui_checked_columns_row(
|
||||
\@cols, \@tds, "d", $r->{'index'});
|
||||
}
|
||||
else {
|
||||
print &ui_columns_row(\@cols, \@tds);
|
||||
}
|
||||
}
|
||||
print &ui_columns_end();
|
||||
print &ui_links_row(\@links);
|
||||
}
|
||||
@@ -345,6 +382,28 @@ else {
|
||||
$form++;
|
||||
}
|
||||
|
||||
|
||||
# Show ipset overview if ipsets are availibe
|
||||
# may need to check if they are used by firewall rules
|
||||
@ipsets = &get_ipsets_active();
|
||||
if (@ipsets) {
|
||||
print &ui_hr();
|
||||
print "<b>$text{'index_ipset_title'}</b>";
|
||||
# Generate the header
|
||||
local (@hcols, @tds);
|
||||
push(@hcols, $text{'index_ipset'}, $text{'index_ipset_name'}, $text{'index_ipset_type'},
|
||||
$text{'index_ipset_elem'}, $text{'index_ipset_size'});
|
||||
push(@tds, "", "", "", "", "");
|
||||
print &ui_columns_start(\@hcols, 100, 0, \@tds);
|
||||
# Generate a row for each rule
|
||||
foreach $s (@ipsets) {
|
||||
local @cols;
|
||||
push(@cols, "", "<b>$s->{'Name'}</b>", $s->{'Type'},$s->{'Number'},$s->{'Size'});
|
||||
print &ui_columns_row(\@cols, \@tds);
|
||||
}
|
||||
print &ui_columns_end();
|
||||
}
|
||||
|
||||
# Display buttons for applying and un-applying the configuration,
|
||||
# and for creating an init script if possible
|
||||
print &ui_hr();
|
||||
@@ -411,23 +470,32 @@ else {
|
||||
|
||||
&ui_print_footer("/", $text{'index'});
|
||||
|
||||
sub shorewall_message
|
||||
{
|
||||
local ($filter) = grep { $_->{'name'} eq 'filter' } @{$_[0]};
|
||||
if ($filter->{'defaults'}->{'shorewall'}) {
|
||||
print "<b><center>",
|
||||
&text('index_shorewall', "$gconfig{'webprefix'}/shorewall/"),
|
||||
"</b></center><p>\n";
|
||||
}
|
||||
}
|
||||
|
||||
sub firewalld_message
|
||||
{
|
||||
local ($filter) = grep { $_->{'name'} eq 'filter' } @{$_[0]};
|
||||
if ($filter->{'defaults'}->{'INPUT_ZONES'}) {
|
||||
print "<b><center>",
|
||||
&text('index_firewalld', "$gconfig{'webprefix'}/firewalld/"),
|
||||
"</b></center><p>\n";
|
||||
}
|
||||
}
|
||||
sub external_firewall_message
|
||||
{
|
||||
local $fwname="";
|
||||
local $fwconfig="$gconfig{'webprefix'}/config.cgi?firewall";
|
||||
|
||||
# detect external firewalls
|
||||
local ($filter) = grep { $_->{'name'} eq 'filter' } @{$_[0]};
|
||||
if ($filter->{'defaults'}->{'shorewall'}) {
|
||||
$fwname+='shorewall ';
|
||||
}
|
||||
if ($filter->{'defaults'}->{'INPUT_ZONES'}) {
|
||||
$fwname+='firewalld ';
|
||||
}
|
||||
if ($filter->{'defaults'} ~~ /^f2b-|^fail2ban-/) {
|
||||
$fwname+='fail2ban ';
|
||||
}
|
||||
# warning about not using direct
|
||||
if($fwname && !$config{'direct'}) {
|
||||
print "<b><center>",
|
||||
&text('index_filter_nodirect', $fwconfig),
|
||||
"</b></center><p>\n";
|
||||
}
|
||||
# naming the detected firewall modules
|
||||
foreach my $word (split ' ', $fwname) {
|
||||
print "<center>",
|
||||
&text("index_$word", "$gconfig{'webprefix'}/$word/", $fwconfig),
|
||||
"</center><p>\n";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -41,6 +41,10 @@ delete_rusure=Sind Sie sicher, dass Sie die Kette $1 löschen möchten?
|
||||
delete_title=Lösche Regel
|
||||
desc_always=Immer
|
||||
desc_and=und
|
||||
desc_args--match-set=$2 in IP-Set $1 enthalten ist
|
||||
desc_src=Quelle
|
||||
desc_dest=Ziel
|
||||
|
||||
desc_conds=Wenn $1
|
||||
desc_d=Ziel ist $1
|
||||
desc_d!=Ziel ist nicht $1
|
||||
@@ -143,8 +147,9 @@ edit_sport=Quell TCP oder UDP Port
|
||||
edit_state=Verbindungsstatus
|
||||
edit_state_established=Bestehende Verbindung
|
||||
edit_state_invalid=Kein Teil einer Verbindung
|
||||
edit_state_related=Teil einer Verbindung
|
||||
edit_state_new=Neue Verbindung
|
||||
edit_state_untracked=Nicht getrackt
|
||||
edit_state_untracked=Nicht verfolgt
|
||||
edit_tcpflags=TCP flag gesetzt
|
||||
edit_tcpoption=TCP Option Nummer nicht gesetzt
|
||||
edit_title1=Regel hinzufügen
|
||||
@@ -190,8 +195,12 @@ index_desc=Bedingung
|
||||
index_ecommand=Der Befehl $1 wurde nicht auf Ihrem System gefunden. Webmin benötigt diesen Befehl um IPtables zu konfigurieren.
|
||||
index_editing=Regel Datei $1
|
||||
index_ekernel=Ein Fehler ist beim Überprüfen Ihrer aktuellen IPtables-Konfiguration aufgetreten : $1 Dies könnte darauf hindeuten, dass Ihr Kernel IPtables nicht unterstützt.
|
||||
index_evalid=WARNUNG! Ihre aktuelle IPtables-Konfiguration ist ungültig : $1
|
||||
index_existing=Webmin hat erkannt, dass $1 IPtables Firewall-Regel(n) derzeit in Benutzung sind, die nicht in der Datei $2 gespeichert wurden. Diese Regeln wurden vermutlich von einem Skript einrichtet, jedoch dieses Modul nicht in der Lage ist, dieses zu lesen und zu bearbeiten.<p>Wenn Sie dieses Modul benutzen wollen, um Ihre IPtables-Firewall verwalten zu lassen, klicken Sie auf die Schaltfläche unten, um die bestehenden Regeln zu einer Sicherungsdatei zu konvertieren und anschließend Ihr bestehendes Firewall-Skript zu deaktivieren.
|
||||
index_firewalld=Warnung! Es scheint, dass FirewallD verwendet wird, um das Firewall-System zu generieren. Vielleicht sollten Sie die <a href='$1'>FirewallD Firewall-Modul</a> verwenden.
|
||||
index_fail2ban=Hinweis! Verwendung von Fail2Ban wurde erkannt. Verwalten sie Fail2Ban mit dem <a href='$1'>Fail2Ban Modul</a> und filtern nach <a href=$2>f2b-.*</a> bzw. <a href=$2>fail2ban-.*</a>
|
||||
index_filter_chain=wird nicht von Linux-Firewall verwaltet.
|
||||
index_filter_nodirect=Warnung! Extern verwaltete Regeln erkannt. Bitte aktiveren sie die Option "<a href=$1>Direkte Bearbeitung von Firewall-Regeln"</a>.
|
||||
index_firewalld=Hinweis! Es scheint, dass FirewallD verwendet wird, um das Firewall-System zu generieren. Vielleicht sollten Sie die <a href='$1'>FirewallD Firewall-Modul</a> verwenden.
|
||||
index_header=Firewall Konfiguration von $1
|
||||
index_headerex=Bestehende Firewall Konfiguration
|
||||
index_jump=Führe Regel $1 aus
|
||||
@@ -217,15 +226,21 @@ index_return=Regelliste
|
||||
index_rsetup=Die IPtables-Firewall-Konfiguration auf Ihrem System ist dabei neu eingerichtet zu werden. Webmin richtet neue Standard-Regeln ein, die in der Datei $1 gespeichert werden, mit den initialen Einstellungen basierend Ihrer Firewall-Typ-Auswahl unten ..
|
||||
index_saveex=Speichere Firewall Regeln
|
||||
index_setup=Keine IPtables-Firewall wurde bisher auf Ihrem System eingerichtet. Webmin kann das für Sie erledigen und dies in der Datei $1, mit den initialen Einstellungen basierend Ihre Firewall-Typ Auswahl unten, speichern..
|
||||
index_shorewall=Warnung! Es scheint, dass Shorewall verwendet wird, um das Firewall-System zu generieren. Vielleicht sollten Sie die <a href='$1'>Shoreline Firewall-Modul</a> verwenden.
|
||||
index_shorewall=Hinweis! Es scheint, dass Shorewall verwendet wird, um das Firewall-System zu generieren. Vielleicht sollten Sie die <a href='$1'>Shoreline Firewall-Modul</a> verwenden.
|
||||
index_table_filter=Packet filtering (filter)
|
||||
index_table_mangle=Packet alteration (mangle)
|
||||
index_table_nat=Network address translation (nat)
|
||||
index_table_nat=Netzwerk Adress Translation (NAT)
|
||||
index_title=Linux Firewall
|
||||
index_unapply=Konfiguration zurücksetzen
|
||||
index_unapply2=Speichere Konfiguration
|
||||
index_unapply2desc=Klicke auf diese Schaltfläche, um die Konfiguration oben in die permanente Firewall-Konfigurationsdatei zu speichern.
|
||||
index_unapplydesc=Klicke auf diese Schaltfläche, um die Konfiguration die oben aufgeführt ist, auf die gerade aktive, zurückzusetzen.
|
||||
index_ipset=IP-Set
|
||||
index_ipset_title=Aktive IP-Sets die von der Firewall verwendet werden können
|
||||
index_ipset_name=Name
|
||||
index_ipset_type=Typ
|
||||
index_ipset_elem=# Elemente
|
||||
index_ipset_size=Größe
|
||||
log_add_group=Cluster-Server von Gruppe $1 hinzugefügt
|
||||
log_add_host=Cluster Server $1 hinzugefügt
|
||||
log_apply=Angewandte Konfiguration
|
||||
|
||||
@@ -3,6 +3,7 @@ index_editing=Rules file $1
|
||||
index_ecommand=The command $1 was not found on your system. Webmin needs this command to configure IPtables.
|
||||
index_ekernel=An error occured when checking your current IPtables configuration : $1 This may indicate that your kernel does not support IPtables.
|
||||
index_header=Firewall configuration from $1
|
||||
index_evalid=WARNING! Your current IPtables configuration is invalid : $1
|
||||
index_change=Showing IPtable:
|
||||
index_chain_input=Incoming packets (INPUT) - Only applies to packets addressed to this host
|
||||
index_chain_output=Outgoing packets (OUTPUT) - Only applies to packets originated by this host
|
||||
@@ -67,12 +68,21 @@ index_auto4=Block all except SSH, IDENT, ping and high ports on interface:
|
||||
index_auto5=Block all except ports used for virtual hosting, on interface:
|
||||
index_auto=Setup Firewall
|
||||
index_add=Add
|
||||
index_shorewall=Warning! It appears that Shorewall is being used to generate your system's firewall. Maybe you should use the <a href='$1'>Shoreline Firewall module</a> instead.
|
||||
index_firewalld=Warning! It appears that FirewallD is being used to generate your system's firewall. Maybe you should use the <a href='$1'>FirewallD module</a> instead.
|
||||
index_shorewall=Note! It appears that Shorewall is being used to generate your system's firewall. Maybe you should use the <a href='$1'>Shoreline Firewall module</a> instead.
|
||||
index_firewalld=Note! It appears that FirewallD is being used to generate your system's firewall. Maybe you should use the <a href='$1'>FirewallD module</a> instead.
|
||||
index_fail2ban=Note! It appears that Fail2Ban is being used to manage some firewall rules. You should modify them with <a href='$1'>Fail2Ban module</a> and filter <a href=$2>f2b-.*</a> or <a href=$2>fail2ban-.*</a>.
|
||||
index_filter_chain=is not managed by firewall.
|
||||
index_filter_nodirect=Warning! External managed rules detected. Activate "<a href=$1>Directly edit firewall rules"</a> or your firewall rules may break.
|
||||
index_reset=Reset Firewall
|
||||
index_resetdesc=Click this button to clear all existing firewall rules and set up new rules for a basic initial configuration.
|
||||
index_cluster=Cluster Servers
|
||||
index_clusterdesc=Click this button to set up additional Webmin servers to which the firewall configuration will be automatically copied.
|
||||
index_ipset=IP-set
|
||||
index_ipset_title=Active IP-sets which can be used by firewall rules
|
||||
index_ipset_name=Name
|
||||
index_ipset_type=Type
|
||||
index_ipset_elem=# Elements
|
||||
index_ipset_size=Size
|
||||
|
||||
desc_p=protocol is $1
|
||||
desc_p!=protocol is not $1
|
||||
@@ -127,6 +137,9 @@ desc_physdev-out!=output physical interface is not $1
|
||||
desc_conds=If $1
|
||||
desc_and=and
|
||||
desc_always=Always
|
||||
desc_args--match-set=$2 is contained in IP-set $1
|
||||
desc_src=source
|
||||
desc_dest=destination
|
||||
|
||||
redhat_einstalled=No <tt>iptables</tt> bootup action was found, indicating that the IPtables package is not installed on your system
|
||||
redhat_eoutput=An error occured getting IPtables status from the command $1. This probably indicates that your system has been configured to use IPchains instead of IPtables.
|
||||
|
||||
@@ -73,6 +73,7 @@ index_reset=Reinicia el Tallafocs
|
||||
index_resetdesc=Fes clic sobre aquest botó per eliminar totes les regles existents del tallafocs i establir-ne de noves per a una configuració inicial bàsica.
|
||||
index_cluster=Servidors del Cluster
|
||||
index_clusterdesc=Fes clic sobre aquest botó per configurar servidors Webmin addicionals als quals es copiarà automàticament la configuració del tallafocs.
|
||||
index_position=Regles $1 a $2 de $3
|
||||
|
||||
desc_p=el protocol és $1
|
||||
desc_p!=el protocol no és $1
|
||||
|
||||
@@ -1,2 +1,4 @@
|
||||
---- Changes since 1.750 ----
|
||||
First version of this module, for configuring allowed ports and services in FirewallD.
|
||||
---- Changes since 1.840 ----
|
||||
Added support for creating and editing port forwards.
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
firewall_cmd=Camí complet del programa firewall-cmd,0
|
||||
firewall_cmd=Camí complet del programa firewall-cmd,0
|
||||
init_name=Nom del script d'inici de FirewallD,0
|
||||
|
||||
@@ -23,6 +23,9 @@ foreach my $d (@d) {
|
||||
elsif ($w[0] eq "service") {
|
||||
$err = &delete_firewalld_service($zone, $w[1]);
|
||||
}
|
||||
elsif ($w[0] eq "forward") {
|
||||
$err = &delete_firewalld_forward($zone, @w[1..4]);
|
||||
}
|
||||
else {
|
||||
next;
|
||||
}
|
||||
|
||||
92
firewalld/edit_forward.cgi
Executable file
92
firewalld/edit_forward.cgi
Executable file
@@ -0,0 +1,92 @@
|
||||
#!/usr/local/bin/perl
|
||||
# Show a form to edit one port forward
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
require 'firewalld-lib.pl';
|
||||
our (%in, %text);
|
||||
&ReadParse();
|
||||
|
||||
# Get the zone and rule
|
||||
my @zones = &list_firewalld_zones();
|
||||
my ($zone) = grep { $_->{'name'} eq $in{'zone'} } @zones;
|
||||
$zone || &error($text{'port_ezone'});
|
||||
my ($mode, $ports, $proto, $port, $portlow, $porthigh,
|
||||
$dstmode, $dstports, $dstport, $dstportlow, $dstporthigh, $dstaddr);
|
||||
if (!$in{'new'}) {
|
||||
&ui_print_header(undef, $text{'forward_edit'}, "");
|
||||
($ports, $proto, $dstports, $dstaddr) = split(/\//, $in{'id'});
|
||||
if ($ports =~ /^(\d+)\-(\d+)$/) {
|
||||
$mode = 1;
|
||||
($portlow, $porthigh) = ($1, $2);
|
||||
}
|
||||
else {
|
||||
$mode = 0;
|
||||
$port = $ports;
|
||||
}
|
||||
if ($dstports =~ /^(\d+)\-(\d+)$/) {
|
||||
$dstmode = 1;
|
||||
($dstportlow, $dstporthigh) = ($1, $2);
|
||||
}
|
||||
else {
|
||||
$dstmode = 0;
|
||||
$dstport = $dstports;
|
||||
}
|
||||
}
|
||||
else {
|
||||
&ui_print_header(undef, $text{'forward_create'}, "");
|
||||
$mode = 0;
|
||||
$dstmode = 0;
|
||||
$proto = "tcp";
|
||||
}
|
||||
|
||||
print &ui_form_start("save_forward.cgi", "post");
|
||||
print &ui_hidden("zone", $in{'zone'});
|
||||
print &ui_hidden("id", $in{'id'});
|
||||
print &ui_hidden("new", $in{'new'});
|
||||
print &ui_table_start($text{'forward_header'}, undef, 2);
|
||||
|
||||
# Zone name
|
||||
print &ui_table_row($text{'forward_zone'},
|
||||
"<tt>".&html_escape($zone->{'name'})."</tt>");
|
||||
|
||||
# Port number or range
|
||||
print &ui_table_row($text{'forward_port'},
|
||||
&ui_radio_table("mode", $mode,
|
||||
[ [ 0, $text{'port_mode0'},
|
||||
&ui_textbox("port", $port, 6) ],
|
||||
[ 1, $text{'port_mode1'},
|
||||
&ui_textbox("portlow", $portlow, 6)." - ".
|
||||
&ui_textbox("porthigh", $porthigh, 6) ] ]));
|
||||
|
||||
# Protocol name
|
||||
print &ui_table_row($text{'port_proto'},
|
||||
&ui_select("proto", $proto,
|
||||
[ [ "tcp", "TCP" ],
|
||||
[ "udp", "UDP" ] ], 1, 0, 1));
|
||||
|
||||
# Destination port number or range
|
||||
print &ui_table_row($text{'forward_dstport'},
|
||||
&ui_radio_table("dstmode", $dstmode,
|
||||
[ [ 0, $text{'port_mode0'},
|
||||
&ui_textbox("dstport", $dstport, 6) ],
|
||||
[ 1, $text{'port_mode1'},
|
||||
&ui_textbox("dstportlow", $dstportlow, 6)." - ".
|
||||
&ui_textbox("dstporthigh", $dstporthigh, 6) ],
|
||||
[ 2, $text{'port_mode2'} ] ]));
|
||||
|
||||
# Destination address
|
||||
print &ui_table_row($text{'forward_dstaddr'},
|
||||
&ui_opt_textbox("dstaddr", $dstaddr, 40, $text{'forward_dstlocal'}));
|
||||
|
||||
print &ui_table_end();
|
||||
if ($in{'new'}) {
|
||||
print &ui_form_end([ [ undef, $text{'create'} ] ]);
|
||||
}
|
||||
else {
|
||||
print &ui_form_end([ [ undef, $text{'save'} ],
|
||||
[ 'delete', $text{'delete'} ] ]);
|
||||
}
|
||||
|
||||
&ui_print_footer("index.cgi?zone=".&urlize($zone->{'name'}),
|
||||
$text{'index_return'});
|
||||
@@ -38,12 +38,15 @@ my $out = &backquote_command("$config{'firewall_cmd'} --list-all-zones ".
|
||||
if ($?) {
|
||||
&error("Failed to list zones : $out");
|
||||
}
|
||||
my $default_zone = backquote_command(
|
||||
"$config{'firewall_cmd'} --get-default-zone</dev/null 2>&1");
|
||||
chomp($default_zone);
|
||||
my $zone;
|
||||
foreach my $l (split(/\r?\n/, $out)) {
|
||||
if ($l =~ /^(\S+)(\s+\(.*\))?/) {
|
||||
# New zone
|
||||
$zone = { 'name' => $1,
|
||||
'default' => $2 ? 1 : 0 };
|
||||
'default' => $default_zone eq $1 ? 1 : 0 };
|
||||
push(@rv, $zone);
|
||||
}
|
||||
elsif ($l =~ /^\s+(\S+):\s*(.*)/ && $zone) {
|
||||
@@ -118,6 +121,49 @@ my $out = &backquote_logged("$config{'firewall_cmd'} ".
|
||||
return $? ? $out : undef;
|
||||
}
|
||||
|
||||
# create_firewalld_forward(&zone, src-port, src-proto, dst-port, dst-addr)
|
||||
# Create a new forwarding rule in some zone. Returns undef on success or an
|
||||
# error message on failure
|
||||
sub create_firewalld_forward
|
||||
{
|
||||
my ($zone, $srcport, $srcproto, $dstport, $dstaddr) = @_;
|
||||
my $out = &backquote_logged(
|
||||
$config{'firewall_cmd'}." ".
|
||||
"--zone ".quotemeta($zone->{'name'})." ".
|
||||
"--permanent ".
|
||||
"--add-forward-port=port=$srcport:proto=$srcproto".
|
||||
($dstport ? ":toport=$dstport" : "").
|
||||
($dstaddr ? ":toaddr=$dstaddr" : "").
|
||||
" 2>&1");
|
||||
return $? ? $out : undef;
|
||||
}
|
||||
|
||||
# delete_firewalld_forward(&zone, src-port, src-proto, dst-port, dst-addr)
|
||||
# Deletes a forwarding rule in some zone. Returns undef on success or an
|
||||
# error message on failure
|
||||
sub delete_firewalld_forward
|
||||
{
|
||||
my ($zone, $srcport, $srcproto, $dstport, $dstaddr) = @_;
|
||||
my $out = &backquote_logged(
|
||||
$config{'firewall_cmd'}." ".
|
||||
"--zone ".quotemeta($zone->{'name'})." ".
|
||||
"--permanent ".
|
||||
"--remove-forward-port=port=$srcport:proto=$srcproto".
|
||||
($dstport ? ":toport=$dstport" : "").
|
||||
($dstaddr ? ":toaddr=$dstaddr" : "").
|
||||
" 2>&1");
|
||||
return $? ? $out : undef;
|
||||
}
|
||||
|
||||
# parse_firewalld_forward(str)
|
||||
# Parses a forward string into port, proto, dstport and dstaddr
|
||||
sub parse_firewalld_forward
|
||||
{
|
||||
my ($str) = @_;
|
||||
my %w = map { split(/=/, $_) } split(/:/, $str);
|
||||
return ($w{'port'}, $w{'proto'}, $w{'toport'}, $w{'toaddr'});
|
||||
}
|
||||
|
||||
# apply_firewalld()
|
||||
# Make the current saved config active
|
||||
sub apply_firewalld
|
||||
@@ -216,5 +262,33 @@ my $out = &backquote_logged($cmd." 2>&1 </dev/null");
|
||||
return $? ? $out : undef;
|
||||
}
|
||||
|
||||
1;
|
||||
# parse_port_field(&in, name)
|
||||
# Either returns a port expression, or calls error
|
||||
sub parse_port_field
|
||||
{
|
||||
my ($in, $pfx) = @_;
|
||||
if ($in->{$pfx.'mode'} == 0) {
|
||||
$in->{$pfx.'port'} =~ /^\d+$/ &&
|
||||
$in->{$pfx.'port'} > 0 && $in->{$pfx.'port'} < 65536 ||
|
||||
getservbyname($in->{$pfx.'port'}, $in->{'proto'}) ||
|
||||
&error($text{'port_eport'});
|
||||
return $in->{$pfx.'port'};
|
||||
}
|
||||
elsif ($in->{$pfx.'mode'} == 1) {
|
||||
$in->{$pfx.'portlow'} =~ /^\d+$/ &&
|
||||
$in->{$pfx.'portlow'} > 0 && $in->{$pfx.'portlow'} < 65536 ||
|
||||
&error($text{'port_eportlow'});
|
||||
$in->{$pfx.'porthigh'} =~ /^\d+$/ &&
|
||||
$in->{$pfx.'porthigh'} > 0 && $in->{$pfx.'porthigh'} < 65536 ||
|
||||
&error($text{'port_eporthigh'});
|
||||
$in->{$pfx.'portlow'} < $in->{$pfx.'porthigh'} ||
|
||||
&error($text{'port_eportrange'});
|
||||
return $in->{$pfx.'portlow'}."-".$in->{$pfx.'porthigh'};
|
||||
}
|
||||
else {
|
||||
# No port chosen
|
||||
return undef;
|
||||
}
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
@@ -63,7 +63,10 @@ print &ui_form_end();
|
||||
my @links = ( &ui_link("edit_port.cgi?new=1&zone=".&urlize($zone->{'name'}),
|
||||
$text{'index_padd'}),
|
||||
&ui_link("edit_serv.cgi?new=1&zone=".&urlize($zone->{'name'}),
|
||||
$text{'index_sadd'}) );
|
||||
$text{'index_sadd'}),
|
||||
&ui_link("edit_forward.cgi?new=1&zone=".&urlize($zone->{'name'}),
|
||||
$text{'index_fadd'}),
|
||||
);
|
||||
if (@{$zone->{'services'}} || @{$zone->{'ports'}}) {
|
||||
my @tds = ( "width=5" );
|
||||
unshift(@links, &select_all_link("d", 1),
|
||||
@@ -92,6 +95,18 @@ if (@{$zone->{'services'}} || @{$zone->{'ports'}}) {
|
||||
&ui_link($url, uc($proto)),
|
||||
], \@tds, "d", "port/".$p);
|
||||
}
|
||||
foreach my $f (@{$zone->{'forward-ports'}}) {
|
||||
my ($port, $proto, $dstport, $dstaddr) =
|
||||
&parse_firewalld_forward($f);
|
||||
my $p = join("/", $port, $proto, $dstport, $dstaddr);
|
||||
my $url = "edit_forward.cgi?id=".&urlize($p).
|
||||
"&zone=".&urlize($zone->{'name'});
|
||||
print &ui_checked_columns_row([
|
||||
&ui_link($url, $text{'index_tforward'}),
|
||||
&ui_link($url, $port),
|
||||
&ui_link($url, uc($proto)),
|
||||
], \@tds, "d", "forward/".$p);
|
||||
}
|
||||
print &ui_columns_end();
|
||||
print &ui_links_row(\@links);
|
||||
print &ui_form_end([ [ undef, $text{'index_delete'} ] ]);
|
||||
|
||||
@@ -21,8 +21,10 @@ index_port=Port or service
|
||||
index_proto=Protocol
|
||||
index_tservice=Service
|
||||
index_tport=Port
|
||||
index_tforward=Forward
|
||||
index_padd=Add allowed port.
|
||||
index_sadd=Add allowed service.
|
||||
index_fadd=Add port forward.
|
||||
index_delete=Delete Selected Rules
|
||||
index_return=list of zones
|
||||
index_ezones=No FirewallD zones found!
|
||||
@@ -36,6 +38,7 @@ port_zone=Allowed in zone
|
||||
port_port=Port to allow
|
||||
port_mode0=Single port
|
||||
port_mode1=Port range
|
||||
port_mode2=Same as original port
|
||||
port_proto=Network protocol
|
||||
port_ezone=Zone does not exist!
|
||||
port_err=Failed to save port
|
||||
@@ -50,6 +53,18 @@ serv_header=Allowed service options
|
||||
serv_name=Service to allow
|
||||
serv_err=Failed to save service
|
||||
|
||||
forward_edit=Edit Forward
|
||||
forward_create=Create Forward
|
||||
forward_header=Port forwarding options
|
||||
forward_zone=Forward for zone
|
||||
forward_err=Failed to save forward
|
||||
forward_port=Source port
|
||||
forward_dstport=Desintation port
|
||||
forward_dstaddr=Destination address
|
||||
forward_dstlocal=This system
|
||||
forward_edstaddr=Invalid IPv4 destination address
|
||||
forward_eneither=Either a destination address or port or both must be entered
|
||||
|
||||
check_ecmd=The FirewallD control command $1 was not found on your system
|
||||
|
||||
delete_err=Failed to delete rules
|
||||
@@ -91,6 +106,9 @@ log_update_port=Updated allowed port $1
|
||||
log_create_serv=Added allowed service $1
|
||||
log_delete_serv=Removed allowed service $1
|
||||
log_update_serv=Updated allowed service $1
|
||||
log_create_forward=Added forward $1
|
||||
log_delete_forward=Removed forward $1
|
||||
log_update_forward=Updated forward $1
|
||||
log_delete_rules=Removed $1 allowed ports
|
||||
log_ifaces_zone=Updated interfaces for zone $1
|
||||
log_create_zone=Created zone $1
|
||||
|
||||
@@ -11,7 +11,7 @@ our (%text);
|
||||
sub parse_webmin_log
|
||||
{
|
||||
my ($user, $script, $action, $type, $object, $p) = @_;
|
||||
if ($type eq "port" || $type eq "serv") {
|
||||
if ($type eq "port" || $type eq "serv" || $type eq "forward") {
|
||||
return &text("log_${action}_${type}",
|
||||
"<tt>".&html_escape($object)."</tt>");
|
||||
}
|
||||
|
||||
55
firewalld/save_forward.cgi
Executable file
55
firewalld/save_forward.cgi
Executable file
@@ -0,0 +1,55 @@
|
||||
#!/usr/local/bin/perl
|
||||
# Create, update or delete a forwarding rule
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
require 'firewalld-lib.pl';
|
||||
our (%in, %text);
|
||||
&error_setup($text{'forward_err'});
|
||||
&ReadParse();
|
||||
|
||||
# Get the zone and rule
|
||||
my @zones = &list_firewalld_zones();
|
||||
my ($zone) = grep { $_->{'name'} eq $in{'zone'} } @zones;
|
||||
$zone || &error($text{'port_ezone'});
|
||||
my ($oldport, $oldproto, $olddstport, $olddstaddr);
|
||||
if ($in{'id'}) {
|
||||
($oldport, $oldproto, $olddstport, $olddstaddr) =
|
||||
split(/\//, $in{'id'});
|
||||
}
|
||||
|
||||
my $logport;
|
||||
if ($in{'delete'}) {
|
||||
# Just remove the existing rule
|
||||
my $err = &delete_firewalld_forward($zone, $oldport, $oldproto,
|
||||
$olddstport, $olddstaddr);
|
||||
&error($err) if ($err);
|
||||
$logport = $oldport;
|
||||
}
|
||||
else {
|
||||
# Validate inputs
|
||||
my $port = &parse_port_field(\%in, '');
|
||||
my $proto = $in{'proto'};
|
||||
my $dstport = &parse_port_field(\%in, 'dst');
|
||||
my $dstaddr;
|
||||
if (!$in{'dstaddr_def'}) {
|
||||
&check_ipaddress($in{'dstaddr'}) ||
|
||||
&error($text{'forward_edstaddr'});
|
||||
$dstaddr = $in{'dstaddr'};
|
||||
}
|
||||
$dstport || $dstaddr || &error($text{'forward_eneither'});
|
||||
|
||||
# Create or update forward
|
||||
if (!$in{'new'}) {
|
||||
my $err = &delete_firewalld_forward($zone, $oldport, $oldproto,
|
||||
$olddstport, $olddstaddr);
|
||||
&error($err) if ($err);
|
||||
}
|
||||
my $err = &create_firewalld_forward($zone, $port, $proto,
|
||||
$dstport, $dstaddr);
|
||||
&error($err) if ($err);
|
||||
$logport = $port;
|
||||
}
|
||||
&webmin_log($in{'delete'} ? 'delete' : $in{'new'} ? 'create' : 'update',
|
||||
'forward', $logport);
|
||||
&redirect("index.cgi?zone=".&urlize($zone->{'name'}));
|
||||
@@ -26,25 +26,7 @@ if ($in{'delete'}) {
|
||||
}
|
||||
else {
|
||||
# Validate inputs
|
||||
my $port;
|
||||
if ($in{'mode'} == 0) {
|
||||
$in{'port'} =~ /^\d+$/ &&
|
||||
$in{'port'} > 0 && $in{'port'} < 65536 ||
|
||||
getservbyname($in{'port'}, $in{'proto'}) ||
|
||||
&error($text{'port_eport'});
|
||||
$port = $in{'port'};
|
||||
}
|
||||
else {
|
||||
$in{'portlow'} =~ /^\d+$/ &&
|
||||
$in{'portlow'} > 0 && $in{'portlow'} < 65536 ||
|
||||
&error($text{'port_eportlow'});
|
||||
$in{'porthigh'} =~ /^\d+$/ &&
|
||||
$in{'porthigh'} > 0 && $in{'porthigh'} < 65536 ||
|
||||
&error($text{'port_eporthigh'});
|
||||
$in{'portlow'} < $in{'porthigh'} ||
|
||||
&error($text{'port_eportrange'});
|
||||
$port = $in{'portlow'}."-".$in{'porthigh'};
|
||||
}
|
||||
my $port = &parse_port_field(\%in, '');
|
||||
my $proto = $in{'proto'};
|
||||
|
||||
# Create or update allowed port
|
||||
|
||||
@@ -115,6 +115,7 @@ edit_edir=Hi falta el directori a copiar
|
||||
edit_efs=Els sistemes de fitxers de tipus $1 no es poden copiar amb aquest mòdul
|
||||
edit_title=Addició de Nova Còpia
|
||||
edit_title2=Edició de Còpia
|
||||
edit_title3=Clonació de Còpia
|
||||
edit_header=Detalls de la còpia del sistema de fitxers $1
|
||||
edit_header2=Planificació de la còpia
|
||||
edit_header3=Opcions de la còpia
|
||||
@@ -232,4 +233,5 @@ email_failed=La c
|
||||
|
||||
newtape_subject=Canvi de la cinta $1 per a la còpia de $2 a $3
|
||||
newtape_body=La còpia de $2 a $3 ha atès la quantitat màxima de dades permesa a la cinta $1. Has de posar una nova cinta i prémer l'enllaç 'Cinta carregada' al mòdul de Còpia de Sistemes de Fitxers de Webmin per seguir amb la còpia.
|
||||
edit_clone=Clona
|
||||
__norefs=1
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
cs_header=D0E0FC class='maintitle'
|
||||
cs_table=f5f5f5 class='mainbody'
|
||||
cs_header=D0E0FC
|
||||
tb=class='maintitle'
|
||||
cs_table=f5f5f5
|
||||
cb=class='mainbody'
|
||||
cs_link=376ebd
|
||||
texttitles=1
|
||||
functions=theme.pl
|
||||
|
||||
@@ -3,15 +3,15 @@ addEvent(window, "load", sortables_init);
|
||||
var SORT_COLUMN_INDEX;
|
||||
|
||||
function sortables_init() {
|
||||
var lastAssignedId = 0;
|
||||
var lastAssignedId = 0;
|
||||
// Find all tables with class sortable and make them sortable
|
||||
if (!document.getElementsByTagName) return;
|
||||
tbls = document.getElementsByTagName("table");
|
||||
for (ti=0;ti<tbls.length;ti++) {
|
||||
thisTbl = tbls[ti];
|
||||
if (!thisTbl.id) {
|
||||
thisTbl.id = 'sortableTable'+(lastAssignedId++);
|
||||
}
|
||||
if (!thisTbl.id) {
|
||||
thisTbl.id = 'sortableTable'+(lastAssignedId++);
|
||||
}
|
||||
if (((' '+thisTbl.className+' ').indexOf("sortable") != -1) && (thisTbl.id)) {
|
||||
//initTable(thisTbl.id);
|
||||
ts_makeSortable(thisTbl);
|
||||
@@ -76,7 +76,7 @@ function ts_resortTable(lnk,clid) {
|
||||
if (itm.match(/^\d\d[\/-]\d\d[\/-]\d\d\d\d$/)) sortfn = ts_sort_date;
|
||||
if (itm.match(/^\d\d[\/-]\S\S\S[\/-]\d\d\d\d$/)) sortfn = ts_sort_date;
|
||||
if (itm.match(/^\d\d[\/-]\d\d[\/-]\d\d$/)) sortfn = ts_sort_date;
|
||||
if (itm.match(/^[£$]/)) sortfn = ts_sort_currency;
|
||||
if (itm.match(/^[£$]/)) sortfn = ts_sort_currency;
|
||||
if (itm.match(/^[\d\.]+\s*(bytes|b|kb|tb|gb|mb)$/i)) sortfn = ts_sort_filesize;
|
||||
// Special cases for our mailbox lists
|
||||
if (itm.match(/^(Empty|Unlimited)$/)) sortfn = ts_sort_filesize;
|
||||
|
||||
@@ -122,4 +122,5 @@ search_already=S'est
|
||||
search_noprot=S'està ometent el fitxer d'opcions Apache, ja que no protegeix el directori.
|
||||
search_open=No es pot obrir el fitxer d'opcions $1 d'Apache: $2
|
||||
search_done=...fet
|
||||
|
||||
__norefs=1
|
||||
|
||||
@@ -260,4 +260,5 @@ launchd_eclash=Ja existeix un agent amb el mateix nom
|
||||
launchd_return=a l'agent launchd
|
||||
launchd_econf=No has introduït la configuració de l'agent launchd
|
||||
launchd_estart=Hi falta l'ordre del servidor
|
||||
|
||||
__norefs=1
|
||||
|
||||
@@ -51,4 +51,5 @@ apply_err=No s'ha pogut aplicar la configuraci
|
||||
|
||||
delete_err=No s'han pogut suprimir els processos
|
||||
delete_enone=No has seleccionat cap procés
|
||||
|
||||
__norefs=1
|
||||
|
||||
2
lang/ca
2
lang/ca
@@ -126,7 +126,7 @@ referer_warn_unknown=<b>Atenci
|
||||
referer_fix1=Si això és un enllaç legítim, pots permetre els enllaços des d'aquest URL tal i com segueix:<ul><li>Entra a Webmin normalment.<li>Ves al mòdul de <b>Configuració de Webmin</b>.<li>Fes clic a la icona de Referenciadors Fiables.<li>Introdueix el nom de host $1 al camp <b>Llocs Web fiables</b>, i fes clic a <b>Desa</b>.</ul>
|
||||
referer_fix2=Alternativament, pots configurar Webmin per que permeti aquest enllaç des de la línia d'ordres:<ul><li>Entra com a <tt>root</tt> i edita el fitxer <tt>/etc/webmin/config</tt>.<li>Afegeix-hi la línia <tt>referers=$1</tt> al final o, si ja existeix una línia <tt>referers</tt>, afegeix-hi <tt>$1</tt>.<li>Desa el fitxer.</ul>
|
||||
referer_fix3u=Assegura't que el teu navegador està configurat per enviar la informació del referenciador per tal que Webmin ho pugui verificar.
|
||||
referer_fix2u=Alternativament, pots configurar Webmin per permetre enllaços des de referenciadors desconeguts:<ul><li>Entra com a <tt>root</tt> i edita el fitxer <tt>/etc/webmin/config</tt>.<li>Busca la línia <tt>referers_none=1</tt> i canvia-la per <tt>referers_none=0</tt>.<li>Desa el fitxer.</ul>
|
||||
referer_fix2u=Alternativament, pots configurar Webmin per permetre enllaços des de referenciadors desconeguts:<ul><li>Entra com a <tt>root</tt> i edita el fitxer <tt>/etc/webmin/config</tt>.<li>Busca la línia <tt>referers_none=1</tt> i canvia-la per <tt>referers_none=0</tt>.<li>Desa el fitxer.</ul><p>ATENCIÓ - això té l'efecte secundari d'obrir el sistema a atacs XSS reflectits i per tant no és recomanable!!
|
||||
|
||||
session_header=Entrada a Webmin
|
||||
session_mesg=Per entrar al servidor Webmin de $1, has d'introduir un nom d'usuari i una contrasenya.
|
||||
|
||||
3
lang/de
3
lang/de
@@ -169,7 +169,7 @@ main_title2=Webmin
|
||||
main_title3=Webmin $1 ($2)
|
||||
main_unused=Nicht benutzte Module
|
||||
main_version=Version $1 auf $2 ($3)
|
||||
modify=Modifizieren
|
||||
modify=Anpassen
|
||||
modules_all=Alle Module
|
||||
modules_cancel=Abbrechen
|
||||
modules_clear=Löschen
|
||||
@@ -191,6 +191,7 @@ month_8=August
|
||||
month_9=September
|
||||
no=Nein
|
||||
ok=OK
|
||||
fail=Problem
|
||||
pam_header=Anmelden an Webmin
|
||||
pam_login=Fortsetzen
|
||||
pam_mesg=Sie müssen auf die Frage unten antworten um sich am Webmin-Server $1 anmelden zu können.
|
||||
|
||||
1
lang/en
1
lang/en
@@ -62,6 +62,7 @@ modify=Modify
|
||||
reset=Reset
|
||||
ok=OK
|
||||
cancel=Cancel
|
||||
fail=Failed
|
||||
helpsearch=Search Docs..
|
||||
switch_remote_euser=The Unix user $1 does not exist.
|
||||
programname=Webmin
|
||||
|
||||
@@ -314,4 +314,5 @@ add_echeck=El servidor $1 no t
|
||||
add_ediff=El servidor $1 està utilitzant un sistema d'impressió ($2) diferent del d'aquest servidor
|
||||
add_ediff2=El servidor $1 està utilitzant un controlador d'impressió ($2) diferent del d'aquest servidor
|
||||
add_ok=S'ha afegit $1, amb $2 impressores.
|
||||
|
||||
__norefs=1
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
show_table=Mostra els volums els grups com a,1,1-Taula,0-Icones
|
||||
lvm_conf=Camí del fitxer de configuració de LVM,8
|
||||
lvm_conf=Camí del fitxer de configuració de LVM,8
|
||||
|
||||
@@ -254,6 +254,12 @@ if ($in{'lv'}) {
|
||||
|
||||
# Show thin pool users
|
||||
if ($in{'lv'} && $lv->{'thin'}) {
|
||||
print &ui_table_row($text{'lv_thinused'},
|
||||
&nice_size($lv->{'thin_used'} * 1024));
|
||||
|
||||
print &ui_table_row($text{'lv_thinpercent'},
|
||||
$lv->{'thin_percent'}."%");
|
||||
|
||||
@thinc = grep { $_->{'thin_in'} eq $lv->{'name'} } @lvs;
|
||||
if (@thinc) {
|
||||
foreach $t (@thinc) {
|
||||
|
||||
20
lvm/lang/ca
20
lvm/lang/ca
@@ -12,6 +12,7 @@ index_addpv=Afegeix un nou volum f
|
||||
index_addpv2=Afegeix un volum físic a <tt>$1</tt>.
|
||||
index_addlv2=Crea un volum lògic a <tt>$1</tt>.
|
||||
index_addlv2s=Crea una instantània a <tt>$1</tt>.
|
||||
index_addlv3=Crea un pool prim a <tt>$1</tt>.
|
||||
index_addlv=Crea un nou volum lògic.
|
||||
index_addsnap=Crea una nova instantània.
|
||||
index_return=als grups de volums
|
||||
@@ -38,6 +39,7 @@ index_lvsize=Mida
|
||||
index_lvused=Espai utilitzat
|
||||
index_lvuse=Utilitzat per a
|
||||
index_snapof=(Instantània de $1)
|
||||
index_thin=Pool prrim LVM per als VLs de $1
|
||||
|
||||
lv_edit=Edita Volum Lògic
|
||||
lv_edit_snap=Edita la instantània
|
||||
@@ -46,6 +48,9 @@ lv_create_snap=Crea una Instant
|
||||
lv_vg=En el grup de volums $1
|
||||
lv_header=Detalls del volum lògic
|
||||
lv_name=Nom del volum
|
||||
lv_thin=Crea com a VL prim al pool
|
||||
lv_thin2=Prims proveït al pool
|
||||
lv_nothin=Cap (crea com a VL regular)
|
||||
lv_size=Mida del volum
|
||||
lv_size0=Mida absoluta
|
||||
lv_size1=Percentatge de la mida del GV
|
||||
@@ -92,6 +97,7 @@ lv_snaprollback=Reverteix l'Instant
|
||||
lv_rusure=Segur que vols suprimir el volum lògic $1? Totes les dades del sistema de fitxers d'aquest volum lògic es perdran per sempre!
|
||||
lv_rusnap=Segur que vols suprimir la instantània $1?
|
||||
lv_rusnaprb=Segur que vols revertir la instantània $1?
|
||||
lv_delthin=ATENCIÓ! Aquest VL és un pool prim per a $1 volums lògics proveïts prims, que també es perdran si s'esborra!
|
||||
lv_deleteok=Suprimeix-ho Ara
|
||||
lv_snaprollbackok=Reverteix-la Ara
|
||||
lv_err2=No s'ha pogut suprimir el volum lògic
|
||||
@@ -111,12 +117,14 @@ lv_mountmsg=Munta aquest VL en un directori nou del sistema, de manera que es pu
|
||||
lv_free=Percentage lliure
|
||||
lv_freedisk=Espai lliure
|
||||
lv_pvs=Volums físics allotjats
|
||||
lv_thincs=VLs d'aquest pool prim
|
||||
lv_snapusage=Percentatge d'ús d'instantànies
|
||||
lv_egone=El volum lògic ja no existeix!
|
||||
lv_moveheader=Retira el volum físic
|
||||
lv_pvfrom=Desplaça blocs del volum físic
|
||||
lv_pvto=Al volum físic
|
||||
lv_moveok=Desplaça els Blocs
|
||||
lv_return=al volum lògic
|
||||
|
||||
mkfs_title=Creació de Sistema de Fitxers
|
||||
mkfs_desc=Aquest formulari permet crear un nou sistema de fitxers $2 ($1) a volum lògic $3. Totes les dades existents s'esborraran.
|
||||
@@ -188,6 +196,18 @@ pvmove_title=Despla
|
||||
pvmove_start=S'està desplaçant el volum lògic $1 de $2 a $3...
|
||||
pvmove_failed=...el desplaçament ha fallat!
|
||||
pvmove_done=...desplaçament completat
|
||||
|
||||
thin_title=Creació de Pool Prim
|
||||
thin_desc=UN pool prim és un aparella de VLs que es pot utilitzar per crear VLs addicionals que poden ser més grans que l'espai disponible. L'espai només es consumeix quan es necessita, en lloc de fer-ho quan es creen els VLs dins del pool. ATENCIÓ - Es perdran totes les dades dels VLs seleccionats!
|
||||
thin_header=Detalls del nou pool prim
|
||||
thin_datalv=LV existent per a les dades
|
||||
thin_metadatalv=LV existent per a les metadades
|
||||
thin_ok=Converteix LVs A Pool Prim
|
||||
thin_elvs=No s'ha trobat cap LV que encara no estigui en ús en aquest GV!
|
||||
thin_err=No s'ha pogut crear el pool prim
|
||||
thin_esame=Els dos LVs seleccionats són el mateix
|
||||
thin_edata=El VL de dades seleccionat ja està en ús
|
||||
thin_emetadata=El VL de metadades seleccionat ja està en ús
|
||||
|
||||
log_create_vg=S'ha creat el grup de volums $1
|
||||
log_modify_vg=S'ha modificat el grup de volums $1
|
||||
|
||||
@@ -118,6 +118,8 @@ lv_free=Free percentage
|
||||
lv_freedisk=Free space
|
||||
lv_pvs=Physical volumes allocated
|
||||
lv_thincs=LVs in this thin pool
|
||||
lv_thinpercent=Thin pool use percentage
|
||||
lv_thinused=Thin pool space used
|
||||
lv_snapusage=Snapshot use percentage
|
||||
lv_egone=Logical volume no longer exists!
|
||||
lv_moveheader=Move off physical volume
|
||||
|
||||
@@ -370,6 +370,10 @@ else {
|
||||
elsif (/LV\s+Pool\s+name\s+(\S+)/) {
|
||||
$lv->{'thin_in'} = $1;
|
||||
}
|
||||
elsif (/Allocated\s+pool\s+data\s+(\S+)%/) {
|
||||
$lv->{'thin_percent'} = $1;
|
||||
$lv->{'thin_used'} = $1 / 100.0 * $lv->{'size'};
|
||||
}
|
||||
}
|
||||
close(DISPLAY);
|
||||
@rv = grep { $_->{'vg'} eq $_[0] } @rv;
|
||||
|
||||
@@ -3314,7 +3314,7 @@ foreach my $a (@$attach) {
|
||||
}
|
||||
else {
|
||||
# No filename
|
||||
push(@files, "<i>$text{'view_anofile'}</i>");
|
||||
push(@files, $text{'view_anofile'});
|
||||
$fn = "file.".&type_to_extension($a->{'type'});
|
||||
push(@detach, [ $a->{'idx'}, $fn ]);
|
||||
}
|
||||
|
||||
@@ -20,6 +20,6 @@ if ($in{'owner_a'}) {
|
||||
$email = { 'enabled' => 1,
|
||||
'name' => $in{'email_a'},
|
||||
'values' => [ "|$wrapper_path majordomo" ] };
|
||||
&foreign_call("sendmail", "create_alias", $email, $aliases_files);
|
||||
&foreign_call($aliases_module, "create_alias", $email, $aliases_files);
|
||||
&redirect("");
|
||||
|
||||
|
||||
125
majordomo/check_inst.cgi
Executable file
125
majordomo/check_inst.cgi
Executable file
@@ -0,0 +1,125 @@
|
||||
#!/usr/local/bin/perl
|
||||
# check_inst.cgi
|
||||
# check majordomo options and installation
|
||||
|
||||
require './majordomo-lib.pl';
|
||||
use Fcntl ':mode';
|
||||
|
||||
%access = &get_module_acl();
|
||||
$conf = &get_config();
|
||||
|
||||
eval { require "$config{'program_dir'}/majordomo_version.pl"; };
|
||||
&ui_print_header(undef, $text{'check_title'}, "", undef, 1, 0, 0,
|
||||
&mdom_help(),
|
||||
undef, undef, &text('index_version', $majordomo_version));
|
||||
|
||||
$aliases_files = &get_aliases_file();
|
||||
$email = &find_value("whoami", $conf); $email =~ s/\@.*$//g;
|
||||
$owner = &find_value("whoami_owner", $conf); $owner =~ s/\@.*$//g;
|
||||
|
||||
# predefined values
|
||||
local $cdiv='<div style="margin-left: 20%;">', $ediv='</div>';
|
||||
local $ok="<div style=\"padding: .3em;\"><font color=\"green\">".&text('ok')."</font></div>";
|
||||
local $fail="<div style=\"padding: .3em;\"><font color=\"red\">".&text('fail')."</font></div>";
|
||||
local $possible="<div style=\"padding: .3em;\"><font color=\"orange\">".&text('check_possible')."</font></div>";
|
||||
local $res=$ok, $tocheck, $sec;
|
||||
|
||||
# init / start table
|
||||
local @tds;
|
||||
push(@tds, "width=0", "width=30% nowrap", "width=60%", "");
|
||||
print &ui_columns_start(["",&text('check_test'), &text('check_result'), &text('check_status')], 100, 0, \@tds);
|
||||
|
||||
# Check mailer / aliaes / config file
|
||||
local $aliases=$aliases_files->[0], $mailer=$config{'aliases_file'};
|
||||
$mailer="sendmail" if ($mailer eq '');
|
||||
print &ui_checked_columns_row(["<b>Autodetect aliases file from mailer</b>", ucfirst($mailer), $res],
|
||||
\@tds,undef, undef, 0,1);
|
||||
$res=$ok;
|
||||
$tocheck=$aliases;
|
||||
if (!-r $tocheck) { $res=$fail; $tocheck = &text('index_esendmail', 'Sendmail alias file', $tocheck,
|
||||
"$gconfig{'webprefix'}/config.cgi?$module_name"); }
|
||||
print &ui_checked_columns_row(["<b>Aliases file used for majordomo</b>", $tocheck, $res],
|
||||
\@tds,undef, undef, 0,1);
|
||||
$res=$ok;
|
||||
$tocheck=$config{'majordomo_cf'};
|
||||
if (!-r $tocheck) { $res=$fail; $tocheck = &text('index_econfig', "<tt>$tocheck</tt>",
|
||||
"$gconfig{'webprefix'}/config.cgi?$module_name"); }
|
||||
print &ui_checked_columns_row(["<b>Majordomo configuration file</b>", $tocheck, $res],
|
||||
\@tds,undef, undef, 0,1);
|
||||
|
||||
# config files exist?
|
||||
if ( $res eq $ok) {
|
||||
# Check program dir / version
|
||||
$res=$ok;
|
||||
local $progdir, $progdirok;
|
||||
$tocheck= $progdir = $config{'program_dir'};
|
||||
if (!-d $tocheck ) { $res=$fail; $tocheck = &text('index_eprograms', "<tt>$tocheck</tt>",
|
||||
"$gconfig{'webprefix'}/config.cgi?$module_name"); }
|
||||
print &ui_checked_columns_row(["<b>Majordomo programm dir</b>", $tocheck, $res],
|
||||
\@tds,undef, undef, 0,1);
|
||||
if ($res eq $ok) {
|
||||
$progdirok=1;
|
||||
$res=$ok;
|
||||
$sec=$cdiv.&text('check_perm').":";
|
||||
$tocheck=$config{'program_dir'};
|
||||
if (((stat($tocheck)) [2] & S_IXOTH) != 0) { $res=$fail; $sec .= " ".&text('check_exec'); }
|
||||
if (((stat($tocheck)) [2] & S_IROTH) != 0) { $res=$fail; $sec .= " ".&text('check_read'); }
|
||||
if (((stat($tocheck)) [2] & S_IWOTH) != 0) { $res=$fail; $sec .= " ".&text('check_write'); }
|
||||
print &ui_checked_columns_row(["", $sec.$ediv, $res] , \@tds,undef, undef, 0,1);
|
||||
$res=$ok;
|
||||
$tocheck=$majordomo_version;
|
||||
if ($tocheck eq "" || $tocheck < 1.94 || $tocheck >= 2) { $res=$fail; $tocheck .= ": ".$text{'index_eversion'}; }
|
||||
print &ui_checked_columns_row(["<b>".&text('index_version',"")."</b>", $tocheck, $res],
|
||||
\@tds,undef, undef, 0,1);
|
||||
}
|
||||
|
||||
# Check home / list / archive dir from majordomo.cf
|
||||
$res=$ok;
|
||||
local $home=&find_value("homedir", $conf);
|
||||
$tocheck=$home;
|
||||
if ($tocheck ne $progdir) { $res=$fail; $tocheck = &text('index_emdomdir',
|
||||
'$homedir'." (should be ".$progdir."!)", $tocheck); }
|
||||
print &ui_checked_columns_row(["<b>Majordomo script HOME dir</b>", $tocheck, $res],
|
||||
\@tds,undef, undef, 0,1);
|
||||
$res=$ok;
|
||||
local $home=&find_value("homedir2", $conf);
|
||||
$tocheck=$home;
|
||||
if (! -d $tocheck) { $res=$fail; $tocheck = &text('index_emdomdir', '$homedir2', $home); }
|
||||
print &ui_checked_columns_row(["<b>Majordomo list HOME2 dir</b>", $tocheck, $res],
|
||||
\@tds,undef, undef, 0,1);
|
||||
if ($res eq $ok) {
|
||||
$res=$ok;
|
||||
$sec=$cdiv.&text('check_perm').":";
|
||||
$tocheck=$home;
|
||||
if (((stat($tocheck)) [2] & S_IXOTH) != 0) { $res=$possible; $sec .= " ".&text('check_exec'); }
|
||||
if (((stat($tocheck)) [2] & S_IROTH) != 0) { $res=$possible; $sec .= " ".&text('check_read'); }
|
||||
if (((stat($tocheck)) [2] & S_IWOTH) != 0) { $res=$possible; $sec .= " ".&text('check_write'); }
|
||||
print &ui_checked_columns_row(["", $sec.$ediv, $res] , \@tds,undef, undef, 0,1);
|
||||
}
|
||||
$res=$ok;
|
||||
$tocheck = &perl_var_replace(&find_value("listdir", $conf), $conf);
|
||||
if (!-d $tocheck) { $res=$fail; $tocheck = &text('index_emdomdir', '$listdir', $tocheck); }
|
||||
print &ui_checked_columns_row(["<b>Majordomo LIST directory</b>", $tocheck, $res],
|
||||
\@tds,undef, undef, 0,1);
|
||||
$res=$ok;
|
||||
$tocheck = &perl_var_replace(&find_value("filedir", $conf), $conf);
|
||||
if (!-d $tocheck) { $res=$fail; $tocheck = &text('index_emdomdir', '$filedir', $tocheck); }
|
||||
print &ui_checked_columns_row(["<b>Majordomo ARCHIVE directory</b>", $tocheck, $res],
|
||||
\@tds,undef, undef, 0,1);
|
||||
# run wrapper config-test
|
||||
if ($progdirok == 1) {
|
||||
local $cmd="$progdir/wrapper config-test";
|
||||
local $realcmd="cd $progdir; echo n | $cmd 2>&1";
|
||||
local $text=`$realcmd`;
|
||||
$text =~ s/(^|\n)[\n\s]*/$1/g;
|
||||
$text =~ s/Nothing bad found!.*/Nothing bad found!/s;
|
||||
if ($? != 0) {$res=$fail;}
|
||||
print &ui_checked_columns_row(["<b>Run Majormomo internal test</b>", $cmd, $res] ,
|
||||
\@tds,undef, undef, 0,1);
|
||||
print "<td></td><td></td>";
|
||||
print "<td colspan=\"2\"><pre>$text</pre></td>";
|
||||
}
|
||||
}
|
||||
print &ui_columns_end();
|
||||
|
||||
&ui_print_footer("index.cgi", $text{'index'});
|
||||
@@ -3,3 +3,4 @@ program_dir=/usr/local/majordomo
|
||||
dynamic=0
|
||||
sort_mode=0
|
||||
perms=0
|
||||
owner_file=0
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
line1=Configurable options,11
|
||||
dynamic=Use random number for list alias?,1,1-Yes,0-No
|
||||
owner_file=Save list owner in <tt>list.owner</tt> instead of aliases file,1,1-Yes,0-No
|
||||
sort_mode=Sort mailing lists by,1,1-Name,0-Order created
|
||||
perms=Permissions for majordomo files,1,1-User writable,0-User and group writable
|
||||
line2=System configuration,11
|
||||
@@ -8,3 +9,4 @@ program_dir=Directory containing majordomo programs,0
|
||||
wrapper_path=Path to majordomo wrapper,3,In programs directory
|
||||
aliases_file=Path to aliases file,10,postfix-Get from Postfix,-Get from Sendmail,Other file
|
||||
smrsh_program_dir=Directory containing sendmail safe programs,3,Anywhere
|
||||
download=First Aid<br><br>If majordomo is not supported by your distribution or is not compatible with the installed version of perl: <a href="http://files1.directadmin.com/services/es_7.0_64/majordomo-1.94.5-patched.tar.gz">download a patched version here ...</a><br> ,11
|
||||
|
||||
@@ -6,5 +6,5 @@ line2=Konfigurace syst
|
||||
majordomo_cf=Úplůná cesta ke konfiguračnímu souboru majordomu,0
|
||||
program_dir=Adresář obsahující majordomo programy,0
|
||||
wrapper_path=Cesta k majordomo wrapper,3,V adresáři programů
|
||||
aliases_file=Soubor aliasů Sendmail-stylu,3,Vzít z sendmail.cf
|
||||
smrsh_program_dir=Adresář obsahující bezpečnostní programy uložení Sendmailu,3,Kdekoliv
|
||||
aliases_file=Soubor aliasů Sendmail-stylu,10,postfix-Get from Postfix,-Get from Sendmail,Other file
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
line1=Konfigurierbare Optionen,11
|
||||
line1=Konfigurierbare Einstellungen,11
|
||||
dynamic=Benutze zufällige Zahl als Listen-Alias,1,1-Ja,0-Nein
|
||||
sort_mode=Sortiere Mailinglisten nach,1,1-Name,0-Erzeugter Reihenfolge
|
||||
perms=Berechtigungen für die Majordomo-Dateien,1,1-Beschreibbar durch Benutzer,0-Beschreibbar für Benutzer und Gruppen
|
||||
@@ -6,5 +6,7 @@ line2=Systemkonfiguration,11
|
||||
majordomo_cf=Absoluter Pfad zur Majordomo-Konfigurationsdatei,0
|
||||
program_dir=Verzeichnis, das die Majordomo-Programme enthält,0
|
||||
wrapper_path=Pfad zum Majordomo-Wrapper,3,Im Programm-Verzeichnis
|
||||
aliases_file=Alias-Datei in Sendmail-Form,3,Ermittle aus sendmail.cf
|
||||
aliases_file=Alias-Datei in Sendmail-Form,10,postfix-Von Postfix Konfiguration,-Von Sendmail,Andere Datei
|
||||
owner_file=Speichere Listen Owner in <tt>list.owner</tt> statt in Alias-Datei,1,1-Ja,0-Nein
|
||||
smrsh_program_dir=Verzeichnis, das die Sendmail-"Safe"-Programme enthält,3,Beliebig
|
||||
download=Erste Hilfe<br><br>Falls Majordomo nicht in ihrer Distribution enthalten ist oder Probleme mit der installierten Perl Version hat: <a href="http://files1.directadmin.com/services/es_7.0_64/majordomo-1.94.5-patched.tar.gz">Laden sie eine angepaste Version von hier ...</a><br> ,11
|
||||
|
||||
12
majordomo/config.info.de.UTF-8
Normal file
12
majordomo/config.info.de.UTF-8
Normal file
@@ -0,0 +1,12 @@
|
||||
wrapper_path=Pfad zum Majordomo-Wrapper,3,Im Programm-Verzeichnis
|
||||
program_dir=Verzeichnis, das die Majordomo-Programme enthält,0
|
||||
dynamic=Benutze zufällige Zahl als Listen-Alias,1,1-Ja,0-Nein
|
||||
line1=Konfigurierbare Optionen,11
|
||||
line2=Systemkonfiguration,11
|
||||
smrsh_program_dir=Verzeichnis, das die Sendmail"Safe" Programme enthält,3,Beliebig
|
||||
majordomo_cf=Absoluter Pfad zur Majordomo Konfigurationsdatei,0
|
||||
aliases_file=Alias Datei in Sendmail-Form,10,postfix-Von Postfix,-Von Sendmail,Andere Datei
|
||||
owner_file=Speichere Listen Owner in <tt>list.owner</tt> statt in Alias-Datei,1,1-Ja,0-Nein
|
||||
perms=Berechtigungen für die Majordomo Dateien,1,1-Beschreibbar durch Benutzer,0-Beschreibbar für Benutzer und Gruppen
|
||||
sort_mode=Sortiere Mailinglisten nach,1,1-Name,0-Erzeugter Reihenfolge
|
||||
download=Erste Hilfe<br><br>Falls Majordomo nicht in ihrer Distribution enthalten ist oder Probleme mit der installierten Perl Version hat: <a href="http://files1.directadmin.com/services/es_7.0_64/majordomo-1.94.5-patched.tar.gz">Laden sie eine angepaste Version von hier ...</a><br> ,11
|
||||
@@ -6,5 +6,5 @@ line2=Configuración del sistema,11
|
||||
majordomo_cf=Trayectoria completa a archivo de configuración de majordomo,0
|
||||
program_dir=Directorio que contiene los programas de majordomo,0
|
||||
wrapper_path=Trayectoria a wrapper de majordomo,3,En directorio de programas
|
||||
aliases_file=Archivo de alias con estilo-Sendmail,3,Obtener de sendmail.cf
|
||||
smrsh_program_dir=Directorio que contiene los programas seguros de sendmail,3,Cualquier sitio
|
||||
aliases_file=Archivo de alias con estilo-Sendmail,10,postfix-Get from Postfix,-Get from Sendmail,Other file
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
majordomo_cf=Chemin du fichier de configuration de majordomo,0
|
||||
program_dir=Répertoire du programme majordomo,0
|
||||
aliases_file=Fichier d'aliases de style Sendmail,3,Prendre de sendmail.cf
|
||||
aliases_file=Fichier d'aliases de style Sendmail,10,postfix-Get from Postfix,-Get from Sendmail,Other file
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
majordomo_cf=Pełna ścieżka do pliku konfiguracyjnego majordomo,0
|
||||
program_dir=Katalog zawierający programy majordomo,0
|
||||
wrapper_path=Ścieżka do wrappera majordomo,3,W katalogu programów
|
||||
aliases_file=Plik aliasów w stylu Sendmaila,3,Pobierz z sendmail.cf
|
||||
dynamic=Używać losowych aliasów list,1,1-Tak,0-Nie
|
||||
sort_mode=Porządkuj listy według,1,1-Nazwy,0-Kolejności utworzenia
|
||||
smrsh_program_dir=Katalog zawierający bezpieczne programy sendmail,3,Gdziekolwiek
|
||||
aliases_file=Plik aliasów w stylu Sendmaila,10,postfix-Get from Postfix,-Get from Sendmail,Other file
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
majordomo_cf=Fullständig sökväg till inställningsfil för majordomo,0
|
||||
program_dir=Katalog för majordomo-program,0
|
||||
aliases_file=Aliasfil för sendmail-style ,3,Hämta från sendmail.cf
|
||||
dynamic=Använda slumptal för listalias,1,1-Ja,0-Nej
|
||||
sort_mode=Sortera mailinglistor efter,1,1-Namn,0-Ordning de skapades i
|
||||
smrsh_program_dir=Katalog med sendmail-säkerhetsprogram,3,Var som helst
|
||||
aliases_file=Aliasfil för sendmail-style ,10,postfix-Get from Postfix,-Get from Sendmail,Other file
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
majordomo_cf=Majordomo yapılandırma dosyasının tam yolu,0
|
||||
program_dir=Majordomo programlarını içeren dizin,0
|
||||
aliases_file=Sendmail stili takma adlar dosyası,3,sendmail.cf'den al
|
||||
dynamic=Takma isimleri listemek için rastgele sayılar kullan,1,1-Evet,0-Hayır
|
||||
sort_mode=Posta listelerini sıralam,1,1-İsim,0-Oluşturulma sırasıyla
|
||||
smrsh_program_dir=Sendmail güvenli programlarını içeren dizin,3,Herhangi bir yer
|
||||
aliases_file=Sendmail stili takma adlar dosyası,10,postfix-Get from Postfix,-Get from Sendmail,Other file
|
||||
|
||||
@@ -6,46 +6,55 @@ require './majordomo-lib.pl';
|
||||
%access = &get_module_acl();
|
||||
$access{'create'} || &error($text{'create_ecannot'});
|
||||
&ui_print_header(undef, $text{'create_title'}, "");
|
||||
local $cspan=' colspan="3"',$bcss=' style="display: box; float: left; padding: 10px;"';
|
||||
|
||||
print <<EOF;
|
||||
<form action=create_list.cgi method=post>
|
||||
<table border width=100%>
|
||||
<table border width=\"100%\">
|
||||
<tr $tb> <td><b>$text{'create_header'}</b></td> </tr>
|
||||
<tr $cb> <td><table width=100%>
|
||||
<tr $cb> <td><table width=\"100%\">
|
||||
<tr> <td><b>$text{'create_name'} *</b></td>
|
||||
<td $cspan><input name=\"name\" size=\"20\"></td> </tr>
|
||||
EOF
|
||||
|
||||
<tr> <td><b>$text{'create_name'}</b></td>
|
||||
<td><input name=name size=15></td> </tr>
|
||||
<tr> <td><b>$text{'create_owner'}</b></td>
|
||||
<td><input name=owner size=30></td> </tr>
|
||||
<tr> <td><b>$text{'create_password'}</b></td>
|
||||
<td><input name=password type=password size=10></td> </tr>
|
||||
print "<tr>". &opt_input("reply_to", $text{'mesg_reply'},
|
||||
$conf, $text{'mesg_none'}, 20);
|
||||
print &opt_input("subject_prefix", $text{'mesg_subject'},
|
||||
$conf, $text{'default'}, 20) ."</tr>\n";
|
||||
|
||||
print <<EOF;
|
||||
<tr> <td><b>$text{'create_owner'} *</b></td>
|
||||
<td width=\"30%\"><input name=\"owner\" size=\"30\"></td>
|
||||
<td><b>$text{'create_password'} *</b></td>
|
||||
<td><input name=\"password\" type=\"password\" size=\"30\"></td> </tr>
|
||||
<tr> <td><b>$text{'create_desc'}</b></td>
|
||||
<td><input name=desc size=50></td> </tr>
|
||||
<td $cspan><input name=\"desc\" size=\"60\"></td> </tr>
|
||||
<tr> <td valign=top><b>$text{'create_info'}</b></td>
|
||||
<td><textarea name=info rows=5 cols=60></textarea></td> </tr>
|
||||
<td $cspan><textarea name=\"info\" rows=\"5\" cols=\"50\"></textarea></td> </tr>
|
||||
<tr> <td valign=top><b>$text{'create_footer'}</b></td>
|
||||
<td><textarea name=footer rows=3 cols=60></textarea></td> </tr>
|
||||
<td $cspan><textarea name=\"footer\" rows=\"3\" cols=\"60\"></textarea></td> </tr>
|
||||
|
||||
<tr> <td><b>$text{'create_moderate'}</b></td>
|
||||
<td><input type=radio name=moderate value=yes> $text{'yes'}
|
||||
<input type=radio name=moderate value=no checked> $text{'no'}
|
||||
<td><input type=\"radio\" name=\"moderate\" value=\"yes\"> $text{'yes'}
|
||||
<input type=\"radio\" name=\"moderate\" value=\"no\" checked> $text{'no'}
|
||||
</td> </tr>
|
||||
<tr> <td><b>$text{'create_moderator'}</b></td>
|
||||
<td><input type=radio name=moderator_def value=1 checked>
|
||||
<td $cspan nowrap=""><input type=\"radio\" name=\"moderator_def\" value=\"1\" checked>
|
||||
$text{'create_same'}
|
||||
<input type=radio name=moderator_def value=0>
|
||||
<input name=moderator size=20></td> </tr>
|
||||
<input type=\"radio\" name=\"moderator_def\" value=\"0\">
|
||||
<input name=\"moderator\" size=\"20\"></td> </tr>
|
||||
|
||||
<tr> <td><b>$text{'create_archive'}</b></td>
|
||||
<td><select name=archive>
|
||||
<option value='' selected>$text{'no'}</option>
|
||||
<option value=Y>$text{'create_archiveyear'}</option>
|
||||
<option value=M>$text{'create_archivemonth'}</option>
|
||||
<option value=D>$text{'create_archiveday'}</option>
|
||||
<td $cspan><select name=\"archive\">
|
||||
<option value=\"\"$text{'no'}</option>
|
||||
<option value=\"Y\" selected>$text{'create_archiveyear'}</option>
|
||||
<option value=\"M\">$text{'create_archivemonth'}</option>
|
||||
<option value=\"D\">$text{'create_archiveday'}</option>
|
||||
</select></td> </tr>
|
||||
|
||||
</table></td></tr></table>
|
||||
<input type=submit value="$text{'create'}"></form>
|
||||
EOF
|
||||
print "<div $bcss>".&ui_submit($text{'create'})."</form>  * $text{'create_minimum'}</div>";
|
||||
|
||||
&ui_print_footer("", $text{'index_return'});
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user