Compare commits

...

29 Commits

Author SHA1 Message Date
Ilia Ross
a67e327627 Fix to dynamically list auth plugins in MySQL/MariaDB 2025-03-29 16:25:42 +02:00
Ilia Ross
99889c1f30 Fix to use prepared statement instead when getting account lock status 2025-03-29 16:00:30 +02:00
Ilia Ross
42b8f2c25c Add support for account locking in MariaDB 2025-03-29 15:53:37 +02:00
Ilia Ross
6905548fa4 Fix to correctly set the password with auth plugin
https://forum.virtualmin.com/t/maria-db-failed-to-save-user/132794/4
2025-03-29 15:19:34 +02:00
Jamie Cameron
4ae5ec1694 Fix links to edit pages with non-original zone types
https://github.com/webmin/webmin/issues/2443
2025-03-27 07:22:54 -07:00
Jamie Cameron
f3a841d2b9 Merge branch 'master' of github.com:webmin/webmin 2025-03-23 10:42:53 -07:00
Jamie Cameron
2aee714a81 Handle case where two interfaces are modified
https://github.com/webmin/webmin/issues/1546
2025-03-23 10:42:45 -07:00
Ilia Ross
16fec003dc Fix to use shell command with direct file writing for EOL data file 2025-03-23 15:44:36 +02:00
Ilia Ross
fdbf960a2c Fix to use dmesg -T for Linux systems #2442 2025-03-23 03:07:50 +02:00
Ilia Ross
e8b2b21bce Fix to stop rebuilding on release edit
[no-build]
2025-03-22 18:56:44 +02:00
Ilia Ross
1f07fdb274 Fix to prefer JSON::XS over JSON::PP if available for better performance 2025-03-21 16:55:32 +02:00
Ilia Ross
7b85a75a2b Fix not to add ? unless there is a query
[no-build]
2025-03-21 12:54:08 +02:00
Ilia Ross
2185f2068d Update pod
[no-build]
2025-03-21 12:53:05 +02:00
Jamie Cameron
e60be7133b Add support for template variables to help pages 2025-03-20 20:02:47 -07:00
Jamie Cameron
4021b6d8bb Merge branch 'master' of github.com:webmin/webmin 2025-03-20 15:08:23 -07:00
Jamie Cameron
5a777e9395 Dynamic updates may also be enabled globally
https://forum.virtualmin.com/t/virtualmin-dns-fails-to-detect-rndc-freeze-is-needed/132653
2025-03-20 14:55:54 -07:00
Ilia Ross
51e2ebec70 Merge pull request #2441 from MacSteini/master
Update de
2025-03-20 14:12:43 +02:00
MacSteini
afe100d9f0 Update de 2025-03-20 11:26:56 +00:00
Jamie Cameron
eca9472980 Merge pull request #2437 from webmin/dev/fix-dovecot-listen
Add support to configure listen for any type of address
2025-03-19 18:53:53 -07:00
Ilia Ross
62c02d1273 Add TOML as editable by default #2438 2025-03-20 03:23:33 +02:00
Ilia Ross
d74e7e66c5 Fix to simplify regex check 2025-03-19 13:31:37 +02:00
Jamie Cameron
7250c44648 We can use the -cgi binary as a fallback 2025-03-18 21:58:22 -07:00
Jamie Cameron
31c7e63407 Show the PHP binary and version 2025-03-18 21:56:30 -07:00
Ilia Ross
264ecae147 Fix regex to match more accurately 2025-03-19 02:15:55 +02:00
Ilia Ross
6dd8915808 Fix to simplify check 2025-03-19 02:13:25 +02:00
Ilia Ross
48602503cd Add support to configure listen for any type of address
https://github.com/webmin/webmin/issues/2436
2025-03-18 14:04:38 +02:00
Jamie Cameron
13acaeece7 Stop creating a changelog that is no longer used 2025-03-17 15:49:07 -07:00
Jamie Cameron
bb787e4e1c Merge branch 'master' of github.com:webmin/webmin 2025-03-17 15:15:41 -07:00
Jamie Cameron
d4fab15024 No need to switch users if we already switched 2025-03-17 15:15:36 -07:00
22 changed files with 419 additions and 291 deletions

View File

@@ -7,7 +7,6 @@ on:
release:
types:
- published
- edited
jobs:
build:

View File

