Compare commits

..

1 Commits

Author SHA1 Message Date
iliajie
fd3e985cf8 Fix to work-around the bug with time offsets #552 2023-04-25 23:04:58 +03:00
1521 changed files with 2811 additions and 23402 deletions

221
.github/build/deb.sh vendored
View File

@@ -1,221 +0,0 @@
#!/usr/bin/env bash
#
# Copyright @iliajie <ilia@webmin.dev>
#
# Automatically builds and updates a repo metadata.
# Pulls latest changes from GitHub, detects release
# version based on what's available in the repo
#
# (Debian)
#
# Usage:
#
# # Pull and build production versions
# # of both Webmin and Usermin
# ./deb.sh
#
# # Pull and build devel versions
# # of both Webmin and Usermin
# ./deb.sh --devel
#
# # Pull and build production Webmin version 2.101, forcing
# # release version 3, displaying detailed output
# ./deb.sh webmin 2.101 3 --debug
#
# # Pull and build production Usermin version 2.000,
# # automatically setting release version to minimal
# ./deb.sh usermin 2.000
#
# shellcheck disable=SC1091
# Source build variables
source ./vars.sh || exit 1
# Source build init
source ./init.sh || exit 1
# Source general build functions
source ./funcs.sh || exit 1
# Build product func
build_prod() {
# Pack with English only in devel builds
local english_only=0
if [[ "'$*'" == *"--devel"* ]]; then
english_only=1
fi
# Always return back to root directory
cd "$root" || exit 1
# Define root
local ver=""
local prod=$1
root_prod="$root/$prod"
root_apt="$root_prod/deb"
# Print build actual date
date=$(get_current_date)
# Print opening header
echo "************************************************************************"
echo " build start date: $date "
echo " package format: DEB "
echo " product: $prod "
(make_prod_repos "$root_prod") &
spinner " package output version:"
# Pull main project first to get the latest tag
cd "$root_prod" || exit 1
cmd="git pull $verbosity_level"
eval "$cmd"
rs1=$?
# Clean and try again
if [ "$rs1" != "0" ]; then
cmd="git checkout \"*\" $verbosity_level && git clean -f -d $verbosity_level && git pull $verbosity_level"
eval "$cmd"
rs1=$?
fi
# Descend to theme dir
cd "authentic-theme" || exit 1
cmd="git pull $verbosity_level"
eval "$cmd"
rs2=$?
# Clean and try again
if [ "$rs2" != "0" ]; then
cmd="git checkout \"*\" $verbosity_level && git clean -f -d $verbosity_level && git pull $verbosity_level"
eval "$cmd"
rs2=$?
fi
if [ "$rs1" != "0" ] || [ "$rs2" != "0" ]; then
rs=1
else
rs=0
fi
# Build number
date_version=$(get_latest_commit_date_version)
# Handle other params
cd "$root_prod" || exit 1
if [[ "'$2'" != *"--"* ]]; then
ver=$2
fi
if [[ "'$3'" != *"--"* ]] && [[ -n "$3" ]]; then
rel=$3
relval="-$3"
else
rel=1
relval=""
fi
if [ -z "$ver" ]; then
ver=$(get_current_repo_tag)
fi
if [[ "'$*'" == *"--devel"* ]]; then
ver="$ver.$date_version"
# Set actual product version
echo "${ver}" >"version"
fi
printf "$ver-$rel\n"
echo "************************************************************************"
echo "Pulling latest changes.."
# We need to pull first to get the latest tag,
# so here we only report an error if any
postcmd $rs
echo
echo "Pre-clean up .."
# Make sure directories exist
make_dir "$root_repos/"
make_dir "$root_apt/"
make_dir "$root_prod/newkey/deb/"
make_dir "$root_prod/umodules/"
make_dir "$root_prod/minimal/"
make_dir "$root_prod/tarballs/"
# Re-create legacy link
rm -rf "$root/webadmin"
ln -s "$root/webmin" "$root/webadmin"
# Purge old files
purge_dir "$root_prod/newkey/deb"
purge_dir "$root_prod/umodules"
purge_dir "$root_prod/minimal"
purge_dir "$root_prod/tarballs"
if [ "$prod" != "" ]; then
# XXXX Need to check for
# product name exactly
rm -f "$root_repos/$prod-latest"*
fi
postcmd $?
echo
# Descend to project dir
cd "$root_prod" || exit 1
if [ "$english_only" = "1" ]; then
echo "Cleaning languages .."
cmd="./bin/language-manager --mode=clean --yes $verbosity_level_with_input"
eval "$cmd"
postcmd $?
echo
else
# Force restore build directory
if [ ! -f "lang/ja" ]; then
echo "Restoring languages .."
cmd="git checkout \"*\" $verbosity_level && git clean -f -d $verbosity_level && git pull $verbosity_level"
eval "$cmd"
postcmd $?
echo
fi
fi
echo "Pre-building package .."
eval "$cmd"
cmd="./makedist.pl \"${ver}${relval}\" $verbosity_level"
eval "$cmd"
postcmd $?
echo
echo "Building package .."
if [ "$relval" == "" ]; then
cmd="./makedebian.pl \"$ver\" $verbosity_level"
else
cmd="./makedebian.pl \"$ver\" \"$rel\" $verbosity_level"
fi
eval "$cmd"
postcmd $?
echo
cd "$root" || exit 1
echo "Preparing built files for upload .."
cmd="cp -f $root_prod/tarballs/${prod}-${ver}*\.tar.gz $root_repos/${prod}-latest.tar.gz $verbosity_level"
eval "$cmd"
cmd="echo $ver-$rel \($date\) > $root_repos/${prod}-latest.version $verbosity_level_to_file"
eval "$cmd"
cmd="find $root_apt -name ${prod}_${ver}${relval}*\.deb -exec mv '{}' $root_repos \; $verbosity_level"
eval "$cmd"
cmd="mv -f $root_repos/${prod}_${ver}${relval}*\.deb $root_repos/${prod}-latest.deb $verbosity_level"
eval "$cmd"
postcmd $?
}
if [ -n "$1" ] && [[ "'$1'" != *"--"* ]]; then
build_prod $@
cloud_upload_list_upload=("$root_repos/$1*")
cloud_upload cloud_upload_list_upload
cloud_repo_sign_and_update
else
build_prod webmin $@
build_prod usermin $@
cloud_upload_list_upload=("$root_repos/*")
cloud_upload cloud_upload_list_upload
cloud_repo_sign_and_update
fi

163
.github/build/funcs.sh vendored
View File

