mirror of
https://github.com/webmin/webmin.git
synced 2026-02-06 15:32:20 +00:00
Compare commits
178 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3430c74fe2 | ||
|
|
16949927d6 | ||
|
|
a8cf0a8e78 | ||
|
|
3d5802bcaf | ||
|
|
fa3a61c5a7 | ||
|
|
5d55867393 | ||
|
|
81f657fa15 | ||
|
|
41b8d4da9a | ||
|
|
450264d182 | ||
|
|
be4da986ec | ||
|
|
98c2a76499 | ||
|
|
f1e2287b3a | ||
|
|
dfdacb3a26 | ||
|
|
9924f44c05 | ||
|
|
d055e86901 | ||
|
|
d9d94fd394 | ||
|
|
d35cffade9 | ||
|
|
cd6939bf8a | ||
|
|
5672b61358 | ||
|
|
8b564f10e3 | ||
|
|
39b80ee1ec | ||
|
|
7e1b9071e1 | ||
|
|
7930a03763 | ||
|
|
ae23abc827 | ||
|
|
f71283ae40 | ||
|
|
0832cd40a1 | ||
|
|
aa4532ff1b | ||
|
|
adecd320f5 | ||
|
|
8ec0c144d2 | ||
|
|
b2620accf8 | ||
|
|
f2d77a7bee | ||
|
|
f4bb5a843a | ||
|
|
5090c85338 | ||
|
|
f145fb02cf | ||
|
|
cdc89c352a | ||
|
|
4c537d0fd8 | ||
|
|
95a4c2c956 | ||
|
|
1a4d536351 | ||
|
|
4e4f82713e | ||
|
|
6434f896dc | ||
|
|
4a3dfb308b | ||
|
|
cb2eb0c95d | ||
|
|
b134e9e0d7 | ||
|
|
28b90e1b37 | ||
|
|
e9c0383a3c | ||
|
|
1118c2bb2f | ||
|
|
caea0eee60 | ||
|
|
573d39e146 | ||
|
|
3c41e0e816 | ||
|
|
eb950ff47d | ||
|
|
c9bde07cfd | ||
|
|
44a1b68426 | ||
|
|
d0ebb3783e | ||
|
|
f8a9353408 | ||
|
|
0eae027dbc | ||
|
|
278ec5cd76 | ||
|
|
a6a20642fb | ||
|
|
7efe201a27 | ||
|
|
39bb0a681c | ||
|
|
2d896443eb | ||
|
|
a6d1f74f1f | ||
|
|
8ab1cc4abc | ||
|
|
269bc80ec3 | ||
|
|
9871556169 | ||
|
|
e3ef1b9fce | ||
|
|
ad9bc2701d | ||
|
|
2468ea1001 | ||
|
|
cef1b1332a | ||
|
|
ed11ba25c6 | ||
|
|
efae515c1f | ||
|
|
a4412fcbe8 | ||
|
|
eba13b74c9 | ||
|
|
3548188c38 | ||
|
|
36968f5362 | ||
|
|
2b77e8f020 | ||
|
|
700b4f696e | ||
|
|
bb24d89ddb | ||
|
|
f0c0efb411 | ||
|
|
ea7d904d90 | ||
|
|
deed37b482 | ||
|
|
5cd13920a8 | ||
|
|
8227e56084 | ||
|
|
57efdd9a28 | ||
|
|
b36d0f955c | ||
|
|
5e5f6cd916 | ||
|
|
4e81ecb659 | ||
|
|
88679cff5a | ||
|
|
a6901947c2 | ||
|
|
8912154c0b | ||
|
|
6b34d179bb | ||
|
|
bb2f091a17 | ||
|
|
dfd337009f | ||
|
|
554cba6eba | ||
|
|
9d3e0e85ba | ||
|
|
7d670cc449 | ||
|
|
0cc0a893a2 | ||
|
|
b7190b1927 | ||
|
|
68890d8f2b | ||
|
|
03f4c9fd56 | ||
|
|
c813b1c068 | ||
|
|
aafb66e45c | ||
|
|
8f0d32b764 | ||
|
|
62bf3b6cd4 | ||
|
|
58a454dc23 | ||
|
|
5a74498b87 | ||
|
|
ac238e37d1 | ||
|
|
9e4269ebae | ||
|
|
dfb0db593d | ||
|
|
79e2bf69b4 | ||
|
|
c153fae3d8 | ||
|
|
c1105d0ac5 | ||
|
|
fdffa9ee42 | ||
|
|
cb008888bf | ||
|
|
86ce05ec3b | ||
|
|
a42fbc5bd0 | ||
|
|
441b9f1502 | ||
|
|
1e0100b424 | ||
|
|
288a377e71 | ||
|
|
12e2aecbda | ||
|
|
2d83ca6cdf | ||
|
|
f498f36bef | ||
|
|
2eb957fc04 | ||
|
|
9cff0de208 | ||
|
|
4b2ba48e58 | ||
|
|
d47ee41c32 | ||
|
|
22f3d49e5c | ||
|
|
a10dd02a49 | ||
|
|
52196635a3 | ||
|
|
59efd239ea | ||
|
|
1a1deef64a | ||
|
|
132ea695bc | ||
|
|
743d0d59ad | ||
|
|
7162dbaa8e | ||
|
|
c378e60ec7 | ||
|
|
9612e05536 | ||
|
|
f38442bbae | ||
|
|
cf0ddafbe0 | ||
|
|
1727c9917d | ||
|
|
18d16d7639 | ||
|
|
3d20f8c56e | ||
|
|
d4264be5fd | ||
|
|
6d553a10ad | ||
|
|
5f4180cf13 | ||
|
|
4aedfdb006 | ||
|
|
a3658ff653 | ||
|
|
d040242a7e | ||
|
|
019e5e15e6 | ||
|
|
2a8797c49c | ||
|
|
ab1095e529 | ||
|
|
30168f57bb | ||
|
|
0a2eb1d520 | ||
|
|
ec4f05ec5f | ||
|
|
7a9b4d0b2b | ||
|
|
b7b6624ee8 | ||
|
|
f455c24054 | ||
|
|
ee94c220da | ||
|
|
615f97f47e | ||
|
|
1ef26769b6 | ||
|
|
04ed6406e7 | ||
|
|
882dcb7384 | ||
|
|
f29f13f817 | ||
|
|
0a8abc529b | ||
|
|
72e2faa5b6 | ||
|
|
8291e1c98d | ||
|
|
df3fa20d6f | ||
|
|
4f532659b3 | ||
|
|
e1f086944d | ||
|
|
a13bce59e3 | ||
|
|
ad46361cb0 | ||
|
|
fd5f09a816 | ||
|
|
c38570cb9d | ||
|
|
324732d948 | ||
|
|
78c5892c6a | ||
|
|
a1e74e6659 | ||
|
|
4caa56aa80 | ||
|
|
95c494d9fc | ||
|
|
2dd92dc2b7 | ||
|
|
f5580c4046 |
@@ -217,3 +217,12 @@ More German translation updates, thanks to Raymond Vetter.
|
||||
Norwegian updates, thanks to Stein-Aksel Basma.
|
||||
The awesome new Authentic Theme by Ilia Rostovtsev is now included in the Webmin package.
|
||||
Catalan translation updates from Jaume Badiella.
|
||||
---- Changes since 1.740 ----
|
||||
Norwegian updates, thanks to Stein-Aksel Basma.
|
||||
Catalan translation updates from Jaume Badiella.
|
||||
More German translation updates, thanks to Raymond Vetter.
|
||||
---- Changes since 1.750 ----
|
||||
Norwegian updates, thanks to Stein-Aksel Basma.
|
||||
Catalan translation updates from Jaume Badiella.
|
||||
More German translation updates, thanks to Raymond Vetter.
|
||||
Fixed an XSS bug that allowed xmlrpc.cgi to be abused by a malicious link.
|
||||
|
||||
2
README
2
README
@@ -1,4 +1,4 @@
|
||||
Webmin Version 1.740
|
||||
Webmin Version 1.760
|
||||
--------------------
|
||||
Webmin is a web-based interface for system administration for Unix.
|
||||
Using any browser that supports tables and forms, you can setup user
|
||||
|
||||
@@ -257,7 +257,11 @@ else{ /* end IE initialization, try to deal with real browsers now ;-) */
|
||||
/**
|
||||
* <p>Emulate IE's onreadystatechange attribute</p>
|
||||
*/
|
||||
XMLDocument.prototype.onreadystatechange = null;
|
||||
try {
|
||||
XMLDocument.prototype.onreadystatechange = null;
|
||||
} catch(err) {
|
||||
// May fail on Chrome 43+
|
||||
}
|
||||
/**
|
||||
* <p>Emulates IE's readyState property, which always gives an integer from 0 to 4:</p>
|
||||
* <ul><li>1 == LOADING,</li>
|
||||
|
||||
@@ -220,6 +220,8 @@ foreach $v (@virt) {
|
||||
if (&find_vdirective("SSLEngine", $vm, $conf, 1) eq "on") {
|
||||
$prot = "https";
|
||||
}
|
||||
$sp = undef if ($sp == 80 && $prot eq "http" ||
|
||||
$sp == 443 && $prot eq "https");
|
||||
push(@vurl, $sp ? "$prot://$sn:$sp/" : "$prot://$sn/");
|
||||
}
|
||||
|
||||
@@ -368,10 +370,12 @@ else {
|
||||
print "<table width=100% cellpadding=5>\n";
|
||||
for($i=0; $i<@vname; $i++) {
|
||||
print "<tr class='mainbody ".($i % 2 ? 'row0' : 'row1')."'> <td valign=top align=center nowrap>";
|
||||
print '<div class="row icons-row inline-row">';
|
||||
&generate_icon("images/virt.gif", $vname[$i], $vlink[$i],
|
||||
undef, undef, undef,
|
||||
$vidx[$i] && $access{'vaddr'} ?
|
||||
&ui_checkbox("d", $vidx[$i]) : "");
|
||||
print "</div>\n";
|
||||
print "</td> <td valign=top>\n";
|
||||
print "$vdesc[$i]<br>\n";
|
||||
print "<table width=100%><tr>\n";
|
||||
|
||||
1001
apache/lang/ru.UTF-8
Normal file
1001
apache/lang/ru.UTF-8
Normal file
File diff suppressed because it is too large
Load Diff
1883
apache/lang/ru_SU
1883
apache/lang/ru_SU
File diff suppressed because it is too large
Load Diff
@@ -35,6 +35,7 @@ edit_schedyes=S
|
||||
edit_mods=Mòduls a copiar
|
||||
edit_dest=Destinació de la còpia
|
||||
edit_mods2=Mòduls a restaurar
|
||||
edit_other2=Altres fitxers a restaurar
|
||||
edit_dest2=Restaura de
|
||||
edit_what=Inclou en la còpia
|
||||
edit_webmin=Fitxers de configuració dels mòduls Webmin
|
||||
@@ -83,6 +84,7 @@ backup_failed=... ha fallat! $1
|
||||
backup_done=... completa. La mida final de la còpia és de $1 i conté $2 fitxers.
|
||||
|
||||
restore_err=La restauració ha fallat
|
||||
restore_emods=No has seleccionat cap mòdul ni cap altre fitxer
|
||||
restore_title=Configuració de Restauració
|
||||
restore_doing=S'està començant la restauració dels fitxers de configuració de mòduls de $1...
|
||||
restore_testing=S'està extraient el contingut de la còpia de $1...
|
||||
|
||||
@@ -43,6 +43,7 @@ edit_mods=Moduler som skal sikkerhetskopieres
|
||||
edit_mods2=Moduler som skal gjenopprettes
|
||||
edit_nofiles=Tjener konfigurasjonsfiler
|
||||
edit_other=Andre listede filer ..
|
||||
edit_other2=Andre filer å gjenopprette
|
||||
edit_post=Post-sikkerhetskopi kommando
|
||||
edit_pre=Pre-sikkerhetskopi kommando
|
||||
edit_return=backup skjema
|
||||
@@ -99,6 +100,7 @@ nice_upload=lastet opp fil
|
||||
restore_doing=Starter gjenoppretting av modulkonfigurasjonsfiler fra $1 ..
|
||||
restore_done=.. fullført. $1 filer ble gjenopprettet.
|
||||
restore_done2=.. filer i sikkerhetskopien er :
|
||||
restore_emods=Ingen moduler eller andre filer valgt
|
||||
restore_err=Gjenoppretting feilet
|
||||
restore_failed=.. feilet! $1
|
||||
restore_testing=Pakker ut innhold av sikkerhetskopi fra $1 ..
|
||||
|
||||
@@ -42,6 +42,26 @@ foreach $v (sort { $a->{'value'} cmp $b->{'value'} } @views) {
|
||||
}
|
||||
print "</select></td> </tr></table></td></tr>\n";
|
||||
|
||||
if (@views) {
|
||||
print "<tr> <td valign=top><b>$text{'acl_inviews'}</b></td>\n";
|
||||
print "<td colspan=3>\n";
|
||||
print &ui_radio("inviews_def", $_[0]->{'inviews'} eq "*" ? 1 : 0,
|
||||
[ [ 1, $text{'acl_vall'} ],
|
||||
[ 0, $text{'acl_vsel'} ] ]),"<br>\n";
|
||||
print "<select name=inviews multiple size=4 width=150>\n";
|
||||
local ($v, %vcan);
|
||||
map { $vcan{$_}++ } split(/\s+/, $_[0]->{'inviews'});
|
||||
printf "<option value='%s' %s>%s</option>\n",
|
||||
"_", $vcan{"_"} ? "selected" : "",
|
||||
"<".$text{'acl_toplevel'}.">";
|
||||
foreach $v (sort { $a->{'value'} cmp $b->{'value'} } @views) {
|
||||
printf "<option value='%s' %s>%s</option>\n",
|
||||
$v->{'value'},
|
||||
$vcan{$v->{'value'}} ? "selected" : "", $v->{'value'};
|
||||
}
|
||||
print "</select></td></tr>\n";
|
||||
}
|
||||
|
||||
print "<tr> <td><b>$text{'acl_types'}</b></td> <td colspan=3>\n";
|
||||
printf "<input type=radio name=types_def value=1 %s> %s\n",
|
||||
$_[0]->{'types'} ? "" : "checked", $text{'acl_types1'};
|
||||
@@ -204,6 +224,8 @@ elsif ($in{'zones_def'} == 2) {
|
||||
else {
|
||||
$_[0]->{'zones'} = join(" ", split(/\0/, $in{'zones'}));
|
||||
}
|
||||
$_[0]->{'inviews'} = $in{'inviews_def'} ? "*" :
|
||||
join(" ", split(/\0/, $in{'inviews'}));
|
||||
$_[0]->{'types'} = $in{'types_def'} ? undef : $in{'types'};
|
||||
$_[0]->{'master'} = $in{'master'} || 0;
|
||||
$_[0]->{'slave'} = $in{'slave'} || 0;
|
||||
|
||||
@@ -879,8 +879,20 @@ elsif ($access{'zones'} =~ /^\!/) {
|
||||
else {
|
||||
# List of allowed zones
|
||||
local $ok;
|
||||
foreach (split(/\s+/, $access{'zones'})) {
|
||||
$ok++ if ($_ eq $zn || ($vn && $_ eq $vn));
|
||||
foreach my $z (split(/\s+/, $access{'zones'})) {
|
||||
$ok++ if ($z eq $zn || ($vn && $z eq $vn));
|
||||
}
|
||||
return 0 if (!$ok);
|
||||
}
|
||||
|
||||
# Check allowed view
|
||||
if ($access{'inviews'} eq '*') {
|
||||
# All views are OK
|
||||
}
|
||||
else {
|
||||
local $ok;
|
||||
foreach my $v (split(/\s+/, $access{'inviews'})) {
|
||||
$ok++ if ($v eq ($vn || "_"));
|
||||
}
|
||||
return 0 if (!$ok);
|
||||
}
|
||||
|
||||
@@ -294,7 +294,10 @@ edit_espfinclude='$1' no
|
||||
edit_espfredirect='$1' no és un nom de domini alternatiu vàlid
|
||||
edit_espfexp='$1' és un nom de registre vàlid per a un missatge de rebuig
|
||||
edit_ensec3value2=Hi falfa el nombre d'iteracions o bé no és numèric
|
||||
edit_ensec3value2=Hi falta la sal o bé no és base64
|
||||
edit_ensec3value3=Hi falta la sal no base64 o bé és incorrecta
|
||||
edit_edmarcpct=El percentatge de missatges ha de ser un enter entre 0 i 100
|
||||
edit_edmarcrua=Hi falta l'adreça de la informació agregada
|
||||
edit_edmarcruf=Hi falta l'adreça de la informació forense
|
||||
|
||||
text_title=Edició del Fitxer de Registres
|
||||
text_title2=Visualització del Fitxer de Registres
|
||||
@@ -374,6 +377,7 @@ type_HINFO=Informaci
|
||||
type_NSEC3PARAM=Paràmetres DNSSEC
|
||||
type_TXT=Text
|
||||
type_SPF=Remitent Permès des de
|
||||
type_DMARC=DMARC
|
||||
type_WKS=Servei Conegut (WKS)
|
||||
type_RP=Persona Responsable
|
||||
type_PTR=Adreça Inversa
|
||||
@@ -390,6 +394,7 @@ edit_MX=Servidor de Correu
|
||||
edit_HINFO=Informació del Host
|
||||
edit_TXT=Text
|
||||
edit_SPF=Remitent Permès des de
|
||||
edit_DMARC=DMARC
|
||||
edit_WKS=Servei Conegut (WKS)
|
||||
edit_RP=Persona Responsable
|
||||
edit_PTR=Adreça Inversa
|
||||
@@ -407,6 +412,7 @@ recs_MX=Servidor de Correu
|
||||
recs_HINFO=Informació del Host
|
||||
recs_TXT=Text
|
||||
recs_SPF=Remitent Permès des de
|
||||
recs_DMARC=DMARC
|
||||
recs_WKS=Servei Conegut (WKS)
|
||||
recs_RP=Persona Responsable
|
||||
recs_PTR=Adreça Inversa
|
||||
@@ -442,6 +448,7 @@ value_KEY2=Protocol
|
||||
value_KEY3=Algoritme
|
||||
value_KEY4=Dades de la clau
|
||||
value_SPF1=Especificació SPF
|
||||
value_DMARC1=Especificació DMARC
|
||||
value_NSEC3PARAM1=Algoritme de hash
|
||||
value_NSEC3PARAM2=Banderes NSEC3
|
||||
value_NSEC3PARAM3=Nombre d'iteracions del hash
|
||||
@@ -468,6 +475,18 @@ value_spfredirect=Utilitza un registre SPF d'un domini alternatiu
|
||||
value_spfnoredirect=Utilitza el registre d'aquest domini
|
||||
value_spfexp=Registre TXT pel al motiu del rebuig
|
||||
value_spfnoexp=Cap
|
||||
value_dmarcnone=No prenguis cap acció
|
||||
value_dmarcquar=Posa el coreu en quarantena
|
||||
value_dmarcreject=Rebutja el correu
|
||||
value_dmarcp=Política per als correus que no passen SPF o DKIM
|
||||
value_dmarcpct=Percentatge de missatges a aplicar-hi la política
|
||||
value_dmarcrua=Envia la informació agregada a
|
||||
value_dmarcruf=Envia la informació forense a
|
||||
value_dmarcsp=Política dels subdominis
|
||||
value_dmarcnop=Igual que aquest domini
|
||||
value_dmarcaspf=Requereix alineació SPF estricta
|
||||
value_dmarcadkim=Requereix alineació DKIM estricta
|
||||
value_dmarcnor=No ho enviïs
|
||||
|
||||
warn=Avisa
|
||||
fail=Falla
|
||||
@@ -805,6 +824,9 @@ log_dnssec=S'ha canviat la resignatura de la clau
|
||||
|
||||
convert_err=No s'ha pogut convertir la zona
|
||||
convert_efile=Cal especificar un fitxer de registres abans de poder convertir una zona esclava a una de mestra.
|
||||
convert_efilesize=El fitxer de resistres $1 no existeix o bé està buit
|
||||
convert_ebinary=L'ordre necessària per convertir una zona esclava binària a format text mestre no està instal·lada
|
||||
convert_ecompile=La conversió de format binari a text ha fallat: $1
|
||||
|
||||
whois_title=Informació WHOIS
|
||||
whois_header=Resultat de l'ordre $1...
|
||||
@@ -864,9 +886,9 @@ vdelete_move=Despla
|
||||
gen_title=Generadors de Registres
|
||||
gen_desc=Aquesta pàgina permet definir generadors, cadascun dels quals crearà múltiples registres en aquesta zona utilitzant un comptador incremental. Això pot ser útil per a delegar parts de la zona inversa a un altre servidor.
|
||||
gen_range=Abast
|
||||
gen_name=Patró d'adreça
|
||||
gen_name=Patró del nom de registre
|
||||
gen_type=Tipus
|
||||
gen_value=Patró de nom de host
|
||||
gen_value=Patró del valor de registre
|
||||
gen_cmt=Comentari
|
||||
gen_skip=cada
|
||||
gen_show=Mostra els registres generats
|
||||
|
||||
@@ -506,6 +506,8 @@ acl_zones=Domains this user can edit
|
||||
acl_zall=All zones
|
||||
acl_zsel=Selected zones..
|
||||
acl_znsel=All except selected..
|
||||
acl_inviews=Views this user can edit domains in
|
||||
acl_toplevel=Outside any view
|
||||
acl_master=Can create master zones?
|
||||
acl_slave=Can create slave/stub zones?
|
||||
acl_forward=Can create forward zones?
|
||||
|
||||
@@ -749,6 +749,7 @@ local $rvword;
|
||||
while(@rv) {
|
||||
my $w = shift(@rv);
|
||||
if (length($rvword)+length($w)+1 >= 255) {
|
||||
$rvword .= " ";
|
||||
push(@rvwords, $rvword);
|
||||
$rvword = "";
|
||||
}
|
||||
|
||||
@@ -28,6 +28,7 @@ edit_cmdowner=Ausführen als Benutzer
|
||||
edit_cmdtimeout=Timeout
|
||||
edit_controlall=Alle Adressen
|
||||
edit_controlallow=Erlaube Verbindungen von
|
||||
edit_controlauto=Befehl, um nach Zeitplan auszuführen
|
||||
edit_controldef=Globale Definitionen
|
||||
edit_controldeny=Verbiete Verbindungen von
|
||||
edit_controldom=Domänenname
|
||||
@@ -81,6 +82,7 @@ edit_files_create=Erstelle Datei
|
||||
edit_files_fixall=Behebe alle Dateien
|
||||
edit_files_fixdirs=Behebe Verzeichnisse
|
||||
edit_files_fixplain=Behebe normale Dateien
|
||||
edit_files_linkchildren=Verlinke Kinder
|
||||
edit_files_touch=Erstelle Dateien
|
||||
edit_files_warnall=Warnungen über alle Dateien
|
||||
edit_files_warndirs=Warne über Verzeichnisse
|
||||
@@ -98,6 +100,7 @@ edit_filesowner=Setze Besitzer auf
|
||||
edit_filesrec=Rekursionstiefe
|
||||
edit_grant=$edit_admit
|
||||
edit_grantdir=Verzeichnis
|
||||
edit_granthosts=Hosts und Host-Muster
|
||||
edit_groupmems=Mitglieder
|
||||
edit_groupname=Gruppenname
|
||||
edit_groups=Gruppendefinitionen
|
||||
@@ -140,6 +143,7 @@ edit_tidyage=Altersbeschränkung
|
||||
edit_tidyage0=$1 ist mehr als $2 Tage
|
||||
edit_tidyage1=Jedes Alter
|
||||
edit_tidyatime=Zugriffszeit
|
||||
edit_tidyctime=Inhalt Zeit
|
||||
edit_tidydir=Verzeichnis zum säubern
|
||||
edit_tidymtime=Änderungszeit
|
||||
edit_tidynew=Füge ein Verzeichnis zum säubern hinzu
|
||||
|
||||
@@ -4,7 +4,6 @@ category=cluster
|
||||
desc_ca=Motor de Configuració
|
||||
desc_es=Motor de Configuración
|
||||
desc_de=Konfigurations-Automat
|
||||
longdesc=Configure the CFengine program, for checking and maintaining various system-administration settings.
|
||||
desc_fr=Moteur de configuration
|
||||
os_support=!windows
|
||||
desc_sv=Konfigurations Motor
|
||||
@@ -12,6 +11,5 @@ desc_cz=Konfigura
|
||||
desc_nl=Configuratie Engine
|
||||
desc_cz.UTF-8=KonfiguraÄ<61>nà stroj
|
||||
desc_pl=Konfiguracja silnika
|
||||
longdesc_ms_MY=Konfigurasi program CFengine, untuk memeriksa dan mengekalkan tetapan sistem pentadbiran pelbagai
|
||||
desc_ms_MY=Enjin Konfigurasi
|
||||
desc_no=Konfigurasjonsmotor
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
index_title=Canvi d'Idioma i Tema
|
||||
index_lang=Idioma de la interfície d'usuari de Webmin
|
||||
index_langglobal=Idioma global ($1)
|
||||
index_langglobal=Idioma global ... $1 ($2)
|
||||
index_langset=Tria personal...
|
||||
index_theme=Tema de la interfície d'usuari de Webmin
|
||||
index_overlay=Capa del tema
|
||||
|
||||
@@ -20,7 +20,7 @@ index_dlang=språket modulene vises i
|
||||
index_dpass=passordet brukt til å logge inn på
|
||||
index_dtheme=temaet som kontrollerer Webmins utseende
|
||||
index_lang=Webmin UI språk
|
||||
index_langglobal=Globalt språk ($1)
|
||||
index_langglobal2=Globalt språk .. $1 ($2)
|
||||
index_langset=Personlig valg
|
||||
index_ok=Lagre endringer
|
||||
index_overlay=Tema overstyring
|
||||
|
||||
@@ -65,6 +65,7 @@ foreach $m (@ARGV) {
|
||||
$flags = !-r $file ? "chf" : "rhf";
|
||||
system("cd /tmp/create-module && find . -name .svn | xargs rm -rf");
|
||||
system("cd /tmp/create-module && find . -name '*~' -o -name '*.rej' -o -name '*.orig' -o -name '.*.swp' | xargs rm -rf");
|
||||
system("cd /tmp/create-module && find . -name RELEASE -o -name RELEASE.sh | xargs rm -rf");
|
||||
unlink("/tmp/create-module/$subdir/IDEAS");
|
||||
system("cd /tmp/create-module && find . -name \\*.svn-work | xargs rm -rf");
|
||||
system("cd /tmp/create-module && find . -name \\*.svn-base | xargs rm -rf");
|
||||
|
||||
@@ -1407,8 +1407,8 @@ sub extract_input
|
||||
local ($cmd) = @_;
|
||||
$cmd =~ s/\\%/\0/g;
|
||||
local ($cmd, $input) = split(/\%/, $cmd, 2);
|
||||
$cmd =~ s/\0/%/g;
|
||||
$input =~ s/\0/%/g;
|
||||
$cmd =~ s/\0/\\%/g;
|
||||
$input =~ s/\0/\\%/g;
|
||||
return ($cmd, $input);
|
||||
}
|
||||
|
||||
|
||||
@@ -79,6 +79,8 @@ else {
|
||||
&convert_range($job);
|
||||
$rangeable = 1;
|
||||
($command, $input) = &extract_input($job->{'command'});
|
||||
$command =~ s/\\%/%/g;
|
||||
$input =~ s/\\%/%/g;
|
||||
@lines = split(/%/, $input);
|
||||
print &ui_table_row($text{'edit_command'},
|
||||
&ui_textbox("cmd", $command, 60));
|
||||
|
||||
@@ -122,6 +122,8 @@ foreach $u (@ulist) {
|
||||
local $max = $config{'max_len'} || 10000;
|
||||
local ($cmd, $input) =
|
||||
&extract_input($job->{'command'});
|
||||
$cmd =~ s/\\%/%/g;
|
||||
$input =~ s/\\%/%/g;
|
||||
$cmd = length($cmd) > $max ?
|
||||
&html_escape(substr($cmd, 0, $max))." ..." :
|
||||
$cmd !~ /\S/ ? "BLANK" : &html_escape($cmd);
|
||||
|
||||
@@ -964,17 +964,13 @@ return $file || $config{'pid_file'};
|
||||
sub expand_ip_range
|
||||
{
|
||||
local ($s, $e) = @_;
|
||||
local @rs = split(/\./, $s);
|
||||
local @re = split(/\./, $e);
|
||||
&foreign_require("net");
|
||||
local $si = &net::ip_to_integer($s);
|
||||
local $ei = &net::ip_to_integer($e);
|
||||
return ( ) if ($si > $ei);
|
||||
local @rv;
|
||||
for(my $i=$rs[0]; $i<=$re[0]; $i++) {
|
||||
for(my $j=$rs[1]; $j<=$re[1]; $j++) {
|
||||
for(my $k=$rs[2]; $k<=$re[2]; $k++) {
|
||||
for(my $l=$rs[3]; $l<=$re[3]; $l++) {
|
||||
push(@rv, "$i.$j.$k.$l");
|
||||
}
|
||||
}
|
||||
}
|
||||
for(my $i=$si; $i<=$ei; $i++) {
|
||||
push(@rv, &net::integer_to_ip($i));
|
||||
}
|
||||
return @rv;
|
||||
}
|
||||
|
||||
@@ -72,12 +72,12 @@ print "</td></tr>\n";
|
||||
if (!defined($in{'ret'})) {
|
||||
print "<tr><td valign=middle><b>$text{'esub_shnet'}</b></td>\n";
|
||||
print "<td valign=middle>";
|
||||
my @shn;
|
||||
push(@shn, [ "", "<$text{'esub_none'}>", ( $s_parent ? "" : "selected" ) ]);
|
||||
foreach $s (&find("shared-network", $conf)) {
|
||||
push(@shn, [ $s->{'index'}, ( &can('rw', \%access, $s) ? $s->{'values'}->[0] : "" ), ( $s eq $s_parent ? "" : "selected" ) ]);
|
||||
}
|
||||
print &ui_select("parent", undef, \@shn);
|
||||
my @shn;
|
||||
push(@shn, [ "", "<$text{'esub_none'}>" ]);
|
||||
foreach $s (&find("shared-network", $conf)) {
|
||||
push(@shn, [ $s->{'index'}, ( &can('rw', \%access, $s) ? $s->{'values'}->[0] : "" ) ]);
|
||||
}
|
||||
print &ui_select("parent", $s_parent ? $s_parent->{'index'} : "", \@shn);
|
||||
print "</td>\n";
|
||||
}
|
||||
else {
|
||||
|
||||
@@ -72,9 +72,10 @@ if ($st[7] != $config{'dhcpd_size'} || $st[9] != $config{'dhcpd_mtime'}) {
|
||||
|
||||
# Create lookup type HTML
|
||||
# XXX change text, add to lookup_*
|
||||
$matches = ui_select("match", undef, [ [0,$text{'index_match0'},"selected"],
|
||||
[1,$text{'index_match1'},""],
|
||||
[2,$text{'index_match2'},""] ]);
|
||||
$matches = ui_select("match", $config{'match_default'} || 0,
|
||||
[ [0, $text{'index_match0'} ],
|
||||
[1, $text{'index_match1'} ],
|
||||
[2, $text{'index_match2'} ] ]);
|
||||
|
||||
# get top-level hosts
|
||||
foreach $h (&find("host", $conf)) {
|
||||
|
||||
@@ -80,6 +80,10 @@ else {
|
||||
if ($in{'hardware'} =~ /^([0-9a-f]{2})([0-9a-f]{2}).([0-9a-f]{2})([0-9a-f]{2}).([0-9a-f]{2})([0-9a-f]{2}).([0-9a-f]{2})([0-9a-f]{2})$/i) {
|
||||
$in{'hardware'} = "$1:$2:$3:$4:$5:$6";
|
||||
}
|
||||
# Handle an Ethernet address with no formatting at all
|
||||
if ($in{'hardware'} =~ /^([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i) {
|
||||
$in{'hardware'} = "$1:$2:$3:$4:$5:$6";
|
||||
}
|
||||
$in{'hardware'} =~ /^([0-9a-f]{1,2}:)*[0-9a-f]{1,2}$/i ||
|
||||
&error(&text('shost_invalidhwa', $in{'hardware'},
|
||||
$in{'hardware_type'}) );
|
||||
|
||||
@@ -18,7 +18,6 @@ desc_ja_JP.euc=BIND 4 DNS
|
||||
depends=bind8
|
||||
desc_ru_RU=BIND 4 DNS Ñåðâåð
|
||||
desc_ca=Servidor DNS BIND 4
|
||||
longdesc=Create and edit domains and DNS records.
|
||||
desc_zh_TW.UTF-8=BIND 4 DNS 伺æœ<C3A6>器
|
||||
desc_zh_CN.UTF-8=BIND 4 DNS æœ<C3A6>务器
|
||||
desc_ja_JP.UTF-8=BIND 4 DNS サーãƒ<C3A3>
|
||||
|
||||
@@ -42,13 +42,13 @@ else {
|
||||
# Regexp to match
|
||||
my $fail = &find_value("failregex", $def);
|
||||
print &ui_table_row($text{'filter_fail'},
|
||||
&ui_textarea("fail", $fail, 5, 80, "hard")."<br>\n".
|
||||
&ui_textarea("fail", $fail, 5, 80, "off")."<br>\n".
|
||||
$text{'filter_desc'});
|
||||
|
||||
# Regexp to not match
|
||||
my $ignore = &find_value("ignoreregex", $def);
|
||||
print &ui_table_row($text{'filter_ignore'},
|
||||
&ui_textarea("ignore", $ignore, 5, 80, "hard"));
|
||||
&ui_textarea("ignore", $ignore, 5, 80, "off"));
|
||||
|
||||
print &ui_table_end();
|
||||
if ($in{'new'}) {
|
||||
|
||||
@@ -116,6 +116,7 @@ my @rv;
|
||||
while(<$fh>) {
|
||||
s/\r|\n//g;
|
||||
s/^\s*#.*$//;
|
||||
s/^\s;.*$//;
|
||||
if (/^\[([^\]]+)\]/) {
|
||||
# Start of a section
|
||||
$sect = { 'name' => $1,
|
||||
|
||||
@@ -74,7 +74,6 @@ else {
|
||||
push(@opts, split(/\s+/, $in{"others_$i"}));
|
||||
push(@actions, $in{"action_$i"}."[".join(", ", @opts)."]");
|
||||
}
|
||||
@actions || &error($text{'jail_eactions'});
|
||||
|
||||
# Split and validate log file paths
|
||||
my @logpaths = split(/\r?\n/, $in{'logpath'});
|
||||
@@ -110,7 +109,8 @@ else {
|
||||
# Save directives within the section
|
||||
&save_directive("enabled", $in{'enabled'} ? 'true' : 'false', $jail);
|
||||
&save_directive("filter", $in{'filter'}, $jail);
|
||||
&save_directive("action", join("\n", @actions), $jail);
|
||||
&save_directive("action", @actions ? join("\n", @actions)
|
||||
: undef, $jail);
|
||||
&save_directive("logpath", join("\n", @logpaths), $jail);
|
||||
foreach my $f ("maxretry", "findtime", "bantime") {
|
||||
&save_directive($f, $in{$f."_def"} ? undef : $in{$f}, $jail);
|
||||
|
||||
@@ -87,6 +87,7 @@ else {
|
||||
$ucount > $config{'max_users'});
|
||||
}
|
||||
endpwent() if ($gconfig{'os_type'} ne 'hpux');
|
||||
@users = sort { $a->[1]->[0] cmp $b->[1]->[0] } @users;
|
||||
if (!@users) {
|
||||
# None found
|
||||
print "<br><b>$text{'index_none'}</b><p>\n";
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
virtualmin_spam=Camí complet del programa de consulta de spam d'usuaris de Virtualmin,3,No està instal·lat,40
|
||||
virtualmin_config=Camí complet del directori de configuració de Virtualmin,3,No instal·lat
|
||||
virtualmin_config=Camí complet del directori de configuracio de Virtualmin,3,No instal·lat
|
||||
virtualmin_spam=Camí complet del programa de consulta d'usuaris de spam de Virtualmin,3,No instal·lat,40
|
||||
warn_procmail=Mostra un avís si Procmail no està instal·lat,1,1-Sí,0-No
|
||||
forward_procmail=Crea fitxer .forward per executar procmail,1,1-Sí,0-No
|
||||
alias_files=Camí complet dels fitxers d'àlies globals,9,40,3,\t
|
||||
|
||||
@@ -155,7 +155,7 @@ if (($table->{'name'} eq 'nat' && $rule->{'chain'} ne 'PREROUTING' &&
|
||||
&can_jump("SNAT")) {
|
||||
if ($rule->{'j'}->[1] eq 'SNAT') {
|
||||
if ($rule->{'to-source'}->[1] =~
|
||||
/^([0-9\.]+)(\-([0-9\.]+))?(:(\d+)(\-(\d+))?)?$/) {
|
||||
/^([0-9\.]+)?(\-([0-9\.]+))?(:(\d+)(\-(\d+))?)?$/) {
|
||||
$sipfrom = $1;
|
||||
$sipto = $3;
|
||||
$spfrom = $5;
|
||||
|
||||
@@ -49,6 +49,7 @@ if (!$config{'direct'} && &foreign_check("init")) {
|
||||
# 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);
|
||||
if (!$config{'direct'} &&
|
||||
(!-s $iptables_save_file || $in{'reset'}) && $access{'setup'}) {
|
||||
@tables = @livetables;
|
||||
@@ -420,3 +421,13 @@ if ($filter->{'defaults'}->{'shorewall'}) {
|
||||
}
|
||||
}
|
||||
|
||||
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";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -23,6 +23,7 @@ apply_err=Fehlgeschlagen die Konfiguration anzuwenden
|
||||
apply_remote=Fehler von $1 : $2
|
||||
bootup_ecannot=Es ist Ihnen nicht erlaubt die Firewall beim Booten zu aktivieren oder zu deaktivieren
|
||||
clear_ecannot=Es ist Ihnen nicht erlaubt die Regeln zu leeren
|
||||
clear_rusure=Sind Sie sicher, dass Sie alle $2 Regeln von Kette $1 löschen möchten?
|
||||
clear_title=Regeln leeren
|
||||
cluster_add=Füge Server hinzu
|
||||
cluster_delete=Ausgewähltes löschen
|
||||
@@ -36,6 +37,7 @@ cluster_return=Cluster Server
|
||||
cluster_title=Cluster Firewall Server
|
||||
delete_ecannot=Es ist Ihnen nicht erlaubt die Regeln zu löschen
|
||||
delete_ok=Lösche jetzt
|
||||
delete_rusure=Sind Sie sicher, dass Sie die Kette $1 löschen möchten? $2 Regeln werden in ihr gelöscht.
|
||||
delete_title=Lösche Regel
|
||||
desc_always=Immer
|
||||
desc_and=und
|
||||
@@ -170,6 +172,7 @@ index_auto5=Blockiere alles ausgenommen Ports die für virtuelles Hosting be
|
||||
index_bootup=Aktiviere beim Booten
|
||||
index_bootupdesc=Ändert die Option, um zu kontrollieren, ob Ihre Firewall beim Booten aktiviert ist oder nicht.
|
||||
index_cclear=Lösche alle Regeln
|
||||
index_cdelete=Lösche Kette
|
||||
index_cdeletesel=Lösches ausgewähltes
|
||||
index_chain=Regel $1
|
||||
index_chain_forward=Weitergeleitete Pakete (FORWARD) - Gilt nur für Pakete, die dieser Host weitergeleitet hat
|
||||
@@ -182,11 +185,13 @@ index_cluster=Cluster Server
|
||||
index_clusterdesc=Klicken Sie auf diese Schaltfläche, um zusätzliche Webmin-Server einzurichten, mit denen die Firewall-Konfiguration automatisch kopiert werden.
|
||||
index_cmovesel=Verschiebe ausgewählte
|
||||
index_comm=Kommentar
|
||||
index_crename=Benenne Kette um
|
||||
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_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_header=Firewall Konfiguration von $1
|
||||
index_headerex=Bestehende Firewall Konfiguration
|
||||
index_jump=Führe Regel $1 aus
|
||||
@@ -199,6 +204,7 @@ index_jump_masquerade=Maskieren
|
||||
index_jump_queue=<font color=#0000ff>Userspace</font>
|
||||
index_jump_redirect=Leite um
|
||||
index_jump_reject=<font color=#ff4400>Zurückweisen</font>
|
||||
index_jump_return=Beende Kette
|
||||
index_jump_snat=Quell NAT
|
||||
index_move=Verschieben
|
||||
index_policy=Setze Standard-Aktion auf:
|
||||
@@ -227,17 +233,24 @@ log_bootdown=Firewall beim Booten deaktiviert
|
||||
log_bootup=Firewall beim Booten aktiviert
|
||||
log_convert=Bestehende Firewall konvertiert
|
||||
log_openports=Firewallports $1 geöffnet
|
||||
log_rename_chain=Kette $1 in Tabelle $2 umbenannt
|
||||
log_setup=Firewall eingerichtet
|
||||
log_unapply=Konfiguration zurückgesetzt
|
||||
move_chain=Aktuelle Änderung
|
||||
move_count=Regeln ausgewählt
|
||||
move_dest=Ziel-Kette
|
||||
move_header=Regel Verschiebe-Optionen
|
||||
move_ok=Verschiebe jetzt
|
||||
move_title=Verschiebe Regeln
|
||||
new_ecannot=Es ist Ihnen nicht erlaubt Ketten zu erstellen
|
||||
new_ename=Fehlender oder ungültiger Ketten-Name
|
||||
new_err=Fehlgeschlagen eine Regel zu erstellen
|
||||
new_etaken=Eine Regeln mit diesem Namen existiert bereits
|
||||
redhat_einstalled=Kein <tt>iptables</tt> Systemstart Aktion wurde festgestellt, was darauf hinweist, dass das IPtables-Paket nicht auf Ihrem System installiert ist.
|
||||
redhat_eoutput=Ein Fehler ist beim Abrufen des IPtables Status von dem Befehl $1 aufgetreten. Dies ist wahrscheinlich darauf zurückzuführen, dass Ihr System so konfiguriert wurde, IPchains anstelle von IPtables zu benutzen.
|
||||
rename_chain=Aktueller Name
|
||||
rename_count=Regel in Kette
|
||||
rename_ecannot=Es ist Ihnen nicht erlaubt Ketten umzubenennen
|
||||
rename_name=Neuer Name
|
||||
rename_none=Nichts
|
||||
rename_ok=Umbenenne jetzt
|
||||
|
||||
@@ -68,6 +68,7 @@ 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_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
|
||||
|
||||
@@ -21,3 +21,4 @@ desc_no=Linux brannmur
|
||||
desc_hu=Linux tûzfal (Iptables)
|
||||
longdesc_ms_MY=Mengkonfigurasi firewall linux menggunakan iptables. Membenarkan untuk mengubah kesemua jadual, kunci, aturan dan pilihan.
|
||||
desc_ms_MY=Firewall Linux
|
||||
longdesc_de=Konfiguriert eine Linux-Firewall mit iptables. Ermöglicht die Bearbeitung aller Tabellen, Ketten, Regeln und Optionen.
|
||||
|
||||
@@ -116,7 +116,8 @@ else {
|
||||
if ($table->{'name'} eq 'nat' && $rule->{'chain'} ne 'PREROUTING' &&
|
||||
$rule->{'chain'} ne 'OUTPUT') {
|
||||
if ($rule->{'j'}->[1] eq 'SNAT' && !$in{'snatdef'}) {
|
||||
&check_ipaddress($in{'sipfrom'}) ||
|
||||
(!$in{'sipfrom'} && !$in{'sipto'}) ||
|
||||
&check_ipaddress($in{'sipfrom'}) ||
|
||||
&error($text{'save_esipfrom'});
|
||||
!$in{'sipto'} || &check_ipaddress($in{'sipto'}) ||
|
||||
&error($text{'save_esipto'});
|
||||
@@ -406,9 +407,13 @@ else {
|
||||
|
||||
sub check_ipmask
|
||||
{
|
||||
return &to_ipaddress($_[0]) ||
|
||||
$_[0] =~ /^([0-9\.]+)\/([0-9\.]+)$/ &&
|
||||
&to_ipaddress("$1") &&
|
||||
(&check_ipaddress("$2") || ($2 =~ /^\d+$/ && $2 <= 32));
|
||||
foreach my $w (split(/,/, $_[0])) {
|
||||
my $ok = &to_ipaddress($w) ||
|
||||
$w =~ /^([0-9\.]+)\/([0-9\.]+)$/ &&
|
||||
&to_ipaddress("$1") &&
|
||||
(&check_ipaddress("$2") || ($2 =~ /^\d+$/ && $2 <= 32));
|
||||
return 0 if (!$ok);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
2
firewalld/CHANGELOG
Normal file
2
firewalld/CHANGELOG
Normal file
@@ -0,0 +1,2 @@
|
||||
---- Changes since 1.750 ----
|
||||
First version of this module, for configuring allowed ports and services in FirewallD.
|
||||
18
firewalld/bootup.cgi
Executable file
18
firewalld/bootup.cgi
Executable file
@@ -0,0 +1,18 @@
|
||||
#!/usr/local/bin/perl
|
||||
# Enable or disable firewalld at boot time
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
require './firewalld-lib.pl';
|
||||
our (%in, %config);
|
||||
&ReadParse();
|
||||
&foreign_require("init");
|
||||
if ($in{'boot'}) {
|
||||
&init::enable_at_boot($config{'init_name'});
|
||||
}
|
||||
else {
|
||||
&init::disable_at_boot($config{'init_name'});
|
||||
}
|
||||
&webmin_log($in{'boot'} ? "bootup" : "bootdown");
|
||||
&redirect("index.cgi?zone=".&urlize($in{'zone'}));
|
||||
|
||||
2
firewalld/config
Normal file
2
firewalld/config
Normal file
@@ -0,0 +1,2 @@
|
||||
firewall_cmd=firewall-cmd
|
||||
init_name=firewalld
|
||||
2
firewalld/config.info
Normal file
2
firewalld/config.info
Normal file
@@ -0,0 +1,2 @@
|
||||
firewall_cmd=Full path to firewall-cmd program,0
|
||||
init_name=FirewallD init script name,0
|
||||
2
firewalld/config.info.de
Normal file
2
firewalld/config.info.de
Normal file
@@ -0,0 +1,2 @@
|
||||
firewall_cmd=Voller Pfad zum firewall-cmd Programm,0
|
||||
init_name=FirewallD init-script-Name,0
|
||||
77
firewalld/create_zone.cgi
Normal file
77
firewalld/create_zone.cgi
Normal file
@@ -0,0 +1,77 @@
|
||||
#!/usr/local/bin/perl
|
||||
# Create a new zone, and add some allowed ports to it
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
require 'firewalld-lib.pl';
|
||||
our (%text, %in);
|
||||
&ReadParse();
|
||||
&error_setup($text{'zone_err'});
|
||||
|
||||
# Validate inputs
|
||||
$in{'name'} =~ /^[a-z0-9\.\_\-]+$/i || &error($text{'zone_ename'});
|
||||
my @zones = &list_firewalld_zones();
|
||||
my ($clash) = grep { $_->{'name'} eq $in{'name'} } @zones;
|
||||
$clash && &error($text{'zone_eclash'});
|
||||
|
||||
# Add the zone
|
||||
my $err = &create_firewalld_zone($in{'name'});
|
||||
&error($err) if ($err);
|
||||
|
||||
# Find the Webmin port
|
||||
my @webminports;
|
||||
if (&foreign_installed("webmin")) {
|
||||
&foreign_require("webmin");
|
||||
my @socks = &webmin::get_miniserv_sockets();
|
||||
@webminports = &unique(map { $_->[1] } @webminports);
|
||||
}
|
||||
else {
|
||||
@webminports = ( $ENV{'SERVER_PORT'} || 10000 );
|
||||
}
|
||||
|
||||
# Work out which ports to allow
|
||||
my (@addports, @addservs);
|
||||
if ($in{'mode'} == 1) {
|
||||
# Copy from another zone
|
||||
my ($source) = grep { $_->{'name'} eq $in{'source'} } @zones;
|
||||
@addports = @{$source->{'ports'}};
|
||||
@addservs = @{$source->{'services'}};
|
||||
}
|
||||
elsif ($in{'mode'} >= 2) {
|
||||
# SSH, Webmin and Ident
|
||||
push(@addports, "ssh/tcp", "auth/tcp");
|
||||
foreach my $webminport (@webminports) {
|
||||
push(@addports, $webminport."-".($webminport+10)."/tcp");
|
||||
}
|
||||
|
||||
if ($in{'mode'} >= 3) {
|
||||
# High ports
|
||||
push(@addports, "1024-65535/tcp");
|
||||
}
|
||||
|
||||
if ($in{'mode'} >= 4) {
|
||||
# Other virtual hosting ports
|
||||
push(@addports, "53/tcp", "53/udp"); # DNS
|
||||
push(@addports, "80/tcp", "443/tcp"); # HTTP
|
||||
push(@addports, "25/tcp", "587/tcp"); # SMTP
|
||||
push(@addports, "20/tcp", "21/tcp"); # FTP
|
||||
push(@addports, "110/tcp", "995/tcp"); # POP3
|
||||
push(@addports, "143/tcp", "220/tcp", "993/tcp"); # IMAP
|
||||
push(@addports, "20000/tcp"); # Usermin
|
||||
}
|
||||
}
|
||||
|
||||
# Add the ports and services
|
||||
my $zone = { 'name' => $in{'name'} };
|
||||
foreach my $p (@addports) {
|
||||
my $err = &create_firewalld_port($zone, split(/\//, $p));
|
||||
&error($err) if ($err);
|
||||
}
|
||||
foreach my $s (@addservs) {
|
||||
my $err = &create_firewalld_service($zone, $s);
|
||||
&error($err) if ($err);
|
||||
}
|
||||
|
||||
&webmin_log("create", "zone", $in{'name'});
|
||||
&redirect("index.cgi?zone=".&urlize($in{'name'}));
|
||||
|
||||
21
firewalld/default_zone.cgi
Normal file
21
firewalld/default_zone.cgi
Normal file
@@ -0,0 +1,21 @@
|
||||
#!/usr/local/bin/perl
|
||||
# Make a zone the default
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
require 'firewalld-lib.pl';
|
||||
our (%text, %in);
|
||||
&ReadParse();
|
||||
&error_setup($text{'defzone_err'});
|
||||
|
||||
# Get the zone
|
||||
my @zones = &list_firewalld_zones();
|
||||
my ($zone) = grep { $_->{'name'} eq $in{'zone'} } @zones;
|
||||
$zone || &error($text{'port_ezone'});
|
||||
|
||||
# Make the default
|
||||
my $err = &default_firewalld_zone($zone);
|
||||
&error($err) if ($err);
|
||||
|
||||
&webmin_log("default", "zone", $zone->{'name'});
|
||||
&redirect("index.cgi?zone=".&urlize($zone->{'name'}));
|
||||
32
firewalld/delete_rules.cgi
Normal file
32
firewalld/delete_rules.cgi
Normal file
@@ -0,0 +1,32 @@
|
||||
#!/usr/local/bin/perl
|
||||
# Delete multiple ports or services
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
require 'firewalld-lib.pl';
|
||||
our (%in, %text);
|
||||
&error_setup($text{'delete_err'});
|
||||
&ReadParse();
|
||||
my @d = split(/\0/, $in{'d'});
|
||||
@d || &error($text{'delete_enone'});
|
||||
|
||||
my @zones = &list_firewalld_zones();
|
||||
my ($zone) = grep { $_->{'name'} eq $in{'zone'} } @zones;
|
||||
$zone || &error($text{'port_ezone'});
|
||||
|
||||
foreach my $d (@d) {
|
||||
my @w = split(/\//, $d);
|
||||
my $err;
|
||||
if ($w[0] eq "port") {
|
||||
$err = &delete_firewalld_port($zone, $w[1], $w[2]);
|
||||
}
|
||||
elsif ($w[0] eq "service") {
|
||||
$err = &delete_firewalld_service($zone, $w[1]);
|
||||
}
|
||||
else {
|
||||
next;
|
||||
}
|
||||
&error(&text('delete_edel', $d, $err)) if ($err);
|
||||
}
|
||||
&webmin_log("delete", "rules", scalar(@d));
|
||||
&redirect("index.cgi?zone=".&urlize($zone->{'name'}));
|
||||
39
firewalld/delete_zone.cgi
Normal file
39
firewalld/delete_zone.cgi
Normal file
@@ -0,0 +1,39 @@
|
||||
#!/usr/local/bin/perl
|
||||
# Delete a zone, after asking for confirmation
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
require 'firewalld-lib.pl';
|
||||
our (%text, %in);
|
||||
&ReadParse();
|
||||
&error_setup($text{'delzone_err'});
|
||||
|
||||
# Get the zone
|
||||
my @zones = &list_firewalld_zones();
|
||||
my ($zone) = grep { $_->{'name'} eq $in{'zone'} } @zones;
|
||||
$zone || &error($text{'port_ezone'});
|
||||
$zone->{'default'} && &error($text{'delzone_edefault'});
|
||||
|
||||
if ($in{'confirm'}) {
|
||||
# Just do it
|
||||
my $err = &delete_firewalld_zone($zone);
|
||||
&error($err) if ($err);
|
||||
&webmin_log("delete", "zone", $zone->{'name'});
|
||||
&redirect("index.cgi");
|
||||
}
|
||||
else {
|
||||
# Ask first
|
||||
&ui_print_header(undef, $text{'delzone_title'}, "");
|
||||
|
||||
print &ui_confirmation_form("delete_zone.cgi",
|
||||
&text('delzone_rusure', "<tt>$zone->{'name'}</tt>",
|
||||
scalar(@{$zone->{'ports'}}),
|
||||
scalar(@{$zone->{'services'}})),
|
||||
[ [ 'zone', $zone->{'name'} ] ],
|
||||
[ [ 'confirm', $text{'delete'} ] ],
|
||||
);
|
||||
|
||||
&ui_print_footer("index.cgi?zone=".&urlize($in{'zone'}),
|
||||
$text{'index_return'});
|
||||
}
|
||||
|
||||
68
firewalld/edit_port.cgi
Normal file
68
firewalld/edit_port.cgi
Normal file
@@ -0,0 +1,68 @@
|
||||
#!/usr/local/bin/perl
|
||||
# Show a form to edit one port or port range
|
||||
|
||||
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);
|
||||
if (!$in{'new'}) {
|
||||
&ui_print_header(undef, $text{'port_edit'}, "");
|
||||
($ports, $proto) = split(/\//, $in{'id'});
|
||||
if ($ports =~ /^(\d+)\-(\d+)$/) {
|
||||
$mode = 1;
|
||||
($portlow, $porthigh) = ($1, $2);
|
||||
}
|
||||
else {
|
||||
$mode = 0;
|
||||
$port = $ports;
|
||||
}
|
||||
}
|
||||
else {
|
||||
&ui_print_header(undef, $text{'port_create'}, "");
|
||||
$mode = 0;
|
||||
$proto = "tcp";
|
||||
}
|
||||
|
||||
print &ui_form_start("save_port.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{'port_header'}, undef, 2);
|
||||
|
||||
# Zone name
|
||||
print &ui_table_row($text{'port_zone'},
|
||||
"<tt>".&html_escape($zone->{'name'})."</tt>");
|
||||
|
||||
# Port number or range
|
||||
print &ui_table_row($text{'port_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));
|
||||
|
||||
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'});
|
||||
47
firewalld/edit_serv.cgi
Normal file
47
firewalld/edit_serv.cgi
Normal file
@@ -0,0 +1,47 @@
|
||||
#!/usr/local/bin/perl
|
||||
# Show a form to edit one service
|
||||
|
||||
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 $serv;
|
||||
if (!$in{'new'}) {
|
||||
&ui_print_header(undef, $text{'serv_edit'}, "");
|
||||
$serv = $in{'id'};
|
||||
}
|
||||
else {
|
||||
&ui_print_header(undef, $text{'serv_create'}, "");
|
||||
}
|
||||
|
||||
print &ui_form_start("save_serv.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{'serv_header'}, undef, 2);
|
||||
|
||||
# Zone name
|
||||
print &ui_table_row($text{'port_zone'},
|
||||
"<tt>".&html_escape($zone->{'name'})."</tt>");
|
||||
|
||||
# Service name
|
||||
print &ui_table_row($text{'serv_name'},
|
||||
&ui_select("serv", $serv, [ &list_firewalld_services() ]));
|
||||
|
||||
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'});
|
||||
220
firewalld/firewalld-lib.pl
Normal file
220
firewalld/firewalld-lib.pl
Normal file
@@ -0,0 +1,220 @@
|
||||
# Functions for managing firewalld
|
||||
|
||||
BEGIN { push(@INC, ".."); };
|
||||
use strict;
|
||||
use warnings;
|
||||
use WebminCore;
|
||||
&init_config();
|
||||
do 'md5-lib.pl';
|
||||
our ($module_root_directory, %text, %config, %gconfig);
|
||||
our %access = &get_module_acl();
|
||||
|
||||
# check_firewalld()
|
||||
# Returns an error message if firewalld is not installed, undef if all is OK
|
||||
sub check_firewalld
|
||||
{
|
||||
&has_command($config{'firewall_cmd'}) ||
|
||||
return &text('check_ecmd', "<tt>".$config{'firewall_cmd'}."</tt>");
|
||||
return undef;
|
||||
}
|
||||
|
||||
# is_firewalld_running()
|
||||
# Returns 1 if the server is running, 0 if not
|
||||
sub is_firewalld_running
|
||||
{
|
||||
my $ex = system("$config{'firewall_cmd'} --state >/dev/null 2>&1 </dev/null");
|
||||
return $ex ? 0 : 1;
|
||||
}
|
||||
|
||||
# list_firewalld_zones([active-only])
|
||||
# Returns an array of firewalld zones, each of which is a hash ref with fields
|
||||
# like services and ports
|
||||
sub list_firewalld_zones
|
||||
{
|
||||
my ($active) = @_;
|
||||
my @rv;
|
||||
my $out = &backquote_command("$config{'firewall_cmd'} --list-all-zones ".
|
||||
($active ? "" : "--permanent ")."</dev/null 2>&1");
|
||||
if ($?) {
|
||||
&error("Failed to list zones : $out");
|
||||
}
|
||||
my $zone;
|
||||
foreach my $l (split(/\r?\n/, $out)) {
|
||||
if ($l =~ /^(\S+)(\s+\(.*\))?/) {
|
||||
# New zone
|
||||
$zone = { 'name' => $1,
|
||||
'default' => $2 ? 1 : 0 };
|
||||
push(@rv, $zone);
|
||||
}
|
||||
elsif ($l =~ /^\s+(\S+):\s*(.*)/ && $zone) {
|
||||
# Option in some zone
|
||||
$zone->{$1} = [ split(/\s+/, $2) ];
|
||||
}
|
||||
}
|
||||
return @rv;
|
||||
}
|
||||
|
||||
# list_firewalld_services()
|
||||
# Returns an array of known service names
|
||||
sub list_firewalld_services
|
||||
{
|
||||
my $out = &backquote_command("$config{'firewall_cmd'} --get-services </dev/null 2>&1");
|
||||
if ($?) {
|
||||
&error("Failed to list services : $out");
|
||||
}
|
||||
$out =~ s/\r|\n//g;
|
||||
return split(/\s+/, $out);
|
||||
}
|
||||
|
||||
# create_firewalld_port(&zone, port|range, proto)
|
||||
# Adds a new allowed port to a zone. Returns undef on success or an error
|
||||
# message on failure
|
||||
sub create_firewalld_port
|
||||
{
|
||||
my ($zone, $port, $proto) = @_;
|
||||
my $out = &backquote_logged("$config{'firewall_cmd'} ".
|
||||
"--zone ".quotemeta($zone->{'name'})." ".
|
||||
"--permanent --add-port ".
|
||||
quotemeta($port)."/".quotemeta($proto)." 2>&1");
|
||||
return $? ? $out : undef;
|
||||
}
|
||||
|
||||
# delete_firewalld_port(&zone, port|range, proto)
|
||||
# Delete one existing port from a zone. Returns undef on success or an error
|
||||
# message on failure
|
||||
sub delete_firewalld_port
|
||||
{
|
||||
my ($zone, $port, $proto) = @_;
|
||||
my $out = &backquote_logged("$config{'firewall_cmd'} ".
|
||||
"--zone ".quotemeta($zone->{'name'})." ".
|
||||
"--permanent --remove-port ".
|
||||
quotemeta($port)."/".quotemeta($proto)." 2>&1");
|
||||
return $? ? $out : undef;
|
||||
}
|
||||
|
||||
# create_firewalld_service(&zone, service)
|
||||
# Adds a new allowed service to a zone. Returns undef on success or an error
|
||||
# message on failure
|
||||
sub create_firewalld_service
|
||||
{
|
||||
my ($zone, $service) = @_;
|
||||
my $out = &backquote_logged("$config{'firewall_cmd'} ".
|
||||
"--zone ".quotemeta($zone->{'name'})." ".
|
||||
"--permanent --add-service ".
|
||||
quotemeta($service)." 2>&1");
|
||||
return $? ? $out : undef;
|
||||
}
|
||||
|
||||
# delete_firewalld_service(&zone, service)
|
||||
# Delete one existing service from a zone. Returns undef on success or an error
|
||||
# message on failure
|
||||
sub delete_firewalld_service
|
||||
{
|
||||
my ($zone, $service) = @_;
|
||||
my $out = &backquote_logged("$config{'firewall_cmd'} ".
|
||||
"--zone ".quotemeta($zone->{'name'})." ".
|
||||
"--permanent --remove-service ".
|
||||
quotemeta($service)." 2>&1");
|
||||
return $? ? $out : undef;
|
||||
}
|
||||
|
||||
# apply_firewalld()
|
||||
# Make the current saved config active
|
||||
sub apply_firewalld
|
||||
{
|
||||
my $out = &backquote_logged("$config{'firewall_cmd'} --reload 2>&1");
|
||||
return $? ? $out : undef;
|
||||
}
|
||||
|
||||
# stop_firewalld()
|
||||
# Shut down the firewalld service
|
||||
sub stop_firewalld
|
||||
{
|
||||
&foreign_require("init");
|
||||
my ($ok, $err) = &init::stop_action($config{'init_name'});
|
||||
return $ok ? undef : $err;
|
||||
}
|
||||
|
||||
# start_firewalld()
|
||||
# Shut down the firewalld service
|
||||
sub start_firewalld
|
||||
{
|
||||
&foreign_require("init");
|
||||
my ($ok, $err) = &init::start_action($config{'init_name'});
|
||||
return $ok ? undef : $err;
|
||||
}
|
||||
|
||||
# list_system_interfaces()
|
||||
# Returns the list of all interfaces on the system
|
||||
sub list_system_interfaces
|
||||
{
|
||||
&foreign_require("net");
|
||||
my @rv = map { $_->{'name'} } &net::active_interfaces();
|
||||
push(@rv, map { $_->{'name'} } &net::boot_interfaces());
|
||||
return &unique(@rv);
|
||||
}
|
||||
|
||||
# update_zone_interfaces(&zone, &interface-list)
|
||||
# Update the interfaces a zone applies to
|
||||
sub update_zone_interfaces
|
||||
{
|
||||
my ($zone, $newifaces) = @_;
|
||||
my $oldifaces = $zone->{'interfaces'};
|
||||
foreach my $i (&list_system_interfaces()) {
|
||||
my $inold = &indexof($i, @$oldifaces) >= 0;
|
||||
my $innew = &indexof($i, @$newifaces) >= 0;
|
||||
my $args;
|
||||
if ($inold && !$innew) {
|
||||
# Remove from this zone
|
||||
$args = "--remove-interface ".quotemeta($i);
|
||||
}
|
||||
elsif (!$inold && $innew) {
|
||||
# Add to from this zone
|
||||
$args = "--add-interface ".quotemeta($i);
|
||||
}
|
||||
else {
|
||||
next;
|
||||
}
|
||||
my $cmd = "$config{'firewall_cmd'} ".
|
||||
"--zone ".quotemeta($zone->{'name'})." ".
|
||||
"--permanent ".$args;
|
||||
my $out = &backquote_logged($cmd." 2>&1 </dev/null");
|
||||
return $out if ($?);
|
||||
}
|
||||
return undef;
|
||||
}
|
||||
|
||||
# create_firewalld_zone(name)
|
||||
# Add a new zone with the given name
|
||||
sub create_firewalld_zone
|
||||
{
|
||||
my ($name) = @_;
|
||||
my $cmd = "$config{'firewall_cmd'} --permanent --new-zone ".quotemeta($name);
|
||||
my $out = &backquote_logged($cmd." 2>&1 </dev/null");
|
||||
return $? ? $out : undef;
|
||||
}
|
||||
|
||||
# delete_firewalld_zone(&zone)
|
||||
# Removes the specified zone
|
||||
sub delete_firewalld_zone
|
||||
{
|
||||
my ($zone) = @_;
|
||||
my $cmd = "$config{'firewall_cmd'} --permanent --delete-zone ".
|
||||
quotemeta($zone->{'name'});
|
||||
my $out = &backquote_logged($cmd." 2>&1 </dev/null");
|
||||
return $? ? $out : undef;
|
||||
}
|
||||
|
||||
# default_firewalld_zone(&zone)
|
||||
# Makes the specified zone the default
|
||||
sub default_firewalld_zone
|
||||
{
|
||||
my ($zone) = @_;
|
||||
my $cmd = "$config{'firewall_cmd'} --set-default-zone ".
|
||||
quotemeta($zone->{'name'});
|
||||
my $out = &backquote_logged($cmd." 2>&1 </dev/null");
|
||||
return $? ? $out : undef;
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
BIN
firewalld/images/icon.gif
Normal file
BIN
firewalld/images/icon.gif
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.8 KiB |
147
firewalld/index.cgi
Normal file
147
firewalld/index.cgi
Normal file
@@ -0,0 +1,147 @@
|
||||
#!/usr/local/bin/perl
|
||||
# Show all firewalld rules and zones
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
require 'firewalld-lib.pl';
|
||||
our (%in, %text, %config, %access, $base_remote_user);
|
||||
&ReadParse();
|
||||
if ($in{'addzone'}) {
|
||||
# Redirect to zone creation form
|
||||
&redirect("zone_form.cgi?zone=".&urlize($in{'zone'}));
|
||||
return;
|
||||
}
|
||||
if ($in{'delzone'}) {
|
||||
# Redirect to zone deletion form
|
||||
&redirect("delete_zone.cgi?zone=".&urlize($in{'zone'}));
|
||||
return;
|
||||
}
|
||||
if ($in{'defzone'}) {
|
||||
# Make a zone the default
|
||||
&redirect("default_zone.cgi?zone=".&urlize($in{'zone'}));
|
||||
return;
|
||||
}
|
||||
&ui_print_header(undef, $text{'index_title'}, "", undef, 1, 1);
|
||||
|
||||
# Is firewalld working?
|
||||
my $err = &check_firewalld();
|
||||
if ($err) {
|
||||
&ui_print_endpage(&text('index_cerr', $err));
|
||||
return;
|
||||
}
|
||||
|
||||
# Get rules and zones
|
||||
my @zones = &list_firewalld_zones();
|
||||
@zones || &error($text{'index_ezones'});
|
||||
my $zone;
|
||||
if ($in{'zone'}) {
|
||||
($zone) = grep { $_->{'name'} eq $in{'zone'} } @zones;
|
||||
}
|
||||
else {
|
||||
($zone) = grep { $_->{'default'} } @zones;
|
||||
}
|
||||
$zone ||= $zones[0];
|
||||
my @azones = &list_firewalld_zones(1);
|
||||
my ($azone) = grep { $_->{'name'} eq $zone->{'name'} } @azones;
|
||||
|
||||
# Show zone selector
|
||||
print &ui_form_start("index.cgi");
|
||||
print "<b>$text{'index_zone'}</b> ",
|
||||
&ui_select("zone", $zone->{'name'},
|
||||
[ map { [ $_->{'name'},
|
||||
$_->{'name'}.($_->{'default'} ? ' (default)' : '') ]}
|
||||
@zones ], 1, 0, 0, 0,
|
||||
"onChange='form.submit()'")," ",
|
||||
&ui_submit($text{'index_zoneok'})," ",
|
||||
&ui_submit($text{'index_zonedef'}, "defzone")," ",
|
||||
&ui_submit($text{'index_zonedel'}, "delzone")," ",
|
||||
&ui_submit($text{'index_zoneadd'}, "addzone")," ",
|
||||
"<p>\n";
|
||||
print &ui_form_end();
|
||||
|
||||
# Show allowed ports and services in this zone
|
||||
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'}) );
|
||||
if (@{$zone->{'services'}} || @{$zone->{'ports'}}) {
|
||||
my @tds = ( "width=5" );
|
||||
unshift(@links, &select_all_link("d", 1),
|
||||
&select_invert_link("d", 1));
|
||||
print &ui_form_start("delete_rules.cgi", "post");
|
||||
print &ui_hidden("zone", $zone->{'name'});
|
||||
print &ui_links_row(\@links);
|
||||
print &ui_columns_start([ "", $text{'index_type'}, $text{'index_port'},
|
||||
$text{'index_proto'} ], 100, 0, \@tds);
|
||||
foreach my $s (@{$zone->{'services'}}) {
|
||||
my $url = "edit_serv.cgi?id=".&urlize($s).
|
||||
"&zone=".&urlize($zone->{'name'});
|
||||
print &ui_checked_columns_row([
|
||||
&ui_link($url, $text{'index_tservice'}),
|
||||
&ui_link($url, $s),
|
||||
"",
|
||||
], \@tds, "d", "service/".$s);
|
||||
}
|
||||
foreach my $p (@{$zone->{'ports'}}) {
|
||||
my $url = "edit_port.cgi?id=".&urlize($p).
|
||||
"&zone=".&urlize($zone->{'name'});
|
||||
my ($port, $proto) = split(/\//, $p);
|
||||
print &ui_checked_columns_row([
|
||||
&ui_link($url, $text{'index_tport'}),
|
||||
&ui_link($url, $port),
|
||||
&ui_link($url, uc($proto)),
|
||||
], \@tds, "d", "port/".$p);
|
||||
}
|
||||
print &ui_columns_end();
|
||||
print &ui_links_row(\@links);
|
||||
print &ui_form_end([ [ undef, $text{'index_delete'} ] ]);
|
||||
}
|
||||
else {
|
||||
print "<b>$text{'index_none'}</b> <p>\n";
|
||||
print &ui_links_row(\@links);
|
||||
}
|
||||
|
||||
# Show interfaces for this zone
|
||||
print &ui_form_start("save_ifaces.cgi");
|
||||
print &ui_hidden("zone", $zone->{'name'});
|
||||
print "<b>$text{'index_ifaces'}</b>\n";
|
||||
my %zifcs = map { $_, 1 } &unique(@{$azone->{'interfaces'}},
|
||||
@{$zone->{'interfaces'}});
|
||||
foreach my $i (&list_system_interfaces()) {
|
||||
print &ui_checkbox("iface", $i, $i, $zifcs{$i}),"\n";
|
||||
}
|
||||
print &ui_submit($text{'save'});
|
||||
print &ui_form_end();
|
||||
|
||||
# Show start/apply buttons
|
||||
print &ui_hr();
|
||||
print &ui_buttons_start();
|
||||
my $ok = &is_firewalld_running();
|
||||
if ($ok) {
|
||||
print &ui_buttons_row("restart.cgi", $text{'index_restart'},
|
||||
$text{'index_restartdesc'},
|
||||
[ [ "zone", $zone->{'name'} ] ]);
|
||||
print &ui_buttons_row("stop.cgi", $text{'index_stop'},
|
||||
$text{'index_stopdesc'},
|
||||
[ [ "zone", $zone->{'name'} ] ]);
|
||||
}
|
||||
else {
|
||||
print &ui_buttons_row("start.cgi", $text{'index_start'},
|
||||
$text{'index_startdesc'},
|
||||
[ [ "zone", $zone->{'name'} ] ]);
|
||||
}
|
||||
|
||||
# Enable at boot
|
||||
&foreign_require("init");
|
||||
my $st = &init::action_status($config{'init_name'});
|
||||
if ($st) {
|
||||
my $atboot = $st == 2 ? 1 : 0;
|
||||
print &ui_buttons_row("bootup.cgi", $text{'index_bootup'},
|
||||
$text{'index_bootupdesc'},
|
||||
[ [ "zone", $zone->{'name'} ] ],
|
||||
&ui_yesno_radio("boot", $atboot));
|
||||
}
|
||||
|
||||
print &ui_buttons_end();
|
||||
|
||||
&ui_print_footer("/", $text{'index'});
|
||||
20
firewalld/install_check.pl
Executable file
20
firewalld/install_check.pl
Executable file
@@ -0,0 +1,20 @@
|
||||
# install_check.pl
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
do 'firewalld-lib.pl';
|
||||
|
||||
# is_installed(mode)
|
||||
# For mode 1, returns 2 if the server is installed and configured for use by
|
||||
# Webmin, 1 if installed but not configured, or 0 otherwise.
|
||||
# For mode 0, returns 1 if installed, 0 if not
|
||||
sub is_installed
|
||||
{
|
||||
my ($mode) = @_;
|
||||
return 0 if (&check_firewalld());
|
||||
if ($mode) {
|
||||
return &is_firewalld_running() ? 2 : 1;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
86
firewalld/lang/de
Normal file
86
firewalld/lang/de
Normal file
@@ -0,0 +1,86 @@
|
||||
check_ecmd=Der FirewallD Steuer-Befehl $1 wurde auf Ihrem System nicht gefunden
|
||||
delete_edel=Entfernen von $1 fehlgeschlagen : $2
|
||||
delete_enone=Nichts ausgewählt!
|
||||
delete_err=Fehlgeschlagen Regel zu löschen
|
||||
delzone_edefault=Die Standardzone kann nicht entfernt werden
|
||||
delzone_err=Fehlgeschlagen Zone zu löschen
|
||||
delzone_rusure=Sind Sie sich sicher die Zone $1, welche $2 Ports und $3 Dienste enthält, zu löschen?
|
||||
delzone_title=Lösche Zone
|
||||
index_apply=Konfiguration anwenden
|
||||
index_applydesc=Klicken auf diese Schaltfläche, um die Firewall-Konfiguration, welche oben aufgeführt ist, aktiv zu stellen. Alle Firewall-Regeln, welche derzeit aktiv sind, werden verworfen und ersetzt
|
||||
index_atboot=Aktiviere firewall beim Booten?
|
||||
index_bootup=Aktiviere beim Booten
|
||||
index_bootupdesc=Ändere diese Option, um zu kontrollieren, ob Ihre Firewall beim Systemstart aktiviert wird oder nicht.
|
||||
index_cerr=Das FirewallD Module kann nicht benutzt werden : $1
|
||||
index_delete=Lösche ausgewählte Regeln
|
||||
index_ezones=Keine FirewallD Zonen gefunden!
|
||||
index_ifaces=Wende Regeln an Schnittstelle an:
|
||||
index_none=Diese Zone hat bisher keine erlaubten Ports oder Dienste.
|
||||
index_padd=Füge erlaubten Port hinzu.
|
||||
index_port=Port oder Dienst
|
||||
index_proto=Protokoll
|
||||
index_restart=Konfiguration anwenden
|
||||
index_restartdesc=Aktiviert alle erlaubten Dienste und Ports, die oben aufgeführt sind, in allen Zonen. Alle aktiven Regeln, die nicht dauerhaft erstellt wurden, werden ersetzt.
|
||||
index_return=Liste an Zonen
|
||||
index_sadd=Füge erlaubten Dienst hinzu.
|
||||
index_start=Starte FirewallD
|
||||
index_startdesc=Starte den FirewallD Server und wende alle oben aufgeführten Regeln an.
|
||||
index_stop=Stoppe FirewallD
|
||||
index_stopdesc=Fahre den FirewallD Server herunter und entferne alle oben aufgeführten Regeln.
|
||||
index_title=FirewallD
|
||||
index_tport=Port
|
||||
index_tservice=Dienst
|
||||
index_type=Regel-Typ
|
||||
index_zone=Zeige Regel in Zone:
|
||||
index_zoneadd=Füge Zone hinzu..
|
||||
index_zonedel=Lösche Zone
|
||||
index_zoneok=Ändern
|
||||
log_bootdown=FirewallD beim Booten deaktiviert
|
||||
log_bootup=FirewallD beim Booten aktiviert
|
||||
log_create_port=Erlaubter Port $1 hinzugefügt
|
||||
log_create_serv=Erlaubter Dienst $1 hinzugefügt
|
||||
log_create_zone=Zone $1 erstellt
|
||||
log_delete_port=Erlaubter Dienst $1 gelöscht
|
||||
log_delete_rules=$1 erlaubte Ports gelöscht
|
||||
log_delete_serv=Erlaubter Dienst $1 gelöscht
|
||||
log_delete_zone=Zone $1 gelöscht
|
||||
log_ifaces_zone=Schnittstelle für Zone $1 aktualisiert
|
||||
log_restart=FirewallD Konfiguration angewendet
|
||||
log_start=FirewallD gestartet
|
||||
log_stop=FirewallD gestoppt
|
||||
log_update_port=Erlaubten Port $1 aktualisiert
|
||||
log_update_serv=Erlaubten Dienst $1 aktualisiert
|
||||
port_create=Füge erlaubten Port hinzu
|
||||
port_edit=Editiere erlaubten Port
|
||||
port_eport=Fehlender oder ungültiger Portnummer oder Name
|
||||
port_eporthigh=Hoher Port muss eine Zahl sein
|
||||
port_eportlow=Niedriger Port muss eine Zahl sein
|
||||
port_eportrange=Niedriger Port muss unter dem hohen Port liegen
|
||||
port_err=Fehlgeschlagen Port zu speichern
|
||||
port_ezone=Zone existiert nicht!
|
||||
port_header=Erlaubten Port Optionen
|
||||
port_mode0=Einzelner Port
|
||||
port_mode1=Port-Bereich
|
||||
port_port=Port zu erlauben
|
||||
port_proto=Netzwerkprotokoll
|
||||
port_zone=Erlaubt in Zone
|
||||
restart_err=Fehlgeschlagen Konfiguration anzuwenden
|
||||
serv_create=Füge Dienst hinzu
|
||||
serv_edit=Editiere Dienst
|
||||
serv_err=Fehlgeschlagen Dienst zu speichern
|
||||
serv_header=Erlaubte Dienste Optionen
|
||||
serv_name=Dienste zu erlauben
|
||||
start_err=Fehlgeschlagen FirewallD zu starten
|
||||
stop_err=Fehlgeschlagen FirewallD zu stoppen
|
||||
zone_eclash=Eine Zone mit dem gleichen Namen ist bereits vorhanden
|
||||
zone_ename=Fehlender oder ungültiger Zonen-Name
|
||||
zone_err=Fehlgeschlagen Zonen zu erstellen
|
||||
zone_header=Neue Zonen Optionen
|
||||
zone_mode=Erlaubte Ports und Dienste
|
||||
zone_mode0=Keine (gesamter Traffic wird blockiert)
|
||||
zone_mode1=Kopiere von ZOne
|
||||
zone_mode2=nur SSH, IDENT und Webmin
|
||||
zone_mode3=SSH, IDENT, Webmin und hohe Ports
|
||||
zone_mode4=Port, welche für das virtuelle Hosting verwendet werden
|
||||
zone_name=Zonen-Namen
|
||||
zone_title=Erstelle Zone
|
||||
98
firewalld/lang/en
Normal file
98
firewalld/lang/en
Normal file
@@ -0,0 +1,98 @@
|
||||
index_title=FirewallD
|
||||
index_atboot=Enable firewall at boot time?
|
||||
index_bootup=Activate at boot
|
||||
index_bootupdesc=Change this option to control whether your firewall is activated at boot time or not.
|
||||
index_apply=Apply Configuration
|
||||
index_applydesc=Click this button to make the firewall configuration listed above active. Any firewall rules currently in effect will be flushed and replaced
|
||||
index_restart=Apply Configuration
|
||||
index_restartdesc=Activate all the allowed services and ports listed above, in all zones. Any active rules that were not permanently created will be replaced.
|
||||
index_start=Start FirewallD
|
||||
index_startdesc=Start the FirewallD server and apply the rules listed above.
|
||||
index_stop=Stop FirewallD
|
||||
index_stopdesc=Shut down the FirewallD server and remove all the rules listed above.
|
||||
index_cerr=The FirewallD module cannot be used : $1
|
||||
index_zone=Show rules in zone:
|
||||
index_zoneok=Change
|
||||
index_zoneadd=Add Zone..
|
||||
index_zonedel=Delete Zone
|
||||
index_zonedef=Make Default
|
||||
index_type=Rule type
|
||||
index_port=Port or service
|
||||
index_proto=Protocol
|
||||
index_tservice=Service
|
||||
index_tport=Port
|
||||
index_padd=Add allowed port.
|
||||
index_sadd=Add allowed service.
|
||||
index_delete=Delete Selected Rules
|
||||
index_return=list of zones
|
||||
index_ezones=No FirewallD zones found!
|
||||
index_none=This zone does not have any allowed ports or services yet.
|
||||
index_ifaces=Apply rules to interfaces:
|
||||
|
||||
port_edit=Edit Port
|
||||
port_create=Add Port
|
||||
port_header=Allowed port options
|
||||
port_zone=Allowed in zone
|
||||
port_port=Port to allow
|
||||
port_mode0=Single port
|
||||
port_mode1=Port range
|
||||
port_proto=Network protocol
|
||||
port_ezone=Zone does not exist!
|
||||
port_err=Failed to save port
|
||||
port_eport=Missing or invalid port number or name
|
||||
port_eportlow=Low port must be a number
|
||||
port_eporthigh=High port must be a number
|
||||
port_eportrange=Low port must be below the high port
|
||||
|
||||
serv_edit=Edit Service
|
||||
serv_create=Add Service
|
||||
serv_header=Allowed service options
|
||||
serv_name=Service to allow
|
||||
serv_err=Failed to save service
|
||||
|
||||
check_ecmd=The FirewallD control command $1 was not found on your system
|
||||
|
||||
delete_err=Failed to delete rules
|
||||
delete_enone=None selected!
|
||||
delete_edel=Removal of $1 failed : $2
|
||||
|
||||
zone_title=Create Zone
|
||||
zone_header=New zone options
|
||||
zone_name=Zone name
|
||||
zone_mode=Allowed ports and services
|
||||
zone_mode0=None (all traffic will be blocked)
|
||||
zone_mode1=Copy from zone
|
||||
zone_mode2=SSH, IDENT and Webmin only
|
||||
zone_mode3=SSH, IDENT, Webmin and high ports
|
||||
zone_mode4=Ports used for virtual hosting
|
||||
zone_err=Failed to create zone
|
||||
zone_ename=Missing or invalid zone name
|
||||
zone_eclash=A zone with the same name already exists
|
||||
|
||||
delzone_title=Delete Zone
|
||||
delzone_err=Failed to delete zone
|
||||
delzone_edefault=The default zone cannot be removed
|
||||
delzone_rusure=Are you sure you want to delete the zone $1, which contains $2 ports and $3 services?
|
||||
|
||||
defzone_err=Failed to make zone the default
|
||||
|
||||
restart_err=Failed to apply configuration
|
||||
stop_err=Failed to stop FirewallD
|
||||
start_err=Failed to start FirewallD
|
||||
|
||||
log_stop=Stopped FirewallD
|
||||
log_start=Started FirewallD
|
||||
log_restart=Applied FirewallD configuration
|
||||
log_bootup=Enabled FirewallD at boot
|
||||
log_bootdown=Disabled FirewallD at boot
|
||||
log_create_port=Added allowed port $1
|
||||
log_delete_port=Removed allowed port $1
|
||||
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_delete_rules=Removed $1 allowed ports
|
||||
log_ifaces_zone=Updated interfaces for zone $1
|
||||
log_create_zone=Created zone $1
|
||||
log_delete_zone=Deleted zone $1
|
||||
log_default_zone=Made zone $1 the default
|
||||
29
firewalld/log_parser.pl
Executable file
29
firewalld/log_parser.pl
Executable file
@@ -0,0 +1,29 @@
|
||||
# log_parser.pl
|
||||
# Functions for parsing this module's logs
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
do 'firewalld-lib.pl';
|
||||
our (%text);
|
||||
|
||||
# parse_webmin_log(user, script, action, type, object, ¶ms)
|
||||
# Converts logged information from this module into human-readable form
|
||||
sub parse_webmin_log
|
||||
{
|
||||
my ($user, $script, $action, $type, $object, $p) = @_;
|
||||
if ($type eq "port" || $type eq "serv") {
|
||||
return &text("log_${action}_${type}",
|
||||
"<tt>".&html_escape($object)."</tt>");
|
||||
}
|
||||
elsif ($type eq "rules") {
|
||||
return &text("log_${action}_${type}", &html_escape($object));
|
||||
}
|
||||
elsif ($type eq "zone") {
|
||||
return &text("log_${action}_${type}",
|
||||
"<tt>".&html_escape($object)."</tt>");
|
||||
}
|
||||
else {
|
||||
return $text{"log_${action}"};
|
||||
}
|
||||
}
|
||||
|
||||
7
firewalld/module.info
Normal file
7
firewalld/module.info
Normal file
@@ -0,0 +1,7 @@
|
||||
desc=FirewallD
|
||||
os_support=*-linux
|
||||
depends=net init
|
||||
category=net
|
||||
desc_de=FirewallD
|
||||
longdesc=Configure a Linux firewall using FirewallD, by editing allowed services and ports.
|
||||
longdesc_de=Konfiguriert eine Linux-Firewall mit FirewallD, indem es erlaubte Dienste und Ports editiert.
|
||||
107
firewalld/open-ports.pl
Executable file
107
firewalld/open-ports.pl
Executable file
@@ -0,0 +1,107 @@
|
||||
#!/usr/local/bin/perl
|
||||
# Open some ports on the firewall. Exit statuses are :
|
||||
# 0 - Nothing needed to be done
|
||||
# 1 - Given ports were opened up
|
||||
# 2 - IPtables is not installed or supported
|
||||
# 3 - No firewall is active
|
||||
# 4 - Could not apply configuration
|
||||
# 5 - Bad args
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
our ($module_name, $no_acl_check);
|
||||
$no_acl_check++;
|
||||
$ENV{'WEBMIN_CONFIG'} = "/etc/webmin";
|
||||
$ENV{'WEBMIN_VAR'} = "/var/webmin";
|
||||
if ($0 =~ /^(.*\/)[^\/]+$/) {
|
||||
chdir($1);
|
||||
}
|
||||
require './firewalld-lib.pl';
|
||||
if ($module_name ne 'firewalld') {
|
||||
print STDERR "Command must be run with full path\n";
|
||||
exit(5);
|
||||
}
|
||||
|
||||
# Parse args
|
||||
my $no_apply = 0;
|
||||
if ($ARGV[0] eq "--no-apply") {
|
||||
$no_apply = 1;
|
||||
shift(@ARGV);
|
||||
}
|
||||
if (!@ARGV) {
|
||||
print STDERR "Missing ports to open\n";
|
||||
exit(5);
|
||||
}
|
||||
foreach my $p (@ARGV) {
|
||||
if ($p !~ /^\d+$/ && $p !~ /^\d+:\d+$/ && $p !~ /^\d+(,\d+)*$/) {
|
||||
print STDERR "Port $p must be number or start:end range\n";
|
||||
exit(5);
|
||||
}
|
||||
}
|
||||
|
||||
# Check Firewalld support
|
||||
if (&foreign_installed($module_name, 1) != 2) {
|
||||
print STDERR "Firewalld is not available\n";
|
||||
exit(2);
|
||||
}
|
||||
if (!&is_firewalld_running()) {
|
||||
print STDERR "Firewalld is not running\n";
|
||||
exit(2);
|
||||
}
|
||||
|
||||
# Check if any zones are active
|
||||
my @azones = &list_firewalld_zones(1);
|
||||
if (!@azones) {
|
||||
print STDERR "No active FirewallD zones found\n";
|
||||
exit(3);
|
||||
}
|
||||
|
||||
# Get the default zone
|
||||
my @zones = &list_firewalld_zones();
|
||||
my ($zone) = grep { $_->{'default'} } @zones;
|
||||
if (!$zone) {
|
||||
print STDERR "Default FirewallD zone not found\n";
|
||||
exit(3);
|
||||
}
|
||||
|
||||
my @added = ( );
|
||||
foreach my $p (@ARGV) {
|
||||
# For each port, find existing rules
|
||||
$p =~ s/^(\d+):(\d+)/$1-$2/;
|
||||
print STDERR "Checking for port $p ..\n";
|
||||
if (&indexof($p."/tcp", @{$zone->{'ports'}}) >= 0) {
|
||||
print STDERR ".. already allowed\n";
|
||||
}
|
||||
else {
|
||||
# Need to add
|
||||
my $err = &create_firewalld_port($zone, $p, "tcp");
|
||||
if ($err) {
|
||||
print STDERR ".. failed : $err\n";
|
||||
}
|
||||
else {
|
||||
push(@added, $p);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (@added) {
|
||||
# Added some ports - apply them
|
||||
print STDERR "Opened ports ",join(" ", @added),"\n";
|
||||
my $ex = 1;
|
||||
if (!$no_apply) {
|
||||
my $err = &apply_firewalld();
|
||||
if ($err) {
|
||||
print "Failed to apply configuration : $err\n";
|
||||
$ex = 4;
|
||||
}
|
||||
else {
|
||||
print "Applied configuration successfully\n";
|
||||
}
|
||||
}
|
||||
&webmin_log("openports", undef, undef, { 'ports' => \@added });
|
||||
exit($ex);
|
||||
}
|
||||
else {
|
||||
print STDERR "All ports are already open\n";
|
||||
exit(0);
|
||||
}
|
||||
12
firewalld/restart.cgi
Normal file
12
firewalld/restart.cgi
Normal file
@@ -0,0 +1,12 @@
|
||||
#!/usr/local/bin/perl
|
||||
# Activate all saved firewalld rules
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
require './firewalld-lib.pl';
|
||||
our (%text, %in);
|
||||
&error_setup($text{'restart_err'});
|
||||
my $err = &apply_firewalld();
|
||||
&error($err) if ($err);
|
||||
&webmin_log("restart");
|
||||
&redirect("index.cgi?zone=".&urlize($in{'zone'}));
|
||||
21
firewalld/save_ifaces.cgi
Normal file
21
firewalld/save_ifaces.cgi
Normal file
@@ -0,0 +1,21 @@
|
||||
#!/usr/local/bin/perl
|
||||
# Update interface ports
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
require 'firewalld-lib.pl';
|
||||
our (%in, %text);
|
||||
&error_setup($text{'ifaces_err'});
|
||||
&ReadParse();
|
||||
|
||||
# Get the zone
|
||||
my @zones = &list_firewalld_zones();
|
||||
my ($zone) = grep { $_->{'name'} eq $in{'zone'} } @zones;
|
||||
$zone || &error($text{'port_ezone'});
|
||||
|
||||
# Update the interfaces list
|
||||
my $err = &update_zone_interfaces($zone, [ split(/\0/, $in{'iface'}) ]);
|
||||
&error($err) if ($err);
|
||||
|
||||
&webmin_log("ifaces", "zone", $zone->{'name'});
|
||||
&redirect("index.cgi?zone=".&urlize($zone->{'name'}));
|
||||
61
firewalld/save_port.cgi
Normal file
61
firewalld/save_port.cgi
Normal file
@@ -0,0 +1,61 @@
|
||||
#!/usr/local/bin/perl
|
||||
# Create, update or delete a port
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
require 'firewalld-lib.pl';
|
||||
our (%in, %text);
|
||||
&error_setup($text{'port_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);
|
||||
if ($in{'id'}) {
|
||||
($oldport, $oldproto) = split(/\//, $in{'id'});
|
||||
}
|
||||
|
||||
my $logport;
|
||||
if ($in{'delete'}) {
|
||||
# Just remove the existing rule
|
||||
my $err = &delete_firewalld_port($zone, $oldport, $oldproto);
|
||||
&error($err) if ($err);
|
||||
$logport = $oldport;
|
||||
}
|
||||
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 $proto = $in{'proto'};
|
||||
|
||||
# Create or update allowed port
|
||||
if (!$in{'new'}) {
|
||||
my $err = &delete_firewalld_port($zone, $oldport, $oldproto);
|
||||
&error($err) if ($err);
|
||||
}
|
||||
my $err = &create_firewalld_port($zone, $port, $proto);
|
||||
&error($err) if ($err);
|
||||
$logport = $port;
|
||||
}
|
||||
&webmin_log($in{'delete'} ? 'delete' : $in{'new'} ? 'create' : 'update',
|
||||
'port', $logport);
|
||||
&redirect("index.cgi?zone=".&urlize($zone->{'name'}));
|
||||
42
firewalld/save_serv.cgi
Normal file
42
firewalld/save_serv.cgi
Normal file
@@ -0,0 +1,42 @@
|
||||
#!/usr/local/bin/perl
|
||||
# Create, update or delete a service
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
require 'firewalld-lib.pl';
|
||||
our (%in, %text);
|
||||
&error_setup($text{'serv_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 $oldserv;
|
||||
if ($in{'id'}) {
|
||||
$oldserv = $in{'id'};
|
||||
}
|
||||
|
||||
my $logserv;
|
||||
if ($in{'delete'}) {
|
||||
# Just remove the existing rule
|
||||
my $err = &delete_firewalld_service($zone, $oldserv);
|
||||
&error($err) if ($err);
|
||||
$logserv = $oldserv;
|
||||
}
|
||||
else {
|
||||
# Validate inputs
|
||||
my $serv = $in{'serv'};
|
||||
|
||||
# Create or update allowed port
|
||||
if (!$in{'new'}) {
|
||||
my $err = &delete_firewalld_service($zone, $oldserv);
|
||||
&error($err) if ($err);
|
||||
}
|
||||
my $err = &create_firewalld_service($zone, $serv);
|
||||
&error($err) if ($err);
|
||||
$logserv = $serv;
|
||||
}
|
||||
&webmin_log($in{'delete'} ? 'delete' : $in{'new'} ? 'create' : 'update',
|
||||
'serv', $logserv);
|
||||
&redirect("index.cgi?zone=".&urlize($zone->{'name'}));
|
||||
12
firewalld/start.cgi
Normal file
12
firewalld/start.cgi
Normal file
@@ -0,0 +1,12 @@
|
||||
#!/usr/local/bin/perl
|
||||
# Start up firewalld
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
require './firewalld-lib.pl';
|
||||
our (%text, %in);
|
||||
&error_setup($text{'start_err'});
|
||||
my $err = &start_firewalld();
|
||||
&error($err) if ($err);
|
||||
&webmin_log("start");
|
||||
&redirect("index.cgi?zone=".&urlize($in{'zone'}));
|
||||
12
firewalld/stop.cgi
Normal file
12
firewalld/stop.cgi
Normal file
@@ -0,0 +1,12 @@
|
||||
#!/usr/local/bin/perl
|
||||
# Shut down firewalld
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
require './firewalld-lib.pl';
|
||||
our (%text, %in);
|
||||
&error_setup($text{'stop_err'});
|
||||
my $err = &stop_firewalld();
|
||||
&error($err) if ($err);
|
||||
&webmin_log("stop");
|
||||
&redirect("index.cgi?zone=".&urlize($in{'zone'}));
|
||||
33
firewalld/zone_form.cgi
Normal file
33
firewalld/zone_form.cgi
Normal file
@@ -0,0 +1,33 @@
|
||||
#!/usr/local/bin/perl
|
||||
# Show a form for creating a new zone, with some default rules
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
require 'firewalld-lib.pl';
|
||||
our (%text, %in);
|
||||
&ReadParse();
|
||||
&ui_print_header(undef, $text{'zone_title'}, "");
|
||||
|
||||
print &ui_form_start("create_zone.cgi", "post");
|
||||
print &ui_table_start($text{'zone_header'}, undef, 2);
|
||||
|
||||
# New zone name
|
||||
print &ui_table_row($text{'zone_name'},
|
||||
&ui_textbox("name", undef, 20));
|
||||
|
||||
# Initial ruleset
|
||||
print &ui_table_row($text{'zone_mode'},
|
||||
&ui_radio_table("mode", 0,
|
||||
[ [ 0, $text{'zone_mode0'} ],
|
||||
[ 1, $text{'zone_mode1'},
|
||||
&ui_select("source", $in{'zone'},
|
||||
[ map { $_->{'name'} } &list_firewalld_zones() ]) ],
|
||||
[ 2, $text{'zone_mode2'} ],
|
||||
[ 3, $text{'zone_mode3'} ],
|
||||
[ 4, $text{'zone_mode4'} ] ]));
|
||||
|
||||
print &ui_table_end();
|
||||
print &ui_form_end([ [ undef, $text{'create'} ] ]);
|
||||
|
||||
&ui_print_footer("index.cgi?zone=".&urlize($in{'zone'}),
|
||||
$text{'index_return'});
|
||||
@@ -1,7 +1,6 @@
|
||||
desc=Frox FTP Proxy
|
||||
category=servers
|
||||
os_support=*-linux freebsd
|
||||
longdesc=Configure Frox, a transparent proxy for FTP clients.
|
||||
desc_de=Frox FTP-Proxyserver
|
||||
desc_ca=Proxy FTP Frox
|
||||
desc_es=Frox - Proxy FTP
|
||||
@@ -10,4 +9,3 @@ desc_nl=Frox FTP Proxy-server
|
||||
desc_cz.UTF-8=Frox FTP-Proxy server
|
||||
desc_no=Frox FTP proxy tjener
|
||||
desc_ms_MY=Proksi FTP Frox
|
||||
longdesc_ms_MY=Mengkonfigurasi Frox, proksi telus untuk klien FTP.
|
||||
|
||||
@@ -2,9 +2,8 @@
|
||||
|
||||
Això pot ser o bé el camí d'un fitxer al qual s'escriurà la còpia, o bé
|
||||
el camí d'una unitat de cinta (com ara <tt>/dev/st0</tt>), o un fitxer o
|
||||
dispositiu d'un host remot. Per tal que les còpies a un host remot funcionin,
|
||||
aquest ha de suportar el protocol <tt>rsh</tt>, que normalment no està
|
||||
activat per raons de seguretat. <p>
|
||||
dispositiu d'un host remot. Les còpies contra un host es fan via el protocol SSH,
|
||||
o bé opcionalment via l'antic protocol RSH, més insegur. <p>
|
||||
|
||||
<hr>
|
||||
|
||||
|
||||
@@ -2,9 +2,8 @@
|
||||
|
||||
This can either be the path to a file to which the backup will be written,
|
||||
the path to a tape drive device (like <tt>/dev/st0</tt>), or a file or device
|
||||
on a remote host. For backups to a remote host to work, it must support the
|
||||
<tt>rsh</tt> protocol, which is not usually turned on by default for security
|
||||
reasons. <p>
|
||||
on a remote host. Backups to a remote system are done via the SSH protocol,
|
||||
or optionally the older insecure RSH protocol. <p>
|
||||
|
||||
<hr>
|
||||
|
||||
|
||||
@@ -3,9 +3,7 @@
|
||||
Per defecte, l'ordre <tt>dump</tt> utilitzarà l'ordre i el protocol
|
||||
<tt>rsh</tt> per restaurar des d'altres servidors. No obstant, aquest camp
|
||||
es pot utilitzar per seleccionar una ordre diferent com ara <tt>ssh</tt>,
|
||||
que és més segura i més generalment utilitzada. SSH només funcionará si la
|
||||
configuració SSH de l'usuari <tt>root</tt> permet entrades sense contrasenya
|
||||
des d'aquest sistema al servidor remot. <p>
|
||||
que és més segura i més generalment utilitzada. <p>
|
||||
|
||||
En sistemes Linux i BSD, també pots seleccionar l'opció <tt>FTP</tt>, que
|
||||
utilitzarà el programa client FTP integrat de Webmini per transferir la còpia
|
||||
|
||||
@@ -3,8 +3,7 @@
|
||||
By default, the <tt>dump</tt> command will use the <tt>rsh</tt> command and
|
||||
protocol to backup to other servers. However, this field can be used to select
|
||||
a different command such as <tt>ssh</tt>, which is more secure and more
|
||||
commonly used. SSH will only work if the <tt>root</tt> user's SSH configuration
|
||||
allows passwordless logins from this system to the remote server. <p>
|
||||
commonly used. <p>
|
||||
|
||||
On Linux and BSD systems, you can also select the <tt>FTP</tt> option, which will
|
||||
use Webmin's built-in FTP client program to transfer the backup to or from
|
||||
|
||||
@@ -117,7 +117,7 @@ edit_header=$1 Dateisystemsicherungsdetails
|
||||
edit_header2=Backup-Zeitplan
|
||||
edit_header3=Backup-Optionen
|
||||
edit_restore=Wiederherstellung
|
||||
edit_return=dump
|
||||
edit_return=Sicherung
|
||||
edit_savenow=Speichern und jetzt sichern
|
||||
edit_special=Backup-Zeitplan
|
||||
edit_subject=Betreff der E-Mail
|
||||
|
||||
@@ -123,7 +123,7 @@ edit_enabled_yes=Enabled, at times chosen below..
|
||||
edit_enabled_af=Enabled, after:
|
||||
edit_savenow=Save and Backup Now
|
||||
edit_createnow=Create and Backup Now
|
||||
edit_return=dump
|
||||
edit_return=backup
|
||||
edit_email=Email scheduled output to
|
||||
edit_subject=Email message subject
|
||||
edit_restore=Restore ..
|
||||
|
||||
10
gray-theme/lang/cz
Normal file
10
gray-theme/lang/cz
Normal file
@@ -0,0 +1,10 @@
|
||||
left_login=Login: $1
|
||||
left_home=Informace o systému
|
||||
left_oc=Sponzorováno OpenCountry
|
||||
left_feedback=Zaslat zpìtnou vazbu
|
||||
left_search_webmin=Hledat ve Webminu:
|
||||
left_search_usermin=Hledat v Userminu:
|
||||
left_search=Hledat:
|
||||
left_logs=Prohlédnout logy modulù
|
||||
left_others=Ostatní
|
||||
|
||||
@@ -22,3 +22,5 @@ Updated the API used by other modules to allow new actions to be created on MacO
|
||||
Converted commands in the module's API file to POD format, and added more details about each function.
|
||||
---- Changes since 1.540 ----
|
||||
Added support for the Upstart boot system, seen on Ubuntu 10 and later.
|
||||
---- Changes since 1.740 ----
|
||||
Added support for Launchd, as seen on newer MacOS X systems.
|
||||
|
||||
@@ -126,6 +126,11 @@ elsif ($init_mode eq "rc" || $init_mode eq "upstart" ||
|
||||
{ 'fork' => 1,
|
||||
'pidfile' => $var_directory."/miniserv.pid" });
|
||||
}
|
||||
elsif ($init_mode eq "launchd") {
|
||||
# Create launchd script
|
||||
&create_launchd_agent(&launchd_name($product),
|
||||
"$config_directory/start --nofork", 1);
|
||||
}
|
||||
|
||||
$config{'atboot_product'} = $product;
|
||||
&save_module_config();
|
||||
|
||||
77
init/edit_launchd.cgi
Executable file
77
init/edit_launchd.cgi
Executable file
@@ -0,0 +1,77 @@
|
||||
#!/usr/local/bin/perl
|
||||
# Show a form for creating or editing a launchd agent
|
||||
|
||||
require './init-lib.pl';
|
||||
$access{'bootup'} || &error($text{'edit_ecannot'});
|
||||
&ReadParse();
|
||||
|
||||
if ($in{'new'}) {
|
||||
&ui_print_header(undef, $text{'launchd_title1'}, "");
|
||||
$u = { };
|
||||
}
|
||||
else {
|
||||
&ui_print_header(undef, $text{'launchd_title2'}, "");
|
||||
@systemds = &list_launchd_agents();
|
||||
($u) = grep { $_->{'name'} eq $in{'name'} } @systemds;
|
||||
$u || &error($text{'launchd_egone'});
|
||||
}
|
||||
|
||||
print &ui_form_start("save_launchd.cgi", "post");
|
||||
print &ui_hidden("new", $in{'new'});
|
||||
print &ui_hidden("name", $in{'name'}) if (!$in{'new'});
|
||||
print &ui_table_start($text{'launchd_header'}, undef, 2);
|
||||
|
||||
if ($in{'new'}) {
|
||||
# Service name
|
||||
print &ui_table_row($text{'launchd_name'},
|
||||
&ui_textbox("name", undef, 30));
|
||||
|
||||
# Server command and args
|
||||
print &ui_table_row($text{'launchd_start'},
|
||||
&ui_textarea("atstart", undef, 5, 80));
|
||||
|
||||
# Start at boot?
|
||||
print &ui_table_row($text{'upstart_boot'},
|
||||
&ui_yesno_radio("boot", 1));
|
||||
}
|
||||
else {
|
||||
# Service name (non-editable)
|
||||
print &ui_table_row($text{'launchd_name'},
|
||||
"<tt>$in{'name'}</tt>");
|
||||
|
||||
# Config file location
|
||||
print &ui_table_row($text{'launchd_file'},
|
||||
$u->{'file'} ? "<tt>$u->{'file'}</tt>"
|
||||
: "<i>$text{'launchd_nofile'}</i>");
|
||||
|
||||
if ($u->{'file'}) {
|
||||
# Config file contents
|
||||
$conf = &read_file_contents($u->{'file'});
|
||||
print &ui_table_row($text{'launchd_conf'},
|
||||
&ui_textarea("conf", $conf, 20, 80));
|
||||
}
|
||||
|
||||
# Current status
|
||||
print &ui_table_row($text{'launchd_status'},
|
||||
$u->{'status'} && $u->{'pid'} ?
|
||||
&text('systemd_status1', $u->{'pid'}) :
|
||||
$u->{'status'} ?
|
||||
$text{'systemd_status2'} :
|
||||
$text{'systemd_status0'});
|
||||
}
|
||||
|
||||
print &ui_table_end();
|
||||
if ($in{'new'}) {
|
||||
print &ui_form_end([ [ undef, $text{'create'} ] ]);
|
||||
}
|
||||
else {
|
||||
print &ui_form_end([ [ undef, $text{'save'} ],
|
||||
[ 'start', $text{'edit_startnow'} ],
|
||||
[ 'restart', $text{'edit_restartnow'} ],
|
||||
[ 'stop', $text{'edit_stopnow'} ],
|
||||
[ 'reload', $text{'edit_reloadnow2'} ],
|
||||
[ 'delete', $text{'delete'} ] ]);
|
||||
}
|
||||
|
||||
&ui_print_footer("", $text{'index_return'});
|
||||
|
||||
@@ -379,6 +379,41 @@ elsif ($init_mode eq "systemd" && $access{'bootup'}) {
|
||||
]);
|
||||
|
||||
}
|
||||
elsif ($init_mode eq "launchd" && $access{'bootup'}) {
|
||||
# Show launchd agents
|
||||
print &ui_form_start("mass_launchd.cgi", "post");
|
||||
@links = ( &select_all_link("d"),
|
||||
&select_invert_link("d"),
|
||||
&ui_link("edit_launchd.cgi?new=1", $text{'index_ladd'}) );
|
||||
print &ui_links_row(\@links);
|
||||
print &ui_columns_start([ "", $text{'index_lname'},
|
||||
$text{'index_uboot'},
|
||||
$text{'index_ustatus'}, ]);
|
||||
foreach $u (&list_launchd_agents()) {
|
||||
$l = "edit_launchd.cgi?name=".&urlize($u->{'name'});
|
||||
print &ui_columns_row([
|
||||
&ui_checkbox("d", $u->{'name'}, undef),
|
||||
&ui_link($l, $u->{'name'}),
|
||||
$u->{'boot'} ? $text{'yes'} :
|
||||
"<font color=#ff0000>$text{'no'}</font>",
|
||||
$u->{'status'} ? $text{'yes'} :
|
||||
"<font color=#ff0000>$text{'no'}</font>",
|
||||
]);
|
||||
}
|
||||
print &ui_columns_end();
|
||||
print &ui_links_row(\@links);
|
||||
print &ui_form_end([ [ "start", $text{'index_start'} ],
|
||||
[ "stop", $text{'index_stop'} ],
|
||||
[ "restart", $text{'index_restart'} ],
|
||||
undef,
|
||||
[ "addboot", $text{'index_addboot'} ],
|
||||
[ "delboot", $text{'index_delboot'} ],
|
||||
undef,
|
||||
[ "addboot_start", $text{'index_addboot_start'} ],
|
||||
[ "delboot_stop", $text{'index_delboot_stop'} ],
|
||||
]);
|
||||
|
||||
}
|
||||
|
||||
# reboot/shutdown buttons
|
||||
print &ui_hr();
|
||||
|
||||
263
init/init-lib.pl
263
init/init-lib.pl
@@ -28,7 +28,9 @@ use WebminCore;
|
||||
|
||||
This variable is set based on the bootup system in use. Possible values are :
|
||||
|
||||
=item osx - MacOSX hostconfig files
|
||||
=item osx - MacOSX hostconfig files, for older versions
|
||||
|
||||
=item launchd - MacOS Launchd, for newer versions
|
||||
|
||||
=item rc - FreeBSD 6+ RC files
|
||||
|
||||
@@ -38,14 +40,17 @@ This variable is set based on the bootup system in use. Possible values are :
|
||||
|
||||
=item win32 - Windows services
|
||||
|
||||
=item upstart - Upstart, seend on Ubuntu 11
|
||||
=item upstart - Upstart, seen on Ubuntu 11
|
||||
|
||||
=item systemd - SystemD, as seen on Fedora 16
|
||||
=item systemd - SystemD, seen on Fedora 16
|
||||
|
||||
=cut
|
||||
if ($config{'init_mode'}) {
|
||||
$init_mode = $config{'init_mode'};
|
||||
}
|
||||
elsif (&has_command("launchd")) {
|
||||
$init_mode = "launchd";
|
||||
}
|
||||
elsif ($config{'hostconfig'}) {
|
||||
$init_mode = "osx";
|
||||
}
|
||||
@@ -390,8 +395,13 @@ elsif (&has_command("who")) {
|
||||
}
|
||||
}
|
||||
|
||||
# Last ditch fallback - assume runlevel 3
|
||||
if (!@rv && !$config{'inittab_extra'}) {
|
||||
push(@rv, 3);
|
||||
}
|
||||
|
||||
# Add statically configured runlevels
|
||||
if ($config{"inittab_rl_$rv[0]"}) {
|
||||
if (@rv && $config{"inittab_rl_$rv[0]"}) {
|
||||
@rv = split(/,/, $config{"inittab_rl_$rv[0]"});
|
||||
}
|
||||
push(@rv, $config{'inittab_extra'});
|
||||
@@ -507,12 +517,13 @@ such as init.d, OSX and FreeBSD.
|
||||
=cut
|
||||
sub action_status
|
||||
{
|
||||
my ($name) = @_;
|
||||
if ($init_mode eq "upstart") {
|
||||
# Check upstart service status
|
||||
local $out = &backquote_command("initctl status ".
|
||||
quotemeta($_[0])." 2>&1");
|
||||
quotemeta($name)." 2>&1");
|
||||
if (!$?) {
|
||||
my $cfile = "/etc/init/$_[0].conf";
|
||||
my $cfile = "/etc/init/$name.conf";
|
||||
open(CONF, $cfile);
|
||||
while(<CONF>) {
|
||||
if (/^(#*)\s*start/) {
|
||||
@@ -525,7 +536,7 @@ if ($init_mode eq "upstart") {
|
||||
}
|
||||
elsif ($init_mode eq "systemd") {
|
||||
# Check systemd service status
|
||||
local $unit = $_[0];
|
||||
local $unit = $name;
|
||||
$unit .= ".service" if ($unit !~ /\.service$/);
|
||||
local $out = &backquote_command("systemctl show ".
|
||||
quotemeta($unit)." 2>&1");
|
||||
@@ -541,7 +552,7 @@ if ($init_mode eq "init" || $init_mode eq "upstart" ||
|
||||
local ($a, $exists, $starting, %daemon);
|
||||
foreach $a (&list_actions()) {
|
||||
local @a = split(/\s+/, $a);
|
||||
if ($a[0] eq $_[0]) {
|
||||
if ($a[0] eq $name) {
|
||||
$exists++;
|
||||
local @boot = &get_inittab_runlevel();
|
||||
foreach $s (&action_levels("S", $a[0])) {
|
||||
@@ -551,14 +562,14 @@ if ($init_mode eq "init" || $init_mode eq "upstart" ||
|
||||
}
|
||||
}
|
||||
if ($starting && $config{'daemons_dir'} &&
|
||||
&read_env_file("$config{'daemons_dir'}/$_[0]", \%daemon)) {
|
||||
&read_env_file("$config{'daemons_dir'}/$name", \%daemon)) {
|
||||
$starting = lc($daemon{'ONBOOT'}) eq 'yes' ? 1 : 0;
|
||||
}
|
||||
return !$exists ? 0 : $starting ? 2 : 1;
|
||||
}
|
||||
elsif ($init_mode eq "local") {
|
||||
# Look for entry in rc.local
|
||||
local $fn = "$module_config_directory/$_[0].sh";
|
||||
local $fn = "$module_config_directory/$name.sh";
|
||||
local $cmd = "$fn start";
|
||||
open(LOCAL, $config{'local_script'});
|
||||
while(<LOCAL>) {
|
||||
@@ -570,25 +581,31 @@ elsif ($init_mode eq "local") {
|
||||
}
|
||||
elsif ($init_mode eq "win32") {
|
||||
# Look for a win32 service, enabled at boot
|
||||
local ($svc) = &list_win32_services($_[0]);
|
||||
local ($svc) = &list_win32_services($name);
|
||||
return !$svc ? 0 :
|
||||
$svc->{'boot'} == 2 ? 2 : 1;
|
||||
}
|
||||
elsif ($init_mode eq "rc") {
|
||||
# Look for an RC script
|
||||
local @rcs = &list_rc_scripts();
|
||||
local ($rc) = grep { $_->{'name'} eq $_[0] } @rcs;
|
||||
local ($rc) = grep { $_->{'name'} eq $name } @rcs;
|
||||
return !$rc ? 0 :
|
||||
$rc->{'enabled'} ? 2 : 1;
|
||||
}
|
||||
elsif ($init_mode eq "osx") {
|
||||
# Look for a hostconfig entry
|
||||
local $ucname = uc($_[0]);
|
||||
local $ucname = uc($name);
|
||||
local %hc;
|
||||
&read_env_file($config{'hostconfig'}, \%hc);
|
||||
return $hc{$ucname} eq '-YES-' ? 2 :
|
||||
$hc{$ucname} eq '-NO-' ? 1 : 0;
|
||||
}
|
||||
elsif ($init_mode eq "launchd") {
|
||||
local @agents = &list_launchd_agents();
|
||||
local ($agent) = grep { $_->{'name'} eq &launchd_name($name) } @agents;
|
||||
return !$agent ? 0 :
|
||||
$agent->{'boot'} ? 2 : 1;
|
||||
}
|
||||
}
|
||||
|
||||
=head2 enable_at_boot(action, description, startcode, stopcode, statuscode, &opts)
|
||||
@@ -970,6 +987,31 @@ elsif ($init_mode eq "osx") {
|
||||
&write_env_file($config{'hostconfig'}, \%hc);
|
||||
&unlock_file($config{'hostconfig'});
|
||||
}
|
||||
elsif ($init_mode eq "launchd") {
|
||||
# Create and if necessary enable a launchd agent
|
||||
my $name = &launchd_name($_[0]);
|
||||
my @agents = &list_launchd_agents();
|
||||
my ($agent) = grep { $_->{'name'} eq $name } @agents;
|
||||
if (!$agent) {
|
||||
# Need to create script
|
||||
&create_launchd_agent($name, $_[1], 1);
|
||||
}
|
||||
else {
|
||||
# Just enable at boot
|
||||
my $out = &read_file_contents($agent->{'file'});
|
||||
if ($out =~ /<key>RunAtLoad<\/key>/i) {
|
||||
# Just fix setting
|
||||
$out =~ s/<key>RunAtLoad<\/key>\s*<(true|false)\/>/<key>RunAtLoad<\/key>\n<true\/>/;
|
||||
}
|
||||
else {
|
||||
# Defaults to false, so need to add before </plist>
|
||||
$out =~ s/<\/plist>/<key>RunAtLoad<\/key>\n<true\/>\n<\/plist>/;
|
||||
}
|
||||
&open_lock_tempfile(PLIST, ">$agent->{'file'}");
|
||||
&print_tempfile(PLIST, $out);
|
||||
&close_tempfile(PLIST);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
=head2 disable_at_boot(action)
|
||||
@@ -981,6 +1023,7 @@ touched, so it can be re-enabled with the enable_at_boot function.
|
||||
=cut
|
||||
sub disable_at_boot
|
||||
{
|
||||
my ($name) = @_;
|
||||
local $st = &action_status($_[0]);
|
||||
return if ($st != 2); # not currently starting
|
||||
local $unit = $_[0];
|
||||
@@ -1102,6 +1145,18 @@ elsif ($init_mode eq "osx") {
|
||||
}
|
||||
&unlock_file($config{'hostconfig'});
|
||||
}
|
||||
elsif ($init_mode eq "launchd") {
|
||||
# Adjust plist file to not run at boot
|
||||
my @agents = &list_launchd_agents();
|
||||
my ($a) = grep { $_->{'name'} eq &launchd_name($name) } @agents;
|
||||
if ($a && $a->{'file'}) {
|
||||
my $out = &read_file_contents($a->{'file'});
|
||||
$out =~ s/<key>RunAtLoad<\/key>\s*<(true|false)\/>/<key>RunAtLoad<\/key>\n<false\/>/;
|
||||
&open_lock_tempfile(PLIST, ">$a->{'file'}");
|
||||
&print_tempfile(PLIST, $out);
|
||||
&close_tempfile(PLIST);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
=head2 delete_at_boot(name)
|
||||
@@ -1122,6 +1177,10 @@ elsif ($mode eq "upstart") {
|
||||
# Delete upstart service
|
||||
&delete_upstart_service($name);
|
||||
}
|
||||
elsif ($mode eq "launchd") {
|
||||
# Delete launchd service
|
||||
&delete_launchd_agent(&launchd_name($name));
|
||||
}
|
||||
elsif ($mode eq "init") {
|
||||
# Delete init script links and init.d file
|
||||
foreach my $a (&action_levels('S', $name)) {
|
||||
@@ -1204,6 +1263,10 @@ elsif ($action_mode eq "systemd") {
|
||||
# Start systemd service
|
||||
return &start_systemd_service($name);
|
||||
}
|
||||
elsif ($action_mode eq "launchd") {
|
||||
# Start launchd service
|
||||
return &start_launchd_agent(&launchd_name($name));
|
||||
}
|
||||
else {
|
||||
return (0, "Bootup mode $action_mode not supported");
|
||||
}
|
||||
@@ -1248,6 +1311,10 @@ elsif ($action_mode eq "systemd") {
|
||||
# Stop systemd service
|
||||
return &stop_systemd_service($name);
|
||||
}
|
||||
elsif ($action_mode eq "launchd") {
|
||||
# Stop launchd service
|
||||
return &stop_launchd_agent(&launchd_name($name));
|
||||
}
|
||||
else {
|
||||
return (0, "Bootup mode $action_mode not supported");
|
||||
}
|
||||
@@ -1302,7 +1369,13 @@ elsif ($action_mode eq "upstart") {
|
||||
elsif ($action_mode eq "systemd") {
|
||||
# Check with systemd if it is running
|
||||
my @systemds = &list_systemd_services();
|
||||
my ($u) = grep { $_->{'name'} eq $name } @systemds;
|
||||
my ($u) = grep { $_->{'name'} eq $name ||
|
||||
$_->{'name'} eq $name.".service" } @systemds;
|
||||
return !$u ? -1 : $u->{'status'} ? 1 : 0;
|
||||
}
|
||||
elsif ($action_mode eq "launchd") {
|
||||
my @agents = &list_launchd_agents();
|
||||
my ($a) = grep { $_->{'name'} eq &launchd_name($name) } @agents;
|
||||
return !$u ? -1 : $u->{'status'} ? 1 : 0;
|
||||
}
|
||||
else {
|
||||
@@ -1934,6 +2007,7 @@ sub list_systemd_services
|
||||
my $out = &backquote_command("systemctl list-units --full --all");
|
||||
&error("Failed to list systemd units : $out") if ($?);
|
||||
foreach my $l (split(/\r?\n/, $out)) {
|
||||
$l =~ s/^[^a-z0-9\-\_\.]+//i;
|
||||
my ($unit, $loaded, $active, $sub, $desc) = split(/\s+/, $l, 5);
|
||||
my $a = $unit;
|
||||
$a =~ s/\.service$//;
|
||||
@@ -2191,9 +2265,12 @@ sub shutdown_system
|
||||
&system_logged("$config{'shutdown_command'} >$null_file 2>$null_file");
|
||||
}
|
||||
|
||||
# get_action_args(filename)
|
||||
# Returns the args that this action script appears to support, like stop, start
|
||||
# and status.
|
||||
=head2 get_action_args(filename)
|
||||
|
||||
Returns the args that this action script appears to support, like stop, start
|
||||
and status.
|
||||
|
||||
=cut
|
||||
sub get_action_args
|
||||
{
|
||||
my ($file) = @_;
|
||||
@@ -2208,9 +2285,12 @@ close(FILE);
|
||||
return \%hasarg;
|
||||
}
|
||||
|
||||
# action_running(filename)
|
||||
# Assuming some init.d action supports the status parameter, returns a 1 if
|
||||
# running, 0 if not, or -1 if unknown
|
||||
=head2 action_running(filename)
|
||||
|
||||
Assuming some init.d action supports the status parameter, returns a 1 if
|
||||
running, 0 if not, or -1 if unknown
|
||||
|
||||
=cut
|
||||
sub action_running
|
||||
{
|
||||
my ($file) = @_;
|
||||
@@ -2233,4 +2313,147 @@ elsif ($out =~ /stopped/i) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
=head2 list_launchd_agents()
|
||||
|
||||
Returns an array of hash refs, each of which is a launchd daemon/agent
|
||||
|
||||
=cut
|
||||
sub list_launchd_agents
|
||||
{
|
||||
my @rv;
|
||||
|
||||
# Get the initial list of actions
|
||||
my $out = &backquote_command("launchctl list");
|
||||
&error("Failed to list launchd agents : $out") if ($?);
|
||||
foreach my $l (split(/\r?\n/, $out)) {
|
||||
next if ($l =~ /^PID/); # Header line
|
||||
my ($pid, $status, $label) = split(/\s+/, $l);
|
||||
next if ($label =~ /^0x/); # Not really a launchd job
|
||||
next if ($label =~ /\.peruser\./); # Skip user-owned actions
|
||||
push(@rv, { 'name' => $label,
|
||||
'status' => $pid eq "-" ? 0 : 1,
|
||||
'pid' => $pid eq "-" ? undef : $pid, });
|
||||
}
|
||||
|
||||
# Build map from plist files to agents
|
||||
my @dirs = ("/Library/LaunchAgents",
|
||||
"/Library/LaunchDaemons",
|
||||
"/System/Library/LaunchAgents",
|
||||
"/System/Library/LaunchDaemons");
|
||||
my (%pmap, %runatload);
|
||||
foreach my $dir (@dirs) {
|
||||
foreach my $file (glob("$dir/*.plist")) {
|
||||
my $plist = &read_file_contents($file);
|
||||
if ($plist =~ /<key>Label<\/key>\s*<string>([^<]+)/i) {
|
||||
$pmap{$1} = $file;
|
||||
}
|
||||
if ($plist =~ /<key>RunAtLoad<\/key>\s*<(true|false)\/>/i) {
|
||||
$runatload{$file} = $1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# Get details on each one
|
||||
foreach my $a (@rv) {
|
||||
my $out = &backquote_command("launchctl list ".quotemeta($a->{'name'}));
|
||||
my %attrs;
|
||||
foreach my $l (split(/\r?\n/, $out)) {
|
||||
if ($l =~ /"(\S+)"\s*=\s*"([^"]*)";/ ||
|
||||
$l =~ /"(\S+)"\s*=\s*(\S+);/) {
|
||||
$attrs{lc($1)} = $2;
|
||||
}
|
||||
}
|
||||
$a->{'start'} = $attrs{'program'};
|
||||
$a->{'file'} = $pmap{$a->{'name'}};
|
||||
$a->{'boot'} = $runatload{$a->{'file'}} eq 'true';
|
||||
}
|
||||
|
||||
return @rv;
|
||||
}
|
||||
|
||||
=head2 create_launchd_agent(name, start-script, boot-flag)
|
||||
|
||||
Creates a new local launchd agent
|
||||
|
||||
=cut
|
||||
sub create_launchd_agent
|
||||
{
|
||||
my ($name, $start, $boot) = @_;
|
||||
my $file = "/Library/LaunchDaemons/".$name.".plist";
|
||||
my $plist = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n".
|
||||
"<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n".
|
||||
"<plist version=\"1.0\">\n".
|
||||
"<dict>\n".
|
||||
"<key>Label</key>\n";
|
||||
$plist .= "<string>$name</string>\n";
|
||||
$plist .= "<key>ProgramArguments</key>\n";
|
||||
$plist .= "<array>\n";
|
||||
foreach my $a (&split_quoted_string($start)) {
|
||||
$plist .= "<string>$a</string>\n";
|
||||
}
|
||||
$plist .= "</array>\n";
|
||||
$plist .= "<key>RunAtLoad</key>\n";
|
||||
$plist .= ($boot ? "<true/>\n" : "<false/>\n");
|
||||
$plist .= "<key>KeepAlive</key>\n";
|
||||
$plist .= "<false/>\n";
|
||||
$plist .= "</dict>\n";
|
||||
$plist .= "</plist>\n";
|
||||
&open_lock_tempfile(PLIST, ">$file");
|
||||
&print_tempfile(PLIST, $plist);
|
||||
&close_tempfile(PLIST);
|
||||
my $out = &backquote_logged("launchctl load ".quotemeta($file)." 2>&1");
|
||||
&error("Failed to load plist : $out") if ($?);
|
||||
}
|
||||
|
||||
=head2 delete_launchd_agent(name)
|
||||
|
||||
Stop and remove the agent with some name
|
||||
|
||||
=cut
|
||||
sub delete_launchd_agent
|
||||
{
|
||||
my ($name) = @_;
|
||||
&system_logged("launchctl stop ".quotemeta($name)." 2>&1");
|
||||
&system_logged("launchctl remove ".quotemeta($name)." 2>&1");
|
||||
my ($a) = grep { $_->{'name'} eq $name } &list_launchd_agents();
|
||||
if ($a && $a->{'file'} && -f $a->{'file'}) {
|
||||
&system_logged("launchctl unload ".quotemeta($a->{'file'})." 2>&1");
|
||||
&unlink_logged($a->{'file'});
|
||||
}
|
||||
}
|
||||
|
||||
=head2 stop_launchd_agent(name)
|
||||
|
||||
Kill the launchd daemon with some name
|
||||
|
||||
=cut
|
||||
sub stop_launchd_agent
|
||||
{
|
||||
my ($name) = @_;
|
||||
my $out = &backquote_logged(
|
||||
"launchctl stop ".quotemeta($name)." 2>&1 </dev/null");
|
||||
return (!$?, $out);
|
||||
}
|
||||
|
||||
=head2 start_launchd_agent(name)
|
||||
|
||||
Startup the launchd daemon with some name
|
||||
|
||||
=cut
|
||||
sub start_launchd_agent
|
||||
{
|
||||
my ($name) = @_;
|
||||
my $out = &backquote_logged(
|
||||
"launchctl start ".quotemeta($name)." 2>&1 </dev/null");
|
||||
return (!$?, $out);
|
||||
}
|
||||
|
||||
# launchd_name(name)
|
||||
# If an action name isn't fully qualified, prepend com.webmin to it
|
||||
sub launchd_name
|
||||
{
|
||||
my ($name) = @_;
|
||||
return $name =~ /\./ ? $name : "com.webmin.".$name;
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
24
init/lang/ca
24
init/lang/ca
@@ -50,6 +50,8 @@ index_ustatus=En execuci
|
||||
index_uadd=Crea un nou servei d'inici.
|
||||
index_sadd=Crea un nou servei <i>systemd</i>.
|
||||
index_always=Sempre
|
||||
index_ladd=Crea un nou agent launchd.
|
||||
index_lname=Nom de l'agent
|
||||
|
||||
edit_title=Edició d'Acció
|
||||
create_title=Creació d'Acció
|
||||
@@ -77,6 +79,7 @@ edit_stopat=Atura-la a
|
||||
edit_startnow=Inicia-la ara
|
||||
edit_stopnow=Atura-la ara
|
||||
edit_restartnow=Reinicia-la ara
|
||||
edit_reloadnow2=Rellegeix el Fitxer de Configuració
|
||||
edit_condrestartnow=Reinicia-la Si Cal
|
||||
edit_reloadnow=Recarrega-la Ara
|
||||
edit_statusnow=Mostra l'Estat
|
||||
@@ -187,6 +190,7 @@ mode_win32=Serveis Windows
|
||||
mode_rc=Scripts RC FreeBSD RC
|
||||
mode_upstart=Upstart
|
||||
mode_systemd=Systemd
|
||||
mode_launchd=LaunchD
|
||||
|
||||
upstart_title1=Creació de Servei <i>Upstart</i>
|
||||
upstart_title2=Edició de Servei <i>Upstart</i>
|
||||
@@ -236,4 +240,24 @@ systemd_return=al servei systemd
|
||||
systemd_econf=No has introduït cap configuració de systemd
|
||||
systemd_estart=Hi falten les ordres a executar en iniciar
|
||||
|
||||
launchd_title1=Creació d'Agent Launchd
|
||||
launchd_title2=Edició d'Agent Launchd
|
||||
launchd_egone=L'agent ja no existeix!
|
||||
launchd_header=Detalls dels servei launchd
|
||||
launchd_name=Nom de l'agent
|
||||
launchd_file=Fitxer de configuració
|
||||
launchd_nofile=No s'ha trobat!
|
||||
launchd_start=Ordre del servidor
|
||||
launchd_conf=Configuració de launchd
|
||||
launchd_boot=Inicia'l en engegar el sistema
|
||||
launchd_status=Estat actual
|
||||
launchd_status0=No està en execució
|
||||
launchd_status1=En execució amb PID $1
|
||||
launchd_status2=En execució
|
||||
launchd_err=No s'ha pogut desar l'agent launchd
|
||||
launchd_ename=Hi falta el nom de l'agent launchd o bé sembla invàlid
|
||||
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
|
||||
|
||||
@@ -62,7 +62,9 @@ index_delboot_stop=Jetzt stoppen & zur Bootzeit deaktivieren
|
||||
index_desc=Beschreibung
|
||||
index_downscript=Gleichfalls wird das Skript $1, welches unten aufgeführt ist, beim Herunterfahren des Rechners ausgeführt. Sie können hier eigene Kommandos einfügen um beispielsweise sicher zu stellen, daß bestimmte Daemons oder Server sauber gestoppt werden.
|
||||
index_editconfig=Bearbeite die $1 Datei manuell
|
||||
index_ladd=Erstelle einen neuen launchd Agenten.
|
||||
index_levels=Starte in Runlevels
|
||||
index_lname=Agentname
|
||||
index_mode=Boot-System : $1
|
||||
index_order=Reihenfolge
|
||||
index_provides=bietet
|
||||
@@ -143,6 +145,7 @@ mass_ustarting=Starte Dienst $1 ..
|
||||
mass_ustop=Stoppe Dienste
|
||||
mass_ustopping=Stoppe Dienst $1 ..
|
||||
mode_init=SysV init
|
||||
mode_launchd=LaunchD
|
||||
mode_local=Single Boot Skript
|
||||
mode_osx=Mac OS X
|
||||
mode_rc=FreeBSD RC Skripte
|
||||
|
||||
25
init/lang/en
25
init/lang/en
@@ -50,6 +50,8 @@ index_ustatus=Running now?
|
||||
index_uadd=Create a new upstart service.
|
||||
index_sadd=Create a new systemd service.
|
||||
index_always=Always
|
||||
index_ladd=Create a new launchd agent.
|
||||
index_lname=Agent name
|
||||
|
||||
edit_title=Edit Action
|
||||
create_title=Create Action
|
||||
@@ -77,6 +79,7 @@ edit_stopat=Stop at
|
||||
edit_startnow=Start Now
|
||||
edit_stopnow=Stop Now
|
||||
edit_restartnow=Restart Now
|
||||
edit_reloadnow2=Re-Read Config File
|
||||
edit_condrestartnow=Restart If Needed
|
||||
edit_reloadnow=Reload Now
|
||||
edit_statusnow=Show Status
|
||||
@@ -187,6 +190,7 @@ mode_win32=Windows services
|
||||
mode_rc=FreeBSD RC scripts
|
||||
mode_upstart=Upstart
|
||||
mode_systemd=Systemd
|
||||
mode_launchd=LaunchD
|
||||
|
||||
upstart_title1=Create Upstart Service
|
||||
upstart_title2=Edit Upstart Service
|
||||
@@ -236,4 +240,25 @@ systemd_return=systemd service
|
||||
systemd_econf=No systemd configuration entered
|
||||
systemd_estart=Missing commands to run on startup
|
||||
|
||||
launchd_title1=Create Launchd Agent
|
||||
launchd_title2=Edit Launchd Agent
|
||||
launchd_egone=Agent no longer exists!
|
||||
launchd_header=Launchd service details
|
||||
launchd_name=Agent name
|
||||
launchd_file=Configuration file
|
||||
launchd_nofile=Not found!
|
||||
launchd_start=Server command
|
||||
launchd_conf=Launchd configuration
|
||||
launchd_boot=Start at boot time?
|
||||
launchd_status=Current status
|
||||
launchd_status0=Not running
|
||||
launchd_status1=Running with PID $1
|
||||
launchd_status2=Running
|
||||
launchd_err=Failed to save launchd agent
|
||||
launchd_ename=Missing or invalid-lookup launchd agent name
|
||||
launchd_eclash=An agent with the same name already exists
|
||||
launchd_return=launchd agent
|
||||
launchd_econf=No launchd configuration entered
|
||||
launchd_estart=Missing server command
|
||||
|
||||
__norefs=1
|
||||
|
||||
69
init/mass_launchd.cgi
Executable file
69
init/mass_launchd.cgi
Executable file
@@ -0,0 +1,69 @@
|
||||
#!/usr/local/bin/perl
|
||||
# Start or stop a bunch of launchd services
|
||||
|
||||
require './init-lib.pl';
|
||||
&ReadParse();
|
||||
@sel = split(/\0/, $in{'d'});
|
||||
@sel || &error($text{'mass_enone'});
|
||||
|
||||
$start = 1 if ($in{'start'} || $in{'addboot_start'});
|
||||
$stop = 1 if ($in{'stop'} || $in{'delboot_stop'});
|
||||
$restart = 1 if ($in{'restart'} || $in{'delboot_restart'});
|
||||
$enable = 1 if ($in{'addboot'} || $in{'addboot_start'});
|
||||
$disable = 1 if ($in{'delboot'} || $in{'delboot_stop'});
|
||||
|
||||
&ui_print_unbuffered_header(undef, $start || $enable ? $text{'mass_ustart'}
|
||||
: $text{'mass_ustop'}, "");
|
||||
|
||||
if ($start || $stop || $restart) {
|
||||
# Starting or stopping a bunch of services
|
||||
$access{'bootup'} || &error($text{'ss_ecannot'});
|
||||
foreach $s (@sel) {
|
||||
if ($start) {
|
||||
print &text('mass_ustarting', "<tt>$s</tt>"),"<p>\n";
|
||||
($ok, $out) = &start_action($s);
|
||||
}
|
||||
elsif ($stop) {
|
||||
print &text('mass_ustopping', "<tt>$s</tt>"),"<p>\n";
|
||||
($ok, $out) = &stop_action($s);
|
||||
}
|
||||
elsif ($restart) {
|
||||
print &text('mass_urestarting', "<tt>$s</tt>"),"<p>\n";
|
||||
($ok, $out) = &restart_action($s);
|
||||
}
|
||||
print "<pre>$out</pre>";
|
||||
if (!$ok) {
|
||||
print $text{'mass_failed'},"<p>\n";
|
||||
}
|
||||
else {
|
||||
print $text{'mass_ok'},"<p>\n";
|
||||
}
|
||||
}
|
||||
&webmin_log($start ? 'massstart' : $stop ? 'massstop' : 'massrestart',
|
||||
'launchd', join(" ", @sel));
|
||||
}
|
||||
|
||||
if ($enable || $disable) {
|
||||
# Enable or disable at boot
|
||||
$access{'bootup'} == 1 || &error($text{'edit_ecannot'});
|
||||
foreach $b (@sel) {
|
||||
if ($enable) {
|
||||
print &text('mass_uenable', "<tt>$b</tt>"),"<p>\n";
|
||||
&enable_at_boot($b);
|
||||
}
|
||||
else {
|
||||
print &text('mass_udisable', "<tt>$b</tt>"),"<p>\n";
|
||||
&disable_at_boot($b);
|
||||
}
|
||||
}
|
||||
&webmin_log($enable ? 'massenable' : 'massdisable', 'launchd',
|
||||
join(" ", @sel));
|
||||
}
|
||||
|
||||
if ($in{'return'}) {
|
||||
&ui_print_footer("edit_launchd.cgi?name=".&urlize($in{'return'}),
|
||||
$text{'launchd_return'});
|
||||
}
|
||||
else {
|
||||
&ui_print_footer("", $text{'index_return'});
|
||||
}
|
||||
59
init/save_launchd.cgi
Executable file
59
init/save_launchd.cgi
Executable file
@@ -0,0 +1,59 @@
|
||||
#!/usr/local/bin/perl
|
||||
# Create, update or delete a launchd service
|
||||
|
||||
require './init-lib.pl';
|
||||
&error_setup($text{'launchd_err'});
|
||||
$access{'bootup'} || &error($text{'edit_ecannot'});
|
||||
&ReadParse();
|
||||
@launchds = &list_launchd_agents();
|
||||
|
||||
# Get the service
|
||||
if (!$in{'new'}) {
|
||||
($u) = grep { $_->{'name'} eq $in{'name'} } @launchds;
|
||||
$u || &error($text{'launchd_egone'});
|
||||
}
|
||||
|
||||
if ($in{'start'} || $in{'stop'} || $in{'restart'}) {
|
||||
# Just redirect to the start page
|
||||
&redirect("mass_launchd.cgi?d=".&urlize($in{'name'})."&".
|
||||
($in{'start'} ? "start=1" :
|
||||
$in{'restart'} ? "restart=1" : "stop=1").
|
||||
"&return=".&urlize($in{'name'}));
|
||||
exit;
|
||||
}
|
||||
|
||||
if ($in{'delete'}) {
|
||||
# Delete the service
|
||||
&delete_launchd_agent($in{'name'});
|
||||
&webmin_log("delete", "launchd", $in{'name'});
|
||||
}
|
||||
elsif ($in{'reload'}) {
|
||||
# Re-load the service from its config file
|
||||
&system_logged("launchctl unload ".quotemeta($u->{'file'})." 2>&1");
|
||||
&system_logged("launchctl load ".quotemeta($u->{'file'})." 2>&1");
|
||||
&webmin_log("reload", "launchd", $in{'name'});
|
||||
}
|
||||
elsif ($in{'new'}) {
|
||||
# Validate inputs and check for clash
|
||||
$in{'name'} =~ /^[a-z0-9\.\_\-]+$/i ||
|
||||
&error($text{'launchd_ename'});
|
||||
($clash) = grep { $_->{'name'} eq $in{'name'} } @launchds;
|
||||
$clash && &error($text{'launchd_eclash'});
|
||||
$in{'atstart'} =~ /\S/ || &error($text{'launchd_estart'});
|
||||
|
||||
# Create the config file
|
||||
&create_launchd_agent($in{'name'}, $in{'atstart'}, $in{'boot'});
|
||||
|
||||
&webmin_log("create", "launchd", $in{'name'});
|
||||
}
|
||||
else {
|
||||
# Just save the config file
|
||||
$in{'conf'} =~ /\S/ || &error($text{'launchd_econf'});
|
||||
$in{'conf'} =~ s/\r//g;
|
||||
&open_lock_tempfile(CONF, ">$u->{'file'}");
|
||||
&print_tempfile(CONF, $in{'conf'});
|
||||
&close_tempfile(CONF);
|
||||
&webmin_log("modify", "launchd", $in{'name'});
|
||||
}
|
||||
&redirect("");
|
||||
|
||||
@@ -7,36 +7,44 @@ require './inittab-lib.pl';
|
||||
&ui_print_header(undef, $module_info{'desc'}, "", "index", 1, 1, 0,
|
||||
&help_search_link("inittab", "man"));
|
||||
|
||||
print &ui_form_start("delete.cgi", "post");
|
||||
@links = ( &select_all_link("d"),
|
||||
&select_invert_link("d"),
|
||||
&ui_link("edit_inittab.cgi?new=1", $text{'inittab_new'}) );
|
||||
print &ui_links_row(\@links);
|
||||
@tds = ( "width=5" );
|
||||
print &ui_columns_start([ "",
|
||||
&hlink( $text{ 'inittab_id' }, "id" ),
|
||||
&hlink( $text{ 'inittab_active' }, "active" ),
|
||||
&hlink( $text{ 'inittab_runlevels' }, "runlevels" ),
|
||||
&hlink( $text{ 'inittab_action' }, "action" ),
|
||||
&hlink( $text{ 'inittab_process' }, "process" ) ],
|
||||
100, 0, \@tds);
|
||||
foreach $i (&parse_inittab()) {
|
||||
local @cols;
|
||||
push(@cols, &ui_link("edit_inittab.cgi?id=".&urlize($i->{'id'}),
|
||||
&html_escape($i->{'id'})) );
|
||||
push(@cols, $i->{'comment'} ? "<font color=#ff0000>$text{'no'}</font>"
|
||||
: $text{'yes'});
|
||||
local @rls = @{$i->{'levels'}};
|
||||
push(@cols, @rls ? &html_escape(join(", ", @rls))
|
||||
: $text{'inittab_none'});
|
||||
push(@cols, $text{"inittab_".$i->{'action'}} ||
|
||||
"<tt>".&html_escape($i->{'action'})."</tt>");
|
||||
push(@cols, &html_escape($i->{'process'}));
|
||||
print &ui_checked_columns_row(\@cols, \@tds, "d", $i->{'id'});
|
||||
@inittab = &parse_inittab();
|
||||
if (@inittab) {
|
||||
print &ui_form_start("delete.cgi", "post");
|
||||
@links = ( &select_all_link("d"),
|
||||
&select_invert_link("d"),
|
||||
&ui_link("edit_inittab.cgi?new=1", $text{'inittab_new'}) );
|
||||
print &ui_links_row(\@links);
|
||||
@tds = ( "width=5" );
|
||||
print &ui_columns_start(
|
||||
[ "",
|
||||
&hlink( $text{ 'inittab_id' }, "id" ),
|
||||
&hlink( $text{ 'inittab_active' }, "active" ),
|
||||
&hlink( $text{ 'inittab_runlevels' }, "runlevels" ),
|
||||
&hlink( $text{ 'inittab_action' }, "action" ),
|
||||
&hlink( $text{ 'inittab_process' }, "process" ) ],
|
||||
100, 0, \@tds);
|
||||
foreach $i (@inittab) {
|
||||
local @cols;
|
||||
push(@cols, &ui_link("edit_inittab.cgi?id=".&urlize($i->{'id'}),
|
||||
&html_escape($i->{'id'})) );
|
||||
push(@cols, $i->{'comment'} ? "<font color=#ff0000>$text{'no'}</font>"
|
||||
: $text{'yes'});
|
||||
local @rls = @{$i->{'levels'}};
|
||||
push(@cols, @rls ? &html_escape(join(", ", @rls))
|
||||
: $text{'inittab_none'});
|
||||
push(@cols, $text{"inittab_".$i->{'action'}} ||
|
||||
"<tt>".&html_escape($i->{'action'})."</tt>");
|
||||
push(@cols, &html_escape($i->{'process'}));
|
||||
print &ui_checked_columns_row(\@cols, \@tds, "d", $i->{'id'});
|
||||
}
|
||||
print &ui_columns_end();
|
||||
print &ui_links_row(\@links);
|
||||
print &ui_form_end([ [ "delete", $text{'index_delete'} ] ]);
|
||||
}
|
||||
else {
|
||||
print "<b>$text{'inittab_none2'}</b><p>\n";
|
||||
print &ui_link("edit_inittab.cgi?new=1", $text{'inittab_new'}),"<p>\n";
|
||||
}
|
||||
print &ui_columns_end();
|
||||
print &ui_links_row(\@links);
|
||||
print &ui_form_end([ [ "delete", $text{'index_delete'} ] ]);
|
||||
|
||||
print &ui_hr();
|
||||
print "<table width=100%><tr>\n";
|
||||
|
||||
@@ -1,47 +1,48 @@
|
||||
inittab_action=Aktion
|
||||
inittab_powerwait=Bei Stromausfall
|
||||
save_inittab_err=Sie haben keine Berechtigung, einen Prozess zu speichern
|
||||
log_rename=Init-Prozess $1 nach $2 umbenannt
|
||||
inittab_new=Neuen Init-Prozess erstellen.
|
||||
inittab_process=Prozess
|
||||
edit_inittab_title=Prozess $1 bearbeiten
|
||||
log_create=Init-Prozess $1 erzeugt
|
||||
apply_err=Fehler beim Anwenden der Konfiguration
|
||||
save_inittab_noid=Fehler, es wurde kein Name für den Prozess eingegeben
|
||||
inittab_off=Nichts tun
|
||||
inittab_wait=Warten
|
||||
inittab_sysinit=Während des Systemstarts
|
||||
inittab_powerokwait=Stromversorgung ist wiederhergestellt
|
||||
inittab_kbdrequest=Spezielle Schlüsselkombination
|
||||
delete_err=Fehlgeschlagen Prozesse zu löschen
|
||||
inittab_applymsg=Drücken Sie diese Schaltfläche, um die aktuelle SysV-Init-Konfiguration durch den Befehl <tt>telinit q</tt> anzuwenden. Seien Sie sich bewusst, dass jegliche Fehler in Ihrer Konfiguration das System unbrauchbar machen können, wenn dieser Befehl ausgeführt wird.
|
||||
log_modify=Init-Prozess $1 geändert
|
||||
new_inittab_err=Sie haben keine Berechtigung, einen neuen Prozess zu erstellen
|
||||
edit_inittab_details=Prozessdetails
|
||||
inittab_once=Einmal im Level
|
||||
inittab_ondemand=Immer wenn in A, B, C
|
||||
inittab_active=Aktiviert?
|
||||
inittab_kbrequest=Spezielle Tastenkombination
|
||||
log_apply=Konfiguration angewandt
|
||||
__norefs=1
|
||||
index_delete=Lösche ausgewählte Prozesse
|
||||
edit_inittab_err=Sie haben keine Berechtigung, einen Prozess zu bearbeiten
|
||||
inittab_id=ID
|
||||
inittab_boot=Beim Booten
|
||||
inittab_none=Keine
|
||||
apply_err=Fehler beim Anwenden der Konfiguration
|
||||
delete_enone=Nichts ausgewählt
|
||||
delete_err=Fehlgeschlagen Prozesse zu löschen
|
||||
edit_inittab_del=Löschen
|
||||
inittab_return=Inittab-Index
|
||||
log_delete=Init-Prozess $1 gelöscht
|
||||
log_deletes=Gelöschte $1 Init-Prozesse
|
||||
edit_inittab_details=Prozessdetails
|
||||
edit_inittab_err=Sie haben keine Berechtigung, einen Prozess zu bearbeiten
|
||||
edit_inittab_save=Speichern
|
||||
edit_inittab_title=Prozess $1 bearbeiten
|
||||
index_delete=Lösche ausgewählte Prozesse
|
||||
inittab_action=Aktion
|
||||
inittab_active=Aktiviert?
|
||||
inittab_apply=Init-Konfiguration anwenden
|
||||
inittab_applymsg=Drücken Sie diese Schaltfläche, um die aktuelle SysV-Init-Konfiguration durch den Befehl <tt>telinit q</tt> anzuwenden. Seien Sie sich bewusst, dass jegliche Fehler in Ihrer Konfiguration das System unbrauchbar machen können, wenn dieser Befehl ausgeführt wird.
|
||||
inittab_boot=Beim Booten
|
||||
inittab_bootwait=Beim Booten, warten bis Beendigung
|
||||
inittab_ctrlaltdel=Strg-Alt-Entf
|
||||
inittab_id=ID
|
||||
inittab_initdefault=Nach dem Systemstart
|
||||
new_inittab_title=Neuer Prozess
|
||||
edit_inittab_save=Speichern
|
||||
delete_enone=Nichts ausgewählt
|
||||
inittab_powerfailnow=Stromausfall
|
||||
inittab_runlevels=Ausführungs-Level
|
||||
inittab_apply=Init-Konfiguration anwenden
|
||||
inittab_respawn=Neu starten
|
||||
inittab_kbdrequest=Spezielle Schlüsselkombination
|
||||
inittab_kbrequest=Spezielle Tastenkombination
|
||||
inittab_new=Neuen Init-Prozess erstellen.
|
||||
inittab_none=Keine
|
||||
inittab_none2=Keine bootup Prozesse auf Ihrem System gefunden. Dies zeigt an, dass es wahrscheinlich nicht die SysV init Konfigurationsdatei nutzt.
|
||||
inittab_off=Nichts tun
|
||||
inittab_once=Einmal im Level
|
||||
inittab_ondemand=Immer wenn in A, B, C
|
||||
inittab_powerfail=Bei Stromausfall ohne Warten
|
||||
inittab_powerfailnow=Stromausfall
|
||||
inittab_powerokwait=Stromversorgung ist wiederhergestellt
|
||||
inittab_powerwait=Bei Stromausfall
|
||||
inittab_process=Prozess
|
||||
inittab_respawn=Neu starten
|
||||
inittab_return=Inittab-Index
|
||||
inittab_runlevels=Ausführungs-Level
|
||||
inittab_sysinit=Während des Systemstarts
|
||||
inittab_wait=Warten
|
||||
log_apply=Konfiguration angewandt
|
||||
log_create=Init-Prozess $1 erzeugt
|
||||
log_delete=Init-Prozess $1 gelöscht
|
||||
log_deletes=Gelöschte $1 Init-Prozesse
|
||||
log_modify=Init-Prozess $1 geändert
|
||||
log_rename=Init-Prozess $1 nach $2 umbenannt
|
||||
new_inittab_err=Sie haben keine Berechtigung, einen neuen Prozess zu erstellen
|
||||
new_inittab_title=Neuer Prozess
|
||||
save_inittab_already=Fehler, der angegebene Prozessname ist bereits vergeben
|
||||
save_inittab_err=Sie haben keine Berechtigung, einen Prozess zu speichern
|
||||
save_inittab_noid=Fehler, es wurde kein Name für den Prozess eingegeben
|
||||
|
||||
@@ -25,6 +25,7 @@ inittab_return=process list
|
||||
inittab_apply=Apply Init Configuration
|
||||
inittab_applymsg=Click this button to apply the current SysV Init Configuration by running the command <tt>telinit q</tt>. Be aware that any mistakes in your configuration may make the system unusable when this command is run.
|
||||
index_delete=Delete Selected Processes
|
||||
inittab_none2=No bootup processes were found on your system. This probably indicates that it does not use the SysV init configuration file.
|
||||
|
||||
edit_inittab_err=Your not allowed to edit a process
|
||||
edit_inittab_title=Edit Process $1
|
||||
|
||||
@@ -186,6 +186,11 @@ while(<FILE>) {
|
||||
$rule->{'proto'} = shift(@w);
|
||||
}
|
||||
|
||||
# Skip inet keyword, which as far as I know does nothing
|
||||
if ($w[0] eq "inet") {
|
||||
shift(@w);
|
||||
}
|
||||
|
||||
# Parse from/to section
|
||||
if ($w[0] eq "all") {
|
||||
shift(@w);
|
||||
|
||||
@@ -284,7 +284,7 @@ sub get_ipsec_version
|
||||
{
|
||||
local $out = `$config{'ipsec'} --version 2>&1`;
|
||||
${$_[0]} = $out;
|
||||
return $out =~ /(FreeS\/WAN|Openswan|StrongSWAN)\s+([^ \n\(]+)/i ? ($2,$1) : (undef);
|
||||
return $out =~ /(FreeS\/WAN|Openswan|StrongSWAN|Libreswan)\s+([^ \n\(]+)/i ? ($2,$1) : (undef);
|
||||
}
|
||||
|
||||
# got_secret()
|
||||
|
||||
8
lang/ca
8
lang/ca
@@ -123,10 +123,10 @@ help_eexec=$1 ha fallat: $2
|
||||
referer_title=Avís de Seguretat
|
||||
referer_warn=<b>Atenció!</b> Webmin ha detectat que el programa $2 és un enllaç a l'URL $1, que sembla ser que queda fora del servidor Webmin. Això pot ser un intent d'enganyar el servidor per tal que executi una ordre perillosa.
|
||||
referer_warn_unknown=<b>Atenció!</b> Webmin ha detectat que el programa $1 és un enllaç a un URL desconegut, que sembla ser que queda fora del servidor Webmin. Això pot ser un intent d'enganyar el servidor per tal que executi una ordre perillosa.
|
||||
referer_ok=Continua executant el programa Webmin
|
||||
referer_again=No tornis a mostrar aquest avís
|
||||
referer_eurl=URL original invàlid!
|
||||
referer_eself=referer_save.cgi no es pot enllaçar directament!
|
||||
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>
|
||||
|
||||
session_header=Entrada a Webmin
|
||||
session_mesg=Per entrar al servidor Webmin de $1, has d'introduir un nom d'usuari i una contrasenya.
|
||||
|
||||
564
lang/cz
564
lang/cz
@@ -1,164 +1,187 @@
|
||||
acl_feedback=Lze poslat zpětný email?
|
||||
acl_feedback0=Ne
|
||||
acl_feedback1=Ano, ale ne s konfiguračními soubory
|
||||
acl_feedback2=Ano
|
||||
acl_feedback3=Ano, s konfiguračními soubory
|
||||
acl_fileunix=Prohlížet soubory pod Unix uživatelem
|
||||
acl_gedit=Uživatelé, kteří se zobrazují v manažeru skupin
|
||||
acl_gedit_all=AVšechny skupiny
|
||||
acl_gedit_except=Všechny skupiny kromě
|
||||
acl_gedit_gid=Skupiny s GID v rozsahu
|
||||
acl_gedit_none=Žádné skupiny
|
||||
acl_gedit_only=Pouze skupiny
|
||||
acl_home=Domovský adresář uživatele
|
||||
acl_nodot=Skrýt tečkované soubory v souborovém prohlížeči?
|
||||
acl_otherdirs=Jiné viditelné adresáře v souborovém prohlížeči
|
||||
acl_readonly=Uživatel je v demo modu?<br>(Některé moduly nemusí být k dispozici)
|
||||
acl_root=Kořenový adresář pro souborový manažer
|
||||
acl_rpc=Lze akceptovat RPC volání?
|
||||
acl_rpc0=Ne
|
||||
acl_rpc1=Ano
|
||||
acl_rpc2=Pouze pro <tt>root</tt> nebo <tt>admin</tt>
|
||||
acl_sameunix=Stejné přihlášení jako ve Webminu
|
||||
acl_uedit=Uživatelé, kteří se zobrazují v manažeru uživatelů
|
||||
acl_uedit_all=Všichni uživatelé
|
||||
acl_uedit_except=Všichni uživatelé kromě
|
||||
acl_uedit_group=Uživatelé se skupinou
|
||||
acl_uedit_none=Žádní uživatele
|
||||
acl_uedit_only=Pouze uživatelé
|
||||
acl_uedit_uid=Uživatelé s UID v rozsahu
|
||||
cancel=Storno
|
||||
category_=Ostatní
|
||||
category_cluster=Cluster
|
||||
category_hardware=Hardware
|
||||
category_info=Informace
|
||||
category_net=Sítě
|
||||
category_servers=Servery
|
||||
category_syslet=Systémové hlášky
|
||||
category_system=Systém
|
||||
category_webmin=Webmin
|
||||
chooser_date=Změnit datum
|
||||
chooser_dir=Adresář $1
|
||||
chooser_eopen=Chyba v seznamu : $1
|
||||
chooser_ok=Ok
|
||||
chooser_title1=Vybrat soubor..
|
||||
chooser_title2=Vybrat adresář..
|
||||
config_dir=Pro modul $1
|
||||
config_eaccess=Nemáte oprávnění pro přístup k tomuto modulu
|
||||
config_ecannot=Nemáte oprávnění pro konfiguraci tohoto modulu
|
||||
config_err=Chyba při ukládání konfigurace
|
||||
config_ewebmin=Parametru typu 14 pracuje jen ve Webminu
|
||||
config_header=Konfigurační nastavení pro $1
|
||||
config_nochange=Neměňte
|
||||
config_none=Nic
|
||||
config_setto=Nastavit na
|
||||
config_title=Konfigurace
|
||||
create=Vytvořit
|
||||
day_0=Neděle
|
||||
day_1=Pondělí
|
||||
day_2=Úterý
|
||||
day_3=Středa
|
||||
day_4=Čtvrtek
|
||||
day_5=Pátek
|
||||
day_6=Sobota
|
||||
default=Výchozí
|
||||
delete=Smazat
|
||||
efileclose=Chyba při zápisu do $1 v momentě uzavírání : $2
|
||||
efileopen=Chyba při otevření $1 pro zápis : $2
|
||||
efilewrite=Chyba při zápisu do $1 : $2
|
||||
elock_tries=Chyba při uzamčení souboru $1 po $2 minutách
|
||||
emodule=Přístup zamítnut : Uživatel $1 nemá oprávnění použít $2 modul
|
||||
emodulecheck=Modul $1 není ve vašem systému k dispozici
|
||||
error=Chyba
|
||||
error_file=Soubor
|
||||
error_line=Řádek
|
||||
error_previous=předchozí stránka
|
||||
error_stack=Vyvolat zpětné chyby
|
||||
error_stackline=V souboru $1 v řádku $2 vyvoláno $3
|
||||
error_sub=Funkce
|
||||
feedback_all=Všechny moduly
|
||||
feedback_attach=Další přílohy
|
||||
feedback_config=Zahrnout konfiguraci modulu?
|
||||
feedback_configdesc=Pokud je tato volba vybrána, ohlášení bude obsahovat konfiguraci daného modulu a obsah konfiguračních souborů, které modul využívá. Například, pokud se ohlášení týká modulu <i>Uživatelé a Skupiny</i>, bude přiložen váš <tt>/etc/passwd</tt> a <tt>/etc/shadow</tt>.
|
||||
feedback_desc=Tento formulář umožňuje oznamovat nesrovnalosti a tím přimět Webmin vývojáře zabývat se problémy či chybějícími rysy, které jste nalezli. V momentě, kdy klepnete na tlačítko Send, údaje z formuláře budou odeslány na email $1.
|
||||
feedback_desc2=Toto ohlášení bude odesláno vývojáři Userminu, nikoliv system administratorovi, ISP nepo společnosti poskytující webhosting. Pište prosím vaše ohlášení v angličtině, pokud Webmin běží v jiném jazyce.
|
||||
feedback_ecannot=Nemáte oprávnění odesílat ohlášení
|
||||
feedback_ecannot2=Nemáte oprávnění odesílat ohlášení s připojením konfiguračních souborů
|
||||
feedback_econfig=Nemáte plná přístupová práva ke zvolenému modulu.
|
||||
feedback_email=Váš email
|
||||
feedback_emodule=Zvolili jste připojení konfigurace modulu, ale nevybrali jste si modul.
|
||||
feedback_emodule2=Zvolený modul neexistuje
|
||||
feedback_enoto=Nebyly vloženy žádné adresy pro odeslání ohlášení na
|
||||
feedback_err=Chyba při odeslání ohlášení
|
||||
feedback_esend=Chyba při odeslání ohlášení prostřednictvím sendmail programu or místního SMTP serveru.
|
||||
feedback_header=Detaily ohlášení
|
||||
feedback_mailserver=Poslat prostřednictvím SMTP serveru
|
||||
feedback_mailserver_def=Místní sendmail program
|
||||
feedback_module=Modul, kterého se ohlášení týká
|
||||
feedback_name=Vaše jméno
|
||||
feedback_os=Zahrnout informace o operačním systému?
|
||||
feedback_osdesc=Pokud je tato volba vybrána, ohlášení bude obsahovat název operačního systému a jeho verzi.
|
||||
feedback_prog=Odeslané ohlášení na $1 využitím sendmail programu $2
|
||||
feedback_send=Odeslát ohlášení
|
||||
feedback_text=Popis chyby nebo připomínky
|
||||
feedback_title=Webmin ohlášení
|
||||
feedback_to=Odeslat ohlášení na adresy
|
||||
feedback_via=Odeslané ohlášení na $1 prostřednictvím SMTP serveru $2
|
||||
find=Najít
|
||||
groups_all=Všechny skupiny
|
||||
groups_cancel=Storno
|
||||
groups_clear=Vyčistit
|
||||
groups_ok=Ok
|
||||
groups_sel=Vybrané skupiny
|
||||
groups_title1=Vybrat skupiny..
|
||||
groups_title2=Vybrat skupinu..
|
||||
header_config=Konfigurace modulu
|
||||
header_help=Nápověda..
|
||||
header_module=Úvodní stránka Modulu
|
||||
header_servers=Servery Webminu
|
||||
header_statusmsg=$1 logováno do $2 $3 na $4 ($5)
|
||||
header_webmin=Úvodní stránka Webminu
|
||||
help_eexec=$1 chyba : $2
|
||||
help_efile=Chyba při čtení souboru nápovědy $1
|
||||
help_eheader=Chybějící <header> section
|
||||
help_eif=$1 chyba : $2
|
||||
help_einclude=Nemohu vložit $1
|
||||
help_epath=Chybějící cesta k souboru nápovědy
|
||||
help_err=Nemohu zobrazit nápovědu
|
||||
helpsearch=Hledat v Docs..
|
||||
index=seznam
|
||||
link_essl=Pro HTTPS připojení je potřeba modul Perlu Net::SSLeay Perl, ten však není ve vašem systému nainstalován.
|
||||
longcategory_=Moduly, které nenáleží do žádné kategorie
|
||||
longcategory_cluster=Moduly, které umožňují správu vícero serverů pod jedním rozhraním
|
||||
longcategory_hardware=Moduly pro tiskárnu, disk a konfiguraci podobných zařízení
|
||||
longcategory_info=Moduly, které zobrazují informaci o vašem systému
|
||||
longcategory_net=Moduly, které konfigurují sítě a síťová zařízení
|
||||
longcategory_servers=Moduly pro konfiguraci webu, emailu, FTP a podobných serverů
|
||||
longcategory_system=Moduly pro uživatele, souborové systémy, crony a podobná nastavení systému
|
||||
longcategory_webmin=Moduly pro konfiguraci samotného Webminu
|
||||
main_feedback=Feedback..
|
||||
main_homepage=Hlavní strana
|
||||
main_feedback=Zpětná vazba..
|
||||
main_switch=Přepnout uživatele..
|
||||
main_logout=Odhlásit
|
||||
main_none=Nemáte přístup na žádný Webmin modul.
|
||||
main_readonly=(Mod Pouze ke čtení)
|
||||
main_return=Zpět na $1
|
||||
main_skill=ůrověň dovednosti
|
||||
main_switch=Přepnout uživatele ..
|
||||
main_version=Verze $1 na $2 ($3)
|
||||
main_title=Webmin $1 na $2 ($3)
|
||||
main_title2=Webmin
|
||||
main_version=Verze $1 na $2 ($3)
|
||||
main_title3=Webmin $1 ($2)
|
||||
main_none=Nemáte přístup na žádný Webmin modul.
|
||||
main_skill=ůrověň dovednosti
|
||||
main_readonly=(Mód Pouze ke čtení)
|
||||
main_return=Zpět na $1
|
||||
main_unused=Nepoužité moduly
|
||||
main_refreshmods=Obnovit moduly
|
||||
|
||||
link_essl=Pro HTTPS připojení je potřeba modul Perlu Net::SSLeay Perl, ten však není ve vašem systému nainstalován.
|
||||
|
||||
category_servers=Servery
|
||||
category_hardware=Hardware
|
||||
category_system=Systém
|
||||
category_webmin=Webmin
|
||||
category_net=Sítě
|
||||
category_syslet=Systémové hlášky
|
||||
category_cluster=Cluster
|
||||
category_info=Informace
|
||||
category_=Ostatní
|
||||
|
||||
longcategory_servers=Moduly pro konfiguraci webu, emailu, FTP a podobných serverů
|
||||
longcategory_hardware=Moduly pro tiskárnu, disk a konfiguraci podobných zařízení
|
||||
longcategory_system=Moduly pro uživatele, souborové systémy, crony a podobná nastavení systému
|
||||
longcategory_webmin=Moduly pro konfiguraci samotného Webminu
|
||||
longcategory_net=Moduly, které konfigurují sítě a síťová zařízení
|
||||
longcategory_cluster=Moduly, které umožňují správu více serverů pod jedním rozhraním
|
||||
longcategory_info=Moduly, které zobrazují informaci o vašem systému
|
||||
longcategory_=Moduly, které nenáleží do žádné kategorie
|
||||
|
||||
header_webmin=Úvodní stránka Webminu
|
||||
header_module=Úvodní stránka Modulu
|
||||
header_help=Nápověda..
|
||||
header_config=Konfigurace modulu
|
||||
header_servers=Servery Webminu
|
||||
|
||||
index=seznam
|
||||
yes=Ano
|
||||
no=Ne
|
||||
save=Zapsat
|
||||
create=Vytvořit
|
||||
delete=Smazat
|
||||
find=Najít
|
||||
error=Chyba
|
||||
error_previous=předchozí stránka
|
||||
error_stack=Vyvolat zpětné chyby
|
||||
error_file=Soubor
|
||||
error_line=Řádek
|
||||
error_sub=Funkce
|
||||
error_stackline=V souboru $1 v řádku $2 vyvoláno $3
|
||||
efilewrite=Chyba při zápisu do $1 : $2
|
||||
efileclose=Chyba při zápisu do $1 v momentě uzavírání : $2
|
||||
efileopen=Chyba při otevření $1 pro zápis : $2
|
||||
default=Výchozí
|
||||
modify=Změnit
|
||||
reset=Reset
|
||||
ok=OK
|
||||
cancel=Storno
|
||||
helpsearch=Hledat v Docs..
|
||||
switch_remote_euser=Unix uživatel $1 neexistuje.
|
||||
programname=Webmin
|
||||
euserdbacl=Nepodařilo se získat ACL uživatele : $1
|
||||
euserdbacl2=Nepodařilo se aktualizovat ACL uživatele : $1
|
||||
egroupdbacl=Nepodařilo se získat ACL skupiny : $1
|
||||
egroupdbacl2=Nepodařilo se aktualizovat ACL pro skupinu : $1
|
||||
|
||||
chooser_title1=Vybrat soubor..
|
||||
chooser_title2=Vybrat adresář..
|
||||
chooser_dir=Adresář $1
|
||||
chooser_ok=Ok
|
||||
chooser_date=Změnit datum
|
||||
chooser_eopen=Chyba výběru : $1
|
||||
|
||||
users_title1=Vybrat více uživatelů..
|
||||
users_title2=Vybrat uživatele..
|
||||
users_sel=Vybraní uživatelé
|
||||
users_all=Všichni uživatelé
|
||||
users_ok=Ok
|
||||
users_cancel=Storno
|
||||
users_clear=Vyčistit
|
||||
|
||||
groups_title1=Vybrat skupiny..
|
||||
groups_title2=Vybrat skupinu..
|
||||
groups_all=Všechny skupiny
|
||||
groups_sel=Vybrané skupiny
|
||||
groups_ok=Ok
|
||||
groups_cancel=Storno
|
||||
groups_clear=Vyčistit
|
||||
|
||||
modules_title1=Vybrat moduly..
|
||||
modules_title2=Vybrat modul..
|
||||
modules_sel=Vybrané moduly
|
||||
modules_all=Všechny moduly
|
||||
modules_ok=Ok
|
||||
modules_cancel=Opustit
|
||||
modules_clear=Vyčistit
|
||||
modules_ok=Ok
|
||||
modules_sel=Vybrané moduly
|
||||
modules_title1=Vybrané moduly..
|
||||
modules_title2=Vybrat moduly..
|
||||
|
||||
config_ecannot=Nemáte oprávnění pro konfiguraci tohoto modulu
|
||||
config_title=Konfigurace
|
||||
config_dir=Pro modul $1
|
||||
config_header=Konfigurační nastavení pro $1
|
||||
config_none=Nic
|
||||
config_eaccess=Nemáte oprávnění pro přístup k tomuto modulu
|
||||
config_err=Chyba při ukládání konfigurace
|
||||
config_nochange=Neměňte
|
||||
config_setto=Nastavit na
|
||||
config_ewebmin=Parametru typu 14 pracuje jen ve Webminu
|
||||
|
||||
help_err=Nemohu zobrazit nápovědu
|
||||
help_epath=Chybějící/nesprávná cesta k souboru nápovědy
|
||||
help_efile=Chyba při čtení souboru nápovědy $1
|
||||
help_eheader=Chybějící <header> section
|
||||
help_einclude=Nemohu vložit $1
|
||||
help_eexec=$1 chyba : $2
|
||||
help_eif=$1 chyba : $2
|
||||
|
||||
referer_title=Bezpečnostní varování
|
||||
referer_warn=<b>Pozor!</b> Webmin zjistil, že program $2 byl nalinkován z URL $1 a tudíž mimo Webmin server. Tento postup může vést ke snaze spouštět nebezpečné příkazy.
|
||||
referer_warn_unknown=<b>Pozor!</b> Webmin zjistil, že program $2 byl nalinkován z neznámé URL a tudíž mimo Webmin server. Tento postup může vést ke snaze spouštět nebezpečné příkazy.
|
||||
referer_fix1=Je-li to legitimní odkaz, můžete použít odkazy z tohoto URL následovně:<ul><li>Přihlásit se do Webminu normálním způsobem.<li>Přejít do modulu <b>Konfigurace Webminu</b>.<li>Klepnout na ikonu důvěryhodné zdroje.<li>Vložit hostname $1 do pole <b>Důvěryhodných webových sídel</b> a klepnout na <b>Uložit</b>.</ul>
|
||||
referer_fix2=Alternativně, můžete nastavit Webmin, aby povolil tento odkaz z příkazové řádky a to následovně:<ul><li>Přihlaste pod <tt>rootem</tt> a upravte soubor <tt>/etc/webmin/config</tt>.<li>Přidejte řádek <tt>referers=$1</tt> na konec nebo existuje-li již řádek <tt>zdroje</tt> přidejte <tt>$1</tt> do něj.<li>Uložte soubor.</ul>
|
||||
referer_fix3u=Ujistěte se, že má váš prohlížeč nastavené odesílání hlavičky <tt>Referer</tt>, kterou může Webmin ověřit.
|
||||
referer_fix2u=Alternativně, můžete nastavit Webmin, aby povolil odkazy z neznámých zdrojů a to následovně:<ul><li>Přihlaste pod uživatelem <tt>root</tt> a upravte soubor <tt>/etc/webmin/config</tt>.<li>Najděte řádek <tt>referers_none=1</tt> a odstraňte jej.<li>Uložte soubor.</ul>
|
||||
|
||||
session_header=Přihlášení do Webminu
|
||||
session_mesg=Pokud se chcete přihlásit k Webmin serveru na $1, musíte zadat jméno a heslo.
|
||||
session_mesg2=Pokud se chcete přihlásit, musíte zadat jméno a heslo.
|
||||
session_user=Uživatelské jméno
|
||||
session_pass=Heslo
|
||||
session_twofactor=Dvou-faktorový token
|
||||
session_login=Přihlásit
|
||||
session_clear=Vyčistit
|
||||
session_failed=Chybné přihlášení. Zkuste to znovu.
|
||||
session_twofailed=Dvou-faktorová autentizace selhala : $1
|
||||
session_logout=Odhlášení bylo úspěšné. Můžete použít níže uvedený formulář pro opětovné přihlášení.
|
||||
session_timed_out=Relace byla odpojena po $1 minutách nečinnosti.
|
||||
session_save=Trvale si zapamatovat přihlášení?
|
||||
|
||||
pam_header=Přihlásit do Webminu
|
||||
pam_mesg=Chcete-li se přihlásit do Webminu na $1, musíte odpovědět na níže uvedenou otázku.
|
||||
pam_mesg2=Chcete-li se přihlásit, musíte odpovědět na níže uvedenou otázku.
|
||||
pam_login=Pokračovat
|
||||
pam_restart=Restartovat
|
||||
|
||||
acl_root=Kořenový adresář pro souborový manažer
|
||||
acl_otherdirs=Jiné viditelné adresáře v souborovém prohlížeči
|
||||
acl_nodot=Skrýt tečkované soubory v souborovém prohlížeči?
|
||||
acl_home=Domovský adresář uživatele
|
||||
acl_uedit=Uživatelé, kteří se zobrazují v manažeru uživatelů
|
||||
acl_uedit_all=Všichni uživatelé
|
||||
acl_uedit_none=Žádní uživatele
|
||||
acl_uedit_only=Pouze uživatelé
|
||||
acl_uedit_except=Všichni uživatelé kromě
|
||||
acl_uedit_uid=Uživatelé s UID v rozsahu
|
||||
acl_uedit_group=Uživatelé se skupinou
|
||||
acl_gedit=Uživatelé, kteří se zobrazují v manažeru skupin
|
||||
acl_gedit_all=AVšechny skupiny
|
||||
acl_gedit_none=Žádné skupiny
|
||||
acl_gedit_only=Pouze skupiny
|
||||
acl_gedit_gid=Skupiny s GID v rozsahu
|
||||
acl_gedit_except=Všechny skupiny kromě
|
||||
acl_feedback=Lze poslat zpětný email?
|
||||
acl_feedback2=Ano
|
||||
acl_feedback1=Ano, ale ne s konfiguračními soubory
|
||||
acl_feedback0=Ne
|
||||
acl_feedback3=Ano, s konfiguračními soubory
|
||||
acl_rpc=Lze akceptovat RPC volání?
|
||||
acl_rpc2=Pouze pro uživatele <tt>root</tt> nebo <tt>admin</tt>
|
||||
acl_rpc1=Ano
|
||||
acl_rpc0=Ne
|
||||
acl_readonly2=Uživatel je v Demo módu?
|
||||
acl_readonlyyes=Ano (Některé moduly nemusí být dostupné)
|
||||
acl_negative=Povolit uživateli práva k novým modulům?
|
||||
acl_fileunix=Prohlížet soubory pod Unix uživatelem
|
||||
acl_sameunix=Stejné přihlášení jako ve Webminu
|
||||
acl_webminsearch=Zobrazit vyhledávací pole?
|
||||
|
||||
month_1=Leden
|
||||
month_10=Říjen
|
||||
month_11=Listopad
|
||||
month_12=Prosinec
|
||||
month_2=Únor
|
||||
month_3=Březen
|
||||
month_4=Duben
|
||||
@@ -167,74 +190,19 @@ month_6=
|
||||
month_7=Červenec
|
||||
month_8=Srpen
|
||||
month_9=Září
|
||||
no=Ne
|
||||
ok=OK
|
||||
pam_header=Přihlásit do Webminu
|
||||
pam_login=Pokračovat
|
||||
pam_mesg=Chcete-li se přihlásit do Webminu na $1, musíte odpovědět na níže uvedenou otázku.
|
||||
pam_mesg2=Chcete-li se přihlásit, musíte odpovědět na níže uvedenou otázku.
|
||||
pam_restart=Restartovat
|
||||
password_clear=Vyčistit
|
||||
password_done=Vaše heslo bylo úspěšně změněno. Nyní se musíte <a href='$1'>opětovně přihlásit</a>, přičemž využijete nové heslo.
|
||||
password_emodpam=Pro změnu hesla je nutné mít nainstalovaný modul Perlu Authen::PAM!
|
||||
password_enew1=Nebylo vloženo žádné nové heslo
|
||||
password_enew2=Vámi zapsaná nová hesla se neshodují
|
||||
password_enewpass=Nové heslo není povoleno : $1
|
||||
password_eold=Nové heslo nebylo zapsáno správně
|
||||
password_epam=PAM chyba : $1
|
||||
password_err=Chyba při změně hesla
|
||||
password_euser=Vaše přihlašovací jméno nebylo nalezeno v souboru hesel!
|
||||
password_expired=Vaše heslo vypršelo, takže jej budete muset změnit.
|
||||
password_header=Vybrat nové heslo
|
||||
password_new1=Nové heslo
|
||||
password_new2=Zopakování nového hesla
|
||||
password_ok=Změnit
|
||||
password_old=Platné heslo
|
||||
password_user=Uživatelské jméno
|
||||
programname=Webmin
|
||||
progress_data=Přijato $1 bytů ($2 %)
|
||||
progress_data2=Přijato $1 bytů
|
||||
progress_done=.. Stahování dokončeno.
|
||||
progress_incache=Nalezeno $1 v cache ..
|
||||
progress_nosize=Stahování $1 ..
|
||||
progress_size=Stahování $1 ($2 bytů) ..
|
||||
readparse_cdheader=Chybějící hlavička Content-Disposition
|
||||
readparse_enc=Očekává se kódování form-data, přičemž byla doručena data v normálním kódování
|
||||
readparse_max=Data překročila maximální velikost o $1 bytů
|
||||
referer_fix1=Je-li to legitimní odkaz, můžete použít odkazy z tohoto URL následovně:<ul><li>Přihlásit se do Webminu normálním způsobem.<li>Přejít do modulu <b>Konfigurace Webminu</b>.<li>Klepnout na ikonu důvěryhodné zdroje.<li>Vložit hostname $1 do pole <b>Důvěryhodných webových sídel</b> a klepnout na <b>Uložit</b>.</ul>
|
||||
referer_fix1u=Jestliže nemůže váš prohlížeč odeslat potřebou hlavičku <tt>Referer</tt>, můžete vypnout tuto volbu následovně:<ul><li>Přihlásit se do Webminu normálním způsobem.<li>Přejít do modulu <b>Konfigurace Webminu</b>.<li>Klepnout na ikonu důvěryhodné zdroje.<li>Zkontrolovat pole <b>Důvěryhodné odkazy z neznámých zdrojů</b> a klepnout na <b>Uložit</b>.</ul>
|
||||
referer_fix2=Alternativně, můžete nastavit Webmin, aby povolil tento odkaz z příkazové řádky a to následovně:<ul><li>Přihlaste pod <tt>rootem</tt> a upravte soubor <tt>/etc/webmin/config</tt>.<li>Přidejte řádek <tt>referers=$1</tt> na konec nebo existuje-li již řádek <tt>zdroje</tt> přidejte <tt>$1</tt> do něj.<li>Uložte soubor.</ul>
|
||||
referer_fix2u=Alternativně, můžete nastavit Webmin, aby povolil odkazy z neznámých zdrojů a to následovně:<ul><li>Přihlaste pod <tt>rootem</tt> a upravte soubor <tt>/etc/webmin/config</tt>.<li>Najděte řádek <tt>referers_none=1</tt> a odstraňte jej.<li>Uložte soubor.</ul>
|
||||
referer_title=Bezpečnostní varování
|
||||
referer_warn=<b>Pozor!</b> Webmin zjistil, že program $2 byl nalinkován z URL $1 a tudíž mimo Webmin server. Tento postup může vést ke snaze spouštět nebezpečné příkazy.
|
||||
referer_warn_unknown=<b>Pozor!</b> Webmin zjistil, že program $2 byl nalinkován z neznámé URL a tudíž mimo Webmin server. Tento postup může vést ke snaze spouštět nebezpečné příkazy.
|
||||
reset=Reset
|
||||
save=Zapsat
|
||||
sday_0=Ne
|
||||
sday_1=Po
|
||||
sday_2=Út
|
||||
sday_3=St
|
||||
sday_4=Čt
|
||||
sday_5=Pá
|
||||
sday_6=So
|
||||
session_clear=Vyčistit
|
||||
session_failed=Chybné přihlášení. Zkuste to znovu.
|
||||
session_header=Přihlášení do Webminu
|
||||
session_login=Přihlásit
|
||||
session_logout=Odhlášení bylo úspěšné. Můžete použít níže uvedený formulář pro opětovné přihlášení.
|
||||
session_mesg=Pokud se chcete přihlásit k Webmin serveru na $1, musíte zadat jméno a heslo.
|
||||
session_mesg2=Pokud se chcete přihlásit, musíte zadat jméno a heslo.
|
||||
session_pass=Heslo
|
||||
session_save=Trvale si zapamatovat přihlášení?
|
||||
session_timed_out=Relace byla odpojena po $1 minutách nečinnosti.
|
||||
session_user=Uživatelské jméno
|
||||
skill_high=Expert
|
||||
skill_low=Začátečník
|
||||
skill_medium=Pokročilý
|
||||
month_10=Říjen
|
||||
month_11=Listopad
|
||||
month_12=Prosinec
|
||||
|
||||
day_0=Neděle
|
||||
day_1=Pondělí
|
||||
day_2=Úterý
|
||||
day_3=Středa
|
||||
day_4=Čtvrtek
|
||||
day_5=Pátek
|
||||
day_6=Sobota
|
||||
|
||||
smonth_1=Led
|
||||
smonth_10=Říj
|
||||
smonth_11=Lis
|
||||
smonth_12=Pro
|
||||
smonth_2=Úno
|
||||
smonth_3=Bře
|
||||
smonth_4=Dub
|
||||
@@ -243,45 +211,145 @@ smonth_6=
|
||||
smonth_7=Črc
|
||||
smonth_8=Srp
|
||||
smonth_9=Zář
|
||||
switch_remote_euser=Unix uživatel $1 neexistuje.
|
||||
ui_checkmandatory=Nebylo nic vybráno
|
||||
ui_edate=Neplatné datum
|
||||
ui_errors=Bylo nalezeno více chyb :
|
||||
ui_etime=Neplatný čas :
|
||||
smonth_10=Říj
|
||||
smonth_11=Lis
|
||||
smonth_12=Pro
|
||||
|
||||
sday_0=Ne
|
||||
sday_1=Po
|
||||
sday_2=Út
|
||||
sday_3=St
|
||||
sday_4=Čt
|
||||
sday_5=Pá
|
||||
sday_6=So
|
||||
|
||||
emodule=Přístup zamítnut : Uživatel $1 nemá oprávnění použít $2 modul
|
||||
emodulecheck=Modul $1 není ve vašem systému k dispozici
|
||||
elock_tries2=Nepodařilo se uzamčít soubor $1 po $2 minutách. Poslední chyba: $3
|
||||
|
||||
skill_high=Expert
|
||||
skill_medium=Pokročilý
|
||||
skill_low=Začátečník
|
||||
|
||||
feedback_title=Webmin ohlášení
|
||||
feedback_desc=Tento formulář umožňuje oznamovat nesrovnalosti a tím přimět Webmin vývojáře zabývat se problémy či chybějícími rysy, které jste nalezli. V momentě, kdy klepnete na tlačítko Send, údaje z formuláře budou odeslány na email $1.
|
||||
feedback_desc2=Toto ohlášení bude odesláno vývojáři Userminu, nikoliv system administratorovi, ISP nepo společnosti poskytující webhosting. Pište prosím vaše ohlášení v angličtině, pokud Webmin běží v jiném jazyce.
|
||||
feedback_header=Detaily ohlášení
|
||||
feedback_name=Vaše jméno
|
||||
feedback_email=Váš email
|
||||
feedback_module=Modul, kterého se ohlášení týká
|
||||
feedback_all=Všechny moduly
|
||||
feedback_text=Popis chyby nebo připomínky
|
||||
feedback_os=Zahrnout informace o operačním systému?
|
||||
feedback_osdesc=Pokud je tato volba vybrána, ohlášení bude obsahovat název operačního systému a jeho verzi.
|
||||
feedback_config=Zahrnout konfiguraci modulu?
|
||||
feedback_configdesc=Pokud je tato volba vybrána, ohlášení bude obsahovat konfiguraci daného modulu a obsah konfiguračních souborů, které modul využívá. Například, pokud se ohlášení týká modulu <i>Uživatelé a Skupiny</i>, bude přiložen váš <tt>/etc/passwd</tt> a <tt>/etc/shadow</tt>.
|
||||
feedback_attach=Další přílohy
|
||||
feedback_send=Odeslát ohlášení
|
||||
feedback_mailserver=Poslat prostřednictvím SMTP serveru
|
||||
feedback_mailserver_def=Místní sendmail program
|
||||
feedback_err=Chyba při odeslání ohlášení
|
||||
feedback_emodule=Zvolili jste připojení konfigurace modulu, ale nevybrali jste si modul.
|
||||
feedback_emodule2=Zvolený modul neexistuje
|
||||
feedback_econfig=Nemáte plná přístupová práva ke zvolenému modulu.
|
||||
feedback_via=Odeslané ohlášení na $1 prostřednictvím SMTP serveru $2
|
||||
feedback_prog=Odeslané ohlášení na $1 využitím sendmail programu $2
|
||||
feedback_esend=Chyba při odeslání ohlášení prostřednictvím sendmail programu or místního SMTP serveru.
|
||||
feedback_to=Odeslat ohlášení na adresy
|
||||
feedback_enoto=Nebyly vloženy žádné adresy pro odeslání ohlášení na
|
||||
feedback_ecannot=Nemáte oprávnění odesílat ohlášení
|
||||
feedback_ecannot2=Nemáte oprávnění odesílat ohlášení s připojením konfiguračních souborů
|
||||
|
||||
progress_size2=Stahování $1 ($2) ..
|
||||
progress_nosize=Stahování $1 ..
|
||||
progress_datan=Přijato $1 ($2 %)
|
||||
progress_data2n=Přijato $1
|
||||
progress_done=.. Stahování dokončeno.
|
||||
progress_incache=Nalezeno $1 v mezipaměti ..
|
||||
|
||||
readparse_cdheader=Chybějící hlavička Content-Disposition
|
||||
readparse_enc=Očekává se kódování form-data, přičemž byla doručena data v normálním kódování
|
||||
readparse_max=Data překročila maximální velikost o $1 bytů
|
||||
|
||||
password_expired=Vaše heslo vypršelo, takže jej budete muset změnit.
|
||||
password_temp=Musíte zadat nové heslo, abyste zrušil dočasné přihlášení.
|
||||
password_header=Vybrat nové heslo
|
||||
password_user=Uživatelské jméno
|
||||
password_old=Platné heslo
|
||||
password_new1=Nové heslo
|
||||
password_new2=Zopakování nového hesla
|
||||
password_ok=Změnit
|
||||
password_clear=Vyčistit
|
||||
password_done=Vaše heslo bylo úspěšně změněno. Nyní se musíte <a href='$1'>opětovně přihlásit</a>, přičemž využijete nové heslo.
|
||||
password_err=Chyba při změně hesla
|
||||
password_euser=Vaše přihlašovací jméno nebylo nalezeno v souboru hesel!
|
||||
password_eold=Nové heslo nebylo zapsáno správně
|
||||
password_enew1=Nebylo vloženo žádné nové heslo
|
||||
password_enew2=Vámi zapsaná nová hesla se neshodují
|
||||
password_epam=PAM chyba : $1
|
||||
password_emodpam=Pro změnu hesla je nutné mít nainstalovaný modul Perlu Authen::PAM!
|
||||
password_enewpass=Nové heslo není povoleno : $1
|
||||
|
||||
ui_mandatory=Toto pole je povinné
|
||||
ui_checkmandatory=Nebylo nic vybráno
|
||||
ui_errors=Bylo nalezeno více chyb :
|
||||
ui_nothing=Nebylo nic vloženo
|
||||
ui_paging=Zobrazené řádky $1 do $2 z $3
|
||||
ui_rowlabel=$2 v řádku $1 :
|
||||
ui_searchcol=Najít řádky, kde
|
||||
ui_searchfor=Obsahuje text
|
||||
ui_searchok=Hledat
|
||||
ui_selall=Vybrat vše.
|
||||
ui_selinv=Obrátit výběr.
|
||||
ui_edate=Neplatné datum
|
||||
ui_etime=Neplatný čas :
|
||||
ui_paging=Zobrazené řádky $1 do $2 z $3
|
||||
ui_rowlabel=$2 v řádku $1 :
|
||||
ui_filterbox=Typ k filtrování..
|
||||
|
||||
header_statusmsg=$1 logováno do $2 $3 na $4 ($5)
|
||||
|
||||
uptracker_title=Nahrávaný soubor
|
||||
uptracker_file=Název souboru
|
||||
uptracker_size=Velikost
|
||||
uptracker_pc=Právě běží
|
||||
uptracker_eid=Nebylo uvedeno ID uploadu specifikované
|
||||
uptracker_eid2=ID uploadu je neplatné!
|
||||
uptracker_file=Název souboru
|
||||
uptracker_of=$1 z $2
|
||||
uptracker_pc=Právě běží
|
||||
uptracker_size=Velikost
|
||||
uptracker_title=Nahrávaný soubor
|
||||
users_all=Všichni uživatelé
|
||||
users_cancel=Storno
|
||||
users_clear=Vyčistit
|
||||
users_ok=Ok
|
||||
users_sel=Vybraní uživatelé
|
||||
users_title1=Vybrat více uživatelů..
|
||||
users_title2=Vybrat uživatele..
|
||||
wsearch_config_usermin=Nastavení Userminu
|
||||
wsearch_config_webmin=Modul pro konfiguraci Webminu
|
||||
wsearch_enone=Žádný Webmin modul nebo stránka nevyhovuje $1.
|
||||
wsearch_esearch=Nebylo vloženo nic, co má být vyhledáno.
|
||||
wsearch_help=Stránka pro pomoc
|
||||
wsearch_inmod=V $1
|
||||
wsearch_mod=$1 modul
|
||||
|
||||
wsearch_title=Hledat $1
|
||||
wsearch_modt=Modul
|
||||
wsearch_mtitle=Název modulu
|
||||
wsearch_text=Text pro uživatelské rozhraní
|
||||
wsearch_title=Hledat $1
|
||||
wsearch_type=Odpovídající typ
|
||||
wsearch_what=Odpovídající stránka
|
||||
yes=Ano
|
||||
wsearch_type=Odpovídající typ
|
||||
wsearch_mod=$1 modul
|
||||
wsearch_config_webmin=Modul pro konfiguraci Webminu
|
||||
wsearch_config_usermin=Nastavení Userminu
|
||||
wsearch_help=Stránka pro pomoc
|
||||
wsearch_inmod=V $1
|
||||
wsearch_text=Text pro uživatelské rozhraní
|
||||
wsearch_esearch=Nebylo vloženo nic, co má být vyhledáno.
|
||||
wsearch_enone=Žádný Webmin modul nebo stránka nevyhovuje $1.
|
||||
wsearch_on=(V $1)
|
||||
wsearch_helpfor=Nápověda pro <i>$1</i>
|
||||
|
||||
wsearch_htext=Shodující se text
|
||||
wsearch_htype=Zdroje
|
||||
wsearch_hcgis=Reference
|
||||
wsearch_type_mod=Název Modulu
|
||||
wsearch_type_config=Konfigurace
|
||||
wsearch_type_help=Nápověda
|
||||
wsearch_type_text=Uživatelské rozhraní
|
||||
wsearch_type_dir=URL modulu
|
||||
wsearch_hmod=Modul
|
||||
wsearch_moddir=URL cesta /$1/
|
||||
wsearch_searching=Hledám $1 . .
|
||||
wsearch_found=Nalezeno $1 výsledků:
|
||||
|
||||
sql_emysqldriver=Nepodařilo se nahrát ovladač MySQL DBI
|
||||
sql_emysqlconnect=Nepodařilo se připojit k MySQL databázi : $1
|
||||
sql_epostgresqldriver=Nepodařilo se nahrát ovladač PostgreSQL DBI
|
||||
sql_epostgresqlconnect=Nepodařilo se připojit k PostgreSQL databázi : $1
|
||||
sql_eldapdriver=Nepodařilo se nahrát Perlový modul pro LDAP
|
||||
sql_eldapconnect=Nepodařilo se připojit k LDAP serveru $1
|
||||
sql_eldaptls=Nepodařilo se navázat TLS šifrování pro LDAP : $1
|
||||
sql_eldaplogin=Nepodařilo se přihlásit k LDAP serveru jako uživatel $1 : $2
|
||||
|
||||
|
||||
2
lang/no
2
lang/no
@@ -214,9 +214,9 @@ readparse_cdheader=Manglende Content-Disposition header
|
||||
readparse_enc=Forventet form-data tegnkoding, men mottok normal tegnkoding
|
||||
readparse_max=Data overskred maksimumsstørrelse på $1 bytes
|
||||
referer_fix1=Dersom dette er en gyldig lenke, kan du tillate lenker fra denne URLen på følgende måte:<ul><li>Logg inn på Webmin på vanlig måte.<li>Gå til <b>Webmin konfigurasjon</b> modulen.<li>Klikk på ikonet Betrodde referenter.<li>Skriv inn vertsnavnet $1 inn i feltet <b>Betrodde nettsteder</b>, og klikk <b>Lagre</b>.</ul>
|
||||
referer_fix1u=Dersom nettleseren din ikke sender den nødvendige <tt>Referer</tt> headeren, kan du slå av denne sjekken på følgende måte :<ul><li>Logg inn på Webmin på vanlig måte.<li>Gå til <b>Webmin konfigurasjon</b> modulen.<li>Klikk på ikonet Betrodde Referenter.<li>Kryss av i boksen <b>Stol på lenker fra ukjente referenter</b>, og klikk <b>Lagre</b>.</ul>
|
||||
referer_fix2=Alternativt kan du konfigurere Webmin til å tillate denne lenken fra kommandolinjen ved å:<ul><li>Logge inn som <tt>root</tt>, og redigere filen <tt>/etc/webmin/config</tt>.<li>Legg til linjen <tt>referers=$1</tt> på slutten, eller dersom en <tt>referers</tt> linje allerede finnes legger du til <tt>$1</tt> til den.<li>Lagre filen.</ul>
|
||||
referer_fix2u=Alternativt kan du konfigurere Webmin til å tillate lenker fra ukjente referenter ved å :<ul><li>Logge inn som <tt>root</tt>, og redigere filen <tt>/etc/webmin/config</tt>.<li>Finn linjen <tt>referers_none=1</tt> og endre den til <tt>referers_none=0</tt>.<li>Lagre filen.</ul>
|
||||
referer_fix3u=Forsikre deg om at nettleseren din er konfigurert til å sende referer-informasjon slik at den kan verifiseres av Webmin
|
||||
referer_title=Sikkerhetsadvarsel
|
||||
referer_warn=<b>Advarsel!</b> Webmin har oppdaget at URL $1 linken til programmet $2, ser ut til å vare utenfor Webmin serveren. Dette kan vare ett forsøk på å lure din server til å utføre ett farligt kommando.
|
||||
referer_warn_unknown=<b>Advarsel!</b> Webmin har oppdaget at programmet $1 ble lenket til fra en ukjent URL, som ser ut til å ligge utenfor Webmin serveren. Dette kan være ett forsøk på å lure din server til å utføre en farlig kommando.
|
||||
|
||||
@@ -15,3 +15,5 @@ Improved support for older versions of Net::LDAP without the hosts() function.
|
||||
If a TLS certificate and key are defined in the LDAP client configuration file, they will be used by Webmin when connecting to the LDAP database.
|
||||
---- Changes since 1.690 ----
|
||||
Added support for nslcd as seen on CentOS 6 and above.
|
||||
---- Changes since 1.740 ----
|
||||
Various fixes needed to support the new NSLCD LDAP client used by CentOS 7.
|
||||
|
||||
@@ -8,8 +8,24 @@ $conf = &get_config();
|
||||
print &ui_form_start("save_base.cgi", "post");
|
||||
print &ui_table_start($text{'base_header'}, "width=100%", 2);
|
||||
|
||||
@bases = &find_value("base", $conf);
|
||||
@scopes = &find_value("scope", $conf);
|
||||
@filters = &find_value("filter", $conf);
|
||||
|
||||
if (&get_ldap_client() eq "nss") {
|
||||
# Base is just one directive
|
||||
$base = $bases[0];
|
||||
$scope = $scopes[0];
|
||||
$filter = $filters[0];
|
||||
}
|
||||
else {
|
||||
# Default base, scope and filter are the ones with no DB
|
||||
($base) = grep { /^\S+$/ } @bases;
|
||||
($scope) = grep { /^\S+$/ } @scopes;
|
||||
($filter) = grep { /^\S+$/ } @filters;
|
||||
}
|
||||
print &ui_table_row($text{'base_base'},
|
||||
&ui_textbox("base", &find_svalue("base", $conf), 50)."\n".
|
||||
&ui_textbox("base", $base, 50)."\n".
|
||||
&base_chooser_button("base", 0));
|
||||
|
||||
$scopes = [ [ "", $text{'default'} ],
|
||||
@@ -17,7 +33,7 @@ $scopes = [ [ "", $text{'default'} ],
|
||||
[ "one", $text{'base_sone'} ],
|
||||
[ "base", $text{'base_sbase'} ] ];
|
||||
print &ui_table_row($text{'base_scope'},
|
||||
&ui_select("scope", &find_svalue("scope", $conf), $scopes));
|
||||
&ui_select("scope", $scope, $scopes));
|
||||
|
||||
print &ui_table_row($text{'base_timelimit'},
|
||||
&ui_opt_textbox("timelimit", &find_svalue("timelimit", $conf), 5,
|
||||
@@ -25,16 +41,29 @@ print &ui_table_row($text{'base_timelimit'},
|
||||
|
||||
$sp = " " x 5;
|
||||
foreach $b (@base_types) {
|
||||
local $base = &find_svalue("nss_base_".$b, $conf);
|
||||
local ($scope, $filter);
|
||||
if ($base =~ /^(.*)\?(.*)\?(.*)$/) {
|
||||
$base = $1;
|
||||
$scope = $2;
|
||||
$filter = $3;
|
||||
local ($base, $scope, $filter);
|
||||
if (&get_ldap_client() eq "nss") {
|
||||
# Older LDAP config uses directives like nss_base_passwd, with
|
||||
# the scope and filter separated by ?
|
||||
$base = &find_svalue("nss_base_".$b, $conf);
|
||||
if ($base =~ /^(.*)\?(.*)\?(.*)$/) {
|
||||
$base = $1;
|
||||
$scope = $2;
|
||||
$filter = $3;
|
||||
}
|
||||
elsif ($base =~ /^(.*)\?(.*)$/) {
|
||||
$base = $1;
|
||||
$scope = $2;
|
||||
}
|
||||
}
|
||||
elsif ($base =~ /^(.*)\?(.*)$/) {
|
||||
$base = $1;
|
||||
$scope = $2;
|
||||
else {
|
||||
# Newer LDAP config uses
|
||||
($base) = map { /^\S+\s+(\S+)/; $1 }
|
||||
grep { /^\Q$b\E\s/ } @bases;
|
||||
($scope) = map { /^\S+\s+(\S+)/; $1 }
|
||||
grep { /^\Q$b\E\s/ } @scopes;
|
||||
($filter) = map { /^\S+\s+(\S+)/; $1 }
|
||||
grep { /^\Q$b\E\s/ } @filters;
|
||||
}
|
||||
print &ui_table_row($text{'base_'.$b},
|
||||
&ui_opt_textbox("base_$b", $base, 50, $text{'base_global'})." ".
|
||||
|
||||
@@ -50,6 +50,8 @@ if ($config{'init_name'} &&
|
||||
($st = &init::action_status($config{'init_name'}))) {
|
||||
# Start or stop
|
||||
if (&init::status_action($config{'init_name'}) == 1) {
|
||||
print &ui_buttons_row("restart.cgi", $text{'index_restart'},
|
||||
$text{'index_restartdesc'});
|
||||
print &ui_buttons_row("stop.cgi", $text{'index_stop'},
|
||||
$text{'index_stopdesc'});
|
||||
}
|
||||
|
||||
@@ -10,6 +10,8 @@ index_stop=Atura el Dimoni Client LDAP
|
||||
index_stopdesc=Tanca el dimoni client LDAP local, cosa que és necessària per consultar el servidor LDAP remot.
|
||||
index_start=Inicia el Dimoni Client LDAP
|
||||
index_startdesc=Inicia el dimoni client LDAP local, cosa que és necessària per a consultar el servidor LDAP remot. Fins que no s'hagi iniciat, els usuaris i grups LDAP no seran accessibles.
|
||||
index_restart=Reinicia el Dimoni Client LDAP
|
||||
index_restartdesc=Aplica la configuració actual reiniciant el dimoni client LDAP local.
|
||||
index_atboot=Inicia el Client LDAP Client En Engegar
|
||||
index_atbootdesc=Canvia si el dimoni client LDAP s'ha diniciar en engegar el sistema o no.
|
||||
|
||||
@@ -212,6 +214,7 @@ log_atboot=S'ha activat el dimoni client LDAP en engegar el sistema
|
||||
log_delboot=S'ha desactivat el dimoni client LDAP en engegar el sistema
|
||||
log_start=S'ha iniciat el dimoni client LDAP
|
||||
log_stop=S'ha aturat el dimoni client LDAP
|
||||
log_restart=S'ha reiniciar el dimoni client LDAP
|
||||
|
||||
check_title=Validació de Configuració LDAP
|
||||
check_base=S'està buscant la base LDAP dels usuaris...
|
||||
|
||||
@@ -1,24 +1,60 @@
|
||||
__norefs=1
|
||||
base_aliases=Basis für E-Mail-Aliase
|
||||
base_base=Globale Suchbasis
|
||||
base_bfilter=Suchfilter
|
||||
base_bscope=Suchtiefe
|
||||
base_ealiases=Fehlende Basis für E-Mail-Aliase
|
||||
base_ebase=Fehlende globale Suchbasis
|
||||
base_egroup=Fehlende Basis für Unix Gruppen
|
||||
base_ehosts=Fehlende Basis für Hostnamen
|
||||
base_enetgroup=Fehlende Basis für Netzgruppen
|
||||
base_enetmasks=Fehlende Basis für Netzwerknamen
|
||||
base_enetworks=Fehlende Basis für Netzwerknamen
|
||||
base_epasswd=Fehlende Basis für Unix Benutzer
|
||||
base_eprotocols=Fehlende Basis für Protokolle
|
||||
base_err=Fehlgeschlagen LDAP Suchbasen zu speichern
|
||||
base_eservices=Fehlende Basis für Netzwerkdienste
|
||||
base_eshadow=Fehlende Basis für Unix Passwörter
|
||||
base_etimelimit=Fehlende oder ungültige Suchfrist
|
||||
base_global=Globale Basis
|
||||
base_group=Basis für Unix Gruppen
|
||||
base_header=LDAP Verzeichnis Suchorte
|
||||
base_hosts=Basis für Hostnamen
|
||||
base_netgroup=Basis für Netzgruppen
|
||||
base_netmasks=Basis für Netzwerknamen
|
||||
base_networks=Basis für Netzwerknamen
|
||||
base_passwd=Basis für Unix Benutzer
|
||||
base_protocols=Basis für Protokolle
|
||||
base_sbase=Nur Basis
|
||||
base_scope=Suchtiefe
|
||||
base_secs=Sekunden
|
||||
base_services=Basis für Netzwerkdienste
|
||||
base_shadow=Basis für Unix Passwörter
|
||||
base_sone=Eine Level
|
||||
base_ssub=Kompletter Teilbaum
|
||||
base_timelimit=Such-Frist
|
||||
base_title=LDAP Such-Basen
|
||||
browser_attrs=Objektattribute
|
||||
browser_base=Browse:
|
||||
browser_econn=Der LDAP-Browser können nicht verwendet werden : $1
|
||||
browser_esearch=LDAP-Suche fehlgeschlagen : $1
|
||||
browser_none=Keine
|
||||
browser_ok=Zeigen
|
||||
browser_parent=Durchsuche Übergeordnetes
|
||||
browser_sel=OK
|
||||
browser_subs=Untergeordnete Objekte
|
||||
browser_title=LDAP Browser
|
||||
check_base=Finde LDAP Basis für Benutzer ..
|
||||
check_based=...Basis gefunden $1.
|
||||
check_connect=Verbinde zu LDAP Server ..
|
||||
check_connected=.. verbunden mit $1
|
||||
check_done=Ihr System wurde erfolgreich als LDAP-Client konfiguriert!
|
||||
check_ebase=.. keine Basis in Client Konfiguration gefunden!
|
||||
check_econnect=...Verbindung fehlgeschlagen : $1
|
||||
check_ematch=...Benutzer existiert nicht.
|
||||
check_enss=.. Dienst ist nicht eingestellt LDAP zu benutzen.
|
||||
check_esearch=...Suche fehlgeschlagen : $1
|
||||
check_eusers=.. keine Benutzer bei der Basis $1 gefunden.
|
||||
check_found=.. $1 Benutzer gefunden.
|
||||
check_match=Schaue nach Unix Benutzer $1 ..
|
||||
check_matched=.. Benutzer erfolgreich gefunden.
|
||||
@@ -85,9 +121,12 @@ index_atbootdesc=Ändert, ob der LDAP-Client Dämon beim Booten gestarte
|
||||
index_check=Überprüfe Konfiguration
|
||||
index_checkdesc=Klicken Sie auf diese Schaltfläche, um Webmin ver veranlassen Ihren LDAP-Server-Konfiguration zu validieren, indem sichergestellt wird, dass der Server kontaktiert werden kann und dass dieser Benutzer und Gruppen enthält.
|
||||
index_econf=Der NSS-LDAP-Konfigurationsdatei $1 wurde auf Ihrem System nicht gefunden. Vielleicht ist die LDAP-Client-Unterstützung nicht installiert, oder die <a href='$2'>Modulkonfiguration</a> ist falsch.
|
||||
index_fix=Behebe durch Linken von Dateien
|
||||
index_fixpam=<b>Warnung</b> - Webmin hat zwei separaten LDAP-Konfigurations-Dateien auf Ihrem System erkannt. NSS-LDAP ist konfiguriert $1 zu nutzen, während PAM-LDAP verwendet $2 nutzt. Dies kann Unstimmigkeiten zwischen den beiden Diensten führen.
|
||||
index_ignore=Zeige diese Nachricht nicht
|
||||
index_ldapmod=LDAP Client
|
||||
index_restart=LDAP Client Daemon neu gestartet
|
||||
index_restartdesc=Übernehme die aktuelle Konfiguration durch den Neustart des lokalen LDAP-Client-Daemons.
|
||||
index_return=Modul Index
|
||||
index_start=Starte LDAP Client Dämon
|
||||
index_startdesc=Startet den lokalen LDAP-Client Dämon herunter, welcher benötigt wird um den entfernten LDAP-Server abzufragen. Bis dieser gestartet ist können Benutzer und Gruppen in LDAP nicht zugreifen.
|
||||
@@ -103,9 +142,11 @@ ldap_emodule2=Das Perl-Modul $1, welche zum Kommunizieren mit dem LDAP-Server be
|
||||
ldap_eparse=Konnte nicht den LDAP-Server URI $1 analysieren
|
||||
ldap_etls=Fehlgeschlagen zum TLS-Modus zu wechseln : $1
|
||||
log_atboot=LDAP Client beim Booten aktiviert
|
||||
log_base=LDAP Such Basis modifiziert
|
||||
log_delboot=LDAP Client beim Booten deaktviert
|
||||
log_modify_switch=Ändere Dienst $1
|
||||
log_pam=Authentifizierungsoptionen geändert
|
||||
log_restart=LDAP Client Daemon neu gestartet
|
||||
log_server=LDAP Server Konfiguration modifiziert
|
||||
log_start=LDAP Client Dämon gestartet
|
||||
log_stop=LDAP Client Dämon gestoppt
|
||||
|
||||
@@ -10,6 +10,8 @@ index_stop=Stop LDAP Client Daemon
|
||||
index_stopdesc=Shut down the local LDAP client daemon, which is needed to query the remote LDAP server.
|
||||
index_start=Start LDAP Client Daemon
|
||||
index_startdesc=Start up the local LDAP client daemon, which is needed to query the remote LDAP server. Until it is started, users and groups in LDAP will not be accessible.
|
||||
index_restart=Restart LDAP Client Daemon
|
||||
index_restartdesc=Apply the current configuration by restarting the local LDAP client daemon.
|
||||
index_atboot=Start LDAP Client At Boot
|
||||
index_atbootdesc=Changes whether the LDAP client daemon is started when the system boots up or not.
|
||||
|
||||
@@ -212,6 +214,7 @@ log_atboot=Enabled LDAP client daemon at boot time
|
||||
log_delboot=Disabled LDAP client daemon at boot time
|
||||
log_start=Started LDAP client daemon
|
||||
log_stop=Stopped LDAP client daemon
|
||||
log_restart=Restarted LDAP client daemon
|
||||
|
||||
check_title=Validating LDAP Configuration
|
||||
check_base=Finding LDAP base for users ..
|
||||
|
||||
@@ -45,6 +45,7 @@ return \@get_config_cache;
|
||||
}
|
||||
|
||||
# find(name, &conf, disabled-mode)
|
||||
# Returns the directive objects with some name
|
||||
sub find
|
||||
{
|
||||
local ($name, $conf, $dis) = @_;
|
||||
@@ -60,7 +61,8 @@ elsif ($dis == 1) {
|
||||
return wantarray ? @rv : $rv[0];
|
||||
}
|
||||
|
||||
# find_value(name, &conf)
|
||||
# find_value(name, &conf, [disabled])
|
||||
# Finds the value or values of a directive
|
||||
sub find_value
|
||||
{
|
||||
local ($name, $conf, $dis) = @_;
|
||||
@@ -68,51 +70,61 @@ local @rv = map { $_->{'value'} } &find($name, $conf, $dis);
|
||||
return wantarray ? @rv : $rv[0];
|
||||
}
|
||||
|
||||
# find_svalue(name, &conf, [disabled])
|
||||
# Like find_value, but only returns a single value
|
||||
sub find_svalue
|
||||
{
|
||||
local $rv = &find_value(@_);
|
||||
return $rv;
|
||||
}
|
||||
|
||||
# save_directive(&conf, name, [value])
|
||||
# save_directive(&conf, name, [value|&values])
|
||||
# Update one or more directives with some name
|
||||
sub save_directive
|
||||
{
|
||||
local ($conf, $name, $value) = @_;
|
||||
local $old = &find($name, $conf);
|
||||
local $oldcmt = &find($name, $conf, 1);
|
||||
local ($conf, $name, $valuez) = @_;
|
||||
local @values = ref($valuez) ? @$valuez : ( $valuez );
|
||||
local @old = &find($name, $conf);
|
||||
local @oldcmt = &find($name, $conf, 1);
|
||||
local $deffile = &get_ldap_config_file();
|
||||
local $lref = &read_file_lines($old ? $old->{'file'} :
|
||||
$oldcmt ? $oldcmt->{'file'} :
|
||||
$deffile);
|
||||
if (defined($value) && $old) {
|
||||
# Just update value
|
||||
$old->{'value'} = $value;
|
||||
$lref->[$old->{'line'}] = "$name $value";
|
||||
}
|
||||
elsif (defined($value) && $oldcmt) {
|
||||
# Add value after commented version
|
||||
splice(@$lref, $oldcmt->{'line'}+1, 0, "$name $value");
|
||||
&renumber($conf, $oldcmt->{'line'}+1, $oldcmt->{'file'}, 1);
|
||||
push(@$conf, { 'name' => $name,
|
||||
'value' => $value,
|
||||
'enabled' => 1,
|
||||
'line' => $oldcmt->{'line'}+1,
|
||||
'file' => $oldcmt->{'file'} });
|
||||
}
|
||||
elsif (!defined($value) && $old) {
|
||||
# Delete current value
|
||||
splice(@$lref, $old->{'line'}, 1);
|
||||
&renumber($conf, $old->{'line'}, $old->{'file'}, -1);
|
||||
@$conf = grep { $_ ne $old } @$conf;
|
||||
}
|
||||
elsif ($value) {
|
||||
# Add value at end of file
|
||||
push(@$conf, { 'name' => $name,
|
||||
'value' => $value,
|
||||
'enabled' => 1,
|
||||
'line' => scalar(@$lref),
|
||||
'file' => $deffile });
|
||||
push(@$lref, "$name $value");
|
||||
|
||||
for(my $i=0; $i<@old || $i<@values; $i++) {
|
||||
local $old = $old[$i];
|
||||
local $oldcmt = $oldcmt[$i];
|
||||
local $value = $values[$i];
|
||||
local $lref = &read_file_lines($old ? $old->{'file'} :
|
||||
$oldcmt ? $oldcmt->{'file'} :
|
||||
$deffile);
|
||||
if (defined($value) && $old) {
|
||||
# Just update value
|
||||
$old->{'value'} = $value;
|
||||
$lref->[$old->{'line'}] = "$name $value";
|
||||
}
|
||||
elsif (defined($value) && $oldcmt) {
|
||||
# Add value after commented version
|
||||
splice(@$lref, $oldcmt->{'line'}+1, 0, "$name $value");
|
||||
&renumber($conf, $oldcmt->{'line'}+1, $oldcmt->{'file'}, 1);
|
||||
push(@$conf, { 'name' => $name,
|
||||
'value' => $value,
|
||||
'enabled' => 1,
|
||||
'line' => $oldcmt->{'line'}+1,
|
||||
'file' => $oldcmt->{'file'} });
|
||||
}
|
||||
elsif (!defined($value) && $old) {
|
||||
# Delete current value
|
||||
splice(@$lref, $old->{'line'}, 1);
|
||||
&renumber($conf, $old->{'line'}, $old->{'file'}, -1);
|
||||
@$conf = grep { $_ ne $old } @$conf;
|
||||
}
|
||||
elsif ($value) {
|
||||
# Add value at end of file
|
||||
push(@$conf, { 'name' => $name,
|
||||
'value' => $value,
|
||||
'enabled' => 1,
|
||||
'line' => scalar(@$lref),
|
||||
'file' => $deffile });
|
||||
push(@$lref, "$name $value");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -434,5 +446,12 @@ if ($changed) {
|
||||
&unlock_file($afile);
|
||||
}
|
||||
|
||||
# get_ldap_client()
|
||||
# Returns either "nss" or "nslcd" depending on the LDAP client being used
|
||||
sub get_ldap_client
|
||||
{
|
||||
return $config{'auth_ldap'} =~ /nslcd/ ? 'nslcd' : 'nss';
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
|
||||
15
ldap-client/restart.cgi
Executable file
15
ldap-client/restart.cgi
Executable file
@@ -0,0 +1,15 @@
|
||||
#!/usr/local/bin/perl
|
||||
# Re-start the LDAP client daemon
|
||||
|
||||
require './ldap-client-lib.pl';
|
||||
&error_setup($text{'start_err'});
|
||||
|
||||
&fix_ldap_authconfig();
|
||||
&foreign_require("init");
|
||||
&init::stop_action($config{'init_name'});
|
||||
($ok, $out) = &init::start_action($config{'init_name'});
|
||||
$ok || &error($out);
|
||||
|
||||
&webmin_log("restart");
|
||||
&redirect("");
|
||||
|
||||
@@ -10,10 +10,11 @@ $conf = &get_config();
|
||||
|
||||
# Validate and save inputs, starting with global base
|
||||
$in{'base'} =~ /\S/ || &error($text{'base_ebase'});
|
||||
&save_directive($conf, "base", $in{'base'});
|
||||
@bases = ( $in{'base'} );
|
||||
|
||||
# Save scope
|
||||
&save_directive($conf, "scope", $in{'scope'} || undef);
|
||||
@scopes = ( );
|
||||
push(@scopes, $in{'scope'}) if ($in{'scope'});
|
||||
|
||||
# Save time limit
|
||||
if ($in{'timelimit_def'}) {
|
||||
@@ -26,21 +27,50 @@ else {
|
||||
|
||||
# Save per-service bases
|
||||
foreach $b (@base_types) {
|
||||
local $base;
|
||||
if ($in{"base_".$b."_def"}) {
|
||||
&save_directive($conf, "nss_base_".$b, undef);
|
||||
$base = undef;
|
||||
}
|
||||
else {
|
||||
local $base = $in{"base_".$b};
|
||||
$base = $in{"base_".$b};
|
||||
$base =~ /\S/ || &error($text{'base_e'.$b});
|
||||
if ($in{'scope_'.$b}) {
|
||||
$base .= "?".$in{'scope_'.$b};
|
||||
if (&get_ldap_client() eq "nss") {
|
||||
# Scope is appended to the base
|
||||
$base .= "?".$in{'scope_'.$b};
|
||||
}
|
||||
else {
|
||||
# Scopes are saved separately
|
||||
push(@scopes, $b." ".$in{'scope_'.$b});
|
||||
}
|
||||
}
|
||||
if ($in{'filter_'.$b}) {
|
||||
$base .= "?" if ($in{'scope_'.$b});
|
||||
$file .= "?".$in{'filter_'.$b};
|
||||
if (&get_ldap_client() eq "nss") {
|
||||
# Filter is appended to the base
|
||||
$base .= "?" if ($in{'scope_'.$b});
|
||||
$file .= "?".$in{'filter_'.$b};
|
||||
}
|
||||
else {
|
||||
# Filters are saved separately
|
||||
push(@filters, $b." ".$in{'filter_'.$b});
|
||||
}
|
||||
}
|
||||
}
|
||||
if (&get_ldap_client() eq "nss") {
|
||||
# Update DB-specific directive
|
||||
&save_directive($conf, "nss_base_".$b, $base);
|
||||
}
|
||||
else {
|
||||
# Add to list of base directives to save
|
||||
push(@bases, $b." ".$base) if ($base);
|
||||
}
|
||||
}
|
||||
|
||||
# Save all base, scope and filter directives
|
||||
&save_directive($conf, "base", \@bases);
|
||||
&save_directive($conf, "scope", \@scopes);
|
||||
if (&get_ldap_client() eq "nslcd") {
|
||||
&save_directive($conf, "filter", \@filters);
|
||||
}
|
||||
|
||||
# Write out config
|
||||
|
||||
@@ -75,7 +75,7 @@ sub list_switch_sources
|
||||
if ($gconfig{'os_type'} =~ /-linux$/) {
|
||||
# All Linux variants
|
||||
return ( [ 'files', 'nisplus', 'nis', 'compat', 'dns', 'db',
|
||||
'hesiod', 'ldap' ],
|
||||
'hesiod', 'ldap', 'sss' ],
|
||||
{ 'dns' => [ 'hosts' ],
|
||||
'compat' => [ 'passwd', 'shadow', 'group' ] } );
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user