@@ -2508,6 +2508,11 @@ if ($changed || !$znc{'version'} ||
# Yes .. need to rebuild
%znc = ( );
my $conf = &get_config();
my $gau;
my $opts = &find("options", $conf);
if ($opts && &find("update", $opts->{'members'})) {
$gau = 1;
}
my @views = &find("view", $conf);
my $n = 0;
foreach my $v (@views) {
@@ -2535,7 +2540,7 @@ if ($changed || !$znc{'version'} ||
$file ||= ""; # slaves and other types with no file
my $up = &find("update-policy", $z->{'members'});
my $au = &find("allow-update", $z->{'members'});
my $dynamic = $up || $au ? 1 : 0;
my $dynamic = $up || $au || $gau ? 1 : 0;
$znc{"zone_".($n++)} = join("\t", $z->{'value'},
$z->{'index'}, $type, "*", $dynamic, $file);
$files{$z->{'file'}}++;

View File

@@ -26,6 +26,10 @@ foreach my $z (@zones) {
$v eq "." || !&can_edit_zone($z) ||
&arpa_to_ip($v) !~ /\Q$in{'search'}\E/i);
my $t = $z->{'type'};
next if (!$t);
$t = "delegation" if ($t eq "delegation-only");
$t = "master" if ($t eq "primary");
$t = "slave" if ($t eq "secondary");
if ($z->{'view'}) {
push(@zlinks, "edit_$t.cgi?zone=$z->{'name'}".
"&view=$z->{'viewindex'}");

View File

@@ -32,21 +32,27 @@ print &ui_table_row($text{'net_ssl_disable'},
[ @opts,
[ "", &getdef($sslopt, \@opts) ] ]));
@listens = &find("imap_listen", $conf, 2) ?
my @listens = &find("imap_listen", $conf, 2) ?
("imap_listen", "pop3_listen", "imaps_listen", "pop3s_listen") :
("listen", "ssl_listen");
("listen");
my $mode;
foreach $l (@listens) {
$listen = &find_value($l, $conf);
$mode = !$listen ? 0 :
$listen eq "[::]" ? 1 :
$listen eq "*" ? 2 : 3,
my $v = &find_value($l, $conf);
$mode = !$v ? 0 :
# All interfaces, put in any order, e.g. "[::], *" or "*, ::"
$v =~ /^\*,\s*(::|\[::\])$/ || $v =~ /^(::|\[::\]),\s*\*$/ ? 1 :
# IPv6 only, e.g. "[::]" or "::"
$v eq '::' || $v eq '[::]' ? 4 :
# IPv4 only, e.g. "*"
$v eq "*" ? 2 : 3,
print &ui_table_row($text{'net_'.$l},
&ui_radio($l."_mode", $mode,
[ [ 0, $text{'net_listen0'} ],
[ 1, $text{'net_listen1'} ],
[ 2, $text{'net_listen2'} ],
[ 4, $text{'net_listen4'} ],
[ 3, $text{'net_listen3'} ] ])."\n".
&ui_textbox($l, $mode == 3 ? $listen : "", 20), 3);
&ui_textbox($l, $mode == 3 ? $v : "", 40), 3);
}
print &ui_table_end();

View File

@@ -1,25 +1,25 @@
index_ecmd=Das Dovecot-Serverprogramm $1 wurde auf Ihrem System nicht gefunden. Möglicherweise ist es nicht installiert oder die <a href='$2'>Modulkonfiguration</a> ist falsch.
index_econf=Die Dovecot-Konfigurationsdatei $1 wurde auf Ihrem System nicht gefunden. Möglicherweise ist sie nicht installiert oder die <a href='$2'>Modulkonfiguration</a> ist falsch.
index_ecmd=Das Dovecot-Serverprogramm $1 wurde auf Ihrem System nicht gefunden. Möglicherweise ist es nicht installiert oder die <a href='$2'>Modulkonfiguration</a> ist fehlerhaft.
index_econf=Die Dovecot-Konfigurationsdatei $1 wurde auf Ihrem System nicht gefunden. Möglicherweise ist sie nicht installiert oder die <a href='$2'>Modulkonfiguration</a> ist fehlerhaft.
index_dovecot=Dovecot
index_stop=Dovecot-Server stoppen
index_stopdesc=Den laufenden Dovecot IMAP/POP3-Serverprozess herunterfahren. Dies verhindert, dass Benutzer ihre E-Mails herunterladen.
index_stopdesc=Beendet den laufenden Dovecot IMAP/POP3-Serverprozess. Dadurch wird verhindert, dass Benutzer:innen ihre E-Mails herunterladen können.
index_start=Dovecot-Server starten
index_startdesc=Den Dovecot IMAP/POP3-Serverprozess starten, damit Benutzer ihre E-Mails herunterladen können.
index_apply=Konfiguration anwenden
index_applydesc=Aktivieren Sie die aktuelle Dovecot-Konfiguration, indem Sie den Serverprozess stoppen und neu starten.
index_startdesc=Startet den Dovecot IMAP/POP3-Serverprozess, damit Benutzer:innen ihre E-Mails herunterladen können.
index_apply=Konfiguration übernehmen
index_applydesc=Aktiviert die aktuelle Dovecot-Konfiguration durch Stoppen und erneutes Starten des Serverprozesses.
index_boot=Beim Systemstart starten?
index_bootdesc=Ändern Sie diese Einstellung, um den Start des Dovecot-Servers beim Systemstart zu aktivieren oder zu deaktivieren.
index_return=Modulindex
index_version=Version $1
stop_err=Dovecot konnte nicht gestoppt werden
stop_erunning=Nicht mehr in Betrieb
stop_erunning=Nicht mehr aktiv
start_err=Dovecot konnte nicht gestartet werden
apply_err=Konfiguration konnte nicht angewendet werden
apply_err=Konfiguration konnte nicht übernommen werden
net_title=Netzwerk- und Protokolleinstellungen
net_header=Dovecot Netzwerk- und Mailprotokoll-Optionen
net_protocols=Zu bedienende Mail-Protokolle
net_title=Netzwerk und Protokolle
net_header=Netzwerk- und Mailprotokolloptionen für Dovecot
net_protocols=Bereitzustellende Mail-Protokolle
net_pop3=POP3
net_imap=IMAP
net_pop3s=POP3 (SSL)
@@ -29,136 +29,132 @@ net_ssl_disable=SSL-Verbindungen akzeptieren?
net_ssl_required=Nur SSL-Verbindungen akzeptieren
net_imap_listen=Schnittstellen für IMAP-Verbindungen
net_pop3_listen=Schnittstellen für POP3-Verbindungen
net_imaps_listen=Schnittstellen für IMAP SSL-Verbindungen
net_pop3s_listen=Schnittstellen für POP3 SSL-Verbindungen
net_listen=Schnittstellen für Nicht-SSL-Verbindungen
net_ssl_listen=Schnittstellen für SSL-Verbindungen
net_imaps_listen=Schnittstellen für IMAP-SSL-Verbindungen
net_pop3s_listen=Schnittstellen für POP3-SSL-Verbindungen
net_listen=Lauschen auf
net_listen0=Standard
net_listen1=Alle IPv4- und IPv6-Adressen
net_listen2=Alle IPv4-Adressen
net_listen4=Alle IPv6-Adressen
net_listen3=IP-Adresse
net_err=Netzwerkoptionen konnten nicht gespeichert werden
net_eimap_listen=Ungültige IP-Adresse für IMAP-Verbindungen
net_epop3_listen=Ungültige IP-Adresse für POP3-Verbindungen
net_eimaps_listen=Ungültige IP-Adresse für IMAP SSL-Verbindungen
net_epop3s_listen=Ungültige IP-Adresse für POP3 SSL-Verbindungen
net_elisten=Ungültige IP-Adresse für Nicht-SSL-Verbindungen
net_essl_listen=Ungültige IP-Adresse für SSL-Verbindungen
net_ealisten=Ungültige IP-Adresse für das Lauschen: <tt>$1</tt>
net_ealisten_invalid_mix=Eine einzelne IP-Adresse <tt>$1</tt> kann nicht zusammen mit dem Platzhalter <tt>$2</tt> verwendet werden. Geben Sie entweder einzelne IP-Adressen an oder verwenden Sie den Platzhalter, aber nicht beides.
imap_title=IMAP-Optionen
pop3_title=POP3-Optionen
ssl_title=SSL-Konfiguration
ssl_header=IMAP- und POP3-SSL-Modus-Optionen
ssl_key=SSL-Privatschlüsseldatei
ssl_cert=SSL-Zertifikatsdatei
ssl_ca=SSL-Client-CA-Zertifikatsdatei
ssl_header=SSL-Modus-Optionen für IMAP und POP3
ssl_key=Datei mit dem privaten SSL-Schlüssel
ssl_cert=SSL-Zertifikatdatei
ssl_ca=Zertifikatsdatei der SSL-Client-CA
ssl_pass=Passwort für Schlüsseldatei
ssl_prompt=Kein Passwort benötigt
ssl_regen=Intervall für SSL-Parameterregenerierung
ssl_prompt=Keines erforderlich
ssl_regen=Intervall für SSL-Parameterneuerstellung
ssl_hours=Stunden
ssl_none=Kein
ssl_plain=Nur Klartext-Authentifizierung im Nicht-SSL-Modus ablehnen?
ssl_plain=Klartextauthentifizierung im Nicht-SSL-Modus verbieten?
ssl_err=SSL-Konfiguration konnte nicht gespeichert werden
ssl_ekey=Fehlende oder nicht vorhandene Privatschlüsseldatei
ssl_ecert=Fehlende oder nicht vorhandene Zertifikatsdatei
ssl_eca=Fehlende oder nicht vorhandene Client-CA-Zertifikatsdatei
ssl_eregen=Fehlendes oder nicht-numerisches Parameter-Regenerierungsintervall
ssl_ekey=Fehlende oder nicht vorhandene Datei mit privatem Schlüssel
ssl_ecert=Fehlende oder nicht vorhandene Zertifikatdatei
ssl_eca=Fehlende oder nicht vorhandene Zertifikatsdatei der Client-CA
ssl_eregen=Fehlendes oder nicht-numerisches Intervall für Parameterneuerstellung
ssl_epass=Kein Passwort für die SSL-Schlüsseldatei eingegeben
misc_title=Sonstige Optionen
misc_title=Weitere Optionen
login_title=Benutzer- und Login-Optionen
login_header=Optionen für Benutzer-Authentifizierung und Login
login_fuid=Minimal gültige UID
login_luid=Maximal gültige UID
login_fgid=Minimal gültige Gruppen-ID
login_lgid=Maximal gültige Gruppen-ID
login_extra=Zusätzlich gewährte Sekundärgruppen
login_header=Benutzerauthentifizierung und Login-Einstellungen
login_fuid=Minimal zulässige UID
login_luid=Maximal zulässige UID
login_fgid=Minimal zulässige Gruppen-ID
login_lgid=Maximal zulässige Gruppen-ID
login_extra=Zusätzliche gewährte sekundäre Gruppen
login_none=Keine
login_chroot=Chroot-Verzeichnis für den Mail-Prozess
login_chroot=Chroot-Verzeichnis für Mail-Prozess
login_err=Benutzer- und Login-Optionen konnten nicht gespeichert werden
login_efuid=Fehlende oder ungültige numerische minimale UID
login_eluid=Fehlende oder ungültige numerische maximale UID
login_efgid=Fehlende oder ungültige numerische minimale Gruppen-ID
login_elgid=Fehlende oder ungültige numerische maximale Gruppen-ID
login_echroot=Fehlendes oder ungültiges Chroot-Verzeichnis
login_realms=SASL-Authentifizierungsdomänen
login_realm=Standard-Authentifizierungsdomäne
login_realms=SASL-Authentifizierungsbereiche
login_realm=Standard-Authentifizierungsbereich
login_mechs=Authentifizierungsmethoden
login_anonymous=Anonym
login_plain=Klartext
login_digest-md5=Digest-MD5
login_cram-md5=Cram-MD5
login_apop=APOP
login_otp=Einmaliges Passwort
login_otp=Einmalpasswort
login_skey=Sicherheitsschlüssel
login_oauthbearer=OAuth2-Token-Authentifizierung
login_xoauth2=Google OAuth2-Token-Authentifizierung
login_oauthbearer=OAuth2 Bearer-Authentifizierung
login_xoauth2=Google OAuth2 Bearer-Authentifizierung
login_external=Externe SASL-Authentifizierung
login_userdb=Datenquelle für Benutzer, Home-Verzeichnisse und IDs
login_userdb=Datenquelle für Benutzer:innen, Home-Verzeichnisse und IDs
login_passwd=Standard Unix-Benutzerdatenbank
login_passwdfile=Benutzerdefinierte Passwortdatei $1
login_static=Immer UID $1, GID $2 und Home-Verzeichnis $3 verwenden
login_vpopmail=VPOPMail-Bibliothek
login_ldap=LDAP, Konfigurationsdatei $1 verwenden
login_pgsql=PostgreSQL, Konfigurationsdatei $1 verwenden
login_sql=SQL-Datenbank, Konfigurationsdatei $1 verwenden
login_ldap=LDAP, Konfigurationsdatei $1
login_pgsql=PostgreSQL, Konfigurationsdatei $1
login_sql=SQL-Datenbank, Konfigurationsdatei $1
login_passdb=Passwort-Authentifizierungsquelle
login_passwd2=Unix <tt>passwd</tt>-Datei
login_shadow=Unix <tt>shadow</tt>-Datei
login_dpam=Standard PAM-Dienst (<tt>dovecot</tt>)
login_dpam=Standard-PAM-Dienst (<tt>dovecot</tt>)
login_pam=PAM-Dienst $1
login_session=PAM-Sitzungen öffnen und schließen
login_pam2=PAM-Dienst $1<br>&nbsp;&nbsp;$2<br>&nbsp;&nbsp;Verwenden Sie den Cache-Schlüssel $3
login_other=Andere Dovecot-Einstellung $1
login_pam2=PAM-Dienst $1<br>&nbsp;&nbsp;$2<br>&nbsp;&nbsp;Cache-Schlüssel $3 verwenden
login_other=Weitere Dovecot-Einstellung $1
login_epasswdfile=Fehlende oder nicht vorhandene benutzerdefinierte Passwortdatei
login_euid=Fehlende oder nicht numerische UID
login_egid=Fehlende oder nicht numerische GID
login_euid=Fehlende oder nicht-numerische UID
login_egid=Fehlende oder nicht-numerische GID
login_ehome=Fehlendes Home-Verzeichnis
login_eldap=Fehlende oder nicht vorhandene LDAP-Konfigurationsdatei
login_epgsql=Fehlende oder nicht vorhandene PostgreSQL-Konfigurationsdatei
login_esql=Fehlende oder nicht vorhandene SQL-Konfigurationsdatei
login_eppam=Fehlender oder ungültiger PAM-Dienst
login_bsdauth=BSD-Authentifizierung<br>&nbsp;&nbsp;Verwenden Sie den Cache-Schlüssel $1
login_bsdauth=BSD-Authentifizierung<br>&nbsp;&nbsp;Cache-Schlüssel $1 verwenden
login_checkpassword=Externes Programm $1
login_eckey=Fehlender oder ungültiger Cache-Schlüssel
login_echeckpassword=Fehlendes oder ungültiges externes Passwortprüfungsprogramm
login_procs=Maximale Login-Prozesse
login_count=Anfängliche Login-Prozesse
login_procs=Maximale Anzahl von Login-Prozessen
login_count=Initiale Login-Prozesse
login_eprocs=Fehlende oder ungültige maximale Anzahl von Login-Prozessen
login_ecount=Fehlende oder ungültige anfängliche Anzahl von Login-Prozessen
login_ecount=Fehlende oder ungültige initiale Anzahl von Login-Prozessen
mail_title=Mail-Dateien
mail_header=Mail-Speicherort und Leseoptionen
mail_env=Mail-Dateispeicherort
mail_header=Speicherort und Leseoptionen für E-Mails
mail_env=Speicherort der Mail-Dateien
mail_env0=Automatisch erkennen
mail_env1=Posteingang und Ordner in <tt>~/Maildir</tt>
mail_env2=Posteingang unter <tt>/var/mail</tt>, Ordner in <tt>~/mail</tt>
mail_env3=Posteingang in <tt>~/Maildir</tt>, Ordner in <tt>~/mail</tt>
mail_env4=Andere Dovecot-Position $1
mail_env4=Anderer Dovecot-Speicherort $1
mail_index=Speicherort der Index-Dateien
mail_index0=Standard (im Maildir-Verzeichnis)
mail_index1=Nur im Speicher
mail_index1=Nur im Arbeitsspeicher
mail_index2=Anderes Verzeichnis $1
mail_control=Speicherort der Steuerdateien
mail_check=Intervall zwischen Mail-Überprüfungen
mail_never=Niemals überprüfen
mail_check=Intervall für Mail-Prüfung
mail_never=Nie prüfen
mail_secs=Sekunden
mail_idle=Intervall zwischen Überprüfungen, wenn inaktiv
mail_idle=Intervall für Mail-Prüfung im Leerlauf
mail_full=Zugriff auf das gesamte Dateisystem erlauben?
mail_crlf=E-Mails mit CRLF-Zeilenenden speichern?
mail_change=Änderungen durch andere Programme verarbeiten?
mail_umask=Umask für neue Dateien
mail_err=Mail-Datei-Optionen konnten nicht gespeichert werden
mail_eenv=Fehlender oder ungültiger Mail-Speicherort
mail_echeck=Fehlende oder nicht-numerische Anzahl von Sekunden zwischen Überprüfungen
mail_eidle=Fehlende oder nicht-numerische Anzahl von Sekunden zwischen Überprüfungen im Leerlauf
mail_crlf=E-Mails mit CRLF-Zeilenumbrüchen speichern?
mail_change=Mail-Änderungen durch andere Programme berücksichtigen?
mail_umask=Umask-Berechtigungen für neue Dateien
mail_err=Mail-Dateioptionen konnten nicht gespeichert werden
mail_eenv=Fehlender oder ungültiger Speicherort für Mail-Dateien
mail_echeck=Fehlende oder nicht-numerische Anzahl von Sekunden zwischen Prüfungen
mail_eidle=Fehlende oder nicht-numerische Anzahl von Sekunden zwischen Prüfungen im Leerlauf
mail_eumask=Fehlende oder ungültige vierstellige oktale Umask
mail_uidl=UIDL-Format
mail_uidl_other=Andere..
mail_uidl_none=Nicht gesetzt (WARNUNG - Dovecot könnte nicht starten)
mail_uidl_other=Anderes..
mail_uidl_none=Nicht gesetzt (WARNUNG Dovecot startet eventuell nicht)
mail_uidl_dovecot=Altes Dovecot, neues Cyrus
mail_uidl_uw=UW ipop3d
mail_uidl_courier0=Courier Version 0
@@ -166,37 +162,37 @@ mail_uidl_courier1=Courier Version 1, altes Cyrus
mail_uidl_courier2=Courier Version 2
mail_uidl_tpop3d=tpop3d
mail_euidl=Fehlendes oder ungültiges UIDL-Format
mail_last=Verwendung des POP3 LAST-Befehls zulassen?
mail_lock=Methode zur Sperrung von Index-Dateien
mail_last=Verwendung des POP3-Befehls LAST erlauben?
mail_lock=Sperrmethode für Index-Dateien
mail_fcntl=fcntl-Funktion
mail_flock=flock-Funktion
mail_dotlock=.lock-Dateien
mail_lockf=lockf-Funktion
mail_mbox_read_locks=Sperrmethode für das Lesen von Mailboxen
mail_mbox_write_locks=Sperrmethode für das Schreiben von Mailboxen
mail_mbox_read_locks=Lesesperrmethode für Mailboxen
mail_mbox_write_locks=Schreibsperrmethode für Mailboxen
mail_none=Keine
mail_sel=Unten ausgewählt, in der Reihenfolge ..
mail_embox_read_locks=Keine Sperrmethode für das Lesen ausgewählt
mail_embox_write_locks=Keine Sperrmethode für das Schreiben ausgewählt
mail_eindexmode=Der Speicherort der Indexdateien kann nicht festgelegt werden, wenn der Mail-Speicherort automatisch erkannt wird
mail_econtrolmode=Der Speicherort der Steuerdateien kann nicht festgelegt werden, wenn der Mail-Speicherort automatisch erkannt wird
mail_sel=Unten ausgewählt, in Reihenfolge ..
mail_embox_read_locks=Keine Lesesperrmethode ausgewählt
mail_embox_write_locks=Keine Schreibsperrmethode ausgewählt
mail_eindexmode=Der Speicherort der Index-Dateien kann nicht gesetzt werden, wenn der Speicherort der Mail-Dateien automatisch erkannt wird
mail_econtrolmode=Der Speicherort der Steuerdateien kann nicht gesetzt werden, wenn der Speicherort der Mail-Dateien automatisch erkannt wird
mail_eindex=Fehlender oder ungültiger absoluter Pfad für Index-Dateien
mail_econtrol=Fehlender oder ungültiger absoluter Pfad für Steuerdateien
log_net=Netzwerk- und Protokolleinstellungen geändert
log_net=Netzwerk und Protokolle geändert
log_login=Benutzer- und Login-Optionen geändert
log_mail=Mail-Dateien geändert
log_ssl=SSL-Konfiguration geändert
log_apply=Konfiguration angewendet
log_apply=Konfiguration übernommen
log_start=Dovecot-Server gestartet
log_stop=Dovecot-Server gestoppt
log_bootup=Dovecot beim Systemstart aktiviert
log_bootdown=Dovecot beim Systemstart deaktiviert
log_manual=Konfigurationsdatei $1 manuell bearbeitet
log_manual=Konfigurationsdatei manuell bearbeitet: $1
manual_title=Konfigurationsdateien bearbeiten
manual_editsel=Dovecot-Konfigurationsdatei bearbeiten
manual_err=Konfigurationsdatei konnte nicht gespeichert werden
manual_edata=Nichts eingegeben!
manual_efile=Ausgewählte Konfigurationsdatei ist nicht gültig
manual_edata=Keine Eingabe erfolgt!
manual_efile=Ausgewählte Konfigurationsdatei ist ungültig
manual_ok=Bearbeiten

View File

@@ -31,19 +31,15 @@ net_imap_listen=Interfaces for IMAP connections
net_pop3_listen=Interfaces for POP3 connections
net_imaps_listen=Interfaces for IMAP SSL connections
net_pop3s_listen=Interfaces for POP3 SSL connections
net_listen=Interfaces for non-SSL connections
net_ssl_listen=Interfaces for SSL connections
net_listen=Listen on
net_listen0=Default
net_listen1=All IPv4 and IPv6
net_listen2=All IPv4
net_listen4=All IPv6
net_listen3=IP address
net_err=Failed to save networking options
net_eimap_listen=Invalid IP address for IMAP connections
net_epop3_listen=Invalid IP address for POP3 connections
net_eimaps_listen=Invalid IP address for IMAP SSL connections
net_epop3s_listen=Invalid IP address for POP3 SSL connections
net_elisten=Invalid IP address for non-SSL connections
net_essl_listen=Invalid IP address for SSL connections
net_ealisten=Invalid IP address to listen on : <tt>$1</tt>
net_ealisten_invalid_mix=Cannot use an individual IP address <tt>$1</tt> together with the <tt>$2</tt> wildcard. Specify either specific IP addresses or use the wildcard, not both
imap_title=IMAP Options

View File

@@ -12,20 +12,50 @@ $sslopt = &find("ssl_disable", $conf, 2) ? "ssl_disable" : "ssl";
&save_directive($conf, $sslopt, $in{$sslopt} eq '' ? undef : $in{$sslopt});
@listens = &find("imap_listen", $conf, 2) ?
("imap_listen", "pop3_listen", "imaps_listen", "pop3s_listen") :
("listen", "ssl_listen");
("listen");
foreach $l (@listens) {
if ($in{$l."_mode"} == 0) {
$listen = undef;
}
elsif ($in{$l."_mode"} == 1) {
$listen = "[::]";
$listen = "*, ::";
}
elsif ($in{$l."_mode"} == 2) {
$listen = "*";
}
elsif ($in{$l."_mode"} == 4) {
$listen = "::";
}
elsif ($in{$l."_mode"} == 3) {
&check_ipaddress($in{$l}) || &error($text{'net_e'.$l});
$listen = $in{$l};
# Check each IP address
my @ips_list = split(/[\s,]+/, $in{$l});
my @ips_valid;
my $has_ip4_wildcard = grep { $_ eq "*" } @ips_list;
my $has_ip6_wildcard = grep { /^(\[::\]|::)$/ } @ips_list;
foreach my $ip (@ips_list) {
# Check for wildcards
if ($ip =~ /^(\*|::|\[::\])$/) {
push(@ips_valid, $ip);
next;
}
# Validate IP address
my $is_ipv4 = &check_ipaddress($ip);
my $is_ipv6 = &check_ip6address($ip);
if (!$is_ipv4 && !$is_ipv6) {
&error(&text("net_ealisten", $ip));
}
# Add IP address to list
push(@ips_valid, $ip);
# Validate against wildcards
&error(&text("net_ealisten_invalid_mix", $ip, "*"))
if ($has_ip4_wildcard && &check_ipaddress($ip));
&error(&text("net_ealisten_invalid_mix", $ip, "::"))
if ($has_ip6_wildcard && &check_ip6address($ip));
}
$listen = join(", ", @ips_valid) if (@ips_valid);
}
&save_directive($conf, $l, $listen);
}

View File

@@ -1,3 +1,3 @@
allowed_paths=$HOME
work_as_root=1
allowed_for_edit=application-x-php application-x-ruby application-xml application-xslt+xml application-javascript application-x-shellscript application-x-perl application-x-yaml application-json application-x-x509-ca-cert application-pkix-cert application-x-sql application-x-asp application-x-aspx application-xhtml+xml
allowed_for_edit=application-x-php application-x-ruby application-xml application-xslt+xml application-javascript application-x-shellscript application-x-perl application-x-yaml application-x-toml application-json application-x-x509-ca-cert application-pkix-cert application-x-sql application-x-asp application-x-aspx application-xhtml+xml

View File

@@ -10,24 +10,41 @@ use WebminCore;
$ENV{'PATH_INFO'} !~ /[\\\&\;\`\'\"\|\*\?\~\<\>\^\(\)\[\]\{\}\$\n\r]/ ||
&error($text{'help_epath'});
$ENV{'PATH_INFO'} =~ /^\/(\S+)\/(\S+)$/ || &error($text{'help_epath'});
$module = $1; $file = $2;
my $module = $1;
my $file = $2;
&ReadParse();
# if it ends with .gif assume it is a direct URL
if ($file =~ /\.(gif|jpg|jpeg|png)$/i) {
&redirect("$module/$file");
exit;
}
return;
}
# read the help file
$help = &read_help_file($module, $file);
my $help = &read_help_file($module, $file);
$help || &helperror(&text('help_efile3',
&html_escape($file), &html_escape($module)));
my %hash;
# Modify help file based on module
if (&foreign_exists($module) &&
&foreign_require($module) &&
&foreign_defined($module, 'help_pre_load')) {
$help = &foreign_call($module, "help_pre_load", $help);
&foreign_require($module)) {
if (&foreign_defined($module, 'help_pre_load')) {
$help = &foreign_call($module, "help_pre_load", $help);
}
if (&foreign_defined($module, 'help_template')) {
%hash = &foreign_call($module, "help_template");
}
}
# if any template variables were given as URL params, substitute them into the file
foreach my $k (keys %in) {
if ($k =~ /^tmpl_(\S+)$/i) {
$hash{$1} = $in{$k};
}
}
if (%hash) {
$help = &substitute_template($help, \%hash);
}
# find and replace the <header> section

View File

@@ -247,7 +247,6 @@ if (-d "/home/jcameron/webmin.com" && (!$release || $release == 1)) {
# this is a new full version, so round down to the previous full version
$lastvers = sprintf("%.2f0", $vers-0.006);
}
system("./showchangelog.pl --html $lastvers >/home/jcameron/webmin.com/changes-$vers.html");
}
if ($min && !$release) {

View File

@@ -33,8 +33,10 @@ SECT: foreach $sec (@sects) {
$cmd = $ocmd;
$cmd =~ s/PAGE/$qpage/;
$cmd =~ s/SECTION/$qsec/;
$out = &backquote_command(
&command_as_user("nobody", 0, $cmd)." 2>&1", 1);
if ($< == 0) {
$cmd = &command_as_user("nobody", 0, $cmd);
}
$out = &backquote_command($cmd." 2>&1", 1);
if ($out !~ /^.*no manual entry/i && $out !~ /^.*no entry/i &&
$out !~ /^.*nothing appropriate/i) {
# Found it

View File

@@ -64,9 +64,14 @@ my $unixsocket = $plugin && $u->[$plugin] eq 'unix_socket';
my $nopass = ((!defined($epassfield1) || !$u->[$epassfield1]) &&
(!defined($epassfield2) || !$u->[$epassfield2]));
my $hashpass = $u->[$epassfield1] || $u->[$epassfield2];
my $lock_supported = exists($fieldmap{'account_locked'}) &&
defined($u->[$fieldmap{'account_locked'}]);
my $lock_supported = &get_account_lock_support();
# Old way for checking account locking
my $locked = $u->[$fieldmap{'account_locked'}] eq 'Y';
# New account locking check
if (!exists($fieldmap{'account_locked'}) ||
!defined($u->[$fieldmap{'account_locked'}])) {
$locked = &get_account_lock_status($u->[1], $u->[0]);
}
print &ui_table_row($text{'user_pass'},
&ui_radio("mysqlpass_mode", $in{'new'} ? 0 :
$lock_supported && $locked ? 4 :
@@ -84,12 +89,12 @@ if (!$in{'new'} && $hashpass) {
}
# Plugin for setting password
my @plugins = &list_authentication_plugins();
if (@plugins) {
my $plugins = &list_authentication_plugins();
if ($plugins) {
print &ui_table_row($text{'user_plugin'},
&ui_select("plugin", $plugin && $u->[$plugin],
[ [ '', $text{'default'} ],
@plugins ]));
@{$plugins} ]));
}
# Allowed host / network

View File

@@ -1730,23 +1730,72 @@ my $conf = &get_mysql_config();
return &unique(map { $_->{'file'} } @$conf);
}
# get_change_pass_sql(unescaped_plaintext_password, user, host)
# get_account_lock_status(user, host)
# Returns the account lock status of a user
sub get_account_lock_status
{
my ($user, $host) = @_;
my $rv = &execute_sql_safe($master_db, 'show create user ?@?', $user, $host);
return undef if (!ref($rv) || !@{$rv->{'data'}});
return $rv->{'data'}->[0][0] =~ /account\s+lock/i ? 1 : 0;
}
# get_account_lock_support()
# Returns 1 if the MySQL/MariaDB server supports account locking
sub get_account_lock_support
{
my ($ver, $variant) = &get_remote_mysql_variant();
return
$variant eq "mariadb" && &compare_version_numbers($ver, "10.4.2") >= 0 ||
$variant eq "mysql" && &compare_version_numbers($ver, "8.0") >= 0;
}
# get_plugin_sql(version, variant, plainpass, plugin)
# Get the right query for setting user password with plugin
sub get_plugin_sql
{
my ($ver, $variant, $plainpass, $plugin) = @_;
my $pass = &escapestr($plainpass);
# Has account locking support?
my $suplock = &get_account_lock_support();
my $lockcurr;
if ($suplock) {
$lockcurr = !defined($plainpass);
if ($lockcurr) {
$pass = sprintf("%x", rand 16) for 1..30;
}
}
my $is_plugin_socket = $plugin eq "unix_socket";
my $by = "";
$by = " by '$pass'" if (!$is_plugin_socket);
my $sp = "identified with $plugin$by";
if ($variant eq "mariadb") {
$by = " using $password_func('$pass')" if (!$is_plugin_socket);
$sp = "identified via $plugin$by";
}
if ($suplock) {
$sp = $lockcurr ? "account lock" : "$sp account unlock";
}
return $sp;
}
# get_change_pass_sql(unescaped_plaintext_password, user, host, plugin)
# Get the right query for changing user password
sub get_change_pass_sql
{
my ($unescaped_plainpass, $user, $host) = @_;
my $plugin = &get_mysql_plugin();
$plugin = $plugin ? "with $plugin" : "";
my $escaped_pass = &escapestr($unescaped_plainpass);
my ($unescaped_plainpass, $user, $host, $plugin) = @_;
$plugin ||= &get_mysql_plugin();
my $sql;
my ($ver, $variant) = &get_remote_mysql_variant();
my $mysql_mariadb_with_auth_string =
my $supauth =
$variant eq "mariadb" && &compare_version_numbers($ver, "10.2") >= 0 ||
$variant eq "mysql" && &compare_version_numbers($ver, "5.7.6") >= 0;
if ($mysql_mariadb_with_auth_string && $unescaped_plainpass) {
$sql = "alter user '$user'\@'$host' identified $plugin by '$escaped_pass'";
if ($plugin && $supauth) {
my $sp = &get_plugin_sql($ver, $variant, $unescaped_plainpass, $plugin);
$sql = "alter user '$user'\@'$host' $sp";
}
else {
my $escaped_pass = &escapestr($unescaped_plainpass);
$sql = "set password for '".$user."'\@'".$host."' = ".
"$password_func('$escaped_pass')";
}
@@ -1937,34 +1986,12 @@ else {
sub change_user_password
{
my ($plainpass, $user, $host, $plugin) = @_;
my ($ver, $variant) = &get_remote_mysql_variant();
$plugin ||= &get_mysql_plugin();
$plugin = $plugin ? "with $plugin" : "";
my $lock_supported = $variant eq "mysql" && &compare_version_numbers($ver, "8.0.19");
my $mysql_mariadb_with_auth_string =
$variant eq "mariadb" && &compare_version_numbers($ver, "10.4") >= 0 ||
$variant eq "mysql" && &compare_version_numbers($ver, "5.7.6") >= 0;
$plugin ||= "";
my $sql;
my $pass = &escapestr($plainpass);
$host ||= '%';
my $lock = !defined($plainpass);
if ($lock) {
$pass = sprintf("%x", rand 16) for 1..30;
}
if ($mysql_mariadb_with_auth_string) {
my $sp = "identified $plugin by '".$pass."'";
if ($lock_supported) {
$sp = $lock ? "account lock" : "$sp account unlock";
}
$sql = "alter user '$user'\@'$host' $sp";
&execute_sql_logged($master_db, $sql);
}
else {
$sql = &get_change_pass_sql($plainpass, $user, $host);
&execute_sql_logged($master_db, $sql);
}
$sql = &get_change_pass_sql($plainpass, $user, $host, $plugin);
&execute_sql_logged($master_db, $sql);
# Update module password when needed
&update_config_credentials({
@@ -2058,7 +2085,7 @@ if (!$pid || !kill(0, $pid)) {
}
# Update password by running command directly
my $cmd = $config{'mysql'} || 'mysql';
$cmd = $config{'mysql'} || 'mysql';
my $sql = &get_change_pass_sql($pass, $user, 'localhost');
my $out = &backquote_command("$cmd -D $master_db -e ".
quotemeta("flush privileges; $sql")." 2>&1 </dev/null");
@@ -2154,13 +2181,16 @@ return $rv->{'data'}->[0]->[0] =~ /unix_socket/i ? 'socket' : 'password';
}
# list_authentication_plugins()
# Returns a list of supported authentication plugins for setting passwords
# Returns a list ref of supported authentication plugins for setting passwords
sub list_authentication_plugins
{
my ($ver, $variant) = &get_remote_mysql_variant();
if ($variant eq "mariadb" && &compare_version_numbers($ver, "10.4") >= 0 ||
$variant eq "mysql" && &compare_version_numbers($ver, "5.7.6") >= 0) {
return ('mysql_native_password', 'caching_sha2_password', 'unix_socket');
my $rv = &execute_sql($master_db, "show plugins");
my @plugins = map { $_->[0] } grep { $_->[1] eq 'ACTIVE' &&
$_->[2] eq 'AUTHENTICATION' } @{ $rv->{data} };
return @plugins ? \@plugins : ['mysql_native_password'];
}
return ();
}

View File

@@ -271,8 +271,18 @@ else {
my $lref = &read_file_lines($old->{'file'});
splice(@$lref, $old->{'line'},
$old->{'eline'} - $old->{'line'} + 1, @lines);
my $diff = scalar(@lines) - ($old->{'eline'} - $old->{'line'} + 1);
$iface->{'line'} = $old->{'line'};
$iface->{'eline'} = $iface->{'line'} + scalar(@lines) - 1;
&flush_file_lines($old->{'file'});
&unlock_file($old->{'file'});
if ($diff) {
# May need to renumber other interface lines
foreach my $b (@$boot) {
$b->{'line'} += $diff if ($b->{'line'} > $iface->{'eline'});
$b->{'eline'} += $diff if ($b->{'eline'} > $iface->{'eline'});
}
}
}
else {
# Adding a new one (possibly to it's own file)
@@ -295,6 +305,8 @@ else {
splice(@$lref, $nline+1, 0, " ".$sect.":");
}
splice(@$lref, $eline+1, 0, @lines);
$iface->{'line'} = $eline + 1;
$iface->{'eline'} = $iface->{'line'} + scalar(@lines) - 1;
&flush_file_lines($iface->{'file'});
&unlock_file($iface->{'file'});
}
@@ -558,7 +570,7 @@ $sysctl{'net.ipv4.ip_forward'} = $in{'forward'};
&unlock_file($sysctl_config);
# Save static routes
my @boot = &boot_interfaces();
my @boot = &boot_interfaces();
foreach my $b (grep { $_->{'virtual'} eq '' } @boot) {
my @r;
if ($b->{'routes'}) {
@@ -627,7 +639,8 @@ return ( );
sub set_default_gateway
{
my ($gw, $dev) = @_;
foreach my $iface (&boot_interfaces()) {
my @boot = &boot_interfaces();
foreach my $iface (@boot) {
# What is this interface's current default and how is it set?
my $oldgw = $iface->{'gateway'};
my $oldr;
@@ -670,7 +683,7 @@ foreach my $iface (&boot_interfaces()) {
}
if ($save) {
&save_interface($iface);
&save_interface($iface, \@boot);
}
}
}
@@ -694,16 +707,17 @@ return ( );
sub set_default_ipv6_gateway
{
my ($gw, $dev) = @_;
foreach my $iface (&boot_interfaces()) {
my @boot = &boot_interfaces();
foreach my $iface (@boot) {
if ($iface->{'fullname'} eq $dev && $iface->{'gateway6'} ne $gw) {
# Need to add to this interface
$iface->{'gateway6'} = $gw;
&save_interface($iface);
&save_interface($iface, \@boot);
}
elsif ($iface->{'fullname'} ne $dev && $iface->{'gateway6'}) {
# Need to remove from this interface
delete($iface->{'gateway6'});
&save_interface($iface);
&save_interface($iface, \@boot);
}
}
}

View File

@@ -3,7 +3,7 @@ index_eaccess=Sie haben keinen Zugriff auf PHP-Konfigurationsdateien.
index_efiles=Keine der PHP-Konfigurationsdateien, auf die Sie Zugriff haben, existiert.
index_efiles2=Es wurden keine PHP-Konfigurationsdateien gefunden. Passen Sie die <a href='$1'>Modulkonfiguration</a> an, um den korrekten Pfad zur globalen PHP-Konfigurationsdatei festzulegen.
index_file=Konfigurationsdatei
index_desc=Zweck
index_desc=Verwendungszweck
index_actions=Aktionen
index_edit=Verwalten
index_manual=Manuell bearbeiten
@@ -11,143 +11,144 @@ index_anyfile=Andere PHP-Konfigurationsdatei bearbeiten
index_return=Konfigurationsdateien
file_global=Globale PHP-Konfiguration
file_eread=Fehler beim Lesen von $1: $2
file_eread=Lesen von $1 fehlgeschlagen: $2
manual_title=Konfiguration manuell bearbeiten
manual_desc=Diese Seite kann verwendet werden, um eine PHP-Konfigurationsdatei manuell zu bearbeiten. Dies sollte mit Vorsicht erfolgen, da keine Syntax- oder Gültigkeitsprüfung für Ihre Änderungen durchgeführt wird.
manual_err=Fehler beim Bearbeiten der Konfigurationsdatei
manual_edata=Kein neuer Inhalt eingegeben
manual_desc=Auf dieser Seite kann eine PHP-Konfigurationsdatei manuell bearbeitet werden. Dies sollte mit Vorsicht erfolgen, da keine Syntax- oder Gültigkeitsprüfung der Änderungen durchgeführt wird.
manual_err=Konfigurationsdatei konnte nicht bearbeitet werden
manual_edata=Keine neuen Inhalte eingegeben
list_title=PHP-Konfiguration verwalten
list_ecannot=Sie sind nicht berechtigt, diese PHP-Konfigurationsdatei zu verwalten.
list_efile=Die zu bearbeitende Datei muss ein absoluter Pfad sein.
list_ecannot=Sie dürfen diese PHP-Konfigurationsdatei nicht verwalten
list_efile=Pfad zur zu bearbeitenden Datei muss absolut sein
list_return=PHP-Konfiguration
list_format_ini=INI-Format
list_format_fpm=FPM-Format
list_bin=PHP-Version $2 unter $1
vars_title=PHP-Variablen
vars_header=Erstellung und Zitierung von PHP-Variablen
vars_magic=Alle Eingabevariablen zitieren?
vars_runtime=Daten zur Laufzeit zitieren?
vars_header=Erstellung und Maskierung von PHP-Variablen
vars_magic=Alle Eingabevariablen maskieren?
vars_runtime=Daten zur Laufzeit maskieren?
vars_register=Alle Eingaben in globale Variablen umwandeln?
vars_args=Kommandozeilenparameter in globale Variablen umwandeln?
vars_long=Alte Array-Formate wie <tt>HTTP_GET_VARS</tt> erstellen?
vars_err=Fehler beim Speichern der PHP-Variableneinstellungen
vars_long=Veraltete Array-Formate wie <tt>HTTP_GET_VARS</tt> erstellen?
vars_err=PHP-Variableinstellungen konnten nicht gespeichert werden
dirs_title=Verzeichniseinstellungen
dirs_header=Verzeichnis- und Erweiterungseinstellungen für PHP-Skripte
dirs_header=Verzeichnisoptionen für PHP-Skripte und -Erweiterungen
dirs_include=Suchverzeichnisse für Includes
dirs_below=Unten aufgeführt..
dirs_upload=Datei-Uploads zulassen?
dirs_below=Unten aufgelistet..
dirs_upload=Datei-Uploads erlauben?
dirs_utmp=Temporäres Verzeichnis für hochgeladene Dateien
dirs_err=Fehler beim Speichern der Verzeichniseinstellungen
dirs_err=Verzeichniseinstellungen konnten nicht gespeichert werden
dirs_eincs=Keine Include-Suchverzeichnisse eingegeben
dirs_eutmp=Fehlendes oder ungültiges temporäres Verzeichnis für Dateien
db_title=Datenbankeinstellungen
db_header1=MySQL-Datenbankverbindungs-Einstellungen
db_persist=Persistente Datenbankverbindungen zulassen?
db_maxpersist=Maximale Anzahl persistenter Verbindungen?
db_maxlinks=Maximale Anzahl gesamter Verbindungen?
db_timeout=Timeout für MySQL-Verbindungen?
db_host=Standard-Host des MySQL-Servers
db_port=Standard-Port des MySQL-Servers
db_header1=MySQL-Datenbankverbindungseinstellungen
db_persist=Persistente Datenbankverbindungen erlauben?
db_maxpersist=Maximale persistente Verbindungen?
db_maxlinks=Maximale Gesamtverbindungen?
db_timeout=MySQL-Verbindungs-Timeout?
db_host=Standard-MySQL-Serverhost
db_port=Standard-MySQL-Serverport
db_unlimited=Unbegrenzt
db_s=Sekunden
db_header2=PostgreSQL-Datenbankverbindungs-Einstellungen
db_header2=PostgreSQL-Datenbankverbindungseinstellungen
db_reset=Persistente Verbindungen automatisch wiederherstellen?
db_err=Fehler beim Speichern der Datenbankeinstellungen
db_err=Datenbankeinstellungen konnten nicht gespeichert werden
db_emaxpersist=Fehlende oder ungültige maximale Anzahl persistenter Verbindungen
db_emaxlinks=Fehlende oder ungültige maximale Anzahl gesamter Verbindungen
db_etimeout=Fehlendes oder ungültiges Verbindungstimeout
db_ehost=Fehlender oder ungültiger Standard-Host des MySQL-Servers
db_eport=Fehlender oder ungültiger Standard-Port des MySQL-Servers
db_emaxlinks=Fehlende oder ungültige maximale Gesamtverbindungen
db_etimeout=Fehlendes oder ungültiges Verbindungs-Timeout
db_ehost=Fehlender oder ungültiger Standard-MySQL-Serverhost
db_eport=Fehlender oder ungültiger Standard-MySQL-Serverport
session_title=Session-Optionen
session_header=Optionen für PHP-Sitzungsverfolgung
session_handler=Mechanismus zur Speicherung von Sitzungen
session_handler=Mechanismus zur Sitzungsspeicherung
session_files=Dateien
session_mm=Im Speicher
session_users=Benutzerdefiniert
session_redis=Redis
session_memcache=MemcacheD
session_path=Verzeichnis für Sitzungsdateien
session_cookies=Verwendung von Cookies zur Sitzungsverfolgung zulassen?
session_only_cookies=Immer Cookies zur Sitzungsverfolgung verwenden?
session_cookies=Verwendung von Cookies zur Sitzungserkennung erlauben?
session_only_cookies=Immer Cookies zur Sitzungserkennung verwenden?
session_life=Cookie-Lebensdauer
session_forever=Unbegrenzt
session_maxlife=Maximale Sitzungslebensdauer
session_maxlife=Maximale Sitzungsdauer
session_epath=Fehlendes oder ungültiges Verzeichnis für Sitzungsdateien
session_elife=Fehlende oder ungültige Cookie-Lebensdauer
session_emaxlife=Fehlende oder ungültige maximale Sitzungslebensdauer
session_emaxlife=Fehlende oder ungültige maximale Sitzungsdauer
limits_title=Ressourcenlimits
limits_title=Ressourcenbeschränkungen
limits_header=Optionen für Speicher- und Übertragungsgrenzen
limits_mem=Maximale Speicherzuweisung
limits_mem=Maximaler Speicherverbrauch
limits_post=Maximale HTTP-POST-Größe
limits_upload=Maximale Datei-Upload-Größe
limits_upload=Maximale Dateiupload-Größe
limits_exec=Maximale Ausführungszeit
limits_input=Maximale Eingabeparsing-Zeit
limits_vars=Maximale Anzahl an Eingabevariablen
limits_err=Fehler beim Speichern der Ressourcenlimits
limits_emem=Fehlende oder ungültige maximale Speicherzuweisung
limits_input=Maximale Zeit für Eingabeverarbeitung
limits_vars=Maximale Anzahl von Eingabevariablen
limits_err=Ressourcengrenzen konnten nicht gespeichert werden
limits_emem=Fehlender oder ungültiger maximaler Speicherverbrauch
limits_epost=Fehlende oder ungültige maximale HTTP-POST-Größe
limits_eupload=Fehlende oder ungültige maximale Datei-Upload-Größe
limits_eupload=Fehlende oder ungültige maximale Upload-Größe
limits_eexec=Fehlende oder ungültige maximale Ausführungszeit
limits_einput=Fehlende oder ungültige maximale Eingabeparsing-Zeit
limits_evars=Fehlende oder ungültige maximale Anzahl an Eingabevariablen
limits_einput=Fehlende oder ungültige maximale Zeit für Eingabeverarbeitung
limits_evars=Fehlende oder ungültige maximale Anzahl von Eingabevariablen
errors_title=Fehlerprotokollierung
errors_header=Anzeige- und Protokollierungsoptionen für Fehlermeldungen
errors_display=Fehlermeldungen anzeigen?
errors_log=Fehlermeldungen in das Protokoll schreiben?
errors_log=Fehlermeldungen protokollieren?
errors_bits=Anzuzeigende Fehlertypen
errors_reporting=Ausdruck für Fehlertypen
errors_E_ALL=Alle Fehler und Warnungen
errors_E_ERROR=Schwerwiegende Laufzeitfehler
errors_E_WARNING=Laufzeitwarnungen
errors_E_PARSE=Syntaxfehler zur Kompilierzeit
errors_E_NOTICE=Hinweise zur Laufzeit
errors_E_CORE_ERROR=Schwerwiegende Fehler während des Startvorgangs
errors_E_CORE_WARNING=Warnungen während des Startvorgangs
errors_E_COMPILE_ERROR=Schwerwiegende Fehler zur Kompilierzeit
errors_E_COMPILE_WARNING=Warnungen zur Kompilierzeit
errors_E_USER_ERROR=Vom Benutzer generierte Fehlermeldung
errors_E_USER_WARNING=Vom Benutzer generierte Warnmeldung
errors_E_USER_NOTICE=Vom Benutzer generierte Hinweisnachricht
errors_E_PARSE=Fehler beim Parsen zur Kompilierzeit
errors_E_NOTICE=Laufzeit-Hinweise
errors_E_CORE_ERROR=Schwerwiegende Fehler beim Start
errors_E_CORE_WARNING=Warnungen beim Start
errors_E_COMPILE_ERROR=Schwerwiegende Kompilierfehler
errors_E_COMPILE_WARNING=Kompilierzeit-Warnungen
errors_E_USER_ERROR=Benutzerdefinierte Fehlermeldung
errors_E_USER_WARNING=Benutzerdefinierte Warnung
errors_E_USER_NOTICE=Benutzerdefinierter Hinweis
errors_ignore=Wiederholte Fehler ignorieren?
errors_source=Quelle beim Prüfen auf Wiederholungen ignorieren?
errors_maxlen=Maximale Größe protokollierter Fehler
errors_file=Protokolldatei für Fehler
errors_source=Quelltext bei Wiederholung ignorieren?
errors_maxlen=Maximale Größe für protokollierte Fehler
errors_file=Fehlerprotokolldatei
errors_none=Keine
errors_syslog=Syslog
errors_other=Andere Datei $1
errors_unlimited=Unbegrenzt
errors_err=Fehler beim Speichern der Fehlerprotokollierung
errors_err=Fehlerprotokollierung konnte nicht gespeichert werden
errors_ereporting=Kein Ausdruck für Fehlertypen eingegeben
errors_emaxlen=Fehlende oder ungültige maximale Größe protokollierter Fehler
errors_efile=Fehlende Protokolldatei für Fehler
errors_emaxlen=Fehlende oder ungültige maximale Protokollgröße
errors_efile=Fehlende Fehlerprotokolldatei
misc_title=Weitere Einstellungen
misc_header=Verschiedene zusätzliche PHP-Einstellungen
misc_short=PHP-Skripte mit &lt;? zulassen?
misc_asp=Tags &lt;% %&gt; zulassen?
misc_header=Sonstige PHP-Einstellungen
misc_short=PHP-Skripte mit &lt;? erlauben?
misc_asp=&lt;% %&gt;-Tags erlauben?
misc_zlib=Ausgabe mit zlib komprimieren?
misc_flush=Ausgabe nach jedem Schreibvorgang leeren?
misc_fopen=Öffnen von URLs als Dateien zulassen?
misc_smtp=SMTP-Server für den E-Mail-Versand
misc_port=SMTP-Port auf dem Server
misc_fopen=Öffnen von URLs als Dateien erlauben?
misc_smtp=SMTP-Server zum Versenden von E-Mails
misc_port=SMTP-Port des Servers
misc_none=Keine
misc_sendmail=Pfad zum Befehl für den E-Mail-Versand
misc_err=Fehler beim Speichern weiterer Einstellungen
misc_sendmail=Pfad zum Befehl zum Versenden von E-Mails
misc_err=Weitere Einstellungen konnten nicht gespeichert werden
misc_esmtp=Fehlender oder nicht auflösbarer SMTP-Server
misc_esmtp_port=Fehlender oder nicht-numerischer SMTP-Port
misc_esendmail=Ungültiger Befehl für den E-Mail-Versand
misc_esendmail2=Fehlender Befehl für den E-Mail-Versand
misc_include=Öffnen von Remote-Includes zulassen?
misc_esendmail=Ungültiger Befehl zum Versenden von E-Mails
misc_esendmail2=Fehlender Befehl zum Versenden von E-Mails
misc_include=Öffnen von entfernten Includes erlauben?
misc_path=CGI Fix Path Info?
misc_timezone=PHP-Zeitzone
misc_charset=Standard-Zeichensatz
misc_charset=Standardzeichensatz
disable_title=Deaktivierte Funktionen
disable_header=Deaktivierte PHP-Funktionen und -Features
@@ -160,36 +161,36 @@ disable_proc_open=proc_open (Befehl ausführen und Ein-/Ausgabe erfassen)
disable_popen=popen (Pipe zu ausgeführtem Befehl öffnen)
disable_curl_exec=curl_exec (URL-Download-Sitzung ausführen)
disable_curl_multi_exec=curl_multi_exec (Mehrere URL-Download-Sitzungen ausführen)
disable_parse_ini_file=parse_ini_file (PHP-INI-Datei einlesen)
disable_show_source=show_source (Datei mit PHP-Syntaxhervorhebung ausgeben)
disable_parse_ini_file=parse_ini_file (PHP-INI-Datei lesen)
disable_show_source=show_source (Datei mit PHP-Syntaxhervorhebung anzeigen)
disable_mail=mail (E-Mail senden)
disable_leftover=Weitere Funktionen:
disable_err=Fehler beim Speichern deaktivierter Funktionen
disable_err=Deaktivierte Funktionen konnten nicht gespeichert werden
disable_classes=Deaktivierte integrierte Klassen
mods_title=PHP-Erweiterungen
mods_edir=PHP-Erweiterungsverzeichnis konnte nicht gefunden werden!
mods_ecannot=Sie sind nicht berechtigt, aktivierte PHP-Erweiterungen zu bearbeiten.
mods_desc=Auf dieser Seite können PHP-Version-$1-Erweiterungen systemweit für alle Benutzer:innen aktiviert oder deaktiviert werden.
mods_edir=Verzeichnis für PHP-Erweiterungen konnte nicht gefunden werden!
mods_ecannot=Sie dürfen aktivierte PHP-Erweiterungen nicht bearbeiten
mods_desc=Auf dieser Seite können global PHP-Erweiterungen für Version $1 für alle Benutzer:innen auf diesem System aktiviert oder deaktiviert werden.
mods_enabled=Aktiviert?
mods_name=Erweiterungsname
mods_file=Konfigurationsdatei
mods_pkg=Paket
mods_idesc=PHP-Erweiterungen, die auf diesem System noch nicht installiert sind, können aus den konfigurierten Softwarepaket-Repositories installiert werden.
mods_idesc=PHP-Erweiterungen, die auf diesem System noch nicht installiert sind, können aus den konfigurierten Software-Repositories installiert werden.
mods_newpkg=PHP-Erweiterung hinzufügen
mods_install=Jetzt installieren
mods_err=Fehler beim Speichern der PHP-Erweiterungen
mods_egetver=PHP-Version für Konfigurationsdatei $1 konnte nicht ermittelt werden.
mods_egetbin=PHP-Binärdatei für Konfigurationsdatei $1 konnte nicht ermittelt werden.
mods_err=PHP-Erweiterungen konnten nicht gespeichert werden
mods_egetver=PHP-Version für Konfigurationsdatei $1 konnte nicht ermittelt werden
mods_egetbin=PHP-Binary für Konfigurationsdatei $1 konnte nicht ermittelt werden
mods_return=PHP-Erweiterungen
imod_title=PHP-Modul installieren
imod_err=Fehler bei der Installation des PHP-Moduls
imod_emod=Kein PHP-Modul angegeben
imod_err=PHP-Modul konnte nicht installiert werden
imod_emod=Kein PHP-Modul eingegeben
imod_alldoing=PHP-Modul $1 für PHP-Version $2 wird installiert ..
imod_alreadygot=PHP-Modul $1 ist bereits installiert.
imod_alldone=.. das PHP-Modul wurde erfolgreich aus Paket $1 installiert und steht nun zur Nutzung bereit.
imod_allfailed=.. es konnten keine Softwarepakete für das angegebene PHP-Modul installiert werden, trotz $1 Versuchen.
imod_alreadygot=PHP-Modul $1 ist bereits installiert
imod_alldone=.. das PHP-Modul wurde erfolgreich aus Paket $1 installiert und steht nun zur Verfügung.
imod_allfailed=.. kein Softwarepaket für das angegebene PHP-Modul konnte installiert werden, trotz Versuch über $1
imod_missing=.. Installation abgeschlossen, aber das PHP-Modul wurde nicht erkannt.
log_manual=Datei $1 manuell bearbeitet
@@ -198,17 +199,17 @@ log_dirs=Verzeichniseinstellungen in $1 geändert
log_db=Datenbankeinstellungen in $1 geändert
log_session=Session-Optionen in $1 geändert
log_safe=Safe-Mode-Optionen in $1 geändert
log_limits=Ressourcenlimits in $1 geändert
log_limits=Ressourcengrenzen in $1 geändert
log_errors=Fehlerprotokollierung in $1 geändert
log_misc=Weitere Einstellungen in $1 geändert
log_mods=Aktivierte Module in $1 aktualisiert
log_imod=PHP-Modul $2 in $1 installiert
acl_global=Darf globale PHP-Konfiguration bearbeiten?
acl_anyfile=Darf beliebige Dateien als PHP-Konfiguration bearbeiten?
acl_manual=Darf Konfigurationsdateien manuell bearbeiten?
acl_inis=Zusätzliche Konfigurationsdateien<br>(Im Format <i>Dateiname</i>=<i>Beschreibung</i>)
acl_user=Darf Dateien als Benutzer:in lesen und schreiben
acl_global=Globale PHP-Konfiguration bearbeiten dürfen?
acl_anyfile=Beliebige Datei als PHP-Konfiguration bearbeiten dürfen?
acl_manual=Konfigurationsdateien manuell bearbeiten dürfen?
acl_inis=Zusätzliche Konfigurationsdateien<br>(im Format <i>Dateiname</i>=<i>Beschreibung</i>)
acl_user=Dateien im Kontext von Benutzer:innen lesen und schreiben
opt_default=Standardwert: <tt>$1</tt>
opt_default_unknown=Unbekannt

View File

@@ -24,6 +24,7 @@ list_efile=File to edit must be an absolute path
list_return=PHP configuration
list_format_ini=INI format
list_format_fpm=FPM format
list_bin=PHP version $2 at $1
vars_title=PHP Variables
vars_header=PHP variable creation and quoting options

View File

@@ -13,7 +13,13 @@ if (@files == 1 && !$access{'anyfile'} && $access{'noconfig'}) {
}
$inidir = &get_php_ini_dir($in{'file'});
&ui_print_header("<tt>".&html_escape($in{'file'})."</tt>",
my $bin = &get_php_ini_binary($in{'file'});
my $ver = &get_php_binary_version($in{'file'});
my $vmsg = "";
if ($bin && $ver) {
$vmsg = "<br>".&text('list_bin', "<tt>$bin</tt>", $ver);
}
&ui_print_header("<tt>".&html_escape($in{'file'})."</tt>".$vmsg,
$text{'list_title'}, "", undef, 0, $onefile);
@pages = ( "vars", "dirs", "db", "session", "limits",

View File

@@ -342,7 +342,8 @@ if (&foreign_check("virtual-server")) {
# RHEL and derivatives Debian/Ubuntu
if ($file =~ /php(\d+)/ || $file =~ /php\/([\d\.]+)/) {
$ver = $1;
my $binary = &has_command("php$ver");
my $binary = &has_command("php$ver") ||
&has_command("php$ver-cgi");
return $binary if ($binary);
}
@@ -352,7 +353,9 @@ if ($file =~ /^php.*?([\d\.]+)$/) {
my $nodot = $ver;
$nodot =~ s/\.//g;
my $binary = &has_command("php$ver") ||
&has_command("php$nodot");
&has_command("php$nodot") ||
&has_command("php$ver-cgi") ||
&has_command("php$nodot-cgi");
return $binary if ($binary);
}

View File

@@ -7,7 +7,7 @@ require 'proc-lib.pl';
sub syslog_getlogs
{
if ($gconfig{'os_type'} =~ /-linux$/) {
return ( { 'cmd' => "dmesg",
return ( { 'cmd' => "dmesg -T",
'desc' => $text{'syslog_dmesg'},
'active' => 1, } );
}

View File

@@ -1721,8 +1721,6 @@ of the subtext parameter :
=item below - HTML to be displayed below the title. Typically this is used for application or server version information.
=cut
sub ui_print_header
{

View File

@@ -4058,7 +4058,7 @@ return "<input name='$_[0]' size=13 value=\"$_[1]\"> ".
&group_chooser_button($_[0], 0, $_[2] || 0)."\n";
}
=head2 hlink(text, page, [module], [width], [height])
=head2 hlink(text, page, [module], [width], [height], [tmpl])
Returns HTML for a link that when clicked on pops up a window for a Webmin
help page. The parameters are :
@@ -4073,19 +4073,23 @@ help page. The parameters are :
=item height - Height of the help popup window. Defaults to 400 pixels.
=item tmpl - Hash ref of template variables to substitute in the help page.
The actual help pages are in each module's help sub-directory, in files with
.html extensions.
=cut
sub hlink
{
my ($txt, $page, $mod, $width, $height, $tmpl) = @_;
$mod ||= &get_module_name();
if (defined(&theme_hlink)) {
return &theme_hlink(@_);
}
my $mod = $_[2] ? $_[2] : &get_module_name();
my $width = $_[3] || $tconfig{'help_width'} || $gconfig{'help_width'} || 600;
my $height = $_[4] || $tconfig{'help_height'} || $gconfig{'help_height'} || 400;
return "<a onClick='window.open(\"@{[&get_webprefix()]}/help.cgi/$mod/$_[1]\", \"help\", \"toolbar=no,menubar=no,scrollbars=yes,width=$width,height=$height,resizable=yes\"); return false' href=\"@{[&get_webprefix()]}/help.cgi/$mod/$_[1]\">$_[0]</a>";
$width ||= $tconfig{'help_width'} || $gconfig{'help_width'} || 600;
$height ||= $tconfig{'help_height'} || $gconfig{'help_height'} || 400;
my $params = $tmpl ? "?".join("&", map { "tmpl_".&urlize($_)."=".&urlize($tmpl->{$_}) } keys %$tmpl) : "";
return "<a onClick='window.open(\"@{[&get_webprefix()]}/help.cgi/$mod/$page$params\", \"help\", \"toolbar=no,menubar=no,scrollbars=yes,width=$width,height=$height,resizable=yes\"); return false' href=\"@{[&get_webprefix()]}/help.cgi/$mod/$page$params\">$txt</a>";
}
=head2 user_chooser_button(field, multiple, [form])
@@ -12966,47 +12970,60 @@ for(my $i=0; $i<@sp1 || $i<@sp2; $i++) {
return 0;
}
=head2 convert_to_json(data, [pretty])
=head2 convert_to_json(data, [pretty], [raw-utf8])
Converts the given Perl data structure to encoded binary string
=item data parameter is a hash/array reference
=item if the output should be prettified
=item raw-utf8 parameter, if set to 1, encodes data using UTF-8
=cut
sub convert_to_json
{
eval "use JSON::PP";
if (!$@) {
my ($data, $pretty) = @_;
my $json = JSON::PP->new;
$pretty = 0 if (!$pretty);
$json = $json->pretty($pretty);
$data ||= {};
return $json->latin1->encode($data);
my ($data, $pretty, $raw_utf8) = @_;
my $json;
if (eval { require JSON::XS }) {
$json = JSON::XS->new;
}
elsif (eval { require JSON::PP }) {
$json = JSON::PP->new;
}
else {
error("The JSON::PP Perl module is not available on your system : $@");
error("Neither JSON::XS nor JSON::PP Perl module is available on your system");
}
$json->pretty(!!$pretty);
$data ||= {};
return $raw_utf8 ? $json->utf8->encode($data) : $json->latin1->encode($data);
}
=head2 convert_from_json(data)
=head2 convert_from_json(data, [raw-utf8])
Parses given JSON string
=item data parameter is encoded JSON string
=item raw-utf8 parameter, if set, treats the input as raw UTF-8
=cut
sub convert_from_json
{
eval "use JSON::PP";
if (!$@) {
my ($json_text) = @_;
return JSON::PP->new->utf8->decode($json_text);
my ($json_text, $raw_utf8) = @_;
my $json;
if (eval { require JSON::XS }) {
$json = JSON::XS->new;
}
elsif (eval { require JSON::PP }) {
$json = JSON::PP->new;
}
else {
error("The JSON::PP Perl module is not available on your system : $@");
error("Neither JSON::XS nor JSON::PP Perl module is available on your system");
}
$json = $json->utf8 if (!$raw_utf8);
return $json->decode($json_text);
}
=head2 print_json(data)

View File

@@ -64,10 +64,9 @@ foreach my $os (@eol_oses) {
push(@eol_oses_data, @$fdata_json);
}
my $eol_oses_data = &convert_to_json(\@eol_oses_data);
&backquote_command("echo -n '$eol_oses_data' > $eol_cache_file 2>&1 </dev/null");
if ($?) {
die("Could not write OS EOL data file : $?");
}
open(my $fh, '>', $eol_cache_file) or die("Could not open OS EOL data file for writing: $!");
print $fh $eol_oses_data;
close($fh) or die("Could not close OS EOL data file: $!");
}
# eol_get_os_data()