@@ -1,163 +0,0 @@
#!/usr/bin/env bash
#
# Copyright @iliajie <ilia@webmin.dev>
#
# General build functions
#
#
# Upload to cloud
# Usage:
# cloud_upload_list_delete=("$cloud_upload_ssh_dir/repodata")
# cloud_upload_list_upload=("$root_repos/*" "$root_repos/repodata")
# cloud_upload cloud_upload_list_upload cloud_upload_list_delete
cloud_upload() {
# Print new block only if definded
local ssh_args="-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null"
if [ -n "$1" ]; then
echo
fi
# Delete files on remote if needed
if [ -n "$2" ]; then
echo "Deleting given files in $cloud_upload_ssh_host .."
local -n arr_del=$2
local err=0
for d in "${arr_del[@]}"; do
if [ -n "$d" ]; then
local cmd1="ssh $ssh_args $cloud_upload_ssh_user@$cloud_upload_ssh_host \"rm -rf $d\" $verbosity_level"
eval "$cmd1"
if [ "$?" != "0" ]; then
err=1
fi
fi
done
postcmd $err
echo
fi
# Upload files to remote
if [ -n "$1" ]; then
echo "Uploading built files to $cloud_upload_ssh_host .."
local -n arr_upl=$1
local err=0
for u in "${arr_upl[@]}"; do
if [ -n "$u" ]; then
local cmd2="scp $ssh_args -r $u $cloud_upload_ssh_user@$cloud_upload_ssh_host:$cloud_upload_ssh_dir/ $verbosity_level"
eval "$cmd2"
if [ "$?" != "0" ]; then
err=1
fi
fi
done
postcmd $err
echo
fi
}
# Sign and update repos metadata in remote
cloud_repo_sign_and_update() {
echo "Signing and updating repos metadata in $cloud_upload_ssh_host .."
local ssh_args="-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null"
local remote_cmd="cd ~/.scripts && ./update-repo-packages-signature.bash $cloud_upload_gpg_passphrase"
local cmd1="ssh $ssh_args $cloud_upload_ssh_user@$cloud_upload_ssh_host \"$remote_cmd\" $verbosity_level"
eval "$cmd1"
postcmd $?
echo
}
# Post command func
postcmd() {
if [ "$1" != "0" ]; then
echo ".. failed"
exit 1
else
echo ".. done"
fi
}
# Get max number from array
max() {
local -n arr_nums=$1
IFS=$'\n'
echo "${arr_nums[*]}" | sort -nr | head -n1
}
# Mkdir and children dirs
make_dir() {
if [ ! -d "$1" ]; then
mkdir -p "$1"
fi
}
# Remove all content in dir
purge_dir() {
for file in "$1"/*; do
rm -rf "$file"
done
}
# Get latest tag version
get_current_repo_tag() {
cd "$root_prod" || exit 1
tg=$(git rev-list --tags --max-count=1)
ds=$(git describe --tags "$tg")
echo "$ds" | sed 's/v//'
}
# Get latest commit date
get_current_date() {
echo $(date +'%Y-%m-%d %H:%M:%S %z')
}
# Get latest commit date version
get_latest_commit_date_version() {
local theme_version
local prod_version
local max_prod
local highest_version
theme_version=$(git log -n1 --pretty='format:%cd' --date=format:'%Y%m%d%H%M')
cd "$root_prod" || exit 1
prod_version=$(git log -n1 --pretty='format:%cd' --date=format:'%Y%m%d%H%M')
max_prod=("$theme_version" "$prod_version")
highest_version=$(max max_prod)
echo "$highest_version"
}
# Pull project repo and theme
make_prod_repos() {
# Webmin or Usermin
if [ ! -d "$1" ]; then
local repo="webmin/$prod.git"
cmd="git clone https://github.com/$repo $verbosity_level"
eval "$cmd"
if [ ! -d "webmin" ]; then
cmd="git clone --depth 1 https://github.com/webmin/webmin $verbosity_level"
eval "$cmd"
fi
fi
# Theme
theme="authentic-theme"
if [ ! -d "$1/$theme" ]; then
cd "$1" || exit 1
local repo="webmin/$theme.git"
cmd="git clone --depth 1 https://github.com/$repo $verbosity_level"
eval "$cmd"
fi
}
spinner() {
local msg=$1
local pid=$!
local spin='-\|/'
local i=0
printf "$msg "
while kill -0 $pid 2>/dev/null; do
(( i = (i + 1) % 4 ))
# No spinner if not an interactive shell
if [ -n "$PS1" ]; then
printf '%c\b' "${spin:i:1}"
fi
sleep .1
done
}

29
.github/build/init.sh vendored
View File

@@ -1,29 +0,0 @@
#!/usr/bin/env bash
#
# Copyright @iliajie <ilia@webmin.dev>
#
# Build init
#
#
# Set up SSH dev keys
if [ -n "$WEBMIN_DEV__SSH_PRV_KEY" ] && [ -n "$WEBMIN_DEV__SSH_PUB_KEY" ]; then
# Generate new pair with right permissions
cmd="ssh-keygen -t rsa -q -f \"$HOME/.ssh/id_rsa\" -N \"\"$verbosity_level"
eval "$cmd"
# Import SSH keys from secrets to be able to connect to the remote host
echo "$WEBMIN_DEV__SSH_PRV_KEY" > "$HOME/.ssh/id_rsa"
echo "$WEBMIN_DEV__SSH_PUB_KEY" > "$HOME/.ssh/id_rsa.pub"
# Set up SSH production keys
elif [ -n "$WEBMIN_PROD__SSH_PRV_KEY" ] && [ -n "$WEBMIN_PROD__SSH_PUB_KEY" ]; then
# Generate new pair with right permissions
cmd="ssh-keygen -t rsa -q -f \"$HOME/.ssh/id_rsa\" -N \"\"$verbosity_level"
eval "$cmd"
# Import SSH keys from secrets to be able to connect to the remote host
echo "$WEBMIN_PROD__SSH_PRV_KEY" > "$HOME/.ssh/id_rsa"
echo "$WEBMIN_PROD__SSH_PUB_KEY" > "$HOME/.ssh/id_rsa.pub"
fi
# Create symlink to Perl
ln -fs /usr/bin/perl /usr/local/bin/perl

243
.github/build/rpm.sh vendored
View File

@@ -1,243 +0,0 @@
#!/usr/bin/env bash
#
# Copyright @iliajie <ilia@webmin.dev>
#
# Automatically builds and updates a repo metadata.
# Pulls latest changes from GitHub, detects release
# version based on what's available in the repo
#
# (RHEL)
#
# Usage:
#
# # Pull and build production versions
# # of both Webmin and Usermin
# ./rpm.sh
#
# # Pull and build devel versions
# # of both Webmin and Usermin
# ./rpm.sh --devel
#
# # Pull and build production Webmin version 2.101, forcing
# # release version 3, displaying detailed output
# ./rpm.sh webmin 2.101 3 --debug
#
# # Pull and build production Usermin version 2.000,
# # automatically setting release version to minimal
# ./rpm.sh usermin 2.000
#
# shellcheck disable=SC1091
# Source build variables
source ./vars.sh || exit 1
# Source build init
source ./init.sh || exit 1
# Source general build functions
source ./funcs.sh || exit 1
# Build product func
build_prod() {
# Pack with English only in devel builds
local english_only=0
if [[ "'$*'" == *"--devel"* ]]; then
english_only=1
fi
# Always return back to root directory
cd "$root" || exit 1
# Define root
local ver=""
local prod=$1
root_prod="$root/$prod"
# Print build actual date
date=$(get_current_date)
# Print opening header
echo "************************************************************************"
echo " build start date: $date "
echo " package format: RPM "
echo " product: $prod "
(make_prod_repos "$root_prod") &
spinner " package output version:"
# Pull main project first to get the latest tag
cd "$root_prod" || exit 1
cmd="git pull $verbosity_level"
eval "$cmd"
rs1=$?
# Clean and try again
if [ "$rs1" != "0" ]; then
cmd="git checkout \"*\" $verbosity_level && git clean -f -d $verbosity_level && git pull $verbosity_level"
eval "$cmd"
rs1=$?
fi
# Pull theme to theme dir
cd "authentic-theme" || exit 1
cmd="git pull $verbosity_level"
eval "$cmd"
rs2=$?
# Clean and try again
if [ "$rs2" != "0" ]; then
cmd="git checkout \"*\" $verbosity_level && git clean -f -d $verbosity_level && git pull $verbosity_level"
eval "$cmd"
rs2=$?
fi
if [ "$rs1" != "0" ] || [ "$rs2" != "0" ]; then
rs=1
else
rs=0
fi
# Build number
date_version=$(get_latest_commit_date_version)
# Handle other params
cd "$root_prod" || exit 1
if [[ "'$2'" != *"--"* ]]; then
ver=$2
fi
if [[ "'$3'" != *"--"* ]] && [[ -n "$3" ]]; then
rel=$3
else
rel=1
fi
if [ -z "$ver" ]; then
ver=$(get_current_repo_tag)
fi
if [[ "'$*'" == *"--devel"* ]]; then
ver="$ver.$date_version"
# Set actual product version
echo "${ver}" >"version"
fi
printf "$ver-$rel\n"
echo "************************************************************************"
echo "Pulling latest changes.."
# We need to pull first to get the latest tag,
# so here we only report an error if any
postcmd $rs
echo
echo "Pre-clean up .."
# Make sure directories exist
make_dir "$root_prod/newkey/rpm/"
make_dir "$root_prod/umodules/"
make_dir "$root_prod/minimal/"
make_dir "$root_prod/tarballs/"
make_dir "$root_build/BUILD/"
make_dir "$root_build/BUILDROOT/"
make_dir "$root_build/RPMS/"
make_dir "$root_build/SOURCES/"
make_dir "$root_build/SPECS/"
make_dir "$root_build/SRPMS/"
make_dir "$root_repos/"
# Re-create legacy link
rm -rf "$root/webadmin"
ln -s "$root/webmin" "$root/webadmin"
# Purge old files
purge_dir "$root_prod/newkey/rpm"
purge_dir "$root_prod/umodules"
purge_dir "$root_prod/minimal"
purge_dir "$root_prod/tarballs"
purge_dir "$root_build/BUILD"
purge_dir "$root_build/BUILDROOT"
purge_dir "$root_build/RPMS"
purge_dir "$root_build/SOURCES"
purge_dir "$root_build/SPECS"
purge_dir "$root_build/SRPMS"
rm -rf "$root_repos/repodata"
if [ "$prod" != "" ]; then
# XXXX Need to check for
# product name exactly
rm -f "$root_repos/$prod-latest"*
fi
postcmd $?
make_dir "$root_build/RPMS/noarch"
echo
# Descend to project dir
cd "$root_prod" || exit 1
if [ "$english_only" = "1" ]; then
echo "Cleaning languages .."
cmd="./bin/language-manager --mode=clean --yes $verbosity_level_with_input"
eval "$cmd"
postcmd $?
echo
else
# Force restore build directory
if [ ! -f "lang/ja" ]; then
echo "Restoring languages .."
cmd="git checkout \"*\" $verbosity_level && git clean -f -d $verbosity_level && git pull $verbosity_level"
eval "$cmd"
postcmd $?
echo
fi
fi
echo "Pre-building package .."
eval "$cmd"
if [ "$rel" = "1" ]; then
args="$ver"
else
args="$ver-$rel"
fi
cmd="./makedist.pl \"$args\" $verbosity_level"
eval "$cmd"
postcmd $?
echo
echo "Building package .."
cmd="./makerpm.pl \"$ver\" \"$rel\" $verbosity_level"
eval "$cmd"
postcmd $?
echo
cd "$root" || exit 1
echo "Preparing built files for upload .."
cmd="cp -f $root_prod/tarballs/$prod-$ver*\.tar.gz $root_repos/${prod}-latest.tar.gz $verbosity_level"
eval "$cmd"
cmd="echo $ver-$rel \($date\) > $root_repos/$prod-latest.version"
eval "$cmd"
cmd="find $root_rpms -name $prod-$ver-$rel*\.rpm -exec mv '{}' $root_repos \; $verbosity_level"
eval "$cmd"
cmd="mv -f $root_repos/$prod-$ver-$rel*\.rpm $root_repos/${prod}-latest.rpm $verbosity_level"
eval "$cmd"
postcmd $?
echo
echo "Post-clean up .."
cd "$root_build" || exit 1
for dir in *; do
cmd="rm -rf \"$dir/*\" $verbosity_level"
eval "$cmd"
done
postcmd $?
}
if [ -n "$1" ] && [[ "'$1'" != *"--"* ]]; then
build_prod $@
cloud_upload_list_upload=("$root_repos/$1*")
cloud_upload cloud_upload_list_upload
cloud_repo_sign_and_update
else
build_prod webmin $@
build_prod usermin $@
cloud_upload_list_upload=("$root_repos/*")
cloud_upload cloud_upload_list_upload
cloud_repo_sign_and_update
fi

27
.github/build/vars.sh vendored
View File

@@ -1,27 +0,0 @@
#!/usr/bin/env bash
#
# Copyright @iliajie <ilia@webmin.dev>
#
# Build variables
#
#
# Set defaults
root="${ENV_BUILD__ROOT:-$HOME}"
root_repos="${ENV_BUILD__ROOT_REPOS:-$root/repo}"
root_build="${ENV_BUILD__ROOT_BUILD:-$root/rpmbuild}"
root_rpms="${ENV_BUILD__ROOT_RPMS:-$root_build/RPMS/noarch}"
# Cloud upload config
cloud_upload_ssh_user="${ENV_BUILD__CLOUD_UPLOAD_SSH_USER:-webmin.dev}"
cloud_upload_ssh_host="${ENV_BUILD__CLOUD_UPLOAD_SSH_HOST:-webmin.dev}"
cloud_upload_ssh_dir="${ENV_BUILD__CLOUD_UPLOAD_SSH_DIR:-~/domains/builds.webmin.dev/public_html}"
cloud_upload_gpg_passphrase="${WEBMIN_DEV__GPG_PH}"
# Define verbosity level
verbosity_level=' >/dev/null 2>&1 </dev/null'
verbosity_level_to_file='2> /dev/null'
verbosity_level_with_input=' >/dev/null 2>&1'
if [[ "'$*'" == *"--debug"* ]]; then
unset verbosity_level verbosity_level_to_file verbosity_level_with_input
fi

View File

@@ -1,30 +0,0 @@
name: "webmin.dev: Deploy Webmin package"
on:
push:
branches:
- master
jobs:
build:
runs-on: ubuntu-22.04
if: contains(github.event.head_commit.message, '[build]')
steps:
- uses: actions/checkout@v3
- uses: awalsh128/cache-apt-pkgs-action@latest
with:
packages: git tar gzip openssl curl openssh-client rpm perl libdigest-sha-perl liblist-moreutils-perl libencode-detect-perl
version: 1.0
- uses: szenius/set-timezone@v1.2
with:
timezoneLinux: "Europe/Nicosia"
- name: Build and upload packages
env:
WEBMIN_DEV__SSH_PRV_KEY: ${{ secrets.WEBMIN_DEV__SSH_PRV_KEY }}
WEBMIN_DEV__SSH_PUB_KEY: ${{ secrets.WEBMIN_DEV__SSH_PUB_KEY }}
WEBMIN_DEV__GPG_PH: ${{ secrets.WEBMIN_DEV__GPG_PH }}
ENV_BUILD__CLOUD_UPLOAD_SSH_HOST: ${{ secrets.WEBMIN_DEV__IP_ADDR }}
working-directory: ./.github/build
run: |-
./deb.sh webmin --devel
./rpm.sh webmin --devel

View File

@@ -1,57 +1,5 @@
## Changelog
#### 2.104 (October 16, 2023)
* Add support for numbered and bulleted lists in email HTML editor
* Add ability to display active file locks in `Webmin Configuration ⇾ File Locking` page
* Fix hostname detection on `systemd` systems to avoid excessive logging [#2020](https://github.com/webmin/webmin/issues/2020)
* Fix Webmin version display [#2023](https://github.com/webmin/webmin/issues/2023)
* Fix to check if UI library is loaded before using it [#2021](https://github.com/webmin/webmin/issues/2021)
* Fix the absent init script for legacy systems after the initial installation
* Update the Authentic theme to the latest version with various fixes and improvements
#### 2.103 (October 08, 2023)
* Add support for hostname detection using `hostnamectl` command
* Add support for other ACME services
* Add ability to hide dotfiles in File Manager [#1578](https://github.com/webmin/authentic-theme/issues/1578)
* Add `xz`, `zstd` and plain `tar` support when creating archives in File Manager [#2009](https://github.com/webmin/webmin/issues/2009)
* Add support for English (United States) (military time) locale
* Fix to correctly switch key hash type with ACME services
* Fix bug when `backend` wasn't saved correctly in Fail2Ban module [#1992](https://github.com/webmin/webmin/issues/1992)
* Fix large files download in Upload and Download module
* Fix Google Authentication on RHEL systems derivatives
* Update the Authentic theme to the latest version with various fixes and improvements
#### 2.102 (August 23, 2023)
* Add support for Amazon Linux 2023
* Fix a bug in Network Configuration module when parsing network size [sourceforge.net/discussion#55377]( https://sourceforge.net/p/webadmin/discussion/55377/thread/78e5aa05f3)
* Fix Netplan related bugs in Network Configuration module
* Fix Terminal focus bug
* Fix to correctly compare Webmin semantic versions
* Fix to suppress output from `monitor.pl` command [#1984](https://github.com/webmin/webmin/issues/1984)
#### 2.101 (August 5, 2023)
* Add support for reading gzipped email messages
* Add `error_stderr` API
* Fix to show correct locale for sudo-capable users [webmin/authentic-theme#1663](https://github.com/webmin/authentic-theme/issues/1663)
* Fix new signing key import on Debian and derivatives
* Fix to check if password hash format is valid for `yescrypt` and `SHA512`
* Fix various XSS related issues
* Fix updating Webmin from repository if a package is available
#### 2.100 (July 22, 2023)
* Add support for showing defaults for options in PHP Configuration module
* Add significant improvements to email display, reply and compose
* Add support for WebGL in the Terminal module
* Add screen reader support in Terminal module
* Add full support for NetworkManager in Network Configuration module
* Fix correctly displaying bridges with Netplan in Network Configuration module
* Fix displaying active network interfaces in Network Configuration module
* Fix to consider current drive temperature in `smartctl` output #1881
* Fix to properly stop Usermin https://github.com/webmin/usermin/issues/89
* Fix no to add hashed password to the old password list if it's already in there https://github.com/virtualmin/virtualmin-pro/issues/35
* Fix displaying placeholder on input to reflect strftime-style format
* Update the Authentic theme to the latest version adding new vertical column layout
#### 2.021 (March 19, 2023)
* Add ability to set locale in Webmin Users module for consistency
* Fix an error when `make_date` is called on undefined value #1860

File diff suppressed because one or more lines are too long

View File

@@ -207,7 +207,7 @@ if ($access{'lang'}) {
if ($access{'locale'}) {
# Current locale
eval "use DateTime; use DateTime::Locale; use DateTime::TimeZone;";
if (!$@ && $] > 5.011) {
if (!$@) {
my $locales = &list_locales();
my %localesrev = reverse %{$locales};
my $locale_auto = &parse_accepted_language();

View File

@@ -38,9 +38,7 @@ if ($module_name ne 'htaccess') {
# Need to build list of supported modules
local ($ver, $mods, $fullver) = &httpd_info($httpd);
if ($ver) {
my @allmods = &available_modules();
local @mods = map { "$_/$ver" }
&configurable_modules(\@allmods);
local @mods = map { "$_/$ver" } &configurable_modules();
foreach my $m (@mods) {
if ($m =~ /(\S+)\/(\S+)/) {
$httpd_modules{$1} = $2;
@@ -49,14 +47,10 @@ if ($module_name ne 'htaccess') {
# Call again now that known modules have been set, as
# sometimes there are dependencies due to LoadModule
# statements in an IfModule block
undef(@get_config_cache);
@allmods = &available_modules();
@mods = map { "$_/$ver" }
&configurable_modules(\@allmods);
@mods = map { "$_/$ver" } &configurable_modules();
local %site = ( 'size' => $st[7],
'path' => $httpd,
'modules' => join(' ', @mods),
'allmodules' => join(' ', @allmods),
'version' => $ver,
'fullversion' => $fullver,
'webmin' => &get_webmin_version() );
@@ -78,9 +72,6 @@ if (&read_file($site_file, \%site)) {
$httpd_modules{$1} = $2;
}
}
foreach $m (split(/\s+/, $site{'allmodules'})) {
$all_httpd_modules{$m} = $site{'version'};
}
foreach $m (keys %httpd_modules) {
if (!-r "$module_root_directory/$m.pl") {
delete($httpd_modules{$m});
@@ -1834,46 +1825,46 @@ for(my $i=0; $i<$secs; $i++) {
return 0;
}
# configurable_modules([&all-mods])
# configurable_modules()
# Returns a list of Apaches that are compiled in or dynamically loaded, and
# supported by Webmin.
sub configurable_modules
{
my ($allmods) = @_;
$allmods ||= [ &available_modules() ];
return grep { -r "$module_root_directory/$_.pl" } @$allmods;
}
# available_modules()
# Returns a list of Apaches that are compiled in or dynamically loaded
sub available_modules
{
my ($ver, $mods) = &httpd_info(&find_httpd());
my @rv;
local ($ver, $mods) = &httpd_info(&find_httpd());
local @rv;
local $m;
# Add compiled-in modules
push(@rv, @$mods);
foreach $m (@$mods) {
if (-r "$module_root_directory/$m.pl") {
push(@rv, $m);
}
}
# Add dynamically loaded modules
my $conf = &get_config();
foreach my $l (&find_directive_struct("LoadModule", $conf)) {
if ($l->{'words'}->[1] =~ /(mod_\S+)\.(so|dll)/) {
local $conf = &get_config();
foreach $l (&find_directive_struct("LoadModule", $conf)) {
if ($l->{'words'}->[1] =~ /(mod_\S+)\.(so|dll)/ &&
-r "$module_root_directory/$1.pl") {
push(@rv, $1);
}
elsif ($l->{'words'}->[1] =~ /libssl\.so/) {
elsif ($l->{'words'}->[1] =~ /libssl\.so/ &&
-r "$module_root_directory/mod_apachessl.pl") {
push(@rv, "mod_apachessl");
}
elsif ($l->{'words'}->[1] =~ /lib([^\/\s]+)\.(so|dll)/) {
elsif ($l->{'words'}->[1] =~ /lib([^\/\s]+)\.(so|dll)/ &&
-r "$module_root_directory/mod_$1.pl") {
push(@rv, "mod_$1");
}
}
undef(@get_config_cache); # Cache is no longer valid
# Add dynamically loaded modules
if ($config{'apachectl_path'}) {
&open_execute_command(APACHE,
"$config{'apachectl_path'} -M 2>/dev/null", 1);
while(<APACHE>) {
if (/(\S+)_module/) {
if (/(\S+)_module/ && -r "$module_root_directory/mod_${1}.pl") {
push(@rv, "mod_${1}");
}
}

View File

@@ -1,19 +0,0 @@
show_list=0
httpd_dir=/usr/local
httpd_path=/usr/local/sbin/httpd
apachectl_path=/usr/local/sbin/apachectl
httpd_conf=/usr/local/etc/apache24/httpd.conf
mime_types=/usr/local/etc/apache24/mime.types
srm_conf=/usr/local/etc/apache24/srm.conf
access_conf=/usr/local/etc/apache24/access.conf
show_order=0
max_servers=100
test_config=1
test_manual=0
test_always=0
test_apachectl=1
auto_mods=1
pid_file=/var/run/httpd.pid
show_names=0
allow_virtualmin=0
format_config=1

View File

@@ -5,7 +5,7 @@ mime_types=/etc/apache2/mime.types
httpd_path=/usr/sbin/httpd
start_cmd=systemctl start apache2
stop_cmd=systemctl stop apache2
apply_cmd=systemctl reload apache2
apply_cmd=systemctl restart apache2
show_order=0
max_servers=100
test_config=1

View File

@@ -1,11 +1,11 @@
show_list=0
httpd_dir=/usr/apache2/2.4
httpd_conf=/etc/apache2/2.4/httpd.conf
httpd_path=/usr/apache2/2.4/bin/httpd
apachectl_path=/usr/apache2/2.4/bin/apachectl
pid_file=/var/run/apache2/2.4/httpd.pid
start_cmd=svcadm enable svc:/network/http:apache24
stop_cmd=svcadm disable svc:/network/http:apache24
httpd_dir=/usr/apache2/2.2
httpd_conf=/etc/apache2/2.2/httpd.conf
httpd_path=/usr/apache2/2.2/bin/httpd
apachectl_path=/usr/apache2/2.2/bin/apachectl
pid_file=/var/run/apache2/2.2/httpd.pid
start_cmd=svcadm enable svc:/network/http:apache22
stop_cmd=svcadm disable svc:/network/http:apache22
mime_types=
srm_conf=
access_conf=

View File

@@ -779,23 +779,11 @@ local(@po, $po, @rv);
if ($in{'Options_def'}) { return ( [ ] ); }
@po = ("ExecCGI", "FollowSymLinks", "Includes", "IncludesNOEXEC",
"Indexes", "MultiViews", "SymLinksIfOwnerMatch");
my $abscount = 0;
my $pluscount = 0;
foreach $po (@po) {
if ($in{$po} == 1) {
push(@rv, $po);
$abscount++;
}
elsif ($in{$po} == 2) {
push(@rv, "+$po");
$pluscount++;
}
elsif ($in{$po} == 3) {
push(@rv, "-$po");
$pluscount++;
}
if ($in{$po} == 1) { push(@rv, $po); }
elsif ($in{$po} == 2) { push(@rv, "+$po"); }
elsif ($in{$po} == 3) { push(@rv, "-$po"); }
}
$abscount && $pluscount && &error($text{'core_eoptionsboth'});
return @rv ? ( [ join(' ', @rv) ] ) : ( [ "None" ] );
}
@@ -1053,7 +1041,7 @@ sub edit_LimitRequestBody
{
return (1, $text{'core_maxbody'},
&opt_input($_[0]->{'value'}, "LimitRequestBody", $text{'core_default'}, 8)
.&ui_space(2).$text{'bytes'});
.$text{'bytes'});
}
sub save_LimitRequestBody
{
@@ -1064,7 +1052,7 @@ sub edit_LimitXMLRequestBody
{
return (1, $text{'core_maxxml'},
&opt_input($_[0]->{'value'}, "LimitXMLRequestBody",
$text{'core_default'}, 8).&ui_space(2).$text{'bytes'});
$text{'core_default'}, 8).$text{'bytes'});
}
sub save_LimitXMLRequestBody
{

View File

@@ -501,7 +501,6 @@ core_actmod=Active modules
core_option=Option
core_setdir=Set for directory
core_merge=Merge with parent
core_eoptionsboth=Directory options : Active options must be all either Set For Directory or Merged With Parent, but not both
core_users=Only these users
core_groups=Only these groups
core_allusers=All valid users

View File

@@ -577,10 +577,10 @@ mod_proxy_netbit=Sottorete (Network/bits)
mod_proxy_maxfw=Numero massimo di proxy nella catena di richiesta
mod_proxy_emaxfs=Il Numero massimo di proxy nella catena di richiesta deve essere un intero
mod_proxy_preserve=Preserva originale l'header Host:
mod_proxy_timeout=Timeout delle richieste proxy in secondi
mod_proxy_etimeout=Il timeout delle richieste proxy deve essere un numero di secondi
mod_proxy_via=Setta header Via:
mod_log_agent_default=Default
mod_log_agent_file=File..
mod_log_agent_program=Programma..

View File

@@ -566,10 +566,10 @@ mod_proxy_netbit=Мережа/біт
mod_proxy_maxfw=Максимальна кількість проксі в ланцюжку запитів
mod_proxy_emaxfs=Максимальна кількість проксі в ланцюжку запитів належний бути цілої числом
mod_proxy_preserve=Зарезервувати оригінальний вузол: заголовок
mod_proxy_timeout=Час чекання виконання запиту проксі в секундах
mod_proxy_etimeout=Час чекання виконання запиту проксі повинне бути числом секунд
mod_proxy_via=Установити через: заголовки
mod_log_agent_default=За замовчуванням
mod_log_agent_file=Файл..
mod_log_agent_program=Програма..

View File

@@ -573,10 +573,10 @@ mod_proxy_netbit=网络/位
mod_proxy_maxfw=请求链中最大的代理数
mod_proxy_emaxfs=请求链中最大的代理数必须是整数
mod_proxy_preserve=保持原来的主机:文件头
mod_proxy_timeout=代理请求超时秒数
mod_proxy_etimeout=代理请求超时必须是一个有效的秒数
mod_proxy_via=设置通过:头
mod_log_agent_default=默认
mod_log_agent_file=文件…
mod_log_agent_program=程序…

View File

@@ -583,10 +583,10 @@ mod_proxy_netbit=網路/位元
mod_proxy_maxfw=請求鏈中最大的代理數
mod_proxy_emaxfs=請求鏈中最大的代理數必須是整數
mod_proxy_preserve=保留原始主機: 檔頭
mod_proxy_timeout=Proxy回應逾時秒數
mod_proxy_etimeout=Proxy回應逾時秒數必須是個秒數數字
mod_proxy_via=設定經由: 檔頭
mod_log_agent_default=預設
mod_log_agent_file=檔案..
mod_log_agent_program=程式..

View File

@@ -25,7 +25,6 @@ $rv = [ [ 'ProxyRequests', 0, 13, 'virtual', undef, 11 ],
[ 'ProxyMaxForwards', 0, 13, 'virtual', 2.0 ],
[ 'ProxyPreserveHost', 0, 13, 'virtual', 2.031 ],
[ 'ProxyTimeout', 0, 13, 'virtual', 2.031 ],
[ 'ProxyPreserveHost', 0, 13, 'virtual', 2.3 ],
[ 'ProxyVia', 0, 13, 'virtual', 2.0 ] ];
return &make_directives($rv, $_[0], "mod_proxy");
}
@@ -292,16 +291,7 @@ sub save_ProxyVia
return &parse_choice("ProxyVia", "");
}
sub edit_ProxyPreserveHost
{
return (1, $text{'mod_proxy_preserve'},
&choice_input($_[0]->{'value'}, "ProxyPreserveHost", "",
"$text{'yes'},on", "$text{'no'},off", "$text{'default'},"));
}
sub save_ProxyPreserveHost
{
return &parse_choice("ProxyPreserveHost", "");
}
1;

View File

@@ -13,7 +13,6 @@ sub edit_SuexecUserGroup
local $rv;
$rv .= sprintf "<input type=radio name=SuexecUserGroup_def value=1 %s> %s\n",
$_[0] ? "" : "checked", $text{'suexec_none'};
$rv .= &ui_newline();
$rv .= sprintf "<input type=radio name=SuexecUserGroup_def value=0 %s>\n",
$_[0] ? "checked" : "";
$rv .= sprintf "%s <input name=SuexecUserGroup_u size=8 value='%s'> %s\n",

View File

@@ -2,7 +2,7 @@
# Returns a list of files and directories under some directory
$trust_unknown_referers = 1;
require './bacula-backup-lib.pl';
BEGIN { require './bacula-backup-lib.pl'; }
&ReadParse();
# Input sanitization

View File

@@ -11,7 +11,7 @@ use File::Basename;
use File::Find;
use JSON::PP;
use HTTP::Tiny;
eval "use HTML::Entities";
use HTML::Entities;
use List::MoreUtils qw(any uniq);
use Cwd qw(cwd);
use Encode qw/encode decode/;
@@ -61,8 +61,7 @@ sub main
'allow-symlinks|as!' => \$opt{'allow-symlinks'},
'git-commit|gc!' => \$opt{'git-commit'},
'log|l:s' => \$opt{'log'},
'verbose|v:i' => \$opt{'verbose'},
'yes|y:i' => \$opt{'assumeyes'});
'verbose|v:i' => \$opt{'verbose'});
# Print help and exit
pod2usage(0) if ($opt{'help'});
@@ -71,11 +70,6 @@ sub main
if (!defined($opt{'verbose'})) {
$opt{'verbose'} = 1;
}
# Enforce yes for all questions
if (defined($opt{'assumeyes'})) {
$opt{'assumeyes'} = 1;
}
# Get current path
my $path = cwd;
@@ -238,7 +232,7 @@ sub main
# Just run tests, and exit, without writing anything
if (@{ $opt{'keys-test'} }) {
say CYAN, "Translation testing for selected keys is about to start ..", RESET;
if (prompt('next', \%opt)) {
if (prompt('next')) {
go(\%opt, \%data);
}
} else {
@@ -251,20 +245,11 @@ sub main
talk('affected', \%opt, \%data);
# Run in overwrite mode
if ($opt{'mode'} eq 'clean') {
# # Execute clean
talk('clean-pre', \%opt, \%data);
if (prompt('next', \%opt)) {
go(\%opt, \%data);
}
}
# Run in overwrite mode
elsif ($opt{'mode'} eq 'full') {
if ($opt{'mode'} eq 'full') {
# Execute force transcode/translate
talk('overwrite-pre', \%opt, \%data);
if (prompt('next', \%opt)) {
if (prompt('next')) {
go(\%opt, \%data);
}
}
@@ -289,7 +274,7 @@ sub main
talk('sync-pre', \%opt, \%data);
}
if (prompt('next', \%opt)) {
if (prompt('next')) {
go(\%opt, \%data);
}
}
@@ -552,7 +537,7 @@ sub language_transcode
eval {$string = decode($encoding, $string)};
if ($@) {
say "Error found: $@";
if (!prompt('next', $opt)) {
if (!prompt('next')) {
exit;
}
}
@@ -964,7 +949,6 @@ sub go
my $verbose = $opt->{'verbose'} || @{$keys_test};
my $mode_sync = $opt->{'mode'} ne 'full';
my $mode_transcode = $opt->{'mode'} eq 'transcode';
my $mode_clean = $opt->{'mode'} eq 'clean';
my $allow_symlinks = $opt->{'allow-symlinks'};
my $verbose_silent_mode = $mode_sync && $verbose != 2;
@@ -981,12 +965,6 @@ sub go
# Check if there has been something to process, if not print a message
my $output;
# If cleaning called in this mode, throw an error
if ($mode_clean) {
say RED, "Error: Cleaning can only be performed when the target type is unset!", RESET;
exit;
}
# Build targets first
talk_log(("Transcoding/translating " . CYAN BOLD, $module, RESET . " module's help .."), $data, 1);
@@ -1222,7 +1200,6 @@ sub go
# Set message type
my $message_type_s1 = 'Transcoding/translating';
$message_type_s1 = 'Searching/replacing in' if (@{$values_fix});
$message_type_s1 = 'Cleaning in' if ($mode_clean);
talk_log(("$message_type_s1 " . BLUE BOLD, $module, RESET . " module .."), $data, 1);
foreach $language (@{ $data->{'languages_source_list'} }) {
@@ -1246,51 +1223,6 @@ sub go
my %language;
my %language_auto;
# If in clean mode delete the file and go next
if ($mode_clean) {
# Language files
my $cfile = "$mpath/$code";
my $cfileauto = "$cfile.auto";
unlink($cfile);
unlink($cfileauto);
# Module files
foreach ('module', 'config', 'uconfig') {
my %mdata = %{$data};
$mdata{'type'} = $_;
my (undef, undef, $ffile) = source_data($module, \%mdata, $opt);
$ffile =~ s/\/$_\//\//;
my $cxfile = "$ffile.$code";
my $cxfileauto = "$cxfile.auto";
unlink($cxfile);
unlink($cxfileauto);
}
# Help files
my %hdata = %{$data};
$hdata{'type'} = 'help';
my (undef, $hpath) = source_data($module, \%hdata, $opt);
my @hdelete_targets;
if (-d $hpath) {
find(
{
wanted => sub {
my $found = $File::Find::name;
if ($found =~ /\.$code\./) {
push(@hdelete_targets, $found);
}
},
},
$hpath);
unlink(@hdelete_targets);
}
# Go next, don't translate
$output++;
next;
}
my $message_type_s2 = "Processing";
$message_type_s2 = "Testing translations for selected keys with" if (@{$keys_test});
@@ -1698,10 +1630,8 @@ sub get_google_translate_token
sub prompt
{
my ($q, $opt) = @_;
if ($opt->{'assumeyes'}) {
return 1;
}
my ($q) = @_;
if ($q eq 'next') {
return prompt("Do you want to proceed?");
}
@@ -1802,10 +1732,6 @@ sub talk
say GREEN, "Affected languages" . RESET, DARK . " [$languages_count]" . RESET . ": ", YELLOW BOLD,
"" . $languages . "", RESET;
}
if ($what eq 'clean-pre') {
say RED, "Danger! ", RESET, WHITE,
"The following operation will delete all files related to the affected lang-\nuage, including machine-translated files in all the mentioned modules listed above.",
}
if ($what eq 'overwrite-pre') {
say RED, "Warning! ", RESET, WHITE,
"The following operation will force-translate and overwrite mentioned\nlanguages in all mentioned modules listed above, using ",
@@ -1903,13 +1829,9 @@ Test translations for "index_stopmsg,trusted_warning" keys, in Russian and Germa
- webmin language-manager -m=bind8 -t=ru,de -kt=index_stopmsg,trusted_warning
Clean build directory by removing all kind of language files except English.
- webmin language-manager --mode=clean
=item --mode, -x <sync|full|transcode>
Mode can be either <sync> or <full> or <transcode> or <clean>. Default is set to "sync" and will only keep the keys found on template language file, while missing keys in target languages (translations), will be deleted, and newly added keys to template language file, will be translated. Mode "full" is meant to perform full translation, keeping human translated strings and overwriting all machine translations done in the past (not recommended to run). Mode "transcode" is useful to fix human translated language files, which stored in "utf-8" encoding already, while still having "&#195;&#173;" or "&#195;&#169;" HTML entities. Mode "clean" is useful to clean build package by removing all kind of language files except source language.
Mode can be either <sync> or <full> or <transcode>. Default is set to "sync" and will only keep the keys found on template language file, while missing keys in target languages (translations), will be deleted, and newly added keys to template language file, will be translated. Mode "full" is meant to perform full translation, keeping human translated strings and overwriting all machine translations done in the past (not recommended to run). Mode "transcode" is useful to fix human translated language files, which stored in "utf-8" encoding already, while still having "&#195;&#173;" or "&#195;&#169;" HTML entities.
=item --type, -w <lang|ulang|help|config|uconfig|module>
@@ -1995,4 +1917,4 @@ Verbosely print processed files and provide detailed output. By detault, verbose
=head1 LICENSE AND COPYRIGHT
Copyright 2020 Ilia Rostovtsev <ilia@virtualmin.com>
Copyright 2022 Ilia Rostovtsev <ilia@virtualmin.com>

View File

@@ -5,9 +5,12 @@ use strict;
use warnings;
BEGIN { $Pod::Usage::Formatter = 'Pod::Text::Color'; }
use 5.010; # Version in CentOS 6
use Getopt::Long qw(:config permute pass_through);
use Term::ANSIColor qw(:constants);
use Pod::Usage;
use Term::ANSIColor qw(:constants);
use File::Spec;
use File::Basename;
my $a0 = $ARGV[0];
@@ -35,12 +38,8 @@ sub main {
}
);
# Set defaults
$opt{'config'} ||= "/etc/webmin";
$opt{'commands'} = $a0;
# Load libs
loadlibs(\%opt);
my @remain = @ARGV;
# List commands?
@@ -49,6 +48,7 @@ sub main {
exit 0;
} elsif ($opt{'version'} || $opt{'versions'}) {
# Load libs
my $root = root($opt{'config'});
my $ver_checked = sub {
my ($ver_remote, $ver_curr) = @_;
if ($ver_remote && $ver_curr &&
@@ -82,7 +82,6 @@ sub main {
}
};
my $root = root($opt{'config'});
if ($root && -d $root) {
require("$root/web-lib-funcs.pl");
@@ -208,9 +207,6 @@ exit main( \@ARGV ) if !caller(0);
sub run_command {
my ( $optref, $subcmd, $remainref ) = @_;
# Load libs
loadlibs($optref);
# Figure out the Webmin root directory
my $root = root($optref->{'config'});
@@ -241,10 +237,6 @@ sub run_command {
sub get_command_path {
my ($root, $subcmd, $optref) = @_;
# Load libs
loadlibs($optref);
# Check for a root-level command (in "$root/bin")
my $command_path;
if ($subcmd) {
@@ -382,20 +374,6 @@ sub root {
return $root;
}
# loadlibs - Load libraries from the Webmin vendor dir
# as those may not be installed as dependency, because
# Webmin already provides them from package manager
# perspective.
sub loadlibs {
my ($optref) = @_;
$optref->{'config'} ||= "/etc/webmin";
my $root = root($optref->{'config'});
my $libroot = "$root/vendor_perl";
eval "use lib '$libroot'";
eval "use File::Basename";
eval "use File::Spec";
}
1;
=pod

View File

@@ -65,10 +65,10 @@ our @dnssec_dlv_key = ( 257, 3, 5, '"BEAAAAPHMu/5onzrEE7z1egmhg/WPO0+juoZrW3euWE
my $rand_flag;
if ($gconfig{'os_type'} =~ /-linux$/ &&
$config{'force_random'} eq '0' &&
-r "/dev/urandom" &&
$bind_version =~ /^9\./ &&
&compare_version_numbers($bind_version, '<', '9.14.2')) {
!$config{'force_random'} &&
$bind_version &&
&compare_version_numbers($bind_version, '9.14') < 0) {
# Version: 9.14.2 deprecated the use of -r option
# in favor of using /dev/random [bugs:#5370]
$rand_flag = "-r /dev/urandom";
@@ -376,22 +376,9 @@ return @rv ? wantarray ? @rv : $rv[0]
sub find_value
{
my @v = &find($_[0], $_[1]);
if (!@v) {
return undef;
}
elsif (wantarray) {
return map { &extract_value($_) } @v;
}
else {
return &extract_value($v[0]);
}
}
sub extract_value
{
my ($dir) = @_;
return defined($dir->{'value'}) ? $dir->{'value'} :
defined($dir->{'values'}) && @{$dir->{'values'}} ? $dir->{'values'}->[0] : undef;
if (!@v) { return undef; }
elsif (wantarray) { return map { $_->{'value'} } @v; }
else { return $v[0]->{'value'}; }
}
# base_directory([&config], [no-cache])
@@ -513,8 +500,9 @@ for(my $i=0; $i<@oldv || $i<@newv; $i++) {
sub recursive_set_value
{
my ($dir) = @_;
if (!defined($dir->{'value'})) {
$dir->{'value'} = &extract_value($dir);
if ($dir->{'values'}) {
my @v = @{$dir->{'values'}};
$dir->{'value'} = @v ? $v[0] : undef;
}
if ($dir->{'type'} && $dir->{'type'} == 1 && $dir->{'members'}) {
foreach my $m (@{$dir->{'members'}}) {
@@ -1976,31 +1964,21 @@ if (!$file) {
push(@{$dir->{'members'}}, { 'name' => 'file',
'values' => [ $file ] } );
# Allow transfer from slave IPs
my (@notify, @transfer);
foreach my $s (@$slaves) {
push(@notify, { 'name' => $s });
push(@transfer, { 'name' => $s });
}
if (@transfer) {
my $gat = &find("allow-transfer", $opts->{'members'});
if ($gat) {
push(@transfer, @{$gat->{'members'}});
}
}
if (@notify) {
# Add slave IPs
if (@$slaves) {
my $also = { 'name' => 'also-notify',
'type' => 1,
'members' => \@notify};
push(@{$dir->{'members'}}, $also);
push(@{$dir->{'members'}}, { 'name' => 'notify',
'values' => [ 'yes' ] });
}
if (@transfer) {
'members' => [ ] };
my $allow = { 'name' => 'allow-transfer',
'type' => 1,
'members' => \@transfer };
push(@{$dir->{'members'}}, $allow);
'members' => [ ] };
foreach my $s (@$slaves) {
push(@{$also->{'members'}}, { 'name' => $s });
push(@{$allow->{'members'}}, { 'name' => $s });
}
push(@{$dir->{'members'}}, $also, $allow);
push(@{$dir->{'members'}}, { 'name' => 'notify',
'values' => [ 'yes' ] });
}
# Create the zone file, with records
@@ -3032,7 +3010,7 @@ my %on = map { $_, 1 } @{$_[0]};
&remote_error_setup(\&slave_error_handler);
my @slaveerrs;
foreach my $slave (&list_slave_servers()) {
next if (%on && !$on{$slave->{'nsname'}} && !$on{$slave->{'host'}});
next if (%on && !$on{$slave->{'host'}});
# Find the PID file
$slave_error = undef;
@@ -3601,7 +3579,7 @@ for(my $i=$#recs; $i>=0; $i--) {
if ($recs[$i]->{'type'} eq 'NSEC' ||
$recs[$i]->{'type'} eq 'NSEC3' ||
$recs[$i]->{'type'} eq 'RRSIG' ||
$recs[$i]->{'type'} eq 'NSEC3PARAM' ||
$recs[$i]->{'type'} eq 'NSEC3PARAM' && $tools ||
$recs[$i]->{'type'} eq 'DNSKEY') {
&delete_record($fn, $recs[$i]);
}

View File

@@ -5,7 +5,7 @@ use warnings;
no warnings 'redefine';
no warnings 'uninitialized';
# Globals
our (%access, %text, $bind_version);
our (%access, %text);
our $dnssec_dlv_zone;
require './bind8-lib.pl';
@@ -24,12 +24,10 @@ $tkeys ||= { 'members' => [ ] };
print &ui_form_start("save_trusted.cgi", "post");
print &ui_table_start($text{'trusted_header'}, undef, 2);
if (&compare_version_numbers($bind_version, '<', '9.16.0')) {
# DNSSEC enabled?
print &choice_input($text{'trusted_dnssec'}, 'dnssec-enable', $mems,
$text{'yes'}, 'yes', $text{'no'}, 'no',
$text{'default'}, undef);
}
# DNSSEC enabled?
print &choice_input($text{'trusted_dnssec'}, 'dnssec-enable', $mems,
$text{'yes'}, 'yes', $text{'no'}, 'no',
$text{'default'}, undef);
if (&supports_dnssec_client() == 2) {
print &choice_input($text{'trusted_validation'},
'dnssec-validation', $mems,

View File

@@ -17,14 +17,6 @@ my $dom = $zone->{'name'};
&ui_print_header(&zone_subhead($zone), $text{'master_title'}, "",
undef, undef, undef, undef, &restart_links($zone));
my $d = &get_virtualmin_domains($dom);
if ($d && $d->{'alias'}) {
print &ui_alert_box($text{'master_vminalias'}, 'danger');
}
elsif ($d) {
print &ui_alert_box($text{'master_vmin'}, 'warn');
}
# Find the record types
my (@rcodes, @recs);
if (!$config{'largezones'}) {

View File

@@ -147,8 +147,6 @@ master_defttl=Standaard lewendige tyd vir rekords
master_edefttl='$1' is nie 'n geldige standaardtyd vir lewering van rekords nie
master_esoagone=Geen SOA-rekord gevind nie!
master_einclude=Bykomende sjabloonlêer bestaan nie
master_vmin=Hierdie sone word deur Virtualmin bestuur. Rekords moet geredigeer word met behulp van die Virtualmin UI, om te verseker dat dit ooreenstem met ander virtuele bediener instellings.
master_vminalias=Hierdie sone is 'n alias van 'n Virtualmin-domein, wat gesinchroniseer word met sy teiken. Rekords moet nooit hier geredigeer word nie, aangesien enige veranderinge oorgeskryf sal word!
delete_title=Vee sone uit
delete_mesg=Is u seker dat u die sone $1 wil verwyder? Alle rekords en die sone-lêer sal uitgevee word.

View File

@@ -147,8 +147,6 @@ master_defttl=الوقت الافتراضي للعيش للسجلات
master_edefttl='$1' is not a valid default time-to-live for records
master_esoagone=لم يتم العثور على سجل الخدمية!
master_einclude=ملف القالب الإضافي غير موجود
master_vmin=تتم إدارة هذه المنطقة بواسطة Virtualmin. يجب تحرير السجلات باستخدام Virtualmin UI ، للتأكد من أنها متوافقة مع إعدادات الخادم الظاهري الأخرى.
master_vminalias=هذه المنطقة هي اسم مستعار لنطاق Virtualmin ، والذي يتم الاحتفاظ به متزامنًا مع هدفه. يجب عدم تحرير السجلات هنا مطلقًا ، حيث سيتم الكتابة فوق أي تغييرات!
delete_title=حذف المنطقة
delete_mesg=Are you sure you want to delete the zone $1 ? All records and the zone file will be deleted.

View File

@@ -147,8 +147,6 @@ master_defttl=Час жыць да запісаў па змаўчанні
master_edefttl="$1" не з'яўляецца дапушчальным да запісу часу для запісу па змаўчанні
master_esoagone=Запіс SOA не знойдзены!
master_einclude=Дадатковы файл шаблону не існуе
master_vmin=Гэта зона кіруецца Virtualmin. Запісы трэба рэдагаваць з дапамогай інтэрфейсу Virtualmin, каб пераканацца, што яны адпавядаюць наладам іншых віртуальных сервераў.
master_vminalias=Гэтая зона з'яўляецца псеўданімам дамена Virtualmin, які падтрымліваецца ў сінхранізацыі з мэтай. Запісы ніколі не павінны рэдагавацца тут, бо любыя змены будуць перазапісаны!
delete_title=Выдаліць зону
delete_mesg=Вы ўпэўнены, што хочаце выдаліць зону $1? Усе запісы і файл зоны будуць выдаленыя.

View File

@@ -1,6 +1,4 @@
master_inview=$1 с оглед $2
master_vmin=Тази зона се управлява от Virtualmin. Записите трябва да се редактират с помощта на потребителския интерфейс на Virtualmin, за да се гарантира, че са съвместими с други настройки на виртуален сървър.
master_vminalias=Тази зона е псевдоним на домейн Virtualmin, който се поддържа в синхрон със своята цел. Записите никога не трябва да се редактират тук, тъй като всички промени ще бъдат презаписани!
delete_vwarn=Тази зона е свързана с домейна Virtualmin $1 и затова не трябва да се изтрива тук!

View File

@@ -1,6 +1,4 @@
master_inview=$1 a la vista $2
master_vmin=Aquesta zona està gestionada per Virtualmin. Els registres s'han d'editar mitjançant la interfície d'usuari de Virtualmin, per assegurar-se que són coherents amb altres configuracions del servidor virtual.
master_vminalias=Aquesta zona és un àlies d'un domini Virtualmin, que es manté sincronitzat amb el seu objectiu. Els registres no s'han d'editar mai aquí, ja que qualsevol canvi es sobreescriurà!
delete_onslave=També voleu suprimir-lo dels servidors esclaus?
delete_errslave=La zona mestra ha suprimit bé, però s'han produït els errors següents en esclaus : $1

View File

@@ -24,8 +24,6 @@ master_movedesc=Přesune tuto zónu do jiného zobrazení a přitom zachová vš
master_applymsg2=Klepnutím na toto tlačítko použijete změny pouze pro tuto zónu. Toto bude fungovat, pouze pokud byly změny provedeny pro celý server alespoň jednou od vytvoření zóny.
master_esoagone=Nebyl nalezen žádný záznam SOA!
master_einclude=Další soubor šablony neexistuje
master_vmin=Tuto zónu spravuje Virtualmin. Záznamy by měly být upravovány pomocí uživatelského rozhraní Virtualmin, aby bylo zajištěno, že budou konzistentní s ostatními nastaveními virtuálního serveru.
master_vminalias=Tato zóna je alias domény Virtualmin, která je synchronizována s jejím cílem. Záznamy by zde nikdy neměly být upravovány, protože jakékoli změny budou přepsány!
delete_mesg3=Opravdu chcete odstranit zónu $1?
delete_vwarn=Tato zóna je přidružena k doméně Virtualmin $1, a proto by zde neměla být odstraněna!

View File

@@ -147,8 +147,6 @@ master_defttl=Standard tid til live for poster
master_edefttl='$1' er ikke en gyldig standard-tid-til-live for poster
master_esoagone=Ingen SOA-registrering fundet!
master_einclude=Yderligere skabelonfil findes ikke
master_vmin=Denne zone administreres af Virtualmin. Records bør redigeres ved hjælp af Virtualmin UI for at sikre, at de stemmer overens med andre virtuelle serverindstillinger.
master_vminalias=Denne zone er et alias for et Virtualmin-domæne, som holdes synkroniseret med dets mål. Optegnelser bør aldrig redigeres her, da eventuelle ændringer vil blive overskrevet!
delete_title=Slet zone
delete_mesg=Er du sikker på, at du vil slette zonen $1? Alle poster og zonefilen vil blive slettet.

View File

@@ -1,6 +1,4 @@
master_inview=$1 im Blick $2
master_vmin=Diese Zone wird von Virtualmin verwaltet. Datensätze sollten über die Virtualmin-Benutzeroberfläche bearbeitet werden, um sicherzustellen, dass sie mit anderen Einstellungen des virtuellen Servers konsistent sind.
master_vminalias=Diese Zone ist ein Alias einer Virtualmin-Domäne, die mit ihrem Ziel synchron gehalten wird. Datensätze sollten hier niemals bearbeitet werden, da alle Änderungen überschrieben werden!
delete_vwarn=Diese Zone ist der Virtualmin-Domäne $1 zugeordnet und sollte daher hier nicht gelöscht werden!

View File

@@ -147,8 +147,6 @@ master_defttl=Προεπιλεγμένος χρόνος ζωής για αρχε
master_edefttl=Το '$1' δεν είναι έγκυρη προεπιλεγμένη ώρα για ζωντανή εγγραφή
master_esoagone=Δεν βρέθηκε αρχείο SOA!
master_einclude=Δεν υπάρχει πρόσθετο αρχείο προτύπου
master_vmin=Αυτή η ζώνη διαχειρίζεται το Virtualmin. Οι εγγραφές θα πρέπει να επεξεργάζονται χρησιμοποιώντας το Virtualmin UI, για να διασφαλιστεί ότι είναι συνεπείς με άλλες ρυθμίσεις εικονικού διακομιστή.
master_vminalias=Αυτή η ζώνη είναι ένα ψευδώνυμο ενός τομέα Virtualmin, ο οποίος διατηρείται σε συγχρονισμό με τον στόχο του. Οι εγγραφές δεν πρέπει ποτέ να επεξεργάζονται εδώ, καθώς τυχόν αλλαγές θα αντικατασταθούν!
delete_title=Διαγραφή Ζώνης
delete_mesg=Είστε βέβαιοι ότι θέλετε να διαγράψετε τη ζώνη $1; Όλες οι εγγραφές και το αρχείο ζώνης θα διαγραφούν.

View File

@@ -147,8 +147,6 @@ master_defttl=Default time-to-live for records
master_edefttl='$1' is not a valid default time-to-live for records
master_esoagone=No SOA record found!
master_einclude=Additional template file does not exist
master_vmin=This zone is managed by Virtualmin. Records should be edited using the Virtualmin UI, to ensure they are consistent with other virtual server settings.
master_vminalias=This zone is an alias of a Virtualmin domain, which is kept in sync with it's target. Records should never be edited here, as any changes will be overwritten!
delete_title=Delete Zone
delete_mesg=Are you sure you want to delete the zone $1 ? All records and the zone file will be deleted.

View File

@@ -37,8 +37,6 @@ master_defttl=Tiempo de vida predeterminado para registros
master_edefttl='$1' no es un tiempo de vida predeterminado válido para los registros
master_esoagone=¡No se ha encontrado el registro SOA!
master_einclude=El archivo de plantilla adicional no existe
master_vmin=Esta zona es administrada por Virtualmin. Los registros deben editarse mediante la interfaz de usuario de Virtualmin para garantizar que sean coherentes con otras configuraciones del servidor virtual.
master_vminalias=Esta zona es un alias de un dominio de Virtualmin, que se mantiene sincronizado con su objetivo. Los registros nunca deben editarse aquí, ya que cualquier cambio se sobrescribirá
delete_mesg3=¿Está seguro de que desea eliminar la zona $1?
delete_vwarn=Esta zona está asociada con el dominio Virtualmin $1, por lo que no debe eliminarse aquí.

View File

@@ -147,8 +147,6 @@ master_defttl=Erregistroen bizitzeko denbora lehenetsia
master_edefttl='$1' ez da erregistroen denbora bizitzeko balio lehenetsia
master_esoagone=Ez da SOA erregistrorik aurkitu!
master_einclude=Ez da txantiloi fitxategi gehigarririk existitzen
master_vmin=Zona hau Virtualmin-ek kudeatzen du. Erregistroak Virtualmin UI erabiliz editatu behar dira, zerbitzari birtualeko beste ezarpen batzuekin bat datozela ziurtatzeko.
master_vminalias=Zona hau Virtualmin domeinu baten alias bat da, zeina helbururekin sinkronizatuta mantentzen dena. Erregistroak ez dira inoiz hemen editatu behar, edozein aldaketa gainidatzi egingo baita!
delete_title=Ezabatu zona
delete_mesg=Ziur $1 zona ezabatu nahi duzula? Erregistro guztiak eta zona fitxategia ezabatuko dira.

View File

@@ -30,8 +30,6 @@ master_movedesc=این منطقه را به یک نمای دیگر منتقل م
master_applymsg2=برای اعمال تغییرات فقط در این منطقه ، روی این دکمه کلیک کنید. این کار فقط در صورتی انجام می شود که حداقل یک بار از زمان ایجاد منطقه ، برای کل سرور اعمال شود.
master_esoagone=هیچ سابقه SOA یافت نشد!
master_einclude=پرونده الگوی اضافی وجود ندارد
master_vmin=این منطقه توسط Virtualmin مدیریت می شود. رکوردها باید با استفاده از Virtualmin UI ویرایش شوند تا اطمینان حاصل شود که با سایر تنظیمات سرور مجازی سازگار هستند.
master_vminalias=این منطقه نام مستعار یک دامنه Virtualmin است که با هدف خود هماهنگ می شود. سوابق هرگز نباید در اینجا ویرایش شوند، زیرا هر تغییری بازنویسی می شود!
delete_mesg3=Are you sure you want to delete the zone $1 ?
delete_vwarn=این منطقه با دامنه Virtualmin $1 همراه است و بنابراین نباید در اینجا حذف شود!

View File

@@ -147,8 +147,6 @@ master_defttl=Tietueiden oletusaika-aika
master_edefttl='$1' ei ole kelvollinen oletusarvoinen elinaika tietueille
master_esoagone=SOA-tietuetta ei löytynyt!
master_einclude=Muuta mallitiedostoa ei ole
master_vmin=Tätä vyöhykettä hallinnoi Virtualmin. Tietueita tulee muokata Virtualmin-käyttöliittymällä, jotta ne ovat yhdenmukaisia muiden virtuaalipalvelinasetusten kanssa.
master_vminalias=Tämä vyöhyke on Virtualmin-verkkotunnuksen alias, joka pidetään synkronoituna kohteensa kanssa. Tietueita ei saa koskaan muokata täällä, sillä kaikki muutokset korvataan!
delete_title=Poista vyöhyke
delete_mesg=Haluatko varmasti poistaa vyöhykkeen $1? Kaikki tietueet ja vyöhyketiedosto poistetaan.

View File

@@ -1,6 +1,3 @@
master_vmin=Cette zone est gérée par Virtualmin. Les enregistrements doivent être modifiés à l'aide de l'interface utilisateur Virtualmin, pour s'assurer qu'ils sont cohérents avec les autres paramètres du serveur virtuel.
master_vminalias=Cette zone est un alias d'un domaine Virtualmin, qui est synchronisé avec sa cible. Les enregistrements ne doivent jamais être modifiés ici, car toute modification sera écrasée !
slave_format=Format de fichier de zone
slave_raw=Binaire brut
slave_text=Texte brut

View File

@@ -147,8 +147,6 @@ master_defttl=זמן ברירת המחדל לחיים עבור רשומות
master_edefttl='$1' אינו זמן ברירת מחדל תקף לחיות עבור רשומות
master_esoagone=לא נמצאה רשומת SOA!
master_einclude=קובץ תבנית נוסף אינו קיים
master_vmin=אזור זה מנוהל על ידי Virtualmin. יש לערוך את הרשומות באמצעות ממשק המשתמש של Virtualmin, כדי להבטיח שהן עולות בקנה אחד עם הגדרות שרת וירטואלי אחרות.
master_vminalias=אזור זה הוא כינוי של דומיין Virtualmin, אשר נשמר מסונכרן עם היעד שלו. לעולם אין לערוך רשומות כאן, מכיוון שכל השינויים יוחלפו!
delete_title=מחק אזור
delete_mesg=האם אתה בטוח שברצונך למחוק את האזור $1 ? כל הרשומות וקובץ האזור יימחקו.

View File

@@ -147,8 +147,6 @@ master_defttl=Zadano vrijeme za snimanje uživo
master_edefttl="$1" nije valjano zadano vrijeme za izradu zapisa
master_esoagone=Nije pronađen SOA zapis!
master_einclude=Dodatna datoteka predloška ne postoji
master_vmin=Ovom zonom upravlja Virtualmin. Zapise treba uređivati pomoću korisničkog sučelja Virtualmin kako bi se osiguralo da su u skladu s drugim postavkama virtualnog poslužitelja.
master_vminalias=Ova zona je pseudonim Virtualmin domene, koja je sinkronizirana sa svojim ciljem. Zapisi se nikada ne smiju uređivati ovdje, jer će sve promjene biti prebrisane!
delete_title=Izbriši zonu
delete_mesg=Jeste li sigurni da želite izbrisati zonu $1? Svi zapisi i zonska datoteka bit će izbrisani.

View File

@@ -10,8 +10,6 @@ master_inview=$1 a $2 nézetben
master_egone=A $1 zóna egyetlen nézetben sem létezik
master_egone2=A $1 zóna nem létezik!
master_egone3=A $1 zóna a $2 nézetben nem létezik!
master_vmin=Ezt a zónát a Virtualmin kezeli. A rekordokat a Virtualmin UI használatával kell szerkeszteni, hogy konzisztensek legyenek a többi virtuális szerver beállításával.
master_vminalias=Ez a zóna egy Virtualmin tartomány álneve, amely szinkronban van a céljával. A rekordokat soha nem szabad itt szerkeszteni, mert az esetleges változtatások felülíródnak!
delete_vwarn=Ez a zóna a $1 Virtualmin domainhez van társítva, ezért itt nem szabad törölni!

View File

@@ -47,8 +47,6 @@ master_defttl=Tempo di vita predefinito per i record
master_edefttl='$1' non è un time-to-live predefinito valido per i record
master_esoagone=Nessun record SOA trovato!
master_einclude=Non esiste un file modello aggiuntivo
master_vmin=Questa zona è gestita da Virtualmin. I record devono essere modificati utilizzando l'interfaccia utente di Virtualmin, per garantire che siano coerenti con le altre impostazioni del server virtuale.
master_vminalias=Questa zona è un alias di un dominio Virtualmin, che viene mantenuto sincronizzato con la sua destinazione. I record non dovrebbero mai essere modificati qui, poiché qualsiasi modifica verrà sovrascritta!
delete_mesg3=Sei sicuro di voler eliminare la zona $1?
delete_onslave=Eliminare anche dai server slave?

View File

@@ -13,8 +13,6 @@ master_inview=ビュー $2の $1
master_egone=ゾーン$1はどのビューにも存在しません
master_egone2=ゾーン$1は存在しません
master_egone3=ビュー$2のゾーン$1は存在しません
master_vmin=このゾーンは Virtualmin によって管理されます。レコードは、他の仮想サーバー設定との一貫性を確保するために、Virtualmin UI を使用して編集する必要があります。
master_vminalias=このゾーンは Virtualmin ドメインのエイリアスであり、ターゲットとの同期が保たれます。変更が上書きされるため、ここでレコードを編集しないでください。
delete_vwarn=このゾーンはVirtualminドメイン $1に関連付けられているため、ここで削除しないでください
delete_vwarn2=このゾーンはVirtualminドメイン $1および $2に関連付けられているため、ここで削除しないでください

View File

@@ -71,8 +71,6 @@ master_defttl=레코드의 기본 수명
master_edefttl='$1'은 (는) 유효한 기본 유효 기간이 아닙니다.
master_esoagone=SOA 레코드가 없습니다!
master_einclude=추가 템플릿 파일이 없습니다
master_vmin=이 영역은 Virtualmin에서 관리합니다. 다른 가상 서버 설정과 일관성을 유지하려면 Virtualmin UI를 사용하여 레코드를 편집해야 합니다.
master_vminalias=이 영역은 대상과 동기화된 상태로 유지되는 Virtualmin 도메인의 별칭입니다. 모든 변경 사항을 덮어쓰게 되므로 여기에서 레코드를 편집하면 안 됩니다!
delete_mesg2=루트 영역을 삭제 하시겠습니까? DNS 서버가 더 이상 인터넷에서 주소를 조회하지 못할 수 있습니다.
delete_mesg3=영역 $1을 삭제 하시겠습니까?

View File

@@ -147,8 +147,6 @@ master_defttl=Numatytasis įrašų gyvavimo laikas
master_edefttl=„$1“ nėra tinkamas numatytasis įrašų gyvavimo laikas
master_esoagone=Nerastas SOA įrašas.
master_einclude=Papildomo šablono failo nėra
master_vmin=Šią zoną valdo „Virtualmin“. Įrašai turi būti redaguojami naudojant „Virtualmin“ vartotojo sąsają, siekiant užtikrinti, kad jie atitiktų kitus virtualaus serverio nustatymus.
master_vminalias=Ši zona yra „Virtualmin“ domeno slapyvardis, kuris yra sinchronizuojamas su savo taikiniu. Įrašai čia niekada neturėtų būti redaguojami, nes bet kokie pakeitimai bus perrašyti!
delete_title=Ištrinti zoną
delete_mesg=Ar tikrai norite ištrinti $1 zoną? Visi įrašai ir zonos failai bus ištrinti.

View File

@@ -147,8 +147,6 @@ master_defttl=Noklusētais ierakstu dzīves laiks
master_edefttl='$1' nav derīgs ierakstu noklusējuma dzīves laiks
master_esoagone=Nav atrasts neviens SOA ieraksts.
master_einclude=Papildu veidnes fails neeksistē
master_vmin=Šo zonu pārvalda Virtualmin. Ieraksti ir jārediģē, izmantojot Virtualmin UI, lai nodrošinātu to atbilstību citiem virtuālā servera iestatījumiem.
master_vminalias=Šī zona ir Virtualmin domēna aizstājvārds, kas tiek sinhronizēts ar tā mērķi. Ierakstus nekad nevajadzētu rediģēt šeit, jo visas izmaiņas tiks pārrakstītas!
delete_title=Dzēst zonu
delete_mesg=Vai tiešām vēlaties izdzēst zonu $1? Visi ieraksti un zonas fails tiks izdzēsti.

View File

@@ -147,8 +147,6 @@ master_defttl=Waktu untuk hidup untuk rekod lalai
master_edefttl='$1' bukan masa lalai yang sah untuk rekod
master_esoagone=Tiada rekod SOA ditemui!
master_einclude=Fail templat tambahan tidak wujud
master_vmin=Zon ini diuruskan oleh Virtualmin. Rekod hendaklah diedit menggunakan UI Virtualmin, untuk memastikan ia konsisten dengan tetapan pelayan maya yang lain.
master_vminalias=Zon ini ialah alias domain Virtualmin, yang disimpan selari dengan sasarannya. Rekod tidak boleh diedit di sini, kerana sebarang perubahan akan ditimpa!
delete_title=Padamkan Zon
delete_mesg=Adakah anda pasti mahu memadamkan zon $1? Semua rekod dan fail zon akan dihapuskan.

View File

@@ -147,8 +147,6 @@ master_defttl=Żmien tal-għajxien awtomatiku għar-rekords
master_edefttl="$1" m'huwiex il-ħin ta 'l-għajxien validu għar-rekords
master_esoagone=Ma nstab l-ebda rekord SOA!
master_einclude=Fajl mudell addizzjonali ma jeżistix
master_vmin=Din iż-żona hija mmexxija minn Virtualmin. Ir-rekords għandhom jiġu editjati bl-użu ta' Virtualmin UI, biex jiġi żgurat li jkunu konsistenti ma' settings oħra ta' server virtwali.
master_vminalias=Din iż-żona hija alias ta' dominju Virtualmin, li jinżamm sinkronizzat mal-mira tiegħu. Ir-rekords m'għandhom qatt jiġu editjati hawn, peress li kwalunkwe tibdil se jinkiteb fuqhom!
delete_title=Ħassar Żona
delete_mesg=Int żgur li trid tħassar iż-żona $1? Ir-rekords kollha u l-fajl taż-żona se jitħassru.

View File

@@ -9,8 +9,6 @@ master_inview=$1 in zicht $2
master_egone=Zone $1 bestaat in geen enkele weergave
master_egone2=Zone $1 bestaat niet!
master_egone3=Zone $1 in zicht $2 bestaat niet!
master_vmin=Deze zone wordt beheerd door Virtualmin. Records moeten worden bewerkt met behulp van de gebruikersinterface van Virtualmin, om ervoor te zorgen dat ze consistent zijn met andere virtuele serverinstellingen.
master_vminalias=Deze zone is een alias van een Virtualmin-domein, dat synchroon wordt gehouden met zijn doel. Records mogen hier nooit worden bewerkt, omdat eventuele wijzigingen worden overschreven!
delete_vwarn=Deze zone is gekoppeld aan het Virtualmin-domein $1 en mag hier dus niet worden verwijderd!

View File

@@ -1,6 +1,3 @@
master_vmin=Denne sonen administreres av Virtualmin. Oppføringer bør redigeres ved hjelp av Virtualmin-grensesnittet for å sikre at de stemmer overens med andre virtuelle serverinnstillinger.
master_vminalias=Denne sonen er et alias for et Virtualmin-domene, som holdes synkronisert med målet. Poster bør aldri redigeres her, da eventuelle endringer vil bli overskrevet!
slave_format=Sone filformat
slave_raw=Rå binær
slave_text=Ren tekst

View File

@@ -3,8 +3,6 @@ index_eexpired_conf=Automatyczne podpisywanie powinno zostać ponownie włączon
index_eexpired_mod=Użyj modułu $1, aby wyłączyć DNSSEC dla tych domen lub sprawdzić, dlaczego podpisywanie kończy się niepowodzeniem.
master_inview=$1 w widoku $2
master_vmin=Tą strefą zarządza Virtualmin. Rekordy należy edytować za pomocą interfejsu użytkownika Virtualmin, aby zapewnić ich spójność z innymi ustawieniami serwera wirtualnego.
master_vminalias=Ta strefa jest aliasem domeny Virtualmin, która jest synchronizowana z celem. Rekordów nigdy nie należy tutaj edytować, ponieważ wszelkie zmiany zostaną nadpisane!
delete_vwarn=Ta strefa jest powiązana z domeną Virtualmin $1, dlatego nie należy jej tutaj usuwać!

View File

@@ -88,8 +88,6 @@ master_defttl=Tempo de vida padrão para registros
master_edefttl='$1' não é um tempo de vida padrão válido para registros
master_esoagone=Nenhum registro SOA encontrado!
master_einclude=Arquivo de modelo adicional não existe
master_vmin=Esta zona é gerenciada pelo Virtualmin. Os registros devem ser editados usando a IU do Virtualmin, para garantir que sejam consistentes com outras configurações do servidor virtual.
master_vminalias=Esta zona é um alias de um domínio Virtualmin, que é mantido em sincronia com seu alvo. Os registros nunca devem ser editados aqui, pois quaisquer alterações serão substituídas!
delete_title=Excluir zona
delete_mesg=Tem certeza de que deseja excluir a zona $1? Todos os registros e o arquivo de zona serão excluídos.

View File

@@ -11,8 +11,6 @@ master_inview=$1 na visualização $2
master_egone=A zona $1 não existe em nenhuma visualização
master_egone2=A zona $1 não existe!
master_egone3=A zona $1 na exibição $2 não existe!
master_vmin=Esta zona é gerenciada pelo Virtualmin. Os registros devem ser editados usando a IU do Virtualmin, para garantir que sejam consistentes com outras configurações do servidor virtual.
master_vminalias=Esta zona é um alias de um domínio Virtualmin, que é mantido em sincronia com seu destino. Os registros nunca devem ser editados aqui, pois quaisquer alterações serão substituídas!
delete_vwarn=Esta zona está associada ao domínio Virtualmin $1 e, portanto, não deve ser excluída aqui!

View File

@@ -147,8 +147,6 @@ master_defttl=Timp de viață implicit pentru înregistrări
master_edefttl=„$1” nu este o durată de viață implicită valabilă pentru înregistrări
master_esoagone=Nu a fost găsită nicio înregistrare SOA!
master_einclude=Fișierul șablon suplimentar nu există
master_vmin=Această zonă este gestionată de Virtualmin. Înregistrările trebuie editate utilizând interfața de utilizare Virtualmin, pentru a se asigura că sunt în concordanță cu alte setări ale serverului virtual.
master_vminalias=Această zonă este un alias al unui domeniu Virtualmin, care este menținut în sincronizare cu ținta sa. Înregistrările nu trebuie niciodată editate aici, deoarece orice modificări vor fi suprascrise!
delete_title=Ștergeți Zona
delete_mesg=Sigur doriți să ștergeți zona $1? Toate înregistrările și fișierul de zonă vor fi șterse.

View File

@@ -48,8 +48,6 @@ master_defttl=Время жизни по умолчанию для записе
master_edefttl=«$1» не является допустимым временем жизни по умолчанию для записей
master_esoagone=Запись SOA не найдена!
master_einclude=Дополнительный файл шаблона не существует
master_vmin=Эта зона управляется Virtualmin. Записи следует редактировать с помощью пользовательского интерфейса Virtualmin, чтобы обеспечить их соответствие другим настройкам виртуального сервера.
master_vminalias=Эта зона является псевдонимом домена Virtualmin, который синхронизируется со своей целью. Записи никогда не должны редактироваться здесь, так как любые изменения будут перезаписаны!
delete_mesg3=Вы уверены, что хотите удалить зону $1?
delete_onslave=Также удалить с подчиненных серверов?

View File

@@ -147,8 +147,6 @@ master_defttl=Predvolený čas dožívania záznamov
master_edefttl='$1' nie je platný predvolený čas do života záznamov
master_esoagone=Nenašli sa žiadne záznamy SOA!
master_einclude=Dodatočný súbor šablóny neexistuje
master_vmin=Túto zónu spravuje Virtualmin. Záznamy by sa mali upravovať pomocou používateľského rozhrania Virtualmin, aby sa zabezpečilo, že budú konzistentné s ostatnými nastaveniami virtuálneho servera.
master_vminalias=Táto zóna je alias domény Virtualmin, ktorá je synchronizovaná s jej cieľom. Záznamy by sa tu nikdy nemali upravovať, pretože akékoľvek zmeny budú prepísané!
delete_title=Odstrániť zónu
delete_mesg=Naozaj chcete odstrániť zónu $1? Všetky záznamy a súbor zóny budú vymazané.

View File

@@ -147,8 +147,6 @@ master_defttl=Privzeti čas za življenje za zapise
master_edefttl='$1' ni veljaven privzeti čas za življenje za zapise
master_esoagone=Ni SOA zapisa!
master_einclude=Dodatna datoteka predloge ne obstaja
master_vmin=To območje upravlja Virtualmin. Zapise je treba urejati z uporabniškim vmesnikom Virtualmin, da se zagotovi skladnost z drugimi nastavitvami virtualnega strežnika.
master_vminalias=To območje je vzdevek domene Virtualmin, ki je sinhronizirana s svojim ciljem. Zapisov nikoli ne urejajte tukaj, saj bodo vse spremembe prepisane!
delete_title=Zbriši cono
delete_mesg=Ali ste prepričani, da želite izbrisati cono $1? Vsi zapisi in zonska datoteka bodo izbrisani.

View File

@@ -27,8 +27,6 @@ master_movedesc=Flyttar denna zon till en annan vy, samtidigt som alla poster oc
master_applymsg2=Klicka på den här knappen för att endast tillämpa ändringar för denna zon. Detta fungerar bara om ändringar har tillämpats för hela servern minst en gång sedan zonen skapades.
master_esoagone=Ingen SOA-post hittades!
master_einclude=Ytterligare mallfil finns inte
master_vmin=Denna zon hanteras av Virtualmin. Poster bör redigeras med Virtualmin-gränssnittet för att säkerställa att de överensstämmer med andra virtuella serverinställningar.
master_vminalias=Denna zon är ett alias för en Virtualmin-domän, som hålls synkroniserad med dess mål. Poster bör aldrig redigeras här, eftersom alla ändringar kommer att skrivas över!
delete_mesg3=Är du säker på att du vill ta bort zonen $1?
delete_vwarn=Denna zon är associerad med Virtualmin-domänen $1, och bör därför inte tas bort här!

View File

@@ -147,8 +147,6 @@ master_defttl=ค่าเริ่มต้นเวลาอยู่เพื
master_edefttl='$1' ไม่ใช่เวลาเริ่มต้นที่ถูกต้องสำหรับบันทึก
master_esoagone=ไม่พบบันทึก SOA!
master_einclude=ไม่มีไฟล์เทมเพลตเพิ่มเติม
master_vmin=โซนนี้จัดการโดย Virtualmin ควรแก้ไขบันทึกโดยใช้ Virtualmin UI เพื่อให้แน่ใจว่าสอดคล้องกับการตั้งค่าเซิร์ฟเวอร์เสมือนอื่นๆ
master_vminalias=โซนนี้เป็นนามแฝงของโดเมน Virtualmin ซึ่งซิงค์กับเป้าหมาย ไม่ควรแก้ไขบันทึกที่นี่ เนื่องจากการเปลี่ยนแปลงใดๆ จะถูกเขียนทับ!
delete_title=ลบโซน
delete_mesg=คุณแน่ใจหรือว่าต้องการลบโซน $1 ระเบียนทั้งหมดและไฟล์โซนจะถูกลบ

View File

@@ -29,8 +29,6 @@ master_movedesc=Tüm kayıtları ve diğer seçenekleri korurken bu bölgeyi ba
master_applymsg2=Yalnızca bu bölge için değişiklik uygulamak üzere bu düğmeyi tıklayın. Bu, yalnızca bölge oluşturulduğundan bu yana en az bir kez tüm sunucu için değişiklikler uygulandığında çalışır.
master_esoagone=SOA kaydı bulunamadı!
master_einclude=Ek şablon dosyası yok
master_vmin=Bu bölge Virtualmin tarafından yönetilmektedir. Diğer sanal sunucu ayarlarıyla tutarlı olduklarından emin olmak için kayıtlar Virtualmin UI kullanılarak düzenlenmelidir.
master_vminalias=Bu bölge, hedefiyle senkronize tutulan bir Virtualmin etki alanının takma adıdır. Herhangi bir değişikliğin üzerine yazılacağı için kayıtlar burada asla düzenlenmemelidir!
delete_mesg3=$1 bölgesini silmek istediğinizden emin misiniz?
delete_vwarn=Bu bölge $1 Virtualmin etki alanı ile ilişkilidir ve buradan silinmemelidir!

View File

@@ -48,8 +48,6 @@ master_defttl=Час життя для записів за замовчуван
master_edefttl='$1' не є дійсним за замовчуванням для прослуховування записів за замовчуванням
master_esoagone=Запис SOA не знайдено!
master_einclude=Додатковий файл шаблону не існує
master_vmin=Цією зоною керує Virtualmin. Записи слід редагувати за допомогою інтерфейсу користувача Virtualmin, щоб переконатися, що вони відповідають іншим налаштуванням віртуального сервера.
master_vminalias=Ця зона є псевдонімом домену Virtualmin, який синхронізується з цільовим доменом. Тут ніколи не можна редагувати записи, оскільки будь-які зміни будуть перезаписані!
delete_mesg3=Ви впевнені, що хочете видалити зону $1?
delete_onslave=Видалити також з підлеглого серверів?

View File

@@ -147,8 +147,6 @@ master_defttl=پہلے سے طے شدہ ریکارڈوں کے لئے وقت رہ
master_edefttl='$1' is not a valid default time-to-live for records
master_esoagone=ایس او اے کا کوئی ریکارڈ نہیں ملا!
master_einclude=اضافی ٹیمپلیٹ فائل موجود نہیں ہے
master_vmin=یہ زون Virtualmin کے زیر انتظام ہے۔ Virtualmin UI کا استعمال کرتے ہوئے ریکارڈز میں ترمیم کی جانی چاہیے، تاکہ یہ یقینی بنایا جا سکے کہ وہ دیگر ورچوئل سرور کی ترتیبات کے ساتھ مطابقت رکھتے ہیں۔
master_vminalias=یہ زون ورچوئل مین ڈومین کا ایک عرف ہے، جسے اس کے ہدف کے ساتھ ہم آہنگ رکھا جاتا ہے۔ یہاں ریکارڈز میں کبھی بھی ترمیم نہیں کی جانی چاہیے، کیونکہ کوئی بھی تبدیلی اوور رائٹ ہو جائے گی!
delete_title=زون کو حذف کریں
delete_mesg=Are you sure you want to delete the zone $1 ? All records and the zone file will be deleted.

View File

@@ -147,8 +147,6 @@ master_defttl=Thời gian tồn tại mặc định cho hồ sơ
master_edefttl='$1' không phải là thời gian tồn tại mặc định hợp lệ cho các bản ghi
master_esoagone=Không tìm thấy bản ghi SOA!
master_einclude=Tệp mẫu bổ sung không tồn tại
master_vmin=Vùng này được quản lý bởi Virtualmin. Các bản ghi phải được chỉnh sửa bằng giao diện người dùng Virtualmin để đảm bảo chúng nhất quán với các cài đặt máy chủ ảo khác.
master_vminalias=Vùng này là bí danh của miền Virtualmin, được giữ đồng bộ với mục tiêu của nó. Các bản ghi không bao giờ được chỉnh sửa ở đây, vì mọi thay đổi sẽ bị ghi đè!
delete_title=Xóa vùng
delete_mesg=Bạn có chắc chắn muốn xóa vùng $1? Tất cả các hồ sơ và các tập tin khu vực sẽ bị xóa.

View File

@@ -48,8 +48,6 @@ master_defttl=记录的默认生存时间
master_edefttl='$1'不是记录的有效默认生存时间
master_esoagone=找不到SOA记录
master_einclude=附加模板文件不存在
master_vmin=该区域由 Virtualmin 管理。应使用 Virtualmin UI 编辑记录,以确保它们与其他虚拟服务器设置一致。
master_vminalias=该区域是 Virtualmin 域的别名,与其目标保持同步。切勿在此处编辑记录,因为任何更改都将被覆盖!
delete_mesg3=您确定要删除区域$1吗
delete_onslave=还要从从服务器删除吗?

View File

@@ -77,8 +77,6 @@ master_defttl=記錄的默認生存時間
master_edefttl='$1'不是記錄的有效默認生存時間
master_esoagone=找不到SOA記錄
master_einclude=附加模板文件不存在
master_vmin=該區域由 Virtualmin 管理。應使用 Virtualmin UI 編輯記錄,以確保它們與其他虛擬服務器設置一致。
master_vminalias=該區域是 Virtualmin 域的別名,與其目標保持同步。切勿在此處編輯記錄,因為任何更改都將被覆蓋!
delete_mesg2=您確定要刪除根區域嗎您的DNS服務器可能不再能夠在Internet上查找地址。
delete_mesg3=您確定要刪除區域$1嗎

View File

@@ -495,10 +495,11 @@ return $name.
# Increase the serial number in some SOA record by 1
sub bump_soa_record
{
my ($file, $recs) = @_;
foreach my $r (@$recs) {
my($r, $v, $vals);
for(my $i=0; $i<@{$_[1]}; $i++) {
$r = $_[1]->[$i];
if ($r->{'type'} eq "SOA") {
my $v = $r->{'values'};
$v = $r->{'values'};
# already set serial if no acl allow it to update or update
# is disabled
my $serial = $v->[2];
@@ -506,8 +507,8 @@ foreach my $r (@$recs) {
# automatically handle serial numbers ?
$serial = &compute_serial($v->[2]);
}
my $vals = "$v->[0] $v->[1] (\n\t\t\t$serial\n\t\t\t$v->[3]\n".
"\t\t\t$v->[4]\n\t\t\t$v->[5]\n\t\t\t$v->[6] )";
$vals = "$v->[0] $v->[1] (\n\t\t\t$serial\n\t\t\t$v->[3]\n".
"\t\t\t$v->[4]\n\t\t\t$v->[5]\n\t\t\t$v->[6] )";
&modify_record($r->{'file'}, $r, $r->{'realname'}, $r->{'ttl'},
$r->{'class'}, $r->{'type'}, $vals);
}

View File

@@ -4,7 +4,7 @@ use strict;
use warnings;
no warnings 'redefine';
no warnings 'uninitialized';
our (%access, %text, %in, %config, $bind_version);
our (%access, %text, %in, %config);
require './bind8-lib.pl';
$access{'defaults'} || &error($text{'trusted_ecannot'});
@@ -17,9 +17,7 @@ my $conf = $parent->{'members'};
my $options = &find("options", $conf);
# DNSSEC enabled
if (&compare_version_numbers($bind_version, '<', '9.16.0')) {
&save_choice("dnssec-enable", $options, 1);
}
&save_choice("dnssec-enable", $options, 1);
if (&supports_dnssec_client() == 2) {
&save_choice("dnssec-validation", $options, 1);
}

View File

@@ -59,9 +59,9 @@ if ($access{'lang'}) {
# Old datetime format or a new locale
if ($access{'locale'}) {
&foreign_require('webmin');
eval "use DateTime; use DateTime::Locale; use DateTime::TimeZone;";
if (!$@ && $] > 5.011) {
&foreign_require('webmin');
if (!$@) {
my $locales = &list_locales();
my %localesrev = reverse %{$locales};
my $locale = $locale_auto || $gconfig{'locale'} || &get_default_system_locale();

View File

@@ -233,32 +233,25 @@ print "<p><b>$text{'do_done'}</b><p>\n";
# Show details of installed packages, where we have them
for($i=0; $i<@names; $i++) {
next if (!$pinfo[$i]);
print &ui_table_start($text{'do_details'}, "width=100%", 4);
print "<table border width=100%>\n";
print "<tr $tb> <td><b>$text{'do_details'}</b></td> </tr>\n";
print "<tr $cb> <td><table width=100%>\n";
if ($pinfo[$i]->[2]) {
print &ui_table_row($text{'do_desc'},
"<pre>".&html_escape($pinfo[$i]->[2])."</pre>", 3);
print "<tr> <td valign=top width=20%><b>$text{'do_desc'}</b></td>\n";
print "<td colspan=3><pre>$pinfo[$i]->[2]</pre></td> </tr>\n";
}
print &ui_table_row($text{'do_pack'},
$pinfo[$i]->[0]);
print "<tr> <td width=20%><b>$text{'do_pack'}</b></td> <td>$pinfo[$i]->[0]</td>\n";
print "<td width=20%><b>$text{'do_class'}</b></td> <td>",
$pinfo[$i]->[1] ? $pinfo[$i]->[1] : $text{'do_none'},"</td> </tr>\n";
print &ui_table_row($text{'do_class'},
$pinfo[$i]->[1] || $text{'do_none'});
print "<tr> <td width=20%><b>$text{'do_ver'}</b></td> <td>$pinfo[$i]->[4]</td>\n";
print "<td width=20%><b>$text{'do_vend'}</b></td> <td>$pinfo[$i]->[5]</td> </tr>\n";
print &ui_table_row($text{'do_ver'},
$pinfo[$i]->[4]);
print &ui_table_row($text{'do_vend'},
$pinfo[$i]->[5]);
print &ui_table_row($text{'do_arch'},
$pinfo[$i]->[3]);
print &ui_table_row($text{'do_inst'},
$pinfo[$i]->[6]);
print &ui_table_end();
print "<tr> <td width=20%><b>$text{'do_arch'}</b></td> <td>$pinfo[$i]->[3]</td>\n";
print "<td width=20%><b>$text{'do_inst'}</b></td> <td>$pinfo[$i]->[6]</td> </tr>\n";
print "</table></td></tr></table><p>\n";
}
&remote_finished();

View File

@@ -22,12 +22,10 @@ else {
if ($in{source} == 0) {
# installing from local file (or maybe directory)
if (!$in{'local'}) {
&install_error($text{'install_elocal'});
}
if (!-r $in{'local'}) {
&install_error(&text('install_elocal2', &html_escape($in{'local'})));
}
if (!$in{'local'})
{ &install_error($text{'install_elocal'}); }
if (!-r $in{'local'})
{ &install_error(&text('install_elocal2', $in{'local'})); }
$source = $in{'local'};
$pfile = $in{'local'};
$filename = $in{'local'};
@@ -179,7 +177,7 @@ print &ui_form_end([ [ undef, $text{'install_ok'} ] ]);
sub install_error
{
print "<b>$main::whatfailed : @{[&html_escape($_[0])]}</b> <p>\n";
print "<b>$main::whatfailed : $_[0]</b> <p>\n";
&ui_print_footer("", $text{'index_return'});
exit;
}

View File

@@ -29,7 +29,7 @@ if (@match == 1) {
&ui_print_header(undef, $text{'search_title'}, "", "search");
if (@match) {
@match = sort { lc($a->{'name'}) cmp lc($b->{'name'}) } @match;
print "<b>",&text('search_match', "<tt>".&html_escape($s)."</tt>"),"</b><br>\n";
print "<b>",&text('search_match', "<tt>$s</tt>"),"</b><br>\n";
print &ui_form_start("delete_packs.cgi", "post");
print &ui_hidden("search", $in{'search'}),"\n";
@@ -43,8 +43,8 @@ if (@match) {
$text{'search_desc'} ], 100, 0, \@tds);
foreach $i (@match) {
local @cols;
push(@cols, "<a href=\"edit_pack.cgi?search=".&urlize($s).
"&package=".&urlize($i->{'name'})."\">$i->{'name'}</a>");
push(@cols, "<a href=\"edit_pack.cgi?search=$s&package=".
&urlize($i->{'name'})."\">$i->{'name'}</a>");
$c = $i->{'class'};
push(@cols, $i->{'class'} || $text{'search_none'});
push(@cols, $i->{'desc'});
@@ -62,7 +62,7 @@ if (@match) {
print &ui_form_end();
}
else {
print "<b>",&text('search_nomatch', "<tt>".&html_escape($s)."</tt>"),"</b>\n";
print "<b>",&text('search_nomatch', "<tt>$s</tt>"),"</b>\n";
}
&ui_print_footer("", $text{'index_return'});

View File

@@ -16,12 +16,10 @@ else {
if ($in{source} == 0) {
# installing from local file (or maybe directory)
if (!$in{'local'}) {
&download_error($text{'install_elocal'});
}
if (!-r $in{'local'}) {
&download_error(&text('install_elocal2', &html_escape($in{'local'})));
}
if (!$in{'local'})
{ &download_error($text{'install_elocal'}); }
if (!-r $in{'local'})
{ &download_error(&text('install_elocal2', $in{'local'})); }
$source = $in{'local'};
$pfile = $in{'local'};
$need_unlink = 0;
@@ -57,9 +55,7 @@ elsif ($in{source} == 2) {
&ftp_download($host, $file, $pfile, \$error,
\&progress_callback);
}
else {
&download_error(&text('install_eurl', &html_escape($in{'url'})));
}
else { &download_error(&text('install_eurl', $in{'url'})); }
&download_error($error) if ($error);
$source = $in{'url'};
$need_unlink = 1;

View File

@@ -16,12 +16,10 @@ else {
if ($in{source} == 0) {
# installing from local file (or maybe directory)
if (!$in{'local'}) {
&download_error($text{'install_elocal'});
}
if (!-r $in{'local'}) {
&download_error(&text('install_elocal2', &html_escape($in{'local'})));
}
if (!$in{'local'})
{ &download_error($text{'install_elocal'}); }
if (!-r $in{'local'})
{ &download_error(&text('install_elocal2', $in{'local'})); }
$source = $in{'local'};
$pfile = $in{'local'};
$need_unlink = 0;
@@ -57,9 +55,7 @@ elsif ($in{source} == 2) {
&ftp_download($host, $file, $pfile, \$error,
\&progress_callback);
}
else {
&download_error(&text('install_eurl', &html_escape($in{'url'})));
}
else { &download_error(&text('install_eurl', $in{'url'})); }
&download_error($error) if ($error);
$source = $in{'url'};
$need_unlink = 1;

View File

@@ -389,7 +389,7 @@ print &ui_form_end([ [ undef, $text{'download_cont'} ],
sub install_error
{
print "<br><b>$main::whatfailed : @{[&html_escape($_[0])]}</b> <p>\n";
print "<br><b>$main::whatfailed : $_[0]</b> <p>\n";
&ui_print_footer($in{'return'},
$in{'returndesc'} || $text{'index_return'});
exit;

View File

@@ -19,10 +19,6 @@ while(@ARGV) {
shift(@ARGV);
$createsig = 1;
}
elsif ($ARGV[0] eq "--key") {
shift(@ARGV);
$keyname = shift(@ARGV);
}
elsif ($ARGV[0] eq "--exclude") {
shift(@ARGV);
push(@exclude, shift(@ARGV));
@@ -102,8 +98,7 @@ if ($file =~ /^(.*)\.gz$/i) {
}
if ($createsig) {
system("rm -f $file-sig.asc");
system("gpg ".($keyname ? " --default-key $keyname" : "").
" --armor --output $file-sig.asc --detach-sig $file");
system("gpg --armor --output $file-sig.asc --detach-sig $file");
}
# read_file(file, &assoc, [&order], [lowercase])

View File

@@ -925,7 +925,7 @@ $table .= &ui_columns_row(\@cols, [ "valign=top", "valign=top", "valign=top",
"valign=top", "valign=top" ]);
$table .= &ui_columns_end();
$table .= $text{'edit_ctrl'};
$rv .= &ui_table_row(undef, $table, $width, undef, ['data-schedule-tr']);
$rv .= &ui_table_row(undef, $table, $width);
return $rv;
}
@@ -1228,53 +1228,34 @@ Returns a human-readable text string describing when a cron job is run.
=cut
sub when_text
{
my ($job, $ucfirst) = @_;
my $pfx = $ucfirst ? "uc" : "";
if ($job->{'interval'}) {
return &text($pfx.'when_interval', $job->{'interval'});
local $pfx = $_[1] ? "uc" : "";
if ($_[0]->{'interval'}) {
return &text($pfx.'when_interval', $_[0]->{'interval'});
}
elsif ($job->{'special'}) {
elsif ($_[0]->{'special'}) {
$pfx = $_[1] ? "" : "lc";
return $text{$pfx.'edit_special_'.$job->{'special'}};
return $text{$pfx.'edit_special_'.$_[0]->{'special'}};
}
elsif ($job->{'boot'}) {
elsif ($_[0]->{'boot'}) {
return &text($pfx.'when_boot');
}
elsif ($job->{'mins'} eq '*' && $job->{'hours'} eq '*' &&
$job->{'days'} eq '*' && $job->{'months'} eq '*' &&
$job->{'weekdays'} eq '*') {
elsif ($_[0]->{'mins'} eq '*' && $_[0]->{'hours'} eq '*' && $_[0]->{'days'} eq '*' && $_[0]->{'months'} eq '*' && $_[0]->{'weekdays'} eq '*') {
return $text{$pfx.'when_min'};
}
elsif ($job->{'mins'} =~ /^\d+$/ && $job->{'hours'} eq '*' &&
$job->{'days'} eq '*' && $job->{'months'} eq '*' &&
$job->{'weekdays'} eq '*') {
return &text($pfx.'when_hour', $job->{'mins'});
elsif ($_[0]->{'mins'} =~ /^\d+$/ && $_[0]->{'hours'} eq '*' && $_[0]->{'days'} eq '*' && $_[0]->{'months'} eq '*' && $_[0]->{'weekdays'} eq '*') {
return &text($pfx.'when_hour', $_[0]->{'mins'});
}
elsif ($job->{'mins'} =~ /^\d+$/ && $job->{'hours'} =~ /^\d+$/ &&
$job->{'days'} eq '*' && $job->{'months'} eq '*' &&
$job->{'weekdays'} eq '*') {
return &text($pfx.'when_day',
sprintf("%2.2d", $job->{'mins'}),
sprintf("%2.2d", $job->{'hours'}));
elsif ($_[0]->{'mins'} =~ /^\d+$/ && $_[0]->{'hours'} =~ /^\d+$/ && $_[0]->{'days'} eq '*' && $_[0]->{'months'} eq '*' && $_[0]->{'weekdays'} eq '*') {
return &text($pfx.'when_day', sprintf("%2.2d", $_[0]->{'mins'}), $_[0]->{'hours'});
}
elsif ($job->{'mins'} =~ /^\d+$/ && $job->{'hours'} =~ /^\d+$/ &&
$job->{'days'} =~ /^\d+$/ && $job->{'months'} eq '*' &&
$job->{'weekdays'} eq '*') {
return &text($pfx.'when_month',
sprintf("%2.2d", $job->{'mins'}),
sprintf("%2.2d", $job->{'hours'}),
$job->{'days'});
elsif ($_[0]->{'mins'} =~ /^\d+$/ && $_[0]->{'hours'} =~ /^\d+$/ && $_[0]->{'days'} =~ /^\d+$/ && $_[0]->{'months'} eq '*' && $_[0]->{'weekdays'} eq '*') {
return &text($pfx.'when_month', sprintf("%2.2d", $_[0]->{'mins'}), $_[0]->{'hours'}, $_[0]->{'days'});
}
elsif ($job->{'mins'} =~ /^\d+$/ && $job->{'hours'} =~ /^\d+$/ &&
$job->{'days'} eq '*' && $job->{'months'} eq '*' &&
$job->{'weekdays'} =~ /^\d+$/) {
return &text($pfx.'when_weekday',
sprintf("%2.2d", $job->{'mins'}),
sprintf("%2.2d", $job->{'hours'}),
$text{"day_".$job->{'weekdays'}});
elsif ($_[0]->{'mins'} =~ /^\d+$/ && $_[0]->{'hours'} =~ /^\d+$/ && $_[0]->{'days'} eq '*' && $_[0]->{'months'} eq '*' && $_[0]->{'weekdays'} =~ /^\d+$/) {
return &text($pfx.'when_weekday', sprintf("%2.2d", $_[0]->{'mins'}), $_[0]->{'hours'}, $text{"day_".$_[0]->{'weekdays'}});
}
else {
return &text($pfx.'when_cron', join(" ", $job->{'mins'}, $job->{'hours'}, $job->{'days'}, $job->{'months'}, $job->{'weekdays'}));
return &text($pfx.'when_cron', join(" ", $_[0]->{'mins'}, $_[0]->{'hours'}, $_[0]->{'days'}, $_[0]->{'months'}, $_[0]->{'weekdays'}));
}
}
@@ -1556,8 +1537,7 @@ if ($err) {
=head2 cleanup_temp_files
Called from cron to delete old files in the Webmin /tmp directory, and also
old lock links directories.
Called from cron to delete old files in the Webmin /tmp directory
=cut
sub cleanup_temp_files
@@ -1588,18 +1568,6 @@ foreach my $f (readdir(DIR)) {
}
}
closedir(DIR);
my $lockdir = $var_directory."/locks";
opendir(DIR, $lockdir);
foreach my $f (readdir(DIR)) {
next if ($f eq "." || $f eq "..");
next if ($f !~ /^\d+$/);
if (!kill(0, $f)) {
# Process is gone, but never cleaned up!
&unlink_file("$lockdir/$f");
}
}
closedir(DIR);
}
=head2 list_cron_files()
@@ -1616,7 +1584,6 @@ if ($config{'system_crontab'}) {
}
if ($config{'cronfiles_dir'}) {
push(@files, glob(&translate_filename($config{'cronfiles_dir'})."/*"));
@files = grep { -f $_ } @files;
}
return &unique(@files);
}

View File

@@ -108,7 +108,7 @@ foreach $u (@ulist) {
$cmdidx = scalar(@cols);
push(@cols, &ui_link("edit_env.cgi?idx=".$idx,
"<i>$text{'index_env'}</i> ".
"<tt>@{[&html_escape($job->{'name'})]} = @{[&html_escape($job->{'value'})]}</tt>") );
"<tt>$job->{'name'} = $job->{'value'}</tt>") );
$donelink = 1;
}
elsif (@exp && $access{'command'}) {
@@ -156,7 +156,7 @@ foreach $u (@ulist) {
# Show comment
if ($config{'show_comment'} || $userconfig{'show_comment'}) {
push(@cols, &html_escape($job->{'comment'}));
push(@cols, $job->{'comment'});
}
# Show next run time

146
cron/lang/ru.auto Normal file
View File

@@ -0,0 +1,146 @@
index_when=Запустить время от времени
index_comment=Описание
index_none2=Нет заданий cron, к которым у вас есть доступ.
index_none3=У вас пока нет работы cron.
index_ecreate=Создайте новую переменную среды.
index_manual=Ручное редактирование заданий cron.
index_env=Переменная среды
index_move=Переехать
index_next=Следующий прогон
index_nunknown=неизвестный
index_run=Бег?
index_ecmd=Команда $1 для управления пользовательскими настройками Cron не найдена. Может быть, Cron не установлен в этой системе?
index_esingle=Файл $1, в котором перечислены задания Cron, не существует. Может быть, Cron не установлен в этой системе?
index_ecrondir=Каталог заданий Cron $1 не существует. Может быть, конфигурация модуля неверна, или Cron не установлен?
index_ecrondir_create=Попробуйте создать каталог заданий $1 ?
index_delete=Удалить выбранные вакансии
index_disable=Отключить выбранные вакансии
index_enable=Включить выбранные вакансии
index_esearch=По вашему запросу $1 не найдено ни одной вакансии.
index_toomany2=Есть слишком много рабочих мест, чтобы показать. Используйте форму поиска выше, чтобы ограничить список.
index_search=Найти подходящие вакансии Cron
index_ok=Поиск
index_searchres=Задания Cron, соответствующие $1 ..
index_reset=Сбросить поиск.
index_econfigcheck=Заданиями Cron нельзя управлять в вашей системе, так как недопустимая конфигурация модуля : $1
index_stop=Остановить демона Крон
index_stopdesc=Остановите фоновый серверный процесс <tt>crond</tt>, выполняющий запланированные задания cron. Это предотвратит выполнение команд в указанное время.
index_start=Запустить крон-демон
index_startdesc=Запустите фоновый серверный процесс <tt>crond</tt>, который запускает запланированные задания cron. <font color=red><b>Это необходимо для выполнения команд в указанное время.</font></font>
index_boot=Запустить загрузку Cron Daemon?
index_bootdesc=Измените этот параметр, чтобы включить или отключить запуск демона запланированных заданий cron во время загрузки системы.
edit_next=Время следующего запуска
edit_comment=Описание
edit_range=Диапазон дат для выполнения
edit_saverun=Сохранить и запустить сейчас
edit_clone=Клон Работа
edit_special1=Простой график ..
edit_special0=Время и даты выбраны ниже ..
edit_special_hourly=почасовой
edit_special_daily=Ежедневно (в полночь)
edit_special_weekly=Еженедельно (в воскресенье)
edit_special_monthly=Ежемесячно (1-го числа)
edit_special_yearly=Ежегодно (1 января)
edit_special_reboot=Когда система загружается
lcedit_special_hourly=почасовой
lcedit_special_daily=ежедневно (в полночь)
lcedit_special_weekly=еженедельно (в воскресенье)
lcedit_special_monthly=ежемесячно (1-го числа)
lcedit_special_yearly=ежегодно (1 января)
lcedit_special_reboot=когда система загружается
save_ecannot2=Вам не разрешено создавать рабочие места cron
save_eidx=Задание Cron было успешно сохранено, но не может быть запущено, поскольку оно не было найдено!
env_title1=Изменить переменную среды
env_title2=Создать переменную среды
env_user=Для пользователя
env_active=Активный?
env_details=Детали переменных среды
env_err=Не удалось сохранить переменную среды
env_order=Примечание. Этот параметр переменной среды будет применяться только к заданиям Cron после него в списке заданий на главной странице модуля.
env_where=Добавить переменную среды
env_where2=Переместить переменную среды
env_top=Перед всеми заданиями Cron для пользователя
env_bot=После всех работ Cron
env_leave=Текущая позиция
exec_cmdbg=Выполнение команды $1 в качестве фонового процесса.
acl_command=Можно просматривать и редактировать команды Cron?
acl_create=Можно ли создавать рабочие места в Cron?
acl_delete=Можно ли удалить задания Cron?
acl_move=Может перенести работу Cron?
acl_kill=Может прекратить работу Cron?
acl_hourly=Ограничить количество рабочих мест максимум до почасовой?
acl_hourlydef=Как установлено в модуле Config
acl_stop=Может ли остановить и запустить демон Cron?
log_kill=Прекращено задание Cron для $1
log_kill_l=Прекращено задание Cron "$2" для $1
log_env_create=Создана переменная среды для $1
log_env_modify=Измененная переменная среды для $1
log_env_delete=Удаленная переменная среды для $1
log_move=Задание Cron перемещено для $1
log_crons_delete=Удалено $1 заданий Cron
log_crons_disable=Отключено $1 заданий Cron
log_crons_enable=Включено $1 заданий Cron
log_stop=Остановленный демон cron
log_start=Запущен демон cron
log_bootup=Включен демон cron при загрузке
log_bootdown=Отключенный демон cron при загрузке
ecopy=Обнаружена ошибка в новой конфигурации Cron: $1 $2
when_min=каждую минуту
when_hour=каждый час в $1 за час
when_day=каждый день на $2:$1
when_month=в день $3 каждый месяц в $2:$1
when_weekday=каждый $3 на $2:$1
when_cron=в момент времени $1
when_interval=каждые $1 секунды
when_boot=во время запуска
ucwhen_min=Каждую минуту
ucwhen_hour=Каждый час в $1 за час
ucwhen_day=Каждый день в $2:$1
ucwhen_month=В день $3 каждый месяц в $2:$1
ucwhen_weekday=Каждый $3 на $2:$1
ucwhen_cron=Время cron $1
ucwhen_interval=Каждые $1 секунды
ucwhen_boot=Во время запуска
move_err=Не удалось переместить работу Cron
move_etype=Эта работа не может быть перемещена
kill_err=Не удалось завершить работу Cron
kill_ecannot=Вы не можете прекратить эту работу
kill_egone=Больше не работает
kill_ekill=Убить не удалось : $1
kill_title=Завершить работу Cron
kill_rusure=Вы уверены, что хотите завершить процесс $1 с PID $2 ?
kill_rusure2=Вы уверены, что хотите завершить процесс $1 с PID $2 и всеми его подпроцессами?
kill_ok=Да, прекратить это
range_all=Беги на любую дату
range_start=Запускать только с $1
range_end=в $1
range_estart=Отсутствует или неверная дата начала в диапазоне для запуска
range_eend=Отсутствует или недействительная дата окончания в диапазоне для запуска
delete_err=Не удалось удалить задания Cron
delete_enone=Не выбрано, ничего не выбрано
manual_title=Редактировать Cron Jobs вручную
manual_edit=Cron файл для редактирования:
manual_ok=редактировать
manual_editing=Используйте текстовое поле ниже для редактирования заданий Cron в $1. Будьте осторожны, так как Webmin не будет выполнять проверку!
manual_efile=Выбранный файл недействителен!
manual_ecannot=Вы не можете вручную редактировать задания cron
stop_err=Не удалось остановить демон
start_err=Не удалось запустить демон
stop_ecannot=Вам не разрешено останавливать демона
start_ecannot=Вам не разрешено запускать демон
bootup_ecannot=Вам не разрешено включать демон при загрузке

View File

@@ -74,12 +74,12 @@ open(FILE, "<".$_[0]);
while($line = <FILE>) {
# strip comments
$line =~ s/\r|\n//g;
$line =~ s/([^\\])\\"/$1\\042/g; # convert escaped quotes to \042
$line =~ s/^([^"#]*)#.*$/$1/g;
$line =~ s/^([^"]*)\/\/.*$/$1/g;
$line =~ s/^([^"]*)\s+#.*$/$1/g; # remove stuff after #, unless
$line =~ s/^(.*".*".*)\s+#.*$/$1/g; # it is inside quotes
$line =~ s/\\\\/\\134/g; # convert \\ into \134
$line =~ s/([^\\])\\"/$1\\042/g; # convert escaped quotes to \042
while(1) {
if (!$cmode && $line =~ /\/\*/ && $line !~ /\".*\/\*.*\"/) {
# start of a C-style comment

View File

@@ -216,11 +216,6 @@ return wantarray ? @rv : $rv[0];
sub save_directive
{
local ($conf, $name, $value, $sname, $svalue) = @_;
$newconf = [ grep { $_->{'file'} !~ /^\/usr\/share\/dovecot/ &&
$_->{'file'} !~ /^\/opt/ } @$conf ];
if (@$newconf) {
$conf = $newconf;
}
local $dir;
if (ref($name)) {
# Old directive given
@@ -582,4 +577,5 @@ else {
}
1;
r

View File

@@ -1,3 +1,4 @@
line2=System configuration,11
exports_file=Exported filesystems file,0
apply_cmd=Command to apply configuration,3,None
restart_command=Command to restart export server,0

View File

@@ -51,11 +51,9 @@ print &ui_table_row($text{'jail_ignoreip'},
my $backend = &find_value("backend", $jail);
print &ui_table_row($text{'jail_backend'},
&ui_select("backend", $backend || "auto",
[ [ "auto", $text{'jail_auto'} ],
[ "systemd", $text{'jail_systemd'} ],
[ "polling", $text{'jail_polling'} ],
[ "gamin", $text{'jail_gamin'} ],
[ "pyinotify", $text{'jail_pyinotify'} ] ]));
[ [ "auto", $text{'jail_auto'} ],
[ "gamin", $text{'jail_gamin'} ],
[ "polling", $text{'jail_polling'} ] ]));
# Email destination
my $destemail = &find_value("destemail", $jail);

View File

@@ -566,15 +566,4 @@ if ($?) {
}
}
# Unblock all IPs in given jail
sub unblock_jail
{
my ($jail) = @_;
my $cmd = "$config{'client_cmd'} reload --unban ".quotemeta($jail)." 2>&1 </dev/null";
my $out = &backquote_logged($cmd);
if ($?) {
&error(&text('status_err_unbanjail', &html_escape($jail)) . " : $out");
}
}
1;

View File

@@ -1,72 +0,0 @@
#!/usr/local/bin/perl
# Show a status of all active jails
use strict;
use warnings;
no warnings 'redefine';
no warnings 'uninitialized';
require './fail2ban-lib.pl';
our (%in, %text, %config);
&ReadParse();
my $jail = $in{'jail'};
my $out = &backquote_logged("$config{'client_cmd'} status 2>&1 </dev/null");
my ($jail_list) = $out =~ /jail\s+list:\s*(.*)/im;
my @jails = split(/,\s*/, $jail_list);
&indexof($jail, @jails) > -1 || error($text{'status_err_unknownjail'});
&ui_print_header("$jail", $text{'status_title3'}, "");
my $fh = 'jailinfo';
my @jail_blocks;
&open_execute_command($fh, "$config{'client_cmd'} get @{[quotemeta($jail)]} banip --with-time 2>&1 </dev/null", 1);
while(<$fh>) {
if (/^(?<ip>.*?)\s+(?<start>.*?\s+.*?)\s+.*?\s+.*?\s+=\s+(?<end>.*)$/) {
my $ip = $+{ip};
my $start = $+{start};
my $end = $+{end};
if ($ip && $start && $end) {
push(@jail_blocks, [$ip, $start, $end]);
}
}
}
close($fh);
if (@jail_blocks) {
my $popts = \%in;
$popts->{'paginations'}->{'form'} = { 'jail' => $jail };
my $pagination = &ui_paginations(\@jail_blocks, $popts);
my @links = ( &select_all_link("ip"),
&select_invert_link("ip"));
print $pagination->{'search'}->{'form-data'};
print &ui_form_start("unblock_jailed_ip.cgi", "post");
print &ui_links_row(\@links);
print &ui_columns_start([ "",
$text{'status_head_blocks_ip'},
$text{'status_head_blocks_stime'},
$text{'status_head_blocks_etime'} ]);
if (@jail_blocks) {
foreach my $r (@jail_blocks) {
print &ui_checked_columns_row($r, [ 'width=5' ], "ip", $r->[0]);
}
}
else {
print $pagination->{'search'}->{'no-results'};
}
print &ui_columns_end();
print $pagination->{'paginator'}->{'form-data'};
print $pagination->{'paginator'}->{'form-scripts'};
print &ui_hidden("jail", $jail);
print &ui_hidden("return", 1);
print $pagination->{'form'};
print &ui_links_row(\@links);
print &ui_form_end([ [ undef, $text{'status_jail_unblock_ips'} ] ]);
print $pagination->{'search'}->{'form'};
print $pagination->{'paginator'}->{'form'};
}
else {
print &text('status_jail_noactiveips', $jail);
}
&ui_print_footer("list_status.cgi", $text{'status_return'},
"", $text{'index_return'});

View File

@@ -171,30 +171,21 @@ manual_err=Konfiglêer kon nie gewysig word nie
manual_edata=Geen config-lêerinhoud ingevoer nie
status_title=Tronkstatus en aksies
status_title3=Tronkblokke
status_return=tronke status
status_head_jail_blocks=Tronk blokke
status_title2=Tronkstatus
status_head_jail_name=Tronk naam
status_head_currently_failed=Tans misluk
status_head_total_failed=Totaal het misluk
status_head_file_list=Lêer lys
status_head_currently_banned=Tans verban
status_head_total_banned=Totaal verban
status_head_banned_ip_list=Verbode IP-lys
status_head_blocks_ip=IP
status_head_blocks_stime=Begin Tyd
status_head_blocks_etime=Eind tyd
status_rules_plus_more=+ $1 meer
status_jail_unblock_ip=Verwyder $1 van verbode lys
status_jail_unblock=Deblokkeer alle IP's vir geselekteerde tronke
status_jail_unblock_ips=Deblokkeer geselekteerde IP
status_jail_noactive=Daar is nog geen aktiewe tronke geaktiveer nie.
status_jail_noactiveips=Daar is geen geblokkeerde inskrywings in die tronk <tt>$1</tt> gevind nie.
status_err_set=Kon nie stel handeling nie
status_err_unblock=Kon nie handeling deblokkeer nie
status_err_nojail=Geen tronke is gekies nie
status_err_noips=Geen IP is gekies nie
status_err_unban=Kan nie $1 IP-adres ontban nie
status_err_unbanjail=Kan nie $1 tronk de-ban nie
status_err_unknownjail=Onbekende tronk
syslog_logtarget=Fail2Ban aksie log

View File

@@ -171,30 +171,21 @@ manual_err=فشل في تحرير ملف التكوين
manual_edata=لم يتم إدخال محتويات ملف التكوين
status_title=حالة السجون والإجراءات
status_title3=كتل السجن
status_return=حالة السجون
status_head_jail_blocks=كتل السجن
status_title2=حالة السجون
status_head_jail_name=اسم السجن
status_head_currently_failed=فشل حاليا
status_head_total_failed=مجموع فشل
status_head_file_list=قائمة الملفات
status_head_currently_banned=محظور حاليا
status_head_total_banned=مجموع المحظورة
status_head_banned_ip_list=قائمة IP المحظورة
status_head_blocks_ip=IP
status_head_blocks_stime=وقت البدء
status_head_blocks_etime=وقت النهاية
status_rules_plus_more=+$1 آخرين
status_jail_unblock_ip=قم بإزالة$1 من القائمة المحظورة
status_jail_unblock=قم بإلغاء حظر جميع عناوين IP للسجون المختارة
status_jail_unblock_ips=إلغاء حظر IP المحدد
status_jail_noactive=لا توجد سجون نشطة ممكّنة حتى الآن.
status_jail_noactiveips=لا توجد إدخالات محظورة في السجن تم العثور على <tt>$1</tt>.
status_err_set=فشل تعيين الإجراء
status_err_unblock=فشل في إلغاء حظر الإجراء
status_err_nojail=لم يتم اختيار أي سجون
status_err_noips=لم يتم تحديد IP
status_err_unban=لا يمكن إلغاء حظر عنوان IP لـ$1
status_err_unbanjail=لا يمكن إلغاء حظر سجن$1
status_err_unknownjail=سجن مجهول
syslog_logtarget=سجل العمل Fail2Ban

View File

@@ -171,30 +171,21 @@ manual_err=Не атрымалася рэдагаваць канфігурацы
manual_edata=Не ўводзіцца змесціва канфігурацыйнага файла
status_title=Статус і дзеянні турмы
status_title3=Турэмныя блокі
status_return=статус турмы
status_head_jail_blocks=Турэмныя блокі
status_title2=Статус турмы
status_head_jail_name=Назва турмы
status_head_currently_failed=У цяперашні час не атрымалася
status_head_total_failed=Усяго не атрымалася
status_head_file_list=Спіс файлаў
status_head_currently_banned=У цяперашні час забаронены
status_head_total_banned=Поўная забарона
status_head_banned_ip_list=Спіс забароненых IP
status_head_blocks_ip=IP
status_head_blocks_stime=Час пачатку
status_head_blocks_etime=Час заканчэння
status_rules_plus_more=+ яшчэ $1
status_jail_unblock_ip=Выдаліць $1 са спісу забароненых
status_jail_unblock=Разблакіраваць усе IP-адрасы для выбраных турмаў
status_jail_unblock_ips=Разблакіраваць выбраны IP
status_jail_noactive=Пакуль няма актыўных турмаў.
status_jail_noactiveips=Заблакіраваных запісаў у турме <tt>$1</tt> не знойдзена.
status_err_set=Не атрымалася ўсталяваць дзеянне
status_err_unblock=Не ўдалося разблакіраваць дзеянне
status_err_nojail=СІЗА не выбрана
status_err_noips=IP не выбраны
status_err_unban=Немагчыма разбаніць $1 IP-адрас
status_err_unbanjail=Немагчыма зняць бан з турмы $1
status_err_unknownjail=Невядомая турма
syslog_logtarget=Журнал дзеянняў Fail2Ban

View File

@@ -171,30 +171,21 @@ manual_err=Конфигурационният файл не можа да се
manual_edata=Не е въведено съдържание на конфигурационен файл
status_title=Състояние и действия на затворите
status_title3=Затворнически блокове
status_return=състояние на затворите
status_head_jail_blocks=Затворнически блокове
status_title2=Статус на затворите
status_head_jail_name=Име на затвора
status_head_currently_failed=В момента неуспешно
status_head_total_failed=Общо неуспешно
status_head_file_list=Списък с файлове
status_head_currently_banned=В момента е забранено
status_head_total_banned=Тотално забранено
status_head_banned_ip_list=Списък с забранени IP адреси
status_head_blocks_ip=IP
status_head_blocks_stime=Начален час
status_head_blocks_etime=Крайно време
status_rules_plus_more=+ още $1
status_jail_unblock_ip=Премахнете $1 от списъка с забранени
status_jail_unblock=Деблокирайте всички IP адреси за избрани затвори
status_jail_unblock_ips=Деблокиране на избрания IP
status_jail_noactive=Все още няма активирани активни затвори.
status_jail_noactiveips=Няма намерени блокирани записи в затвора <tt>$1</tt>.
status_err_set=Неуспешно зададено действие
status_err_unblock=Деблокирането на действието не бе успешно
status_err_nojail=Не са избрани затвори
status_err_noips=Не е избрано IP
status_err_unban=Не може да се отмени забрана на $1 IP адрес
status_err_unbanjail=Не може да се отмени забраната на $1 затвор
status_err_unknownjail=Неизвестен затвор
syslog_logtarget=Fail2Ban дневник на действията

View File

@@ -3,28 +3,20 @@ log_update_action=Acció modificada $1
log_update_jail=Presó modificada $1
status_title=Estat i accions de les presons
status_title3=Blocs de la presó
status_return=estat de presons
status_head_jail_blocks=Blocs de presó
status_title2=Estat de les presons
status_head_jail_name=Nom de la presó
status_head_currently_failed=Actualment fallat
status_head_total_failed=Total fallit
status_head_file_list=Llista de fitxers
status_head_currently_banned=Prohibit actualment
status_head_total_banned=Total prohibit
status_head_banned_ip_list=Llista d'IP prohibides
status_head_blocks_ip=IP
status_head_blocks_stime=L'hora d'inici
status_head_blocks_etime=Fi del temps
status_rules_plus_more=+ $1 més
status_jail_unblock_ip=Elimina $1 de la llista prohibida
status_jail_unblock=Desbloquegeu totes les IP de les presons seleccionades
status_jail_unblock_ips=Desbloqueja la IP seleccionada
status_jail_noactive=Encara no hi ha presons actives activades.
status_jail_noactiveips=No s'ha trobat cap entrada bloquejada a la presó <tt>$1</tt>.
status_err_set=No s'ha pogut establir l'acció
status_err_unblock=No s'ha pogut desbloquejar l'acció
status_err_nojail=No s'ha seleccionat cap presó
status_err_noips=No s'ha seleccionat cap IP
status_err_unban=No es pot desbloquejar l'adreça IP de $1
status_err_unbanjail=No es pot desactivar la presó $1
status_err_unknownjail=Presó desconeguda

View File

@@ -171,30 +171,21 @@ manual_err=Nepodařilo se upravit konfigurační soubor
manual_edata=Nebyl zadán žádný obsah konfiguračního souboru
status_title=Stav vězení a akce
status_title3=Vězeňské bloky
status_return=stav věznic
status_head_jail_blocks=Vězeňské bloky
status_title2=Stav vězení
status_head_jail_name=Jméno vězení
status_head_currently_failed=Aktuálně neúspěšné
status_head_total_failed=Celkem se nezdařilo
status_head_file_list=Seznam souborů
status_head_currently_banned=Aktuálně zakázáno
status_head_total_banned=Úplně zakázáno
status_head_banned_ip_list=Seznam zakázaných IP adres
status_head_blocks_ip=IP
status_head_blocks_stime=Doba spuštění
status_head_blocks_etime=Čas ukončení
status_rules_plus_more=+ $1 dalšího
status_jail_unblock_ip=Odebrat $1 ze seznamu zakázaných
status_jail_unblock=Odblokujte všechny IP adresy pro vybraná vězení
status_jail_unblock_ips=Odblokovat vybranou IP
status_jail_noactive=Zatím nejsou povoleny žádné aktivní vězení.
status_jail_noactiveips=Ve vězení <tt>$1</tt> nebyly nalezeny žádné blokované záznamy.
status_err_set=Akce nastavení se nezdařila
status_err_unblock=Akci se nepodařilo odblokovat
status_err_nojail=Nebyla vybrána žádná vězení
status_err_noips=Nebyla vybrána žádná IP
status_err_unban=Nelze zrušit zákaz $1 IP adresy
status_err_unbanjail=Nelze zrušit zákaz $1 vězení
status_err_unknownjail=Neznámé vězení
syslog_logtarget=Protokol akcí Fail2Ban

View File

@@ -171,30 +171,21 @@ manual_err=Kunne ikke redigere konfigurationsfilen
manual_edata=Intet indtastet indhold af konfigurationsfil
status_title=Fængselsstatus og handlinger
status_title3=Fængselsblokke
status_return=fængselsstatus
status_head_jail_blocks=Fængselsblokeringer
status_title2=Fængselsstatus
status_head_jail_name=Navn på fængsel
status_head_currently_failed=I øjeblikket mislykkedes
status_head_total_failed=Total mislykkedes
status_head_file_list=Filliste
status_head_currently_banned=I øjeblikket forbudt
status_head_total_banned=Totalt forbudt
status_head_banned_ip_list=Liste over forbudte IP-adresser
status_head_blocks_ip=IP
status_head_blocks_stime=Starttidspunkt
status_head_blocks_etime=Sluttidspunkt
status_rules_plus_more=+ $1 mere
status_jail_unblock_ip=Fjern $1 fra forbudt liste
status_jail_unblock=Fjern blokering af alle IP'er for udvalgte fængsler
status_jail_unblock_ips=Fjern blokering af valgt IP
status_jail_noactive=Der er endnu ingen aktive jails aktiveret.
status_jail_noactiveips=Der er ingen blokerede poster i fængslet <tt>$1</tt> fundet.
status_err_set=Handlingen kunne ikke indstilles
status_err_unblock=Kunne ikke fjerne blokeringen af handlingen
status_err_nojail=Ingen fængsler er blevet valgt
status_err_noips=Der er ikke valgt nogen IP
status_err_unban=Kan ikke ophæve udelukkelse af $1 IP-adresse
status_err_unbanjail=Kan ikke ophæve ban $1 fængsel
status_err_unknownjail=Ukendt fængsel
syslog_logtarget=Fail2Ban handling log

View File

@@ -1,26 +1,18 @@
status_title=Jails-Status und Aktionen
status_title3=Gefängnisblöcke
status_return=Gefängnisstatus
status_head_jail_blocks=Gefängnisblöcke
status_title2=Gefängnisstatus
status_head_jail_name=Name des Gefängnisses
status_head_currently_failed=Aktuell fehlgeschlagen
status_head_total_failed=Total gescheitert
status_head_file_list=Dateiliste
status_head_currently_banned=Derzeit verboten
status_head_total_banned=Total gesperrt
status_head_banned_ip_list=Verbotene IP-Liste
status_head_blocks_ip=IP
status_head_blocks_stime=Startzeit
status_head_blocks_etime=Endzeit
status_rules_plus_more=+ $1 mehr
status_jail_unblock_ip=Entfernen Sie $1 von der Sperrliste
status_jail_unblock=Entsperren Sie alle IPs für ausgewählte Jails
status_jail_unblock_ips=Entsperren Sie die ausgewählte IP
status_jail_noactive=Es sind noch keine aktiven Jails aktiviert.
status_jail_noactiveips=Es wurden keine blockierten Einträge im Gefängnis <tt>$1</tt> gefunden.
status_err_set=Festgelegte Aktion fehlgeschlagen
status_err_unblock=Die Aktion konnte nicht entsperrt werden
status_err_nojail=Es wurden keine Gefängnisse ausgewählt
status_err_noips=Es wurde keine IP ausgewählt
status_err_unban=Sperrung von $1 IP-Adresse kann nicht aufgehoben werden
status_err_unbanjail=Der Bann für $1 Gefängnis kann nicht aufgehoben werden
status_err_unknownjail=Unbekanntes Gefängnis

View File

@@ -171,30 +171,21 @@ manual_err=Αποτυχία επεξεργασίας του αρχείου ρύ
manual_edata=Δεν έχουν εισαχθεί περιεχόμενα αρχείου ρυθμίσεων
status_title=Κατάσταση και ενέργειες φυλακών
status_title3=Μπλοκ φυλακών
status_return=κατάσταση φυλακών
status_head_jail_blocks=Μπλοκ φυλακών
status_title2=Κατάσταση φυλακών
status_head_jail_name=Όνομα φυλακής
status_head_currently_failed=Αυτήν τη στιγμή απέτυχε
status_head_total_failed=Συνολικά απέτυχε
status_head_file_list=Λίστα αρχείων
status_head_currently_banned=Επί του παρόντος απαγορεύεται
status_head_total_banned=Πλήρης απαγόρευση
status_head_banned_ip_list=Απαγορευμένη λίστα IP
status_head_blocks_ip=IP
status_head_blocks_stime=Ωρα έναρξης
status_head_blocks_etime=Τέλος χρόνου
status_rules_plus_more=+ $1 ακόμη
status_jail_unblock_ip=Αφαιρέστε το $1 από την απαγορευμένη λίστα
status_jail_unblock=Ξεμπλοκάρετε όλες τις IP για επιλεγμένες φυλακές
status_jail_unblock_ips=Ξεμπλοκάρετε την επιλεγμένη IP
status_jail_noactive=Δεν υπάρχουν ακόμη ενεργοποιημένες ενεργές φυλακές.
status_jail_noactiveips=Δεν βρέθηκαν αποκλεισμένες καταχωρήσεις στη φυλακή <tt>$1</tt>.
status_err_set=Η ενέργεια ρύθμισης απέτυχε
status_err_unblock=Αποτυχία κατάργησης αποκλεισμού της ενέργειας
status_err_nojail=Δεν έχουν επιλεγεί φυλακές
status_err_noips=Δεν έχει επιλεγεί IP
status_err_unban=Δεν είναι δυνατή η απαγόρευση της διεύθυνσης IP $1
status_err_unbanjail=Δεν είναι δυνατή η απαγόρευση της φυλακής $1
status_err_unknownjail=Άγνωστη φυλακή
syslog_logtarget=Αρχείο καταγραφής ενέργειας Fail2Ban

View File

@@ -114,10 +114,8 @@ jail_efindtime=Delay between matches must be a number greater than zero
jail_ebantime=Time to ban an IP must be a number greater than zero
jail_backend=Check for log file updates using
jail_auto=Decide automatically
jail_systemd=systemd
jail_polling=polling
jail_gamin=gamin
jail_pyinotify=pyinotify
jail_gamin=Gamin file alteration monitor
jail_polling=Background polling
jail_destemail=Default notification email
jail_none=None set
jail_banaction=Default action to apply
@@ -172,32 +170,23 @@ manual_efile=Selected file is not part of the Fail2Ban configuration!
manual_err=Failed to edit config file
manual_edata=No config file contents entered
status_title=Jails Status
status_title3=Jail Blocks
status_return=jails status
status_head_jail_blocks=Jail blocks
status_title=Jails Status And Actions
status_title2=Jails Status
status_head_jail_name=Jail name
status_head_currently_failed=Currently failed
status_head_total_failed=Total failed
status_head_file_list=File list
status_head_currently_banned=Currently banned
status_head_total_banned=Total banned
status_head_banned_ip_list=Banned IP list
status_head_blocks_ip=IP
status_head_blocks_stime=Start time
status_head_blocks_etime=End time
status_rules_plus_more=+ $1 more
status_jail_unblock_ip=Remove $1 from banned list
status_jail_unblock=Unblock Selected Jails
status_jail_unblock_ips=Unblock Selected IP
status_jail_unblock=Unblock All IPs for Selected Jails
status_jail_noactive=There are no active jails enabled yet.
status_jail_noactiveips=There are no blocked entries in jail <tt>$1</tt> found.
status_err_set=Failed set action
status_err_unblock=Failed to unblock action
status_err_nojail=No jails have been selected
status_err_noips=No IP has been selected
status_err_unban=Cannot un-ban $1 IP address
status_err_unbanjail=Cannot un-ban $1 jail
status_err_unknownjail=Unknown jail
syslog_logtarget=Fail2Ban action log

View File

@@ -171,30 +171,21 @@ manual_err=Error al editar el archivo de configuración
manual_edata=No se ingresó el contenido del archivo de configuración
status_title=Estado y acciones de las cárceles
status_title3=Bloques de la cárcel
status_return=estado de las carceles
status_head_jail_blocks=Bloques de cárcel
status_title2=Estado de las cárceles
status_head_jail_name=nombre de la cárcel
status_head_currently_failed=Actualmente fallado
status_head_total_failed=Total fallado
status_head_file_list=lista de archivos
status_head_currently_banned=Actualmente prohibido
status_head_total_banned=Prohibidos totales
status_head_banned_ip_list=Lista de IP prohibidas
status_head_blocks_ip=IP
status_head_blocks_stime=Hora de inicio
status_head_blocks_etime=Hora de finalización
status_rules_plus_more=+ $1 más
status_jail_unblock_ip=Eliminar $1 de la lista de prohibidos
status_jail_unblock=Desbloquear todas las direcciones IP de las cárceles seleccionadas
status_jail_unblock_ips=Desbloquear IP seleccionada
status_jail_noactive=No hay cárceles activas habilitadas todavía.
status_jail_noactiveips=No se encontraron entradas bloqueadas en la cárcel <tt>$1</tt>.
status_err_set=Acción de configuración fallida
status_err_unblock=No se pudo desbloquear la acción
status_err_nojail=No se han seleccionado cárceles
status_err_noips=No se ha seleccionado ninguna IP
status_err_unban=No se puede desbanear $1 dirección IP
status_err_unbanjail=No se puede desbanear $1 jail
status_err_unknownjail=cárcel desconocida
syslog_logtarget=Registro de acciones Fail2Ban

Some files were not shown because too many files have changed in this diff Show More