Merge branch 'master' into length-limits

* master: (84 commits)
  Update nl.php
  update css file
  Update es.php
  0.9.8-10 Release
  Protecting roundcube installer
  Protecting pma installer
  Protecting roundcube installer
  Removing phpcgi template for Ubuntu 14.04 as deprecated
  added bsdutils package
  Add one more FTP / Restart confirmation
  Restart confirmation window
  send detailed mysql error if dump failed
  Fixed syntax errors
  Multiftp support
  scrollable top panel
  Renamed dialog button
  Multiple FTP Account Support
  Improved css style
  new icon for webmail
  file manager api commands
  ...

Conflicts:
	web/add/db/index.php
	web/add/user/index.php
	web/templates/admin/add_db.html
This commit is contained in:
Stuart Olivera 2014-08-10 14:40:14 -04:00
commit 42fd06f6c7
159 changed files with 7687 additions and 3789 deletions

View file

@ -55,7 +55,7 @@ str="$str CMD='$command' SUSPENDED='no' TIME='$TIME' DATE='$DATE'"
# Adding to crontab # Adding to crontab
echo "$str" >> $VESTA/data/users/$user/cron.conf echo "$str" >> $VESTA/data/users/$user/cron.conf
# Chaning permissions # Changing permissions
chmod 660 $VESTA/data/users/$user/cron.conf chmod 660 $VESTA/data/users/$user/cron.conf
# Sort jobs by id number # Sort jobs by id number

View file

@ -9,7 +9,7 @@
# Variable&Function # # Variable&Function #
#----------------------------------------------------------# #----------------------------------------------------------#
# Argument defenition # Argument definition
user=$1 user=$1
domain=$2 domain=$2
ip=$3 ip=$3
@ -48,29 +48,31 @@ if [ -z "$ip" ]; then
fi fi
# Web domain # Web domain
# Do Not restart at this point, will loose connection from API calls
if [ ! -z "$WEB_SYSTEM" ] && [ "$WEB_SYSTEM" != 'no' ]; then if [ ! -z "$WEB_SYSTEM" ] && [ "$WEB_SYSTEM" != 'no' ]; then
$BIN/v-add-web-domain $user $domain $ip $BIN/v-add-web-domain $user $domain $ip no
retun_code=$? return_code=$?
fi fi
# Proxy support # Proxy support
if [ ! -z "$PROXY_SYSTEM" ] && [ "$retun_code" -eq 0 ]; then # Do Not restart at this point, will loose connection from API calls
$BIN/v-add-web-domain-proxy $user $domain if [ ! -z "$PROXY_SYSTEM" ] && [ "$return_code" -eq 0 ]; then
$BIN/v-add-web-domain-proxy $user $domain '' '' no
fi fi
# DNS domain # DNS domain
if [ ! -z "$DNS_SYSTEM" ] && [ "$DNS_SYSTEM" != 'no' ]; then if [ ! -z "$DNS_SYSTEM" ] && [ "$DNS_SYSTEM" != 'no' ]; then
if [ "$retun_code" -eq 0 ]; then if [ "$return_code" -eq 0 ]; then
$BIN/v-add-dns-domain $user $domain $ip $BIN/v-add-dns-domain $user $domain $ip
retun_code=$? return_code=$?
fi fi
fi fi
# Mail domain # Mail domain
if [ ! -z "$MAIL_SYSTEM" ] && [ "$MAIL_SYSTEM" != 'no' ]; then if [ ! -z "$MAIL_SYSTEM" ] && [ "$MAIL_SYSTEM" != 'no' ]; then
if [ "$retun_code" -eq 0 ]; then if [ "$return_code" -eq 0 ]; then
$BIN/v-add-mail-domain $user $domain $BIN/v-add-mail-domain $user $domain
retun_code=$? return_code=$?
fi fi
fi fi
@ -79,4 +81,4 @@ fi
# Vesta # # Vesta #
#----------------------------------------------------------# #----------------------------------------------------------#
exit $retun_code exit $return_code

View file

@ -16,6 +16,7 @@ user=$3
password=$4 password=$4
type=${5-api} type=${5-api}
dns_user=${6-dns-cluster} dns_user=${6-dns-cluster}
DNS_USER=$dns_user
# Includes # Includes
source $VESTA/func/main.sh source $VESTA/func/main.sh
@ -42,9 +43,10 @@ is_dnshost_alive
# Action # # Action #
#----------------------------------------------------------# #----------------------------------------------------------#
# Concatentating db host string # Concatentating dns host string
str="HOST='$host' USER='$user' PASSWORD='$password' DNS_USER='$dns_user'" str="HOST='$host' PORT='$port' USER='$user' PASSWORD='$password'"
str="$str TYPE='$type' SUSPENDED='no' TIME='$TIME' DATE='$DATE'" str="$str DNS_USER='$dns_user' TYPE='$type' SUSPENDED='no'"
str="$str TIME='$TIME' DATE='$DATE'"
# Adding host to dns-cluster.conf # Adding host to dns-cluster.conf
echo "$str" >> $VESTA/conf/dns-cluster.conf echo "$str" >> $VESTA/conf/dns-cluster.conf

View file

@ -28,7 +28,7 @@ EVENT="$DATE $TIME $SCRIPT $A1 $A2 $A3 $A4 $A5 $A6 $A7 $A8 $A9"
is_user_free() { is_user_free() {
check_sysuser=$(cut -f 1 -d : /etc/passwd | grep -w "$user" ) check_sysuser=$(cut -f 1 -d : /etc/passwd | grep -w "$user" )
if [ ! -z "$check_sysuser" ] || [ -e "$USER_DATA" ]; then if [ ! -z "$check_sysuser" ] || [ -e "$USER_DATA" ]; then
echo "Error: user $user exist" echo "Error: user $user exists"
log_event "$E_EXISTS" "$EVENT" log_event "$E_EXISTS" "$EVENT"
exit $E_EXISTS exit $E_EXISTS
fi fi
@ -207,7 +207,6 @@ chmod 660 $USER_DATA/user.conf
# Updating quota # Updating quota
if [ "$DISK_QUOTA" = 'yes' ]; then if [ "$DISK_QUOTA" = 'yes' ]; then
echo "Setting quota"
$BIN/v-update-user-quota "$user" $BIN/v-update-user-quota "$user"
fi fi

View file

@ -1,8 +1,8 @@
#!/bin/bash #!/bin/bash
# info: add ftp account for web domain. # info: add ftp account for web domain.
# options: USER DOMAIN FTP_USER FTP_PASSWORD # options: USER DOMAIN FTP_USER FTP_PASSWORD [FTP_PATH]
# #
# The function creates addutional ftp account for web domain. # The function creates additional ftp account for web domain.
#----------------------------------------------------------# #----------------------------------------------------------#
@ -15,6 +15,7 @@ domain=$(idn -t --quiet -u "$2" )
domain_idn=$(idn -t --quiet -a "$domain") domain_idn=$(idn -t --quiet -a "$domain")
ftp_user=${1}_${3} ftp_user=${1}_${3}
ftp_password=$4 ftp_password=$4
ftp_path=$5
# Includes # Includes
source $VESTA/func/main.sh source $VESTA/func/main.sh
@ -30,57 +31,93 @@ EVENT="$DATE $TIME $SCRIPT $A1 $A2 $A3 $A4 $A5 $A6 $A7 $A8 $A9"
# Verifications # # Verifications #
#----------------------------------------------------------# #----------------------------------------------------------#
check_args '4' "$#" 'USER DOMAIN FTP_USER FTP_PASSWORD' check_args '4' "$#" 'USER DOMAIN FTP_USER FTP_PASSWORD [FTP_PATH]'
validate_format 'user' 'domain' 'ftp_user' 'ftp_password' validate_format 'user' 'domain' 'ftp_user' 'ftp_password'
is_system_enabled "$WEB_SYSTEM" 'WEB_SYSTEM' is_system_enabled "$WEB_SYSTEM" 'WEB_SYSTEM'
is_object_valid 'user' 'USER' "$user" is_object_valid 'user' 'USER' "$user"
is_object_unsuspended 'user' 'USER' "$user" is_object_unsuspended 'user' 'USER' "$user"
is_object_valid 'web' 'DOMAIN' "$domain" is_object_valid 'web' 'DOMAIN' "$domain"
is_object_unsuspended 'web' 'DOMAIN' "$domain" is_object_unsuspended 'web' 'DOMAIN' "$domain"
check_ftp_user=$(grep "^$ftp_user:" /etc/passwd)
if [ ! -z "$check_ftp_user" ] && [ "$FTP_USER" != "$ftp_user" ]; then
echo "Error: ftp user $ftp_user already exists"
log_event "$E_EXISTS" "$EVENT"
exit $E_EXISTS
fi
#----------------------------------------------------------# #----------------------------------------------------------#
# Action # # Action #
#----------------------------------------------------------# #----------------------------------------------------------#
# Get domain values
get_domain_values 'web' get_domain_values 'web'
check_ftp_user=$(grep "^$ftp_user:" /etc/passwd)
if [ ! -z "$check_ftp_user" ] && [ "$FTP_USER" != "$ftp_user" ]; then # Defining ftp user shell
echo "Error: ftp user $ftp_user already exists" if [ -z "$FTP_SHELL" ]; then
log_event "$E_EXISTS $EVENT" shell='/sbin/nologin'
exit $E_EXISTS if [ -e "/usr/bin/rssh" ]; then
shell='/usr/bin/rssh'
fi
else
shell=$FTP_SHELL
fi fi
if [ ! -z "$FTP_USER" ]; then # Defining path
/usr/sbin/userdel -f $FTP_USER > /dev/null 2>&1 if [ -z "$ftp_path" ]; then
ftp_path_a="$HOMEDIR/$user/web/$domain"
else
# Validating absolute path
ftp_path_a=$(readlink -f "$HOMEDIR/$user/web/$domain/$ftp_path")
if [ -z "$(echo $ftp_path_a |grep $HOMEDIR/$user/web/$domain)" ]; then
echo "Error: absolute path $ftp_path_a is invalid"
log_event "$E_INVALID" "$EVENT"
exit $E_INVALID
fi
# Creating ftp user home directory
if [ ! -e "$ftp_path_a" ]; then
mkdir -p $ftp_path_a
chown $user:$user "$ftp_path_a"
chmod 751 "$ftp_path_a"
fi
fi fi
# Define shell # Adding ftp user
shell='/sbin/nologin'
if [ -e "/usr/bin/rssh" ]; then
shell='/usr/bin/rssh'
fi
# Adding user
/usr/sbin/useradd $ftp_user \ /usr/sbin/useradd $ftp_user \
-s $shell \ -s $shell \
-o -u $(id -u $user) \ -o -u $(id -u $user) \
-g $(id -u $user) \ -g $(id -u $user) \
-M -d "$HOMEDIR/$user/web/$domain" > /dev/null 2>&1 -M -d "$ftp_path_a" > /dev/null 2>&1
# Set ftp user password
echo "$ftp_user:$ftp_password" | /usr/sbin/chpasswd echo "$ftp_user:$ftp_password" | /usr/sbin/chpasswd
ftp_md5="$(awk -v user=$ftp_user -F : 'user == $1 {print $2}' /etc/shadow)" ftp_md5=$(awk -v user=$ftp_user -F : 'user == $1 {print $2}' /etc/shadow)
#----------------------------------------------------------# #----------------------------------------------------------#
# Vesta # # Vesta #
#----------------------------------------------------------# #----------------------------------------------------------#
# Update config # Transforming absolute path to relative
ftp_path_r=$(echo $ftp_path_a |sed "s%$HOMEDIR/$user/web/$domain%%")
# Concatenating ftp variables
if [ ! -z "$FTP_USER" ]; then
ftp_user="$FTP_USER:$ftp_user"
ftp_md5="$FTP_MD5:$ftp_md5"
ftp_path="$FTP_PATH:$ftp_path_r"
fi
# Adding new key into web.conf
add_object_key "web" 'DOMAIN' "$domain" 'FTP_PATH' 'PROXY'
# Updating config
update_object_value 'web' 'DOMAIN' "$domain" '$FTP_USER' "$ftp_user" update_object_value 'web' 'DOMAIN' "$domain" '$FTP_USER' "$ftp_user"
update_object_value 'web' 'DOMAIN' "$domain" '$FTP_MD5' "$ftp_md5" update_object_value 'web' 'DOMAIN' "$domain" '$FTP_MD5' "$ftp_md5"
update_object_value 'web' 'DOMAIN' "$domain" '$FTP_PATH' "$ftp_path"
# Logging # Logging
log_history "added ftp account $ftp_user for $domain" log_history "added ftp account ${1}_${3}@$domain"
log_event "$OK" "$EVENT" log_event "$OK" "$EVENT"
exit exit

View file

@ -52,20 +52,20 @@ upd_web_domain_values
# Adding statistic config # Adding statistic config
cat $WEBTPL/$type/$type.tpl |\ cat $WEBTPL/$type/$type.tpl |\
sed -e "s/%ip%/$ip/g" \ sed -e "s|%ip%|$ip|g" \
-e "s/%web_port%/$WEB_PORT/g" \ -e "s|%web_port%|$WEB_PORT|g" \
-e "s/%web_system%/$WEB_SYSTEM/g" \ -e "s|%web_system%|$WEB_SYSTEM|g" \
-e "s/%web_ssl_port%/$WEB_SSL_PORT/g" \ -e "s|%web_ssl_port%|$WEB_SSL_PORT|g" \
-e "s/%rgroups%/$WEB_RGROUPS/g" \ -e "s|%rgroups%|$WEB_RGROUPs|g" \
-e "s/%proxy_system%/$PROXY_SYSTEM/g" \ -e "s|%proxy_system%|$PROXY_SYSTEM|g" \
-e "s/%proxy_port%/$PROXY_PORT/g" \ -e "s|%proxy_port%|$PROXY_PORT|g" \
-e "s/%proxy_ssl_port%/$PROXY_SSL_PORT/g" \ -e "s|%proxy_ssl_port%|$PROXY_SSL_PORT|g" \
-e "s/%domain_idn%/$domain_idn/g" \ -e "s|%domain_idn%|$domain_idn|g" \
-e "s/%domain%/$domain/g" \ -e "s|%domain%|$domain|g" \
-e "s/%user%/$user/g" \ -e "s|%user%|$user|g" \
-e "s/%home%/${HOMEDIR////\/}/g" \ -e "s|%home%|$HOMEDIR|g" \
-e "s/%alias%/${aliases//,/ }/g" \ -e "s|%alias%|${aliases//,/ }|g" \
-e "s/%alias_idn%/${aliases_idn//,/ }/g" \ -e "s|%alias_idn%|${aliases_idn//,/ }|g" \
> $HOMEDIR/$user/conf/web/$type.$domain.conf > $HOMEDIR/$user/conf/web/$type.$domain.conf
if [ "$type" == 'awstats' ]; then if [ "$type" == 'awstats' ]; then

View file

@ -49,14 +49,6 @@ else
update_user_value "$user" '$LANGUAGE' "$language" update_user_value "$user" '$LANGUAGE' "$language"
fi fi
exit
# Changing user contact email
old_email=$(get_user_value '$CONTACT')
update_user_value "$user" '$CONTACT' "$email"
pw_str=$(grep -n "^$user:" /etc/passwd)
str=$(echo "$pw_str" | cut -f 1 -d :)
sed -i "$str s/$old_email/$email/g" /etc/passwd
#----------------------------------------------------------# #----------------------------------------------------------#
# Vesta # # Vesta #

View file

@ -1,8 +1,8 @@
#!/bin/bash #!/bin/bash
# info: add ftp account for web domain. # info: change ftp user password.
# options: USER DOMAIN FTP_USER FTP_PASSWORD # options: USER DOMAIN FTP_USER FTP_PASSWORD
# #
# The function creates addutional ftp account for web domain. # The function changes ftp user password.
#----------------------------------------------------------# #----------------------------------------------------------#
@ -13,7 +13,7 @@
user=$1 user=$1
domain=$(idn -t --quiet -u "$2" ) domain=$(idn -t --quiet -u "$2" )
domain_idn=$(idn -t --quiet -a "$domain") domain_idn=$(idn -t --quiet -a "$domain")
ftp_user=${1}_${3} ftp_user=$3
ftp_password=$4 ftp_password=$4
# Includes # Includes
@ -33,31 +33,39 @@ is_object_valid 'user' 'USER' "$user"
is_object_unsuspended 'user' 'USER' "$user" is_object_unsuspended 'user' 'USER' "$user"
is_object_valid 'web' 'DOMAIN' "$domain" is_object_valid 'web' 'DOMAIN' "$domain"
is_object_unsuspended 'web' 'DOMAIN' "$domain" is_object_unsuspended 'web' 'DOMAIN' "$domain"
is_object_value_empty 'web' 'DOMAIN' "$domain" '$FTP_USER' get_domain_values 'web'
if [ -z "$(echo $FTP_USER | tr ':' '\n' | grep ^$ftp_user$)" ]; then
echo "Error: account $ftp_user doesn't exist"
log_event "$E_NOTEXIST" "$EVENT"
exit $E_NOTEXIST
fi
#----------------------------------------------------------# #----------------------------------------------------------#
# Action # # Action #
#----------------------------------------------------------# #----------------------------------------------------------#
# Adding user # Changing ftp user password
/usr/sbin/adduser $ftp_user -g $user -s /sbin/nologin -M \
-d "$HOMEDIR/$user/web/$domain" > /dev/null 2>&1
echo "$ftp_user:$ftp_password" | /usr/sbin/chpasswd echo "$ftp_user:$ftp_password" | /usr/sbin/chpasswd
ftp_md5=$(awk -v user=$ftp_user -F : 'user == $1 {print $2}' /etc/shadow)
ftp_md5="$(awk -v user=$ftp_user -F : 'user == $1 {print $2}' /etc/shadow)"
#----------------------------------------------------------# #----------------------------------------------------------#
# Vesta # # Vesta #
#----------------------------------------------------------# #----------------------------------------------------------#
# Update config # Rebuilding FTP variables
update_object_value 'web' 'DOMAIN' "$domain" '$FTP_USER' "$ftp_user" position=$(echo $FTP_USER |tr ':' '\n' |grep -n '' |grep ":$ftp_user$" |\
cut -f 1 -d:)
ftp_md5=$(echo $FTP_MD5 |tr ':' '\n' |grep -n '' |\
sed -e "s%^$position:.*%$position:$ftp_md5%" |\
cut -f 2 -d :| sed -e "/^$/d"| sed -e ':a;N;$!ba;s/\n/:/g')
# Updating config
update_object_value 'web' 'DOMAIN' "$domain" '$FTP_MD5' "$ftp_md5" update_object_value 'web' 'DOMAIN' "$domain" '$FTP_MD5' "$ftp_md5"
# Logging # Logging
log_history "added ftp account $ftp_user for $domain" log_history "changed password for $ftp_user on $domain"
log_event "$OK" "$EVENT" log_event "$OK" "$EVENT"
exit exit

View file

@ -0,0 +1,89 @@
#!/bin/bash
# info: change path for ftp user.
# options: USER DOMAIN FTP_USER FTP_PATH
#
# The function changes ftp user path.
#----------------------------------------------------------#
# Variable&Function #
#----------------------------------------------------------#
# Argument defenition
user=$1
domain=$(idn -t --quiet -u "$2" )
domain_idn=$(idn -t --quiet -a "$domain")
ftp_user=$3
ftp_path=$4
# Includes
source $VESTA/func/main.sh
source $VESTA/func/domain.sh
source $VESTA/conf/vesta.conf
#----------------------------------------------------------#
# Verifications #
#----------------------------------------------------------#
check_args '4' "$#" 'USER DOMAIN FTP_USER FTP_PATH'
validate_format 'user' 'domain' 'ftp_user'
is_system_enabled "$WEB_SYSTEM" 'WEB_SYSTEM'
is_object_valid 'user' 'USER' "$user"
is_object_unsuspended 'user' 'USER' "$user"
is_object_valid 'web' 'DOMAIN' "$domain"
is_object_unsuspended 'web' 'DOMAIN' "$domain"
get_domain_values 'web'
if [ -z "$(echo $FTP_USER | tr ':' '\n' | grep ^$ftp_user$)" ]; then
echo "Error: account $ftp_user doesn't exist"
log_event "$E_NOTEXIST" "$EVENT"
exit $E_NOTEXIST
fi
ftp_path_a=$(readlink -f "$HOMEDIR/$user/web/$domain/$ftp_path")
if [ -z "$(echo $ftp_path_a |grep $HOMEDIR/$user/web/$domain)" ]; then
echo "Error: absolute path $ftp_path_a is invalid"
log_event "$E_INVALID" "$EVENT"
exit $E_INVALID
fi
#----------------------------------------------------------#
# Action #
#----------------------------------------------------------#
# MKDIR if path doesn't exist
if [ ! -e "$ftp_path_a" ]; then
mkdir -p "$ftp_path_a"
chown $user:$user "$ftp_path_a"
chmod 751 "$ftp_path_a"
fi
# Chaning ftp user path
pw_str=$(grep -n "^$ftp_user:" /etc/passwd)
str=$(echo "$pw_str" | cut -f 1 -d :)
old_path=$(echo "$pw_str" | cut -f 7 -d :)
sed -i "$str s%$old_path%$ftp_path_a%g" /etc/passwd
#----------------------------------------------------------#
# Vesta #
#----------------------------------------------------------#
# Transforming absolute path to relative
ftp_path_r=$(echo $ftp_path_a |sed "s%$HOMEDIR/$user/web/$domain%%")
# Rebuilding FTP variables
position=$(echo $FTP_USER |tr ':' '\n' |grep -n '' |grep ":$ftp_user$" |\
cut -f 1 -d:)
ftp_path=$(echo $FTP_PATH |tr ':' '\n' |grep -n '' |\
sed -e "s%^$position:.*%$position:$ftp_path_r%" |\
cut -f 2 -d :| sed -e ':a;N;$!ba;s/\n/:/g')
# Updating config
update_object_value 'web' 'DOMAIN' "$domain" '$FTP_PATH' "$ftp_path"
# Logging
log_history "changed path to $ftp_path_a for $ftp_user@$domain"
log_event "$OK" "$EVENT"
exit

58
bin/v-copy-fs-file Executable file
View file

@ -0,0 +1,58 @@
#!/bin/bash
# File copier
user=$1
file_src=$2
file_dst=$3
# Checking arguments
if [ -z "$file_dst" ]; then
echo "Usage: USER SRC_FILE DST_FILE"
exit 1
fi
# Checking users
if [ ! -e "$VESTA/data/users/$user" ]; then
exit 1
fi
# Checking homedir
homedir=$(grep "^$user:" /etc/passwd | cut -f 6 -d :)
if [ -z $homedir ]; then
exit 1
fi
# Checking source file
if [ ! -e "$file_src" ]; then
exit 1
fi
# Checking source path
rpath=$(readlink -f "$file_src")
if [ -z "$(echo $rpath |grep ^/tmp)" ]; then
exit 1
fi
# Checking destination path
rpath=$(readlink -f "$file_dst")
if [ -z "$(echo $rpath |grep ^$homedir)" ]; then
exit 1
fi
# Checking dst file permission
if [ -e "$file_dst" ]; then
perms=$(stat --format '%a' $file_dst)
fi
# Copying file
cp $file_src $file_dst
# Changing ownership
chown $user:$user $file_dst
# Changin permissions
if [ ! -z "$perms" ]; then
chmod $perms $file_dst
fi
exit

View file

@ -89,8 +89,14 @@ fi
sed -i "/ $user$/d" $VESTA/data/queue/disk.pipe sed -i "/ $user$/d" $VESTA/data/queue/disk.pipe
sed -i "/ $user$/d" $VESTA/data/queue/traffic.pipe sed -i "/ $user$/d" $VESTA/data/queue/traffic.pipe
# Removing system user # Deleting system user
/usr/sbin/userdel -f $user /usr/sbin/userdel -f $user >> /dev/null 2>&1
if [ "$?" != 0 ]; then
sed -i "/^$user:/d" /etc/passwd
sed -i "/^$user:/d" /etc/shadow
fi
# Deleting user directories
chattr -i $HOMEDIR/$user/conf chattr -i $HOMEDIR/$user/conf
rm -rf $HOMEDIR/$user rm -rf $HOMEDIR/$user
rm -f /var/spool/mail/$user rm -f /var/spool/mail/$user

View file

@ -89,9 +89,15 @@ if [ ! -z "$STATS" ] && [ "$STATS" != 'no' ]; then
rm -f /etc/awstats/$STATS.$domain.conf rm -f /etc/awstats/$STATS.$domain.conf
fi fi
# Deleting ftp account # Deleting ftp users
if [ ! -z "$FTP_USER" ]; then if [ ! -z "$FTP_USER" ]; then
/usr/sbin/userdel -f $FTP_USER >> /dev/null 2>&1 for ftp_user in ${FTP_USER//:/ }; do
/usr/sbin/userdel $ftp_user >> /dev/null 2>&1
if [ "$?" != 0 ]; then
sed -i "/^$ftp_user:/d" /etc/passwd
sed -i "/^$ftp_user:/d" /etc/shadow
fi
done
fi fi
# Deleting directory # Deleting directory

View file

@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
# info: delete webdomain ftp account. # info: delete webdomain ftp account
# options: USER DOMAIN # options: USER DOMAIN FTP_USER
# #
# The function deletes additional ftp account. # The function deletes additional ftp account.
@ -13,6 +13,7 @@
user=$1 user=$1
domain=$(idn -t --quiet -u "$2" ) domain=$(idn -t --quiet -u "$2" )
domain_idn=$(idn -t --quiet -a "$domain") domain_idn=$(idn -t --quiet -a "$domain")
ftp_user=$3
# Includes # Includes
source $VESTA/func/main.sh source $VESTA/func/main.sh
@ -24,14 +25,19 @@ source $VESTA/conf/vesta.conf
# Verifications # # Verifications #
#----------------------------------------------------------# #----------------------------------------------------------#
check_args '2' "$#" 'USER DOMAIN' check_args '3' "$#" 'USER DOMAIN FTP_USER'
validate_format 'user' 'domain' validate_format 'user' 'domain' 'ftp_user'
is_system_enabled "$WEB_SYSTEM" 'WEB_SYSTEM' is_system_enabled "$WEB_SYSTEM" 'WEB_SYSTEM'
is_object_valid 'user' 'USER' "$user" is_object_valid 'user' 'USER' "$user"
is_object_unsuspended 'user' 'USER' "$user" is_object_unsuspended 'user' 'USER' "$user"
is_object_valid 'web' 'DOMAIN' "$domain" is_object_valid 'web' 'DOMAIN' "$domain"
is_object_unsuspended 'web' 'DOMAIN' "$domain" is_object_unsuspended 'web' 'DOMAIN' "$domain"
is_object_value_exist 'web' 'DOMAIN' "$domain" '$FTP_USER' get_domain_values 'web'
if [ -z "$(echo $FTP_USER | tr ':' '\n' | grep ^$ftp_user$)" ]; then
echo "Error: account $ftp_user doesn't exist"
log_event "$E_NOTEXIST" "$EVENT"
exit $E_NOTEXIST
fi
#----------------------------------------------------------# #----------------------------------------------------------#
@ -39,20 +45,34 @@ is_object_value_exist 'web' 'DOMAIN' "$domain" '$FTP_USER'
#----------------------------------------------------------# #----------------------------------------------------------#
# Deleting ftp user # Deleting ftp user
get_domain_values 'web' /usr/sbin/userdel $ftp_user >> /dev/null 2>&1
/usr/sbin/userdel -f $FTP_USER >> /dev/null 2>&1 if [ "$?" != 0 ]; then
sed -i "/^$ftp_user:/d" /etc/passwd
sed -i "/^$ftp_user:/d" /etc/shadow
fi
#----------------------------------------------------------# #----------------------------------------------------------#
# Vesta # # Vesta #
#----------------------------------------------------------# #----------------------------------------------------------#
# Rebuilding FTP variables
position=$(echo $FTP_USER |tr ':' '\n' |grep -n '' |grep ":$ftp_user$" |\
cut -f 1 -d:)
ftp_user=$(echo $FTP_USER |tr ':' '\n' |grep -n '' |grep -v "^$position:" |\
cut -f 2 -d :| sed -e "/^$/d"| sed -e ':a;N;$!ba;s/\n/:/g')
ftp_md5=$(echo $FTP_MD5 |tr ':' '\n' |grep -n '' |grep -v "^$position:" |\
cut -f 2 -d :| sed -e ':a;N;$!ba;s/\n/:/g')
ftp_path=$(echo $FTP_PATH |tr ':' '\n' |grep -n '' |grep -v "^$position:" |\
cut -f 2 -d :| sed -e ':a;N;$!ba;s/\n/:/g')
# Update config # Update config
update_object_value 'web' 'DOMAIN' "$domain" '$FTP_USER' '' update_object_value 'web' 'DOMAIN' "$domain" '$FTP_USER' "$ftp_user"
update_object_value 'web' 'DOMAIN' "$domain" '$FTP_MD5' '' update_object_value 'web' 'DOMAIN' "$domain" '$FTP_MD5' "$ftp_md5"
update_object_value 'web' 'DOMAIN' "$domain" '$FTP_PATH' "$ftp_path"
# Logging # Logging
log_history "deleted ftp account $FTP_USER for $domain" log_history "deleted ftp account ${3} for $domain"
log_event "$OK" "$EVENT" log_event "$OK" "$EVENT"
exit exit

39
bin/v-list-fs-directory Executable file
View file

@ -0,0 +1,39 @@
#!/bin/bash
# File list wrapper
user=$1
path=$2
# Checking arguments
if [ -z "$user" ]; then
echo "Usage: USER [PATH]"
exit 1
fi
# Checking users
if [ ! -e "$VESTA/data/users/$user" ]; then
exit 1
fi
# Checking homedir
homedir=$(grep "^$user:" /etc/passwd | cut -f 6 -d :)
if [ -z $homedir ]; then
exit 1
fi
# Checking path
if [ ! -z "$path" ]; then
# Validating absolute path
rpath=$(readlink -f "$path")
if [ -z "$(echo $rpath |grep $homedir)" ]; then
exit 1
fi
else
path=$homedir
fi
# Listing files
find "$path" -maxdepth 1 -printf "%y/%m/%TY-%Tm-%Td/%TH:%TM:%TS/%u/%g/%s/%P\n"
exit

View file

@ -37,6 +37,9 @@ json_list_rrd() {
[ "$type" = 'ssh' ]; then [ "$type" = 'ssh' ]; then
title="$(echo $rrd| tr '[:lower:]' '[:upper:]') Usage" title="$(echo $rrd| tr '[:lower:]' '[:upper:]') Usage"
fi fi
if [ "$type" = 'mail' ]; then
title="Exim Usage"
fi
if [ "$type" = 'db' ]; then if [ "$type" = 'db' ]; then
db_type=$(echo $rrd|cut -f 1 -d _ |sed -e 's/mysql/MySQL/g' \ db_type=$(echo $rrd|cut -f 1 -d _ |sed -e 's/mysql/MySQL/g' \
-e 's/pgsql/PostgreSQL/g' ) -e 's/pgsql/PostgreSQL/g' )
@ -84,14 +87,14 @@ if [ -n "$WEB_SYSTEM" ] && [ "$WEB_SYSTEM" != 'no' ]; then
rrd_types="$rrd_types web" rrd_types="$rrd_types web"
fi fi
if [ -n "$MAIL_SYSTEM" ] && [ "$MAIL_SYSTEM" != 'no' ]; then
rrd_types="$rrd_types mail"
fi
if [ -n "$DB_SYSTEM" ] && [ "$DB_SYSTEM" != 'no' ]; then if [ -n "$DB_SYSTEM" ] && [ "$DB_SYSTEM" != 'no' ]; then
rrd_types="$rrd_types db" rrd_types="$rrd_types db"
fi fi
#if [ -n "$MAIL_SYSTEM" ] && [ "$MAIL_SYSTEM" != 'no' ]; then
# rrd_types="$rrd_types mail"
#fi
if [ -n "$FTP_SYSTEM" ] && [ "$FTP_SYSTEM" != 'no' ]; then if [ -n "$FTP_SYSTEM" ] && [ "$FTP_SYSTEM" != 'no' ]; then
rrd_types="$rrd_types ftp" rrd_types="$rrd_types ftp"
fi fi

View file

@ -70,6 +70,7 @@ is_object_valid 'user' 'USER' "$user"
# Defining config # Defining config
conf=$USER_DATA/user.conf conf=$USER_DATA/user.conf
HOME=$HOMEDIR/$user
# Defining fileds to select # Defining fileds to select
fields='$USER $FNAME $LNAME $PACKAGE $WEB_TEMPLATE $PROXY_TEMPLATE fields='$USER $FNAME $LNAME $PACKAGE $WEB_TEMPLATE $PROXY_TEMPLATE
@ -81,7 +82,7 @@ fields='$USER $FNAME $LNAME $PACKAGE $WEB_TEMPLATE $PROXY_TEMPLATE
$U_DISK_DIRS $U_DISK_WEB $U_DISK_MAIL $U_DISK_DB $U_BANDWIDTH $U_DISK_DIRS $U_DISK_WEB $U_DISK_MAIL $U_DISK_DB $U_BANDWIDTH
$U_WEB_DOMAINS $U_WEB_SSL $U_WEB_ALIASES $U_DNS_DOMAINS $U_DNS_RECORDS $U_WEB_DOMAINS $U_WEB_SSL $U_WEB_ALIASES $U_DNS_DOMAINS $U_DNS_RECORDS
$U_MAIL_DOMAINS $U_MAIL_DKIM $U_MAIL_ACCOUNTS $U_DATABASES $U_CRON_JOBS $U_MAIL_DOMAINS $U_MAIL_DKIM $U_MAIL_ACCOUNTS $U_DATABASES $U_CRON_JOBS
$U_BACKUPS $LANGUAGE $TIME $DATE' $U_BACKUPS $LANGUAGE $HOME $TIME $DATE'
# Listing user # Listing user
case $format in case $format in

View file

@ -21,7 +21,7 @@ json_list_ns() {
ns=$(grep "^NS='" $USER_DATA/user.conf |cut -f 2 -d \') ns=$(grep "^NS='" $USER_DATA/user.conf |cut -f 2 -d \')
echo '[' echo '['
i=1 i=1
nslistc=$(echo -e "${ns//,/\n}"|wc -l) nslistc=$(echo -e "${ns//,/\\n}"|wc -l)
for nameserver in ${ns//,/ };do for nameserver in ${ns//,/ };do
if [ "$i" -ne "$nslistc" ]; then if [ "$i" -ne "$nslistc" ]; then
echo -e "\t\"$nameserver\"," echo -e "\t\"$nameserver\","

View file

@ -76,7 +76,11 @@ conf=$USER_DATA/web.conf
# Defining fileds to select # Defining fileds to select
fields='$DOMAIN $IP $IP6 $U_DISK $U_BANDWIDTH $TPL $ALIAS $STATS $STATS_USER fields='$DOMAIN $IP $IP6 $U_DISK $U_BANDWIDTH $TPL $ALIAS $STATS $STATS_USER
$SSL $SSL_HOME $FTP_USER $PROXY $PROXY_EXT $SUSPENDED $TIME $DATE' $SSL $SSL_HOME $FTP_USER $FTP_PATH $PROXY $PROXY_EXT $DOCUMENT_ROOT
$SUSPENDED $TIME $DATE'
# Defining document root
DOCUMENT_ROOT="$HOMEDIR/$user/web/$domain/public_html"
# Listing domains # Listing domains
case $format in case $format in

View file

@ -34,8 +34,8 @@ is_object_valid 'user' 'USER' "$user"
conf=$USER_DATA/web.conf conf=$USER_DATA/web.conf
# Defining fileds to select # Defining fileds to select
fields="\$DOMAIN \$IP \$IP6 \$U_DISK \$U_BANDWIDTH \$TPL \$ALIAS" fields="\$DOMAIN \$IP \$IP6 \$U_DISK \$U_BANDWIDTH \$TPL \$ALIAS \$STATS"
fields="$fields \$STATS \$STATS_USER \$SSL \$SSL_HOME \$FTP_USER" fields="$fields \$STATS_USER \$SSL \$SSL_HOME \$FTP_USER \$FTP_PATH"
fields="$fields \$PROXY \$PROXY_EXT \$SUSPENDED \$TIME \$DATE" fields="$fields \$PROXY \$PROXY_EXT \$SUSPENDED \$TIME \$DATE"
# Listing domains # Listing domains

36
bin/v-open-fs-file Executable file
View file

@ -0,0 +1,36 @@
#!/bin/bash
# File reader
user=$1
path=$2
# Checking arguments
if [ -z "$path" ]; then
echo "Usage: USER PATH"
exit 1
fi
# Checking users
if [ ! -e "$VESTA/data/users/$user" ]; then
exit 1
fi
# Checking homedir
homedir=$(grep "^$user:" /etc/passwd | cut -f 6 -d :)
if [ -z $homedir ]; then
exit 1
fi
# Checking path
if [ ! -z "$path" ]; then
# Validating absolute path
rpath=$(readlink -f "$path")
if [ -z "$(echo $rpath |grep $homedir)" ]; then
exit 1
fi
fi
cat "$path"
exit

View file

@ -363,11 +363,16 @@ if [ "$web" != 'no' ]; then
exit $E_PARSING exit $E_PARSING
fi fi
# Fix for tar < 1.24
find $HOMEDIR/$user/web/$domain -type d \
-exec chown -h $user:$user {} \;
# ReChown files if uid differs # ReChown files if uid differs
if [ "$old_uid" -ne "$new_uid" ]; then if [ "$old_uid" -ne "$new_uid" ]; then
find $HOMEDIR/$user/web/$domain/ -user $old_uid \ find $HOMEDIR/$user/web/$domain/ -user $old_uid \
-exec chown -h $user:$user {} \; -exec chown -h $user:$user {} \;
fi fi
done done
# Restart WEB # Restart WEB

View file

@ -110,6 +110,11 @@ for period in $periods; do
$BIN/v-update-sys-rrd-$PROXY_SYSTEM $period >/dev/null 2>&1 $BIN/v-update-sys-rrd-$PROXY_SYSTEM $period >/dev/null 2>&1
fi fi
# Updating mail stats
if [ ! -z "$MAIL_SYSTEM" ] && [ "$MAIL_SYSTEM" != 'no' ]; then
$BIN/v-update-sys-rrd-mail $period >/dev/null 2>&1
fi
# Updating ftp stats # Updating ftp stats
if [ ! -z "$FTP_SYSTEM" ] && [ "$FTP_SYSTEM" != 'no' ]; then if [ ! -z "$FTP_SYSTEM" ] && [ "$FTP_SYSTEM" != 'no' ]; then
$BIN/v-update-sys-rrd-ftp $period >/dev/null 2>&1 $BIN/v-update-sys-rrd-ftp $period >/dev/null 2>&1

96
bin/v-update-sys-rrd-mail Executable file
View file

@ -0,0 +1,96 @@
#!/bin/bash
# info: update mail rrd
# options: PERIOD
#
# The function is for updating mail rrd database and graphic.
#----------------------------------------------------------#
# Variable&Function #
#----------------------------------------------------------#
# Argument defenition
period=${1-daily}
# Includes
source $VESTA/func/main.sh
source $VESTA/conf/vesta.conf
#----------------------------------------------------------#
# Action #
#----------------------------------------------------------#
# Switching on time period
case $period in
daily) start='-1d'; end='now'; grid='MINUTE:30:HOUR:1:HOUR:4:0:%H:%M';;
weekly) start='-7d'; end='now'; grid='HOUR:8:DAY:1:DAY:1:0:%a %d';;
monthly) start='-1m'; end='now'; grid='WEEK:1:WEEK:1:WEEK:1:0:%b %d';;
yearly) start='-1y'; end='now'; grid='MONTH:1:YEAR:1:MONTH:2:2419200:%b';;
*) exit $E_RRD ;;
esac
# Checking directory
if [ ! -d "$RRD/mail" ]; then
mkdir $RRD/mail
fi
# Checking database
if [ ! -e "$RRD/mail/mail.rrd" ]; then
# Adding database
rrdtool create $RRD/mail/mail.rrd --step $RRD_STEP \
DS:A:GAUGE:600:U:U \
RRA:AVERAGE:0.5:1:600 \
RRA:AVERAGE:0.5:6:700 \
RRA:AVERAGE:0.5:24:775 \
RRA:AVERAGE:0.5:288:797 \
RRA:MAX:0.5:1:600 \
RRA:MAX:0.5:6:700 \
RRA:MAX:0.5:24:775 \
RRA:MAX:0.5:288:797
fi
# Parsing data
if [ "$period" = 'daily' ]; then
a=0
a=$(exim -bpc)
# Updating rrd database
rrdtool update $RRD/mail/mail.rrd N:$a
fi
# Updating daily graph
rrdtool graph $RRD/mail/$period-mail.png \
--imgformat PNG \
--height="120" \
--width="440" \
--start "$start" \
--end "$end" \
--vertical-label "Queue Size" \
--x-grid "$grid" \
-c "BACK#7a766d" \
-c "SHADEA#7a766d" \
-c "SHADEB#7a766d" \
-c "FONT#FFFFFF" \
-c "CANVAS#302c2d" \
-c "GRID#666666" \
-c "MGRID#AAAAAA" \
-c "FRAME#302c2d" \
-c "ARROW#FFFFFF" \
DEF:a=$RRD/mail/mail.rrd:A:AVERAGE \
COMMENT:'\r' \
LINE1:a#fefda0:"Emails " \
GPRINT:a:'LAST:Current\:''%8.0lf' \
GPRINT:a:'MIN:Min\:''%8.0lf' \
GPRINT:a:'MAX:Max\:''%8.0lf\j' &>/dev/null; result=$?
#----------------------------------------------------------#
# Vesta #
#----------------------------------------------------------#
if [ "$result" -ne 0 ]; then
exit $E_RRD
fi
exit

View file

@ -67,7 +67,7 @@ echo "WEB='$WEB'" > $USER_DATA/backup-excludes.conf
echo "DNS='$DNS'" >> $USER_DATA/backup-excludes.conf echo "DNS='$DNS'" >> $USER_DATA/backup-excludes.conf
echo "MAIL='$MAIL'" >> $USER_DATA/backup-excludes.conf echo "MAIL='$MAIL'" >> $USER_DATA/backup-excludes.conf
echo "DB='$DB'" >> $USER_DATA/backup-excludes.conf echo "DB='$DB'" >> $USER_DATA/backup-excludes.conf
echo "CRON='$DB'" >> $USER_DATA/backup-excludes.conf echo "CRON='$CRON'" >> $USER_DATA/backup-excludes.conf
echo "USER='$USER'" >> $USER_DATA/backup-excludes.conf echo "USER='$USER'" >> $USER_DATA/backup-excludes.conf
chmod 660 $USER_DATA/backup-excludes.conf chmod 660 $USER_DATA/backup-excludes.conf

View file

@ -337,20 +337,20 @@ dump_mysql_database() {
fi fi
query='SELECT VERSION()' query='SELECT VERSION()'
mysql -h $HOST -u $USER -p$PASSWORD -e "$query" > /dev/null 2>&1 mysql -h $HOST -u $USER -p$PASSWORD -e "$query" >/dev/null 2>/tmp/e.mysql
if [ '0' -ne "$?" ]; then if [ '0' -ne "$?" ]; then
rm -rf $tmpdir rm -rf $tmpdir
echo "Can't connect to mysql server $HOST" |\ echo -e "Can't connect to $HOST\n$(cat /tmp/e.mysql)" |\
$send_mail -s "$subj" $email $send_mail -s "$subj" $email
echo "Error: Connection failed" echo "Error: Connection failed"
log_event "$E_CONNECT $EVENT" log_event "$E_CONNECT $EVENT"
exit $E_CONNECT exit $E_CONNECT
fi fi
mysqldump -h $HOST -u $USER -p$PASSWORD -r $dump $database mysqldump -h $HOST -u $USER -p$PASSWORD -r $dump $database 2>/tmp/e.mysql
if [ '0' -ne "$?" ]; then if [ '0' -ne "$?" ]; then
rm -rf $tmpdir rm -rf $tmpdir
echo "Can't dump mysql database $database" |\ echo -e "Can't dump database $database\n$(cat /tmp/e.mysql)" |\
$send_mail -s "$subj" $email $send_mail -s "$subj" $email
echo "Error: dump $database failed" echo "Error: dump $database failed"
log_event "$E_DB $EVENT" log_event "$E_DB $EVENT"

View file

@ -327,15 +327,9 @@ is_web_domain_cert_valid() {
fi fi
if [ -e "$ssl_dir/$domain.ca" ]; then if [ -e "$ssl_dir/$domain.ca" ]; then
ca_vrf=$(openssl verify $ssl_dir/$domain.ca 2>/dev/null |grep 'OK') crt_vrf=$(openssl verify -purpose sslserver \
if [ -z "$ca_vrf" ]; then -CAfile $ssl_dir/$domain.ca $ssl_dir/$domain.crt 2>/dev/null |\
echo "Error: ssl certificate authority is not valid" grep 'OK')
log_event "$E_INVALID" "$EVENT"
exit $E_INVALID
fi
crt_vrf=$(openssl verify -untrusted $ssl_dir/$domain.ca \
$ssl_dir/$domain.crt 2>/dev/null |grep 'OK')
if [ -z "$crt_vrf" ]; then if [ -z "$crt_vrf" ]; then
echo "Error: root or/and intermediate cerificate not found" echo "Error: root or/and intermediate cerificate not found"
log_event "$E_NOTEXIST" "$EVENT" log_event "$E_NOTEXIST" "$EVENT"
@ -491,9 +485,9 @@ is_dns_nameserver_valid() {
if [ ! -z "$remote" ]; then if [ ! -z "$remote" ]; then
zone=$USER_DATA/dns/$d.conf zone=$USER_DATA/dns/$d.conf
a_record=$(echo $r |cut -f 1 -d '.') a_record=$(echo $r |cut -f 1 -d '.')
record=$(grep "RECORD='$a_record'" $zone| grep "TYPE='A'") n_record=$(grep "RECORD='$a_record'" $zone| grep "TYPE='A'")
if [ -z "$record" ]; then if [ -z "$n_record" ]; then
echo "Error: corresponding A record $a_record.$d is not exist" echo "Error: corresponding A record $a_record.$d does not exist"
log_event "$E_NOTEXIST" "$EVENT" log_event "$E_NOTEXIST" "$EVENT"
exit $E_NOTEXIST exit $E_NOTEXIST
fi fi

View file

@ -740,11 +740,16 @@ validate_format_mhdmw() {
# proxy extention or DNS record # proxy extention or DNS record
validate_format_common() { validate_format_common() {
exclude="[!|#|$|^|&|(|)|+|=|{|}|:|<|>|?|/|\|\"|'|;|%|\`| ]" exclude="[!|#|$|^|&|(|)|+|=|{|}|:|<|>|?|/|\|\"|'|;|%|\`| ]"
if [[ "$1" =~ $exclude ]] || [ 200 -le ${#1} ]; then if [[ "$1" =~ $exclude ]]; then
echo "Error: $2 $1 is not valid" echo "Error: $2 $1 is not valid"
log_event "$E_INVALID" "$EVENT" log_event "$E_INVALID" "$EVENT"
exit $E_INVALID exit $E_INVALID
fi fi
if [ 400 -le ${#1} ]; then
echo "Error: $2 $1 is too long"
log_event "$E_INVALID" "$EVENT"
exit $E_INVALID
fi
} }
# DNS record value # DNS record value

View file

@ -318,21 +318,36 @@ rebuild_web_domain_conf() {
$WEBTPL/$PROXY_SYSTEM/$PROXY.sh $user $domain $ip $HOMEDIR $docroot $WEBTPL/$PROXY_SYSTEM/$PROXY.sh $user $domain $ip $HOMEDIR $docroot
fi fi
# Checking ftp # Defining ftp user shell
if [ ! -z "$FTP_USER" ]; then if [ -z "$FTP_SHELL" ]; then
if [ -z "$(grep ^$FTP_USER: /etc/passwd)" ]; then shell='/sbin/nologin'
shell='/sbin/nologin' if [ -e "/usr/bin/rssh" ]; then
if [ -e "/usr/bin/rssh" ]; then shell='/usr/bin/rssh'
shell='/usr/bin/rssh' fi
fi else
/usr/sbin/useradd $FTP_USER \ shell=$FTP_SHELL
fi
# Checking ftp users
for ftp_user in ${FTP_USER//:/ }; do
if [ -z "$(grep ^$ftp_user: /etc/passwd)" ]; then
# Parsing ftp user variables
position=$(echo $FTP_USER | tr ':' '\n' | grep -n '' |\
grep ":$ftp_user$" | cut -f 1 -d:)
ftp_path=$(echo $FTP_PATH | tr ':' '\n' | grep -n '' |\
grep "^$position:" | cut -f 2 -d :)
ftp_md5=$(echo $FTP_MD5 | tr ':' '\n' | grep -n '' |\
grep "^$position:" | cut -f 2 -d :)
# Adding ftp user
/usr/sbin/useradd $ftp_user \
-s $shell \ -s $shell \
-o -u $(id -u $user) \ -o -u $(id -u $user) \
-g $(id -u $user) \ -g $(id -u $user) \
-M -d "$HOMEDIR/$user/web/$domain" > /dev/null 2>&1 -M -d "$HOMEDIR/$user/web/$domain${ftp_path}" >/dev/null 2>&1
# Update password # Updating ftp user password
shadow=$(grep "^$FTP_USER:" /etc/shadow) shadow=$(grep "^$ftp_user:" /etc/shadow)
shdw3=$(echo "$shadow" | cut -f3 -d :) shdw3=$(echo "$shadow" | cut -f3 -d :)
shdw4=$(echo "$shadow" | cut -f4 -d :) shdw4=$(echo "$shadow" | cut -f4 -d :)
shdw5=$(echo "$shadow" | cut -f5 -d :) shdw5=$(echo "$shadow" | cut -f5 -d :)
@ -340,15 +355,14 @@ rebuild_web_domain_conf() {
shdw7=$(echo "$shadow" | cut -f7 -d :) shdw7=$(echo "$shadow" | cut -f7 -d :)
shdw8=$(echo "$shadow" | cut -f8 -d :) shdw8=$(echo "$shadow" | cut -f8 -d :)
shdw9=$(echo "$shadow" | cut -f9 -d :) shdw9=$(echo "$shadow" | cut -f9 -d :)
shadow_str="$FTP_USER:$FTP_MD5:$shdw3:$shdw4:$shdw5:$shdw6" shadow_str="$ftp_user:$ftp_md5:$shdw3:$shdw4:$shdw5:$shdw6"
shadow_str="$shadow_str:$shdw7:$shdw8:$shdw9" shadow_str="$shadow_str:$shdw7:$shdw8:$shdw9"
chmod u+w /etc/shadow chmod u+w /etc/shadow
sed -i "/^$FTP_USER:*/d" /etc/shadow sed -i "/^$ftp_user:*/d" /etc/shadow
echo "$shadow_str" >> /etc/shadow echo "$shadow_str" >> /etc/shadow
chmod u-w /etc/shadow chmod u-w /etc/shadow
fi fi
fi done
} }
# DNS domain rebuild # DNS domain rebuild

View file

@ -6,11 +6,21 @@ send_api_cmd() {
USER=admin USER=admin
fi fi
auth="user=$USER&password=$PASSWORD&returncode=yes" answer=$(curl -s -k \
cmd="cmd=$1" --data-urlencode "user=$USER" \
args="arg1=$2&arg2=$3&arg3=$4&arg4=$5&arg5=$6&arg6=$7&arg7=$8&arg8=$9" --data-urlencode "password=$PASSWORD" \
args=$(echo "$args" |sed -e "s/+/%2B/g") --data-urlencode "returncode=yes" \
answer=$(curl -s -k --data "$auth&$cmd&$args" https://$HOST:$PORT/api/) --data-urlencode "cmd=$1" \
--data-urlencode "arg1=$2" \
--data-urlencode "arg2=$3" \
--data-urlencode "arg3=$4" \
--data-urlencode "arg4=$5" \
--data-urlencode "arg5=$6" \
--data-urlencode "arg6=$7" \
--data-urlencode "arg7=$8" \
--data-urlencode "arg8=$9" \
https://$HOST:$PORT/api/)
if [ "$answer" != '0' ]; then if [ "$answer" != '0' ]; then
return 1 return 1
else else
@ -90,7 +100,7 @@ is_dnshost_alive() {
$send_cmd v-list-sys-config $send_cmd v-list-sys-config
if [ $? -ne 0 ]; then if [ $? -ne 0 ]; then
echo "Error: $type connection to $HOST failed" echo "Error: $type connection to $HOST failed"
log_event "$E_CONNECT $EVENT" log_event "$E_CONNECT" "$EVENT"
exit $E_CONNECT exit $E_CONNECT
fi fi
@ -104,7 +114,7 @@ is_dnshost_alive() {
$send_cmd v-list-user $DNS_USER $send_cmd v-list-user $DNS_USER
if [ $? -ne 0 ]; then if [ $? -ne 0 ]; then
echo "Error: dns user $DNS_USER doesn't exist" echo "Error: dns user $DNS_USER doesn't exist"
log_event "$E_NOTEXIST $EVENT" log_event "$E_NOTEXIST" "$EVENT"
exit $E_NOTEXIST exit $E_NOTEXIST
fi fi
} }
@ -146,7 +156,7 @@ remote_dns_health_check() {
echo -e "\n\n--\nVesta Control Panel\n$(hostname)" >> $tmpfile echo -e "\n\n--\nVesta Control Panel\n$(hostname)" >> $tmpfile
cat $tmpfile | $send_mail -s "$subj" $email cat $tmpfile | $send_mail -s "$subj" $email
log_event "$E_CONNECT $EVENT" log_event "$E_CONNECT" "$EVENT"
dconf="../../../conf/dns-cluster" dconf="../../../conf/dns-cluster"
update_object_value "$dconf" 'HOST' "$HOST" '$SUSPENDED' 'yes' update_object_value "$dconf" 'HOST' "$HOST" '$SUSPENDED' 'yes'
fi fi

View file

@ -1,14 +1,18 @@
########################################################################## ######################################################################
# #
# Exim configuration file for Vesta Control Panel #
# #
######################################################################
#SPAMASSASSIN = yes #SPAMASSASSIN = yes
SPAM_SCORE = 50 #SPAM_SCORE = 50
CLAMD = yes #CLAMD = yes
##########################################################################
domainlist local_domains = dsearch;/etc/exim4/domains/ domainlist local_domains = dsearch;/etc/exim4/domains/
domainlist relay_to_domains = dsearch;/etc/exim4/domains/ domainlist relay_to_domains = dsearch;/etc/exim4/domains/
hostlist relay_from_hosts = 127.0.0.1 hostlist relay_from_hosts = 127.0.0.1
hostlist whitelist = net-iplsearch;/etc/exim4/white-blocks.conf hostlist whitelist = net-iplsearch;/etc/exim4/white-blocks.conf
hostlist spammers = net-iplsearch;/etc/exim4/spam-blocks.conf hostlist spammers = net-iplsearch;/etc/exim4/spam-blocks.conf
no_local_from_check no_local_from_check
untrusted_set_sender = * untrusted_set_sender = *
acl_smtp_connect = acl_check_spammers acl_smtp_connect = acl_check_spammers
@ -43,43 +47,38 @@ DKIM_FILE = /etc/exim4/domains/${lc:${domain:$h_from:}}/dkim.pem
DKIM_PRIVATE_KEY = ${if exists{DKIM_FILE}{DKIM_FILE}{0}} DKIM_PRIVATE_KEY = ${if exists{DKIM_FILE}{DKIM_FILE}{0}}
##########################################################################
######################################################################
# ACL CONFIGURATION #
# Specifies access control lists for incoming SMTP mail #
######################################################################
begin acl begin acl
##########################################################################
acl_check_spammers: acl_check_spammers:
accept hosts = +whitelist accept hosts = +whitelist
drop message = Your host in blacklist on this server. drop message = Your host in blacklist on this server.
log_message = Host in blacklist log_message = Host in blacklist
hosts = +spammers hosts = +spammers
deny message = rejected because $sender_host_address is in a black list at $dnslist_domain\\n$dnslist_text
dnslists = ${readfile {/etc/exim4/dnsbl.conf}{:}}
accept accept
acl_check_mail: acl_check_mail:
deny deny condition = ${if eq{$sender_helo_name}{}}
condition = ${if eq{$sender_helo_name}{}}
message = HELO required before MAIL message = HELO required before MAIL
# drop
# condition = ${if isip{$sender_helo_name}}
# message = Access denied - Invalid HELO name (See RFC2821 4.1.3)
drop message = Helo name contains a ip address (HELO was $sender_helo_name) and not is valid drop message = Helo name contains a ip address (HELO was $sender_helo_name) and not is valid
condition = ${if match{$sender_helo_name}{\N((\d{1,3}[.-]\d{1,3}[.-]\d{1,3}[.-]\d{1,3})|([0-9a-f]{8})|([0-9A-F]{8}))\N}{yes}{no}} condition = ${if match{$sender_helo_name}{\N((\d{1,3}[.-]\d{1,3}[.-]\d{1,3}[.-]\d{1,3})|([0-9a-f]{8})|([0-9A-F]{8}))\N}{yes}{no}}
condition = ${if match {${lookup dnsdb{>: defer_never,ptr=$sender_host_address}}\}{$sender_helo_name}{no}{yes}} condition = ${if match {${lookup dnsdb{>: defer_never,ptr=$sender_host_address}}\}{$sender_helo_name}{no}{yes}}
delay = 45s delay = 45s
# drop
# condition = ${if match{$sender_helo_name}{\N^\[\N}{no}{yes}} drop condition = ${if isip{$sender_helo_name}}
# condition = ${if match{$sender_helo_name}{\N\.\N}{no}{yes}}
# message = Access denied - Invalid HELO name (See RFC2821 4.1.1.1)
drop
condition = ${if isip{$sender_helo_name}}
message = Access denied - Invalid HELO name (See RFC2821 4.1.3) message = Access denied - Invalid HELO name (See RFC2821 4.1.3)
# drop
# condition = ${if match{$sender_helo_name}{\N\.$\N}}
# message = Access denied - Invalid HELO name (See RFC2821 4.1.1.1)
# drop message = "REJECTED - Bad HELO - Host impersonating [$sender_helo_name]"
# condition = ${if match{$sender_helo_name}{$primary_hostname}}
drop condition = ${if eq{[$interface_address]}{$sender_helo_name}} drop condition = ${if eq{[$interface_address]}{$sender_helo_name}}
message = $interface_address is _my_ address message = $interface_address is _my_ address
accept accept
@ -102,6 +101,10 @@ acl_check_rcpt:
accept authenticated = * accept authenticated = *
control = submission/domain= control = submission/domain=
deny message = Rejected because $sender_host_address is in a black list at $dnslist_domain\n$dnslist_text
hosts = !+whitelist
dnslists = ${readfile {/etc/exim4/dnsbl.conf}{:}}
require message = relay not permitted require message = relay not permitted
domains = +local_domains : +relay_to_domains domains = +local_domains : +relay_to_domains
@ -113,27 +116,30 @@ acl_check_rcpt:
.ifdef CLAMD .ifdef CLAMD
warn set acl_m0 = no warn set acl_m0 = no
warn condition = ${if exists {/etc/exim4/domains/$domain/antivirus}{yes}{no}} warn condition = ${if exists {/etc/exim4/domains/$domain/antivirus}{yes}{no}}
set acl_m0 = yes set acl_m0 = yes
.endif .endif
.ifdef SPAMASSASSIN .ifdef SPAMASSASSIN
warn set acl_m1 = no warn set acl_m1 = no
warn condition = ${if exists {/etc/exim4/domains/$domain/antispam}{yes}{no}} warn condition = ${if exists {/etc/exim4/domains/$domain/antispam}{yes}{no}}
set acl_m1 = yes set acl_m1 = yes
.endif .endif
accept accept
acl_check_data: acl_check_data:
.ifdef CLAMD .ifdef CLAMD
deny message = Message contains a virus ($malware_name) and has been rejected deny message = Message contains a virus ($malware_name) and has been rejected
malware = * malware = *
condition = ${if eq{$acl_m0}{yes}{yes}{no}} condition = ${if eq{$acl_m0}{yes}{yes}{no}}
.endif .endif
.ifdef SPAMASSASSIN .ifdef SPAMASSASSIN
warn warn !authenticated = *
!authenticated = *
hosts = !+relay_from_hosts hosts = !+relay_from_hosts
condition = ${if < {$message_size}{100K}} condition = ${if < {$message_size}{100K}}
condition = ${if eq{$acl_m1}{yes}{yes}{no}} condition = ${if eq{$acl_m1}{yes}{yes}{no}}
@ -142,23 +148,29 @@ acl_check_data:
add_header = X-Spam-Bar: $spam_bar add_header = X-Spam-Bar: $spam_bar
add_header = X-Spam-Report: $spam_report add_header = X-Spam-Report: $spam_report
set acl_m2 = $spam_score_int set acl_m2 = $spam_score_int
warn
condition = ${if !eq{$acl_m2}{} {yes}{no}} warn condition = ${if !eq{$acl_m2}{} {yes}{no}}
condition = ${if >{$acl_m2}{SPAM_SCORE} {yes}{no}} condition = ${if >{$acl_m2}{SPAM_SCORE} {yes}{no}}
add_header = X-Spam-Status: Yes add_header = X-Spam-Status: Yes
message = SpamAssassin detected spam (from $sender_address to $recipients). message = SpamAssassin detected spam (from $sender_address to $recipients).
.endif .endif
accept accept
acl_check_mime: acl_check_mime:
deny message = Blacklisted file extension detected deny message = Blacklisted file extension detected
condition = ${if match {${lc:$mime_filename}}{\N(\.ade|\.adp|\.bat|\.chm|\.cmd|\.com|\.cpl|\.exe|\.hta|\.ins|\.isp|\.jse|\.lib|\.lnk|\.mde|\.msc|\.msp|\.mst|\.pif|\.scr|\.sct|\.shb|\.sys|\.vb|\.vbe|\.vbs|\.vxd|\.wsc|\.wsf|\.wsh)$\N}{1}{0}} condition = ${if match {${lc:$mime_filename}}{\N(\.ade|\.adp|\.bat|\.chm|\.cmd|\.com|\.cpl|\.exe|\.hta|\.ins|\.isp|\.jse|\.lib|\.lnk|\.mde|\.msc|\.msp|\.mst|\.pif|\.scr|\.sct|\.shb|\.sys|\.vb|\.vbe|\.vbs|\.vxd|\.wsc|\.wsf|\.wsh)$\N}{1}{0}}
accept accept
##########################################################################
######################################################################
# AUTHENTICATION CONFIGURATION #
######################################################################
begin authenticators begin authenticators
##########################################################################
dovecot_plain: dovecot_plain:
driver = dovecot driver = dovecot
public_name = PLAIN public_name = PLAIN
@ -171,9 +183,14 @@ dovecot_login:
server_socket = /var/run/dovecot/auth-client server_socket = /var/run/dovecot/auth-client
server_set_id = $auth1 server_set_id = $auth1
##########################################################################
######################################################################
# ROUTERS CONFIGURATION #
# Specifies how addresses are handled #
######################################################################
begin routers begin routers
##########################################################################
#smarthost: #smarthost:
# driver = manualroute # driver = manualroute
# domains = ! +local_domains # domains = ! +local_domains
@ -253,9 +270,12 @@ terminate_alias:
condition = ${lookup{$local_part@$domain}lsearch{/etc/exim4/domains/$domain/aliases}{true}{false}} condition = ${lookup{$local_part@$domain}lsearch{/etc/exim4/domains/$domain/aliases}{true}{false}}
##########################################################################
######################################################################
# TRANSPORTS CONFIGURATION #
######################################################################
begin transports begin transports
##########################################################################
remote_smtp: remote_smtp:
driver = smtp driver = smtp
#helo_data = $sender_address_domain #helo_data = $sender_address_domain
@ -265,7 +285,6 @@ remote_smtp:
dkim_canon = relaxed dkim_canon = relaxed
dkim_strict = 0 dkim_strict = 0
procmail: procmail:
driver = pipe driver = pipe
command = "/usr/bin/procmail -d $local_part" command = "/usr/bin/procmail -d $local_part"
@ -306,7 +325,7 @@ local_spam_delivery:
delivery_date_add delivery_date_add
envelope_to_add envelope_to_add
return_path_add return_path_add
directory = "${extract{5}{:}{${lookup{$local_part}lsearch{/etc/exim4/domains/$domain/passwd}}}}/mail/$domain/$local_part/.spam" directory = "${extract{5}{:}{${lookup{$local_part}lsearch{/etc/exim4/domains/$domain/passwd}}}}/mail/$domain/$local_part/.Spam"
quota = ${extract{6}{:}{${lookup{$local_part}lsearch{/etc/exim4/domains/$domain/passwd}}}}M quota = ${extract{6}{:}{${lookup{$local_part}lsearch{/etc/exim4/domains/$domain/passwd}}}}M
quota_directory = "${extract{5}{:}{${lookup{$local_part}lsearch{/etc/exim4/domains/$domain/passwd}}}}/mail/$domain/$local_part" quota_directory = "${extract{5}{:}{${lookup{$local_part}lsearch{/etc/exim4/domains/$domain/passwd}}}}/mail/$domain/$local_part"
quota_warn_threshold = 75% quota_warn_threshold = 75%
@ -335,8 +354,24 @@ devnull:
driver = appendfile driver = appendfile
file = /dev/null file = /dev/null
##########################################################################
######################################################################
# RETRY CONFIGURATION #
######################################################################
begin retry begin retry
# Address or Domain Error Retries
# ----------------- ----- -------
* * F,2h,15m; G,16h,1h,1.5; F,4d,6h * * F,2h,15m; G,16h,1h,1.5; F,4d,6h
##########################################################################
######################################################################
# REWRITE CONFIGURATION #
######################################################################
begin rewrite begin rewrite
######################################################################

View file

@ -1,14 +1,18 @@
########################################################################## ######################################################################
# #
# Exim configuration file for Vesta Control Panel #
# #
######################################################################
#SPAMASSASSIN = yes #SPAMASSASSIN = yes
SPAM_SCORE = 10 #SPAM_SCORE = 50
#CLAMD = yes #CLAMD = yes
##########################################################################
domainlist local_domains = dsearch;/etc/exim/domains/ domainlist local_domains = dsearch;/etc/exim/domains/
domainlist relay_to_domains = dsearch;/etc/exim/domains/ domainlist relay_to_domains = dsearch;/etc/exim/domains/
hostlist relay_from_hosts = 127.0.0.1 hostlist relay_from_hosts = 127.0.0.1
hostlist whitelist = net-iplsearch;/etc/exim/white-blocks.conf hostlist whitelist = net-iplsearch;/etc/exim/white-blocks.conf
hostlist spammers = net-iplsearch;/etc/exim/spam-blocks.conf hostlist spammers = net-iplsearch;/etc/exim/spam-blocks.conf
no_local_from_check no_local_from_check
untrusted_set_sender = * untrusted_set_sender = *
acl_smtp_connect = acl_check_spammers acl_smtp_connect = acl_check_spammers
@ -43,43 +47,37 @@ DKIM_FILE = /etc/exim/domains/${lc:${domain:$h_from:}}/dkim.pem
DKIM_PRIVATE_KEY = ${if exists{DKIM_FILE}{DKIM_FILE}{0}} DKIM_PRIVATE_KEY = ${if exists{DKIM_FILE}{DKIM_FILE}{0}}
########################################################################## ######################################################################
# ACL CONFIGURATION #
# Specifies access control lists for incoming SMTP mail #
######################################################################
begin acl begin acl
##########################################################################
acl_check_spammers: acl_check_spammers:
accept hosts = +whitelist accept hosts = +whitelist
drop message = Your host in blacklist on this server. drop message = Your host in blacklist on this server.
log_message = Host in blacklist log_message = Host in blacklist
hosts = +spammers hosts = +spammers
deny message = rejected because $sender_host_address is in a black list at $dnslist_domain\\n$dnslist_text
dnslists = ${readfile {/etc/exim/dnsbl.conf}{:}}
accept accept
acl_check_mail: acl_check_mail:
deny deny condition = ${if eq{$sender_helo_name}{}}
condition = ${if eq{$sender_helo_name}{}}
message = HELO required before MAIL message = HELO required before MAIL
# drop
# condition = ${if isip{$sender_helo_name}}
# message = Access denied - Invalid HELO name (See RFC2821 4.1.3)
drop message = Helo name contains a ip address (HELO was $sender_helo_name) and not is valid drop message = Helo name contains a ip address (HELO was $sender_helo_name) and not is valid
condition = ${if match{$sender_helo_name}{\N((\d{1,3}[.-]\d{1,3}[.-]\d{1,3}[.-]\d{1,3})|([0-9a-f]{8})|([0-9A-F]{8}))\N}{yes}{no}} condition = ${if match{$sender_helo_name}{\N((\d{1,3}[.-]\d{1,3}[.-]\d{1,3}[.-]\d{1,3})|([0-9a-f]{8})|([0-9A-F]{8}))\N}{yes}{no}}
condition = ${if match {${lookup dnsdb{>: defer_never,ptr=$sender_host_address}}\}{$sender_helo_name}{no}{yes}} condition = ${if match {${lookup dnsdb{>: defer_never,ptr=$sender_host_address}}\}{$sender_helo_name}{no}{yes}}
delay = 45s delay = 45s
# drop
# condition = ${if match{$sender_helo_name}{\N^\[\N}{no}{yes}} drop condition = ${if isip{$sender_helo_name}}
# condition = ${if match{$sender_helo_name}{\N\.\N}{no}{yes}}
# message = Access denied - Invalid HELO name (See RFC2821 4.1.1.1)
drop
condition = ${if isip{$sender_helo_name}}
message = Access denied - Invalid HELO name (See RFC2821 4.1.3) message = Access denied - Invalid HELO name (See RFC2821 4.1.3)
# drop
# condition = ${if match{$sender_helo_name}{\N\.$\N}}
# message = Access denied - Invalid HELO name (See RFC2821 4.1.1.1)
# drop message = "REJECTED - Bad HELO - Host impersonating [$sender_helo_name]"
# condition = ${if match{$sender_helo_name}{$primary_hostname}}
drop condition = ${if eq{[$interface_address]}{$sender_helo_name}} drop condition = ${if eq{[$interface_address]}{$sender_helo_name}}
message = $interface_address is _my_ address message = $interface_address is _my_ address
accept accept
@ -102,6 +100,10 @@ acl_check_rcpt:
accept authenticated = * accept authenticated = *
control = submission/domain= control = submission/domain=
deny message = Rejected because $sender_host_address is in a black list at $dnslist_domain\n$dnslist_text
hosts = !+whitelist
dnslists = ${readfile {/etc/exim/dnsbl.conf}{:}}
require message = relay not permitted require message = relay not permitted
domains = +local_domains : +relay_to_domains domains = +local_domains : +relay_to_domains
@ -113,27 +115,30 @@ acl_check_rcpt:
.ifdef CLAMD .ifdef CLAMD
warn set acl_m0 = no warn set acl_m0 = no
warn condition = ${if exists {/etc/exim/domains/$domain/antivirus}{yes}{no}} warn condition = ${if exists {/etc/exim/domains/$domain/antivirus}{yes}{no}}
set acl_m0 = yes set acl_m0 = yes
.endif .endif
.ifdef SPAMASSASSIN .ifdef SPAMASSASSIN
warn set acl_m1 = no warn set acl_m1 = no
warn condition = ${if exists {/etc/exim/domains/$domain/antispam}{yes}{no}} warn condition = ${if exists {/etc/exim/domains/$domain/antispam}{yes}{no}}
set acl_m1 = yes set acl_m1 = yes
.endif .endif
accept accept
acl_check_data: acl_check_data:
.ifdef CLAMD .ifdef CLAMD
deny message = Message contains a virus ($malware_name) and has been rejected deny message = Message contains a virus ($malware_name) and has been rejected
malware = * malware = *
condition = ${if eq{$acl_m0}{yes}{yes}{no}} condition = ${if eq{$acl_m0}{yes}{yes}{no}}
.endif .endif
.ifdef SPAMASSASSIN .ifdef SPAMASSASSIN
warn warn !authenticated = *
!authenticated = *
hosts = !+relay_from_hosts hosts = !+relay_from_hosts
condition = ${if < {$message_size}{100K}} condition = ${if < {$message_size}{100K}}
condition = ${if eq{$acl_m1}{yes}{yes}{no}} condition = ${if eq{$acl_m1}{yes}{yes}{no}}
@ -142,23 +147,29 @@ acl_check_data:
add_header = X-Spam-Bar: $spam_bar add_header = X-Spam-Bar: $spam_bar
add_header = X-Spam-Report: $spam_report add_header = X-Spam-Report: $spam_report
set acl_m2 = $spam_score_int set acl_m2 = $spam_score_int
warn
condition = ${if !eq{$acl_m2}{} {yes}{no}} warn condition = ${if !eq{$acl_m2}{} {yes}{no}}
condition = ${if >{$acl_m2}{SPAM_SCORE} {yes}{no}} condition = ${if >{$acl_m2}{SPAM_SCORE} {yes}{no}}
add_header = X-Spam-Status: Yes add_header = X-Spam-Status: Yes
message = SpamAssassin detected spam (from $sender_address to $recipients). message = SpamAssassin detected spam (from $sender_address to $recipients).
.endif .endif
accept accept
acl_check_mime: acl_check_mime:
deny message = Blacklisted file extension detected deny message = Blacklisted file extension detected
condition = ${if match {${lc:$mime_filename}}{\N(\.ade|\.adp|\.bat|\.chm|\.cmd|\.com|\.cpl|\.exe|\.hta|\.ins|\.isp|\.jse|\.lib|\.lnk|\.mde|\.msc|\.msp|\.mst|\.pif|\.scr|\.sct|\.shb|\.sys|\.vb|\.vbe|\.vbs|\.vxd|\.wsc|\.wsf|\.wsh)$\N}{1}{0}} condition = ${if match {${lc:$mime_filename}}{\N(\.ade|\.adp|\.bat|\.chm|\.cmd|\.com|\.cpl|\.exe|\.hta|\.ins|\.isp|\.jse|\.lib|\.lnk|\.mde|\.msc|\.msp|\.mst|\.pif|\.scr|\.sct|\.shb|\.sys|\.vb|\.vbe|\.vbs|\.vxd|\.wsc|\.wsf|\.wsh)$\N}{1}{0}}
accept accept
##########################################################################
######################################################################
# AUTHENTICATION CONFIGURATION #
######################################################################
begin authenticators begin authenticators
##########################################################################
login: login:
driver = plaintext driver = plaintext
public_name = LOGIN public_name = LOGIN
@ -178,9 +189,13 @@ dovecot_login:
server_set_id = $auth1 server_set_id = $auth1
##########################################################################
######################################################################
# ROUTERS CONFIGURATION #
# Specifies how addresses are handled #
######################################################################
begin routers begin routers
##########################################################################
smarthost: smarthost:
driver = manualroute driver = manualroute
domains = ! +local_domains domains = ! +local_domains
@ -258,9 +273,12 @@ terminate_alias:
condition = ${lookup{$local_part@$domain}lsearch{/etc/exim/domains/$domain/aliases}{true}{false}} condition = ${lookup{$local_part@$domain}lsearch{/etc/exim/domains/$domain/aliases}{true}{false}}
##########################################################################
######################################################################
# TRANSPORTS CONFIGURATION #
######################################################################
begin transports begin transports
##########################################################################
remote_smtp: remote_smtp:
driver = smtp driver = smtp
dkim_domain = DKIM_DOMAIN dkim_domain = DKIM_DOMAIN
@ -314,7 +332,7 @@ local_spam_delivery:
delivery_date_add delivery_date_add
envelope_to_add envelope_to_add
return_path_add return_path_add
directory = "${extract{5}{:}{${lookup{$local_part}lsearch{/etc/exim/domains/$domain/passwd}}}}/mail/$domain/$local_part/.spam" directory = "${extract{5}{:}{${lookup{$local_part}lsearch{/etc/exim/domains/$domain/passwd}}}}/mail/$domain/$local_part/.Spam"
quota = ${extract{6}{:}{${lookup{$local_part}lsearch{/etc/exim/domains/$domain/passwd}}}}M quota = ${extract{6}{:}{${lookup{$local_part}lsearch{/etc/exim/domains/$domain/passwd}}}}M
quota_directory = "${extract{5}{:}{${lookup{$local_part}lsearch{/etc/exim/domains/$domain/passwd}}}}/mail/$domain/$local_part" quota_directory = "${extract{5}{:}{${lookup{$local_part}lsearch{/etc/exim/domains/$domain/passwd}}}}/mail/$domain/$local_part"
quota_warn_threshold = 75% quota_warn_threshold = 75%
@ -343,8 +361,24 @@ devnull:
driver = appendfile driver = appendfile
file = /dev/null file = /dev/null
##########################################################################
######################################################################
# RETRY CONFIGURATION #
######################################################################
begin retry begin retry
# Address or Domain Error Retries
# ----------------- ----- -------
* * F,2h,15m; G,16h,1h,1.5; F,4d,6h * * F,2h,15m; G,16h,1h,1.5; F,4d,6h
##########################################################################
######################################################################
# REWRITE CONFIGURATION #
######################################################################
begin rewrite begin rewrite
######################################################################

View file

@ -1,14 +1,18 @@
########################################################################## ######################################################################
# #
# Exim configuration file for Vesta Control Panel #
# #
######################################################################
#SPAMASSASSIN = yes #SPAMASSASSIN = yes
SPAM_SCORE = 50 #SPAM_SCORE = 50
#CLAMD = yes #CLAMD = yes
##########################################################################
domainlist local_domains = dsearch;/etc/exim/domains/ domainlist local_domains = dsearch;/etc/exim/domains/
domainlist relay_to_domains = dsearch;/etc/exim/domains/ domainlist relay_to_domains = dsearch;/etc/exim/domains/
hostlist relay_from_hosts = 127.0.0.1 hostlist relay_from_hosts = 127.0.0.1
hostlist whitelist = net-iplsearch;/etc/exim/white-blocks.conf hostlist whitelist = net-iplsearch;/etc/exim/white-blocks.conf
hostlist spammers = net-iplsearch;/etc/exim/spam-blocks.conf hostlist spammers = net-iplsearch;/etc/exim/spam-blocks.conf
no_local_from_check no_local_from_check
untrusted_set_sender = * untrusted_set_sender = *
acl_smtp_connect = acl_check_spammers acl_smtp_connect = acl_check_spammers
@ -26,8 +30,8 @@ av_scanner = clamd: /var/run/clamav/clamd.sock
.endif .endif
tls_advertise_hosts = * tls_advertise_hosts = *
tls_certificate = /etc/pki/tls/certs/exim.pem tls_certificate = /usr/local/vesta/ssl/certificate.crt
tls_privatekey = /etc/pki/tls/private/exim.pem tls_privatekey = /usr/local/vesta/ssl/certificate.key
daemon_smtp_ports = 25 : 465 : 587 : 2525 daemon_smtp_ports = 25 : 465 : 587 : 2525
tls_on_connect_ports = 465 tls_on_connect_ports = 465
@ -43,43 +47,38 @@ DKIM_FILE = /etc/exim/domains/${lc:${domain:$h_from:}}/dkim.pem
DKIM_PRIVATE_KEY = ${if exists{DKIM_FILE}{DKIM_FILE}{0}} DKIM_PRIVATE_KEY = ${if exists{DKIM_FILE}{DKIM_FILE}{0}}
##########################################################################
######################################################################
# ACL CONFIGURATION #
# Specifies access control lists for incoming SMTP mail #
######################################################################
begin acl begin acl
##########################################################################
acl_check_spammers: acl_check_spammers:
accept hosts = +whitelist accept hosts = +whitelist
drop message = Your host in blacklist on this server. drop message = Your host in blacklist on this server.
log_message = Host in blacklist log_message = Host in blacklist
hosts = +spammers hosts = +spammers
deny message = rejected because $sender_host_address is in a black list at $dnslist_domain\\n$dnslist_text
dnslists = ${readfile {/etc/exim/dnsbl.conf}{:}}
accept accept
acl_check_mail: acl_check_mail:
deny deny condition = ${if eq{$sender_helo_name}{}}
condition = ${if eq{$sender_helo_name}{}}
message = HELO required before MAIL message = HELO required before MAIL
# drop
# condition = ${if isip{$sender_helo_name}}
# message = Access denied - Invalid HELO name (See RFC2821 4.1.3)
drop message = Helo name contains a ip address (HELO was $sender_helo_name) and not is valid drop message = Helo name contains a ip address (HELO was $sender_helo_name) and not is valid
condition = ${if match{$sender_helo_name}{\N((\d{1,3}[.-]\d{1,3}[.-]\d{1,3}[.-]\d{1,3})|([0-9a-f]{8})|([0-9A-F]{8}))\N}{yes}{no}} condition = ${if match{$sender_helo_name}{\N((\d{1,3}[.-]\d{1,3}[.-]\d{1,3}[.-]\d{1,3})|([0-9a-f]{8})|([0-9A-F]{8}))\N}{yes}{no}}
condition = ${if match {${lookup dnsdb{>: defer_never,ptr=$sender_host_address}}\}{$sender_helo_name}{no}{yes}} condition = ${if match {${lookup dnsdb{>: defer_never,ptr=$sender_host_address}}\}{$sender_helo_name}{no}{yes}}
delay = 45s delay = 45s
# drop
# condition = ${if match{$sender_helo_name}{\N^\[\N}{no}{yes}} drop condition = ${if isip{$sender_helo_name}}
# condition = ${if match{$sender_helo_name}{\N\.\N}{no}{yes}}
# message = Access denied - Invalid HELO name (See RFC2821 4.1.1.1)
drop
condition = ${if isip{$sender_helo_name}}
message = Access denied - Invalid HELO name (See RFC2821 4.1.3) message = Access denied - Invalid HELO name (See RFC2821 4.1.3)
# drop
# condition = ${if match{$sender_helo_name}{\N\.$\N}}
# message = Access denied - Invalid HELO name (See RFC2821 4.1.1.1)
# drop message = "REJECTED - Bad HELO - Host impersonating [$sender_helo_name]"
# condition = ${if match{$sender_helo_name}{$primary_hostname}}
drop condition = ${if eq{[$interface_address]}{$sender_helo_name}} drop condition = ${if eq{[$interface_address]}{$sender_helo_name}}
message = $interface_address is _my_ address message = $interface_address is _my_ address
accept accept
@ -102,6 +101,10 @@ acl_check_rcpt:
accept authenticated = * accept authenticated = *
control = submission/domain= control = submission/domain=
deny message = Rejected because $sender_host_address is in a black list at $dnslist_domain\n$dnslist_text
hosts = !+whitelist
dnslists = ${readfile {/etc/exim/dnsbl.conf}{:}}
require message = relay not permitted require message = relay not permitted
domains = +local_domains : +relay_to_domains domains = +local_domains : +relay_to_domains
@ -113,27 +116,30 @@ acl_check_rcpt:
.ifdef CLAMD .ifdef CLAMD
warn set acl_m0 = no warn set acl_m0 = no
warn condition = ${if exists {/etc/exim/domains/$domain/antivirus}{yes}{no}} warn condition = ${if exists {/etc/exim/domains/$domain/antivirus}{yes}{no}}
set acl_m0 = yes set acl_m0 = yes
.endif .endif
.ifdef SPAMASSASSIN .ifdef SPAMASSASSIN
warn set acl_m1 = no warn set acl_m1 = no
warn condition = ${if exists {/etc/exim/domains/$domain/antispam}{yes}{no}} warn condition = ${if exists {/etc/exim/domains/$domain/antispam}{yes}{no}}
set acl_m1 = yes set acl_m1 = yes
.endif .endif
accept accept
acl_check_data: acl_check_data:
.ifdef CLAMD .ifdef CLAMD
deny message = Message contains a virus ($malware_name) and has been rejected deny message = Message contains a virus ($malware_name) and has been rejected
malware = * malware = *
condition = ${if eq{$acl_m0}{yes}{yes}{no}} condition = ${if eq{$acl_m0}{yes}{yes}{no}}
.endif .endif
.ifdef SPAMASSASSIN .ifdef SPAMASSASSIN
warn warn !authenticated = *
!authenticated = *
hosts = !+relay_from_hosts hosts = !+relay_from_hosts
condition = ${if < {$message_size}{100K}} condition = ${if < {$message_size}{100K}}
condition = ${if eq{$acl_m1}{yes}{yes}{no}} condition = ${if eq{$acl_m1}{yes}{yes}{no}}
@ -142,23 +148,29 @@ acl_check_data:
add_header = X-Spam-Bar: $spam_bar add_header = X-Spam-Bar: $spam_bar
add_header = X-Spam-Report: $spam_report add_header = X-Spam-Report: $spam_report
set acl_m2 = $spam_score_int set acl_m2 = $spam_score_int
warn
condition = ${if !eq{$acl_m2}{} {yes}{no}} warn condition = ${if !eq{$acl_m2}{} {yes}{no}}
condition = ${if >{$acl_m2}{SPAM_SCORE} {yes}{no}} condition = ${if >{$acl_m2}{SPAM_SCORE} {yes}{no}}
add_header = X-Spam-Status: Yes add_header = X-Spam-Status: Yes
message = SpamAssassin detected spam (from $sender_address to $recipients). message = SpamAssassin detected spam (from $sender_address to $recipients).
.endif .endif
accept accept
acl_check_mime: acl_check_mime:
deny message = Blacklisted file extension detected deny message = Blacklisted file extension detected
condition = ${if match {${lc:$mime_filename}}{\N(\.ade|\.adp|\.bat|\.chm|\.cmd|\.com|\.cpl|\.exe|\.hta|\.ins|\.isp|\.jse|\.lib|\.lnk|\.mde|\.msc|\.msp|\.mst|\.pif|\.scr|\.sct|\.shb|\.sys|\.vb|\.vbe|\.vbs|\.vxd|\.wsc|\.wsf|\.wsh)$\N}{1}{0}} condition = ${if match {${lc:$mime_filename}}{\N(\.ade|\.adp|\.bat|\.chm|\.cmd|\.com|\.cpl|\.exe|\.hta|\.ins|\.isp|\.jse|\.lib|\.lnk|\.mde|\.msc|\.msp|\.mst|\.pif|\.scr|\.sct|\.shb|\.sys|\.vb|\.vbe|\.vbs|\.vxd|\.wsc|\.wsf|\.wsh)$\N}{1}{0}}
accept accept
##########################################################################
######################################################################
# AUTHENTICATION CONFIGURATION #
######################################################################
begin authenticators begin authenticators
##########################################################################
dovecot_plain: dovecot_plain:
driver = dovecot driver = dovecot
public_name = PLAIN public_name = PLAIN
@ -171,9 +183,14 @@ dovecot_login:
server_socket = /var/run/dovecot/auth-client server_socket = /var/run/dovecot/auth-client
server_set_id = $auth1 server_set_id = $auth1
##########################################################################
######################################################################
# ROUTERS CONFIGURATION #
# Specifies how addresses are handled #
######################################################################
begin routers begin routers
##########################################################################
#smarthost: #smarthost:
# driver = manualroute # driver = manualroute
# domains = ! +local_domains # domains = ! +local_domains
@ -253,9 +270,12 @@ terminate_alias:
condition = ${lookup{$local_part@$domain}lsearch{/etc/exim/domains/$domain/aliases}{true}{false}} condition = ${lookup{$local_part@$domain}lsearch{/etc/exim/domains/$domain/aliases}{true}{false}}
##########################################################################
######################################################################
# TRANSPORTS CONFIGURATION #
######################################################################
begin transports begin transports
##########################################################################
remote_smtp: remote_smtp:
driver = smtp driver = smtp
#helo_data = $sender_address_domain #helo_data = $sender_address_domain
@ -265,7 +285,6 @@ remote_smtp:
dkim_canon = relaxed dkim_canon = relaxed
dkim_strict = 0 dkim_strict = 0
procmail: procmail:
driver = pipe driver = pipe
command = "/usr/bin/procmail -d $local_part" command = "/usr/bin/procmail -d $local_part"
@ -335,8 +354,23 @@ devnull:
driver = appendfile driver = appendfile
file = /dev/null file = /dev/null
##########################################################################
######################################################################
# RETRY CONFIGURATION #
######################################################################
begin retry begin retry
# Address or Domain Error Retries
# ----------------- ----- -------
* * F,2h,15m; G,16h,1h,1.5; F,4d,6h * * F,2h,15m; G,16h,1h,1.5; F,4d,6h
##########################################################################
######################################################################
# REWRITE CONFIGURATION #
######################################################################
begin rewrite begin rewrite
######################################################################

View file

@ -37,3 +37,9 @@ Alias /phpmyadmin /usr/share/phpMyAdmin
# SecRuleInheritance Off # SecRuleInheritance Off
# </Directory> # </Directory>
#</IfModule> #</IfModule>
<Directory /usr/share/phpMyAdmin/setup/>
Order Deny,Allow
Deny from All
Allow from None
</Directory>

View file

@ -6,7 +6,13 @@ Alias /roundcubemail /usr/share/roundcubemail
Alias /webmail /usr/share/roundcubemail Alias /webmail /usr/share/roundcubemail
<Directory /usr/share/roundcubemail/> <Directory /usr/share/roundcubemail/>
Order Deny,Allow Order Deny,Allow
Deny from all Deny from all
Allow from all Allow from all
</Directory>
<Directory /usr/share/roundcubemail/installer>
Order Deny,Allow
Deny from all
Allow from None
</Directory> </Directory>

View file

@ -1,3 +1,3 @@
ssl = yes ssl = yes
ssl_cert = </etc/dovecot/dovecot.pem ssl_cert = </usr/local/vesta/ssl/certificate.crt
ssl_key = </etc/dovecot/private/dovecot.pem ssl_key = </usr/local/vesta/ssl/certificate.key

View file

@ -1,14 +1,18 @@
########################################################################## ######################################################################
# #
# Exim configuration file for Vesta Control Panel #
# #
######################################################################
#SPAMASSASSIN = yes #SPAMASSASSIN = yes
SPAM_SCORE = 50 #SPAM_SCORE = 50
CLAMD = yes #CLAMD = yes
##########################################################################
domainlist local_domains = dsearch;/etc/exim4/domains/ domainlist local_domains = dsearch;/etc/exim4/domains/
domainlist relay_to_domains = dsearch;/etc/exim4/domains/ domainlist relay_to_domains = dsearch;/etc/exim4/domains/
hostlist relay_from_hosts = 127.0.0.1 hostlist relay_from_hosts = 127.0.0.1
hostlist whitelist = net-iplsearch;/etc/exim4/white-blocks.conf hostlist whitelist = net-iplsearch;/etc/exim4/white-blocks.conf
hostlist spammers = net-iplsearch;/etc/exim4/spam-blocks.conf hostlist spammers = net-iplsearch;/etc/exim4/spam-blocks.conf
no_local_from_check no_local_from_check
untrusted_set_sender = * untrusted_set_sender = *
acl_smtp_connect = acl_check_spammers acl_smtp_connect = acl_check_spammers
@ -25,9 +29,9 @@ spamd_address = 127.0.0.1 783
av_scanner = clamd: /var/run/clamav/clamd.ctl av_scanner = clamd: /var/run/clamav/clamd.ctl
.endif .endif
#tls_advertise_hosts = * tls_advertise_hosts = *
#tls_certificate = /usr/local/vesta/ssl/certificate.crt tls_certificate = /usr/local/vesta/ssl/certificate.crt
#tls_privatekey = /usr/local/vesta/ssl/certificate.key tls_privatekey = /usr/local/vesta/ssl/certificate.key
daemon_smtp_ports = 25 : 465 : 587 : 2525 daemon_smtp_ports = 25 : 465 : 587 : 2525
tls_on_connect_ports = 465 tls_on_connect_ports = 465
@ -43,43 +47,38 @@ DKIM_FILE = /etc/exim4/domains/${lc:${domain:$h_from:}}/dkim.pem
DKIM_PRIVATE_KEY = ${if exists{DKIM_FILE}{DKIM_FILE}{0}} DKIM_PRIVATE_KEY = ${if exists{DKIM_FILE}{DKIM_FILE}{0}}
##########################################################################
######################################################################
# ACL CONFIGURATION #
# Specifies access control lists for incoming SMTP mail #
######################################################################
begin acl begin acl
##########################################################################
acl_check_spammers: acl_check_spammers:
accept hosts = +whitelist accept hosts = +whitelist
drop message = Your host in blacklist on this server. drop message = Your host in blacklist on this server.
log_message = Host in blacklist log_message = Host in blacklist
hosts = +spammers hosts = +spammers
deny message = rejected because $sender_host_address is in a black list at $dnslist_domain\\n$dnslist_text
dnslists = ${readfile {/etc/exim4/dnsbl.conf}{:}}
accept accept
acl_check_mail: acl_check_mail:
deny deny condition = ${if eq{$sender_helo_name}{}}
condition = ${if eq{$sender_helo_name}{}}
message = HELO required before MAIL message = HELO required before MAIL
# drop
# condition = ${if isip{$sender_helo_name}}
# message = Access denied - Invalid HELO name (See RFC2821 4.1.3)
drop message = Helo name contains a ip address (HELO was $sender_helo_name) and not is valid drop message = Helo name contains a ip address (HELO was $sender_helo_name) and not is valid
condition = ${if match{$sender_helo_name}{\N((\d{1,3}[.-]\d{1,3}[.-]\d{1,3}[.-]\d{1,3})|([0-9a-f]{8})|([0-9A-F]{8}))\N}{yes}{no}} condition = ${if match{$sender_helo_name}{\N((\d{1,3}[.-]\d{1,3}[.-]\d{1,3}[.-]\d{1,3})|([0-9a-f]{8})|([0-9A-F]{8}))\N}{yes}{no}}
condition = ${if match {${lookup dnsdb{>: defer_never,ptr=$sender_host_address}}\}{$sender_helo_name}{no}{yes}} condition = ${if match {${lookup dnsdb{>: defer_never,ptr=$sender_host_address}}\}{$sender_helo_name}{no}{yes}}
delay = 45s delay = 45s
# drop
# condition = ${if match{$sender_helo_name}{\N^\[\N}{no}{yes}} drop condition = ${if isip{$sender_helo_name}}
# condition = ${if match{$sender_helo_name}{\N\.\N}{no}{yes}}
# message = Access denied - Invalid HELO name (See RFC2821 4.1.1.1)
drop
condition = ${if isip{$sender_helo_name}}
message = Access denied - Invalid HELO name (See RFC2821 4.1.3) message = Access denied - Invalid HELO name (See RFC2821 4.1.3)
# drop
# condition = ${if match{$sender_helo_name}{\N\.$\N}}
# message = Access denied - Invalid HELO name (See RFC2821 4.1.1.1)
# drop message = "REJECTED - Bad HELO - Host impersonating [$sender_helo_name]"
# condition = ${if match{$sender_helo_name}{$primary_hostname}}
drop condition = ${if eq{[$interface_address]}{$sender_helo_name}} drop condition = ${if eq{[$interface_address]}{$sender_helo_name}}
message = $interface_address is _my_ address message = $interface_address is _my_ address
accept accept
@ -102,6 +101,10 @@ acl_check_rcpt:
accept authenticated = * accept authenticated = *
control = submission/domain= control = submission/domain=
deny message = Rejected because $sender_host_address is in a black list at $dnslist_domain\n$dnslist_text
hosts = !+whitelist
dnslists = ${readfile {/etc/exim4/dnsbl.conf}{:}}
require message = relay not permitted require message = relay not permitted
domains = +local_domains : +relay_to_domains domains = +local_domains : +relay_to_domains
@ -113,27 +116,30 @@ acl_check_rcpt:
.ifdef CLAMD .ifdef CLAMD
warn set acl_m0 = no warn set acl_m0 = no
warn condition = ${if exists {/etc/exim4/domains/$domain/antivirus}{yes}{no}} warn condition = ${if exists {/etc/exim4/domains/$domain/antivirus}{yes}{no}}
set acl_m0 = yes set acl_m0 = yes
.endif .endif
.ifdef SPAMASSASSIN .ifdef SPAMASSASSIN
warn set acl_m1 = no warn set acl_m1 = no
warn condition = ${if exists {/etc/exim4/domains/$domain/antispam}{yes}{no}} warn condition = ${if exists {/etc/exim4/domains/$domain/antispam}{yes}{no}}
set acl_m1 = yes set acl_m1 = yes
.endif .endif
accept accept
acl_check_data: acl_check_data:
.ifdef CLAMD .ifdef CLAMD
deny message = Message contains a virus ($malware_name) and has been rejected deny message = Message contains a virus ($malware_name) and has been rejected
malware = * malware = *
condition = ${if eq{$acl_m0}{yes}{yes}{no}} condition = ${if eq{$acl_m0}{yes}{yes}{no}}
.endif .endif
.ifdef SPAMASSASSIN .ifdef SPAMASSASSIN
warn warn !authenticated = *
!authenticated = *
hosts = !+relay_from_hosts hosts = !+relay_from_hosts
condition = ${if < {$message_size}{100K}} condition = ${if < {$message_size}{100K}}
condition = ${if eq{$acl_m1}{yes}{yes}{no}} condition = ${if eq{$acl_m1}{yes}{yes}{no}}
@ -142,23 +148,29 @@ acl_check_data:
add_header = X-Spam-Bar: $spam_bar add_header = X-Spam-Bar: $spam_bar
add_header = X-Spam-Report: $spam_report add_header = X-Spam-Report: $spam_report
set acl_m2 = $spam_score_int set acl_m2 = $spam_score_int
warn
condition = ${if !eq{$acl_m2}{} {yes}{no}} warn condition = ${if !eq{$acl_m2}{} {yes}{no}}
condition = ${if >{$acl_m2}{SPAM_SCORE} {yes}{no}} condition = ${if >{$acl_m2}{SPAM_SCORE} {yes}{no}}
add_header = X-Spam-Status: Yes add_header = X-Spam-Status: Yes
message = SpamAssassin detected spam (from $sender_address to $recipients). message = SpamAssassin detected spam (from $sender_address to $recipients).
.endif .endif
accept accept
acl_check_mime: acl_check_mime:
deny message = Blacklisted file extension detected deny message = Blacklisted file extension detected
condition = ${if match {${lc:$mime_filename}}{\N(\.ade|\.adp|\.bat|\.chm|\.cmd|\.com|\.cpl|\.exe|\.hta|\.ins|\.isp|\.jse|\.lib|\.lnk|\.mde|\.msc|\.msp|\.mst|\.pif|\.scr|\.sct|\.shb|\.sys|\.vb|\.vbe|\.vbs|\.vxd|\.wsc|\.wsf|\.wsh)$\N}{1}{0}} condition = ${if match {${lc:$mime_filename}}{\N(\.ade|\.adp|\.bat|\.chm|\.cmd|\.com|\.cpl|\.exe|\.hta|\.ins|\.isp|\.jse|\.lib|\.lnk|\.mde|\.msc|\.msp|\.mst|\.pif|\.scr|\.sct|\.shb|\.sys|\.vb|\.vbe|\.vbs|\.vxd|\.wsc|\.wsf|\.wsh)$\N}{1}{0}}
accept accept
##########################################################################
######################################################################
# AUTHENTICATION CONFIGURATION #
######################################################################
begin authenticators begin authenticators
##########################################################################
dovecot_plain: dovecot_plain:
driver = dovecot driver = dovecot
public_name = PLAIN public_name = PLAIN
@ -171,9 +183,14 @@ dovecot_login:
server_socket = /var/run/dovecot/auth-client server_socket = /var/run/dovecot/auth-client
server_set_id = $auth1 server_set_id = $auth1
##########################################################################
######################################################################
# ROUTERS CONFIGURATION #
# Specifies how addresses are handled #
######################################################################
begin routers begin routers
##########################################################################
#smarthost: #smarthost:
# driver = manualroute # driver = manualroute
# domains = ! +local_domains # domains = ! +local_domains
@ -253,9 +270,12 @@ terminate_alias:
condition = ${lookup{$local_part@$domain}lsearch{/etc/exim4/domains/$domain/aliases}{true}{false}} condition = ${lookup{$local_part@$domain}lsearch{/etc/exim4/domains/$domain/aliases}{true}{false}}
##########################################################################
######################################################################
# TRANSPORTS CONFIGURATION #
######################################################################
begin transports begin transports
##########################################################################
remote_smtp: remote_smtp:
driver = smtp driver = smtp
#helo_data = $sender_address_domain #helo_data = $sender_address_domain
@ -265,7 +285,6 @@ remote_smtp:
dkim_canon = relaxed dkim_canon = relaxed
dkim_strict = 0 dkim_strict = 0
procmail: procmail:
driver = pipe driver = pipe
command = "/usr/bin/procmail -d $local_part" command = "/usr/bin/procmail -d $local_part"
@ -306,7 +325,7 @@ local_spam_delivery:
delivery_date_add delivery_date_add
envelope_to_add envelope_to_add
return_path_add return_path_add
directory = "${extract{5}{:}{${lookup{$local_part}lsearch{/etc/exim4/domains/$domain/passwd}}}}/mail/$domain/$local_part/.spam" directory = "${extract{5}{:}{${lookup{$local_part}lsearch{/etc/exim4/domains/$domain/passwd}}}}/mail/$domain/$local_part/.Spam"
quota = ${extract{6}{:}{${lookup{$local_part}lsearch{/etc/exim4/domains/$domain/passwd}}}}M quota = ${extract{6}{:}{${lookup{$local_part}lsearch{/etc/exim4/domains/$domain/passwd}}}}M
quota_directory = "${extract{5}{:}{${lookup{$local_part}lsearch{/etc/exim4/domains/$domain/passwd}}}}/mail/$domain/$local_part" quota_directory = "${extract{5}{:}{${lookup{$local_part}lsearch{/etc/exim4/domains/$domain/passwd}}}}/mail/$domain/$local_part"
quota_warn_threshold = 75% quota_warn_threshold = 75%
@ -335,8 +354,24 @@ devnull:
driver = appendfile driver = appendfile
file = /dev/null file = /dev/null
##########################################################################
######################################################################
# RETRY CONFIGURATION #
######################################################################
begin retry begin retry
# Address or Domain Error Retries
# ----------------- ----- -------
* * F,2h,15m; G,16h,1h,1.5; F,4d,6h * * F,2h,15m; G,16h,1h,1.5; F,4d,6h
##########################################################################
######################################################################
# REWRITE CONFIGURATION #
######################################################################
begin rewrite begin rewrite
######################################################################

View file

@ -10,12 +10,13 @@ export DEBIAN_FRONTEND=noninteractive
RHOST='apt.vestacp.com' RHOST='apt.vestacp.com'
CHOST='c.vestacp.com' CHOST='c.vestacp.com'
VERSION='0.9.8/debian' VERSION='0.9.8/debian'
software="nginx apache2 apache2-utils apache2.2-common apache2-suexec-custom software="nginx apache2 apache2-utils apache2.2-common bsdutils
libapache2-mod-ruid2 libapache2-mod-rpaf libapache2-mod-fcgid bind9 idn apache2-suexec-custom libapache2-mod-ruid2 libapache2-mod-rpaf
mysql-server mysql-common mysql-client php5-common php5-cgi php5-mysql libapache2-mod-fcgid bind9 idn mysql-server mysql-common
php5-curl libapache2-mod-php5 vsftpd mc exim4 exim4-daemon-heavy mysql-client php5-common php5-cgi php5-mysql php5-curl
clamav-daemon flex dovecot-imapd dovecot-pop3d phpMyAdmin awstats libapache2-mod-php5 vsftpd mc exim4 exim4-daemon-heavy clamav-daemon
webalizer jwhois rssh git spamassassin roundcube roundcube-mysql flex dovecot-imapd dovecot-pop3d phpMyAdmin awstats webalizer
jwhois rssh git spamassassin roundcube roundcube-mysql
roundcube-plugins sudo bc ftp lsof ntpdate rrdtool quota e2fslibs roundcube-plugins sudo bc ftp lsof ntpdate rrdtool quota e2fslibs
dnsutils vesta vesta-nginx vesta-php" dnsutils vesta vesta-nginx vesta-php"
@ -24,7 +25,7 @@ help() {
-e, --email Set email address -e, --email Set email address
-f, --force Force installation -f, --force Force installation
-h, --help Print this help and exit -h, --help Print this help and exit
-n, --noupdate Do not run yum update command -n, --noupdate Do not run apt-get upgrade command
-m, --mysql-password Set MySQL password instead of generating it -m, --mysql-password Set MySQL password instead of generating it
-p, --password Set admin password instead of generating it -p, --password Set admin password instead of generating it
-s, --hostname Set server hostname -s, --hostname Set server hostname
@ -72,7 +73,7 @@ while getopts "dhfnqe:m:p:s:" Option; do
h) help ;; # Help h) help ;; # Help
e) email=$OPTARG ;; # Set email e) email=$OPTARG ;; # Set email
f) force='yes' ;; # Force install f) force='yes' ;; # Force install
n) noupdate='yes' ;; # Disable yum update n) noupdate='yes' ;; # Disable apt-get upgrade
m) mpass=$OPTARG ;; # MySQL pasword m) mpass=$OPTARG ;; # MySQL pasword
p) vpass=$OPTARG ;; # Admin password p) vpass=$OPTARG ;; # Admin password
s) servername=$OPTARG ;; # Server hostname s) servername=$OPTARG ;; # Server hostname
@ -89,7 +90,7 @@ fi
# Check supported version # Check supported version
if [ -e '/etc/redhat-release' ] || [ -e '/etc/lsb-release' ]; then if [ -e '/etc/redhat-release' ] || [ -e '/etc/lsb-release' ]; then
echo 'Error: sorry, this installer can work only on Debian 7' echo 'Error: sorry, this installer works only on Debian 7'
exit 1 exit 1
fi fi
@ -233,9 +234,6 @@ if [ -z $email ]; then
if [ -z "$servername" ]; then if [ -z "$servername" ]; then
read -p "Please enter hostname [$(hostname)]: " servername read -p "Please enter hostname [$(hostname)]: " servername
fi fi
if [ -z "$servername" ]; then
servername=$(hostname)
fi
fi fi
# Validate email # Validate email
@ -464,6 +462,9 @@ if [ "$srv_type" = 'micro' ] || [ "$srv_type" = 'small' ]; then
fi fi
# Set server hostname # Set server hostname
if [ -z "$servername" ]; then
servername=$(hostname)
fi
/usr/local/vesta/bin/v-change-sys-hostname $servername 2>/dev/null /usr/local/vesta/bin/v-change-sys-hostname $servername 2>/dev/null
# Templates # Templates
@ -499,7 +500,7 @@ chown root:mail /usr/local/vesta/ssl/*
chmod 660 /usr/local/vesta/ssl/* chmod 660 /usr/local/vesta/ssl/*
rm /tmp/vst.pem rm /tmp/vst.pem
# Enable password auth # Enable SSH password auth
sed -i "s/rdAuthentication no/rdAuthentication yes/g" /etc/ssh/sshd_config sed -i "s/rdAuthentication no/rdAuthentication yes/g" /etc/ssh/sshd_config
service ssh restart service ssh restart
@ -554,9 +555,9 @@ wget $CHOST/$VERSION/apache2-status.conf \
wget $CHOST/$VERSION/apache2.log -O /etc/logrotate.d/apache2 wget $CHOST/$VERSION/apache2.log -O /etc/logrotate.d/apache2
rm -f /etc/apache2/conf.d/vesta.conf rm -f /etc/apache2/conf.d/vesta.conf
echo > /etc/apache2/conf.d/vesta.conf echo > /etc/apache2/conf.d/vesta.conf
echo "# Powever by vesta" > /etc/apache2/sites-available/default echo "# Powered by vesta" > /etc/apache2/sites-available/default
echo "# Powever by vestas" > /etc/apache2/sites-available/default-ssl echo "# Powered by vesta" > /etc/apache2/sites-available/default-ssl
echo "# Powever by vestas" > /etc/apache2/ports.conf echo "# Powered by vesta" > /etc/apache2/ports.conf
touch /var/log/apache2/access.log touch /var/log/apache2/access.log
touch /var/log/apache2/error.log touch /var/log/apache2/error.log
mkdir -p /var/log/apache2/domains mkdir -p /var/log/apache2/domains
@ -627,9 +628,9 @@ fi
# Exim # Exim
wget $CHOST/$VERSION/exim4.conf.template -O /etc/exim4/exim4.conf.template wget $CHOST/$VERSION/exim4.conf.template -O /etc/exim4/exim4.conf.template
if [ "$srv_type" = 'micro' ] || [ "$srv_type" = 'small' ]; then if [ "$srv_type" != 'micro' ] && [ "$srv_type" != 'small' ]; then
sed -i "s/^SPAMASSASSIN/#SPAMASSASSIN/g" /etc/exim4/exim4.conf.template sed -i "s/#SPAM/SPAM/g" /etc/exim4/exim4.conf.template
sed -i "s/^CLAMD/#CLAMD/g" /etc/exim4/exim4.conf.template sed -i "s/#CLAMD/CLAMD/g" /etc/exim4/exim4.conf.template
fi fi
wget $CHOST/$VERSION/dnsbl.conf -O /etc/exim4/dnsbl.conf wget $CHOST/$VERSION/dnsbl.conf -O /etc/exim4/dnsbl.conf
wget $CHOST/$VERSION/spam-blocks.conf -O /etc/exim4/spam-blocks.conf wget $CHOST/$VERSION/spam-blocks.conf -O /etc/exim4/spam-blocks.conf
@ -665,12 +666,6 @@ tar -xzf dovecot-conf.d.tar.gz
rm -f dovecot-conf.d.tar.gz rm -f dovecot-conf.d.tar.gz
chown -R root:root /etc/dovecot chown -R root:root /etc/dovecot
gpasswd -a dovecot mail gpasswd -a dovecot mail
if [ "$codename" = 'precise' ]; then
dovecot_ssl_conf="/etc/dovecot/conf.d/10-ssl.conf"
echo "ssl = yes" > $dovecot_ssl_conf
echo "ssl_cert = </etc/ssl/certs/dovecot.pem" >> $dovecot_ssl_conf
echo "ssl_key = </etc/ssl/private/dovecot.pem" >> $dovecot_ssl_conf
fi
update-rc.d dovecot defaults update-rc.d dovecot defaults
service dovecot stop > /dev/null 2>&1 service dovecot stop > /dev/null 2>&1
service dovecot start service dovecot start
@ -715,6 +710,7 @@ wget $CHOST/$VERSION/apache2-pma.conf -O /etc/phpmyadmin/apache.conf
wget $CHOST/$VERSION/pma.conf -O /etc/phpmyadmin/config.inc.php wget $CHOST/$VERSION/pma.conf -O /etc/phpmyadmin/config.inc.php
ln -s /etc/phpmyadmin/apache.conf /etc/apache2/conf.d/phpmyadmin.conf ln -s /etc/phpmyadmin/apache.conf /etc/apache2/conf.d/phpmyadmin.conf
mv -f /etc/phpmyadmin/config-db.php /etc/phpmyadmin/config-db.php_ mv -f /etc/phpmyadmin/config-db.php /etc/phpmyadmin/config-db.php_
chmod 777 /var/lib/phpmyadmin/tmp
# Roundcube configuration # Roundcube configuration
wget $CHOST/$VERSION/apache2-webmail.conf -O /etc/roundcube/apache.conf wget $CHOST/$VERSION/apache2-webmail.conf -O /etc/roundcube/apache.conf
@ -733,7 +729,7 @@ mysql roundcube < /usr/share/dbconfig-common/data/roundcube/install/mysql
mkdir -p /var/log/roundcube/error mkdir -p /var/log/roundcube/error
chmod -R 777 /var/log/roundcube chmod -R 777 /var/log/roundcube
# Adding admin user # Deleting old admin user account if exists
if [ ! -z "$(grep ^admin: /etc/passwd)" ] && [ "$force" = 'yes' ]; then if [ ! -z "$(grep ^admin: /etc/passwd)" ] && [ "$force" = 'yes' ]; then
chattr -i /home/admin/conf > /dev/null 2>&1 chattr -i /home/admin/conf > /dev/null 2>&1
userdel -f admin userdel -f admin
@ -750,7 +746,7 @@ if [ -z "$vpass" ]; then
vpass=$(gen_pass) vpass=$(gen_pass)
fi fi
# Adding vesta account # Adding admin account
$VESTA/bin/v-add-user admin $vpass $email default System Administrator $VESTA/bin/v-add-user admin $vpass $email default System Administrator
if [ $? -ne 0 ]; then if [ $? -ne 0 ]; then
echo "Error: can't create admin user" echo "Error: can't create admin user"
@ -789,7 +785,7 @@ $VESTA/bin/v-add-dns-domain admin default.domain $vst_ip
# Add default mail domain # Add default mail domain
$VESTA/bin/v-add-mail-domain admin default.domain $VESTA/bin/v-add-mail-domain admin default.domain
# Configuring crond # Configuring cron jobs
command='sudo /usr/local/vesta/bin/v-update-sys-queue disk' command='sudo /usr/local/vesta/bin/v-update-sys-queue disk'
$VESTA/bin/v-add-cron-job 'admin' '15' '02' '*' '*' '*' "$command" $VESTA/bin/v-add-cron-job 'admin' '15' '02' '*' '*' '*' "$command"
command='sudo /usr/local/vesta/bin/v-update-sys-queue traffic' command='sudo /usr/local/vesta/bin/v-update-sys-queue traffic'
@ -805,7 +801,7 @@ $VESTA/bin/v-add-cron-job 'admin' '20' '00' '*' '*' '*' "$command"
command='sudo /usr/local/vesta/bin/v-update-sys-rrd' command='sudo /usr/local/vesta/bin/v-update-sys-rrd'
$VESTA/bin/v-add-cron-job 'admin' '*/5' '*' '*' '*' '*' "$command" $VESTA/bin/v-add-cron-job 'admin' '*/5' '*' '*' '*' '*' "$command"
# Build inititall rrd images # Building inititall rrd images
$VESTA/bin/v-update-sys-rrd $VESTA/bin/v-update-sys-rrd
# Enable file system quota # Enable file system quota

View file

@ -233,9 +233,6 @@ if [ -z $email ]; then
if [ -z "$servername" ]; then if [ -z "$servername" ]; then
read -p "Please enter hostname [$(hostname)]: " servername read -p "Please enter hostname [$(hostname)]: " servername
fi fi
if [ -z "$servername" ]; then
servername=$(hostname)
fi
fi fi
# Validate email # Validate email
@ -524,6 +521,9 @@ if [ "$srv_type" = 'micro' ] || [ "$srv_type" = 'small' ]; then
fi fi
# Set server hostname # Set server hostname
if [ -z "$servername" ]; then
servername=$(hostname)
fi
/usr/local/vesta/bin/v-change-sys-hostname $servername 2>/dev/null /usr/local/vesta/bin/v-change-sys-hostname $servername 2>/dev/null
# Templates # Templates
@ -683,9 +683,9 @@ fi
# Exim # Exim
wget $CHOST/$VERSION/exim.conf -O /etc/exim/exim.conf wget $CHOST/$VERSION/exim.conf -O /etc/exim/exim.conf
if [ "$srv_type" = 'micro' ] || [ "$srv_type" = 'small' ]; then if [ "$srv_type" != 'micro' ] && [ "$srv_type" != 'small' ]; then
sed -i "s/^SPAMASSASSIN/#SPAMASSASSIN/g" /etc/exim/exim.conf sed -i "s/#SPAM/SPAM/g" /etc/exim/exim.conf
sed -i "s/^CLAMD/#CLAMD/g" /etc/exim/exim.conf sed -i "s/#CLAMD/CLAMD/g" /etc/exim/exim.conf
fi fi
wget $CHOST/$VERSION/dnsbl.conf -O /etc/exim/dnsbl.conf wget $CHOST/$VERSION/dnsbl.conf -O /etc/exim/dnsbl.conf
wget $CHOST/$VERSION/spam-blocks.conf -O /etc/exim/spam-blocks.conf wget $CHOST/$VERSION/spam-blocks.conf -O /etc/exim/spam-blocks.conf

View file

@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
# Vesta Ubuntu installer v.01 # Vesta Ubuntu installer v.04
#----------------------------------------------------------# #----------------------------------------------------------#
# Variables&Functions # # Variables&Functions #
@ -10,21 +10,25 @@ export DEBIAN_FRONTEND=noninteractive
RHOST='apt.vestacp.com' RHOST='apt.vestacp.com'
CHOST='c.vestacp.com' CHOST='c.vestacp.com'
VERSION='0.9.8/ubuntu' VERSION='0.9.8/ubuntu'
software="nginx apache2 apache2-utils apache2-suexec-custom software="nginx apache2 apache2-utils apache2-suexec-custom bsdutils
libapache2-mod-ruid2 libapache2-mod-rpaf libapache2-mod-fcgid bind9 idn libapache2-mod-ruid2 libapache2-mod-rpaf libapache2-mod-fcgid bind9 idn
mysql-server mysql-common mysql-client php5-common php5-cgi php5-mysql mysql-server mysql-common mysql-client php5-common php5-cgi php5-mysql
php5-curl libapache2-mod-php5 vsftpd mc exim4 exim4-daemon-heavy php5-curl libapache2-mod-php5 vsftpd mc exim4 exim4-daemon-heavy
clamav-daemon flex dovecot-imapd dovecot-pop3d phpMyAdmin awstats clamav-daemon flex dovecot-imapd dovecot-pop3d phpMyAdmin awstats e2fslibs
webalizer jwhois rssh git spamassassin roundcube roundcube-mysql webalizer jwhois rssh git spamassassin roundcube roundcube-mysql quota
roundcube-plugins apparmor-utils sudo bc ftp lsof ntpdate rrdtool roundcube-plugins apparmor-utils sudo bc ftp lsof ntpdate rrdtool
dnsutils vesta vesta-nginx vesta-php" dnsutils vesta vesta-nginx vesta-php"
help() { help() {
echo "usage: $0 [OPTIONS] echo "usage: $0 [OPTIONS]
-e, --email Define email address -e, --email Set email address
-h, --help Print this help and exit
-f, --force Force installation -f, --force Force installation
-n, --noupdate Do not run apt-get upgrade command" -h, --help Print this help and exit
-n, --noupdate Do not run apt-get upgrade command
-m, --mysql-password Set MySQL password instead of generating it
-p, --password Set admin password instead of generating it
-s, --hostname Set server hostname
-q, --quota Enable File System Quota"
exit 1 exit 1
} }
@ -48,10 +52,14 @@ gen_pass() {
for arg; do for arg; do
delim="" delim=""
case "$arg" in case "$arg" in
--help) args="${args}-h " ;; --email) args="${args}-e " ;;
--force) args="${args}-f " ;; --force) args="${args}-f " ;;
--email) args="${args}-e " ;; --help) args="${args}-h " ;;
--noupdate) args="${args}-n " ;; --noupdate) args="${args}-n " ;;
--mysql-password) args="${args}-m " ;;
--password) args="${args}-p " ;;
--hostname) args="${args}-s " ;;
--quota) args="${args}-q " ;;
*) [[ "${arg:0:1}" == "-" ]] || delim="\"" *) [[ "${arg:0:1}" == "-" ]] || delim="\""
args="${args}${delim}${arg}${delim} ";; args="${args}${delim}${arg}${delim} ";;
esac esac
@ -59,12 +67,16 @@ done
eval set -- "$args" eval set -- "$args"
# Getopt # Getopt
while getopts "dhfne:" Option; do while getopts "dhfnqe:m:p:s:" Option; do
case $Option in case $Option in
h) help ;; # Help h) help ;; # Help
e) email=$OPTARG ;; # Set email e) email=$OPTARG ;; # Set email
f) force='yes' ;; # Force apt-get install f) force='yes' ;; # Force install
n) noupdate='yes' ;; # Disable apt-get upgrade n) noupdate='yes' ;; # Disable apt-get upgrade
m) mpass=$OPTARG ;; # MySQL pasword
p) vpass=$OPTARG ;; # Admin password
s) servername=$OPTARG ;; # Server hostname
q) quota='yes' ;; # Enable quota
*) help ;; # Default *) help ;; # Default
esac esac
done done
@ -77,7 +89,7 @@ fi
# Check supported version # Check supported version
if [ -e '/etc/redhat-release' ]; then if [ -e '/etc/redhat-release' ]; then
echo 'Error: sorry, this installer can work only on Debian or Ubuntu' echo 'Error: sorry, this installer works only on Ubuntu'
exit 1 exit 1
fi fi
@ -89,9 +101,9 @@ else
fi fi
os=$(head -n 1 /etc/issue | cut -f 1 -d ' ') os=$(head -n 1 /etc/issue | cut -f 1 -d ' ')
release=$(head -n 1 /etc/issue | cut -f 2 -d ' ' ) release=$(head -n 1 /etc/issue | cut -f 2 -d ' ' )
codename=$(lsb_release -cs | grep "[precise|raring|saucy]") codename=$(lsb_release -cs | egrep "precise|quantal|raring|saucy|trusty")
if [ -z "$codename" ]; then if [ -z "$codename" ]; then
echo 'Error: only Ubuntu 12.04, 13.04 and 13.10 is supported' echo "Error: Ubuntu $(lsb_release -r|awk '{print $2}') is not supported"
exit 1 exit 1
fi fi
@ -214,6 +226,11 @@ if [ -z $email ]; then
# Check email # Check email
read -p 'Please enter valid email address: ' email read -p 'Please enter valid email address: ' email
# Define server hostname
if [ -z "$servername" ]; then
read -p "Please enter hostname [$(hostname)]: " servername
fi
fi fi
# Validate email # Validate email
@ -252,9 +269,6 @@ apt=/etc/apt/sources.list.d
echo "deb http://nginx.org/packages/ubuntu/ $codename nginx" > $apt/nginx.list echo "deb http://nginx.org/packages/ubuntu/ $codename nginx" > $apt/nginx.list
wget http://nginx.org/keys/nginx_signing.key -O /tmp/nginx_signing.key wget http://nginx.org/keys/nginx_signing.key -O /tmp/nginx_signing.key
apt-key add /tmp/nginx_signing.key apt-key add /tmp/nginx_signing.key
if [ $codename = 'trusty' ]; then
sed -i "s/trusty/saucy/g" $apt/nginx.list
fi
# Install vesta repo # Install vesta repo
echo "deb http://$RHOST/$codename/ $codename vesta" > $apt/vesta.list echo "deb http://$RHOST/$codename/ $codename vesta" > $apt/vesta.list
@ -400,7 +414,99 @@ rm -f /usr/sbin/policy-rc.d
# Set writable permission on tmp directory # Set writable permission on tmp directory
chmod 777 /tmp chmod 777 /tmp
# Enable password auth # Vesta configuration
echo "export VESTA='/usr/local/vesta'" > /etc/profile.d/vesta.sh
chmod 755 /etc/profile.d/vesta.sh
source /etc/profile.d/vesta.sh
echo 'PATH=$PATH:/usr/local/vesta/bin' >> /root/.bash_profile
echo 'export PATH' >> /root/.bash_profile
source /root/.bash_profile
wget $CHOST/$VERSION/vesta.log -O /etc/logrotate.d/vesta
# Directory tree
mkdir -p $VESTA/conf
mkdir -p $VESTA/log
mkdir -p $VESTA/ssl
mkdir -p $VESTA/data
mkdir -p $VESTA/data/ips
mkdir -p $VESTA/data/queue
mkdir -p $VESTA/data/users
touch $VESTA/data/queue/backup.pipe
touch $VESTA/data/queue/disk.pipe
touch $VESTA/data/queue/webstats.pipe
touch $VESTA/data/queue/restart.pipe
touch $VESTA/data/queue/traffic.pipe
chmod 750 $VESTA/conf
chmod 750 $VESTA/data/users
chmod 750 $VESTA/data/ips
chmod -R 750 $VESTA/data/queue
ln -s /usr/local/vesta/log /var/log/vesta
touch /var/log/vesta/system.log
touch /var/log/vesta/nginx-error.log
touch /var/log/vesta/auth.log
chmod 660 /var/log/vesta/*
adduser backup > /dev/null 2>&1
mkdir -p /home/backup
chown backup:backup /home/backup
ln -s /home/backup /backup
chmod a+x /backup
# vesta.conf
wget $CHOST/$VERSION/vesta.conf -O $VESTA/conf/vesta.conf
if [ "$srv_type" = 'micro' ] || [ "$srv_type" = 'small' ]; then
sed -i "s/clamav-daemon//g" $VESTA/conf/vesta.conf
sed -i "s/spamassassin//g" $VESTA/conf/vesta.conf
fi
# Set server hostname
if [ -z "$servername" ]; then
servername=$(hostname)
fi
/usr/local/vesta/bin/v-change-sys-hostname $servername 2>/dev/null
# Templates
cd /usr/local/vesta/data
wget $CHOST/$VERSION/packages.tar.gz -O packages.tar.gz
tar -xzf packages.tar.gz
rm -f packages.tar.gz
cd /usr/local/vesta/data
wget $CHOST/$VERSION/templates.tar.gz -O templates.tar.gz
tar -xzf templates.tar.gz
rm -f templates.tar.gz
if [ "$codename" = 'saucy' ] || [ "$codename" = 'trusty' ]; then
sed -i "s/Include /IncludeOptional /g" \
$VESTA/data/templates/web/apache2/*tpl
fi
chmod -R 755 /usr/local/vesta/data/templates
cp templates/web/skel/public_html/index.html /var/www/
sed -i 's/%domain%/It worked!/g' /var/www/index.html
if [ "$srv_type" = 'micro' ]; then
rm -f /usr/local/vesta/data/templates/web/apache2/phpfcgid.*
fi
# Removing CGI templates
if [ "$codename" = 'trusty' ]; then
rm -f /usr/local/vesta/data/templates/web/apache2/phpcgi.*
fi
# Generating SSL certificate
$VESTA/bin/v-generate-ssl-cert $(hostname) $email 'US' 'California' \
'San Francisco' 'Vesta Control Panel' 'IT' > /tmp/vst.pem
# Parsing merged certificate file
crt_end=$(grep -n "END CERTIFICATE-" /tmp/vst.pem |cut -f 1 -d:)
key_start=$(grep -n "BEGIN RSA" /tmp/vst.pem |cut -f 1 -d:)
key_end=$(grep -n "END RSA" /tmp/vst.pem |cut -f 1 -d:)
# Adding SSL certificate
cd /usr/local/vesta/ssl
sed -n "1,${crt_end}p" /tmp/vst.pem > certificate.crt
sed -n "$key_start,${key_end}p" /tmp/vst.pem > certificate.key
chown root:mail /usr/local/vesta/ssl/*
chmod 660 /usr/local/vesta/ssl/*
rm /tmp/vst.pem
# Enable SSH password auth
sed -i "s/rdAuthentication no/rdAuthentication yes/g" /etc/ssh/sshd_config sed -i "s/rdAuthentication no/rdAuthentication yes/g" /etc/ssh/sshd_config
service ssh restart service ssh restart
@ -456,9 +562,9 @@ fi
wget $CHOST/$VERSION/apache2-status.conf \ wget $CHOST/$VERSION/apache2-status.conf \
-O /etc/apache2/mods-enabled/status.conf -O /etc/apache2/mods-enabled/status.conf
wget $CHOST/$VERSION/apache2.log -O /etc/logrotate.d/apache2 wget $CHOST/$VERSION/apache2.log -O /etc/logrotate.d/apache2
echo "# Powever by vesta" > /etc/apache2/sites-available/default echo "# Powered by vesta" > /etc/apache2/sites-available/default
echo "# Powever by vesta" > /etc/apache2/sites-available/default-ssl echo "# Powered by vesta" > /etc/apache2/sites-available/default-ssl
echo "# Powever by vesta" > /etc/apache2/ports.conf echo "# Powered by vesta" > /etc/apache2/ports.conf
mkdir -p /etc/apache2/conf.d mkdir -p /etc/apache2/conf.d
rm -f /etc/apache2/conf.d/vesta.conf rm -f /etc/apache2/conf.d/vesta.conf
echo > /etc/apache2/conf.d/vesta.conf echo > /etc/apache2/conf.d/vesta.conf
@ -491,11 +597,18 @@ if [ "$?" -ne 0 ]; then
exit 1 exit 1
fi fi
# Generating MySQL password if it wasn't set
if [ -z "$mpass" ]; then
mpass=$(gen_pass)
fi
# MySQL configuration # MySQL configuration
mpass=$(gen_pass) mpass=$(gen_pass)
wget $CHOST/$VERSION/my.cnf -O /etc/mysql/my.cnf wget $CHOST/$VERSION/my.cnf -O /etc/mysql/my.cnf
mysql_install_db mysql_install_db
update-rc.d mysql defaults if [ "$release" != '14.04' ]; then
update-rc.d mysql defaults
fi
service mysql stop > /dev/null 2>&1 service mysql stop > /dev/null 2>&1
service mysql start service mysql start
if [ "$?" -ne 0 ]; then if [ "$?" -ne 0 ]; then
@ -506,7 +619,7 @@ mysqladmin -u root password $mpass
echo -e "[client]\npassword='$mpass'\n" > /root/.my.cnf echo -e "[client]\npassword='$mpass'\n" > /root/.my.cnf
chmod 600 /root/.my.cnf chmod 600 /root/.my.cnf
mysql -e "DELETE FROM mysql.user WHERE User=''" mysql -e "DELETE FROM mysql.user WHERE User=''"
mysql -e "DROP DATABASE test" mysql -e "DROP DATABASE test" > /dev/null 2>&1
mysql -e "DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%'" mysql -e "DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%'"
mysql -e "DELETE FROM mysql.user WHERE user='' or password='';" mysql -e "DELETE FROM mysql.user WHERE user='' or password='';"
mysql -e "FLUSH PRIVILEGES" mysql -e "FLUSH PRIVILEGES"
@ -526,9 +639,9 @@ fi
# Exim # Exim
wget $CHOST/$VERSION/exim4.conf.template -O /etc/exim4/exim4.conf.template wget $CHOST/$VERSION/exim4.conf.template -O /etc/exim4/exim4.conf.template
if [ "$srv_type" = 'micro' ] || [ "$srv_type" = 'small' ]; then if [ "$srv_type" != 'micro' ] && [ "$srv_type" != 'small' ]; then
sed -i "s/^SPAMASSASSIN/#SPAMASSASSIN/g" /etc/exim4/exim4.conf.template sed -i "s/#SPAM/SPAM/g" /etc/exim4/exim4.conf.template
sed -i "s/^CLAMD/#CLAMD/g" /etc/exim4/exim4.conf.template sed -i "s/#CLAMD/CLAMD/g" /etc/exim4/exim4.conf.template
fi fi
wget $CHOST/$VERSION/dnsbl.conf -O /etc/exim4/dnsbl.conf wget $CHOST/$VERSION/dnsbl.conf -O /etc/exim4/dnsbl.conf
wget $CHOST/$VERSION/spam-blocks.conf -O /etc/exim4/spam-blocks.conf wget $CHOST/$VERSION/spam-blocks.conf -O /etc/exim4/spam-blocks.conf
@ -564,12 +677,6 @@ tar -xzf dovecot-conf.d.tar.gz
rm -f dovecot-conf.d.tar.gz rm -f dovecot-conf.d.tar.gz
chown -R root:root /etc/dovecot chown -R root:root /etc/dovecot
gpasswd -a dovecot mail gpasswd -a dovecot mail
if [ "$codename" = 'precise' ]; then
dovecot_ssl_conf="/etc/dovecot/conf.d/10-ssl.conf"
echo "ssl = yes" > $dovecot_ssl_conf
echo "ssl_cert = </etc/ssl/certs/dovecot.pem" >> $dovecot_ssl_conf
echo "ssl_key = </etc/ssl/private/dovecot.pem" >> $dovecot_ssl_conf
fi
update-rc.d dovecot defaults update-rc.d dovecot defaults
service dovecot stop > /dev/null 2>&1 service dovecot stop > /dev/null 2>&1
service dovecot start service dovecot start
@ -630,6 +737,7 @@ wget $CHOST/$VERSION/roundcube-driver.php -O \
wget $CHOST/$VERSION/roundcube-pw.conf -O \ wget $CHOST/$VERSION/roundcube-pw.conf -O \
/etc/roundcube/plugins/password/config.inc.php /etc/roundcube/plugins/password/config.inc.php
r="$(gen_pass)" r="$(gen_pass)"
mysql -e "DROP DATABASE roundcube" > /dev/null 2>&1
mysql -e "CREATE DATABASE roundcube" mysql -e "CREATE DATABASE roundcube"
mysql -e "GRANT ALL ON roundcube.* TO roundcube@localhost IDENTIFIED BY '$r'" mysql -e "GRANT ALL ON roundcube.* TO roundcube@localhost IDENTIFIED BY '$r'"
sed -i "s/%password%/$r/g" /etc/roundcube/db.inc.php sed -i "s/%password%/$r/g" /etc/roundcube/db.inc.php
@ -643,76 +751,7 @@ fi
mkdir -p /var/log/roundcube/error mkdir -p /var/log/roundcube/error
chmod -R 777 /var/log/roundcube chmod -R 777 /var/log/roundcube
# Vesta configuration # Deleting old admin user account if exists
echo "export VESTA='/usr/local/vesta'" > /etc/profile.d/vesta.sh
chmod 755 /etc/profile.d/vesta.sh
source /etc/profile.d/vesta.sh
echo 'PATH=$PATH:/usr/local/vesta/bin' >> /root/.bash_profile
echo 'export PATH' >> /root/.bash_profile
source /root/.bash_profile
wget $CHOST/$VERSION/vesta.log -O /etc/logrotate.d/vesta
# Directory tree
mkdir -p $VESTA/conf
mkdir -p $VESTA/log
mkdir -p $VESTA/ssl
mkdir -p $VESTA/data
mkdir -p $VESTA/data/ips
mkdir -p $VESTA/data/queue
mkdir -p $VESTA/data/users
touch $VESTA/data/queue/backup.pipe
touch $VESTA/data/queue/disk.pipe
touch $VESTA/data/queue/webstats.pipe
touch $VESTA/data/queue/restart.pipe
touch $VESTA/data/queue/traffic.pipe
chmod 750 $VESTA/conf
chmod 750 $VESTA/data/users
chmod 750 $VESTA/data/ips
chmod -R 750 $VESTA/data/queue
ln -s /usr/local/vesta/log /var/log/vesta
touch /var/log/vesta/system.log
touch /var/log/vesta/nginx-error.log
touch /var/log/vesta/auth.log
chmod 660 /var/log/vesta/*
adduser backup > /dev/null 2>&1
mkdir -p /home/backup
chown backup:backup /home/backup
ln -s /home/backup /backup
chmod a+x /backup
# vesta.conf
wget $CHOST/$VERSION/vesta.conf -O $VESTA/conf/vesta.conf
if [ "$srv_type" = 'micro' ] || [ "$srv_type" = 'small' ]; then
sed -i "s/clamav-daemon//g" $VESTA/conf/vesta.conf
sed -i "s/spamassassin//g" $VESTA/conf/vesta.conf
fi
# Templates
cd /usr/local/vesta/data
wget $CHOST/$VERSION/packages.tar.gz -O packages.tar.gz
tar -xzf packages.tar.gz
rm -f packages.tar.gz
cd /usr/local/vesta/data
wget $CHOST/$VERSION/templates.tar.gz -O templates.tar.gz
tar -xzf templates.tar.gz
rm -f templates.tar.gz
if [ "$codename" = 'saucy' ] || [ "$codename" = 'trusty' ]; then
sed -i "s/Include /IncludeOptional /g" \
$VESTA/data/templates/web/apache2/*tpl
fi
chmod -R 755 /usr/local/vesta/data/templates
cp templates/web/skel/public_html/index.html /var/www/
sed -i 's/%domain%/It worked!/g' /var/www/index.html
if [ "$srv_type" = 'micro' ]; then
rm -f /usr/local/vesta/data/templates/web/apache2/phpfcgid.*
fi
# Default SSL keys
cd /usr/local/vesta/ssl
wget $CHOST/$VERSION/certificate.crt -O certificate.crt
wget $CHOST/$VERSION/certificate.key -O certificate.key
# Adding admin user
if [ ! -z "$(grep ^admin: /etc/passwd)" ] && [ "$force" = 'yes' ]; then if [ ! -z "$(grep ^admin: /etc/passwd)" ] && [ "$force" = 'yes' ]; then
chattr -i /home/admin/conf > /dev/null 2>&1 chattr -i /home/admin/conf > /dev/null 2>&1
userdel -f admin userdel -f admin
@ -723,7 +762,13 @@ fi
if [ ! -z "$(grep ^admin: /etc/group)" ]; then if [ ! -z "$(grep ^admin: /etc/group)" ]; then
groupdel admin > /dev/null 2>&1 groupdel admin > /dev/null 2>&1
fi fi
vpass=$(gen_pass)
# Generating admin password if it wasn't set
if [ -z "$vpass" ]; then
vpass=$(gen_pass)
fi
# Adding admin account
$VESTA/bin/v-add-user admin $vpass $email default System Administrator $VESTA/bin/v-add-user admin $vpass $email default System Administrator
if [ $? -ne 0 ]; then if [ $? -ne 0 ]; then
echo "Error: can't create admin user" echo "Error: can't create admin user"
@ -762,7 +807,7 @@ $VESTA/bin/v-add-dns-domain admin default.domain $vst_ip
# Add default mail domain # Add default mail domain
$VESTA/bin/v-add-mail-domain admin default.domain $VESTA/bin/v-add-mail-domain admin default.domain
# Configuring crond # Configuring cron jobs
command='sudo /usr/local/vesta/bin/v-update-sys-queue disk' command='sudo /usr/local/vesta/bin/v-update-sys-queue disk'
$VESTA/bin/v-add-cron-job 'admin' '15' '02' '*' '*' '*' "$command" $VESTA/bin/v-add-cron-job 'admin' '15' '02' '*' '*' '*' "$command"
command='sudo /usr/local/vesta/bin/v-update-sys-queue traffic' command='sudo /usr/local/vesta/bin/v-update-sys-queue traffic'
@ -778,9 +823,14 @@ $VESTA/bin/v-add-cron-job 'admin' '20' '00' '*' '*' '*' "$command"
command='sudo /usr/local/vesta/bin/v-update-sys-rrd' command='sudo /usr/local/vesta/bin/v-update-sys-rrd'
$VESTA/bin/v-add-cron-job 'admin' '*/5' '*' '*' '*' '*' "$command" $VESTA/bin/v-add-cron-job 'admin' '*/5' '*' '*' '*' '*' "$command"
# Build inititall rrd images # Building inititall rrd images
$VESTA/bin/v-update-sys-rrd $VESTA/bin/v-update-sys-rrd
# Enable file system quota
if [ "$quota" = 'yes' ]; then
$VESTA/bin/v-add-sys-quota
fi
# Start system service # Start system service
update-rc.d vesta defaults update-rc.d vesta defaults
service vesta stop > /dev/null 2>&1 service vesta stop > /dev/null 2>&1

View file

@ -1,7 +1,7 @@
Source: vesta Source: vesta
Package: vesta Package: vesta
Priority: optional Priority: optional
Version: 0.9.8-9 Version: 0.9.8-10
Section: admin Section: admin
Maintainer: Serghey Rodin <skid@vestacp.com> Maintainer: Serghey Rodin <skid@vestacp.com>
Homepage: http://vestacp.com Homepage: http://vestacp.com

View file

@ -15,4 +15,9 @@ if [ -x "/usr/local/vesta/upd/fix_vesta_ssl_permissions.sh" ]; then
/usr/local/vesta/upd/fix_vesta_ssl_permissions.sh /usr/local/vesta/upd/fix_vesta_ssl_permissions.sh
fi fi
# Run MySQL autostart fixed
if [ -x "/usr/local/vesta/upd/fix_mysql_startup.sh" ]; then
/usr/local/vesta/upd/fix_mysql_startup.sh
fi
exit 0 exit 0

View file

@ -1,6 +1,6 @@
Name: vesta Name: vesta
Version: 0.9.8 Version: 0.9.8
Release: 9 Release: 10
Summary: Vesta Control Panel Summary: Vesta Control Panel
Group: System Environment/Base Group: System Environment/Base
License: GPL License: GPL
@ -55,6 +55,36 @@ fi
%config(noreplace) %{_vestadir}/web/css/main.css %config(noreplace) %{_vestadir}/web/css/main.css
%changelog %changelog
* Mon Aug 4 2014 Serghey Rodin <builder@vestacp.com> - 0.9.8-10
- New Design
- MultiFTP Support
- Exim Queue Chart
- Arabic Language file. Thanks to Bashar Al-Abdulhadi http://bashar.com
- Italian Language Support. Thanks to Fabio Cagliero http://webnuvola.com
- Finnish Languge Support. Thanks to Juho Räsänen and Onni Hakala https://github.com/RJuho http://koodimonni.fi
- French Language Support. Thanks to nhoway https://github.com/nhoway
- Hungarian Language Support. Thanks to Kovacs Akos http://kovacsakos.info
- Improved SSL CA Validation
- Detailed report on mysql dump error
- Restart Confirmation Dialogue
- Autorefresh Module for Graphs
- Switched service manager from init.d to service command
- Switched free memeory rrd overlay style to linear
- Updated nginx extention list. Thanks to Vasily Kraev https://github.com/vasilykraev
- Updated skel templates. Thanks to Jason Hanes https://github.com/square-orange
- Urlencoder for DNS Cluster API
- Fixed dnsbl+authentication router. Thanks to Mirek Kratochvil http://e-x-a.org/
- Fix for tar < 1.24 to preserve directory ownership
- Fixed autoupdate script. Thanks to Kijamve
- Fixed some spelling errors. Thanks to Estratos Consulting
- Fixed backup exclusion for cron objects
- Fixed MySQL autostart issue on Ubuntu 14.04
- Fixed Awstats template parser for Ubuntu 14.04
- Fixed NameServer validation bug
- Fixed FS-Quota conversion. Thanks to demlasjr https://github.com/demlasjr
- Fixed spelling. Thanks to Jakub Ďuraš https://github.com/jlamer, Kotso https://github.com/kotso, Dustin Dauncey http://www.dustindauncey.com
* Sun May 18 2014 Serghey Rodin <builder@vestacp.com> - 0.9.8-9 * Sun May 18 2014 Serghey Rodin <builder@vestacp.com> - 0.9.8-9
- File System Quota support - File System Quota support
- Norwegian translation. Thanks to Helge Sverre - Norwegian translation. Thanks to Helge Sverre

11
upd/fix_mysql_startup.sh Executable file
View file

@ -0,0 +1,11 @@
#!/bin/bash
# Fix MySQL autostart for Ubuntu 14.04
if [ -e "/etc/issue" ]; then
release=$(head -n 1 /etc/issue | cut -f 2 -d ' ' )
if [ "$release" = '14.04' ]; then
update-rc.d mysql disable
fi
fi
exit

View file

@ -7,7 +7,7 @@ include($_SERVER['DOCUMENT_ROOT']."/inc/main.php");
if ($_SESSION['user'] == 'admin') { if ($_SESSION['user'] == 'admin') {
exec (VESTA_CMD."v-add-cron-vesta-autoupdate", $output, $return_var); exec (VESTA_CMD."v-add-cron-vesta-autoupdate", $output, $return_var);
$_SESSION['error_msg'] = __('Autoupdate has been susscessfully enabled'); $_SESSION['error_msg'] = __('Autoupdate has been successfully enabled');
unset($output); unset($output);
} }

View file

@ -4,32 +4,19 @@ error_reporting(NULL);
ob_start(); ob_start();
session_start(); session_start();
$TAB = 'CRON'; $TAB = 'CRON';
include($_SERVER['DOCUMENT_ROOT']."/inc/main.php"); include($_SERVER['DOCUMENT_ROOT']."/inc/main.php");
// Header // Check POST request
include($_SERVER['DOCUMENT_ROOT'].'/templates/header.html');
// Panel
top_panel($user,$TAB);
if (!empty($_POST['ok'])) { if (!empty($_POST['ok'])) {
// Check input
// Check empty fields
if ((!isset($_POST['v_min'])) || ($_POST['v_min'] == '')) $errors[] = __('minute'); if ((!isset($_POST['v_min'])) || ($_POST['v_min'] == '')) $errors[] = __('minute');
if ((!isset($_POST['v_hour'])) || ($_POST['v_hour'] == '')) $errors[] = __('hour'); if ((!isset($_POST['v_hour'])) || ($_POST['v_hour'] == '')) $errors[] = __('hour');
if ((!isset($_POST['v_day'])) || ($_POST['v_day'] == '')) $errors[] = __('day'); if ((!isset($_POST['v_day'])) || ($_POST['v_day'] == '')) $errors[] = __('day');
if ((!isset($_POST['v_month'])) || ($_POST['v_month'] == '')) $errors[] = __('month'); if ((!isset($_POST['v_month'])) || ($_POST['v_month'] == '')) $errors[] = __('month');
if ((!isset($_POST['v_wday'])) || ($_POST['v_wday'] == '')) $errors[] = __('day of week'); if ((!isset($_POST['v_wday'])) || ($_POST['v_wday'] == '')) $errors[] = __('day of week');
if ((!isset($_POST['v_cmd'])) || ($_POST['v_cmd'] == '')) $errors[] = __('cmd'); if ((!isset($_POST['v_cmd'])) || ($_POST['v_cmd'] == '')) $errors[] = __('cmd');
// Protect input
$v_min = escapeshellarg($_POST['v_min']);
$v_hour = escapeshellarg($_POST['v_hour']);
$v_day = escapeshellarg($_POST['v_day']);
$v_month = escapeshellarg($_POST['v_month']);
$v_wday = escapeshellarg($_POST['v_wday']);
$v_cmd = escapeshellarg($_POST['v_cmd']);
// Check for errors
if (!empty($errors[0])) { if (!empty($errors[0])) {
foreach ($errors as $i => $error) { foreach ($errors as $i => $error) {
if ( $i == 0 ) { if ( $i == 0 ) {
@ -39,32 +26,46 @@ if (!empty($_POST['ok'])) {
} }
} }
$_SESSION['error_msg'] = __('Field "%s" can not be blank.',$error_msg); $_SESSION['error_msg'] = __('Field "%s" can not be blank.',$error_msg);
} else { }
// Add Cron Job
// Protect input
$v_min = escapeshellarg($_POST['v_min']);
$v_hour = escapeshellarg($_POST['v_hour']);
$v_day = escapeshellarg($_POST['v_day']);
$v_month = escapeshellarg($_POST['v_month']);
$v_wday = escapeshellarg($_POST['v_wday']);
$v_cmd = escapeshellarg($_POST['v_cmd']);
// Add cron job
if (empty($_SESSION['error_msg'])) {
exec (VESTA_CMD."v-add-cron-job ".$user." ".$v_min." ".$v_hour." ".$v_day." ".$v_month." ".$v_wday." ".$v_cmd, $output, $return_var); exec (VESTA_CMD."v-add-cron-job ".$user." ".$v_min." ".$v_hour." ".$v_day." ".$v_month." ".$v_wday." ".$v_cmd, $output, $return_var);
$v_type = $_POST['v_type'];
$v_charset = $_POST['v_charset'];
check_return_code($return_var,$output); check_return_code($return_var,$output);
unset($v_password);
unset($output); unset($output);
if (empty($_SESSION['error_msg'])) { }
$_SESSION['ok_msg'] = __('CRON_CREATED_OK');
unset($v_min); // Flush field values on success
unset($v_hour); if (empty($_SESSION['error_msg'])) {
unset($v_day); $_SESSION['ok_msg'] = __('CRON_CREATED_OK');
unset($v_month); unset($v_min);
unset($v_wday); unset($v_hour);
unset($v_cmd); unset($v_day);
unset($output); unset($v_month);
} unset($v_wday);
unset($v_cmd);
unset($output);
} }
} }
exec (VESTA_CMD."v-list-database-types 'json'", $output, $return_var); // Header
$db_types = json_decode(implode('', $output), true); include($_SERVER['DOCUMENT_ROOT'].'/templates/header.html');
unset($output);
// Panel
top_panel($user,$TAB);
// Display body
include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/add_cron.html'); include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/add_cron.html');
// Flush session messages
unset($_SESSION['error_msg']); unset($_SESSION['error_msg']);
unset($_SESSION['ok_msg']); unset($_SESSION['ok_msg']);

View file

@ -6,24 +6,16 @@ session_start();
$TAB = 'DB'; $TAB = 'DB';
include($_SERVER['DOCUMENT_ROOT']."/inc/main.php"); include($_SERVER['DOCUMENT_ROOT']."/inc/main.php");
// Header // Check POST request
include($_SERVER['DOCUMENT_ROOT'].'/templates/header.html');
// Panel
top_panel($user,$TAB);
$v_db_email = $panel[$user]['CONTACT'];
if (!empty($_POST['ok'])) { if (!empty($_POST['ok'])) {
// Check input
// Check empty fields
if (empty($_POST['v_database'])) $errors[] = __('database'); if (empty($_POST['v_database'])) $errors[] = __('database');
if (empty($_POST['v_dbuser'])) $errors[] = __('username'); if (empty($_POST['v_dbuser'])) $errors[] = __('username');
if (empty($_POST['v_password'])) $errors[] = __('password'); if (empty($_POST['v_password'])) $errors[] = __('password');
if (empty($_POST['v_type'])) $errors[] = __('type'); if (empty($_POST['v_type'])) $errors[] = __('type');
if (empty($_POST['v_host'])) $errors[] = __('host'); if (empty($_POST['v_host'])) $errors[] = __('host');
if (empty($_POST['v_charset'])) $errors[] = __('charset'); if (empty($_POST['v_charset'])) $errors[] = __('charset');
// Check for errors
if (!empty($errors[0])) { if (!empty($errors[0])) {
foreach ($errors as $i => $error) { foreach ($errors as $i => $error) {
if ( $i == 0 ) { if ( $i == 0 ) {
@ -36,12 +28,18 @@ if (!empty($_POST['ok'])) {
} }
// Validate email // Validate email
if (!empty($_POST['v_db_email'])) { if ((!empty($_POST['v_db_email'])) && (empty($_SESSION['error_msg']))) {
if (!filter_var($_POST['v_db_email'], FILTER_VALIDATE_EMAIL)) { if (!filter_var($_POST['v_db_email'], FILTER_VALIDATE_EMAIL)) {
$_SESSION['error_msg'] = __('Please enter valid email address.'); $_SESSION['error_msg'] = __('Please enter valid email address.');
} }
} }
// Check password length
if (empty($_SESSION['error_msg'])) {
$pw_len = strlen($_POST['v_password']);
if ($pw_len < 6 ) $_SESSION['error_msg'] = __('Password is too short.',$error_msg);
}
// Protect input // Protect input
$v_database = escapeshellarg($_POST['v_database']); $v_database = escapeshellarg($_POST['v_database']);
$v_dbuser = escapeshellarg($_POST['v_dbuser']); $v_dbuser = escapeshellarg($_POST['v_dbuser']);
@ -81,57 +79,71 @@ if (!empty($_POST['ok'])) {
if ($pw_len < 6 ) $_SESSION['error_msg'] = __('Password is too short.',$error_msg); if ($pw_len < 6 ) $_SESSION['error_msg'] = __('Password is too short.',$error_msg);
} }
// Add database
if (empty($_SESSION['error_msg'])) { if (empty($_SESSION['error_msg'])) {
// Add Database
$v_type = escapeshellarg($_POST['v_type']); $v_type = escapeshellarg($_POST['v_type']);
$v_charset = escapeshellarg($_POST['v_charset']); $v_charset = escapeshellarg($_POST['v_charset']);
$v_host = escapeshellarg($_POST['v_host']); $v_host = escapeshellarg($_POST['v_host']);
exec (VESTA_CMD."v-add-database ".$user." ".$v_database." ".$v_dbuser." ".$v_password." ".$v_type." ".$v_host." ".$v_charset, $output, $return_var); exec (VESTA_CMD."v-add-database ".$user." ".$v_database." ".$v_dbuser." ".$v_password." ".$v_type." ".$v_host." ".$v_charset, $output, $return_var);
check_return_code($return_var,$output);
unset($output);
$v_type = $_POST['v_type']; $v_type = $_POST['v_type'];
$v_host = $_POST['v_host']; $v_host = $_POST['v_host'];
$v_charset = $_POST['v_charset']; $v_charset = $_POST['v_charset'];
check_return_code($return_var,$output); }
// Get database manager url
if (empty($_SESSION['error_msg'])) {
exec (VESTA_CMD."v-list-sys-config json", $output, $return_var);
$sys = json_decode(implode('', $output), true);
unset($output); unset($output);
if ((!empty($v_db_email)) && (empty($_SESSION['error_msg']))) { list($http_host, $port) = explode(':', $_SERVER["HTTP_HOST"] . ":");
list($http_host, $port) = explode(':', $_SERVER["HTTP_HOST"]); if ($_POST['v_host'] != 'localhost' ) $http_host = $_POST['v_host'];
if ($_POST['v_type'] == 'mysql') $db_admin_link = "http://".$http_host."/phpmyadmin/"; if ($_POST['v_type'] == 'mysql') $db_admin = "phpMyAdmin";
if ($_POST['v_type'] == 'pgsql') $db_admin_link = "http://".$http_host."/phppgadmin/"; if ($_POST['v_type'] == 'mysql') $db_admin_link = "http://".$http_host."/phpmyadmin/";
$to = $v_db_email; if (($_POST['v_type'] == 'mysql') && (!empty($sys['config']['DB_PMA_URL']))) $db_admin_link = $sys['config']['DB_PMA_URL'];
$subject = __("Database Credentials"); if ($_POST['v_type'] == 'pgsql') $db_admin = "phpPgAdmin";
$hostname = exec('hostname'); if ($_POST['v_type'] == 'pgsql') $db_admin_link = "http://".$http_host."/phppgadmin/";
$from = __('MAIL_FROM',$hostname); if (($_POST['v_type'] == 'pgsql') && (!empty($sys['config']['DB_PGA_URL']))) $db_admin_link = $sys['config']['DB_PGA_URL'];
$mailtext = __('DATABASE_READY',$user."_".$_POST['v_database'],$user."_".$_POST['v_dbuser'],$_POST['v_password'],$db_admin_link); }
send_email($to, $subject, $mailtext, $from);
}
if (empty($_SESSION['error_msg'])) {
exec (VESTA_CMD."v-list-sys-config json", $output, $return_var);
$sys = json_decode(implode('', $output), true);
unset($output);
list($http_host, $port) = explode(':', $_SERVER["HTTP_HOST"] . ":"); // Email login credentials
if ($_POST['v_host'] != 'localhost' ) $http_host = $_POST['v_host']; if ((!empty($v_db_email)) && (empty($_SESSION['error_msg']))) {
if ($_POST['v_type'] == 'mysql') $db_admin = "phpMyAdmin"; $to = $v_db_email;
if ($_POST['v_type'] == 'mysql') $db_admin_link = "http://".$http_host."/phpmyadmin/"; $subject = __("Database Credentials");
if (($_POST['v_type'] == 'mysql') && (!empty($sys['config']['DB_PMA_URL']))) $db_admin_link = $sys['config']['DB_PMA_URL']; $hostname = exec('hostname');
if ($_POST['v_type'] == 'pgsql') $db_admin = "phpPgAdmin"; $from = __('MAIL_FROM',$hostname);
if ($_POST['v_type'] == 'pgsql') $db_admin_link = "http://".$http_host."/phppgadmin/"; $mailtext = __('DATABASE_READY',$user."_".$_POST['v_database'],$user."_".$_POST['v_dbuser'],$_POST['v_password'],$db_admin_link);
if (($_POST['v_type'] == 'pgsql') && (!empty($sys['config']['DB_PGA_URL']))) $db_admin_link = $sys['config']['DB_PGA_URL']; send_email($to, $subject, $mailtext, $from);
}
$_SESSION['ok_msg'] = __('DATABASE_CREATED_OK',$user."_".$_POST['v_database'],$user."_".$_POST['v_database']); // Flush field values on success
$_SESSION['ok_msg'] .= " / <a href=".$db_admin_link." target='_blank'>" . __('open %s',$db_admin) . "</a>"; if (empty($_SESSION['error_msg'])) {
unset($v_database); $_SESSION['ok_msg'] = __('DATABASE_CREATED_OK',$user."_".$_POST['v_database'],$user."_".$_POST['v_database']);
unset($v_dbuser); $_SESSION['ok_msg'] .= " / <a href=".$db_admin_link." target='_blank'>" . __('open %s',$db_admin) . "</a>";
unset($v_password); unset($v_database);
unset($v_type); unset($v_dbuser);
unset($v_charset); unset($v_password);
} unset($v_type);
unset($v_charset);
} }
} }
// Header
include($_SERVER['DOCUMENT_ROOT'].'/templates/header.html');
// Panel
top_panel($user,$TAB);
// Get user email
$v_db_email = $panel[$user]['CONTACT'];
// List avaiable database types
exec (VESTA_CMD."v-list-database-types 'json'", $output, $return_var); exec (VESTA_CMD."v-list-database-types 'json'", $output, $return_var);
$db_types = json_decode(implode('', $output), true); $db_types = json_decode(implode('', $output), true);
unset($output); unset($output);
// List available database servers
$db_hosts = array(); $db_hosts = array();
foreach ($db_types as $db_type ) { foreach ($db_types as $db_type ) {
exec (VESTA_CMD."v-list-database-hosts ".$db_type." 'json'", $output, $return_var); exec (VESTA_CMD."v-list-database-hosts ".$db_type." 'json'", $output, $return_var);
@ -141,7 +153,10 @@ foreach ($db_types as $db_type ) {
unset($output); unset($output);
} }
// Display body
include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/add_db.html'); include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/add_db.html');
// Flush session messages
unset($_SESSION['error_msg']); unset($_SESSION['error_msg']);
unset($_SESSION['ok_msg']); unset($_SESSION['ok_msg']);

View file

@ -4,31 +4,15 @@ error_reporting(NULL);
ob_start(); ob_start();
session_start(); session_start();
$TAB = 'DNS'; $TAB = 'DNS';
include($_SERVER['DOCUMENT_ROOT']."/inc/main.php"); include($_SERVER['DOCUMENT_ROOT']."/inc/main.php");
// Header // Check POST request for dns domain
include($_SERVER['DOCUMENT_ROOT'].'/templates/header.html');
// Panel
top_panel($user,$TAB);
if (!empty($_POST['ok'])) { if (!empty($_POST['ok'])) {
// Check input
// Check empty fields
if (empty($_POST['v_domain'])) $errors[] = __('domain'); if (empty($_POST['v_domain'])) $errors[] = __('domain');
if (empty($_POST['v_ip'])) $errors[] = __('ip'); if (empty($_POST['v_ip'])) $errors[] = __('ip');
// Protect input
$v_domain = preg_replace("/^www./i", "", $_POST['v_domain']);
$v_domain = escapeshellarg($v_domain);
$v_domain = strtolower($v_domain);
$v_ip = escapeshellarg($_POST['v_ip']);
if (!empty($_POST['v_ns1'])) $v_ns1 = escapeshellarg($_POST['v_ns1']);
if (!empty($_POST['v_ns2'])) $v_ns2 = escapeshellarg($_POST['v_ns2']);
if (!empty($_POST['v_ns3'])) $v_ns3 = escapeshellarg($_POST['v_ns3']);
if (!empty($_POST['v_ns4'])) $v_ns4 = escapeshellarg($_POST['v_ns4']);
// Check for errors
if (!empty($errors[0])) { if (!empty($errors[0])) {
foreach ($errors as $i => $error) { foreach ($errors as $i => $error) {
if ( $i == 0 ) { if ( $i == 0 ) {
@ -38,49 +22,78 @@ if (!empty($_POST['ok'])) {
} }
} }
$_SESSION['error_msg'] = __('Field "%s" can not be blank.',$error_msg); $_SESSION['error_msg'] = __('Field "%s" can not be blank.',$error_msg);
} else { }
// Add DNS
// Protect input
$v_domain = preg_replace("/^www./i", "", $_POST['v_domain']);
$v_domain = escapeshellarg($v_domain);
$v_domain = strtolower($v_domain);
$v_ip = escapeshellarg($_POST['v_ip']);
if (!empty($_POST['v_ns1'])) $v_ns1 = escapeshellarg($_POST['v_ns1']);
if (!empty($_POST['v_ns2'])) $v_ns2 = escapeshellarg($_POST['v_ns2']);
if (!empty($_POST['v_ns3'])) $v_ns3 = escapeshellarg($_POST['v_ns3']);
if (!empty($_POST['v_ns4'])) $v_ns4 = escapeshellarg($_POST['v_ns4']);
// Add dns domain
if (empty($_SESSION['error_msg'])) {
exec (VESTA_CMD."v-add-dns-domain ".$user." ".$v_domain." ".$v_ip." ".$v_ns1." ".$v_ns2." ".$v_ns3." ".$v_ns4." no", $output, $return_var); exec (VESTA_CMD."v-add-dns-domain ".$user." ".$v_domain." ".$v_ip." ".$v_ns1." ".$v_ns2." ".$v_ns3." ".$v_ns4." no", $output, $return_var);
check_return_code($return_var,$output); check_return_code($return_var,$output);
unset($output); unset($output);
}
// Change Expiriation date // Set expiriation date
if (empty($_SESSION['error_msg'])) {
if ((!empty($_POST['v_exp'])) && ($_POST['v_exp'] != date('Y-m-d', strtotime('+1 year')))) { if ((!empty($_POST['v_exp'])) && ($_POST['v_exp'] != date('Y-m-d', strtotime('+1 year')))) {
$v_exp = escapeshellarg($_POST['v_exp']); $v_exp = escapeshellarg($_POST['v_exp']);
exec (VESTA_CMD."v-change-dns-domain-exp ".$user." ".$v_domain." ".$v_exp." no", $output, $return_var); exec (VESTA_CMD."v-change-dns-domain-exp ".$user." ".$v_domain." ".$v_exp." no", $output, $return_var);
check_return_code($return_var,$output); check_return_code($return_var,$output);
unset($output); unset($output);
} }
}
// Change TTL // Set ttl
if (empty($_SESSION['error_msg'])) {
if ((!empty($_POST['v_ttl'])) && ($_POST['v_ttl'] != '14400') && (empty($_SESSION['error_msg']))) { if ((!empty($_POST['v_ttl'])) && ($_POST['v_ttl'] != '14400') && (empty($_SESSION['error_msg']))) {
$v_ttl = escapeshellarg($_POST['v_ttl']); $v_ttl = escapeshellarg($_POST['v_ttl']);
exec (VESTA_CMD."v-change-dns-domain-ttl ".$user." ".$v_domain." ".$v_ttl." no", $output, $return_var); exec (VESTA_CMD."v-change-dns-domain-ttl ".$user." ".$v_domain." ".$v_ttl." no", $output, $return_var);
check_return_code($return_var,$output); check_return_code($return_var,$output);
unset($output); unset($output);
} }
}
if (empty($_SESSION['error_msg'])) { // Restart dns server
$_SESSION['ok_msg'] = __('DNS_DOMAIN_CREATED_OK',$_POST[v_domain],$_POST[v_domain]); if (empty($_SESSION['error_msg'])) {
unset($v_domain); exec (VESTA_CMD."v-restart-dns", $output, $return_var);
} check_return_code($return_var,$output);
unset($output);
if (empty($_SESSION['error_msg'])) { }
exec (VESTA_CMD."v-restart-dns", $output, $return_var);
check_return_code($return_var,$output);
unset($output);
}
// Flush field values on success
if (empty($_SESSION['error_msg'])) {
$_SESSION['ok_msg'] = __('DNS_DOMAIN_CREATED_OK',$_POST[v_domain],$_POST[v_domain]);
unset($v_domain);
} }
} }
// DNS Record
// Check POST request for dns record
if (!empty($_POST['ok_rec'])) { if (!empty($_POST['ok_rec'])) {
// Check input
// Check empty fields
if (empty($_POST['v_domain'])) $errors[] = 'domain'; if (empty($_POST['v_domain'])) $errors[] = 'domain';
if (empty($_POST['v_rec'])) $errors[] = 'record'; if (empty($_POST['v_rec'])) $errors[] = 'record';
if (empty($_POST['v_type'])) $errors[] = 'type'; if (empty($_POST['v_type'])) $errors[] = 'type';
if (empty($_POST['v_val'])) $errors[] = 'value'; if (empty($_POST['v_val'])) $errors[] = 'value';
if (!empty($errors[0])) {
foreach ($errors as $i => $error) {
if ( $i == 0 ) {
$error_msg = $error;
} else {
$error_msg = $error_msg.", ".$error;
}
}
$_SESSION['error_msg'] = __('Field "%s" can not be blank.',$error_msg);
}
// Protect input // Protect input
$v_domain = escapeshellarg($_POST['v_domain']); $v_domain = escapeshellarg($_POST['v_domain']);
@ -89,34 +102,36 @@ if (!empty($_POST['ok_rec'])) {
$v_val = escapeshellarg($_POST['v_val']); $v_val = escapeshellarg($_POST['v_val']);
$v_priority = escapeshellarg($_POST['v_priority']); $v_priority = escapeshellarg($_POST['v_priority']);
// Check for errors // Add dns record
if (!empty($errors[0])) { if (empty($_SESSION['error_msg'])) {
foreach ($errors as $i => $error) {
if ( $i == 0 ) {
$error_msg = $error;
} else {
$error_msg = $error_msg.", ".$error;
}
}
$_SESSION['error_msg'] = __('Field "%s" can not be blank.',$error_msg);
} else {
// Add DNS Record
exec (VESTA_CMD."v-add-dns-record ".$user." ".$v_domain." ".$v_rec." ".$v_type." ".$v_val." ".$v_priority, $output, $return_var); exec (VESTA_CMD."v-add-dns-record ".$user." ".$v_domain." ".$v_rec." ".$v_type." ".$v_val." ".$v_priority, $output, $return_var);
$v_type = $_POST['v_type'];
check_return_code($return_var,$output); check_return_code($return_var,$output);
unset($output); unset($output);
if (empty($_SESSION['error_msg'])) { $v_type = $_POST['v_type'];
$_SESSION['ok_msg'] = __('DNS_RECORD_CREATED_OK',$_POST[v_rec],$_POST[v_domain]); }
unset($v_domain);
unset($v_rec); // Flush field values on success
unset($v_val); if (empty($_SESSION['error_msg'])) {
unset($v_priority); $_SESSION['ok_msg'] = __('DNS_RECORD_CREATED_OK',$_POST[v_rec],$_POST[v_domain]);
} unset($v_domain);
unset($v_rec);
unset($v_val);
unset($v_priority);
} }
} }
if ((empty($_GET['domain'])) && (empty($_POST['domain']))) {
if ((empty($v_ns1)) && (empty($v_ns2))) { // Header
include($_SERVER['DOCUMENT_ROOT'].'/templates/header.html');
// Panel
top_panel($user,$TAB);
// Display body for dns domain
if (empty($_GET['domain'])) {
if (empty($v_ttl)) $v_ttl = 14400;
if (empty($v_exp)) $v_exp = date('Y-m-d', strtotime('+1 year'));
if (empty($v_ns1)) {
exec (VESTA_CMD."v-list-user-ns ".$user." json", $output, $return_var); exec (VESTA_CMD."v-list-user-ns ".$user." json", $output, $return_var);
$nameservers = json_decode(implode('', $output), true); $nameservers = json_decode(implode('', $output), true);
$v_ns1 = $nameservers[0]; $v_ns1 = $nameservers[0];
@ -125,17 +140,18 @@ if ((empty($_GET['domain'])) && (empty($_POST['domain']))) {
$v_ns4 = $nameservers[3]; $v_ns4 = $nameservers[3];
unset($output); unset($output);
} }
if (empty($v_ttl)) $v_ttl = 14400;
if (empty($v_exp)) $v_exp = date('Y-m-d', strtotime('+1 year'));
include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/add_dns.html'); include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/add_dns.html');
unset($_SESSION['error_msg']); }
unset($_SESSION['ok_msg']);
} else { // Display body for dns record
if (!empty($_GET['domain'])) {
$v_domain = $_GET['domain']; $v_domain = $_GET['domain'];
include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/add_dns_rec.html'); include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/add_dns_rec.html');
unset($_SESSION['error_msg']);
unset($_SESSION['ok_msg']);
} }
// Flush session messages
unset($_SESSION['error_msg']);
unset($_SESSION['ok_msg']);
// Footer // Footer
include($_SERVER['DOCUMENT_ROOT'].'/templates/footer.html'); include($_SERVER['DOCUMENT_ROOT'].'/templates/footer.html');

View file

@ -4,80 +4,93 @@ error_reporting(NULL);
ob_start(); ob_start();
session_start(); session_start();
$TAB = 'IP'; $TAB = 'IP';
include($_SERVER['DOCUMENT_ROOT']."/inc/main.php"); include($_SERVER['DOCUMENT_ROOT']."/inc/main.php");
// Check user
if ($_SESSION['user'] != 'admin') {
header("Location: /list/user");
exit;
}
// Check POST request
if (!empty($_POST['ok'])) {
// Check empty fields
if (empty($_POST['v_ip'])) $errors[] = __('ip address');
if (empty($_POST['v_netmask'])) $errors[] = __('netmask');
if (empty($_POST['v_interface'])) $errors[] = __('interface');
if (empty($_POST['v_owner'])) $errors[] = __('assigned user');
if (!empty($errors[0])) {
foreach ($errors as $i => $error) {
if ( $i == 0 ) {
$error_msg = $error;
} else {
$error_msg = $error_msg.", ".$error;
}
}
$_SESSION['error_msg'] = __('Field "%s" can not be blank.',$error_msg);
}
// Protect input
$v_ip = escapeshellarg($_POST['v_ip']);
$v_netmask = escapeshellarg($_POST['v_netmask']);
$v_name = escapeshellarg($_POST['v_name']);
$v_nat = escapeshellarg($_POST['v_nat']);
$v_interface = escapeshellarg($_POST['v_interface']);
$v_owner = escapeshellarg($_POST['v_owner']);
$v_shared = $_POST['v_shared'];
// Check shared checkmark
if ($v_shared == 'on') {
$ip_status = 'shared';
} else {
$ip_status = 'dedicated';
$v_dedicated = 'yes';
}
// Add IP
if (empty($_SESSION['error_msg'])) {
exec (VESTA_CMD."v-add-sys-ip ".$v_ip." ".$v_netmask." ".$v_interface." ".$v_owner." '".$ip_status."' ".$v_name." ".$v_nat, $output, $return_var);
check_return_code($return_var,$output);
unset($output);
$v_owner = $_POST['v_owner'];
$v_interface = $_POST['v_interface'];
}
// Flush field values on success
if (empty($_SESSION['error_msg'])) {
$_SESSION['ok_msg'] = __('IP_CREATED_OK',$_POST['v_ip'],$_POST['v_ip']);
unset($v_ip);
unset($v_netmask);
unset($v_name);
unset($v_nat);
}
}
// Header // Header
include($_SERVER['DOCUMENT_ROOT'].'/templates/header.html'); include($_SERVER['DOCUMENT_ROOT'].'/templates/header.html');
// Panel // Panel
top_panel($user,$TAB); top_panel($user,$TAB);
// Are you admin? // List network interfaces
if ($_SESSION['user'] == 'admin') { exec (VESTA_CMD."v-list-sys-interfaces 'json'", $output, $return_var);
if (!empty($_POST['ok'])) { $interfaces = json_decode(implode('', $output), true);
// Check input unset($output);
if (empty($_POST['v_ip'])) $errors[] = __('ip address');
if (empty($_POST['v_netmask'])) $errors[] = __('netmask');
if (empty($_POST['v_interface'])) $errors[] = __('interface');
if (empty($_POST['v_owner'])) $errors[] = __('assigned user');
// Protect input // List users
$v_ip = escapeshellarg($_POST['v_ip']); exec (VESTA_CMD."v-list-sys-users 'json'", $output, $return_var);
$v_netmask = escapeshellarg($_POST['v_netmask']); $users = json_decode(implode('', $output), true);
$v_name = escapeshellarg($_POST['v_name']); unset($output);
$v_nat = escapeshellarg($_POST['v_nat']);
$v_interface = $_POST['v_interface']; // Display body
$v_shared = $_POST['v_shared']; include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/add_ip.html');
if ($v_shared == 'on') {
$ip_status = 'shared';
} else {
$ip_status = 'dedicated';
$v_dedicated = 'yes';
}
$v_owner = $_POST['v_owner']; // Flush session messages
unset($_SESSION['error_msg']);
// Check for errors unset($_SESSION['ok_msg']);
if (!empty($errors[0])) {
foreach ($errors as $i => $error) {
if ( $i == 0 ) {
$error_msg = $error;
} else {
$error_msg = $error_msg.", ".$error;
}
}
$_SESSION['error_msg'] = __('Field "%s" can not be blank.',$error_msg);
} else {
// Add IP
$v_interface = escapeshellarg($_POST['v_interface']);
$v_owner = $_POST['v_owner'];
exec (VESTA_CMD."v-add-sys-ip ".$v_ip." ".$v_netmask." ".$v_interface." ".$v_owner." '".$ip_status."' ".$v_name." ".$v_nat, $output, $return_var);
$v_owner = $_POST['v_owner'];
$v_interface = $_POST['v_interface'];
check_return_code($return_var,$output);
unset($output);
if (empty($_SESSION['error_msg'])) {
$_SESSION['ok_msg'] = __('IP_CREATED_OK',$_POST['v_ip'],$_POST['v_ip']);
unset($v_ip);
unset($v_netmask);
unset($v_name);
unset($v_nat);
}
}
}
exec (VESTA_CMD."v-list-sys-interfaces 'json'", $output, $return_var);
$interfaces = json_decode(implode('', $output), true);
unset($output);
exec (VESTA_CMD."v-list-sys-users 'json'", $output, $return_var);
$users = json_decode(implode('', $output), true);
unset($output);
include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/add_ip.html');
unset($_SESSION['error_msg']);
unset($_SESSION['ok_msg']);
}
// Footer // Footer
include($_SERVER['DOCUMENT_ROOT'].'/templates/footer.html'); include($_SERVER['DOCUMENT_ROOT'].'/templates/footer.html');

View file

@ -4,41 +4,15 @@ error_reporting(NULL);
ob_start(); ob_start();
session_start(); session_start();
$TAB = 'MAIL'; $TAB = 'MAIL';
include($_SERVER['DOCUMENT_ROOT']."/inc/main.php"); include($_SERVER['DOCUMENT_ROOT']."/inc/main.php");
// Header
include($_SERVER['DOCUMENT_ROOT'].'/templates/header.html');
// Panel // Check POST request for mail domain
top_panel($user,$TAB);
// Mail Domain
if (!empty($_POST['ok'])) { if (!empty($_POST['ok'])) {
// Check empty fields
if (empty($_POST['v_domain'])) $errors[] = __('domain'); if (empty($_POST['v_domain'])) $errors[] = __('domain');
if (!empty($_POST['v_antispam'])) {
$v_antispam = 'yes';
} else {
$v_antispam = 'no';
}
if (!empty($_POST['v_antivirus'])) {
$v_antivirus = 'yes';
} else {
$v_antivirus = 'no';
}
if (!empty($_POST['v_dkim'])) {
$v_dkim = 'yes';
} else {
$v_dkim = 'no';
}
// Protect input
$v_domain = preg_replace("/^www./i", "", $_POST['v_domain']);
$v_domain = escapeshellarg($v_domain);
$v_domain = strtolower($v_domain);
// Check for errors
if (!empty($errors[0])) { if (!empty($errors[0])) {
foreach ($errors as $i => $error) { foreach ($errors as $i => $error) {
if ( $i == 0 ) { if ( $i == 0 ) {
@ -48,27 +22,66 @@ if (!empty($_POST['ok'])) {
} }
} }
$_SESSION['error_msg'] = __('Field "%s" can not be blank.',$error_msg); $_SESSION['error_msg'] = __('Field "%s" can not be blank.',$error_msg);
} else { }
// Add mail domain // Check antispam option
if (!empty($_POST['v_antispam'])) {
$v_antispam = 'yes';
} else {
$v_antispam = 'no';
}
// Check antivirus option
if (!empty($_POST['v_antivirus'])) {
$v_antivirus = 'yes';
} else {
$v_antivirus = 'no';
}
// Check dkim option
if (!empty($_POST['v_dkim'])) {
$v_dkim = 'yes';
} else {
$v_dkim = 'no';
}
// Set domain name to lowercase and remove www prefix
$v_domain = preg_replace("/^www./i", "", $_POST['v_domain']);
$v_domain = escapeshellarg($v_domain);
$v_domain = strtolower($v_domain);
// Add mail domain
if (empty($_SESSION['error_msg'])) {
exec (VESTA_CMD."v-add-mail-domain ".$user." ".$v_domain." ".$v_antispam." ".$v_antivirus." ".$v_dkim, $output, $return_var); exec (VESTA_CMD."v-add-mail-domain ".$user." ".$v_domain." ".$v_antispam." ".$v_antivirus." ".$v_dkim, $output, $return_var);
check_return_code($return_var,$output); check_return_code($return_var,$output);
unset($output); unset($output);
}
if (empty($_SESSION['error_msg'])) { // Flush field values on success
$_SESSION['ok_msg'] = __('MAIL_DOMAIN_CREATED_OK',$_POST['v_domain'],$_POST['v_domain']); if (empty($_SESSION['error_msg'])) {
unset($v_domain); $_SESSION['ok_msg'] = __('MAIL_DOMAIN_CREATED_OK',$_POST['v_domain'],$_POST['v_domain']);
} unset($v_domain);
} }
} }
// Mail Account // Check POST request for mail account
if (!empty($_POST['ok_acc'])) { if (!empty($_POST['ok_acc'])) {
// Check input
// Check empty fields
if (empty($_POST['v_domain'])) $errors[] = __('domain'); if (empty($_POST['v_domain'])) $errors[] = __('domain');
if (empty($_POST['v_account'])) $errors[] = __('account'); if (empty($_POST['v_account'])) $errors[] = __('account');
if (empty($_POST['v_password'])) $errors[] = __('password'); if (empty($_POST['v_password'])) $errors[] = __('password');
if (!empty($errors[0])) {
foreach ($errors as $i => $error) {
if ( $i == 0 ) {
$error_msg = $error;
} else {
$error_msg = $error_msg.", ".$error;
}
}
$_SESSION['error_msg'] = __('Field "%s" can not be blank.',$error_msg);
}
// Protect input // Protect input
$v_domain = escapeshellarg($_POST['v_domain']); $v_domain = escapeshellarg($_POST['v_domain']);
@ -78,99 +91,100 @@ if (!empty($_POST['ok_acc'])) {
$v_quota = escapeshellarg($_POST['v_quota']); $v_quota = escapeshellarg($_POST['v_quota']);
$v_aliases = $_POST['v_aliases']; $v_aliases = $_POST['v_aliases'];
$v_fwd = $_POST['v_fwd']; $v_fwd = $_POST['v_fwd'];
if (empty($_POST['v_quota'])) $v_quota = 0; if (empty($_POST['v_quota'])) $v_quota = 0;
if ((!empty($_POST['v_quota'])) || (!empty($_POST['v_aliases'])) || (!empty($_POST['v_fwd'])) ) $v_adv = 'yes'; if ((!empty($_POST['v_quota'])) || (!empty($_POST['v_aliases'])) || (!empty($_POST['v_fwd'])) ) $v_adv = 'yes';
// Check for errors // Add Mail Account
if (!empty($errors[0])) { if (empty($_SESSION['error_msg'])) {
foreach ($errors as $i => $error) {
if ( $i == 0 ) {
$error_msg = $error;
} else {
$error_msg = $error_msg.", ".$error;
}
}
$_SESSION['error_msg'] = __('Field "%s" can not be blank.',$error_msg);
} else {
// Add Mail Account
exec (VESTA_CMD."v-add-mail-account ".$user." ".$v_domain." ".$v_account." ".$v_password." ".$v_quota, $output, $return_var); exec (VESTA_CMD."v-add-mail-account ".$user." ".$v_domain." ".$v_account." ".$v_password." ".$v_quota, $output, $return_var);
check_return_code($return_var,$output); check_return_code($return_var,$output);
unset($output); unset($output);
}
// Add Aliases // Add Aliases
if ((!empty($_POST['v_aliases'])) && (empty($_SESSION['error_msg']))) { if ((!empty($_POST['v_aliases'])) && (empty($_SESSION['error_msg']))) {
$valiases = preg_replace("/\n/", " ", $_POST['v_aliases']); $valiases = preg_replace("/\n/", " ", $_POST['v_aliases']);
$valiases = preg_replace("/,/", " ", $valiases); $valiases = preg_replace("/,/", " ", $valiases);
$valiases = preg_replace('/\s+/', ' ',$valiases); $valiases = preg_replace('/\s+/', ' ',$valiases);
$valiases = trim($valiases); $valiases = trim($valiases);
$aliases = explode(" ", $valiases); $aliases = explode(" ", $valiases);
foreach ($aliases as $alias) { foreach ($aliases as $alias) {
$alias = escapeshellarg($alias); $alias = escapeshellarg($alias);
if (empty($_SESSION['error_msg'])) { if (empty($_SESSION['error_msg'])) {
exec (VESTA_CMD."v-add-mail-account-alias ".$user." ".$v_domain." ".$v_account." ".$alias, $output, $return_var); exec (VESTA_CMD."v-add-mail-account-alias ".$user." ".$v_domain." ".$v_account." ".$alias, $output, $return_var);
check_return_code($return_var,$output);
}
unset($output);
}
}
// Add Forwads
if ((!empty($_POST['v_fwd'])) && (empty($_SESSION['error_msg']))) {
$vfwd = preg_replace("/\n/", " ", $_POST['v_fwd']);
$vfwd = preg_replace("/,/", " ", $vfwd);
$vfwd = preg_replace('/\s+/', ' ',$vfwd);
$vfwd = trim($vfwd);
$fwd = explode(" ", $vfwd);
foreach ($fwd as $forward) {
$forward = escapeshellarg($forward);
if (empty($_SESSION['error_msg'])) {
exec (VESTA_CMD."v-add-mail-account-forward ".$user." ".$v_domain." ".$v_account." ".$forward, $output, $return_var);
check_return_code($return_var,$output);
}
unset($output);
}
// Add fwd_only flag
if ((!empty($_POST['v_fwd_only'])) && (empty($_SESSION['error_msg']))) {
exec (VESTA_CMD."v-add-mail-account-fwd-only ".$user." ".$v_domain." ".$v_account, $output, $return_var);
check_return_code($return_var,$output); check_return_code($return_var,$output);
unset($output); unset($output);
} }
} }
}
if (empty($_SESSION['error_msg'])) { // Add Forwarders
exec (VESTA_CMD."v-list-sys-config json", $output, $return_var); if ((!empty($_POST['v_fwd'])) && (empty($_SESSION['error_msg']))) {
$sys = json_decode(implode('', $output), true); $vfwd = preg_replace("/\n/", " ", $_POST['v_fwd']);
unset($output); $vfwd = preg_replace("/,/", " ", $vfwd);
$vfwd = preg_replace('/\s+/', ' ',$vfwd);
list($http_host, $port) = explode(':', $_SERVER["HTTP_HOST"].":"); $vfwd = trim($vfwd);
$webmail = "http://".$http_host."/webmail/"; $fwd = explode(" ", $vfwd);
if (!empty($sys['config']['MAIL_URL'])) $webmail = $sys['config']['MAIL_URL']; foreach ($fwd as $forward) {
$forward = escapeshellarg($forward);
$_SESSION['ok_msg'] = __('MAIL_ACCOUNT_CREATED_OK',strtolower($_POST['v_account']),$_POST[v_domain],strtolower($_POST['v_account']),$_POST[v_domain]); if (empty($_SESSION['error_msg'])) {
$_SESSION['ok_msg'] .= " / <a href=".$webmail." target='_blank'>" . __('open webmail') . "</a>"; exec (VESTA_CMD."v-add-mail-account-forward ".$user." ".$v_domain." ".$v_account." ".$forward, $output, $return_var);
unset($v_account); check_return_code($return_var,$output);
unset($v_password); unset($output);
unset($v_password); }
unset($v_aliases);
unset($v_fwd);
unset($v_quota);
} }
} }
// Add fwd_only flag
if ((!empty($_POST['v_fwd_only'])) && (empty($_SESSION['error_msg']))) {
exec (VESTA_CMD."v-add-mail-account-fwd-only ".$user." ".$v_domain." ".$v_account, $output, $return_var);
check_return_code($return_var,$output);
unset($output);
}
// Get webmail url
if (empty($_SESSION['error_msg'])) {
exec (VESTA_CMD."v-list-sys-config json", $output, $return_var);
$sys = json_decode(implode('', $output), true);
unset($output);
list($http_host, $port) = explode(':', $_SERVER["HTTP_HOST"].":");
$webmail = "http://".$http_host."/webmail/";
if (!empty($sys['config']['MAIL_URL'])) $webmail = $sys['config']['MAIL_URL'];
}
// Flush field values on success
if (empty($_SESSION['error_msg'])) {
$_SESSION['ok_msg'] = __('MAIL_ACCOUNT_CREATED_OK',strtolower($_POST['v_account']),$_POST[v_domain],strtolower($_POST['v_account']),$_POST[v_domain]);
$_SESSION['ok_msg'] .= " / <a href=".$webmail." target='_blank'>" . __('open webmail') . "</a>";
unset($v_account);
unset($v_password);
unset($v_password);
unset($v_aliases);
unset($v_fwd);
unset($v_quota);
}
} }
// Header
include($_SERVER['DOCUMENT_ROOT'].'/templates/header.html');
if ((empty($_GET['domain'])) && (empty($_POST['domain']))) { // Panel
$v_domain = (isset($_GET['domain'])?$_GET['domain']:''); top_panel($user,$TAB);
// Display body for mail domain
if (empty($_GET['domain'])) {
include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/add_mail.html'); include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/add_mail.html');
unset($_SESSION['error_msg']); }
unset($_SESSION['ok_msg']);
} else { // Display body for mail account
if (!empty($_GET['domain'])) {
$v_domain = $_GET['domain']; $v_domain = $_GET['domain'];
include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/add_mail_acc.html'); include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/add_mail_acc.html');
unset($_SESSION['error_msg']);
unset($_SESSION['ok_msg']);
} }
// Flush session messages
unset($_SESSION['error_msg']);
unset($_SESSION['ok_msg']);
// Footer // Footer
include($_SERVER['DOCUMENT_ROOT'].'/templates/footer.html'); include($_SERVER['DOCUMENT_ROOT'].'/templates/footer.html');

View file

@ -4,175 +4,181 @@ error_reporting(NULL);
ob_start(); ob_start();
session_start(); session_start();
$TAB = 'PACKAGE'; $TAB = 'PACKAGE';
include($_SERVER['DOCUMENT_ROOT']."/inc/main.php"); include($_SERVER['DOCUMENT_ROOT']."/inc/main.php");
if (empty($_SESSION['user'])) { // Check user
header("Location: /login/"); if ($_SESSION['user'] != 'admin') {
header("Location: /list/user");
exit;
} }
// Check POST request
if (!empty($_POST['ok'])) {
// Check empty fields
if (empty($_POST['v_package'])) $errors[] = __('package');
if (empty($_POST['v_web_template'])) $errors[] = __('web template');
if (empty($_POST['v_proxy_template'])) $errors[] = __('proxy template');
if (empty($_POST['v_dns_template'])) $errors[] = __('dns template');
if (empty($_POST['v_shell'])) $errrors[] = __('shell');
if (!isset($_POST['v_web_domains'])) $errors[] = __('web domains');
if (!isset($_POST['v_web_aliases'])) $errors[] = __('web aliases');
if (!isset($_POST['v_dns_domains'])) $errors[] = __('dns domains');
if (!isset($_POST['v_dns_records'])) $errors[] = __('dns records');
if (!isset($_POST['v_mail_domains'])) $errors[] = __('mail domains');
if (!isset($_POST['v_mail_accounts'])) $errors[] = __('mail accounts');
if (!isset($_POST['v_databases'])) $errors[] = __('databases');
if (!isset($_POST['v_cron_jobs'])) $errors[] = __('cron jobs');
if (!isset($_POST['v_backups'])) $errors[] = __('backups');
if (!isset($_POST['v_disk_quota'])) $errors[] = __('quota');
if (!isset($_POST['v_bandwidth'])) $errors[] = __('bandwidth');
if (empty($_POST['v_ns1'])) $errors[] = __('ns1');
if (empty($_POST['v_ns2'])) $errors[] = __('ns2');
if (!empty($errors[0])) {
foreach ($errors as $i => $error) {
if ( $i == 0 ) {
$error_msg = $error;
} else {
$error_msg = $error_msg.", ".$error;
}
}
$_SESSION['error_msg'] = __('Field "%s" can not be blank.',$error_msg);
}
// Protect input
$v_package = escapeshellarg($_POST['v_package']);
$v_web_template = escapeshellarg($_POST['v_web_template']);
$v_proxy_template = escapeshellarg($_POST['v_proxy_template']);
$v_dns_template = escapeshellarg($_POST['v_dns_template']);
$v_shell = escapeshellarg($_POST['v_shell']);
$v_web_domains = escapeshellarg($_POST['v_web_domains']);
$v_web_aliases = escapeshellarg($_POST['v_web_aliases']);
$v_dns_domains = escapeshellarg($_POST['v_dns_domains']);
$v_dns_records = escapeshellarg($_POST['v_dns_records']);
$v_mail_domains = escapeshellarg($_POST['v_mail_domains']);
$v_mail_accounts = escapeshellarg($_POST['v_mail_accounts']);
$v_databases = escapeshellarg($_POST['v_databases']);
$v_cron_jobs = escapeshellarg($_POST['v_cron_jobs']);
$v_backups = escapeshellarg($_POST['v_backups']);
$v_disk_quota = escapeshellarg($_POST['v_disk_quota']);
$v_bandwidth = escapeshellarg($_POST['v_bandwidth']);
$v_ns1 = trim($_POST['v_ns1'], '.');
$v_ns2 = trim($_POST['v_ns2'], '.');
$v_ns3 = trim($_POST['v_ns3'], '.');
$v_ns4 = trim($_POST['v_ns4'], '.');
$v_ns = $v_ns1.",".$v_ns2;
if (!empty($v_ns3)) $v_ns .= ",".$v_ns3;
if (!empty($v_ns4)) $v_ns .= ",".$v_ns4;
$v_ns = escapeshellarg($v_ns);
$v_time = escapeshellarg(date('H:i:s'));
$v_date = escapeshellarg(date('Y-m-d'));
// Create temporary dir
if (empty($_SESSION['error_msg'])) {
exec ('mktemp -d', $output, $return_var);
$tmpdir = $output[0];
check_return_code($return_var,$output);
unset($output);
}
// Create package file
if (empty($_SESSION['error_msg'])) {
$pkg = "WEB_TEMPLATE=".$v_web_template."\n";
$pkg .= "PROXY_TEMPLATE=".$v_proxy_template."\n";
$pkg .= "DNS_TEMPLATE=".$v_dns_template."\n";
$pkg .= "WEB_DOMAINS=".$v_web_domains."\n";
$pkg .= "WEB_ALIASES=".$v_web_aliases."\n";
$pkg .= "DNS_DOMAINS=".$v_dns_domains."\n";
$pkg .= "DNS_RECORDS=".$v_dns_records."\n";
$pkg .= "MAIL_DOMAINS=".$v_mail_domains."\n";
$pkg .= "MAIL_ACCOUNTS=".$v_mail_accounts."\n";
$pkg .= "DATABASES=".$v_databases."\n";
$pkg .= "CRON_JOBS=".$v_cron_jobs."\n";
$pkg .= "DISK_QUOTA=".$v_disk_quota."\n";
$pkg .= "BANDWIDTH=".$v_bandwidth."\n";
$pkg .= "NS=".$v_ns."\n";
$pkg .= "SHELL=".$v_shell."\n";
$pkg .= "BACKUPS=".$v_backups."\n";
$pkg .= "TIME=".$v_time."\n";
$pkg .= "DATE=".$v_date."\n";
$fp = fopen($tmpdir."/".$_POST['v_package'].".pkg", 'w');
fwrite($fp, $pkg);
fclose($fp);
}
// Add new package
if (empty($_SESSION['error_msg'])) {
exec (VESTA_CMD."v-add-user-package ".$tmpdir." ".$v_package, $output, $return_var);
check_return_code($return_var,$output);
unset($output);
}
// Remove tmpdir
exec ('rm -rf '.$tmpdir, $output, $return_var);
unset($output);
// Flush field values on success
if (empty($_SESSION['error_msg'])) {
$_SESSION['ok_msg'] = __('PACKAGE_CREATED_OK',$_POST['v_package'],$_POST['v_package']);
unset($v_package);
}
}
// Header // Header
include($_SERVER['DOCUMENT_ROOT'].'/templates/header.html'); include($_SERVER['DOCUMENT_ROOT'].'/templates/header.html');
// Panel // Panel
top_panel($user,$TAB); top_panel($user,$TAB);
// Are you admin? // List web temmplates
if ($_SESSION['user'] == 'admin') { exec (VESTA_CMD."v-list-web-templates json", $output, $return_var);
if (!empty($_POST['ok'])) { $web_templates = json_decode(implode('', $output), true);
// Check input unset($output);
if (empty($_POST['v_package'])) $errors[] = __('package');
if (empty($_POST['v_web_template'])) $errors[] = __('web template');
if (empty($_POST['v_proxy_template'])) $errors[] = __('proxy template');
if (empty($_POST['v_dns_template'])) $errors[] = __('dns template');
if (empty($_POST['v_shell'])) $errrors[] = __('shell');
if (!isset($_POST['v_web_domains'])) $errors[] = __('web domains');
if (!isset($_POST['v_web_aliases'])) $errors[] = __('web aliases');
if (!isset($_POST['v_dns_domains'])) $errors[] = __('dns domains');
if (!isset($_POST['v_dns_records'])) $errors[] = __('dns records');
if (!isset($_POST['v_mail_domains'])) $errors[] = __('mail domains');
if (!isset($_POST['v_mail_accounts'])) $errors[] = __('mail accounts');
if (!isset($_POST['v_databases'])) $errors[] = __('databases');
if (!isset($_POST['v_cron_jobs'])) $errors[] = __('cron jobs');
if (!isset($_POST['v_backups'])) $errors[] = __('backups');
if (!isset($_POST['v_disk_quota'])) $errors[] = __('quota');
if (!isset($_POST['v_bandwidth'])) $errors[] = __('bandwidth');
if (empty($_POST['v_ns1'])) $errors[] = __('ns1');
if (empty($_POST['v_ns2'])) $errors[] = __('ns2');
// List web templates for proxy
exec (VESTA_CMD."v-list-web-templates-proxy json", $output, $return_var);
$proxy_templates = json_decode(implode('', $output), true);
unset($output);
// Protect input // List DNS templates
$v_package = escapeshellarg($_POST['v_package']); exec (VESTA_CMD."v-list-dns-templates json", $output, $return_var);
$v_web_template = escapeshellarg($_POST['v_web_template']); $dns_templates = json_decode(implode('', $output), true);
$v_proxy_template = escapeshellarg($_POST['v_proxy_template']); unset($output);
$v_dns_template = escapeshellarg($_POST['v_dns_template']);
$v_shell = escapeshellarg($_POST['v_shell']);
$v_web_domains = escapeshellarg($_POST['v_web_domains']);
$v_web_aliases = escapeshellarg($_POST['v_web_aliases']);
$v_dns_domains = escapeshellarg($_POST['v_dns_domains']);
$v_dns_records = escapeshellarg($_POST['v_dns_records']);
$v_mail_domains = escapeshellarg($_POST['v_mail_domains']);
$v_mail_accounts = escapeshellarg($_POST['v_mail_accounts']);
$v_databases = escapeshellarg($_POST['v_databases']);
$v_cron_jobs = escapeshellarg($_POST['v_cron_jobs']);
$v_backups = escapeshellarg($_POST['v_backups']);
$v_disk_quota = escapeshellarg($_POST['v_disk_quota']);
$v_bandwidth = escapeshellarg($_POST['v_bandwidth']);
$v_ns1 = trim($_POST['v_ns1'], '.');
$v_ns2 = trim($_POST['v_ns2'], '.');
$v_ns3 = trim($_POST['v_ns3'], '.');
$v_ns4 = trim($_POST['v_ns4'], '.');
$v_ns = $v_ns1.",".$v_ns2;
if (!empty($v_ns3)) $v_ns .= ",".$v_ns3;
if (!empty($v_ns4)) $v_ns .= ",".$v_ns4;
$v_ns = escapeshellarg($v_ns);
$v_time = escapeshellarg(date('H:i:s'));
$v_date = escapeshellarg(date('Y-m-d'));
// Check for errors // List system shells
if (!empty($errors[0])) { exec (VESTA_CMD."v-list-sys-shells json", $output, $return_var);
foreach ($errors as $i => $error) { $shells = json_decode(implode('', $output), true);
if ( $i == 0 ) { unset($output);
$error_msg = $error;
} else {
$error_msg = $error_msg.", ".$error;
}
}
$_SESSION['error_msg'] = __('Field "%s" can not be blank.',$error_msg);
} else {
exec ('mktemp -d', $output, $return_var);
$tmpdir = $output[0];
unset($output);
// Create package // Set default values
$pkg = "WEB_TEMPLATE=".$v_web_template."\n"; if (empty($v_web_template)) $v_web_template = 'default';
$pkg .= "PROXY_TEMPLATE=".$v_proxy_template."\n"; if (empty($v_proxy_template)) $v_proxy_template = 'default';
$pkg .= "DNS_TEMPLATE=".$v_dns_template."\n"; if (empty($v_dns_template)) $v_dns_template = 'default';
$pkg .= "WEB_DOMAINS=".$v_web_domains."\n"; if (empty($v_shell)) $v_shell = 'nologin';
$pkg .= "WEB_ALIASES=".$v_web_aliases."\n"; if (empty($v_web_domains)) $v_web_domains = "'0'";
$pkg .= "DNS_DOMAINS=".$v_dns_domains."\n"; if (empty($v_web_aliases)) $v_web_aliases = "'0'";
$pkg .= "DNS_RECORDS=".$v_dns_records."\n"; if (empty($v_dns_domains)) $v_dns_domains = "'0'";
$pkg .= "MAIL_DOMAINS=".$v_mail_domains."\n"; if (empty($v_dns_records)) $v_dns_records = "'0'";
$pkg .= "MAIL_ACCOUNTS=".$v_mail_accounts."\n"; if (empty($v_mail_domains)) $v_mail_domains = "'0'";
$pkg .= "DATABASES=".$v_databases."\n"; if (empty($v_mail_accounts)) $v_mail_accounts = "'0'";
$pkg .= "CRON_JOBS=".$v_cron_jobs."\n"; if (empty($v_databases)) $v_databases = "'0'";
$pkg .= "DISK_QUOTA=".$v_disk_quota."\n"; if (empty($v_cron_jobs)) $v_cron_jobs = "'0'";
$pkg .= "BANDWIDTH=".$v_bandwidth."\n"; if (empty($v_backups)) $v_backups = "'0'";
$pkg .= "NS=".$v_ns."\n"; if (empty($v_disk_quota)) $v_disk_quota = "'0'";
$pkg .= "SHELL=".$v_shell."\n"; if (empty($v_bandwidth)) $v_bandwidth = "'0'";
$pkg .= "BACKUPS=".$v_backups."\n"; if (empty($v_ns1)) $v_ns1 = 'ns1.example.ltd';
$pkg .= "TIME=".$v_time."\n"; if (empty($v_ns2)) $v_ns2 = 'ns2.example.ltd';
$pkg .= "DATE=".$v_date."\n";
// Write package // Display body
$fp = fopen($tmpdir."/".$_POST['v_package'].".pkg", 'w'); include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/add_package.html');
fwrite($fp, $pkg);
fclose($fp);
// Add new package // Flush session messages
if (empty($_SESSION['error_msg'])) { unset($_SESSION['error_msg']);
exec (VESTA_CMD."v-add-user-package ".$tmpdir." ".$v_package, $output, $return_var); unset($_SESSION['ok_msg']);
check_return_code($return_var,$output);
unset($output);
}
// Remove tmpdir
exec ('rm -rf '.$tmpdir, $output, $return_var);
unset($output);
// Check output
if (empty($_SESSION['error_msg'])) {
$_SESSION['ok_msg'] = __('PACKAGE_CREATED_OK',$_POST['v_package'],$_POST['v_package']);
unset($v_package);
}
}
}
exec (VESTA_CMD."v-list-web-templates json", $output, $return_var);
check_error($return_var);
$web_templates = json_decode(implode('', $output), true);
unset($output);
exec (VESTA_CMD."v-list-web-templates-proxy json", $output, $return_var);
check_error($return_var);
$proxy_templates = json_decode(implode('', $output), true);
unset($output);
exec (VESTA_CMD."v-list-dns-templates json", $output, $return_var);
check_error($return_var);
$dns_templates = json_decode(implode('', $output), true);
unset($output);
exec (VESTA_CMD."v-list-sys-shells json", $output, $return_var);
check_error($return_var);
$shells = json_decode(implode('', $output), true);
unset($output);
// Set default values
if (empty($v_web_template)) $v_web_template = 'default';
if (empty($v_proxy_template)) $v_proxy_template = 'default';
if (empty($v_dns_template)) $v_dns_template = 'default';
if (empty($v_shell)) $v_shell = 'nologin';
if (empty($v_web_domains)) $v_web_domains = "'0'";
if (empty($v_web_aliases)) $v_web_aliases = "'0'";
if (empty($v_dns_domains)) $v_dns_domains = "'0'";
if (empty($v_dns_records)) $v_dns_records = "'0'";
if (empty($v_mail_domains)) $v_mail_domains = "'0'";
if (empty($v_mail_accounts)) $v_mail_accounts = "'0'";
if (empty($v_databases)) $v_databases = "'0'";
if (empty($v_cron_jobs)) $v_cron_jobs = "'0'";
if (empty($v_backups)) $v_backups = "'0'";
if (empty($v_disk_quota)) $v_disk_quota = "'0'";
if (empty($v_bandwidth)) $v_bandwidth = "'0'";
if (empty($v_ns1)) $v_ns1 = 'ns1.example.ltd';
if (empty($v_ns2)) $v_ns2 = 'ns2.example.ltd';
include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/add_package.html');
unset($_SESSION['error_msg']);
unset($_SESSION['ok_msg']);
}
// Footer // Footer
include($_SERVER['DOCUMENT_ROOT'].'/templates/footer.html'); include($_SERVER['DOCUMENT_ROOT'].'/templates/footer.html');

View file

@ -1,124 +1,148 @@
<?php <?php
// Init // Init
error_reporting(NULL);
ob_start(); ob_start();
session_start(); session_start();
$TAB = 'USER'; $TAB = 'USER';
include($_SERVER['DOCUMENT_ROOT']."/inc/main.php"); include($_SERVER['DOCUMENT_ROOT']."/inc/main.php");
if (empty($_SESSION['user'])) { // Check user
header("Location: /login/"); if ($_SESSION['user'] != 'admin') {
header("Location: /list/user");
exit;
} }
// Check POST request
if (!empty($_POST['ok'])) {
// Check empty fields
if (empty($_POST['v_username'])) $errors[] = __('user');
if (empty($_POST['v_password'])) $errors[] = __('password');
if (empty($_POST['v_package'])) $errrors[] = __('package');
if (empty($_POST['v_email'])) $errors[] = __('email');
if (empty($_POST['v_fname'])) $errors[] = __('first name');
if (empty($_POST['v_lname'])) $errors[] = __('last name');
if (!empty($errors[0])) {
foreach ($errors as $i => $error) {
if ( $i == 0 ) {
$error_msg = $error;
} else {
$error_msg = $error_msg.", ".$error;
}
}
$_SESSION['error_msg'] = __('Field "%s" can not be blank.',$error_msg);
}
// Check username length
if (empty($_SESSION['error_msg'])) {
$username_len = strlen($_POST['v_username']);
exec (VESTA_CMD."v-list-database-types", $output, $return_var);
check_error($return_var);
if (strpos($output, "mysql") !== false)
$username_maxlen = 16 - 2;
elseif (strpos($output, "postgresql") !== false)
$username_maxlen = 63 - 2;
else
$username_maxlen = true; // Allow any length by default
if ($username_len > $username_maxlen ) $_SESSION['error_msg'] = __('Username is too long.',$error_msg);
}
// Check password length
if (empty($_SESSION['error_msg'])) {
$pw_len = strlen($_POST['v_password']);
if ($pw_len < 6 ) $_SESSION['error_msg'] = __('Password is too short.',$error_msg);
}
// Validate email
if ((empty($_SESSION['error_msg'])) && (!filter_var($_POST['v_email'], FILTER_VALIDATE_EMAIL))) {
$_SESSION['error_msg'] = __('Please enter valid email address.');
}
// Check password length
if (empty($_SESSION['error_msg'])) {
$pw_len = strlen($_POST['v_password']);
if ($pw_len < 6 ) $_SESSION['error_msg'] = __('Password is too short.',$error_msg);
}
// Protect input
$v_username = escapeshellarg($_POST['v_username']);
$v_password = escapeshellarg($_POST['v_password']);
$v_email = escapeshellarg($_POST['v_email']);
$v_package = escapeshellarg($_POST['v_package']);
$v_language = escapeshellarg($_POST['v_language']);
$v_fname = escapeshellarg($_POST['v_fname']);
$v_lname = escapeshellarg($_POST['v_lname']);
$v_notify = $_POST['v_notify'];
// Add user
if (empty($_SESSION['error_msg'])) {
exec (VESTA_CMD."v-add-user ".$v_username." ".$v_password." ".$v_email." ".$v_package." ".$v_fname." ".$v_lname, $output, $return_var);
check_return_code($return_var,$output);
unset($output);
}
// Set language
if (empty($_SESSION['error_msg'])) {
exec (VESTA_CMD."v-change-user-language ".$v_username." ".$v_language, $output, $return_var);
check_return_code($return_var,$output);
unset($output);
}
// Send email to the new user
if ((empty($_SESSION['error_msg'])) && (!empty($v_notify))) {
$to = $_POST['v_notify'];
$subject = _translate($_POST['v_language'],"Welcome to Vesta Control Panel");
$hostname = exec('hostname');
unset($output);
$from = _translate($_POST['v_language'],'MAIL_FROM',$hostname);
if (!empty($_POST['v_fname'])) {
$mailtext = _translate($_POST['v_language'],'GREETINGS_GORDON_FREEMAN',$_POST['v_fname'],$_POST['v_lname']);
} else {
$mailtext = _translate($_POST['v_language'],'GREETINGS');
}
$mailtext .= _translate($_POST['v_language'],'ACCOUNT_READY',$_SERVER['HTTP_HOST'],$_POST['v_username'],$_POST['v_password']);
send_email($to, $subject, $mailtext, $from);
}
// Flush field values on success
if (empty($_SESSION['error_msg'])) {
$_SESSION['ok_msg'] = __('USER_CREATED_OK',$_POST['v_username'],$_POST['v_username']);
$_SESSION['ok_msg'] .= " / <a href=/login/?loginas=".$_POST['v_username'].">" . __('login as') ." ".$_POST['v_username']. "</a>";
unset($v_username);
unset($v_password);
unset($v_email);
unset($v_fname);
unset($v_lname);
unset($v_notify);
}
}
// Header // Header
include($_SERVER['DOCUMENT_ROOT'].'/templates/header.html'); include($_SERVER['DOCUMENT_ROOT'].'/templates/header.html');
// Panel // Panel
top_panel($user,$TAB); top_panel($user,$TAB);
// Are you admin? // List hosting packages
if ($_SESSION['user'] == 'admin') { exec (VESTA_CMD."v-list-user-packages json", $output, $return_var);
if (!empty($_POST['ok'])) { check_error($return_var);
// Check input $data = json_decode(implode('', $output), true);
if (empty($_POST['v_username'])) $errors[] = __('user'); unset($output);
if (empty($_POST['v_password'])) $errors[] = __('password');
if (empty($_POST['v_package'])) $errrors[] = __('package');
if (empty($_POST['v_email'])) $errors[] = __('email');
if (empty($_POST['v_fname'])) $errors[] = __('first name');
if (empty($_POST['v_lname'])) $errors[] = __('last name');
// Protect input // List languages
$v_username = escapeshellarg($_POST['v_username']); exec (VESTA_CMD."v-list-sys-languages json", $output, $return_var);
$v_password = escapeshellarg($_POST['v_password']); $languages = json_decode(implode('', $output), true);
$v_email = escapeshellarg($_POST['v_email']); unset($output);
$v_package = escapeshellarg($_POST['v_package']);
$v_language = escapeshellarg($_POST['v_language']);
$v_fname = escapeshellarg($_POST['v_fname']);
$v_lname = escapeshellarg($_POST['v_lname']);
$v_notify = $_POST['v_notify'];
// Validate email // Display body
if (!filter_var($_POST['v_email'], FILTER_VALIDATE_EMAIL)) { include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/add_user.html');
$_SESSION['error_msg'] = __('Please enter valid email address.');
}
// Check for errors // Flush session messages
if (!empty($errors[0])) { unset($_SESSION['error_msg']);
foreach ($errors as $i => $error) { unset($_SESSION['ok_msg']);
if ( $i == 0 ) {
$error_msg = $error;
} else {
$error_msg = $error_msg.", ".$error;
}
}
$_SESSION['error_msg'] = __('Field "%s" can not be blank.',$error_msg);
}
// Check username length
if (empty($_SESSION['error_msg'])) {
$username_len = strlen($_POST['v_username']);
exec (VESTA_CMD."v-list-database-types", $output, $return_var);
check_error($return_var);
if (strpos($output, "mysql") !== false)
$username_maxlen = 16 - 2;
elseif (strpos($output, "postgresql") !== false)
$username_maxlen = 63 - 2;
else
$username_maxlen = true; // Allow any length by default
if ($username_len > $username_maxlen ) $_SESSION['error_msg'] = __('Username is too long.',$error_msg);
}
// Check password length
if (empty($_SESSION['error_msg'])) {
$pw_len = strlen($_POST['v_password']);
if ($pw_len < 6 ) $_SESSION['error_msg'] = __('Password is too short.',$error_msg);
}
if (empty($_SESSION['error_msg'])) {
exec (VESTA_CMD."v-add-user ".$v_username." ".$v_password." ".$v_email." ".$v_package." ".$v_fname." ".$v_lname, $output, $return_var);
check_return_code($return_var,$output);
unset($output);
if (empty($_SESSION['error_msg'])) {
exec (VESTA_CMD."v-change-user-language ".$v_username." ".$v_language, $output, $return_var);
if (!empty($v_notify)) {
$to = $_POST['v_notify'];
$subject = _translate($_POST['v_language'],"Welcome to Vesta Control Panel");
$hostname = exec('hostname');
$from = _translate($_POST['v_language'],'MAIL_FROM',$hostname);
if (!empty($_POST['v_fname'])) {
$mailtext = _translate($_POST['v_language'],'GREETINGS_GORDON_FREEMAN',$_POST['v_fname'],$_POST['v_lname']);
} else {
$mailtext = _translate($_POST['v_language'],'GREETINGS');
}
$mailtext .= _translate($_POST['v_language'],'ACCOUNT_READY',$_SERVER['HTTP_HOST'],$_POST['v_username'],$_POST['v_password']);
send_email($to, $subject, $mailtext, $from);
}
$_SESSION['ok_msg'] = __('USER_CREATED_OK',$_POST[v_username],$_POST[v_username]);
$_SESSION['ok_msg'] .= " / <a href=/login/?loginas=".$_POST[v_username].">" . __('login as') ." ".$_POST[v_username]. "</a>";
unset($v_username);
unset($v_password);
unset($v_email);
unset($v_fname);
unset($v_lname);
unset($v_notify);
}
unset($output);
}
}
exec (VESTA_CMD."v-list-user-packages json", $output, $return_var);
check_error($return_var);
$data = json_decode(implode('', $output), true);
unset($output);
exec (VESTA_CMD."v-list-sys-languages json", $output, $return_var);
$languages = json_decode(implode('', $output), true);
unset($output);
include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/add_user.html');
unset($_SESSION['error_msg']);
unset($_SESSION['ok_msg']);
}
// Footer // Footer
include($_SERVER['DOCUMENT_ROOT'].'/templates/footer.html'); include($_SERVER['DOCUMENT_ROOT'].'/templates/footer.html');

View file

@ -4,277 +4,350 @@ error_reporting(NULL);
ob_start(); ob_start();
session_start(); session_start();
$TAB = 'WEB'; $TAB = 'WEB';
include($_SERVER['DOCUMENT_ROOT']."/inc/main.php"); include($_SERVER['DOCUMENT_ROOT']."/inc/main.php");
// Check POST request
if (!empty($_POST['ok'])) {
// Check for empty fields
if (empty($_POST['v_domain'])) $errors[] = __('domain');
if (empty($_POST['v_ip'])) $errors[] = __('ip');
if ((!empty($_POST['v_ssl'])) && (empty($_POST['v_ssl_crt']))) $errors[] = __('ssl certificate');
if ((!empty($_POST['v_ssl'])) && (empty($_POST['v_ssl_key']))) $errors[] = __('ssl key');
if (!empty($errors[0])) {
foreach ($errors as $i => $error) {
if ( $i == 0 ) {
$error_msg = $error;
} else {
$error_msg = $error_msg.", ".$error;
}
}
$_SESSION['error_msg'] = __('Field "%s" can not be blank.',$error_msg);
}
// Check stats password length
if ((!empty($v_stats)) && (empty($_SESSION['error_msg']))) {
if (!empty($_POST['v_stats_user'])) {
$pw_len = strlen($_POST['v_stats_password']);
if ($pw_len < 6 ) $_SESSION['error_msg'] = __('Password is too short.',$error_msg);
}
}
// Default proxy extention list
$v_proxy_ext = 'jpeg, jpg, png, gif, bmp, ico, svg, tif, tiff, css, js, htm, html, ttf, ';
$v_proxy_ext .= 'otf, webp, woff, txt, csv, rtf, doc, docx, xls, xlsx, ppt, pptx, odf, ';
$v_proxy_ext .= 'odp, ods, odt, pdf, psd, ai, eot, eps, ps, zip, tar, tgz, gz, rar, ';
$v_proxy_ext .= 'bz2, 7z, aac, m4a, mp3, mp4, ogg, wav, wma, 3gp, avi, flv, m4v, mkv, ';
$v_proxy_ext .= 'mov, mp4, mpeg, mpg, wmv, exe, iso, dmg, swf';
// Set advanced option checkmark
if (empty($_POST['v_proxy'])) $v_adv = 'yes';
if (!empty($_POST['v_ftp'])) $v_adv = 'yes';
if ($_POST['v_proxy_ext'] != $v_proxy_ext) $v_adv = 'yes';
// Set domain name to lowercase and remove www prefix
$v_domain = preg_replace("/^www\./i", "", $_POST['v_domain']);
$v_domain = escapeshellarg($v_domain);
$v_domain = strtolower($v_domain);
// Prepare domain values
$v_ip = escapeshellarg($_POST['v_ip']);
if ((!empty($_POST['v_aliases'])) && ($_POST['v_aliases'] != 'www.'.$_POST['v_domain'])) $v_adv = 'yes';
if ((!empty($_POST['v_ssl'])) || (!empty($_POST['v_elog']))) $v_adv = 'yes';
if ((!empty($_POST['v_ssl_crt'])) || (!empty($_POST['v_ssl_key']))) $v_adv = 'yes';
if ((!empty($_POST['v_ssl_ca'])) || ($_POST['v_stats'] != 'none')) $v_adv = 'yes';
if (!empty($v_domain)) $v_ftp_user_prepath .= $v_domain;
if (empty($_POST['v_dns'])) $v_dns = 'off';
if (empty($_POST['v_mail'])) $v_mail = 'off';
if (empty($_POST['v_proxy'])) $v_proxy = 'off';
$v_aliases = $_POST['v_aliases'];
$v_elog = $_POST['v_elog'];
$v_ssl = $_POST['v_ssl'];
$v_ssl_crt = $_POST['v_ssl_crt'];
$v_ssl_key = $_POST['v_ssl_key'];
$v_ssl_ca = $_POST['v_ssl_ca'];
$v_ssl_home = $data[$v_domain]['SSL_HOME'];
$v_stats = escapeshellarg($_POST['v_stats']);
$v_stats_user = $data[$v_domain]['STATS_USER'];
$v_stats_password = $data[$v_domain]['STATS_PASSWORD'];
$v_proxy_ext = preg_replace("/\n/", " ", $_POST['v_proxy_ext']);
$v_proxy_ext = preg_replace("/,/", " ", $v_proxy_ext);
$v_proxy_ext = preg_replace('/\s+/', ' ',$v_proxy_ext);
$v_proxy_ext = trim($v_proxy_ext);
$v_proxy_ext = str_replace(' ', ", ", $v_proxy_ext);
$v_ftp = $_POST['v_ftp'];
$v_ftp_user = $_POST['v_ftp_user'];
$v_ftp_password = $_POST['v_ftp_password'];
$v_ftp_email = $_POST['v_ftp_email'];
// Add web domain
if (empty($_SESSION['error_msg'])) {
exec (VESTA_CMD."v-add-web-domain ".$user." ".$v_domain." ".$v_ip." 'no'", $output, $return_var);
check_return_code($return_var,$output);
unset($output);
$domain_added = empty($_SESSION['error_msg']);
}
// Add DNS domain
if (($_POST['v_dns'] == 'on') && (empty($_SESSION['error_msg']))) {
exec (VESTA_CMD."v-add-dns-domain ".$user." ".$v_domain." ".$v_ip, $output, $return_var);
check_return_code($return_var,$output);
unset($output);
}
// Add mail domain
if (($_POST['v_mail'] == 'on') && (empty($_SESSION['error_msg']))) {
exec (VESTA_CMD."v-add-mail-domain ".$user." ".$v_domain, $output, $return_var);
check_return_code($return_var,$output);
unset($output);
}
// Add domain aliases
if ((!empty($_POST['v_aliases'])) && (empty($_SESSION['error_msg']))) {
$valiases = preg_replace("/\n/", " ", $_POST['v_aliases']);
$valiases = preg_replace("/,/", " ", $valiases);
$valiases = preg_replace('/\s+/', ' ',$valiases);
$valiases = trim($valiases);
$aliases = explode(" ", $valiases);
foreach ($aliases as $alias) {
if ($alias == 'www.'.$_POST['v_domain']) {
$www_alias = 'yes';
} else {
$alias = escapeshellarg($alias);
if (empty($_SESSION['error_msg'])) {
exec (VESTA_CMD."v-add-web-domain-alias ".$user." ".$v_domain." ".$alias." 'no'", $output, $return_var);
check_return_code($return_var,$output);
unset($output);
}
if (($_POST['v_dns'] == 'on') && (empty($_SESSION['error_msg']))) {
exec (VESTA_CMD."v-add-dns-on-web-alias ".$user." ".$v_domain." ".$alias." 'no'", $output, $return_var);
check_return_code($return_var,$output);
unset($output);
}
}
}
}
// Delete www. alias if it wasn't found
if ((empty($www_alias)) && (empty($_SESSION['error_msg']))) {
$alias = preg_replace("/^www./i", "", $_POST['v_domain']);
$alias = 'www.'.$alias;
$alias = escapeshellarg($alias);
exec (VESTA_CMD."v-delete-web-domain-alias ".$user." ".$v_domain." ".$alias." 'no'", $output, $return_var);
check_return_code($return_var,$output);
unset($output);
}
// Add proxy support
if (($_POST['v_proxy'] == 'on') && (empty($_SESSION['error_msg']))) {
$ext = str_replace(' ', '', $v_proxy_ext);
$ext = escapeshellarg($ext);
exec (VESTA_CMD."v-add-web-domain-proxy ".$user." ".$v_domain." '' ".$ext." 'no'", $output, $return_var);
check_return_code($return_var,$output);
unset($output);
}
// Add SSL certificates
if ((!empty($_POST['v_ssl'])) && (empty($_SESSION['error_msg']))) {
exec ('mktemp -d', $output, $return_var);
$tmpdir = $output[0];
unset($output);
// Save certificate
if (!empty($_POST['v_ssl_crt'])) {
$fp = fopen($tmpdir."/".$_POST['v_domain'].".crt", 'w');
fwrite($fp, str_replace("\r\n", "\n", $_POST['v_ssl_crt']));
fwrite($fp, "\n");
fclose($fp);
}
// Save private key
if (!empty($_POST['v_ssl_key'])) {
$fp = fopen($tmpdir."/".$_POST['v_domain'].".key", 'w');
fwrite($fp, str_replace("\r\n", "\n", $_POST['v_ssl_key']));
fwrite($fp, "\n");
fclose($fp);
}
// Save CA bundle
if (!empty($_POST['v_ssl_ca'])) {
$fp = fopen($tmpdir."/".$_POST['v_domain'].".ca", 'w');
fwrite($fp, str_replace("\r\n", "\n", $_POST['v_ssl_ca']));
fwrite($fp, "\n");
fclose($fp);
}
$v_ssl_home = escapeshellarg($_POST['v_ssl_home']);
exec (VESTA_CMD."v-add-web-domain-ssl ".$user." ".$v_domain." ".$tmpdir." ".$v_ssl_home." 'no'", $output, $return_var);
check_return_code($return_var,$output);
unset($output);
}
// Add web stats
if ((!empty($_POST['v_stats'])) && ($_POST['v_stats'] != 'none' ) && (empty($_SESSION['error_msg']))) {
$v_stats = escapeshellarg($_POST['v_stats']);
exec (VESTA_CMD."v-add-web-domain-stats ".$user." ".$v_domain." ".$v_stats, $output, $return_var);
check_return_code($return_var,$output);
unset($output);
}
// Add web stats password
if ((!empty($_POST['v_stats_user'])) && (empty($_SESSION['error_msg']))) {
$v_stats_user = escapeshellarg($_POST['v_stats_user']);
$v_stats_password = escapeshellarg($_POST['v_stats_password']);
exec (VESTA_CMD."v-add-web-domain-stats-user ".$user." ".$v_domain." ".$v_stats_user." ".$v_stats_password, $output, $return_var);
check_return_code($return_var,$output);
unset($output);
}
// Restart DNS server
if (($_POST['v_dns'] == 'on') && (empty($_SESSION['error_msg']))) {
exec (VESTA_CMD."v-restart-dns", $output, $return_var);
check_return_code($return_var,$output);
unset($output);
}
// Restart web server
if (empty($_SESSION['error_msg'])) {
exec (VESTA_CMD."v-restart-web", $output, $return_var);
check_return_code($return_var,$output);
unset($output);
}
// Restart proxy server
if (($_POST['v_proxy'] == 'on') && (empty($_SESSION['error_msg']))) {
exec (VESTA_CMD."v-restart-proxy", $output, $return_var);
check_return_code($return_var,$output);
unset($output);
}
// Add FTP
if ((!empty($_POST['v_ftp'])) && (empty($_SESSION['error_msg']))) {
$v_ftp_users_updated = array();
foreach ($_POST['v_ftp_user'] as $i => $v_ftp_user_data) {
if ($v_ftp_user_data['is_new'] == 1) {
if ((!empty($v_ftp_user_data['v_ftp_email'])) && (!filter_var($v_ftp_user_data['v_ftp_email'], FILTER_VALIDATE_EMAIL))) $_SESSION['error_msg'] = __('Please enter valid email address.');
if (empty($v_ftp_user_data['v_ftp_user'])) $errors[] = 'ftp user';
if (empty($v_ftp_user_data['v_ftp_password'])) $errors[] = 'ftp user password';
if (!empty($errors[0])) {
foreach ($errors as $i => $error) {
if ( $i == 0 ) {
$error_msg = $error;
} else {
$error_msg = $error_msg.", ".$error;
}
}
$_SESSION['error_msg'] = __('Field "%s" can not be blank.',$error_msg);
}
// Validate email
if ((!empty($v_ftp_user_data['v_ftp_email'])) && (!filter_var($v_ftp_user_data['v_ftp_email'], FILTER_VALIDATE_EMAIL))) {
$_SESSION['error_msg'] = __('Please enter valid email address.');
}
// Check ftp password length
if ((!empty($v_ftp_user_data['v_ftp']))) {
if (!empty($v_ftp_user_data['v_ftp_user'])) {
$pw_len = strlen($v_ftp_user_data['v_ftp_password']);
if ($pw_len < 6 ) $_SESSION['error_msg'] = __('Password is too short.',$error_msg);
}
}
$v_ftp_user_data['v_ftp_user'] = preg_replace("/^".$user."_/i", "", $v_ftp_user_data['v_ftp_user']);
$v_ftp_username = $v_ftp_user_data['v_ftp_user'];
$v_ftp_username_full = $user . '_' . $v_ftp_user_data['v_ftp_user'];
$v_ftp_user = escapeshellarg($v_ftp_user_data['v_ftp_user']);
$v_ftp_password = escapeshellarg($v_ftp_user_data['v_ftp_password']);
if ($domain_added) {
exec (VESTA_CMD."v-add-web-domain-ftp ".$user." ".$v_domain." ".$v_ftp_username." ".$v_ftp_password . " " . $v_ftp_user_data['v_ftp_path'], $output, $return_var);
check_return_code($return_var,$output);
unset($output);
if ((!empty($v_ftp_user_data['v_ftp_email'])) && (empty($_SESSION['error_msg']))) {
$to = $v_ftp_user_data['v_ftp_email'];
$subject = __("FTP login credentials");
$from = __('MAIL_FROM',$_POST['v_domain']);
$mailtext = __('FTP_ACCOUNT_READY',$_POST['v_domain'],$user,$v_ftp_user_data['v_ftp_user'],$v_ftp_user_data['v_ftp_password']);
send_email($to, $subject, $mailtext, $from);
unset($v_ftp_email);
}
} else {
$return_var = -1;
}
if ($return_var == 0) {
$v_ftp_password = "••••••••";
$v_ftp_user_data['is_new'] = 0;
} else {
$v_ftp_user_data['is_new'] = 1;
}
$v_ftp_username = preg_replace("/^".$user."_/", "", $v_ftp_user_data['v_ftp_user']);
$v_ftp_users_updated[] = array(
'is_new' => $v_ftp_user_data['is_new'],
'v_ftp_user' => $return_var == 0 ? $v_ftp_username_full : $v_ftp_username,
'v_ftp_password' => $v_ftp_password,
'v_ftp_path' => $v_ftp_user_data['v_ftp_path'],
'v_ftp_email' => $v_ftp_user_data['v_ftp_email'],
'v_ftp_pre_path' => $v_ftp_user_prepath
);
continue;
}
}
if (!empty($_SESSION['error_msg']) && $domain_added) {
$_SESSION['ok_msg'] = __('WEB_DOMAIN_CREATED_OK',$_POST[v_domain],$_POST[v_domain]);
$_SESSION['flash_error_msg'] = $_SESSION['error_msg'];
$url = '/edit/web/?domain='.strtolower(preg_replace("/^www\./i", "", $_POST['v_domain']));
header('Location: ' . $url);
exit;
}
}
// Flush field values on success
if (empty($_SESSION['error_msg'])) {
$_SESSION['ok_msg'] = __('WEB_DOMAIN_CREATED_OK',$_POST[v_domain],$_POST[v_domain]);
unset($v_domain);
unset($v_aliases);
unset($v_ssl);
unset($v_ssl_crt);
unset($v_ssl_key);
unset($v_ssl_ca);
unset($v_stats_user);
unset($v_stats_password);
unset($v_ftp);
}
}
// Header // Header
include($_SERVER['DOCUMENT_ROOT'].'/templates/header.html'); include($_SERVER['DOCUMENT_ROOT'].'/templates/header.html');
// Panel // Panel
top_panel($user,$TAB); top_panel($user,$TAB);
// Define user variables
$v_ftp_user_prepath = $panel[$user]['HOME'] . "/web";
$v_ftp_email = $panel[$user]['CONTACT']; $v_ftp_email = $panel[$user]['CONTACT'];
if (!empty($_POST['ok'])) {
// Check input
if (empty($_POST['v_domain'])) $errors[] = __('domain');
if (empty($_POST['v_ip'])) $errors[] = __('ip');
if ((!empty($_POST['v_ssl'])) && (empty($_POST['v_ssl_crt']))) $errors[] = __('ssl certificate');
if ((!empty($_POST['v_ssl'])) && (empty($_POST['v_ssl_key']))) $errors[] = __('ssl key');
if ((!empty($_POST['v_aliases'])) && ($_POST['v_aliases'] != 'www.'.$_POST['v_domain'])) $v_adv = 'yes';
if ((!empty($_POST['v_ssl'])) || (!empty($_POST['v_elog']))) $v_adv = 'yes';
if ((!empty($_POST['v_ssl_crt'])) || (!empty($_POST['v_ssl_key']))) $v_adv = 'yes';
if ((!empty($_POST['v_ssl_ca'])) || ($_POST['v_stats'] != 'none')) $v_adv = 'yes';
if (empty($_POST['v_proxy'])) $v_adv = 'yes';
if (!empty($_POST['v_ftp'])) $v_adv = 'yes';
$v_proxy_ext = 'jpeg, jpg, png, gif, bmp, ico, svg, tif, tiff, css, js, htm, html, ttf,'; // List IP addresses
$v_proxy_ext .= 'otf, webp, woff, txt, csv, rtf, doc, docx, xls, xlsx, ppt, pptx, odf, '; exec (VESTA_CMD."v-list-user-ips ".$user." json", $output, $return_var);
$v_proxy_ext .= 'odp, ods, odt, pdf, psd, ai, eot, eps, ps, zip, tar, tgz, gz, rar, '; $ips = json_decode(implode('', $output), true);
$v_proxy_ext .= 'bz2, 7z, aac, m4a, mp3, mp4, ogg, wav, wma, 3gp, avi, flv, m4v, mkv, '; unset($output);
$v_proxy_ext .= 'mov, mp4, mpeg, mpg, wmv, exe, iso, dmg, swf';
if ($_POST['v_proxy_ext'] != $v_proxy_ext) $v_adv = 'yes';
// Protect input // List web stat engines
$v_domain = preg_replace("/^www\./i", "", $_POST['v_domain']); exec (VESTA_CMD."v-list-web-stats json", $output, $return_var);
$v_domain = escapeshellarg($v_domain); $stats = json_decode(implode('', $output), true);
$v_domain = strtolower($v_domain); unset($output);
$v_ip = escapeshellarg($_POST['v_ip']);
if (empty($_POST['v_dns'])) $v_dns = 'off';
if (empty($_POST['v_mail'])) $v_mail = 'off';
if (empty($_POST['v_proxy'])) $v_proxy = 'off';
$v_aliases = $_POST['v_aliases'];
$v_elog = $_POST['v_elog'];
$v_ssl = $_POST['v_ssl'];
$v_ssl_crt = $_POST['v_ssl_crt'];
$v_ssl_key = $_POST['v_ssl_key'];
$v_ssl_ca = $_POST['v_ssl_ca'];
$v_ssl_home = $data[$v_domain]['SSL_HOME'];
$v_stats = escapeshellarg($_POST['v_stats']);
$v_stats_user = $data[$v_domain]['STATS_USER'];
$v_stats_password = $data[$v_domain]['STATS_PASSWORD'];
$v_proxy_ext = preg_replace("/\n/", " ", $_POST['v_proxy_ext']);
$v_proxy_ext = preg_replace("/,/", " ", $v_proxy_ext);
$v_proxy_ext = preg_replace('/\s+/', ' ',$v_proxy_ext);
$v_proxy_ext = trim($v_proxy_ext);
$v_proxy_ext = str_replace(' ', ", ", $v_proxy_ext);
$v_ftp = $_POST['v_ftp'];
$v_ftp_user = $_POST['v_ftp_user'];
$v_ftp_password = $_POST['v_ftp_password'];
$v_ftp_email = $_POST['v_ftp_email'];
// Validate email // Display body
if ((!empty($_POST['v_ftp_email'])) && (!filter_var($_POST['v_ftp_email'], FILTER_VALIDATE_EMAIL))) { include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/add_web.html');
$_SESSION['error_msg'] = __('Please enter valid email address.');
}
// Check ftp password length // Flush session messages
if ((!empty($_POST['v_ftp'])) && (empty($_SESSION['error_msg']))) { unset($_SESSION['error_msg']);
if (!empty($_POST['v_ftp_user'])) { unset($_SESSION['ok_msg']);
$pw_len = strlen($_POST['v_ftp_password']);
if ($pw_len < 6 ) $_SESSION['error_msg'] = __('Password is too short.',$error_msg);
}
}
// Check stats password length
if ((!empty($v_stats)) && (empty($_SESSION['error_msg']))) {
if (!empty($_POST['v_stats_user'])) {
$pw_len = strlen($_POST['v_stats_password']);
if ($pw_len < 6 ) $_SESSION['error_msg'] = __('Password is too short.',$error_msg);
}
}
// Check for errors
if (!empty($errors[0])) {
foreach ($errors as $i => $error) {
if ( $i == 0 ) {
$error_msg = $error;
} else {
$error_msg = $error_msg.", ".$error;
}
}
$_SESSION['error_msg'] = __('Field "%s" can not be blank.',$error_msg);
}
if (empty($_SESSION['error_msg'])) {
// Add WEB
exec (VESTA_CMD."v-add-web-domain ".$user." ".$v_domain." ".$v_ip." 'no'", $output, $return_var);
check_return_code($return_var,$output);
unset($output);
// Add DNS
if (($_POST['v_dns'] == 'on') && (empty($_SESSION['error_msg']))) {
exec (VESTA_CMD."v-add-dns-domain ".$user." ".$v_domain." ".$v_ip, $output, $return_var);
check_return_code($return_var,$output);
unset($output);
}
// Add Mail
if (($_POST['v_mail'] == 'on') && (empty($_SESSION['error_msg']))) {
exec (VESTA_CMD."v-add-mail-domain ".$user." ".$v_domain, $output, $return_var);
check_return_code($return_var,$output);
unset($output);
}
// Add Aliases
if ((!empty($_POST['v_aliases'])) && (empty($_SESSION['error_msg']))) {
$valiases = preg_replace("/\n/", " ", $_POST['v_aliases']);
$valiases = preg_replace("/,/", " ", $valiases);
$valiases = preg_replace('/\s+/', ' ',$valiases);
$valiases = trim($valiases);
$aliases = explode(" ", $valiases);
foreach ($aliases as $alias) {
if ($alias == 'www.'.$_POST['v_domain']) {
$www_alias = 'yes';
} else {
$alias = escapeshellarg($alias);
if (empty($_SESSION['error_msg'])) {
exec (VESTA_CMD."v-add-web-domain-alias ".$user." ".$v_domain." ".$alias." 'no'", $output, $return_var);
check_return_code($return_var,$output);
}
unset($output);
if (($_POST['v_dns'] == 'on') && (empty($_SESSION['error_msg']))) {
exec (VESTA_CMD."v-add-dns-on-web-alias ".$user." ".$v_domain." ".$alias." 'no'", $output, $return_var);
check_return_code($return_var,$output);
unset($output);
}
}
}
}
if ((empty($www_alias)) && (empty($_SESSION['error_msg']))) {
$alias = preg_replace("/^www./i", "", $_POST['v_domain']);
$alias = 'www.'.$alias;
$alias = escapeshellarg($alias);
exec (VESTA_CMD."v-delete-web-domain-alias ".$user." ".$v_domain." ".$alias." 'no'", $output, $return_var);
check_return_code($return_var,$output);
}
// Add proxy
if (($_POST['v_proxy'] == 'on') && (empty($_SESSION['error_msg']))) {
$ext = str_replace(' ', '', $v_proxy_ext);
$ext = escapeshellarg($ext);
exec (VESTA_CMD."v-add-web-domain-proxy ".$user." ".$v_domain." '' ".$ext." 'no'", $output, $return_var);
check_return_code($return_var,$output);
unset($output);
}
// Add SSL
if (!empty($_POST['v_ssl'])) {
exec ('mktemp -d', $output, $return_var);
$tmpdir = $output[0];
// Certificate
if (!empty($_POST['v_ssl_crt'])) {
$fp = fopen($tmpdir."/".$_POST['v_domain'].".crt", 'w');
fwrite($fp, str_replace("\r\n", "\n", $_POST['v_ssl_crt']));
fwrite($fp, "\n");
fclose($fp);
}
// Key
if (!empty($_POST['v_ssl_key'])) {
$fp = fopen($tmpdir."/".$_POST['v_domain'].".key", 'w');
fwrite($fp, str_replace("\r\n", "\n", $_POST['v_ssl_key']));
fwrite($fp, "\n");
fclose($fp);
}
// CA
if (!empty($_POST['v_ssl_ca'])) {
$fp = fopen($tmpdir."/".$_POST['v_domain'].".ca", 'w');
fwrite($fp, str_replace("\r\n", "\n", $_POST['v_ssl_ca']));
fwrite($fp, "\n");
fclose($fp);
}
$v_ssl_home = escapeshellarg($_POST['v_ssl_home']);
exec (VESTA_CMD."v-add-web-domain-ssl ".$user." ".$v_domain." ".$tmpdir." ".$v_ssl_home." 'no'", $output, $return_var);
check_return_code($return_var,$output);
unset($output);
}
// Add WebStats
if ((!empty($_POST['v_stats'])) && ($_POST['v_stats'] != 'none' ) && (empty($_SESSION['error_msg']))) {
$v_stats = escapeshellarg($_POST['v_stats']);
exec (VESTA_CMD."v-add-web-domain-stats ".$user." ".$v_domain." ".$v_stats, $output, $return_var);
check_return_code($return_var,$output);
unset($output);
if ((!empty($_POST['v_stats_user'])) && (empty($_SESSION['error_msg']))) {
$v_stats_user = escapeshellarg($_POST['v_stats_user']);
$v_stats_password = escapeshellarg($_POST['v_stats_password']);
exec (VESTA_CMD."v-add-web-domain-stats-user ".$user." ".$v_domain." ".$v_stats_user." ".$v_stats_password, $output, $return_var);
check_return_code($return_var,$output);
unset($v_stats_user);
unset($v_stats_password);
unset($output);
}
}
// Add FTP
if ((!empty($_POST['v_ftp'])) && (empty($_SESSION['error_msg']))) {
$v_ftp_user = escapeshellarg($_POST['v_ftp_user']);
$v_ftp_password = escapeshellarg($_POST['v_ftp_password']);
exec (VESTA_CMD."v-add-web-domain-ftp ".$user." ".$v_domain." ".$v_ftp_user." ".$v_ftp_password, $output, $return_var);
check_return_code($return_var,$output);
if (empty($_SESSION['error_msg'])) {
if (!empty($v_ftp_email)) {
$to = $_POST['v_ftp_email'];
$subject = __("FTP login credentials");
$hostname = exec('hostname');
$from = __('MAIL_FROM',$hostname);
$mailtext .= __('FTP_ACCOUNT_READY',$_POST['v_domain'],$user,$_POST['v_ftp_user'],$_POST['v_ftp_password']);
send_email($to, $subject, $mailtext, $from);
}
}
unset($v_ftp);
unset($v_ftp_user);
unset($v_ftp_password);
unset($output);
}
if (($_POST['v_dns'] == 'on') && (empty($_SESSION['error_msg']))) {
exec (VESTA_CMD."v-restart-dns", $output, $return_var);
check_return_code($return_var,$output);
unset($output);
}
if (empty($_SESSION['error_msg'])) {
exec (VESTA_CMD."v-restart-web", $output, $return_var);
check_return_code($return_var,$output);
unset($output);
}
if (empty($_SESSION['error_msg'])) {
exec (VESTA_CMD."v-restart-proxy", $output, $return_var);
check_return_code($return_var,$output);
unset($output);
}
if (empty($_SESSION['error_msg'])) {
unset($output);
$_SESSION['ok_msg'] = __('WEB_DOMAIN_CREATED_OK',$_POST[v_domain],$_POST[v_domain]);
unset($v_domain);
unset($v_aliases);
unset($v_ssl);
unset($v_ssl_crt);
unset($v_ssl_key);
unset($v_ssl_ca);
}
}
}
exec (VESTA_CMD."v-list-user-ips ".$user." json", $output, $return_var);
$ips = json_decode(implode('', $output), true);
unset($output);
exec (VESTA_CMD."v-list-web-stats json", $output, $return_var);
$stats = json_decode(implode('', $output), true);
unset($output);
include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/add_web.html');
unset($_SESSION['error_msg']);
unset($_SESSION['ok_msg']);
//}
// Footer // Footer
include($_SERVER['DOCUMENT_ROOT'].'/templates/footer.html'); include($_SERVER['DOCUMENT_ROOT'].'/templates/footer.html');

View file

@ -27,6 +27,7 @@ if (isset($_POST['user']) || isset($_POST['hash'])) {
exit; exit;
} }
// Prepare arguments // Prepare arguments
if (isset($_POST['cmd'])) $cmd = escapeshellarg($_POST['cmd']); if (isset($_POST['cmd'])) $cmd = escapeshellarg($_POST['cmd']);
if (isset($_POST['arg1'])) $arg1 = escapeshellarg($_POST['arg1']); if (isset($_POST['arg1'])) $arg1 = escapeshellarg($_POST['arg1']);
@ -39,8 +40,31 @@ if (isset($_POST['user']) || isset($_POST['hash'])) {
if (isset($_POST['arg8'])) $arg8 = escapeshellarg($_POST['arg8']); if (isset($_POST['arg8'])) $arg8 = escapeshellarg($_POST['arg8']);
if (isset($_POST['arg9'])) $arg9 = escapeshellarg($_POST['arg9']); if (isset($_POST['arg9'])) $arg9 = escapeshellarg($_POST['arg9']);
// Run query // Build query
exec (VESTA_CMD.$cmd." ".$arg1." ".$arg2." ".$arg3." ".$arg4." ".$arg5." ".$arg6." ".$arg7." ".$arg8." ".$arg9, $output, $return_var); $cmdquery = VESTA_CMD.$cmd." ";
if(!empty($arg1)){
$cmdquery = $cmdquery.$arg1." "; }
if(!empty($arg2)){
$cmdquery = $cmdquery.$arg2." "; }
if(!empty($arg3)){
$cmdquery = $cmdquery.$arg3." "; }
if(!empty($arg4)){
$cmdquery = $cmdquery.$arg4." "; }
if(!empty($arg5)){
$cmdquery = $cmdquery.$arg5." "; }
if(!empty($arg6)){
$cmdquery = $cmdquery.$arg6." "; }
if(!empty($arg7)){
$cmdquery = $cmdquery.$arg7." "; }
if(!empty($arg8)){
$cmdquery = $cmdquery.$arg8." "; }
if(!empty($arg9)){
$cmdquery = $cmdquery.$arg9; }
// Run query
exec ($cmdquery, $output, $return_var);
if ((!empty($_POST['returncode'])) && ($_POST['returncode'] == 'yes')) { if ((!empty($_POST['returncode'])) && ($_POST['returncode'] == 'yes')) {
echo $return_var; echo $return_var;
} else { } else {

View file

@ -35,7 +35,7 @@
----------------------------------*/ ----------------------------------*/
/* Overlays */ /* Overlays */
.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: #e6e6e6;} .ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: #999;}
/*! /*!
@ -58,7 +58,7 @@
.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Arial, Helvetica, sans-serif; font-size: 10pt; } .ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Arial, Helvetica, sans-serif; font-size: 10pt; }
.ui-widget-content { border: 1px solid #aaaaaa; color: #222222; } .ui-widget-content { border: 1px solid #aaaaaa; color: #222222; }
.ui-widget-content a { color: #222222; } .ui-widget-content a { color: #222222; }
.ui-widget-header { background: #505050; color: #444; font-size: 10pt; font-weight: bold;} .ui-widget-header { background: #777; color: #444; font-size: 10pt; font-weight: bold;}
.ui-widget-header a { color: #222222; } .ui-widget-header a { color: #222222; }
/* Interaction Cues /* Interaction Cues
@ -75,14 +75,14 @@
/* Icons /* Icons
----------------------------------*/ ----------------------------------*/
/* states and images */ /* states and images
.ui-icon { width: 16px; height: 16px; } .ui-icon { width: 16px; height: 16px; }
.ui-state-default .ui-icon { background-image: url(images/ui-icons_888888_256x240.png); } .ui-state-default .ui-icon { background-image: url(images/ui-icons_888888_256x240.png); }
.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); } .ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); }
.ui-state-active .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); } .ui-state-active .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); }
.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png); } .ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png); }
.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png); } .ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png); }
*/
/* positioning */ /* positioning */
.ui-icon-carat-1-n { background-position: 0 0; } .ui-icon-carat-1-n { background-position: 0 0; }
@ -376,8 +376,8 @@
* http://docs.jquery.com/UI/Button#theming * http://docs.jquery.com/UI/Button#theming
*/ */
.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .10pt; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */ .ui-button { display: inline-block; position: relative; padding: 0; margin-right: .10pt; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */
.ui-button { filter:chroma(color=#000000); cursor: pointer; color: #555; background-color: #ececec; border: 1px solid #e0e0e0; border-radius: 3px 3px 3px 3px; font-weight: bold; font-size: 14px; padding: 2px 16px; width: 108px; height: 34px; } .ui-button { filter:chroma(color=#000000); cursor: pointer; color: #fff; background-color: #f79b44; border: 1px solid #f79b44; border-radius: 3px 3px 3px 3px; font-weight: bold; font-size: 14px; padding: 2px 16px; width: 108px; height: 34px; }
.ui-button:hover { border: 1px solid #f79b44; background-color: #f79b44; color: #fff;} .ui-button:hover { border: 1px solid #9e9e9e; background-color: #9e9e9e; color: #fff;}
.ui-button:active { background-color: #ccc; color: #fff; border: 1px solid #ccc; } .ui-button:active { background-color: #ccc; color: #fff; border: 1px solid #ccc; }
.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */ .ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */
button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */ button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */

View file

@ -1,6 +1,6 @@
body { body {
font-family: Arial, Helvetica, sans-serif; font-family: Arial, Helvetica, sans-serif;
background-color: #e5e5e5; background-color: #75b0c5;
margin: 0; margin: 0;
padding: 0; padding: 0;
border: 0; border: 0;
@ -19,6 +19,9 @@ td {
padding: 0; padding: 0;
} }
label {
cursor: pointer;
}
.hidden { .hidden {
display: none; display: none;
@ -26,13 +29,33 @@ td {
.top { .top {
width: 1000px; width: 1000px;
position: fixed; background: #fff;
border-bottom: 1px solid #e5e5e5;
} }
.top.small .submenu{
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.10);
}
.top .nav-logo .logo-container{
background-color: #fff;
width: 167px;
}
.top.small-logo .nav-logo .logo-container{
position: fixed;
}
.top.small-logo .nav-logo img{
margin: 29px 0 -4px 10px;
padding: 0 0 10px;
}
.top-menu { .top-menu {
height: 24px; height: 24px;
background-color: #505050; background-color: #505050;
width: 1000px;
position: fixed;
z-index: 10;
} }
.top-link { .top-link {
@ -51,9 +74,9 @@ td {
background-color: #f79b44; background-color: #f79b44;
} }
.top-link:active{ .top-link:active {
color: #2361a1; color: #333;
background-color: #f1f1f1; background-color: #eee;
} }
.top-selected-link { .top-selected-link {
@ -65,7 +88,7 @@ td {
line-height: 22px; line-height: 22px;
padding: 0 20px 2px; padding: 0 20px 2px;
color: #333; color: #333;
background-color: #f1f1f1; background-color: #eee;
} }
.top-selected-link:hover { .top-selected-link:hover {
@ -75,7 +98,7 @@ td {
.top-selected-link:active { .top-selected-link:active {
color: #2361a1; color: #2361a1;
background-color: #f1f1f1; background-color: #eee;
} }
.top-user { .top-user {
@ -93,7 +116,7 @@ td {
color: #fff; color: #fff;
} }
.top-user:active{ .top-user:active {
color: #fff; color: #fff;
background-color: #f79b44; background-color: #f79b44;
} }
@ -120,12 +143,21 @@ td {
background-color: #999; background-color: #999;
} }
.main-menu{
display: block;
float: left;
margin-bottom: 1px;
}
.nav-logo { .nav-logo {
float: left; float: left;
height: 111px; height: 139px;
width: 167px; width: 167px;
margin: 0; margin: 0 0 0px;
border-bottom: 1px solid #e5e5e5; }
.nav-logo img{
margin: 56px 0 0 10px;
} }
.nav-lnk { .nav-lnk {
@ -145,58 +177,96 @@ td {
width: 119px; width: 119px;
float:left; float:left;
cursor: pointer; cursor: pointer;
border-bottom: 1px solid #e5e5e5; padding-bottom: 2px;
} }
.nav-block:hover { .nav-block:hover {
height:108px; height:108px;
border-bottom: 4px solid #f79b44; padding-bottom: 0;
} }
.nav-selected-block { .nav-selected-block {
padding-bottom: 0;
font-family: Arial, Helvetica, sans-serif; font-family: Arial, Helvetica, sans-serif;
margin: 0; margin: 0;
color: #2361a1; color: #4a82be;
height: 108px; height: 108px;
width: 119px; width: 119px;
float: left; float: left;
border-bottom: 4px solid #777777;
cursor: pointer; cursor: pointer;
} }
.nav-selected-block:hover { .nav-selected-block:hover {
height:108px; height:108px;
border-bottom: 4px solid #f79b44;
} }
.nav-selected-block:active { .nav-selected-block:active {
color: #f79b44; color: #f79b44;
} }
.nav-header { .top .nav-block .marker,
padding: 14px 0 0 6px; .top .nav-selected-block .marker {
margin: 0; -webkit-transition: background .1s ease-in-out;
letter-spacing: -1.0px; -moz-transition: background .1s ease-in-out;
font-size: 16pt; -o-transition: background .1s ease-in-out;
font-weight: bold; transition: background .1s ease-in-out;
padding: 0;
height: 4px;
margin: 12px 0 0 0;
width: 100%;
background-color: #fff;
} }
.nav-selected-header { .top .nav-selected-block .marker {
padding: 14px 0 0 6px; background-color: #777;
margin: 0; border-bottom: 1px solid #777;
letter-spacing: -1.0px; }
.top.small .marker{
position: fixed;
top: 66px;
width: 119px;
}
.nav-block:hover .marker{
background-color: #f79b44;
border-bottom: 1px solid #f79b44;
}
.nav-selected-block:hover .marker{
background-color: #f79b44;
border-bottom: 1px solid #f79b44;
}
.nav-header, .nav-selected-header {
background-color: #FFF;
font-size: 16pt; font-size: 16pt;
font-weight: bold; font-weight: bold;
height: 27px;
letter-spacing: -1px;
margin: 0;
padding: 16px 0 0 6px;
position: fixed;
top: 24px;
width: 113px;
z-index: 10;
}
.top.small .nav-header, .top.small .nav-selected-header{
height: 38px;
} }
.nav-counters { .nav-counters {
padding: 1px 0 0 6px; padding: 1px 0 0 6px;
margin: 0; margin: 65px 0 0 0;
height: 58px; height: 58px;
line-height: 1.4em; line-height: 1.4em;
font-size: 9pt; font-size: 9pt;
font-family: Arial, Helvetica, sans-serif;
color: #333; color: #333;
decoration: none; decoration: none;
overflow: hidden;
opacity: 0.8;
} }
.submenu { .submenu {
@ -204,6 +274,19 @@ td {
vertical-align: middle; vertical-align: middle;
float: left; float: left;
width: 1000px; width: 1000px;
border-bottom: 1px solid #e1e8e8;
border-top: 1px solid #e1e8e8;
background-color: #fff;
margin-bottom: -1px;
}
.top.small .submenu{
position: fixed;
top: 82px;
}
.submenu .wrapper{
padding: 11px 10px 14px 10px;
} }
.submenu-button-block { .submenu-button-block {
@ -225,7 +308,7 @@ td {
} }
.submenu-button-select { .submenu-button-select {
width: 20px; width: 28px;
height: 28px; height: 28px;
cursor: pointer; cursor: pointer;
color: #555; color: #555;
@ -272,16 +355,26 @@ td {
} }
.submenu-button-main:hover { .submenu-button-main:hover {
border: 1px solid #999; border: 1px solid #aaa;
background-color: #999; background-color: #adaeae;
-webkit-transition: background .1s ease-in-out;
-moz-transition: background .1s ease-in-out;
-o-transition: background .1s ease-in-out;
transition: background .1s ease-in-out;
} }
.submenu-button-select:hover { .submenu-button-select:hover {
border: 1px solid #f79b44; border: 1px solid #adaeae;
background-color: #adaeae;
color: #fff;
} }
.submenu-button-search:hover { .submenu-button-search:hover {
border: 1px solid #f79b44; border: 1px solid #adaeae;
background-color: #adaeae;
color: #fff;
} }
.submenu-button-main:active { .submenu-button-main:active {
@ -307,7 +400,7 @@ td {
} }
.submenu-select-link { .submenu-select-link {
color: #6A6A6A; color: #6a6a6a;
display: block; display: block;
float: left; float: left;
font-size: 8pt; font-size: 8pt;
@ -318,33 +411,46 @@ td {
} }
.submenu-select-link:hover { .submenu-select-link:hover {
text-decoration: underline; color: #fff;
background-color: #f79b44;
} }
.submenu-select-link:active { .submenu-select-link:active {
color: #fff; color: #fff;
background-color: #f79b44; background-color: #777;
text-decoration: underline;
} }
.submenu-select-dropdown { .submenu-select-dropdown {
font-family:Arial, Helvetica, sans-serif; font-family:Arial, Helvetica, sans-serif;
font-size: 9pt; font-size: 9pt;
color: #333333; color: #333;
display: block; display: block;
float: left; float: left;
height: 28px; height: 28px;
margin: 0 4px 0 0; margin: 0 4px 0 0;
min-width: 138px; min-width: 138px;
background-color: #FFFFFF; background-color: #fff;
border: 1px solid #CCCCCC; border: 1px solid #ccc;
border-radius: 3px 3px 3px 3px; border-radius: 3px 3px 3px 3px;
padding: 4px 5px; padding: 4px 5px;
} }
.submenu-select-dropdown:hover {
border: 1px solid #909090;
}
.submenu-select-dropdown:focus {
border: 1px solid #f79b44;
background-color: #fffcd2;
color: #333;
}
.submenu-select-dropdown option { .submenu-select-dropdown option {
padding: 5px 5px 5px 8px; padding: 5px 5px 5px 8px;
} }
.submenu-search-block { .submenu-search-block {
display: block; display: block;
text-align: right; text-align: right;
@ -365,11 +471,13 @@ td {
} }
.submenu-search-field:hover { .submenu-search-field:hover {
border: 1px solid #f79b44; border: 1px solid #909090;
} }
.submenu-search-field:focus { .submenu-search-field:focus {
border: 1px solid #f79b44; border: 1px solid #f79b44;
background-color: #FFFCD2;
color: #333;
} }
.bottom { .bottom {
@ -403,11 +511,11 @@ td {
} }
.vst { .vst {
padding: 4px 4px 0 4px; padding: 5px 7px 0 7px;
margin: 0; margin: 0;
text-decoration: none; text-decoration: none;
color: #999; color: #999;
font-size: 12pt; font-size: 11pt;
float: left; float: left;
} }
@ -421,11 +529,11 @@ td {
} }
.vst-selected { .vst-selected {
padding: 4px 4px 0 4px; padding: 5px 7px 0 7px;
margin: 0; margin: 0;
text-decoration: none; text-decoration: none;
color: #2361a1; color: #2361a1;
font-size: 12pt; font-size: 11pt;
float: left; float: left;
} }
@ -448,21 +556,18 @@ td {
font-size: 12pt; font-size: 12pt;
text-align: left; text-align: left;
vertical-align:top; vertical-align:top;
margin: 0; margin: 1px 0 0 0;
behavior:url("/css/csshover3.htc"); behavior:url("/css/csshover3.htc");
background-color: #fff
} }
.data a { .data a {
text-decoration: none; text-decoration: none;
} }
.data-row:hover {
margin: 0;
background-color: #f7f6ed;
}
.data-row:active { .data-row.selected, .data-row.selected.suspended{
background-color: #f7f7d8; background-color: #e4e9e9;
} }
.datarowhover { .datarowhover {
@ -529,7 +634,7 @@ td {
.data-date { .data-date {
letter-spacing: 0.3em; letter-spacing: 0.3em;
font-size: 8pt; font-size: 8pt;
color: #6A6A6A color: #6a6a6a
} }
.data-active { .data-active {
@ -549,33 +654,41 @@ td {
height: 16px; height: 16px;
border-left: 1px solid #d3d3d3; border-left: 1px solid #d3d3d3;
font-size: 8pt; font-size: 8pt;
padding: 2px 12px 1px 6px; padding: 6px 11px 2px;
letter-spacing: 0.1em; letter-spacing: 0.1em;
color: #2361a1; color: #3e7c91;
text-decoration: none; text-decoration: none;
cursor: pointer; cursor: pointer;
} }
.data-controls.edit{
font-weight: bold;
letter-spacing: 0;
}
.data-controls:hover { .data-controls:hover {
color: #fff; color: #fff;
background-color: #f79b44; background-color: #f79b44;
} }
.data-controls:active { .data-controls:active {
background-color: #999 background-color: #999;
} }
.data-controls img { .data-controls img {
border: 0px; border: 0px;
} }
.ch-toggle {
cursor: pointer;
}
.data-count { .data-count {
font-family: Arial, Helvetica, sans-serif; font-family: Arial, Helvetica, sans-serif;
background-color: #f3f3f3; color: #505050;
color: #555;
font-size: 8pt; font-size: 8pt;
margin: 18px 0 0 0; padding: 20px 0 20px 174px;
padding: 0 16px 0 0;
} }
.chart1 { .chart1 {
@ -600,6 +713,14 @@ td {
padding: 1px 0 2px 0; padding: 1px 0 2px 0;
} }
.suspended .domain {
color: #777;
}
.domain.hostname {
font-size: 16pt;
}
.cron { .cron {
color: #222; color: #222;
font-size: 18px; font-size: 18px;
@ -633,7 +754,7 @@ td {
.counter-name { .counter-name {
white-space: nowrap; white-space: nowrap;
vertical-align:top; vertical-align:top;
line-height: 1.3em; line-height: 1.2em;
font-size: 10pt; font-size: 10pt;
color: #222; color: #222;
padding: 2px 4px 1px 0; padding: 2px 4px 1px 0;
@ -649,7 +770,7 @@ td {
.counter-value { .counter-value {
vertical-align:top; vertical-align:top;
line-height: 1.3em; line-height: 1.2em;
font-size: 10pt; font-size: 10pt;
color: #222; color: #222;
padding: 2px 0 1px 2px; padding: 2px 0 1px 2px;
@ -676,17 +797,17 @@ td {
.vst-ok { .vst-ok {
font-size: 12pt; font-size: 12pt;
color: #62a358; color: #33691e;
padding: 4px; padding: 4px;
} }
.vst-ok a{ .vst-ok a {
color: #58934f; color: #33691e;
text-decoration: none;
} }
.vst-ok a:hover{ .vst-ok a:hover {
text-decoration: underline; background: #f79b44;
color: #fff;
} }
.vst-error { .vst-error {
@ -714,11 +835,13 @@ td {
} }
.vst-textinput:hover { .vst-textinput:hover {
border: 1px solid #f79b44; border: 1px solid #909090;
} }
.vst-textinput:focus { .vst-textinput:focus {
border: 1px solid #f79b44; border: 1px solid #f79b44;
background-color: #fffcd2;
color: #333;
} }
.vst-textinput:disabled { .vst-textinput:disabled {
@ -738,17 +861,23 @@ td {
} }
.vst-input:hover { .vst-input:hover {
border: 1px solid #f79b44; border: 1px solid #909090;
} }
.vst-input:focus { .vst-input:focus {
border: 1px solid #f79b44; border: 1px solid #f79b44;
background-color: #fffcd2;
color: #333;
} }
.vst-input:disabled { .vst-input:disabled {
background-color: #f1f1f1; background-color: #f1f1f1;
} }
.vst-input.long{
width: 580px;
}
.vst-list { .vst-list {
font-family:Arial, Helvetica, sans-serif; font-family:Arial, Helvetica, sans-serif;
font-size: 12pt; font-size: 12pt;
@ -768,7 +897,7 @@ td {
padding: 5px; padding: 5px;
font-size: 12pt; font-size: 12pt;
border: 1px solid #f7f6ed; border: 1px solid #f7f6ed;
margin: 2px 6px 0 0; margin: 2px 6px 0 3px;
} }
.vst-checkbox:hover { .vst-checkbox:hover {
@ -776,23 +905,23 @@ td {
} }
.button { .button {
filter:chroma(color=#000000); filter:chroma(color=#000);
cursor: pointer; cursor: pointer;
border-radius: 3px 3px 3px 3px; border-radius: 3px 3px 3px 3px;
font-size: 14px; font-size: 13px;
font-weight: bold; font-weight: bold;
padding: 2px 16px; padding: 1px 16px 3px 16px;
width: 108px; width: 108px;
height: 34px; height: 34px;
color: #555; color: #fafafa;
background-color: #fff; border: 1px solid #f79b44;
border: 1px solid #ccc; background-color: #f79b44;
} }
.button:hover { .button:hover {
color: #fff; color: #fff;
border: 1px solid #f79b44; border: 1px solid #999;
background-color: #f79b44; background-color: #999;
} }
.button:active { .button:active {
@ -801,7 +930,7 @@ td {
} }
.login-button { .login-button {
filter:chroma(color=#000000); filter:chroma(color=#000);
cursor: pointer; cursor: pointer;
border-radius: 3px 3px 3px 3px; border-radius: 3px 3px 3px 3px;
font-size: 14px; font-size: 14px;
@ -810,14 +939,13 @@ td {
width: 108px; width: 108px;
height: 34px; height: 34px;
color: #fff; color: #fff;
background-color: #999; background-color: #f79b44;
border: 1px solid #999; border: 1px solid #f79b44;
} }
.login-button:hover { .login-button:hover {
color: #fff; border: 1px solid #adaeae;
border: 1px solid #f79b44; background-color: #adaeae;
background-color: #f79b44;
} }
.login-button:active { .login-button:active {
@ -838,12 +966,12 @@ td {
} }
.generate:hover { .generate:hover {
color: #7fa1cb; background-color: #f79b44;
color: #fff;
} }
.generate:active { .generate:active {
background-color: #f79b44; background-color: #999;
color: #fff;
} }
.vst-advanced { .vst-advanced {
@ -856,15 +984,16 @@ td {
} }
.vst-advanced:hover { .vst-advanced:hover {
color: #7fa1cb;
}
.vst-advanced:active {
color: #fff; color: #fff;
background-color: #f79b44; background-color: #f79b44;
} }
.fixed{ .vst-advanced:active {
color: #fff;
background-color: #777;
}
.fixed {
position: fixed; position: fixed;
border: none; border: none;
top: -3px; top: -3px;
@ -872,7 +1001,7 @@ td {
background-color: #fff; background-color: #fff;
} }
*html .fixed{ *html .fixed {
position:absolute; position:absolute;
position:fixed; position:fixed;
_position:absolute; _position:absolute;
@ -880,7 +1009,7 @@ td {
_top:expression( eval(document.body.scrollTop) + 'px' ); _top:expression( eval(document.body.scrollTop) + 'px' );
} }
#vstobjects{ #vstobjects {
padding-top: 193px; padding-top: 193px;
min-height: 372px; min-height: 372px;
} }
@ -903,27 +1032,148 @@ td {
} }
.login-bottom { .login-bottom {
color: #ebe9dc;
text-align: right; text-align: right;
vertical-align:top; vertical-align:top;
width: 500px; width: 474px;
height: 50px; height: 50px;
margin: 0; margin: 0;
padding: 0 26px 0 0;
} }
.vestacp{ .vestacp {
font-size: 8pt; font-size: 8pt;
color: #222; color: #505050;
text-align: right; text-align: right;
padding: 0 8px 0 0;
} }
.error { .error {
font-size: 10pt; font-size: 10pt;
color: #dE6c5d; color: #de6c5d;
} }
.hint { .hint {
font-size: 14pt; font-size: 14pt;
color: #7fa1cb; color: #7fa1cb;
} }
.step-top {
padding-top: 42px;
}
.step-bottom {
padding-bottom: 20px;
}
.step-left {
padding-left: 50px;
}
.input-label {
padding-top: 20px;
}
.additional-control {
margin-left: 20px;
color: #2361a1;
border-bottom: 1px solid #f79b44;
font-size: 10pt;
letter-spacing: 0.1em;
cursor: pointer;
}
.additional-control:hover {
color: #7fa1cb;
}
.additional-control:active {
color: #fff;
background-color: #f79b44;
}
.ftp-path-prefix {
color: #848483;
font-size: 13px;
}
.ftp-path-value {
color: #333;
font-size: 13px;
font-weight: bold;
}
.data .suspended {
background: url(/images/disabled_bg.png);
}
.timer-container .refresh-timer {
border: 2px solid #c0d4a6;
border-radius: 14px;
height: 14px;
width: 14px;
margin: 10px;
float: left;
margin: 7px 10px 0 0;
}
.timer-container .refresh-timer.paused{
border: 2px solid #9f9f9f;
}
.timer-container .refresh-timer.paused .loader-half.right,
.timer-container .refresh-timer.paused .loader-half.dark{
background-color: #9F9F9F;
}
.timer-container .loader-half {
border-radius: 0 14px 14px 0;
height: 14px;
width: 7px;
float: left;
}
.timer-container .loader-half.left {
border-radius: 14px 0 0 14px;
background-color: #fff;
}
.timer-container .loader-half.right {
margin-left: 7px;
background-color: #c0d4a6;
}
.timer-container .loader-half.dark{
background-color: #c0d4a6;
}
.timer-container .movement{
float: left;
width: 14px;
height: 14px;
position: absolute;
}
.timer-container .movement.left {
z-index: 10;
}
.timer-container .movement.right{
transform: rotate(180deg);
-webkit-transform: rotate(180deg);
}
.timer-container .timer-button{
cursor: pointer;
text-decotation: underline;
margin: 11px 0 0 38px;
width: 15px;
float: left;
height: 10px;
}
.timer-container .timer-button.pause{
background: url(/images/pause.png) no-repeat ;
}
.timer-container .timer-button.play{
background: url(/images/start.png) no-repeat;
}

View file

@ -7,7 +7,7 @@ include($_SERVER['DOCUMENT_ROOT']."/inc/main.php");
if ($_SESSION['user'] == 'admin') { if ($_SESSION['user'] == 'admin') {
exec (VESTA_CMD."v-delete-cron-vesta-autoupdate", $output, $return_var); exec (VESTA_CMD."v-delete-cron-vesta-autoupdate", $output, $return_var);
$_SESSION['error_msg'] = __('Autoupdate has been susscessfully disabled'); $_SESSION['error_msg'] = __('Autoupdate has been successfully disabled');
unset($output); unset($output);
} }

View file

@ -3,116 +3,129 @@
error_reporting(NULL); error_reporting(NULL);
ob_start(); ob_start();
session_start(); session_start();
$TAB = 'BACKUP EXCLUSIONS'; $TAB = 'BACKUP EXCLUSIONS';
include($_SERVER['DOCUMENT_ROOT']."/inc/main.php"); include($_SERVER['DOCUMENT_ROOT']."/inc/main.php");
// Edit as someone else?
if (($_SESSION['user'] == 'admin') && (!empty($_GET['user']))) {
$user=escapeshellarg($_GET['user']);
}
// List backup exclustions
exec (VESTA_CMD."v-list-user-backup-exclusions ".$user." 'json'", $output, $return_var);
check_return_code($return_var,$output);
$data = json_decode(implode('', $output), true);
unset($output);
// Parse web
$v_username = $user;
foreach ($data['WEB'] as $key => $value) {
if (!empty($value)){
$v_web .= $key . ":" . $value. "\n";
} else {
$v_web .= $key . "\n";
}
}
// Parse dns
foreach ($data['DNS'] as $key => $value) {
if (!empty($value)){
$v_dns .= $key . ":" . $value. "\n";
} else {
$v_dns .= $key . "\n";
}
}
// Parse mail
foreach ($data['MAIL'] as $key => $value) {
if (!empty($value)){
$v_mail .= $key . ":" . $value. "\n";
} else {
$v_mail .= $key . "\n";
}
}
// Parse databases
foreach ($data['DB'] as $key => $value) {
if (!empty($value)){
$v_db .= $key . ":" . $value. "\n";
} else {
$v_db .= $key . "\n";
}
}
// Parse user directories
foreach ($data['USER'] as $key => $value) {
if (!empty($value)){
$v_userdir .= $key . ":" . $value. "\n";
} else {
$v_userdir .= $key . "\n";
}
}
// Check POST request
if (!empty($_POST['save'])) {
$v_web = $_POST['v_web'];
$v_web_tmp = str_replace("\r\n", ",", $_POST['v_web']);
$v_web_tmp = rtrim($v_web_tmp, ",");
$v_web_tmp = "WEB=" . escapeshellarg($v_web_tmp);
$v_dns = $_POST['v_dns'];
$v_dns_tmp = str_replace("\r\n", ",", $_POST['v_dns']);
$v_dns_tmp = rtrim($v_dns_tmp, ",");
$v_dns_tmp = "DNS=" . escapeshellarg($v_dns_tmp);
$v_mail = $_POST['v_mail'];
$v_mail_tmp = str_replace("\r\n", ",", $_POST['v_mail']);
$v_mail_tmp = rtrim($v_mail_tmp, ",");
$v_mail_tmp = "MAIL=" . escapeshellarg($v_mail_tmp);
$v_db = $_POST['v_db'];
$v_db_tmp = str_replace("\r\n", ",", $_POST['v_db']);
$v_db_tmp = rtrim($v_db_tmp, ",");
$v_db_tmp = "DB=" . escapeshellarg($v_db_tmp);
$v_cron = $_POST['v_cron'];
$v_cron_tmp = str_replace("\r\n", ",", $_POST['v_cron']);
$v_cron_tmp = rtrim($v_cron_tmp, ",");
$v_cron_tmp = "CRON=" . escapeshellarg($v_cron_tmp);
$v_userdir = $_POST['v_userdir'];
$v_userdir_tmp = str_replace("\r\n", ",", $_POST['v_userdir']);
$v_userdir_tmp = rtrim($v_userdir_tmp, ",");
$v_userdir_tmp = "USER=" . escapeshellarg($v_userdir_tmp);
// Create temporary exeption list on a filesystem
exec ('mktemp', $mktemp_output, $return_var);
$tmp = $mktemp_output[0];
$fp = fopen($tmp, 'w');
fwrite($fp, $v_web_tmp . "\n" . $v_dns_tmp . "\n" . $v_mail_tmp . "\n" . $v_db_tmp . "\n" . $v_userdir_tmp . "\n");
fclose($fp);
unset($mktemp_output);
// Save changes
exec (VESTA_CMD."v-update-user-backup-exclusions ".$user." ".$tmp, $output, $return_var);
check_return_code($return_var,$output);
unset($output);
// Set success message
if (empty($_SESSION['error_msg'])) {
$_SESSION['ok_msg'] = __("Changes has been saved.");
}
}
// Header // Header
include($_SERVER['DOCUMENT_ROOT'].'/templates/header.html'); include($_SERVER['DOCUMENT_ROOT'].'/templates/header.html');
// Panel // Panel
top_panel($user,$TAB); top_panel($user,$TAB);
// Edit as someone else? // Display body
if (($_SESSION['user'] == 'admin') && (!empty($_GET['user']))) {
$user=escapeshellarg($_GET['user']);
}
exec (VESTA_CMD."v-list-user-backup-exclusions ".$user." 'json'", $output, $return_var);
check_return_code($return_var,$output);
if (empty($_SESSION['error_msg'])) {
$data = json_decode(implode('', $output), true);
unset($output);
$v_username = $user;
foreach ($data['WEB'] as $key => $value) {
if (!empty($value)){
$v_web .= $key . ":" . $value. "\n";
} else {
$v_web .= $key . "\n";
}
}
foreach ($data['DNS'] as $key => $value) {
if (!empty($value)){
$v_dns .= $key . ":" . $value. "\n";
} else {
$v_dns .= $key . "\n";
}
}
foreach ($data['MAIL'] as $key => $value) {
if (!empty($value)){
$v_mail .= $key . ":" . $value. "\n";
} else {
$v_mail .= $key . "\n";
}
}
foreach ($data['DB'] as $key => $value) {
if (!empty($value)){
$v_db .= $key . ":" . $value. "\n";
} else {
$v_db .= $key . "\n";
}
}
foreach ($data['USER'] as $key => $value) {
if (!empty($value)){
$v_userdir .= $key . ":" . $value. "\n";
} else {
$v_userdir .= $key . "\n";
}
}
// Action
if (!empty($_POST['save'])) {
$v_web = $_POST['v_web'];
$v_web_tmp = str_replace("\r\n", ",", $_POST['v_web']);
$v_web_tmp = rtrim($v_web_tmp, ",");
$v_web_tmp = "WEB=" . escapeshellarg($v_web_tmp);
$v_dns = $_POST['v_dns'];
$v_dns_tmp = str_replace("\r\n", ",", $_POST['v_dns']);
$v_dns_tmp = rtrim($v_dns_tmp, ",");
$v_dns_tmp = "DNS=" . escapeshellarg($v_dns_tmp);
$v_mail = $_POST['v_mail'];
$v_mail_tmp = str_replace("\r\n", ",", $_POST['v_mail']);
$v_mail_tmp = rtrim($v_mail_tmp, ",");
$v_mail_tmp = "MAIL=" . escapeshellarg($v_mail_tmp);
$v_db = $_POST['v_db'];
$v_db_tmp = str_replace("\r\n", ",", $_POST['v_db']);
$v_db_tmp = rtrim($v_db_tmp, ",");
$v_db_tmp = "DB=" . escapeshellarg($v_db_tmp);
$v_cron = $_POST['v_cron'];
$v_cron_tmp = str_replace("\r\n", ",", $_POST['v_cron']);
$v_cron_tmp = rtrim($v_cron_tmp, ",");
$v_cron_tmp = "CRON=" . escapeshellarg($v_cron_tmp);
$v_userdir = $_POST['v_userdir'];
$v_userdir_tmp = str_replace("\r\n", ",", $_POST['v_userdir']);
$v_userdir_tmp = rtrim($v_userdir_tmp, ",");
$v_userdir_tmp = "USER=" . escapeshellarg($v_userdir_tmp);
exec ('mktemp', $mktemp_output, $return_var);
$tmp = $mktemp_output[0];
$fp = fopen($tmp, 'w');
fwrite($fp, $v_web_tmp . "\n" . $v_dns_tmp . "\n" . $v_mail_tmp . "\n" . $v_db_tmp . "\n" . $v_userdir_tmp . "\n");
fclose($fp);
exec (VESTA_CMD."v-update-user-backup-exclusions ".$user." ".$tmp, $output, $return_var);
check_return_code($return_var,$output);
if (empty($_SESSION['error_msg'])) {
$_SESSION['ok_msg'] = __("Changes has been saved.");
}
}
}
include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/edit_backup_exclusions.html'); include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/edit_backup_exclusions.html');
// Flush session messages
unset($_SESSION['error_msg']); unset($_SESSION['error_msg']);
unset($_SESSION['ok_msg']); unset($_SESSION['ok_msg']);

View file

@ -3,73 +3,79 @@
error_reporting(NULL); error_reporting(NULL);
ob_start(); ob_start();
session_start(); session_start();
$TAB = 'CRON'; $TAB = 'CRON';
include($_SERVER['DOCUMENT_ROOT']."/inc/main.php"); include($_SERVER['DOCUMENT_ROOT']."/inc/main.php");
// Edit as someone else?
if (($_SESSION['user'] == 'admin') && (!empty($_GET['user']))) {
$user=escapeshellarg($_GET['user']);
}
// Check job id
if (empty($_GET['job'])) {
header("Location: /list/cron/");
exit;
}
// List cron job
$v_job = escapeshellarg($_GET['job']);
exec (VESTA_CMD."v-list-cron-job ".$user." ".$v_job." 'json'", $output, $return_var);
check_return_code($return_var,$output);
$data = json_decode(implode('', $output), true);
unset($output);
// Parse cron job
$v_username = $user;
$v_job = $_GET['job'];
$v_min = $data[$v_job]['MIN'];
$v_hour = $data[$v_job]['HOUR'];
$v_day = $data[$v_job]['DAY'];
$v_month = $data[$v_job]['MONTH'];
$v_wday = $data[$v_job]['WDAY'];
$v_cmd = $data[$v_job]['CMD'];
$v_date = $data[$v_job]['DATE'];
$v_time = $data[$v_job]['TIME'];
$v_suspended = $data[$v_job]['SUSPENDED'];
if ( $v_suspended == 'yes' ) {
$v_status = 'suspended';
} else {
$v_status = 'active';
}
// Check POST request
if (!empty($_POST['save'])) {
$v_username = $user;
$v_min = escapeshellarg($_POST['v_min']);
$v_hour = escapeshellarg($_POST['v_hour']);
$v_day = escapeshellarg($_POST['v_day']);
$v_month = escapeshellarg($_POST['v_month']);
$v_wday = escapeshellarg($_POST['v_wday']);
$v_cmd = escapeshellarg($_POST['v_cmd']);
// Save changes
exec (VESTA_CMD."v-change-cron-job ".$v_username." ".$v_job." ".$v_min." ".$v_hour." ".$v_day." ".$v_month." ".$v_wday." ".$v_cmd, $output, $return_var);
check_return_code($return_var,$output);
unset($output);
$v_cmd = $_POST['v_cmd'];
// Set success message
if (empty($_SESSION['error_msg'])) {
$_SESSION['ok_msg'] = __("Changes has been saved.");
}
}
// Header // Header
include($_SERVER['DOCUMENT_ROOT'].'/templates/header.html'); include($_SERVER['DOCUMENT_ROOT'].'/templates/header.html');
// Panel // Panel
top_panel($user,$TAB); top_panel($user,$TAB);
// Edit as someone else? // Display body
if (($_SESSION['user'] == 'admin') && (!empty($_GET['user']))) {
$user=escapeshellarg($_GET['user']);
}
// Check user argument?
if (empty($_GET['job'])) {
header("Location: /list/cron/");
exit;
}
$v_job = escapeshellarg($_GET['job']);
exec (VESTA_CMD."v-list-cron-job ".$user." ".$v_job." 'json'", $output, $return_var);
check_return_code($return_var,$output);
if (empty($_SESSION['error_msg'])) {
$data = json_decode(implode('', $output), true);
unset($output);
$v_username = $user;
$v_job = $_GET['job'];
$v_min = $data[$v_job]['MIN'];
$v_hour = $data[$v_job]['HOUR'];
$v_day = $data[$v_job]['DAY'];
$v_month = $data[$v_job]['MONTH'];
$v_wday = $data[$v_job]['WDAY'];
$v_cmd = $data[$v_job]['CMD'];
$v_date = $data[$v_job]['DATE'];
$v_time = $data[$v_job]['TIME'];
$v_suspended = $data[$v_job]['SUSPENDED'];
if ( $v_suspended == 'yes' ) {
$v_status = 'suspended';
} else {
$v_status = 'active';
}
// Action
if (!empty($_POST['save'])) {
$v_username = $user;
// Change job
if (($v_min != $_POST['v_min']) || ($v_hour != $_POST['v_hour']) || ($v_day != $_POST['v_day']) || ($v_month != $_POST['v_month']) || ($v_wday != $_POST['v_wday']) || ($v_cmd != $_POST['v_cmd']) &&(empty($_SESSION['error_msg']))) {
$v_min = escapeshellarg($_POST['v_min']);
$v_hour = escapeshellarg($_POST['v_hour']);
$v_day = escapeshellarg($_POST['v_day']);
$v_month = escapeshellarg($_POST['v_month']);
$v_wday = escapeshellarg($_POST['v_wday']);
$v_cmd = escapeshellarg($_POST['v_cmd']);
exec (VESTA_CMD."v-change-cron-job ".$v_username." ".$v_job." ".$v_min." ".$v_hour." ".$v_day." ".$v_month." ".$v_wday." ".$v_cmd, $output, $return_var);
check_return_code($return_var,$output);
unset($output);
$v_cmd = $_POST['v_cmd'];
}
if (empty($_SESSION['error_msg'])) {
$_SESSION['ok_msg'] = __("Changes has been saved.");
}
}
}
include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/edit_cron.html'); include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/edit_cron.html');
// Flush session messages
unset($_SESSION['error_msg']); unset($_SESSION['error_msg']);
unset($_SESSION['ok_msg']); unset($_SESSION['ok_msg']);

View file

@ -3,8 +3,8 @@
error_reporting(NULL); error_reporting(NULL);
ob_start(); ob_start();
session_start(); session_start();
$TAB = 'DB'; $TAB = 'DB';
include($_SERVER['DOCUMENT_ROOT']."/inc/main.php"); include($_SERVER['DOCUMENT_ROOT']."/inc/main.php");
// Header // Header
@ -13,6 +13,7 @@ include($_SERVER['DOCUMENT_ROOT'].'/templates/header.html');
// Panel // Panel
top_panel($user,$TAB); top_panel($user,$TAB);
// Check database id
if (empty($_GET['database'])) { if (empty($_GET['database'])) {
header("Location: /list/db/"); header("Location: /list/db/");
exit; exit;
@ -23,69 +24,63 @@ if (($_SESSION['user'] == 'admin') && (!empty($_GET['user']))) {
$user=escapeshellarg($_GET['user']); $user=escapeshellarg($_GET['user']);
} }
// List datbase
$v_database = escapeshellarg($_GET['database']); $v_database = escapeshellarg($_GET['database']);
exec (VESTA_CMD."v-list-database ".$user." ".$v_database." 'json'", $output, $return_var); exec (VESTA_CMD."v-list-database ".$user." ".$v_database." 'json'", $output, $return_var);
check_return_code($return_var,$output); check_return_code($return_var,$output);
if (empty($_SESSION['error_msg'])) { $data = json_decode(implode('', $output), true);
$data = json_decode(implode('', $output), true); unset($output);
unset($output);
// Parse database
$v_username = $user;
$v_database = $_GET['database'];
$v_dbuser = $data[$v_database]['DBUSER'];
$v_password = "••••••••";
$v_host = $data[$v_database]['HOST'];
$v_type = $data[$v_database]['TYPE'];
$v_charset = $data[$v_database]['CHARSET'];
$v_date = $data[$v_database]['DATE'];
$v_time = $data[$v_database]['TIME'];
$v_suspended = $data[$v_database]['SUSPENDED'];
if ( $v_suspended == 'yes' ) {
$v_status = 'suspended';
} else {
$v_status = 'active';
}
// Check POST request
if (!empty($_POST['save'])) {
$v_username = $user; $v_username = $user;
$v_database = $_GET['database'];
$v_dbuser = $data[$v_database]['DBUSER']; // Change database user
$v_password = "••••••••"; if (($v_dbuser != $_POST['v_dbuser']) && (empty($_SESSION['error_msg']))) {
$v_host = $data[$v_database]['HOST']; $v_dbuser = preg_replace("/^".$user."_/", "", $_POST['v_dbuser']);
$v_type = $data[$v_database]['TYPE']; $v_dbuser = escapeshellarg($v_dbuser);
$v_charset = $data[$v_database]['CHARSET']; exec (VESTA_CMD."v-change-database-user ".$v_username." ".$v_database." ".$v_dbuser, $output, $return_var);
$v_date = $data[$v_database]['DATE']; check_return_code($return_var,$output);
$v_time = $data[$v_database]['TIME']; unset($output);
$v_suspended = $data[$v_database]['SUSPENDED']; $v_dbuser = $user."_".preg_replace("/^".$user."_/", "", $_POST['v_dbuser']);
if ( $v_suspended == 'yes' ) {
$v_status = 'suspended';
} else {
$v_status = 'active';
} }
// Action // Change database password
if (!empty($_POST['save'])) { if (($v_password != $_POST['v_password']) && (empty($_SESSION['error_msg']))) {
$v_username = $user; $v_password = escapeshellarg($_POST['v_password']);
exec (VESTA_CMD."v-change-database-password ".$v_username." ".$v_database." ".$v_password, $output, $return_var);
check_return_code($return_var,$output);
$v_password = "••••••••";
unset($output);
}
// Change database username // Set success message
if (($v_dbuser != $_POST['v_dbuser']) && (empty($_SESSION['error_msg']))) { if (empty($_SESSION['error_msg'])) {
$v_dbuser = preg_replace("/^".$user."_/", "", $_POST['v_dbuser']); $_SESSION['ok_msg'] = __('Changes has been saved.');
$v_dbuser = escapeshellarg($v_dbuser);
if ($v_password != $_POST['v_password']) {
// Change username and password
$v_password = escapeshellarg($_POST['v_password']);
exec (VESTA_CMD."v-change-database-user ".$v_username." ".$v_database." ".$v_dbuser." ".$v_password, $output, $return_var);
check_return_code($return_var,$output);
unset($output);
$v_dbuser = $user."_".preg_replace("/^".$user."_/", "", $_POST['v_dbuser']);
$v_password = "••••••••";
$v_pw_changed = 'yes';
} else {
// Change only username
exec (VESTA_CMD."v-change-database-user ".$v_username." ".$v_database." ".$v_dbuser, $output, $return_var);
check_return_code($return_var,$output);
unset($output);
$v_dbuser = $user."_".preg_replace("/^".$user."_/", "", $_POST['v_dbuser']);
}
}
// Change only database password
if (($v_password != $_POST['v_password']) && (!isset($v_pw_changed)) && (empty($_SESSION['error_msg']))) {
$v_password = escapeshellarg($_POST['v_password']);
exec (VESTA_CMD."v-change-database-password ".$v_username." ".$v_database." ".$v_password, $output, $return_var);
check_return_code($return_var,$output);
$v_password = "••••••••";
unset($output);
}
if (empty($_SESSION['error_msg'])) {
$_SESSION['ok_msg'] = __('Changes has been saved.');
}
} }
} }
// Display body
include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/edit_db.html'); include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/edit_db.html');
// Flush session messages
unset($_SESSION['error_msg']); unset($_SESSION['error_msg']);
unset($_SESSION['ok_msg']); unset($_SESSION['ok_msg']);

View file

@ -3,17 +3,11 @@
error_reporting(NULL); error_reporting(NULL);
ob_start(); ob_start();
session_start(); session_start();
$TAB = 'DNS'; $TAB = 'DNS';
include($_SERVER['DOCUMENT_ROOT']."/inc/main.php"); include($_SERVER['DOCUMENT_ROOT']."/inc/main.php");
// Header // Check domain name
include($_SERVER['DOCUMENT_ROOT'].'/templates/header.html');
// Panel
top_panel($user,$TAB);
// Check user argument?
if (empty($_GET['domain'])) { if (empty($_GET['domain'])) {
header("Location: /list/dns/"); header("Location: /list/dns/");
exit; exit;
@ -24,163 +18,194 @@ if (($_SESSION['user'] == 'admin') && (!empty($_GET['user']))) {
$user=escapeshellarg($_GET['user']); $user=escapeshellarg($_GET['user']);
} }
// Check domain // List dns domain
if ((!empty($_GET['domain'])) && (empty($_GET['record_id']))) { if ((!empty($_GET['domain'])) && (empty($_GET['record_id']))) {
$v_domain = escapeshellarg($_GET['domain']); $v_domain = escapeshellarg($_GET['domain']);
exec (VESTA_CMD."v-list-dns-domain ".$user." ".$v_domain." json", $output, $return_var); exec (VESTA_CMD."v-list-dns-domain ".$user." ".$v_domain." json", $output, $return_var);
check_return_code($return_var,$output); check_return_code($return_var,$output);
$data = json_decode(implode('', $output), true);
unset($output);
// Parse dns domain
$v_username = $user;
$v_domain = $_GET['domain'];
$v_ip = $data[$v_domain]['IP'];
$v_template = $data[$v_domain]['TPL'];
$v_ttl = $data[$v_domain]['TTL'];
$v_exp = $data[$v_domain]['EXP'];
$v_soa = $data[$v_domain]['SOA'];
$v_date = $data[$v_domain]['DATE'];
$v_time = $data[$v_domain]['TIME'];
$v_suspended = $data[$v_domain]['SUSPENDED'];
if ( $v_suspended == 'yes' ) {
$v_status = 'suspended';
} else {
$v_status = 'active';
}
// List dns templates
exec (VESTA_CMD."v-list-dns-templates json", $output, $return_var);
$templates = json_decode(implode('', $output), true);
unset($output);
}
// List dns record
if ((!empty($_GET['domain'])) && (!empty($_GET['record_id']))) {
$v_domain = escapeshellarg($_GET['domain']);
$v_record_id = escapeshellarg($_GET['record_id']);
exec (VESTA_CMD."v-list-dns-records ".$user." ".$v_domain." 'json'", $output, $return_var);
check_return_code($return_var,$output);
$data = json_decode(implode('', $output), true);
unset($output);
// Parse dns record
$v_username = $user;
$v_domain = $_GET['domain'];
$v_record_id = $_GET['record_id'];
$v_rec = $data[$v_record_id]['RECORD'];
$v_type = $data[$v_record_id]['TYPE'];
$v_val = $data[$v_record_id]['VALUE'];
$v_priority = $data[$v_record_id]['PRIORITY'];
$v_suspended = $data[$v_record_id]['SUSPENDED'];
if ( $v_suspended == 'yes' ) {
$v_status = 'suspended';
} else {
$v_status = 'active';
}
$v_date = $data[$v_record_id]['DATE'];
$v_time = $data[$v_record_id]['TIME'];
}
// Check POST request for dns domain
if ((!empty($_POST['save'])) && (!empty($_GET['domain'])) && (empty($_GET['record_id']))) {
$v_domain = escapeshellarg($_POST['v_domain']);
// Change domain IP
if (($v_ip != $_POST['v_ip']) && (empty($_SESSION['error_msg']))) {
$v_ip = escapeshellarg($_POST['v_ip']);
exec (VESTA_CMD."v-change-dns-domain-ip ".$v_username." ".$v_domain." ".$v_ip." 'no'", $output, $return_var);
check_return_code($return_var,$output);
$restart_dns = 'yes';
unset($output);
}
// Change domain template
if (($v_template != $_POST['v_template']) && (empty($_SESSION['error_msg']))) {
$v_template = escapeshellarg($_POST['v_template']);
exec (VESTA_CMD."v-change-dns-domain-tpl ".$v_username." ".$v_domain." ".$v_template." 'no'", $output, $return_var);
check_return_code($return_var,$output);
unset($output);
$restart_dns = 'yes';
}
// Change SOA record
if (($v_soa != $_POST['v_soa']) && (empty($_SESSION['error_msg']))) {
$v_soa = escapeshellarg($_POST['v_soa']);
exec (VESTA_CMD."v-change-dns-domain-soa ".$v_username." ".$v_domain." ".$v_soa." 'no'", $output, $return_var);
check_return_code($return_var,$output);
unset($output);
$restart_dns = 'yes';
}
// Change expiriation date
if (($v_exp != $_POST['v_exp']) && (empty($_SESSION['error_msg']))) {
$v_exp = escapeshellarg($_POST['v_exp']);
exec (VESTA_CMD."v-change-dns-domain-exp ".$v_username." ".$v_domain." ".$v_exp." 'no'", $output, $return_var);
check_return_code($return_var,$output);
unset($output);
}
// Change domain ttl
if (($v_ttl != $_POST['v_ttl']) && (empty($_SESSION['error_msg']))) {
$v_ttl = escapeshellarg($_POST['v_ttl']);
exec (VESTA_CMD."v-change-dns-domain-ttl ".$v_username." ".$v_domain." ".$v_ttl." 'no'", $output, $return_var);
check_return_code($return_var,$output);
unset($output);
$restart_dns = 'yes';
}
// Restart dns server
if (!empty($restart_dns) && (empty($_SESSION['error_msg']))) {
exec (VESTA_CMD."v-restart-dns", $output, $return_var);
check_return_code($return_var,$output);
unset($output);
}
// Set success message
if (empty($_SESSION['error_msg'])) { if (empty($_SESSION['error_msg'])) {
$data = json_decode(implode('', $output), true); $_SESSION['ok_msg'] = __('Changes has been saved.');
}
}
// Check POST request for dns record
if ((!empty($_POST['save'])) && (!empty($_GET['domain'])) && (!empty($_GET['record_id']))) {
// Protect input
$v_domain = escapeshellarg($_POST['v_domain']);
$v_record_id = escapeshellarg($_POST['v_record_id']);
// Change dns record
if (($v_val != $_POST['v_val']) || ($v_priority != $_POST['v_priority']) && (empty($_SESSION['error_msg']))) {
$v_val = escapeshellarg($_POST['v_val']);
$v_priority = escapeshellarg($_POST['v_priority']);
exec (VESTA_CMD."v-change-dns-record ".$v_username." ".$v_domain." ".$v_record_id." ".$v_val." ".$v_priority, $output, $return_var);
check_return_code($return_var,$output);
$v_val = $_POST['v_val'];
unset($output); unset($output);
$v_username = $user; $restart_dns = 'yes';
$v_domain = $_GET['domain']; }
$v_ip = $data[$v_domain]['IP'];
$v_template = $data[$v_domain]['TPL']; // Change dns record id
$v_ttl = $data[$v_domain]['TTL']; if (($_GET['record_id'] != $_POST['v_record_id']) && (empty($_SESSION['error_msg']))) {
$v_exp = $data[$v_domain]['EXP']; $v_old_record_id = escapeshellarg($_GET['record_id']);
$v_soa = $data[$v_domain]['SOA']; exec (VESTA_CMD."v-change-dns-record-id ".$v_username." ".$v_domain." ".$v_old_record_id." ".$v_record_id, $output, $return_var);
$v_date = $data[$v_domain]['DATE']; check_return_code($return_var,$output);
$v_time = $data[$v_domain]['TIME']; unset($output);
$v_suspended = $data[$v_domain]['SUSPENDED']; $restart_dns = 'yes';
if ( $v_suspended == 'yes' ) { }
$v_status = 'suspended';
} else { // Restart dns server
$v_status = 'active'; if (!empty($restart_dns) && (empty($_SESSION['error_msg']))) {
} exec (VESTA_CMD."v-restart-dns", $output, $return_var);
exec (VESTA_CMD."v-list-dns-templates json", $output, $return_var); check_return_code($return_var,$output);
$templates = json_decode(implode('', $output), true);
unset($output); unset($output);
} }
// Action // Set success message
if (!empty($_POST['save'])) { if (empty($_SESSION['error_msg'])) {
$v_domain = escapeshellarg($_POST['v_domain']); $_SESSION['ok_msg'] = __('Changes has been saved.');
// IP
if (($v_ip != $_POST['v_ip']) && (empty($_SESSION['error_msg']))) {
$v_ip = escapeshellarg($_POST['v_ip']);
exec (VESTA_CMD."v-change-dns-domain-ip ".$v_username." ".$v_domain." ".$v_ip." 'no'", $output, $return_var);
check_return_code($return_var,$output);
$restart_dns = 'yes';
unset($output);
}
// Template
if (( $_SESSION['user'] == 'admin') && ($v_template != $_POST['v_template']) && (empty($_SESSION['error_msg']))) {
$v_template = escapeshellarg($_POST['v_template']);
exec (VESTA_CMD."v-change-dns-domain-tpl ".$v_username." ".$v_domain." ".$v_template." 'no'", $output, $return_var);
check_return_code($return_var,$output);
unset($output);
$restart_dns = 'yes';
}
// SOA
if (($v_soa != $_POST['v_soa']) && (empty($_SESSION['error_msg']))) {
$v_soa = escapeshellarg($_POST['v_soa']);
exec (VESTA_CMD."v-change-dns-domain-soa ".$v_username." ".$v_domain." ".$v_soa." 'no'", $output, $return_var);
check_return_code($return_var,$output);
unset($output);
$restart_dns = 'yes';
}
// EXP
if (($v_exp != $_POST['v_exp']) && (empty($_SESSION['error_msg']))) {
$v_exp = escapeshellarg($_POST['v_exp']);
exec (VESTA_CMD."v-change-dns-domain-exp ".$v_username." ".$v_domain." ".$v_exp." 'no'", $output, $return_var);
check_return_code($return_var,$output);
unset($output);
$restart_dns = 'yes';
}
// TTL
if (($v_ttl != $_POST['v_ttl']) && (empty($_SESSION['error_msg']))) {
$v_ttl = escapeshellarg($_POST['v_ttl']);
exec (VESTA_CMD."v-change-dns-domain-ttl ".$v_username." ".$v_domain." ".$v_ttl." 'no'", $output, $return_var);
check_return_code($return_var,$output);
unset($output);
$restart_dns = 'yes';
}
// Restart dns
if (!empty($restart_dns) && (empty($_SESSION['error_msg']))) {
exec (VESTA_CMD."v-restart-dns", $output, $return_var);
check_return_code($return_var,$output);
unset($output);
}
if (empty($_SESSION['error_msg'])) {
$_SESSION['ok_msg'] = __('Changes has been saved.');
}
} }
// Change url if record id was changed
if ((empty($_SESSION['error_msg'])) && ($_GET['record_id'] != $_POST['v_record_id'])) {
header("Location: /edit/dns/?domain=".$_GET['domain']."&record_id=".$_POST['v_record_id']);
exit;
}
}
// Header
include($_SERVER['DOCUMENT_ROOT'].'/templates/header.html');
// Panel
top_panel($user,$TAB);
// Display body for dns domain
if ((!empty($_GET['domain'])) && (empty($_GET['record_id']))) {
if ($_SESSION['user'] == 'admin') { if ($_SESSION['user'] == 'admin') {
include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/edit_dns.html'); include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/edit_dns.html');
} else { } else {
include($_SERVER['DOCUMENT_ROOT'].'/templates/user/edit_dns.html'); include($_SERVER['DOCUMENT_ROOT'].'/templates/user/edit_dns.html');
} }
unset($_SESSION['error_msg']);
unset($_SESSION['ok_msg']);
} else {
$v_domain = escapeshellarg($_GET['domain']);
$v_record_id = escapeshellarg($_GET['record_id']);
exec (VESTA_CMD."v-list-dns-records ".$user." ".$v_domain." 'json'", $output, $return_var);
check_return_code($return_var,$output);
if (empty($_SESSION['error_msg'])) {
$data = json_decode(implode('', $output), true);
unset($output);
$v_username = $user;
$v_domain = $_GET['domain'];
$v_record_id = $_GET['record_id'];
$v_rec = $data[$v_record_id]['RECORD'];
$v_type = $data[$v_record_id]['TYPE'];
$v_val = $data[$v_record_id]['VALUE'];
$v_priority = $data[$v_record_id]['PRIORITY'];
$v_suspended = $data[$v_record_id]['SUSPENDED'];
if ( $v_suspended == 'yes' ) {
$v_status = 'suspended';
} else {
$v_status = 'active';
}
$v_date = $data[$v_record_id]['DATE'];
$v_time = $data[$v_record_id]['TIME'];
}
// Action
if (!empty($_POST['save'])) {
$v_domain = escapeshellarg($_POST['v_domain']);
$v_record_id = escapeshellarg($_POST['v_record_id']);
if (($v_val != $_POST['v_val']) || ($v_priority != $_POST['v_priority']) && (empty($_SESSION['error_msg']))) {
$v_val = escapeshellarg($_POST['v_val']);
$v_priority = escapeshellarg($_POST['v_priority']);
exec (VESTA_CMD."v-change-dns-record ".$v_username." ".$v_domain." ".$v_record_id." ".$v_val." ".$v_priority, $output, $return_var);
check_return_code($return_var,$output);
$v_val = $_POST['v_val'];
$restart_dns = 'yes';
unset($output);
}
if (($_GET['record_id'] != $_POST['v_record_id']) && (empty($_SESSION['error_msg']))) {
$v_old_record_id = escapeshellarg($_GET['record_id']);
exec (VESTA_CMD."v-change-dns-record-id ".$v_username." ".$v_domain." ".$v_old_record_id." ".$v_record_id, $output, $return_var);
check_return_code($return_var,$output);
unset($output);
}
if (empty($_SESSION['error_msg'])) {
$_SESSION['ok_msg'] = __('Changes has been saved.');
}
if ((empty($_SESSION['error_msg'])) && ($_GET['record_id'] != $_POST['v_record_id'])) {
header("Location: /edit/dns/?domain=".$_GET['domain']."&record_id=".$_POST['v_record_id']);
exit;
}
}
include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/edit_dns_rec.html');
unset($_SESSION['error_msg']);
unset($_SESSION['ok_msg']);
} }
// List dns record
if ((!empty($_GET['domain'])) && (!empty($_GET['record_id']))) {
// Display body for dns record
include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/edit_dns_rec.html');
}
// Flush session messages
unset($_SESSION['error_msg']);
unset($_SESSION['ok_msg']);
// Footer // Footer
include($_SERVER['DOCUMENT_ROOT'].'/templates/footer.html'); include($_SERVER['DOCUMENT_ROOT'].'/templates/footer.html');

View file

@ -3,107 +3,114 @@
error_reporting(NULL); error_reporting(NULL);
ob_start(); ob_start();
session_start(); session_start();
$TAB = 'IP'; $TAB = 'IP';
include($_SERVER['DOCUMENT_ROOT']."/inc/main.php"); include($_SERVER['DOCUMENT_ROOT']."/inc/main.php");
// Check user
if ($_SESSION['user'] != 'admin') {
header("Location: /list/user");
exit;
}
// Check ip argument
if (empty($_GET['ip'])) {
header("Location: /list/ip/");
exit;
}
// List ip
$v_ip = escapeshellarg($_GET['ip']);
exec (VESTA_CMD."v-list-sys-ip ".$v_ip." 'json'", $output, $return_var);
check_return_code($return_var,$output);
$data = json_decode(implode('', $output), true);
unset($output);
// Parse ip
$v_username = $user;
$v_ip = $_GET['ip'];
$v_netmask = $data[$v_ip]['NETMASK'];
$v_interace = $data[$v_ip]['INTERFACE'];
$v_name = $data[$v_ip]['NAME'];
$v_nat = $data[$v_ip]['NAT'];
$v_ipstatus = $data[$v_ip]['STATUS'];
if ($v_ipstatus == 'dedicated') $v_dedicated = 'yes';
$v_owner = $data[$v_ip]['OWNER'];
$v_date = $data[$v_ip]['DATE'];
$v_time = $data[$v_ip]['TIME'];
$v_suspended = $data[$v_ip]['SUSPENDED'];
if ( $v_suspended == 'yes' ) {
$v_status = 'suspended';
} else {
$v_status = 'active';
}
// List users
exec (VESTA_CMD."v-list-sys-users 'json'", $output, $return_var);
$users = json_decode(implode('', $output), true);
unset($output);
// Check POST request
if (!empty($_POST['save'])) {
$v_ip = escapeshellarg($_POST['v_ip']);
// Change Status
if (($v_ipstatus == 'shared') && (empty($_POST['v_shared'])) && (empty($_SESSION['error_msg']))) {
exec (VESTA_CMD."v-change-sys-ip-status ".$v_ip." 'dedicated'", $output, $return_var);
check_return_code($return_var,$output);
unset($output);
$v_dedicated = 'yes';
}
if (($v_ipstatus == 'dedicated') && (!empty($_POST['v_shared'])) && (empty($_SESSION['error_msg']))) {
exec (VESTA_CMD."v-change-sys-ip-status ".$v_ip." 'shared'", $output, $return_var);
check_return_code($return_var,$output);
unset($output);
unset($v_dedicated);
}
// Change owner
if (($v_owner != $_POST['v_owner']) && (empty($_SESSION['error_msg']))) {
$v_owner = escapeshellarg($_POST['v_owner']);
exec (VESTA_CMD."v-change-sys-ip-owner ".$v_ip." ".$v_owner, $output, $return_var);
check_return_code($return_var,$output);
$v_owner = $_POST['v_owner'];
unset($output);
}
// Change associated domain
if (($v_name != $_POST['v_name']) && (empty($_SESSION['error_msg']))) {
$v_name = escapeshellarg($_POST['v_name']);
exec (VESTA_CMD."v-change-sys-ip-name ".$v_ip." ".$v_name, $output, $return_var);
check_return_code($return_var,$output);
unset($output);
}
// Change NAT address
if (($v_nat != $_POST['v_nat']) && (empty($_SESSION['error_msg']))) {
$v_nat = escapeshellarg($_POST['v_nat']);
exec (VESTA_CMD."v-change-sys-ip-nat ".$v_ip." ".$v_nat, $output, $return_var);
check_return_code($return_var,$output);
unset($output);
}
// Set success message
if (empty($_SESSION['error_msg'])) {
$_SESSION['ok_msg'] = __('Changes has been saved.');
}
}
// Header // Header
include($_SERVER['DOCUMENT_ROOT'].'/templates/header.html'); include($_SERVER['DOCUMENT_ROOT'].'/templates/header.html');
// Panel // Panel
top_panel($user,$TAB); top_panel($user,$TAB);
// Are you admin? // Display body
if ($_SESSION['user'] == 'admin') { include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/edit_ip.html');
// Check user argument? // Flush session messages
if (empty($_GET['ip'])) { unset($_SESSION['error_msg']);
header("Location: /list/ip/"); unset($_SESSION['ok_msg']);
exit;
}
$v_ip = escapeshellarg($_GET['ip']);
exec (VESTA_CMD."v-list-sys-ip ".$v_ip." 'json'", $output, $return_var);
check_return_code($return_var,$output);
if (empty($_SESSION['error_msg'])) {
$data = json_decode(implode('', $output), true);
unset($output);
$v_username = $user;
$v_ip = $_GET['ip'];
$v_netmask = $data[$v_ip]['NETMASK'];
$v_interace = $data[$v_ip]['INTERFACE'];
$v_name = $data[$v_ip]['NAME'];
$v_nat = $data[$v_ip]['NAT'];
$v_ipstatus = $data[$v_ip]['STATUS'];
if ($v_ipstatus == 'dedicated') $v_dedicated = 'yes';
$v_owner = $data[$v_ip]['OWNER'];
$v_date = $data[$v_ip]['DATE'];
$v_time = $data[$v_ip]['TIME'];
$v_suspended = $data[$v_ip]['SUSPENDED'];
if ( $v_suspended == 'yes' ) {
$v_status = 'suspended';
} else {
$v_status = 'active';
}
exec (VESTA_CMD."v-list-sys-users 'json'", $output, $return_var);
$users = json_decode(implode('', $output), true);
unset($output);
// Action
if (!empty($_POST['save'])) {
$v_username = $user;
$v_ip = escapeshellarg($_POST['v_ip']);
// Change Status
if (($v_ipstatus == 'shared') && (empty($_POST['v_shared'])) && (empty($_SESSION['error_msg']))) {
exec (VESTA_CMD."v-change-sys-ip-status ".$v_ip." 'dedicated'", $output, $return_var);
check_return_code($return_var,$output);
unset($output);
$v_dedicated = 'yes';
}
if (($v_ipstatus == 'dedicated') && (!empty($_POST['v_shared'])) && (empty($_SESSION['error_msg']))) {
exec (VESTA_CMD."v-change-sys-ip-status ".$v_ip." 'shared'", $output, $return_var);
check_return_code($return_var,$output);
unset($output);
unset($v_dedicated);
}
// Change owner
if (($v_owner != $_POST['v_owner']) && (empty($_SESSION['error_msg']))) {
$v_owner = escapeshellarg($_POST['v_owner']);
exec (VESTA_CMD."v-change-sys-ip-owner ".$v_ip." ".$v_owner, $output, $return_var);
check_return_code($return_var,$output);
$v_owner = $_POST['v_owner'];
unset($output);
}
// Change Name
if (($v_name != $_POST['v_name']) && (empty($_SESSION['error_msg']))) {
$v_name = escapeshellarg($_POST['v_name']);
exec (VESTA_CMD."v-change-sys-ip-name ".$v_ip." ".$v_name, $output, $return_var);
check_return_code($return_var,$output);
unset($output);
}
// Change Nat
if (($v_nat != $_POST['v_nat']) && (empty($_SESSION['error_msg']))) {
$v_nat = escapeshellarg($_POST['v_nat']);
exec (VESTA_CMD."v-change-sys-ip-nat ".$v_ip." ".$v_nat, $output, $return_var);
check_return_code($return_var,$output);
unset($output);
}
if (empty($_SESSION['error_msg'])) {
$_SESSION['ok_msg'] = __('Changes has been saved.');
}
}
}
include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/edit_ip.html');
unset($_SESSION['error_msg']);
unset($_SESSION['ok_msg']);
}
// Footer // Footer
include($_SERVER['DOCUMENT_ROOT'].'/templates/footer.html'); include($_SERVER['DOCUMENT_ROOT'].'/templates/footer.html');

View file

@ -3,8 +3,8 @@
error_reporting(NULL); error_reporting(NULL);
ob_start(); ob_start();
session_start(); session_start();
$TAB = 'MAIL'; $TAB = 'MAIL';
include($_SERVER['DOCUMENT_ROOT']."/inc/main.php"); include($_SERVER['DOCUMENT_ROOT']."/inc/main.php");
// Header // Header
@ -13,7 +13,7 @@ include($_SERVER['DOCUMENT_ROOT'].'/templates/header.html');
// Panel // Panel
top_panel($user,$TAB); top_panel($user,$TAB);
// Check user argument? // Check domain argument
if (empty($_GET['domain'])) { if (empty($_GET['domain'])) {
header("Location: /list/mail/"); header("Location: /list/mail/");
exit; exit;
@ -23,272 +23,289 @@ if (empty($_GET['domain'])) {
if (($_SESSION['user'] == 'admin') && (!empty($_GET['user']))) { if (($_SESSION['user'] == 'admin') && (!empty($_GET['user']))) {
$user=escapeshellarg($_GET['user']); $user=escapeshellarg($_GET['user']);
} }
$v_username = $user;
// Check domain // List mail domain
if ((!empty($_GET['domain'])) && (empty($_GET['account']))) { if ((!empty($_GET['domain'])) && (empty($_GET['account']))) {
$v_domain = escapeshellarg($_GET['domain']); $v_domain = escapeshellarg($_GET['domain']);
exec (VESTA_CMD."v-list-mail-domain ".$user." ".$v_domain." json", $output, $return_var); exec (VESTA_CMD."v-list-mail-domain ".$user." ".$v_domain." json", $output, $return_var);
check_return_code($return_var,$output); $data = json_decode(implode('', $output), true);
if (empty($_SESSION['error_msg'])) { unset($output);
$data = json_decode(implode('', $output), true);
unset($output); // Parse domain
$v_username = $user; $v_domain = $_GET['domain'];
$v_domain = $_GET['domain']; $v_antispam = $data[$v_domain]['ANTISPAM'];
$v_antispam = $data[$v_domain]['ANTISPAM']; $v_antivirus = $data[$v_domain]['ANTIVIRUS'];
$v_antivirus = $data[$v_domain]['ANTIVIRUS']; $v_dkim = $data[$v_domain]['DKIM'];
$v_dkim = $data[$v_domain]['DKIM']; $v_catchall = $data[$v_domain]['CATCHALL'];
$v_catchall = $data[$v_domain]['CATCHALL']; $v_date = $data[$v_domain]['DATE'];
$v_date = $data[$v_domain]['DATE']; $v_time = $data[$v_domain]['TIME'];
$v_time = $data[$v_domain]['TIME']; $v_suspended = $data[$v_domain]['SUSPENDED'];
$v_suspended = $data[$v_domain]['SUSPENDED']; if ( $v_suspended == 'yes' ) {
if ( $v_suspended == 'yes' ) { $v_status = 'suspended';
$v_status = 'suspended'; } else {
} else { $v_status = 'active';
$v_status = 'active';
}
} }
}
// Action // List mail account
if (!empty($_POST['save'])) { if ((!empty($_GET['domain'])) && (!empty($_GET['account']))) {
$v_domain = escapeshellarg($_POST['v_domain']);
// Antispam
if (($v_antispam == 'yes') && (empty($_POST['v_antispam'])) && (empty($_SESSION['error_msg']))) {
exec (VESTA_CMD."v-delete-mail-domain-antispam ".$v_username." ".$v_domain, $output, $return_var);
check_return_code($return_var,$output);
$v_antispam = 'no';
unset($output);
}
if (($v_antispam == 'no') && (!empty($_POST['v_antispam'])) && (empty($_SESSION['error_msg']))) {
exec (VESTA_CMD."v-add-mail-domain-antispam ".$v_username." ".$v_domain, $output, $return_var);
check_return_code($return_var,$output);
$v_antispam = 'yes';
unset($output);
}
// Antivirus
if (($v_antivirus == 'yes') && (empty($_POST['v_antivirus'])) && (empty($_SESSION['error_msg']))) {
exec (VESTA_CMD."v-delete-mail-domain-antivirus ".$v_username." ".$v_domain, $output, $return_var);
check_return_code($return_var,$output);
$v_antivirus = 'no';
unset($output);
}
if (($v_antivirus == 'no') && (!empty($_POST['v_antivirus'])) && (empty($_SESSION['error_msg']))) {
exec (VESTA_CMD."v-add-mail-domain-antivirus ".$v_username." ".$v_domain, $output, $return_var);
check_return_code($return_var,$output);
$v_antivirus = 'yes';
unset($output);
}
if (empty($_SESSION['error_msg'])) {
$_SESSION['ok_msg'] = __('Changes has been saved.');
}
// DKIM
if (($v_dkim == 'yes') && (empty($_POST['v_dkim'])) && (empty($_SESSION['error_msg']))) {
exec (VESTA_CMD."v-delete-mail-domain-dkim ".$v_username." ".$v_domain, $output, $return_var);
check_return_code($return_var,$output);
$v_dkim = 'no';
unset($output);
}
if (($v_dkim == 'no') && (!empty($_POST['v_dkim'])) && (empty($_SESSION['error_msg']))) {
exec (VESTA_CMD."v-add-mail-domain-dkim ".$v_username." ".$v_domain, $output, $return_var);
check_return_code($return_var,$output);
$v_dkim = 'yes';
unset($output);
}
// Catchall
if ((!empty($v_catchall)) && (empty($_POST['v_catchall'])) && (empty($_SESSION['error_msg']))) {
exec (VESTA_CMD."v-delete-mail-domain-catchall ".$v_username." ".$v_domain, $output, $return_var);
check_return_code($return_var,$output);
$v_catchall = '';
unset($output);
}
if ((!empty($v_catchall)) && (!empty($_POST['v_catchall'])) && (empty($_SESSION['error_msg']))) {
if ($v_catchall != $_POST['v_catchall']) {
$v_catchall = escapeshellarg($_POST['v_catchall']);
exec (VESTA_CMD."v-change-mail-domain-catchall ".$v_username." ".$v_domain." ".$v_catchall, $output, $return_var);
check_return_code($return_var,$output);
unset($output);
}
}
if ((empty($v_catchall)) && (!empty($_POST['v_catchall'])) && (empty($_SESSION['error_msg']))) {
$v_catchall = escapeshellarg($_POST['v_catchall']);
exec (VESTA_CMD."v-add-mail-domain-catchall ".$v_username." ".$v_domain." ".$v_catchall, $output, $return_var);
check_return_code($return_var,$output);
unset($output);
}
if (empty($_SESSION['error_msg'])) {
$_SESSION['ok_msg'] = __('Changes has been saved.');
}
}
include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/edit_mail.html');
unset($_SESSION['error_msg']);
unset($_SESSION['ok_msg']);
} else {
$v_username = $user;
$v_domain = escapeshellarg($_GET['domain']); $v_domain = escapeshellarg($_GET['domain']);
$v_account = escapeshellarg($_GET['account']); $v_account = escapeshellarg($_GET['account']);
exec (VESTA_CMD."v-list-mail-account ".$user." ".$v_domain." ".$v_account." 'json'", $output, $return_var); exec (VESTA_CMD."v-list-mail-account ".$user." ".$v_domain." ".$v_account." 'json'", $output, $return_var);
check_return_code($return_var,$output); $data = json_decode(implode('', $output), true);
if (empty($_SESSION['error_msg'])) { unset($output);
$data = json_decode(implode('', $output), true);
// Parse mail account
$v_username = $user;
$v_domain = $_GET['domain'];
$v_account = $_GET['account'];
$v_password = "••••••••";
$v_aliases = str_replace(',', "\n", $data[$v_account]['ALIAS']);
$valiases = explode(",", $data[$v_account]['ALIAS']);
$v_fwd = str_replace(',', "\n", $data[$v_account]['FWD']);
$vfwd = explode(",", $data[$v_account]['FWD']);
$v_fwd_only = $data[$v_account]['FWD_ONLY'];
$v_quota = $data[$v_account]['QUOTA'];
$v_autoreply = $data[$v_account]['AUTOREPLY'];
$v_suspended = $data[$v_account]['SUSPENDED'];
if ( $v_suspended == 'yes' ) {
$v_status = 'suspended';
} else {
$v_status = 'active';
}
$v_date = $data[$v_account]['DATE'];
$v_time = $data[$v_account]['TIME'];
// Parse autoreply
if ( $v_autoreply == 'yes' ) {
exec (VESTA_CMD."v-list-mail-account-autoreply ".$user." '".$v_domain."' '".$v_account."' json", $output, $return_var);
$autoreply_str = json_decode(implode('', $output), true);
unset($output); unset($output);
$v_username = $user; $v_autoreply_message = $autoreply_str[$v_account]['MSG'];
$v_domain = $_GET['domain'];
$v_account = $_GET['account'];
$v_password = "••••••••";
$v_aliases = str_replace(',', "\n", $data[$v_account]['ALIAS']);
$valiases = explode(",", $data[$v_account]['ALIAS']);
$v_fwd = str_replace(',', "\n", $data[$v_account]['FWD']);
$vfwd = explode(",", $data[$v_account]['FWD']);
$v_fwd_only = $data[$v_account]['FWD_ONLY'];
$v_quota = $data[$v_account]['QUOTA'];
$v_autoreply = $data[$v_account]['AUTOREPLY'];
if ( $v_autoreply == 'yes' ) {
exec (VESTA_CMD."v-list-mail-account-autoreply ".$user." '".$v_domain."' '".$v_account."' json", $output, $return_var);
$autoreply_str = json_decode(implode('', $output), true);
unset($output);
$v_autoreply_message = $autoreply_str[$v_account]['MSG'];
}
$v_suspended = $data[$v_account]['SUSPENDED'];
if ( $v_suspended == 'yes' ) {
$v_status = 'suspended';
} else {
$v_status = 'active';
}
$v_date = $data[$v_account]['DATE'];
$v_time = $data[$v_account]['TIME'];
} }
// Action
if (!empty($_POST['save'])) {
$v_domain = escapeshellarg($_POST['v_domain']);
$v_account = escapeshellarg($_POST['v_account']);
// Password
if (($v_password != $_POST['v_password']) && (empty($_SESSION['error_msg']))) {
$v_password = escapeshellarg($_POST['v_password']);
exec (VESTA_CMD."v-change-mail-account-password ".$v_username." ".$v_domain." ".$v_account." ".$v_password, $output, $return_var);
check_return_code($return_var,$output);
$v_password = "••••••••";
unset($output);
}
// Quota
if (($v_quota != $_POST['v_quota']) && (empty($_SESSION['error_msg']))) {
if (empty($_POST['v_quota'])) {
$v_quota = 0;
} else {
$v_quota = escapeshellarg($_POST['v_quota']);
}
exec (VESTA_CMD."v-change-mail-account-quota ".$v_username." ".$v_domain." ".$v_account." ".$v_quota, $output, $return_var);
check_return_code($return_var,$output);
unset($output);
}
// Aliases
if (empty($_SESSION['error_msg'])) {
$waliases = preg_replace("/\n/", " ", $_POST['v_aliases']);
$waliases = preg_replace("/,/", " ", $waliases);
$waliases = preg_replace('/\s+/', ' ',$waliases);
$waliases = trim($waliases);
$aliases = explode(" ", $waliases);
$v_aliases = str_replace(' ', "\n", $waliases);
$result = array_diff($valiases, $aliases);
foreach ($result as $alias) {
if ((empty($_SESSION['error_msg'])) && (!empty($alias))) {
exec (VESTA_CMD."v-delete-mail-account-alias ".$v_username." ".$v_domain." ".$v_account." '".$alias."'", $output, $return_var);
check_return_code($return_var,$output);
unset($output);
}
}
$result = array_diff($aliases, $valiases);
foreach ($result as $alias) {
if ((empty($_SESSION['error_msg'])) && (!empty($alias))) {
exec (VESTA_CMD."v-add-mail-account-alias ".$v_username." ".$v_domain." ".$v_account." '".$alias."'", $output, $return_var);
check_return_code($return_var,$output);
unset($output);
}
}
}
// Forwarders
if (empty($_SESSION['error_msg'])) {
$wfwd = preg_replace("/\n/", " ", $_POST['v_fwd']);
$wfwd = preg_replace("/,/", " ", $wfwd);
$wfwd = preg_replace('/\s+/', ' ',$wfwd);
$wfwd = trim($wfwd);
$fwd = explode(" ", $wfwd);
$v_fwd = str_replace(' ', "\n", $wfwd);
$result = array_diff($vfwd, $fwd);
foreach ($result as $forward) {
if ((empty($_SESSION['error_msg'])) && (!empty($forward))) {
exec (VESTA_CMD."v-delete-mail-account-forward ".$v_username." ".$v_domain." ".$v_account." '".$forward."'", $output, $return_var);
check_return_code($return_var,$output);
unset($output);
}
}
$result = array_diff($fwd, $vfwd);
foreach ($result as $forward) {
if ((empty($_SESSION['error_msg'])) && (!empty($forward))) {
exec (VESTA_CMD."v-add-mail-account-forward ".$v_username." ".$v_domain." ".$v_account." '".$forward."'", $output, $return_var);
check_return_code($return_var,$output);
unset($output);
}
}
}
// FWD_ONLY flag
if (($v_fwd_only == 'yes') && (empty($_POST['v_fwd_only'])) && (empty($_SESSION['error_msg']))) {
exec (VESTA_CMD."v-delete-mail-account-fwd-only ".$v_username." ".$v_domain." ".$v_account, $output, $return_var);
check_return_code($return_var,$output);
unset($output);
$v_fwd_only = '';
}
if (($v_fwd_only != 'yes') && (!empty($_POST['v_fwd_only'])) && (empty($_SESSION['error_msg']))) {
exec (VESTA_CMD."v-add-mail-account-fwd-only ".$v_username." ".$v_domain." ".$v_account, $output, $return_var);
check_return_code($return_var,$output);
unset($output);
$v_fwd_only = 'yes';
}
// Autoreply
if (($v_autoreply == 'yes') && (empty($_POST['v_autoreply'])) && (empty($_SESSION['error_msg']))) {
exec (VESTA_CMD."v-delete-mail-account-autoreply ".$v_username." ".$v_domain." ".$v_account, $output, $return_var);
check_return_code($return_var,$output);
unset($output);
$v_autoreply = 'no';
$v_autoreply_message = '';
}
if (($v_autoreply == 'yes') && (!empty($_POST['v_autoreply'])) && (empty($_SESSION['error_msg']))) {
if ( $v_autoreply_message != str_replace("\r\n", "\n", $_POST['v_autoreply_message'])) {
$v_autoreply_message = str_replace("\r\n", "\n", $_POST['v_autoreply_message']);
$v_autoreply_message = escapeshellarg($v_autoreply_message);
exec (VESTA_CMD."v-add-mail-account-autoreply ".$v_username." ".$v_domain." ".$v_account." ".$v_autoreply_message, $output, $return_var);
check_return_code($return_var,$output);
unset($output);
$v_autoreply_message = $_POST['v_autoreply_message'];
}
}
if (($v_autoreply == 'no') && (!empty($_POST['v_autoreply'])) && (empty($_SESSION['error_msg']))) {
if (empty($_POST['v_autoreply_message'])) $_SESSION['error_msg'] = $_SESSION['error_msg'] = __('Field "%s" can not be blank.','atoreply');
if (empty($_SESSION['error_msg'])) {
$v_autoreply_message = str_replace("\r\n", "\n", $_POST['v_autoreply_message']);
$v_autoreply_message = escapeshellarg($v_autoreply_message);
exec (VESTA_CMD."v-add-mail-account-autoreply ".$v_username." ".$v_domain." ".$v_account." ".$v_autoreply_message, $output, $return_var);
check_return_code($return_var,$output);
unset($output);
$v_autoreply = 'yes';
$v_autoreply_message = $_POST['v_autoreply_message'];
}
}
if (empty($_SESSION['error_msg'])) {
$_SESSION['ok_msg'] = __('Changes has been saved.');
}
}
include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/edit_mail_acc.html');
unset($_SESSION['error_msg']);
unset($_SESSION['ok_msg']);
} }
// Check POST request for mail domain
if ((!empty($_POST['save'])) && (!empty($_GET['domain'])) && (empty($_GET['account']))) {
$v_domain = escapeshellarg($_POST['v_domain']);
// Delete antispam
if (($v_antispam == 'yes') && (empty($_POST['v_antispam'])) && (empty($_SESSION['error_msg']))) {
exec (VESTA_CMD."v-delete-mail-domain-antispam ".$v_username." ".$v_domain, $output, $return_var);
check_return_code($return_var,$output);
$v_antispam = 'no';
unset($output);
}
// Add antispam
if (($v_antispam == 'no') && (!empty($_POST['v_antispam'])) && (empty($_SESSION['error_msg']))) {
exec (VESTA_CMD."v-add-mail-domain-antispam ".$v_username." ".$v_domain, $output, $return_var);
check_return_code($return_var,$output);
$v_antispam = 'yes';
unset($output);
}
// Delete antivirus
if (($v_antivirus == 'yes') && (empty($_POST['v_antivirus'])) && (empty($_SESSION['error_msg']))) {
exec (VESTA_CMD."v-delete-mail-domain-antivirus ".$v_username." ".$v_domain, $output, $return_var);
check_return_code($return_var,$output);
$v_antivirus = 'no';
unset($output);
}
// Add antivirs
if (($v_antivirus == 'no') && (!empty($_POST['v_antivirus'])) && (empty($_SESSION['error_msg']))) {
exec (VESTA_CMD."v-add-mail-domain-antivirus ".$v_username." ".$v_domain, $output, $return_var);
check_return_code($return_var,$output);
$v_antivirus = 'yes';
unset($output);
}
// Delete DKIM
if (($v_dkim == 'yes') && (empty($_POST['v_dkim'])) && (empty($_SESSION['error_msg']))) {
exec (VESTA_CMD."v-delete-mail-domain-dkim ".$v_username." ".$v_domain, $output, $return_var);
check_return_code($return_var,$output);
$v_dkim = 'no';
unset($output);
}
// Add DKIM
if (($v_dkim == 'no') && (!empty($_POST['v_dkim'])) && (empty($_SESSION['error_msg']))) {
exec (VESTA_CMD."v-add-mail-domain-dkim ".$v_username." ".$v_domain, $output, $return_var);
check_return_code($return_var,$output);
$v_dkim = 'yes';
unset($output);
}
// Delete catchall
if ((!empty($v_catchall)) && (empty($_POST['v_catchall'])) && (empty($_SESSION['error_msg']))) {
exec (VESTA_CMD."v-delete-mail-domain-catchall ".$v_username." ".$v_domain, $output, $return_var);
check_return_code($return_var,$output);
$v_catchall = '';
unset($output);
}
// Change catchall address
if ((!empty($v_catchall)) && (!empty($_POST['v_catchall'])) && (empty($_SESSION['error_msg']))) {
if ($v_catchall != $_POST['v_catchall']) {
$v_catchall = escapeshellarg($_POST['v_catchall']);
exec (VESTA_CMD."v-change-mail-domain-catchall ".$v_username." ".$v_domain." ".$v_catchall, $output, $return_var);
check_return_code($return_var,$output);
unset($output);
}
}
// Add catchall
if ((empty($v_catchall)) && (!empty($_POST['v_catchall'])) && (empty($_SESSION['error_msg']))) {
$v_catchall = escapeshellarg($_POST['v_catchall']);
exec (VESTA_CMD."v-add-mail-domain-catchall ".$v_username." ".$v_domain." ".$v_catchall, $output, $return_var);
check_return_code($return_var,$output);
unset($output);
}
// Set success message
if (empty($_SESSION['error_msg'])) {
$_SESSION['ok_msg'] = __('Changes has been saved.');
}
}
// Check POST request for mail account
if ((!empty($_POST['save'])) && (!empty($_GET['domain'])) && (!empty($_GET['account']))) {
$v_domain = escapeshellarg($_POST['v_domain']);
$v_account = escapeshellarg($_POST['v_account']);
// Change password
if (($v_password != $_POST['v_password']) && (empty($_SESSION['error_msg']))) {
$v_password = escapeshellarg($_POST['v_password']);
exec (VESTA_CMD."v-change-mail-account-password ".$v_username." ".$v_domain." ".$v_account." ".$v_password, $output, $return_var);
check_return_code($return_var,$output);
$v_password = "••••••••";
unset($output);
}
// Change quota
if (($v_quota != $_POST['v_quota']) && (empty($_SESSION['error_msg']))) {
if (empty($_POST['v_quota'])) {
$v_quota = 0;
} else {
$v_quota = escapeshellarg($_POST['v_quota']);
}
exec (VESTA_CMD."v-change-mail-account-quota ".$v_username." ".$v_domain." ".$v_account." ".$v_quota, $output, $return_var);
check_return_code($return_var,$output);
unset($output);
}
// Change account aliases
if (empty($_SESSION['error_msg'])) {
$waliases = preg_replace("/\n/", " ", $_POST['v_aliases']);
$waliases = preg_replace("/,/", " ", $waliases);
$waliases = preg_replace('/\s+/', ' ',$waliases);
$waliases = trim($waliases);
$aliases = explode(" ", $waliases);
$v_aliases = str_replace(' ', "\n", $waliases);
$result = array_diff($valiases, $aliases);
foreach ($result as $alias) {
if ((empty($_SESSION['error_msg'])) && (!empty($alias))) {
exec (VESTA_CMD."v-delete-mail-account-alias ".$v_username." ".$v_domain." ".$v_account." '".$alias."'", $output, $return_var);
check_return_code($return_var,$output);
unset($output);
}
}
$result = array_diff($aliases, $valiases);
foreach ($result as $alias) {
if ((empty($_SESSION['error_msg'])) && (!empty($alias))) {
exec (VESTA_CMD."v-add-mail-account-alias ".$v_username." ".$v_domain." ".$v_account." '".$alias."'", $output, $return_var);
check_return_code($return_var,$output);
unset($output);
}
}
}
// Change forwarders
if (empty($_SESSION['error_msg'])) {
$wfwd = preg_replace("/\n/", " ", $_POST['v_fwd']);
$wfwd = preg_replace("/,/", " ", $wfwd);
$wfwd = preg_replace('/\s+/', ' ',$wfwd);
$wfwd = trim($wfwd);
$fwd = explode(" ", $wfwd);
$v_fwd = str_replace(' ', "\n", $wfwd);
$result = array_diff($vfwd, $fwd);
foreach ($result as $forward) {
if ((empty($_SESSION['error_msg'])) && (!empty($forward))) {
exec (VESTA_CMD."v-delete-mail-account-forward ".$v_username." ".$v_domain." ".$v_account." '".$forward."'", $output, $return_var);
check_return_code($return_var,$output);
unset($output);
}
}
$result = array_diff($fwd, $vfwd);
foreach ($result as $forward) {
if ((empty($_SESSION['error_msg'])) && (!empty($forward))) {
exec (VESTA_CMD."v-add-mail-account-forward ".$v_username." ".$v_domain." ".$v_account." '".$forward."'", $output, $return_var);
check_return_code($return_var,$output);
unset($output);
}
}
}
// Delete FWD_ONLY flag
if (($v_fwd_only == 'yes') && (empty($_POST['v_fwd_only'])) && (empty($_SESSION['error_msg']))) {
exec (VESTA_CMD."v-delete-mail-account-fwd-only ".$v_username." ".$v_domain." ".$v_account, $output, $return_var);
check_return_code($return_var,$output);
unset($output);
$v_fwd_only = '';
}
// Add FWD_ONLY flag
if (($v_fwd_only != 'yes') && (!empty($_POST['v_fwd_only'])) && (empty($_SESSION['error_msg']))) {
exec (VESTA_CMD."v-add-mail-account-fwd-only ".$v_username." ".$v_domain." ".$v_account, $output, $return_var);
check_return_code($return_var,$output);
unset($output);
$v_fwd_only = 'yes';
}
// Delete autoreply
if (($v_autoreply == 'yes') && (empty($_POST['v_autoreply'])) && (empty($_SESSION['error_msg']))) {
exec (VESTA_CMD."v-delete-mail-account-autoreply ".$v_username." ".$v_domain." ".$v_account, $output, $return_var);
check_return_code($return_var,$output);
unset($output);
$v_autoreply = 'no';
$v_autoreply_message = '';
}
// Add autoreply
if ((!empty($_POST['v_autoreply'])) && (empty($_SESSION['error_msg']))) {
if ( $v_autoreply_message != str_replace("\r\n", "\n", $_POST['v_autoreply_message'])) {
$v_autoreply_message = str_replace("\r\n", "\n", $_POST['v_autoreply_message']);
$v_autoreply_message = escapeshellarg($v_autoreply_message);
exec (VESTA_CMD."v-add-mail-account-autoreply ".$v_username." ".$v_domain." ".$v_account." ".$v_autoreply_message, $output, $return_var);
check_return_code($return_var,$output);
unset($output);
$v_autoreply = 'yes';
$v_autoreply_message = $_POST['v_autoreply_message'];
}
}
// Set success message
if (empty($_SESSION['error_msg'])) {
$_SESSION['ok_msg'] = __('Changes has been saved.');
}
}
// Display body for mail domain
if ((!empty($_GET['domain'])) && (empty($_GET['account']))) {
include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/edit_mail.html');
}
// Display body for mail account
if ((!empty($_GET['domain'])) && (!empty($_GET['account']))) {
include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/edit_mail_acc.html');
}
// Flush session messages
unset($_SESSION['error_msg']);
unset($_SESSION['ok_msg']);
// Footer // Footer
include($_SERVER['DOCUMENT_ROOT'].'/templates/footer.html'); include($_SERVER['DOCUMENT_ROOT'].'/templates/footer.html');

View file

@ -3,196 +3,199 @@
error_reporting(NULL); error_reporting(NULL);
ob_start(); ob_start();
session_start(); session_start();
$TAB = 'PACKAGE'; $TAB = 'PACKAGE';
include($_SERVER['DOCUMENT_ROOT']."/inc/main.php"); include($_SERVER['DOCUMENT_ROOT']."/inc/main.php");
// Check user
if ($_SESSION['user'] != 'admin') {
header("Location: /list/user");
exit;
}
// Check package argument
if (empty($_GET['package'])) {
header("Location: /list/package/");
exit;
}
// List package
$v_package = escapeshellarg($_GET['package']);
exec (VESTA_CMD."v-list-user-package ".$v_package." 'json'", $output, $return_var);
$data = json_decode(implode('', $output), true);
unset($output);
// Parse package
$v_package = $_GET['package'];
$v_web_template = $data[$v_package]['WEB_TEMPLATE'];
$v_proxy_template = $data[$v_package]['PROXY_TEMPLATE'];
$v_dns_template = $data[$v_package]['DNS_TEMPLATE'];
$v_web_domains = $data[$v_package]['WEB_DOMAINS'];
$v_web_aliases = $data[$v_package]['WEB_ALIASES'];
$v_dns_domains = $data[$v_package]['DNS_DOMAINS'];
$v_dns_records = $data[$v_package]['DNS_RECORDS'];
$v_mail_domains = $data[$v_package]['MAIL_DOMAINS'];
$v_mail_accounts = $data[$v_package]['MAIL_ACCOUNTS'];
$v_databases = $data[$v_package]['DATABASES'];
$v_cron_jobs = $data[$v_package]['CRON_JOBS'];
$v_disk_quota = $data[$v_package]['DISK_QUOTA'];
$v_bandwidth = $data[$v_package]['BANDWIDTH'];
$v_shell = $data[$v_package]['SHELL'];
$v_ns = $data[$v_package]['NS'];
$nameservers = explode(", ", $v_ns);
$v_ns1 = $nameservers[0];
$v_ns2 = $nameservers[1];
$v_ns3 = $nameservers[2];
$v_ns4 = $nameservers[3];
$v_backups = $data[$v_package]['BACKUPS'];
$v_date = $data[$v_package]['DATE'];
$v_time = $data[$v_package]['TIME'];
$v_status = 'active';
// List web templates
exec (VESTA_CMD."v-list-web-templates json", $output, $return_var);
$web_templates = json_decode(implode('', $output), true);
unset($output);
// List proxy templates
exec (VESTA_CMD."v-list-web-templates-proxy json", $output, $return_var);
$proxy_templates = json_decode(implode('', $output), true);
unset($output);
// List dns templates
exec (VESTA_CMD."v-list-dns-templates json", $output, $return_var);
$dns_templates = json_decode(implode('', $output), true);
unset($output);
// List shels
exec (VESTA_CMD."v-list-sys-shells json", $output, $return_var);
$shells = json_decode(implode('', $output), true);
unset($output);
// Check POST request
if (!empty($_POST['save'])) {
// Check empty fields
if (empty($_POST['v_package'])) $errors[] = __('package');
if (empty($_POST['v_web_template'])) $errors[] = __('web template');
if (empty($_POST['v_proxy_template'])) $errors[] = __('proxy template');
if (empty($_POST['v_dns_template'])) $errors[] = __('dns template');
if (empty($_POST['v_shell'])) $errrors[] = __('shell');
if (!isset($_POST['v_web_domains'])) $errors[] = __('web domains');
if (!isset($_POST['v_web_aliases'])) $errors[] = __('web aliases');
if (!isset($_POST['v_dns_domains'])) $errors[] = __('dns domains');
if (!isset($_POST['v_dns_records'])) $errors[] = __('dns records');
if (!isset($_POST['v_mail_domains'])) $errors[] = __('mail domains');
if (!isset($_POST['v_mail_accounts'])) $errors[] = __('mail accounts');
if (!isset($_POST['v_databases'])) $errors[] = __('databases');
if (!isset($_POST['v_cron_jobs'])) $errors[] = __('cron jobs');
if (!isset($_POST['v_backups'])) $errors[] = __('backups');
if (!isset($_POST['v_disk_quota'])) $errors[] = __('quota');
if (!isset($_POST['v_bandwidth'])) $errors[] = __('bandwidth');
if (empty($_POST['v_ns1'])) $errors[] = __('ns1');
if (empty($_POST['v_ns2'])) $errors[] = __('ns2');
if (!empty($errors[0])) {
foreach ($errors as $i => $error) {
if ( $i == 0 ) {
$error_msg = $error;
} else {
$error_msg = $error_msg.", ".$error;
}
}
$_SESSION['error_msg'] = __('Field "%s" can not be blank.',$error_msg);
}
// Protect input
$v_package = escapeshellarg($_POST['v_package']);
$v_web_template = escapeshellarg($_POST['v_web_template']);
$v_proxy_template = escapeshellarg($_POST['v_proxy_template']);
$v_dns_template = escapeshellarg($_POST['v_dns_template']);
$v_shell = escapeshellarg($_POST['v_shell']);
$v_web_domains = escapeshellarg($_POST['v_web_domains']);
$v_web_aliases = escapeshellarg($_POST['v_web_aliases']);
$v_dns_domains = escapeshellarg($_POST['v_dns_domains']);
$v_dns_records = escapeshellarg($_POST['v_dns_records']);
$v_mail_domains = escapeshellarg($_POST['v_mail_domains']);
$v_mail_accounts = escapeshellarg($_POST['v_mail_accounts']);
$v_databases = escapeshellarg($_POST['v_databases']);
$v_cron_jobs = escapeshellarg($_POST['v_cron_jobs']);
$v_backups = escapeshellarg($_POST['v_backups']);
$v_disk_quota = escapeshellarg($_POST['v_disk_quota']);
$v_bandwidth = escapeshellarg($_POST['v_bandwidth']);
$v_ns1 = trim($_POST['v_ns1'], '.');
$v_ns2 = trim($_POST['v_ns2'], '.');
$v_ns3 = trim($_POST['v_ns3'], '.');
$v_ns4 = trim($_POST['v_ns4'], '.');
$v_ns = $v_ns1.",".$v_ns2;
if (!empty($v_ns3)) $v_ns .= ",".$v_ns3;
if (!empty($v_ns4)) $v_ns .= ",".$v_ns4;
$v_ns = escapeshellarg($v_ns);
$v_time = escapeshellarg(date('H:i:s'));
$v_date = escapeshellarg(date('Y-m-d'));
// Create temprorary directory
exec ('mktemp -d', $output, $return_var);
$tmpdir = $output[0];
unset($output);
// Save package file on a fs
$pkg = "WEB_TEMPLATE=".$v_web_template."\n";
$pkg .= "PROXY_TEMPLATE=".$v_proxy_template."\n";
$pkg .= "DNS_TEMPLATE=".$v_dns_template."\n";
$pkg .= "WEB_DOMAINS=".$v_web_domains."\n";
$pkg .= "WEB_ALIASES=".$v_web_aliases."\n";
$pkg .= "DNS_DOMAINS=".$v_dns_domains."\n";
$pkg .= "DNS_RECORDS=".$v_dns_records."\n";
$pkg .= "MAIL_DOMAINS=".$v_mail_domains."\n";
$pkg .= "MAIL_ACCOUNTS=".$v_mail_accounts."\n";
$pkg .= "DATABASES=".$v_databases."\n";
$pkg .= "CRON_JOBS=".$v_cron_jobs."\n";
$pkg .= "DISK_QUOTA=".$v_disk_quota."\n";
$pkg .= "BANDWIDTH=".$v_bandwidth."\n";
$pkg .= "NS=".$v_ns."\n";
$pkg .= "SHELL=".$v_shell."\n";
$pkg .= "BACKUPS=".$v_backups."\n";
$pkg .= "TIME=".$v_time."\n";
$pkg .= "DATE=".$v_date."\n";
$fp = fopen($tmpdir."/".$_POST['v_package'].".pkg", 'w');
fwrite($fp, $pkg);
fclose($fp);
// Save changes
exec (VESTA_CMD."v-add-user-package ".$tmpdir." ".$v_package." 'yes'", $output, $return_var);
check_return_code($return_var,$output);
unset($output);
// Remove temporary dir
exec ('rm -rf '.$tmpdir, $output, $return_var);
unset($output);
// Propogate new package
exec (VESTA_CMD."v-update-user-package ".$v_package." 'json'", $output, $return_var);
check_return_code($return_var,$output);
unset($output);
// Set success message
if (empty($_SESSION['error_msg'])) {
$_SESSION['ok_msg'] = __('Changes has been saved.');
}
}
// Header // Header
include($_SERVER['DOCUMENT_ROOT'].'/templates/header.html'); include($_SERVER['DOCUMENT_ROOT'].'/templates/header.html');
// Panel // Panel
top_panel($user,$TAB); top_panel($user,$TAB);
// Are you admin? // Display body
if ($_SESSION['user'] == 'admin') { include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/edit_package.html');
// Check user argument? // Flush session messages
if (empty($_GET['package'])) { unset($_SESSION['error_msg']);
header("Location: /list/package/"); unset($_SESSION['ok_msg']);
exit;
}
$v_package = escapeshellarg($_GET['package']);
exec (VESTA_CMD."v-list-user-package ".$v_package." 'json'", $output, $return_var);
check_return_code($return_var,$output);
if (empty($_SESSION['error_msg'])) {
$data = json_decode(implode('', $output), true);
unset($output);
$v_package = $_GET['package'];
$v_web_template = $data[$v_package]['WEB_TEMPLATE'];
$v_proxy_template = $data[$v_package]['PROXY_TEMPLATE'];
$v_dns_template = $data[$v_package]['DNS_TEMPLATE'];
$v_web_domains = $data[$v_package]['WEB_DOMAINS'];
$v_web_aliases = $data[$v_package]['WEB_ALIASES'];
$v_dns_domains = $data[$v_package]['DNS_DOMAINS'];
$v_dns_records = $data[$v_package]['DNS_RECORDS'];
$v_mail_domains = $data[$v_package]['MAIL_DOMAINS'];
$v_mail_accounts = $data[$v_package]['MAIL_ACCOUNTS'];
$v_databases = $data[$v_package]['DATABASES'];
$v_cron_jobs = $data[$v_package]['CRON_JOBS'];
$v_disk_quota = $data[$v_package]['DISK_QUOTA'];
$v_bandwidth = $data[$v_package]['BANDWIDTH'];
$v_shell = $data[$v_package]['SHELL'];
$v_ns = $data[$v_package]['NS'];
$nameservers = explode(", ", $v_ns);
$v_ns1 = $nameservers[0];
$v_ns2 = $nameservers[1];
$v_ns3 = $nameservers[2];
$v_ns4 = $nameservers[3];
$v_backups = $data[$v_package]['BACKUPS'];
$v_date = $data[$v_package]['DATE'];
$v_time = $data[$v_package]['TIME'];
$v_status = 'active';
exec (VESTA_CMD."v-list-web-templates json", $output, $return_var);
check_error($return_var);
$web_templates = json_decode(implode('', $output), true);
unset($output);
exec (VESTA_CMD."v-list-web-templates-proxy json", $output, $return_var);
check_error($return_var);
$proxy_templates = json_decode(implode('', $output), true);
unset($output);
exec (VESTA_CMD."v-list-dns-templates json", $output, $return_var);
check_error($return_var);
$dns_templates = json_decode(implode('', $output), true);
unset($output);
exec (VESTA_CMD."v-list-sys-shells json", $output, $return_var);
check_error($return_var);
$shells = json_decode(implode('', $output), true);
unset($output);
// Action
if (!empty($_POST['save'])) {
// Check input
if (empty($_POST['v_package'])) $errors[] = __('package');
if (empty($_POST['v_web_template'])) $errors[] = __('web template');
if (empty($_POST['v_proxy_template'])) $errors[] = __('proxy template');
if (empty($_POST['v_dns_template'])) $errors[] = __('dns template');
if (empty($_POST['v_shell'])) $errrors[] = __('shell');
if (!isset($_POST['v_web_domains'])) $errors[] = __('web domains');
if (!isset($_POST['v_web_aliases'])) $errors[] = __('web aliases');
if (!isset($_POST['v_dns_domains'])) $errors[] = __('dns domains');
if (!isset($_POST['v_dns_records'])) $errors[] = __('dns records');
if (!isset($_POST['v_mail_domains'])) $errors[] = __('mail domains');
if (!isset($_POST['v_mail_accounts'])) $errors[] = __('mail accounts');
if (!isset($_POST['v_databases'])) $errors[] = __('databases');
if (!isset($_POST['v_cron_jobs'])) $errors[] = __('cron jobs');
if (!isset($_POST['v_backups'])) $errors[] = __('backups');
if (!isset($_POST['v_disk_quota'])) $errors[] = __('quota');
if (!isset($_POST['v_bandwidth'])) $errors[] = __('bandwidth');
if (empty($_POST['v_ns1'])) $errors[] = __('ns1');
if (empty($_POST['v_ns2'])) $errors[] = __('ns2');
// Protect input
$v_package = escapeshellarg($_POST['v_package']);
$v_web_template = escapeshellarg($_POST['v_web_template']);
$v_proxy_template = escapeshellarg($_POST['v_proxy_template']);
$v_dns_template = escapeshellarg($_POST['v_dns_template']);
$v_shell = escapeshellarg($_POST['v_shell']);
$v_web_domains = escapeshellarg($_POST['v_web_domains']);
$v_web_aliases = escapeshellarg($_POST['v_web_aliases']);
$v_dns_domains = escapeshellarg($_POST['v_dns_domains']);
$v_dns_records = escapeshellarg($_POST['v_dns_records']);
$v_mail_domains = escapeshellarg($_POST['v_mail_domains']);
$v_mail_accounts = escapeshellarg($_POST['v_mail_accounts']);
$v_databases = escapeshellarg($_POST['v_databases']);
$v_cron_jobs = escapeshellarg($_POST['v_cron_jobs']);
$v_backups = escapeshellarg($_POST['v_backups']);
$v_disk_quota = escapeshellarg($_POST['v_disk_quota']);
$v_bandwidth = escapeshellarg($_POST['v_bandwidth']);
$v_ns1 = trim($_POST['v_ns1'], '.');
$v_ns2 = trim($_POST['v_ns2'], '.');
$v_ns3 = trim($_POST['v_ns3'], '.');
$v_ns4 = trim($_POST['v_ns4'], '.');
$v_ns = $v_ns1.",".$v_ns2;
if (!empty($v_ns3)) $v_ns .= ",".$v_ns3;
if (!empty($v_ns4)) $v_ns .= ",".$v_ns4;
$v_ns = escapeshellarg($v_ns);
$v_time = escapeshellarg(date('H:i:s'));
$v_date = escapeshellarg(date('Y-m-d'));
// Check for errors
if (!empty($errors[0])) {
foreach ($errors as $i => $error) {
if ( $i == 0 ) {
$error_msg = $error;
} else {
$error_msg = $error_msg.", ".$error;
}
}
$_SESSION['error_msg'] = __('Field "%s" can not be blank.',$error_msg);
} else {
exec ('mktemp -d', $output, $return_var);
$tmpdir = $output[0];
unset($output);
// Create package
$pkg = "WEB_TEMPLATE=".$v_web_template."\n";
$pkg .= "PROXY_TEMPLATE=".$v_proxy_template."\n";
$pkg .= "DNS_TEMPLATE=".$v_dns_template."\n";
$pkg .= "WEB_DOMAINS=".$v_web_domains."\n";
$pkg .= "WEB_ALIASES=".$v_web_aliases."\n";
$pkg .= "DNS_DOMAINS=".$v_dns_domains."\n";
$pkg .= "DNS_RECORDS=".$v_dns_records."\n";
$pkg .= "MAIL_DOMAINS=".$v_mail_domains."\n";
$pkg .= "MAIL_ACCOUNTS=".$v_mail_accounts."\n";
$pkg .= "DATABASES=".$v_databases."\n";
$pkg .= "CRON_JOBS=".$v_cron_jobs."\n";
$pkg .= "DISK_QUOTA=".$v_disk_quota."\n";
$pkg .= "BANDWIDTH=".$v_bandwidth."\n";
$pkg .= "NS=".$v_ns."\n";
$pkg .= "SHELL=".$v_shell."\n";
$pkg .= "BACKUPS=".$v_backups."\n";
$pkg .= "TIME=".$v_time."\n";
$pkg .= "DATE=".$v_date."\n";
// Write package
$fp = fopen($tmpdir."/".$_POST['v_package'].".pkg", 'w');
fwrite($fp, $pkg);
fclose($fp);
// Rewrite package
if (empty($_SESSION['error_msg'])) {
exec (VESTA_CMD."v-add-user-package ".$tmpdir." ".$v_package." 'yes'", $output, $return_var);
check_return_code($return_var,$output);
unset($output);
}
// Remove tmpdir
exec ('rm -rf '.$tmpdir, $output, $return_var);
unset($output);
// Propogate new package
exec (VESTA_CMD."v-update-user-package ".$v_package." 'json'", $output, $return_var);
check_return_code($return_var,$output);
unset($output);
if (empty($_SESSION['error_msg'])) {
$_SESSION['ok_msg'] = __('Changes has been saved.');
}
}
}
}
include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/edit_package.html');
unset($_SESSION['error_msg']);
unset($_SESSION['ok_msg']);
}
// Footer // Footer
include($_SERVER['DOCUMENT_ROOT'].'/templates/footer.html'); include($_SERVER['DOCUMENT_ROOT'].'/templates/footer.html');

View file

@ -3,118 +3,126 @@
error_reporting(NULL); error_reporting(NULL);
ob_start(); ob_start();
session_start(); session_start();
$TAB = 'USER'; $TAB = 'USER';
include($_SERVER['DOCUMENT_ROOT']."/inc/main.php"); include($_SERVER['DOCUMENT_ROOT']."/inc/main.php");
// Header // Header
include($_SERVER['DOCUMENT_ROOT'].'/templates/header.html'); include($_SERVER['DOCUMENT_ROOT'].'/templates/header.html');
// Check user argument
if (empty($_GET['user'])) {
header("Location: /list/user/");
exit;
}
// Edit as someone else?
if (($_SESSION['user'] == 'admin') && (!empty($_GET['user']))) {
$user=$_GET['user'];
$v_username=$_GET['user'];
} else {
$user=$_SESSION['user'];
$v_username=$_SESSION['user'];
}
// List user
exec (VESTA_CMD."v-list-user ".$v_username." json", $output, $return_var);
check_return_code($return_var,$output);
$data = json_decode(implode('', $output), true);
unset($output);
// Parse user
$v_password = "••••••••";
$v_email = $data[$v_username]['CONTACT'];
$v_package = $data[$v_username]['PACKAGE'];
$v_language = $data[$v_username]['LANGUAGE'];
$v_fname = $data[$v_username]['FNAME'];
$v_lname = $data[$v_username]['LNAME'];
$v_shell = $data[$v_username]['SHELL'];
$v_ns = $data[$v_username]['NS'];
$nameservers = explode(", ", $v_ns);
$v_ns1 = $nameservers[0];
$v_ns2 = $nameservers[1];
$v_ns3 = $nameservers[2];
$v_ns4 = $nameservers[3];
$v_suspended = $data[$v_username]['SUSPENDED'];
if ( $v_suspended == 'yes' ) {
$v_status = 'suspended';
} else {
$v_status = 'active';
}
$v_time = $data[$v_username]['TIME'];
$v_date = $data[$v_username]['DATE'];
// List packages
exec (VESTA_CMD."v-list-user-packages json", $output, $return_var);
$packages = json_decode(implode('', $output), true);
unset($output);
// List lanugages
exec (VESTA_CMD."v-list-sys-languages json", $output, $return_var);
$languages = json_decode(implode('', $output), true);
unset($output);
// List shells
exec (VESTA_CMD."v-list-sys-shells json", $output, $return_var);
$shells = json_decode(implode('', $output), true);
unset($output);
// Are you admin? // Are you admin?
if ($_SESSION['user'] == 'admin') {
// Check user argument? // Check POST request
if (empty($_GET['user'])) { if (!empty($_POST['save'])) {
header("Location: /list/user/");
exit;
}
// Check user // Change password
$v_username = escapeshellarg($_GET['user']); if (($v_password != $_POST['v_password']) && (empty($_SESSION['error_msg']))) {
exec (VESTA_CMD."v-list-user ".$v_username." json", $output, $return_var); $v_password = escapeshellarg($_POST['v_password']);
check_return_code($return_var,$output); exec (VESTA_CMD."v-change-user-password ".$v_username." ".$v_password, $output, $return_var);
if (empty($_SESSION['error_msg'])) { check_return_code($return_var,$output);
$data = json_decode(implode('', $output), true);
unset($output);
$v_username = $_GET['user'];
$v_password = "••••••••"; $v_password = "••••••••";
$v_email = $data[$v_username]['CONTACT'];
$v_package = $data[$v_username]['PACKAGE'];
$v_language = $data[$v_username]['LANGUAGE'];
$v_fname = $data[$v_username]['FNAME'];
$v_lname = $data[$v_username]['LNAME'];
$v_shell = $data[$v_username]['SHELL'];
$v_ns = $data[$v_username]['NS'];
$nameservers = explode(", ", $v_ns);
$v_ns1 = $nameservers[0];
$v_ns2 = $nameservers[1];
$v_ns3 = $nameservers[2];
$v_ns4 = $nameservers[3];
$v_suspended = $data[$v_username]['SUSPENDED'];
if ( $v_suspended == 'yes' ) {
$v_status = 'suspended';
} else {
$v_status = 'active';
}
$v_time = $data[$v_username]['TIME'];
$v_date = $data[$v_username]['DATE'];
exec (VESTA_CMD."v-list-user-packages json", $output, $return_var);
$packages = json_decode(implode('', $output), true);
unset($output);
exec (VESTA_CMD."v-list-sys-languages json", $output, $return_var);
$languages = json_decode(implode('', $output), true);
unset($output);
exec (VESTA_CMD."v-list-sys-shells json", $output, $return_var);
$shells = json_decode(implode('', $output), true);
unset($output); unset($output);
} }
// Action // Change package (admin only)
if (!empty($_POST['save'])) { if (($v_package != $_POST['v_package']) && ($_SESSION['user'] == 'admin') && (empty($_SESSION['error_msg']))) {
$v_username = escapeshellarg($_POST['v_username']); $v_package = escapeshellarg($_POST['v_package']);
exec (VESTA_CMD."v-change-user-package ".$v_username." ".$v_package, $output, $return_var);
check_return_code($return_var,$output);
unset($output);
}
// Change password // Change language
if (($v_password != $_POST['v_password']) && (empty($_SESSION['error_msg']))) { if (($v_language != $_POST['v_language']) && (empty($_SESSION['error_msg']))) {
$v_password = escapeshellarg($_POST['v_password']); $v_language = escapeshellarg($_POST['v_language']);
exec (VESTA_CMD."v-change-user-password ".$v_username." ".$v_password, $output, $return_var); exec (VESTA_CMD."v-change-user-language ".$v_username." ".$v_language, $output, $return_var);
check_return_code($return_var,$output); check_return_code($return_var,$output);
$v_password = "••••••••"; if (($_GET['user'] == 'admin') && (empty($_SESSION['error_msg']))) $_SESSION['language'] = $_POST['v_language'];
unset($output); unset($output);
} }
// Change package // Change shell (admin only)
if (($v_package != $_POST['v_package']) && (empty($_SESSION['error_msg']))) { if (($v_shell != $_POST['v_shell']) && ($_SESSION['user'] == 'admin') && (empty($_SESSION['error_msg']))) {
$v_package = escapeshellarg($_POST['v_package']); $v_shell = escapeshellarg($_POST['v_shell']);
exec (VESTA_CMD."v-change-user-package ".$v_username." ".$v_package, $output, $return_var); exec (VESTA_CMD."v-change-user-shell ".$v_username." ".$v_shell, $output, $return_var);
check_return_code($return_var,$output);
unset($output);
}
// Change contact email
if (($v_email != $_POST['v_email']) && (empty($_SESSION['error_msg']))) {
if (!filter_var($_POST['v_email'], FILTER_VALIDATE_EMAIL)) {
$_SESSION['error_msg'] = __('Please enter valid email address.');
} else {
$v_email = escapeshellarg($_POST['v_email']);
exec (VESTA_CMD."v-change-user-contact ".$v_username." ".$v_email, $output, $return_var);
check_return_code($return_var,$output); check_return_code($return_var,$output);
unset($output); unset($output);
} }
}
// Change language // Change full name (admin only)
if (($v_language != $_POST['v_language']) && (empty($_SESSION['error_msg']))) { if (($v_fname != $_POST['v_fname']) || ($v_lname != $_POST['v_lname'])) {
$v_language = escapeshellarg($_POST['v_language']); if (($_SESSION['user'] == 'admin') && (empty($_SESSION['error_msg']))) {
exec (VESTA_CMD."v-change-user-language ".$v_username." ".$v_language, $output, $return_var);
check_return_code($return_var,$output);
if (($_GET['user'] == 'admin') && (empty($_SESSION['error_msg']))) $_SESSION['language'] = $_POST['v_language'];
unset($output);
}
// Change shell
if (($v_shell != $_POST['v_shell']) && (empty($_SESSION['error_msg']))) {
$v_shell = escapeshellarg($_POST['v_shell']);
exec (VESTA_CMD."v-change-user-shell ".$v_username." ".$v_shell, $output, $return_var);
check_return_code($return_var,$output);
unset($output);
}
// Change contact email
if (($v_email != $_POST['v_email']) && (empty($_SESSION['error_msg']))) {
// Validate email
if (!filter_var($_POST['v_email'], FILTER_VALIDATE_EMAIL)) {
$_SESSION['error_msg'] = __('Please enter valid email address.');
} else {
$v_email = escapeshellarg($_POST['v_email']);
exec (VESTA_CMD."v-change-user-contact ".$v_username." ".$v_email, $output, $return_var);
check_return_code($return_var,$output);
}
unset($output);
}
// Change Name
if (($v_fname != $_POST['v_fname']) || ($v_lname != $_POST['v_lname']) && (empty($_SESSION['error_msg']))) {
$v_fname = escapeshellarg($_POST['v_fname']); $v_fname = escapeshellarg($_POST['v_fname']);
$v_lname = escapeshellarg($_POST['v_lname']); $v_lname = escapeshellarg($_POST['v_lname']);
exec (VESTA_CMD."v-change-user-name ".$v_username." ".$v_fname." ".$v_lname, $output, $return_var); exec (VESTA_CMD."v-change-user-name ".$v_username." ".$v_fname." ".$v_lname, $output, $return_var);
@ -123,124 +131,41 @@ if ($_SESSION['user'] == 'admin') {
$v_fname = $_POST['v_fname']; $v_fname = $_POST['v_fname'];
$v_lname = $_POST['v_lname']; $v_lname = $_POST['v_lname'];
} }
// Change NameServers
if (($v_ns1 != $_POST['v_ns1']) || ($v_ns2 != $_POST['v_ns2']) || ($v_ns3 != $_POST['v_ns3']) || ($v_ns4 != $_POST['v_ns4']) && (empty($_SESSION['error_msg']))) {
$v_ns1 = escapeshellarg($_POST['v_ns1']);
$v_ns2 = escapeshellarg($_POST['v_ns2']);
$v_ns3 = escapeshellarg($_POST['v_ns3']);
$v_ns4 = escapeshellarg($_POST['v_ns4']);
$ns_cmd = VESTA_CMD."v-change-user-ns ".$v_username." ".$v_ns1." ".$v_ns2;
if (!empty($_POST['v_ns3'])) $ns_cmd = $ns_cmd." ".$v_ns3;
if (!empty($_POST['v_ns4'])) $ns_cmd = $ns_cmd." ".$v_ns4;
exec ($ns_cmd, $output, $return_var);
check_return_code($return_var,$output);
unset($output);
}
if (empty($_SESSION['error_msg'])) {
$_SESSION['ok_msg'] = __('Changes has been saved.');
}
}
// Panel
top_panel($user,$TAB);
include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/edit_user.html');
unset($_SESSION['error_msg']);
unset($_SESSION['ok_msg']);
} else {
// Check user argument?
if (empty($_GET['user'])) {
header("Location: /list/user/");
exit;
} }
// Check user // Change NameServers
$v_username = $user; if (($v_ns1 != $_POST['v_ns1']) || ($v_ns2 != $_POST['v_ns2']) || ($v_ns3 != $_POST['v_ns3']) || ($v_ns4 != $_POST['v_ns4']) && (empty($_SESSION['error_msg']))) {
exec (VESTA_CMD."v-list-user ".$v_username." json", $output, $return_var); $v_ns1 = escapeshellarg($_POST['v_ns1']);
check_return_code($return_var,$output); $v_ns2 = escapeshellarg($_POST['v_ns2']);
$v_ns3 = escapeshellarg($_POST['v_ns3']);
$v_ns4 = escapeshellarg($_POST['v_ns4']);
$ns_cmd = VESTA_CMD."v-change-user-ns ".$v_username." ".$v_ns1." ".$v_ns2;
if (!empty($_POST['v_ns3'])) $ns_cmd = $ns_cmd." ".$v_ns3;
if (!empty($_POST['v_ns4'])) $ns_cmd = $ns_cmd." ".$v_ns4;
exec ($ns_cmd, $output, $return_var);
check_return_code($return_var,$output);
unset($output);
}
// Set success message
if (empty($_SESSION['error_msg'])) { if (empty($_SESSION['error_msg'])) {
$data = json_decode(implode('', $output), true); $_SESSION['ok_msg'] = __('Changes has been saved.');
unset($output);
$v_password = "••••••••";
$v_email = $data[$v_username]['CONTACT'];
$v_fname = $data[$v_username]['FNAME'];
$v_lname = $data[$v_username]['LNAME'];
$v_language = $data[$v_username]['LANGUAGE'];
$v_ns = $data[$v_username]['NS'];
$nameservers = explode(", ", $v_ns);
$v_ns1 = $nameservers[0];
$v_ns2 = $nameservers[1];
$v_ns3 = $nameservers[2];
$v_ns4 = $nameservers[3];
$v_suspended = $data[$v_username]['SUSPENDED'];
if ( $v_suspended == 'yes' ) {
$v_status = 'suspended';
} else {
$v_status = 'active';
}
$v_time = $data[$v_username]['TIME'];
$v_date = $data[$v_username]['DATE'];
exec (VESTA_CMD."v-list-sys-languages json", $output, $return_var);
$languages = json_decode(implode('', $output), true);
unset($output);
} }
// Action
if (!empty($_POST['save'])) {
// Change password
if (($v_password != $_POST['v_password']) && (empty($_SESSION['error_msg']))) {
$v_password = escapeshellarg($_POST['v_password']);
exec (VESTA_CMD."v-change-user-password ".$v_username." ".$v_password, $output, $return_var);
check_return_code($return_var,$output);
$v_password = "••••••••";
unset($output);
}
// Change language
if (($v_language != $_POST['v_language']) && (empty($_SESSION['error_msg']))) {
$v_language = escapeshellarg($_POST['v_language']);
exec (VESTA_CMD."v-change-user-language ".$v_username." ".$v_language, $output, $return_var);
check_return_code($return_var,$output);
if (empty($_SESSION['error_msg'])) $_SESSION['language'] = $_POST['v_language'];
unset($output);
}
// Change contact email
if (($v_email != $_POST['v_email']) && (empty($_SESSION['error_msg']))) {
$v_email = escapeshellarg($_POST['v_email']);
exec (VESTA_CMD."v-change-user-contact ".$v_username." ".$v_email, $output, $return_var);
check_return_code($return_var,$output);
unset($output);
}
// Change NameServers
if (($v_ns1 != $_POST['v_ns1']) || ($v_ns2 != $_POST['v_ns2']) || ($v_ns3 != $_POST['v_ns3']) || ($v_ns4 != $_POST['v_ns4']) && (empty($_SESSION['error_msg']))) {
$v_ns1 = escapeshellarg($_POST['v_ns1']);
$v_ns2 = escapeshellarg($_POST['v_ns2']);
$v_ns3 = escapeshellarg($_POST['v_ns3']);
$v_ns4 = escapeshellarg($_POST['v_ns4']);
$ns_cmd = VESTA_CMD."v-change-user-ns ".$v_username." ".$v_ns1." ".$v_ns2;
if (!empty($_POST['v_ns3'])) $ns_cmd = $ns_cmd." ".$v_ns3;
if (!empty($_POST['v_ns4'])) $ns_cmd = $ns_cmd." ".$v_ns4;
exec ($ns_cmd, $output, $return_var);
check_return_code($return_var,$output);
unset($output);
}
if (empty($_SESSION['error_msg'])) {
$_SESSION['ok_msg'] = __('Changes has been saved.');
}
}
// Panel
top_panel($user,$TAB);
include($_SERVER['DOCUMENT_ROOT'].'/templates/user/edit_user.html');
unset($_SESSION['error_msg']);
unset($_SESSION['ok_msg']);
} }
// Panel
top_panel($user,$TAB);
// Display body
if ($_SESSION['user'] == 'admin') {
include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/edit_user.html');
} else {
include($_SERVER['DOCUMENT_ROOT'].'/templates/user/edit_user.html');
}
// Flush session messages
unset($_SESSION['error_msg']);
unset($_SESSION['ok_msg']);
// Footer // Footer
include($_SERVER['DOCUMENT_ROOT'].'/templates/footer.html'); include($_SERVER['DOCUMENT_ROOT'].'/templates/footer.html');

View file

@ -4,17 +4,11 @@ error_reporting(NULL);
ob_start(); ob_start();
session_start(); session_start();
unset($_SESSION['error_msg']); unset($_SESSION['error_msg']);
$TAB = 'WEB'; $TAB = 'WEB';
include($_SERVER['DOCUMENT_ROOT']."/inc/main.php"); include($_SERVER['DOCUMENT_ROOT']."/inc/main.php");
// Header // Check domain argument
include($_SERVER['DOCUMENT_ROOT'].'/templates/header.html');
// Panel
top_panel($user,$TAB);
// Check user argument?
if (empty($_GET['domain'])) { if (empty($_GET['domain'])) {
header("Location: /list/web/"); header("Location: /list/web/");
exit; exit;
@ -25,73 +19,77 @@ if (($_SESSION['user'] == 'admin') && (!empty($_GET['user']))) {
$user=escapeshellarg($_GET['user']); $user=escapeshellarg($_GET['user']);
} }
// Check domain // List domain
$v_domain = escapeshellarg($_GET['domain']); $v_domain = escapeshellarg($_GET['domain']);
exec (VESTA_CMD."v-list-web-domain ".$user." ".$v_domain." json", $output, $return_var); exec (VESTA_CMD."v-list-web-domain ".$user." ".$v_domain." json", $output, $return_var);
check_return_code($return_var,$output); $data = json_decode(implode('', $output), true);
if (empty($_SESSION['error_msg'])) { unset($output);
$data = json_decode(implode('', $output), true);
unset($output);
$v_username = $user;
$v_domain = $_GET['domain'];
$v_ip = $data[$v_domain]['IP'];
$v_template = $data[$v_domain]['TPL'];
$v_aliases = str_replace(',', "\n", $data[$v_domain]['ALIAS']);
$valiases = explode(",", $data[$v_domain]['ALIAS']);
$v_tpl = $data[$v_domain]['IP'];
$v_cgi = $data[$v_domain]['CGI'];
$v_elog = $data[$v_domain]['ELOG'];
$v_ssl = $data[$v_domain]['SSL'];
if ( $v_ssl == 'yes' ) {
exec (VESTA_CMD."v-list-web-domain-ssl ".$user." '".$v_domain."' json", $output, $return_var);
$ssl_str = json_decode(implode('', $output), true);
unset($output);
$v_ssl_crt = $ssl_str[$v_domain]['CRT'];
$v_ssl_key = $ssl_str[$v_domain]['KEY'];
$v_ssl_ca = $ssl_str[$v_domain]['CA'];
}
$v_ssl_home = $data[$v_domain]['SSL_HOME'];
$v_proxy = $data[$v_domain]['PROXY'];
$v_proxy_template = $data[$v_domain]['PROXY'];
$v_proxy_ext = str_replace(',', ', ', $data[$v_domain]['PROXY_EXT']);
$v_stats = $data[$v_domain]['STATS'];
$v_stats_user = $data[$v_domain]['STATS_USER'];
if (!empty($v_stats_user)) $v_stats_password = "••••••••";
$v_ftp_user = $data[$v_domain]['FTP_USER'];
if (!empty($v_ftp_user)) $v_ftp_password = "••••••••";
$v_suspended = $data[$v_domain]['SUSPENDED'];
if ( $v_suspended == 'yes' ) {
$v_status = 'suspended';
} else {
$v_status = 'active';
}
$v_time = $data[$v_domain]['TIME'];
$v_date = $data[$v_domain]['DATE'];
exec (VESTA_CMD."v-list-user-ips ".$user." json", $output, $return_var); // Parse domain
$ips = json_decode(implode('', $output), true); $v_username = $user;
unset($output); $v_domain = $_GET['domain'];
$v_ip = $data[$v_domain]['IP'];
exec (VESTA_CMD."v-list-web-templates json", $output, $return_var); $v_template = $data[$v_domain]['TPL'];
$templates = json_decode(implode('', $output), true); $v_aliases = str_replace(',', "\n", $data[$v_domain]['ALIAS']);
unset($output); $valiases = explode(",", $data[$v_domain]['ALIAS']);
$v_tpl = $data[$v_domain]['IP'];
exec (VESTA_CMD."v-list-web-templates-proxy json", $output, $return_var); $v_cgi = $data[$v_domain]['CGI'];
$proxy_templates = json_decode(implode('', $output), true); $v_elog = $data[$v_domain]['ELOG'];
unset($output); $v_ssl = $data[$v_domain]['SSL'];
if ( $v_ssl == 'yes' ) {
exec (VESTA_CMD."v-list-web-stats json", $output, $return_var); exec (VESTA_CMD."v-list-web-domain-ssl ".$user." '".$v_domain."' json", $output, $return_var);
$stats = json_decode(implode('', $output), true); $ssl_str = json_decode(implode('', $output), true);
unset($output); unset($output);
$v_ssl_crt = $ssl_str[$v_domain]['CRT'];
$v_ssl_key = $ssl_str[$v_domain]['KEY'];
$v_ssl_ca = $ssl_str[$v_domain]['CA'];
} }
$v_ssl_home = $data[$v_domain]['SSL_HOME'];
$v_proxy = $data[$v_domain]['PROXY'];
// Action $v_proxy_template = $data[$v_domain]['PROXY'];
$v_proxy_ext = str_replace(',', ', ', $data[$v_domain]['PROXY_EXT']);
$v_stats = $data[$v_domain]['STATS'];
$v_stats_user = $data[$v_domain]['STATS_USER'];
if (!empty($v_stats_user)) $v_stats_password = "••••••••";
$v_ftp_user = $data[$v_domain]['FTP_USER'];
if (!empty($v_ftp_user)) $v_ftp_password = "••••••••";
$v_ftp_user_prepath = $data[$v_domain]['DOCUMENT_ROOT'];
$v_ftp_user_prepath = str_replace('/public_html', '', $v_ftp_user_prepath, $occurance = 1);
$v_ftp_email = $panel[$user]['CONTACT']; $v_ftp_email = $panel[$user]['CONTACT'];
$v_suspended = $data[$v_domain]['SUSPENDED'];
if ( $v_suspended == 'yes' ) {
$v_status = 'suspended';
} else {
$v_status = 'active';
}
$v_time = $data[$v_domain]['TIME'];
$v_date = $data[$v_domain]['DATE'];
// List ip addresses
exec (VESTA_CMD."v-list-user-ips ".$user." json", $output, $return_var);
$ips = json_decode(implode('', $output), true);
unset($output);
// List web templates
exec (VESTA_CMD."v-list-web-templates json", $output, $return_var);
$templates = json_decode(implode('', $output), true);
unset($output);
// List proxy templates
exec (VESTA_CMD."v-list-web-templates-proxy json", $output, $return_var);
$proxy_templates = json_decode(implode('', $output), true);
unset($output);
// List web stat engines
exec (VESTA_CMD."v-list-web-stats json", $output, $return_var);
$stats = json_decode(implode('', $output), true);
unset($output);
// Check POST request
if (!empty($_POST['save'])) { if (!empty($_POST['save'])) {
$v_domain = escapeshellarg($_POST['v_domain']); $v_domain = escapeshellarg($_POST['v_domain']);
// IP // Change web domain IP
if (($v_ip != $_POST['v_ip']) && (empty($_SESSION['error_msg']))) { if (($v_ip != $_POST['v_ip']) && (empty($_SESSION['error_msg']))) {
$v_ip = escapeshellarg($_POST['v_ip']); $v_ip = escapeshellarg($_POST['v_ip']);
exec (VESTA_CMD."v-change-web-domain-ip ".$v_username." ".$v_domain." ".$v_ip." 'no'", $output, $return_var); exec (VESTA_CMD."v-change-web-domain-ip ".$v_username." ".$v_domain." ".$v_ip." 'no'", $output, $return_var);
@ -99,27 +97,36 @@ if (!empty($_POST['save'])) {
$restart_web = 'yes'; $restart_web = 'yes';
$restart_proxy = 'yes'; $restart_proxy = 'yes';
unset($output); unset($output);
}
// Chane dns domain IP
if (empty($_SESSION['error_msg'])) {
exec (VESTA_CMD."v-list-dns-domain ".$v_username." ".$v_domain." json", $output, $return_var); exec (VESTA_CMD."v-list-dns-domain ".$v_username." ".$v_domain." json", $output, $return_var);
if ((empty($_SESSION['error_msg'])) && ($return_var == 0 )) { unset($output);
unset($output); if ($return_var == 0 ) {
exec (VESTA_CMD."v-change-dns-domain-ip ".$v_username." ".$v_domain." ".$v_ip." 'no'", $output, $return_var); exec (VESTA_CMD."v-change-dns-domain-ip ".$v_username." ".$v_domain." ".$v_ip." 'no'", $output, $return_var);
check_return_code($return_var,$output); check_return_code($return_var,$output);
$restart_dns = 'yes';
}
unset($output);
foreach($valiases as $v_alias ){
exec (VESTA_CMD."v-list-dns-domain ".$v_username." '".$v_alias."' json", $output, $return_var);
if ((empty($_SESSION['error_msg'])) && ($return_var == 0 )) {
exec (VESTA_CMD."v-change-dns-domain-ip ".$v_username." '".$v_alias."' ".$v_ip, $output, $return_var);
check_return_code($return_var,$output);
$restart_dns = 'yes';
}
unset($output); unset($output);
$restart_dns = 'yes';
} }
} }
// Template // Change dns ip for each alias
if (( $_SESSION['user'] == 'admin') && ($v_template != $_POST['v_template']) && (empty($_SESSION['error_msg']))) { if (empty($_SESSION['error_msg'])) {
foreach($valiases as $v_alias ){
exec (VESTA_CMD."v-list-dns-domain ".$v_username." '".$v_alias."' json", $output, $return_var);
unset($output);
if ($return_var == 0 ) {
exec (VESTA_CMD."v-change-dns-domain-ip ".$v_username." '".$v_alias."' ".$v_ip, $output, $return_var);
check_return_code($return_var,$output);
unset($output);
$restart_dns = 'yes';
}
}
}
// Change template (admin only)
if (($v_template != $_POST['v_template']) && ( $_SESSION['user'] == 'admin') && (empty($_SESSION['error_msg']))) {
$v_template = escapeshellarg($_POST['v_template']); $v_template = escapeshellarg($_POST['v_template']);
exec (VESTA_CMD."v-change-web-domain-tpl ".$v_username." ".$v_domain." ".$v_template." 'no'", $output, $return_var); exec (VESTA_CMD."v-change-web-domain-tpl ".$v_username." ".$v_domain." ".$v_template." 'no'", $output, $return_var);
check_return_code($return_var,$output); check_return_code($return_var,$output);
@ -127,7 +134,7 @@ if (!empty($_POST['save'])) {
$restart_web = 'yes'; $restart_web = 'yes';
} }
// Aliases // Change aliases
if (empty($_SESSION['error_msg'])) { if (empty($_SESSION['error_msg'])) {
$waliases = preg_replace("/\n/", " ", $_POST['v_aliases']); $waliases = preg_replace("/\n/", " ", $_POST['v_aliases']);
$waliases = preg_replace("/,/", " ", $waliases); $waliases = preg_replace("/,/", " ", $waliases);
@ -151,9 +158,9 @@ if (!empty($_POST['save'])) {
if ($return_var == 0) { if ($return_var == 0) {
exec (VESTA_CMD."v-delete-dns-on-web-alias ".$v_username." ".$v_domain." '".$alias."' 'no'", $output, $return_var); exec (VESTA_CMD."v-delete-dns-on-web-alias ".$v_username." ".$v_domain." '".$alias."' 'no'", $output, $return_var);
check_return_code($return_var,$output); check_return_code($return_var,$output);
unset($output);
$restart_dns = 'yes'; $restart_dns = 'yes';
} }
unset($output);
} }
} }
} }
@ -173,15 +180,15 @@ if (!empty($_POST['save'])) {
if ($return_var == 0) { if ($return_var == 0) {
exec (VESTA_CMD."v-add-dns-on-web-alias ".$v_username." ".$v_domain." '".$alias."' 'no'", $output, $return_var); exec (VESTA_CMD."v-add-dns-on-web-alias ".$v_username." ".$v_domain." '".$alias."' 'no'", $output, $return_var);
check_return_code($return_var,$output); check_return_code($return_var,$output);
unset($output);
$restart_dns = 'yes'; $restart_dns = 'yes';
} }
} }
unset($output);
} }
} }
} }
// Proxy // Delete proxy support
if ((!empty($v_proxy)) && (empty($_POST['v_proxy'])) && (empty($_SESSION['error_msg']))) { if ((!empty($v_proxy)) && (empty($_POST['v_proxy'])) && (empty($_SESSION['error_msg']))) {
exec (VESTA_CMD."v-delete-web-domain-proxy ".$v_username." ".$v_domain." 'no'", $output, $return_var); exec (VESTA_CMD."v-delete-web-domain-proxy ".$v_username." ".$v_domain." 'no'", $output, $return_var);
check_return_code($return_var,$output); check_return_code($return_var,$output);
@ -189,6 +196,8 @@ if (!empty($_POST['save'])) {
unset($v_proxy); unset($v_proxy);
$restart_proxy = 'yes'; $restart_proxy = 'yes';
} }
// Change proxy template / Update extention list
if ((!empty($v_proxy)) && (!empty($_POST['v_proxy'])) && (empty($_SESSION['error_msg']))) { if ((!empty($v_proxy)) && (!empty($_POST['v_proxy'])) && (empty($_SESSION['error_msg']))) {
$ext = preg_replace("/\n/", " ", $_POST['v_proxy_ext']); $ext = preg_replace("/\n/", " ", $_POST['v_proxy_ext']);
$ext = preg_replace("/,/", " ", $ext); $ext = preg_replace("/,/", " ", $ext);
@ -205,6 +214,8 @@ if (!empty($_POST['save'])) {
$restart_proxy = 'yes'; $restart_proxy = 'yes';
} }
} }
// Add proxy support
if ((empty($v_proxy)) && (!empty($_POST['v_proxy'])) && (empty($_SESSION['error_msg']))) { if ((empty($v_proxy)) && (!empty($_POST['v_proxy'])) && (empty($_SESSION['error_msg']))) {
$v_proxy_template = $_POST['v_proxy_template']; $v_proxy_template = $_POST['v_proxy_template'];
if (!empty($_POST['v_proxy_ext'])) { if (!empty($_POST['v_proxy_ext'])) {
@ -221,7 +232,7 @@ if (!empty($_POST['save'])) {
$restart_proxy = 'yes'; $restart_proxy = 'yes';
} }
// SSL // Delete SSL certificate
if (( $v_ssl == 'yes' ) && (empty($_POST['v_ssl'])) && (empty($_SESSION['error_msg']))) { if (( $v_ssl == 'yes' ) && (empty($_POST['v_ssl'])) && (empty($_SESSION['error_msg']))) {
exec (VESTA_CMD."v-delete-web-domain-ssl ".$v_username." ".$v_domain." 'no'", $output, $return_var); exec (VESTA_CMD."v-delete-web-domain-ssl ".$v_username." ".$v_domain." 'no'", $output, $return_var);
check_return_code($return_var,$output); check_return_code($return_var,$output);
@ -230,6 +241,8 @@ if (!empty($_POST['save'])) {
$restart_web = 'yes'; $restart_web = 'yes';
$restart_proxy = 'yes'; $restart_proxy = 'yes';
} }
// Change SSL certificate
if (($v_ssl == 'yes') && (!empty($_POST['v_ssl'])) && (empty($_SESSION['error_msg']))) { if (($v_ssl == 'yes') && (!empty($_POST['v_ssl'])) && (empty($_SESSION['error_msg']))) {
if (( $v_ssl_crt != str_replace("\r\n", "\n", $_POST['v_ssl_crt'])) || ( $v_ssl_key != str_replace("\r\n", "\n", $_POST['v_ssl_key'])) || ( $v_ssl_ca != str_replace("\r\n", "\n", $_POST['v_ssl_ca']))) { if (( $v_ssl_crt != str_replace("\r\n", "\n", $_POST['v_ssl_crt'])) || ( $v_ssl_key != str_replace("\r\n", "\n", $_POST['v_ssl_key'])) || ( $v_ssl_ca != str_replace("\r\n", "\n", $_POST['v_ssl_ca']))) {
exec ('mktemp -d', $mktemp_output, $return_var); exec ('mktemp -d', $mktemp_output, $return_var);
@ -269,15 +282,8 @@ if (!empty($_POST['save'])) {
$v_ssl_ca = $_POST['v_ssl_ca']; $v_ssl_ca = $_POST['v_ssl_ca'];
} }
} }
if (( $v_ssl == 'yes') && (!empty($_POST['v_ssl'])) && (empty($_SESSION['error_msg']))) {
if ( $v_ssl_home != $_POST['v_ssl_home'] ) { // Add SSL certificate
$v_ssl_home = escapeshellarg($_POST['v_ssl_home']);
exec (VESTA_CMD."v-change-web-domain-sslhome ".$user." ".$v_domain." ".$v_ssl_home." 'no'", $output, $return_var);
check_return_code($return_var,$output);
$v_ssl_home = $_POST['v_ssl_home'];
unset($output);
}
}
if (( $v_ssl == 'no') && (!empty($_POST['v_ssl'])) && (empty($_SESSION['error_msg']))) { if (( $v_ssl == 'no') && (!empty($_POST['v_ssl'])) && (empty($_SESSION['error_msg']))) {
if ((!empty($_POST['v_ssl'])) && (empty($_POST['v_ssl_crt']))) $errors[] = 'ssl certificate'; if ((!empty($_POST['v_ssl'])) && (empty($_POST['v_ssl_crt']))) $errors[] = 'ssl certificate';
if ((!empty($_POST['v_ssl'])) && (empty($_POST['v_ssl_key']))) $errors[] = 'ssl key'; if ((!empty($_POST['v_ssl'])) && (empty($_POST['v_ssl_key']))) $errors[] = 'ssl key';
@ -329,19 +335,34 @@ if (!empty($_POST['save'])) {
} }
} }
// Web Stats // Change document root for ssl domain
if (( $v_ssl == 'yes') && (!empty($_POST['v_ssl'])) && (empty($_SESSION['error_msg']))) {
if ( $v_ssl_home != $_POST['v_ssl_home'] ) {
$v_ssl_home = escapeshellarg($_POST['v_ssl_home']);
exec (VESTA_CMD."v-change-web-domain-sslhome ".$user." ".$v_domain." ".$v_ssl_home." 'no'", $output, $return_var);
check_return_code($return_var,$output);
$v_ssl_home = $_POST['v_ssl_home'];
unset($output);
}
}
// Delete web stats
if ((!empty($v_stats)) && ($_POST['v_stats'] == 'none') && (empty($_SESSION['error_msg']))) { if ((!empty($v_stats)) && ($_POST['v_stats'] == 'none') && (empty($_SESSION['error_msg']))) {
exec (VESTA_CMD."v-delete-web-domain-stats ".$v_username." ".$v_domain, $output, $return_var); exec (VESTA_CMD."v-delete-web-domain-stats ".$v_username." ".$v_domain, $output, $return_var);
check_return_code($return_var,$output); check_return_code($return_var,$output);
unset($output); unset($output);
$v_stats = ''; $v_stats = '';
} }
// Change web stats engine
if ((!empty($v_stats)) && ($_POST['v_stats'] != $v_stats) && (empty($_SESSION['error_msg']))) { if ((!empty($v_stats)) && ($_POST['v_stats'] != $v_stats) && (empty($_SESSION['error_msg']))) {
$v_stats = escapeshellarg($_POST['v_stats']); $v_stats = escapeshellarg($_POST['v_stats']);
exec (VESTA_CMD."v-change-web-domain-stats ".$v_username." ".$v_domain." ".$v_stats, $output, $return_var); exec (VESTA_CMD."v-change-web-domain-stats ".$v_username." ".$v_domain." ".$v_stats, $output, $return_var);
check_return_code($return_var,$output); check_return_code($return_var,$output);
unset($output); unset($output);
} }
// Add web stats
if ((empty($v_stats)) && ($_POST['v_stats'] != 'none') && (empty($_SESSION['error_msg']))) { if ((empty($v_stats)) && ($_POST['v_stats'] != 'none') && (empty($_SESSION['error_msg']))) {
$v_stats = escapeshellarg($_POST['v_stats']); $v_stats = escapeshellarg($_POST['v_stats']);
exec (VESTA_CMD."v-add-web-domain-stats ".$v_username." ".$v_domain." ".$v_stats, $output, $return_var); exec (VESTA_CMD."v-add-web-domain-stats ".$v_username." ".$v_domain." ".$v_stats, $output, $return_var);
@ -349,7 +370,7 @@ if (!empty($_POST['save'])) {
unset($output); unset($output);
} }
// Web Stats Auth // Delete web stats authorization
if ((!empty($v_stats_user)) && (empty($_POST['v_stats_auth'])) && (empty($_SESSION['error_msg']))) { if ((!empty($v_stats_user)) && (empty($_POST['v_stats_auth'])) && (empty($_SESSION['error_msg']))) {
exec (VESTA_CMD."v-delete-web-domain-stats-user ".$v_username." ".$v_domain, $output, $return_var); exec (VESTA_CMD."v-delete-web-domain-stats-user ".$v_username." ".$v_domain, $output, $return_var);
check_return_code($return_var,$output); check_return_code($return_var,$output);
@ -357,6 +378,8 @@ if (!empty($_POST['save'])) {
$v_stats_user = ''; $v_stats_user = '';
$v_stats_password = ''; $v_stats_password = '';
} }
// Change web stats user or password
if ((empty($v_stats_user)) && (!empty($_POST['v_stats_auth'])) && (empty($_SESSION['error_msg']))) { if ((empty($v_stats_user)) && (!empty($_POST['v_stats_auth'])) && (empty($_SESSION['error_msg']))) {
if (empty($_POST['v_stats_user'])) $errors[] = __('stats username'); if (empty($_POST['v_stats_user'])) $errors[] = __('stats username');
if (empty($_POST['v_stats_password'])) $errors[] = __('stats password'); if (empty($_POST['v_stats_password'])) $errors[] = __('stats password');
@ -378,6 +401,8 @@ if (!empty($_POST['save'])) {
$v_stats_password = "••••••••"; $v_stats_password = "••••••••";
} }
} }
// Add web stats authorization
if ((!empty($v_stats_user)) && (!empty($_POST['v_stats_auth'])) && (empty($_SESSION['error_msg']))) { if ((!empty($v_stats_user)) && (!empty($_POST['v_stats_auth'])) && (empty($_SESSION['error_msg']))) {
if (empty($_POST['v_stats_user'])) $errors[] = __('stats user'); if (empty($_POST['v_stats_user'])) $errors[] = __('stats user');
if (empty($_POST['v_stats_password'])) $errors[] = __('stats password'); if (empty($_POST['v_stats_password'])) $errors[] = __('stats password');
@ -401,112 +426,203 @@ if (!empty($_POST['save'])) {
} }
} }
// Delete FTP Account // Change ftp accounts
if ((!empty($v_ftp_user)) && (empty($_POST['v_ftp'])) && (empty($_SESSION['error_msg']))) { if (!empty($_POST['v_ftp_user'])) {
exec (VESTA_CMD."v-delete-web-domain-ftp ".$v_username." ".$v_domain, $output, $return_var); $v_ftp_users_updated = array();
check_return_code($return_var,$output); foreach ($_POST['v_ftp_user'] as $i => $v_ftp_user_data) {
unset($output); $v_ftp_user_data['v_ftp_user'] = preg_replace("/^".$user."_/i", "", $v_ftp_user_data['v_ftp_user']);
$v_ftp= ''; if ($v_ftp_user_data['is_new'] == 1) {
$v_ftp_user = ''; if ((!empty($v_ftp_user_data['v_ftp_email'])) && (!filter_var($v_ftp_user_data['v_ftp_email'], FILTER_VALIDATE_EMAIL))) $_SESSION['error_msg'] = __('Please enter valid email address.');
$v_ftp_password = ''; if (empty($v_ftp_user_data['v_ftp_user'])) $errors[] = 'ftp user';
} if (empty($v_ftp_user_data['v_ftp_password'])) $errors[] = 'ftp user password';
if (!empty($errors[0])) {
// Change FTP Account foreach ($errors as $i => $error) {
if ((!empty($v_ftp_user)) && (!empty($_POST['v_ftp'])) && (empty($_SESSION['error_msg']))) { if ( $i == 0 ) {
if (empty($_POST['v_ftp_user'])) $errors[] = __('ftp user'); $error_msg = $error;
if (empty($_POST['v_ftp_password'])) $errors[] = __('ftp user password'); } else {
if (!empty($errors[0])) { $error_msg = $error_msg.", ".$error;
foreach ($errors as $i => $error) { }
if ( $i == 0 ) { }
$error_msg = $error; $_SESSION['error_msg'] = __('Field "%s" can not be blank.',$error_msg);
} else {
$error_msg = $error_msg.", ".$error;
} }
}
$_SESSION['error_msg'] = __('Field "%s" can not be blank.',$error_msg);
}
if (($v_ftp_user != $_POST['v_ftp_user']) || ($_POST['v_ftp_password'] != "••••••••" ) && (empty($_SESSION['error_msg']))) {
$v_ftp_user = preg_replace("/^".$user."_/", "", $_POST['v_ftp_user']);
$v_ftp_user = escapeshellarg($v_ftp_user);
$v_ftp_password = escapeshellarg($_POST['v_ftp_password']);
exec (VESTA_CMD."v-add-web-domain-ftp ".$v_username." ".$v_domain." ".$v_ftp_user." ".$v_ftp_password, $output, $return_var);
check_return_code($return_var,$output);
unset($output);
$v_ftp= '';
$v_ftp_user = $user."_".preg_replace("/^".$user."_/", "", $_POST['v_ftp_user']);
$v_ftp_password = "••••••••";
}
}
// Add FTP Account $v_ftp_username = $v_ftp_user_data['v_ftp_user'];
if ((empty($v_ftp_user)) && (!empty($_POST['v_ftp'])) && (empty($_SESSION['error_msg']))) { $v_ftp_username_full = $user . '_' . $v_ftp_user_data['v_ftp_user'];
if ((!empty($_POST['v_ftp_email'])) && (!filter_var($_POST['v_ftp_email'], FILTER_VALIDATE_EMAIL))) $_SESSION['error_msg'] = __('Please enter valid email address.'); $v_ftp_user = escapeshellarg($v_ftp_username);
if (empty($_POST['v_ftp_user'])) $errors[] = 'ftp user'; $v_ftp_password = escapeshellarg($v_ftp_user_data['v_ftp_password']);
if (empty($_POST['v_ftp_password'])) $errors[] = 'ftp user password'; if (empty($_SESSION['error_msg'])) {
if (!empty($errors[0])) { exec (VESTA_CMD."v-add-web-domain-ftp ".$v_username." ".$v_domain." ".$v_ftp_username." ".$v_ftp_password . " " . $v_ftp_user_data['v_ftp_path'], $output, $return_var);
foreach ($errors as $i => $error) { check_return_code($return_var,$output);
if ( $i == 0 ) { if ((!empty($v_ftp_user_data['v_ftp_email'])) && (empty($_SESSION['error_msg']))) {
$error_msg = $error; $to = $v_ftp_user_data['v_ftp_email'];
} else { $subject = __("FTP login credentials");
$error_msg = $error_msg.", ".$error; $hostname = exec('hostname');
$from = __('MAIL_FROM',$hostname);
$mailtext = __('FTP_ACCOUNT_READY',$_GET['domain'],$user,$v_ftp_username,$v_ftp_user_data['v_ftp_password']);
send_email($to, $subject, $mailtext, $from);
unset($v_ftp_email);
}
unset($output);
} }
if ($return_var == 0) {
$v_ftp_password = "••••••••";
$v_ftp_user_data['is_new'] = 0;
}
else {
$v_ftp_user_data['is_new'] = 1;
}
$v_ftp_users_updated[] = array(
'is_new' => empty($_SESSION['error_msg']) ? 0 : 1,
'v_ftp_user' => $v_ftp_username_full,
'v_ftp_password' => $v_ftp_password,
'v_ftp_path' => $v_ftp_user_data['v_ftp_path'],
'v_ftp_email' => $v_ftp_user_data['v_ftp_email'],
'v_ftp_pre_path' => $v_ftp_user_prepath
);
continue;
} }
$_SESSION['error_msg'] = __('Field "%s" can not be blank.',$error_msg);
}
if (empty($_SESSION['error_msg'])) { if ($v_ftp_user_data['delete'] == 1) {
$v_ftp_user = escapeshellarg($_POST['v_ftp_user']); $v_ftp_username = $user . '_' . $v_ftp_user_data['v_ftp_user'];
$v_ftp_password = escapeshellarg($_POST['v_ftp_password']); exec (VESTA_CMD."v-delete-web-domain-ftp ".$v_username." ".$v_domain." ".$v_ftp_username, $output, $return_var);
exec (VESTA_CMD."v-add-web-domain-ftp ".$v_username." ".$v_domain." ".$v_ftp_user." ".$v_ftp_password, $output, $return_var); check_return_code($return_var,$output);
check_return_code($return_var,$output); unset($output);
if ((!empty($_POST['v_ftp_email'])) && (empty($_SESSION['error_msg']))) {
$to = $_POST['v_ftp_email']; continue;
$subject = __("FTP login credentials");
$hostname = exec('hostname');
$from = __('MAIL_FROM',$hostname);
$mailtext .= __('FTP_ACCOUNT_READY',$_GET['domain'],$user,$_POST['v_ftp_user'],$_POST['v_ftp_password']);
send_email($to, $subject, $mailtext, $from);
unset($v_ftp_email);
} }
// Change FTP Account
if (empty($v_ftp_user_data['v_ftp_user'])) $errors[] = __('ftp user');
if (empty($v_ftp_user_data['v_ftp_password'])) $errors[] = __('ftp user password');
if (!empty($errors[0])) {
foreach ($errors as $i => $error) {
if ( $i == 0 ) {
$error_msg = $error;
} else {
$error_msg = $error_msg.", ".$error;
}
}
$_SESSION['error_msg'] = __('Field "%s" can not be blank.',$error_msg);
}
$v_ftp_username = $user . '_' . $v_ftp_user_data['v_ftp_user']; //preg_replace("/^".$user."_/", "", $v_ftp_user_data['v_ftp_user']);
$v_ftp_username = escapeshellarg($v_ftp_username);
$v_ftp_user_data['v_ftp_password'] = escapeshellarg(trim($v_ftp_user_data['v_ftp_password']));
exec (VESTA_CMD."v-change-web-domain-ftp-path ".$v_username." ".$v_domain." ".$v_ftp_username." ".$v_ftp_user_data['v_ftp_path'], $output, $return_var);
if ($v_ftp_user_data['v_ftp_password'] != "••••••••" && !empty($v_ftp_user_data['v_ftp_password'])) {
exec (VESTA_CMD."v-change-web-domain-ftp-password ".$v_username." ".$v_domain." ".$v_ftp_username." ".$v_ftp_user_data['v_ftp_password'], $output, $return_var);
}
check_return_code($return_var, $output);
unset($output); unset($output);
$v_ftp_user = $user."_".$_POST['v_ftp_user'];
$v_ftp_password = "••••••••"; $v_ftp_password = "••••••••";
$v_ftp_users_updated[] = array(
'is_new' => 0,
'v_ftp_user' => $v_ftp_username,
'v_ftp_password' => $v_ftp_password,
'v_ftp_path' => $v_ftp_user_data['v_ftp_path'],
'v_ftp_email' => $v_ftp_user_data['v_ftp_email'],
'v_ftp_pre_path' => $v_ftp_user_prepath
);
} }
} }
// Restart web // Restart web server
if (!empty($restart_web) && (empty($_SESSION['error_msg']))) { if (!empty($restart_web) && (empty($_SESSION['error_msg']))) {
exec (VESTA_CMD."v-restart-web", $output, $return_var); exec (VESTA_CMD."v-restart-web", $output, $return_var);
check_return_code($return_var,$output); check_return_code($return_var,$output);
unset($output); unset($output);
} }
// Restart proxy // Restart proxy server
if (!empty($restart_proxy) && (empty($_SESSION['error_msg']))) { if (!empty($restart_proxy) && (empty($_SESSION['error_msg']))) {
exec (VESTA_CMD."v-restart-proxy", $output, $return_var); exec (VESTA_CMD."v-restart-proxy", $output, $return_var);
check_return_code($return_var,$output); check_return_code($return_var,$output);
unset($output); unset($output);
} }
// Restart dns // Restart dns server
if (!empty($restart_dns) && (empty($_SESSION['error_msg']))) { if (!empty($restart_dns) && (empty($_SESSION['error_msg']))) {
exec (VESTA_CMD."v-restart-dns", $output, $return_var); exec (VESTA_CMD."v-restart-dns", $output, $return_var);
check_return_code($return_var,$output); check_return_code($return_var,$output);
unset($output); unset($output);
} }
// Set success message
if (empty($_SESSION['error_msg'])) { if (empty($_SESSION['error_msg'])) {
$_SESSION['ok_msg'] = __('Changes has been saved.'); $_SESSION['ok_msg'] = __('Changes has been saved.');
} }
} }
$v_ftp_users_raw = explode(':', $v_ftp_user);
$v_ftp_users_paths_raw = explode(':', $data[$v_domain]['FTP_PATH']);
$v_ftp_users = array();
foreach ($v_ftp_users_raw as $v_ftp_user_index => $v_ftp_user_val) {
if (empty($v_ftp_user_val)) {
continue;
}
$v_ftp_users[] = array(
'is_new' => 0,
'v_ftp_user' => $v_ftp_user_val,
'v_ftp_password' => $v_ftp_password,
'v_ftp_path' => (isset($v_ftp_users_paths_raw[$v_ftp_user_index]) ? $v_ftp_users_paths_raw[$v_ftp_user_index] : ''),
'v_ftp_email' => $v_ftp_email,
'v_ftp_pre_path' => $v_ftp_user_prepath
);
}
if (empty($v_ftp_users)) {
$v_ftp_user = null;
$v_ftp_users[] = array(
'is_new' => 1,
'v_ftp_user' => '',
'v_ftp_password' => '',
'v_ftp_path' => (isset($v_ftp_users_paths_raw[$v_ftp_user_index]) ? $v_ftp_users_paths_raw[$v_ftp_user_index] : ''),
'v_ftp_email' => '',
'v_ftp_pre_path' => $v_ftp_user_prepath
);
}
// set default pre path for newly created users
$v_ftp_pre_path_new_user = $v_ftp_user_prepath;
if (isset($v_ftp_users_updated)) {
$v_ftp_users = $v_ftp_users_updated;
if (empty($v_ftp_users_updated)) {
$v_ftp_user = null;
$v_ftp_users[] = array(
'is_new' => 1,
'v_ftp_user' => '',
'v_ftp_password' => '',
'v_ftp_path' => (isset($v_ftp_users_paths_raw[$v_ftp_user_index]) ? $v_ftp_users_paths_raw[$v_ftp_user_index] : ''),
'v_ftp_email' => '',
'v_ftp_pre_path' => $v_ftp_user_prepath
);
}
}
// Header
include($_SERVER['DOCUMENT_ROOT'].'/templates/header.html');
// Panel
top_panel($user,$TAB);
// Display body
if ($_SESSION['user'] == 'admin') { if ($_SESSION['user'] == 'admin') {
include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/edit_web.html'); include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/edit_web.html');
} else { } else {
include($_SERVER['DOCUMENT_ROOT'].'/templates/user/edit_web.html'); include($_SERVER['DOCUMENT_ROOT'].'/templates/user/edit_web.html');
} }
// Flush session messages
unset($_SESSION['error_msg']); unset($_SESSION['error_msg']);
unset($_SESSION['ok_msg']); unset($_SESSION['ok_msg']);
// Footer // Footer
include($_SERVER['DOCUMENT_ROOT'].'/templates/footer.html'); include($_SERVER['DOCUMENT_ROOT'].'/templates/footer.html');

BIN
web/images/db.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 181 B

BIN
web/images/disabled_bg.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 194 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 225 B

After

Width:  |  Height:  |  Size: 222 B

Before After
Before After

BIN
web/images/folder.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 183 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 233 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.9 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

Before After
Before After

BIN
web/images/mail.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 236 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 165 B

After

Width:  |  Height:  |  Size: 176 B

Before After
Before After

BIN
web/images/pause.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 157 B

BIN
web/images/stats.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 170 B

443
web/inc/i18n/ar.php Normal file
View file

@ -0,0 +1,443 @@
<?php
/**
* Vesta language file
* skid (skid@vestacp.com)
*/
$LANG['ar'] = array(
'Packages' => 'الحزم',
'IP' => 'بروتوكول إنترنت',
'Graphs' => 'رسوم بيانية',
'Statistics' => 'إحصائيات',
'Log' => 'سجل',
'Services' => 'خدمات',
'Updates' => 'تحديثات',
'Log in' => 'تسجيل الدخول',
'Log out' => 'تسجيل الخروج',
'USER' => 'المستخدم',
'WEB' => 'الشبكة',
'DNS' => 'نظام أسماء النظاقات',
'MAIL' => 'البريد',
'DB' => 'قاعدة بيانات',
'CRON' => 'مجدول الوظائف',
'BACKUP' => 'النسخ الإحتياطية',
'Add User' => 'إضافة مستخدم',
'Add Domain' => 'إضافة نطاق',
'Add Web Domain' => 'إضافة نطاق شبكة',
'Add DNS Domain' => 'تسجيل نطاق في النظام',
'Add DNS Record' => 'إضافة سجل للنظام',
'Add Mail Domain' => 'إضافة نطاق بريدي',
'Add Mail Account' => 'إضافة حساب بريدي',
'Add Database' => 'إضافة قاعدة بيانات',
'Add Cron Job' => 'إضافة وظيفة مجدولة',
'Create Backup' => 'إنشاء نسخة احتياطية',
'Configure' => 'تهيئة',
'Restore All' => 'استرجاع الكل',
'Add Package' => 'إضافة رزمة',
'Add IP' => 'إضافة بروتوكول إنترنت',
'Search' => 'بحث',
'Add one more FTP Account' => 'إضافة المزيد من حساب واحد',
'Overall Statistics' => 'إحصائيات عامة',
'Daily' => 'يومي',
'Weekly' => 'أسبوعي',
'Monthly' => 'شهري',
'Yearly' => 'سنوي',
'Add' => 'إضافة',
'Back' => 'رجوع',
'Save' => 'حفظ',
'Submit' => 'تسليم',
'toggle all' => 'تبديل الجميع',
'apply to selected' => 'تطبيق على ما تم اختياره',
'rebuild' => 'إعادة إنشاء',
'rebuild web' => 'إعادة إنشاء الشبكة',
'rebuild dns' => 'إعادة إنشاء نظام أسماء النطاقات',
'rebuild mail' => 'إعادة إنشاء البريد',
'rebuild db' => 'إعادة إنشاء قاعدة البيانات',
'rebuild cron' => 'إعادة إنشاء مجدول الوظائف',
'update counters' => 'تحديث العدادات',
'suspend' => 'تعليق',
'unsuspend' => 'إلغاء التعليق',
'delete' => 'حذف',
'show per user' => 'عرض حسب المستخدم',
'login as' => 'تسجيل الدخول ك',
'logout' => 'تسجيل الخروج',
'edit' => 'تعديل',
'open webstats' => 'فتح احصائيات الشبكة',
'view logs' => 'عرض السجلات',
'list records' => 'عرض السجلات',
'add record' => 'إضافة سجل',
'list accounts' => 'عرض الحسابات',
'add account' => 'إضافة حساب',
'open webmail' => 'فتح شبكة البريد',
'open %s' => 'فتح %s',
'download' => 'تحميل',
'restore' => 'استرجاع',
'configure restore settings' => 'تهيئة إعدادات الاسترجاع',
'stop' => 'إيقاف',
'start' => 'بدء',
'restart' => 'إعادة تشغيل',
'update' => 'تحديث',
'generate' => 'تكوين',
'Generate CSR' => 'تكوين طلب توقيع شهادة',
'reread IP' => 'إعادة قراءة بروتوكول الإنترنت',
'enable autoupdate' => 'تمكين التحديث التلقائي',
'disable autoupdate' => 'تعطيل التحديث التلقائي',
'Adding User' => 'جاري إضافة مستخدم',
'Editing User' => 'جاري تعديل المستخدم',
'Adding Domain' => 'جاري إضافة نطاق',
'Editing Domain' => 'جاري تعديل النطاق',
'Adding DNS Domain' => 'جاري إضافة نطاق للنظام',
'Editing DNS Domain' => 'جاري تعديل النطاق بالنظام',
'Adding DNS Record' => 'جاري إضافة سجل للنظام',
'Editing DNS Record' => 'جاري تعديل السحجل بالنظام',
'Adding Mail Domain' => 'جاري إضافة نطاق بريدي',
'Editing Mail Domain' => 'جاري تعديل النظاق البريدي',
'Adding Mail Account' => 'جاري إضافة حساب بريدي',
'Editing Mail Account' => 'جاري تعديل الحساب البريدي',
'Adding database' => 'جاري إضافة قاعدة بيانات',
'Editing Cron Job' => 'جاري تعديل وظيفة مجدولة',
'Adding Cron Job' => 'جاري إضافة وظيفة مجدولة',
'Editing Database' => 'جاري تعديل قاعدة البيانات',
'Adding Package' => 'جاري إضافة رزمة',
'Editing Package' => 'جاري تعديل الرزمة',
'Adding IP address' => 'جاري إضافة عنوان بروتوكول إنترنت',
'Editing IP Address' => 'جاري تعديل عنوان بروتوكول إنترنت',
'Editing Backup Exclusions' => 'جاري تعديل استثناءات النسخة الاحتياطية',
'Generating CSR' => 'جاري إنشاء طلب توقيع شهادة',
'Listing' => 'قائمة',
'Search Results' => 'نتائج البحث',
'active' => 'نشط',
'spnd' => 'معلق',
'suspended' => 'معلق',
'running' => 'يعمل',
'stopped' => 'متوقف',
'outdated' => 'نسخة قديمة',
'updated' => 'محدث',
'yes' => 'نعم',
'no' => 'لا',
'none' => 'لا شيء',
'pb' => 'pb',
'tb' => 'tb',
'gb' => 'gb',
'mb' => 'mb',
'minute' => 'دقيقة',
'hour' => 'ساعة',
'day' => 'يوم',
'days' => 'أيام',
'hours' => 'ساعات',
'minutes' => 'دقائق',
'month' => 'شهر',
'package' => 'رزمة',
'Bandwidth' => 'عرض النطاق',
'Disk' => 'إسطوانة',
'Web' => 'شبكة',
'Mail' => 'بريد',
'Databases' => 'قواعد بيانات',
'User Directories' => 'مجلدات المستخدم',
'Template' => 'نموذج',
'Web Template' => 'أباتشي نموذج',
'Proxy Template' => 'Nginx نموذج',
'DNS Template' => 'نظام أسماء النطاقات نموذج',
'Web Domains' => 'نطاقات الشبكة',
'SSL Domains' => 'نطاقات آمنة',
'Web Aliases' => 'اختصارات الشبكة',
'per domain' => 'لكل نطاق',
'DNS domains' => 'نطاقات النظام',
'DNS domains' => 'نطاقات النظام',
'DNS records' => 'سجلات النظام' ,
'Name Servers' => 'خوادم الأسماء',
'Mail Domains' => 'نطاقات البريد',
'Mail Accounts' => 'حسابات البريد',
'Cron Jobs' => 'الوظائق المجدولة',
'SSH Access' => 'وصول بعيد آمن',
'IP Addresses' => 'عنوان بروتوكول انترنت',
'Backups' => 'نسخ احتياطية',
'Backup System' => 'نظام النسخ الاحتياطي',
'backup exclusions' => 'استثناءات النسخ الاحتياطي',
'template' => 'نموذج',
'SSL Support' => 'دعم طبقة المقبض الآمن',
'SSL Home Directory' => 'المجلد الرئيسي لطبقة المقبض الآمن',
'Proxy Support' => 'Nginx دعم',
'Proxy Extensions' => 'Nginx إمتدادات',
'Web Statistics' => 'إحصائيات الشبكة',
'Additional FTP Account' => 'حساب بروتوكول نقل الملفات إضافي',
'SOA' => 'هيكلية الخدمات الموجهة',
'TTL' => 'الوقت المتبقي للخروج',
'Expire' => 'تنقضي',
'Records' => 'سجلات',
'Catchall email' => 'حصل كل البريد',
'AntiVirus Support' => 'دعم مضاد الفيروسات',
'AntiSpam Support' => 'دعم مضاد البريد المزعج',
'DKIM Support' => 'دعم مفاتيح النطاقات',
'Accounts' => 'حسابات',
'Quota' => 'حصة',
'Autoreply' => 'الرد الآلي',
'Forward to' => 'إعادة توجيه ل',
'Do not store forwarded mail' => 'لا تحتفظ بنسخة من البريد المعاد توجيهه',
'database' => 'قاعدة بيانات',
'User' => 'مستخدم',
'Host' => 'مضيف',
'Charset' => 'حزمة نص',
'Min' => 'دقيقة',
'Hour' => 'ساعة',
'Day' => 'يوم',
'Month' => 'شهر',
'Day of week' => 'اليوم في الإسبوع',
'local' => 'محلي',
'Run Time' => 'وقت التشغيل',
'Backup Size' => 'حجم النسخة الاحتياطية',
'SYS' => 'نظام',
'Domains' => 'نطاقات',
'Status' => 'حالة',
'shared' => 'مشارك',
'dedicated' => 'موجه',
'Owner' => 'مالك',
'Users' => 'مستخدمين',
'Load Average' => 'متوسط التحميل',
'Memory Usage' => 'استخدام الذاكرة',
'HTTPD Usage' => 'استخدام نظام بروتوكول نقل النص التشعبي',
'NGINX Usage' => 'NGINX استخدام',
'MySQL Usage on localhost' => 'استخدام قاعدة بيانات MySql على المضيف المحلي',
'PostgreSQL Usage on localhost' => 'PostgreSQL استخدام قاعدة بيانات على المضيف المحلي',
'Bandwidth Usage eth0' => 'eth0 استخدام سعة النطاق على منفذ',
'FTP Usage' => 'استخدام بروتوكول نقل الملفات',
'SSH Usage' => 'استخدام الوصول البعيد الآمن',
'reverse proxy' => 'الوكيل العكسي',
'web server' => 'خادم الشبكة',
'dns server' => 'خادم نظام أسماء النطاقات',
'mail server' => 'خادم البريد',
'pop/imap server' => 'pop/imap خادم',
'email antivirus' => 'مضاد فيروسات البريد',
'email antispam' => 'مضاد البريد المزعج',
'database server' => 'خادم قاعدة البيانات',
'ftp server' => 'خادم بروتوكول نقل الملفات',
'job scheduler' => 'مجدول الوظائف',
'CPU' => 'وحدة المعالجة المركزية',
'Memory' => 'الذاكرة',
'Uptime' => 'وقت التشغيل',
'core package' => 'الرزمة الأساسية',
'php interpreter' => 'php مترجم',
'internal web server' => 'خادم الشبكة الداخلي',
'Version' => 'إصدار',
'Release' => 'نسخة',
'Architecture' => 'هيكلية',
'Object' => 'عنصر',
'Owner' => 'مالك',
'Username' => 'اسم المستخدم',
'Password' => 'كلمة المرور',
'Email' => 'بريد',
'Package' => 'رزمة',
'Language' => 'لغة',
'First Name' => 'الإسم الأول',
'Last Name' => 'الإسم الأخير',
'Send login credentials to email address' => 'إرسال معلومات الدخول لعنوان البريد',
'Default Template' => 'نموذج افتراضي',
'Default Name Servers' => 'أسماء الخوادم الافتراضية',
'Domain' => 'نطاق',
'DNS Support' => 'دعم نظام أسماء النطاقات',
'Mail Support' => 'دعم البريد',
'Advanced options' => 'خيارات متقدمة',
'Aliases' => 'اختصارات',
'SSL Certificate' => 'شهادة طبقة مقبس آمن',
'SSL Key' => 'مفتاح طبقة المقبس الآمن',
'SSL Certificate Authority / Intermediate' => 'سلطة / متوسط شهادة طبقة المقبس الآمن ',
'SSL CSR' => 'طلب توقيع شهادة باستخدام طبقة المقبس الآمن',
'optional' => 'اختياري',
'internal' => 'داخلي',
'Statistics Authorization' => 'احصائيات الصلاحيات',
'Statistics Auth' => 'إحصائيات الصلاحيات',
'Account' => 'حساب',
'Prefix will be automaticaly added to username' => 'سيضاف بشكل آلي لأسم المستخدم %s اختصار',
'Send FTP credentials to email' => 'إرسال معلومات الاعتماد لبروتوكول نقل الملفات للبريد',
'Expiration Date' => 'تاريخ الانتهاء',
'YYYY-MM-DD' => 'YYYY-MM-DD',
'Name servers' => 'خوادم الأسماء',
'Record' => 'سجل',
'IP or Value' => 'بروتوكول إنترنت أو قيمة',
'Priority' => 'أولوية',
'Record Number' => 'عدد السجلات',
'in megabytes' => 'ب ميجا بابت',
'Message' => 'رسالة',
'use local-part' => 'استخدم جزء محلي',
'one or more email addresses' => 'عنوان بريدي واحد أو أكثر',
'Prefix will be automaticaly added to database name and database user' => 'الاختصار سيتم إضافته بشكل آلي لإسم قاعدة البيانات واسم المستخدم %s',
'Database' => 'قاعدة بيانات',
'Type' => 'نوع',
'Minute' => 'دقيقة',
'Command' => 'أمر',
'Package Name' => 'إسم الرزمة',
'Netmask' => 'قناع الشبكة',
'Interface' => 'واجهة',
'Shared' => 'مشارك',
'Assigned user' => 'المستخدم المعين',
'Assigned domain' => 'النطاق المعين',
'NAT IP association' => 'جمعية ترجمة عناوين بروتوكول الانترنت',
'shell' => 'منصب',
'web domains' => 'نطاقات شبكة',
'web aliases' => 'اسماء الشبكة المستعارة',
'dns records' => 'سجلات نظام أسماء النطاقات',
'mail domains' => 'نطاقات البريد',
'mail accounts' => 'حسابات البريد',
'accounts' => 'حسابات',
'databases' => 'قواعد بيانات',
'cron jobs' => 'وظائف مجدولة',
'backups' => 'نسخ احتياطية',
'quota' => 'حصة',
'day of week' => 'اليوم من الإسبوع',
'cmd' => 'أمر',
'users' => 'مستخدمين',
'domains' => 'نطاقات',
'aliases' => 'أسماء مستعارة',
'records' => 'سجلات',
'jobs' => 'وظائف',
'username' => 'اسم المستخدم',
'password' => 'كلمة المرور',
'type' => 'نوع',
'charset' => 'حزمة نص',
'domain' => 'نطاق',
'ip' => 'بروتوكول إنترنت',
'ip address' => 'عنوان بروتوكول إنترنت',
'IP address' => 'عنوان بروتوكول إنترنت',
'netmask' => 'قناع شبكة',
'interface' => 'واجهة',
'assigned user' => 'المستخدم المعين',
'ns1' => 'مساحة اسم 1',
'ns2' => 'مساحة اسم 2',
'user' => 'مستخدم',
'email' => 'بريد',
'first name' => 'الإسم الأول',
'last name' => 'الاسم الأخير',
'account' => 'حساب',
'ssl certificate' => 'شهادة طبقة مقبس آمن',
'ssl key' => 'مفتاح طبقة مقبس آمن',
'stats user password' => 'كلمة مرور مستخدم الإحصائيات',
'stats username' => 'مستخدم الإحصائيات',
'stats password' => 'كلمة مرور الإحصائيات',
'ftp user password' => 'كلمة مرور مستخدم بروتوكول نقل الملفات',
'ftp user' => 'مستخدم بروتوكول نقل الملفات',
'Last 70 lines of %s.%s.log' => 'آخر 70 سطر في %s.%s.log',
'Download AccessLog' => 'تحميل سجلات الوصول',
'Download ErrorLog' => 'تحميل سجلات الأخطاء',
'Country' => 'البلد',
'2 letter code' => 'كود من رسالتين',
'State / Province' => 'ولاية / مقاطعة',
'City / Locality' => 'المدينة / المنطقة',
'Organization' => 'مؤسسة',
'1 account' => '1 حساب',
'%s accounts' => 'حسابات %s',
'1 domain' => '1 نطاق',
'%s domains' => 'نطاقات %s',
'1 record' => '1 سجل',
'%s records' => 'سجلات %s',
'1 mail account' => '1 حساب بريد',
'%s mail accounts' => 'حسابات بريد %s',
'1 database' => '1 قاعدة بيانات',
'%s databases' => 'قواعد بيانات %s',
'1 cron job' => '1 وظيفة مجدولة',
'%s cron jobs' => 'وظائف مجدولة %s',
'1 archive' => '1 أرشيف',
'%s archives' => 'أرشيف %s',
'1 package' => '1 رزمة',
'%s packages' => 'رزم %s',
'1 IP address' => '1 عنوان بروتوكول إنترنت',
'%s IP addresses' => 'عناوين بروتوكول إنترنت %s',
'1 month' => '1 شهر',
'%s months' => 'أشهر %s',
'1 log record' => '1 سجل',
'%s log records' => 'سجلات %s',
'1 object' => '1 عنصر',
'%s objects' => 'عناصر %s',
'no exclusions' => 'لا استثناءات',
'USER_CREATED_OK' => 'المستخدم <a href="/edit/user/?user=%s"><b>%s</b></a> تم إنشائه بنجاح',
'WEB_DOMAIN_CREATED_OK' => 'النطاق <a href="/edit/web/?domain=%s"><b>%s</b></a>تم إنشائه بنجاح .',
'DNS_DOMAIN_CREATED_OK' => 'النطاق <a href="/list/dns/?domain=%s"><b>%s</b></a> تم إنشائه بنجاح.',
'DNS_RECORD_CREATED_OK' => 'السجل <b>%s.%s</b> تم إنشائه بنجاح.',
'MAIL_DOMAIN_CREATED_OK' => 'نطاق البريد <a href="/list/mail/?domain=%s"><b>%s</b></a> تم إنشائه بنجاح.',
'MAIL_ACCOUNT_CREATED_OK' => 'حساب البريد <a href="/edit/mail/?account=%s&domain=%s"><b>%s@%s</b></a> تم إنشائه بنجاح',
'DATABASE_CREATED_OK' => 'قاعدة البيانات <a href="/edit/db/?database=%s"><b>%s</b></a> تم إنشائها بنجاح',
'CRON_CREATED_OK' => 'الوظيفة المجدولة تم إنشائها بنجاح.',
'IP_CREATED_OK' => 'عنوان بروتوكول الإنترنت <a href="/edit/ip/?ip=%s"><b>%s</b></a> تم إنشائه بنجاح.',
'PACKAGE_CREATED_OK' => 'الرزمة <a href="/edit/package/?package=%s"><b>%s</b></a> تم إنشائها بنجاح.',
'SSL_GENERATED_OK' => 'تم إنشاء الشهادة بنجاح.',
'Autoupdate has been successfully enabled' => 'تم تفيعل التحديث التلقائي بنجاح',
'Autoupdate has been successfully disabled' => 'تم تعطيل التحديث التلقائي بنجاح',
'Changes has been saved.' => 'تم حفظ التغييرات بنجاح.',
'Confirmation' => 'Confirmation',
'DELETE_USER_CONFIRMATION' => 'هل تريد فعلا حذف المستخدم %s?',
'SUSPEND_USER_CONFIRMATION' => 'هل تريد فعلا تعليق المستخدم %s?',
'UNSUSPEND_USER_CONFIRMATION' => 'هل تريد فعلا إلغاء تعليق المستخدم %s?',
'DELETE_DOMAIN_CONFIRMATION' => 'هل تريد فعلا حذف النطاق %s?',
'SUSPEND_DOMAIN_CONFIRMATION' => 'هل تريد فعلا تعليق النطاق %s?',
'UNSUSPEND_DOMAIN_CONFIRMATION' => 'هل تريد فعلا إلغاء تعليق النطاق %s?',
'DELETE_RECORD_CONFIRMATION' => 'هل تريد فعلا حذف السجل %s?',
'SUSPEND_RECORD_CONFIRMATION' => 'هل تريد فعلا تعليق السجل %s?',
'UNSUSPEND_RECORD_CONFIRMATION' => 'هل تريد فعلا إلغاء تعليق السجل %s?',
'DELETE_MAIL_ACCOUNT_CONFIRMATION' => 'هل تريد فعلا حذف %s?',
'SUSPEND_MAIL_ACCOUNT_CONFIRMATION' => 'هل تريد فعلا تعليق %s?',
'UNSUSPEND_MAIL_ACCOUNT_CONFIRMATION' => 'هل تريد فعلا إلغاء تعليق %s?',
'DELETE_DATABASE_CONFIRMATION' => 'هل تريد فعلا حذف قاعدة البيانات %s?',
'SUSPEND_DATABASE_CONFIRMATION' => 'هل تريد فعلا تعليق قاعدة البيانات %s?',
'UNSUSPEND_DATABASE_CONFIRMATION' => 'هل تريد فعلا إلغاء تعليق قاعدة البيانات %s?',
'DELETE_CRON_CONFIRMATION' => 'هل تريد فعلا حذف الوظيفة المجدولة?',
'SUSPEND_CRON_CONFIRMATION' => 'هل تريد فعلا تعليق الوظيفة المجدولة?',
'UNSUSPEND_CRON_CONFIRMATION' => 'هل تريد فعلا إلغاء تعليق الوظيفة المجدولة?',
'DELETE_BACKUP_CONFIRMATION' => 'هل تريد فعلا حذف التسخة الاحتياطية %s ?',
'DELETE_EXCLUSION_CONFIRMATION' => 'هل تريد فعلا حذف الاستثناء %s?',
'DELETE_PACKAGE_CONFIRMATION' => 'هل تريد فعلا حذف الرزمة %s?',
'DELETE_IP_CONFIRMATION' => 'هل تريد فعلا حذف عنوان بروتوكول الإنترنت %s?',
'RESTART_CONFIRMATION' => 'هل أنت متأكد من أنك تريد إعادة تشغيل %s?',
'Welcome' => 'أهلا وسهلا',
'LOGGED_IN_AS' => 'تم تسجيل الدخول ك %s',
'Error' => 'خطأ',
'Invalid username or password' => 'خطأ في اسم المستخدم أو كلمة المرور',
'Invalid username or code' => 'خطأ في اسم المستخدم أو في الكود',
'Passwords not match' => 'كلمات المرور غير متطابقة',
'Please enter valid email address.' => 'برجاء إدخال عنوان بريد إلكتروني صحيح.',
'Field "%s" can not be blank.' => 'العنصر "%s" لا يمكن أن يبقى فارغا.',
'Password is too short.' => 'كلمة المرور قصيرة جدا (على الأقل ح حروف)',
'Error code:' => 'كود الخطأ: %s',
'SERVICE_ACTION_FAILED' => '"%s" "%s" فشل',
'IP address is in use' => 'عنوان بروتوكول الإنترنت مستخدم بالفعل',
'BACKUP_SCHEDULED' =>'تم إضافة الوظيفة لطابور المهام. سيتم إرسال بريد إلكتروني لك عندما تجهز النسخة الاحتياطية للتحميل.',
'BACKUP_EXISTS' => 'يوجد عملية نسخ احتياطي تعمل حاليا. برجاء الانتظار حتى تنتهي عملية النسخ الاحتياطي.',
'RESTORE_SCHEDULED' => ' تم إضافة الوظيفة لطابور المهام. سيتم إرسال بريد إلكتروني لك عندما تجهز النسخة الاحتياطية للتحميل.',
'RESTORE_EXISTS' =>'يوجد عملية استعادة تعمل حاليا. برجاء الانتظار حتى تنتهي عملية الاستعادة قبل البدء بعملية جديدة.',
'WEB_EXCLUSIONS' => "اكتب اسم النطاق. واحد في كل سطر. لاستثناء جميع النطاقات استخدم *.. لاستثناء جميع مجالات النطاق استخدم الصيغة التالية: domain.com:public_html/cache:public_html/tmp",
'DNS_EXCLUSIONS' => "اكتب اسم النطاق, واحد في كل سطر. لاستثناء جميع النطاقات استخدم *",
'MAIL_EXCLUSIONS' => "اكتب اسم النطاق, واحد في كل سطر. لاستثناء جميع النطاقات استخدم *. لاستثناء حسابات معينة استخدم الصيغة: domain.com:info:support:postmaster",
'DB_EXCLUSIONS' => "اكتب اسم قاعدة البيانات بالكامل, واحدة في كل سطر. لاستثناء جميع قواعد البيانات استخدم *",
'CRON_EXCLUSIONS' => "لاستثناء جميع الوظائف المجدولة استخدم *",
'USER_EXCLUSIONS' => "اكتب اسم المجلد, واحد في كل سطر. لاستثناء جميع المجلدات استخدم *",
'Welcome to Vesta Control Panel' => 'Vesta أهلا بكم في لوحة تحكم',
'MAIL_FROM' => 'Vesta لوحة تحكم <noreply@%s>',
'GREETINGS_GORDON_FREEMAN' => "مرحبا, %s %s,\n",
'GREETINGS' => "مرحبا,\n",
'ACCOUNT_READY' => "تم انشاء حسابك بنجاح وهو جاهز للاستخدام.\n\nhttps://%s/login/\nUsername: %s\nPassword: %s\n\n--\nVesta Control Panel\n",
'FTP login credentials' => 'معلومات اعتماد الدخول لبروتوكول نقل الملفات',
'FTP_ACCOUNT_READY' => "تم إنشاء حساب بروتوكول نقل الملفات وهو جاهز للاستخدام.\n\nHostname: %s\nUsername: %s_%s\nPassword: %s\n\n--\nVesta Control Panel\n",
'Database Credentials' => 'معلومات اعتماد قاعدة البيانات',
'DATABASE_READY' => "تم انشاء قاعدة البيانات بنجاح.\n\nDatabase: %s\nUser: %s\nPassword: %s\n%s\n\n--\nVesta Control Panel\n",
'forgot password' => 'نسيت كلمة المرور',
'Confirm' => 'تأكيد',
'New Password' => 'كلمة مرور جديدة',
'Confirm Password' => 'تأكيد كلمة المرور',
'Reset' => 'إعادة تعيين',
'Reset Code' => 'إعادة تعيين الكود',
'RESET_NOTICE' => '',
'RESET_CODE_SENT' => 'لقد تم إرسال كود إعادة تعيين كلمة المرور لعنوان بريدك الإلكتروني<br>',
'MAIL_RESET_SUBJECT' => 'تم إعادة تعيين كلمة المرور %s',
'PASSWORD_RESET_REQUEST' => "لإعادة تعيين كلمة مرور لوحة التحكم , برجاء اتباع الرابط التالي link:\nhttps://%s/reset/?action=confirm&user=%s&code=%s\n\nAlternatively, بامكانك أيضا اتباع الرابط التالي https://%s/reset/?action=code&user=%s وادخال كود إعادة التعيين التالي code:\n%s\n\n إذا لم تطلب إعادة تعيين كلمة المرور, برجاء تجاهل هذه الرسالة وتقبل اعتذارنا.\n\n--\nVesta Control Panel\n",
);

View file

@ -38,6 +38,7 @@ $LANG['bs'] = array(
'Add Package' => 'Dodaj paket', 'Add Package' => 'Dodaj paket',
'Add IP' => 'Dodaj IP', 'Add IP' => 'Dodaj IP',
'Search' => 'Traži', 'Search' => 'Traži',
'Add one more FTP Account' => 'Dodaj još jednu FTP račun',
'Overall Statistics' => 'Globalna statistika', 'Overall Statistics' => 'Globalna statistika',
'Daily' => 'Dnevno', 'Daily' => 'Dnevno',
'Weekly' => 'Sedmično', 'Weekly' => 'Sedmično',
@ -392,6 +393,7 @@ $LANG['bs'] = array(
'DELETE_EXCLUSION_CONFIRMATION' => 'Are you sure to delete %s exclusion?', 'DELETE_EXCLUSION_CONFIRMATION' => 'Are you sure to delete %s exclusion?',
'DELETE_PACKAGE_CONFIRMATION' => 'Are you sure to delete package %s?', 'DELETE_PACKAGE_CONFIRMATION' => 'Are you sure to delete package %s?',
'DELETE_IP_CONFIRMATION' => 'Are you sure to delere IP address %s?', 'DELETE_IP_CONFIRMATION' => 'Are you sure to delere IP address %s?',
'RESTART_CONFIRMATION' => 'Are you sure you want to restart %s?',
'Welcome' => 'Dobrodošli', 'Welcome' => 'Dobrodošli',
'LOGGED_IN_AS' => 'Logovani ste kao %s', 'LOGGED_IN_AS' => 'Logovani ste kao %s',
'Error' => 'Greška', 'Error' => 'Greška',

View file

@ -38,6 +38,7 @@ $LANG['cn'] = array(
'Add Package' => '增加预设方案', 'Add Package' => '增加预设方案',
'Add IP' => '增加IP', 'Add IP' => '增加IP',
'Search' => '搜索', 'Search' => '搜索',
'Add one more FTP Account' => '增加一個FTP賬號',
'Overall Statistics' => '总体统计', 'Overall Statistics' => '总体统计',
'Daily' => '日', 'Daily' => '日',
'Weekly' => '周', 'Weekly' => '周',
@ -392,6 +393,7 @@ $LANG['cn'] = array(
'DELETE_EXCLUSION_CONFIRMATION' => 'Are you sure to delete %s exclusion?', 'DELETE_EXCLUSION_CONFIRMATION' => 'Are you sure to delete %s exclusion?',
'DELETE_PACKAGE_CONFIRMATION' => '你确定删除方案 %s?', 'DELETE_PACKAGE_CONFIRMATION' => '你确定删除方案 %s?',
'DELETE_IP_CONFIRMATION' => '你确定删除IP地址 %s?', 'DELETE_IP_CONFIRMATION' => '你确定删除IP地址 %s?',
'RESTART_CONFIRMATION' => 'Are you sure you want to restart %s?',
'Welcome' => '欢迎光临', 'Welcome' => '欢迎光临',
'LOGGED_IN_AS' => '以用户身份 %s 登录', 'LOGGED_IN_AS' => '以用户身份 %s 登录',
'Error' => '错误', 'Error' => '错误',

View file

@ -39,6 +39,7 @@ $LANG['cz'] = array(
'Add Package' => 'Přidat balíček', 'Add Package' => 'Přidat balíček',
'Add IP' => 'Přidat IP', 'Add IP' => 'Přidat IP',
'Search' => 'Vyhledávání', 'Search' => 'Vyhledávání',
'Add one more FTP Account' => 'Přidat jeden FTP účet',
'Overall Statistics' => 'Celkové statistiky', 'Overall Statistics' => 'Celkové statistiky',
'Daily' => 'Denně', 'Daily' => 'Denně',
'Weekly' => 'Týdně', 'Weekly' => 'Týdně',
@ -393,6 +394,7 @@ $LANG['cz'] = array(
'DELETE_EXCLUSION_CONFIRMATION' => 'Opravdu chcete odstranit vyloučení %s?', 'DELETE_EXCLUSION_CONFIRMATION' => 'Opravdu chcete odstranit vyloučení %s?',
'DELETE_PACKAGE_CONFIRMATION' => 'Opravdu chcete odstranit package %s?', 'DELETE_PACKAGE_CONFIRMATION' => 'Opravdu chcete odstranit package %s?',
'DELETE_IP_CONFIRMATION' => 'Opravdu chcete odstranit IP adresu %s?', 'DELETE_IP_CONFIRMATION' => 'Opravdu chcete odstranit IP adresu %s?',
'RESTART_CONFIRMATION' => 'Opravdu chcete restartovat %s?',
'Welcome' => 'Vítejte!', 'Welcome' => 'Vítejte!',
'LOGGED_IN_AS' => 'Přihlášen jako uživatel %s', 'LOGGED_IN_AS' => 'Přihlášen jako uživatel %s',
'Error' => 'Chyba', 'Error' => 'Chyba',

View file

@ -38,6 +38,7 @@ $LANG['de'] = array(
'Add Package' => 'Paket erstellen', 'Add Package' => 'Paket erstellen',
'Add IP' => 'IP hinzufügen', 'Add IP' => 'IP hinzufügen',
'Search' => 'Suche', 'Search' => 'Suche',
'Add one more FTP Account' => 'Fügen Sie eine weitere FTP-Konto',
'Overall Statistics' => 'Globale Statistik', 'Overall Statistics' => 'Globale Statistik',
'Daily' => 'Täglich', 'Daily' => 'Täglich',
'Weekly' => 'Wöchentlich', 'Weekly' => 'Wöchentlich',
@ -392,6 +393,7 @@ $LANG['de'] = array(
'DELETE_EXCLUSION_CONFIRMATION' => 'Ausschlüsse %s wirklich löschen?', 'DELETE_EXCLUSION_CONFIRMATION' => 'Ausschlüsse %s wirklich löschen?',
'DELETE_PACKAGE_CONFIRMATION' => 'Packet %s? wirklich löschen?', 'DELETE_PACKAGE_CONFIRMATION' => 'Packet %s? wirklich löschen?',
'DELETE_IP_CONFIRMATION' => '%s wirklich löschen?', 'DELETE_IP_CONFIRMATION' => '%s wirklich löschen?',
'RESTART_CONFIRMATION' => '%s wirklich neu starten?',
'Welcome' => 'Willkommen', 'Welcome' => 'Willkommen',
'LOGGED_IN_AS' => 'Angemeldet als %s', 'LOGGED_IN_AS' => 'Angemeldet als %s',
'Error' => 'Fehler', 'Error' => 'Fehler',

View file

@ -38,6 +38,7 @@ $LANG['en'] = array(
'Add Package' => 'Add Package', 'Add Package' => 'Add Package',
'Add IP' => 'Add IP', 'Add IP' => 'Add IP',
'Search' => 'Search', 'Search' => 'Search',
'Add one more FTP Account' => 'Add one more FTP Account',
'Overall Statistics' => 'Overall Statistics', 'Overall Statistics' => 'Overall Statistics',
'Daily' => 'Daily', 'Daily' => 'Daily',
'Weekly' => 'Weekly', 'Weekly' => 'Weekly',
@ -265,7 +266,7 @@ $LANG['en'] = array(
'Message' => 'Message', 'Message' => 'Message',
'use local-part' => 'use local-part', 'use local-part' => 'use local-part',
'one or more email addresses' => 'one or more email addresses', 'one or more email addresses' => 'one or more email addresses',
'Prefix will be automaticaly added to database name and database user' => 'Prefix %s will be automaticaly added to database name and database user', 'Prefix will be automaticaly added to database name and database user' => 'Prefix %s will be automaticaly added to database name and database user.',
'Database' => 'Database', 'Database' => 'Database',
'Type' => 'Type', 'Type' => 'Type',
'Minute' => 'Minute', 'Minute' => 'Minute',
@ -355,50 +356,51 @@ $LANG['en'] = array(
'%s objects' => '%s objects', '%s objects' => '%s objects',
'no exclusions' => 'no exclusions', 'no exclusions' => 'no exclusions',
'USER_CREATED_OK' => 'User <a href="/edit/user/?user=%s"><b>%s</b></a> has been created successfully', 'USER_CREATED_OK' => 'User <a href="/edit/user/?user=%s"><b>%s</b></a> has been created successfully.',
'WEB_DOMAIN_CREATED_OK' => 'Domain <a href="/edit/web/?domain=%s"><b>%s</b></a> has been created successfully.', 'WEB_DOMAIN_CREATED_OK' => 'Domain <a href="/edit/web/?domain=%s"><b>%s</b></a> has been created successfully.',
'DNS_DOMAIN_CREATED_OK' => 'DNS domain <a href="/list/dns/?domain=%s"><b>%s</b></a> has been created successfully.', 'DNS_DOMAIN_CREATED_OK' => 'DNS domain <a href="/list/dns/?domain=%s"><b>%s</b></a> has been created successfully.',
'DNS_RECORD_CREATED_OK' => 'Record <b>%s.%s</b> has been created successfully.', 'DNS_RECORD_CREATED_OK' => 'Record <b>%s.%s</b> has been created successfully.',
'MAIL_DOMAIN_CREATED_OK' => 'Mail domain <a href="/list/mail/?domain=%s"><b>%s</b></a> has been created successfully.', 'MAIL_DOMAIN_CREATED_OK' => 'Mail domain <a href="/list/mail/?domain=%s"><b>%s</b></a> has been created successfully.',
'MAIL_ACCOUNT_CREATED_OK' => 'Mail account <a href="/edit/mail/?account=%s&domain=%s"><b>%s@%s</b></a> has been created successfully', 'MAIL_ACCOUNT_CREATED_OK' => 'Mail account <a href="/edit/mail/?account=%s&domain=%s"><b>%s@%s</b></a> has been created successfully.',
'DATABASE_CREATED_OK' => 'Database <a href="/edit/db/?database=%s"><b>%s</b></a> has been created successfully', 'DATABASE_CREATED_OK' => 'Database <a href="/edit/db/?database=%s"><b>%s</b></a> has been created successfully.',
'CRON_CREATED_OK' => 'Cron job has been created successfully.', 'CRON_CREATED_OK' => 'Cron job has been created successfully.',
'IP_CREATED_OK' => 'IP address <a href="/edit/ip/?ip=%s"><b>%s</b></a> has been created successfully.', 'IP_CREATED_OK' => 'IP address <a href="/edit/ip/?ip=%s"><b>%s</b></a> has been created successfully.',
'PACKAGE_CREATED_OK' => 'Package <a href="/edit/package/?package=%s"><b>%s</b></a> has been created successfully.', 'PACKAGE_CREATED_OK' => 'Package <a href="/edit/package/?package=%s"><b>%s</b></a> has been created successfully.',
'SSL_GENERATED_OK' => 'Certificate has been generated successfully.', 'SSL_GENERATED_OK' => 'Certificate has been generated successfully.',
'Autoupdate has been successfully enabled' => 'Autoupdate has been successfully enabled', 'Autoupdate has been successfully enabled' => 'Autoupdate has been successfully enabled.',
'Autoupdate has been successfully disabled' => 'Autoupdate has been successfully disabled', 'Autoupdate has been successfully disabled' => 'Autoupdate has been successfully disabled.',
'Changes has been saved.' => 'Changes has been saved.', 'Changes has been saved.' => 'Changes have been saved.',
'Confirmation' => 'Confirmation', 'Confirmation' => 'Confirmation',
'DELETE_USER_CONFIRMATION' => 'Are you sure to delete user %s?', 'DELETE_USER_CONFIRMATION' => 'Are you sure you want to delete user %s?',
'SUSPEND_USER_CONFIRMATION' => 'Are you sure to suspend user %s?', 'SUSPEND_USER_CONFIRMATION' => 'Are you sure you want to suspend user %s?',
'UNSUSPEND_USER_CONFIRMATION' => 'Are you sure to unsuspend user %s?', 'UNSUSPEND_USER_CONFIRMATION' => 'Are you sure you want to unsuspend user %s?',
'DELETE_DOMAIN_CONFIRMATION' => 'Are you sure to delete domain %s?', 'DELETE_DOMAIN_CONFIRMATION' => 'Are you sure you want to delete domain %s?',
'SUSPEND_DOMAIN_CONFIRMATION' => 'Are you sure to suspend domain %s?', 'SUSPEND_DOMAIN_CONFIRMATION' => 'Are you sure you want to suspend domain %s?',
'UNSUSPEND_DOMAIN_CONFIRMATION' => 'Are you sure to unsuspend domain %s?', 'UNSUSPEND_DOMAIN_CONFIRMATION' => 'Are you sure you want to unsuspend domain %s?',
'DELETE_RECORD_CONFIRMATION' => 'Are you sure to delete record %s?', 'DELETE_RECORD_CONFIRMATION' => 'Are you sure you want to delete record %s?',
'SUSPEND_RECORD_CONFIRMATION' => 'Are you sure to suspend record %s?', 'SUSPEND_RECORD_CONFIRMATION' => 'Are you sure you want to suspend record %s?',
'UNSUSPEND_RECORD_CONFIRMATION' => 'Are you sure to unsuspend record %s?', 'UNSUSPEND_RECORD_CONFIRMATION' => 'Are you sure you want to unsuspend record %s?',
'DELETE_MAIL_ACCOUNT_CONFIRMATION' => 'Are you sure to delete %s?', 'DELETE_MAIL_ACCOUNT_CONFIRMATION' => 'Are you sure you want to delete %s?',
'SUSPEND_MAIL_ACCOUNT_CONFIRMATION' => 'Are you sure to suspend %s?', 'SUSPEND_MAIL_ACCOUNT_CONFIRMATION' => 'Are you sure you want to suspend %s?',
'UNSUSPEND_MAIL_ACCOUNT_CONFIRMATION' => 'Are you sure to unsuspend %s?', 'UNSUSPEND_MAIL_ACCOUNT_CONFIRMATION' => 'Are you sure you want to unsuspend %s?',
'DELETE_DATABASE_CONFIRMATION' => 'Are you sure to delete database %s?', 'DELETE_DATABASE_CONFIRMATION' => 'Are you sure you want to delete database %s?',
'SUSPEND_DATABASE_CONFIRMATION' => 'Are you sure to suspend database %s?', 'SUSPEND_DATABASE_CONFIRMATION' => 'Are you sure you want to suspend database %s?',
'UNSUSPEND_DATABASE_CONFIRMATION' => 'Are you sure to unsuspend database %s?', 'UNSUSPEND_DATABASE_CONFIRMATION' => 'Are you sure you want to unsuspend database %s?',
'DELETE_CRON_CONFIRMATION' => 'Are you sure to delete cron job?', 'DELETE_CRON_CONFIRMATION' => 'Are you sure you want to delete cron job?',
'SUSPEND_CRON_CONFIRMATION' => 'Are you sure to suspend cron job?', 'SUSPEND_CRON_CONFIRMATION' => 'Are you sure you want to suspend cron job?',
'UNSUSPEND_CRON_CONFIRMATION' => 'Are you sure to unsuspend cron job?', 'UNSUSPEND_CRON_CONFIRMATION' => 'Are you sure you want to unsuspend cron job?',
'DELETE_BACKUP_CONFIRMATION' => 'Are you sure to delete %s backup?', 'DELETE_BACKUP_CONFIRMATION' => 'Are you sure you want to delete %s backup?',
'DELETE_EXCLUSION_CONFIRMATION' => 'Are you sure to delete %s exclusion?', 'DELETE_EXCLUSION_CONFIRMATION' => 'Are you sure you want to delete %s exclusion?',
'DELETE_PACKAGE_CONFIRMATION' => 'Are you sure to delete package %s?', 'DELETE_PACKAGE_CONFIRMATION' => 'Are you sure you want to delete package %s?',
'DELETE_IP_CONFIRMATION' => 'Are you sure to delere IP address %s?', 'DELETE_IP_CONFIRMATION' => 'Are you sure you want to delete IP address %s?',
'RESTART_CONFIRMATION' => 'Are you sure you want to restart %s?',
'Welcome' => 'Welcome', 'Welcome' => 'Welcome',
'LOGGED_IN_AS' => 'Logged in as user %s', 'LOGGED_IN_AS' => 'Logged in as user %s',
'Error' => 'Error', 'Error' => 'Error',
'Invalid username or password' => 'Invalid username or password', 'Invalid username or password' => 'Invalid username or password.',
'Invalid username or code' => 'Invalid username or code', 'Invalid username or code' => 'Invalid username or code.',
'Passwords not match' => 'Passwords not match', 'Passwords not match' => 'Passwords do not match.',
'Please enter valid email address.' => 'Please enter valid email address.', 'Please enter valid email address.' => 'Please enter a valid email address.',
'Field "%s" can not be blank.' => 'Field "%s" can not be blank.', 'Field "%s" can not be blank.' => 'Field "%s" can not be blank.',
'Password is too short.' => 'Password is too short (minimum is 6 characters)', 'Password is too short.' => 'Password is too short (minimum is 6 characters)',
'Error code:' => 'Error code: %s', 'Error code:' => 'Error code: %s',
@ -406,7 +408,7 @@ $LANG['en'] = array(
'IP address is in use' => 'IP address is in use', 'IP address is in use' => 'IP address is in use',
'BACKUP_SCHEDULED' => 'Task has been added to the queue. You will receive an email notification when your backup is ready for download.', 'BACKUP_SCHEDULED' => 'Task has been added to the queue. You will receive an email notification when your backup is ready for download.',
'BACKUP_EXISTS' => 'An existing backup is already running. Please wait for that backup to finish.', 'BACKUP_EXISTS' => 'An existing backup is already running. Please wait for that backup to finish.',
'RESTORE_SCHEDULED' => 'Task has been added to the queue. You will receive an email notification when your backup is ready for download.', 'RESTORE_SCHEDULED' => 'Task has been added to the queue. You will receive an email notification when your restore has been completed.',
'RESTORE_EXISTS' => 'An existing restoration task is already running. Please wait for it to finish before launching it again.', 'RESTORE_EXISTS' => 'An existing restoration task is already running. Please wait for it to finish before launching it again.',
'WEB_EXCLUSIONS' => "Type domain name, one per line. To exclude all domains use *. To exclude specific dirs use following format: domain.com:public_html/cache:public_html/tmp", 'WEB_EXCLUSIONS' => "Type domain name, one per line. To exclude all domains use *. To exclude specific dirs use following format: domain.com:public_html/cache:public_html/tmp",
@ -420,10 +422,10 @@ $LANG['en'] = array(
'MAIL_FROM' => 'Vesta Control Panel <noreply@%s>', 'MAIL_FROM' => 'Vesta Control Panel <noreply@%s>',
'GREETINGS_GORDON_FREEMAN' => "Hello, %s %s,\n", 'GREETINGS_GORDON_FREEMAN' => "Hello, %s %s,\n",
'GREETINGS' => "Hello,\n", 'GREETINGS' => "Hello,\n",
'ACCOUNT_READY' => "Your account has been created and ready for use.\n\nhttps://%s/login/\nUsername: %s\nPassword: %s\n\n--\nVesta Control Panel\n", 'ACCOUNT_READY' => "Your account has been created and is ready for use.\n\nhttps://%s/login/\nUsername: %s\nPassword: %s\n\n--\nVesta Control Panel\n",
'FTP login credentials' => 'FTP login credentials', 'FTP login credentials' => 'FTP login credentials',
'FTP_ACCOUNT_READY' => "FTP account has been created and ready for use.\n\nHostname: %s\nUsername: %s_%s\nPassword: %s\n\n--\nVesta Control Panel\n", 'FTP_ACCOUNT_READY' => "FTP account has been created and is ready for use.\n\nHostname: %s\nUsername: %s_%s\nPassword: %s\n\n--\nVesta Control Panel\n",
'Database Credentials' => 'Database Credentials', 'Database Credentials' => 'Database Credentials',
'DATABASE_READY' => "Database has been created successfully.\n\nDatabase: %s\nUser: %s\nPassword: %s\n%s\n\n--\nVesta Control Panel\n", 'DATABASE_READY' => "Database has been created successfully.\n\nDatabase: %s\nUser: %s\nPassword: %s\n%s\n\n--\nVesta Control Panel\n",

View file

@ -38,6 +38,7 @@ $LANG['es'] = array(
'Add Package' => 'Añadir Plan', 'Add Package' => 'Añadir Plan',
'Add IP' => 'Añadir IP', 'Add IP' => 'Añadir IP',
'Search' => 'Buscar', 'Search' => 'Buscar',
'Add one more FTP Account' => 'Añadir una Cuenta FTP adicional',
'Overall Statistics' => 'Estadística General', 'Overall Statistics' => 'Estadística General',
'Daily' => 'Diariamente', 'Daily' => 'Diariamente',
'Weekly' => 'Semanalmente', 'Weekly' => 'Semanalmente',
@ -105,7 +106,7 @@ $LANG['es'] = array(
'Editing Package' => 'Editando Plan', 'Editing Package' => 'Editando Plan',
'Adding IP address' => 'Añadiendo Dirección IP', 'Adding IP address' => 'Añadiendo Dirección IP',
'Editing IP Address' => 'Editando Dirección IP', 'Editing IP Address' => 'Editando Dirección IP',
'Editing Backup Exclusions' => 'Editando exclusiones de Backup', 'Editing Backup Exclusions' => 'Editando exclusiones de Respaldo',
'Generating CSR' => 'Generar solicitud de CSR', 'Generating CSR' => 'Generar solicitud de CSR',
'Listing' => 'Listando', 'Listing' => 'Listando',
'Search Results' => 'Resultado de Busqueda', 'Search Results' => 'Resultado de Busqueda',
@ -392,6 +393,7 @@ $LANG['es'] = array(
'DELETE_EXCLUSION_CONFIRMATION' => '¿Está seguro que desea eliminar el exclusiones %s ?', 'DELETE_EXCLUSION_CONFIRMATION' => '¿Está seguro que desea eliminar el exclusiones %s ?',
'DELETE_PACKAGE_CONFIRMATION' => '¿Está seguor que desea eliminar el plan %s?', 'DELETE_PACKAGE_CONFIRMATION' => '¿Está seguor que desea eliminar el plan %s?',
'DELETE_IP_CONFIRMATION' => '¿Está seguro que desea eliminar la dirección IP %s?', 'DELETE_IP_CONFIRMATION' => '¿Está seguro que desea eliminar la dirección IP %s?',
'RESTART_CONFIRMATION' => '¿Está seguro que desea reiniciar %s?',
'Welcome' => 'Bienvenido', 'Welcome' => 'Bienvenido',
'LOGGED_IN_AS' => 'Conectado como el usuario %s', 'LOGGED_IN_AS' => 'Conectado como el usuario %s',
'Error' => 'Error', 'Error' => 'Error',

447
web/inc/i18n/fi.php Normal file
View file

@ -0,0 +1,447 @@
<?php
/**
* Vesta Finnish language file
* OHakala (onni@koodimonni.fi)
* RJuho (juho.rasanen@kotikone.fi)
*/
$LANG['fi'] = array(
'Packages' => 'Paketit',
'IP' => 'IP',
'Graphs' => 'Kuvaajat',
'Statistics' => 'Tilastot',
'Log' => 'Loki',
'Services' => 'Palvelut',
'Updates' => 'Päivitykset',
'Log in' => 'Kirjaudu',
'Log out' => 'Kirjaudu ulos',
'USER' => 'TILIT',
'WEB' => 'WEB',
'DNS' => 'DNS',
'MAIL' => 'MAIL',
'DB' => 'DB',
'CRON' => 'CRON',
'BACKUP' => 'BACKUP',
'Add User' => 'Lisää käyttäjä',
'Add Domain' => 'Lisää domaini',
'Add Web Domain' => 'Lisää Web domain',
'Add DNS Domain' => 'Lisää DNS domain',
'Add DNS Record' => 'Lisää DNS asetus',
'Add Mail Domain' => 'Lisää email domain',
'Add Mail Account' => 'Lisää email käyttäjä',
'Add Database' => 'Lisää tietokanta',
'Add Cron Job' => 'Lisää Cron-tehtävä',
'Create Backup' => 'Luo varmuuskopio',
'Configure' => 'Määritä',
'Restore All' => 'Palauta kaikki',
'Add Package' => 'Lisää paketti',
'Add IP' => 'Lisää IP',
'Add one more FTP Account' => 'Lisää vielä yhden FTP käyttäjä',
'Search' => 'Haku',
'Overall Statistics' => 'Kokonaistilastot',
'Daily' => 'Päivä',
'Weekly' => 'Viikko',
'Monthly' => 'Kuukausi',
'Yearly' => 'Vuosi',
'Add' => 'Lisää',
'Back' => 'Takaisin',
'Save' => 'Tallenna',
'Submit' => 'Lähetä',
'toggle all' => 'vaihda kaikki',
'apply to selected' => 'toteuta valituissa',
'rebuild' => 'palauta',
'rebuild web' => 'palauta web',
'rebuild dns' => 'palauta dns',
'rebuild mail' => 'palauta sähköposti',
'rebuild db' => 'palauta tietokanta',
'rebuild cron' => 'palauta cron',
'update counters' => 'päivitä laskurit',
'suspend' => 'keskeytä',
'unsuspend' => 'palauta',
'delete' => 'poista',
'show per user' => 'näytä per käyttäjä',
'login as' => 'kirjaudu sisään käyttäjänä',
'logout' => 'kirjaudu ulos',
'edit' => 'muokkaa',
'open webstats' => 'avaa webtilastot',
'view logs' => 'näytä lokit',
'list records' => 'listaa %s tietuetta',
'add record' => 'lisää tietue',
'list accounts' => 'listaa %s käyttäjää',
'add account' => 'lisää käyttäjä',
'open webmail' => 'avaa webmail',
'open %s' => 'avaa %s',
'download' => 'lataa',
'restore' => 'palauta',
'configure restore settings' => 'määritä palautusasetukset',
'stop' => 'pysäytä',
'start' => 'käynnistä',
'restart' => 'käynnistä uudelleen',
'update' => 'päivitä',
'generate' => 'generoi',
'Generate CSR' => 'generoi CSR',
'reread IP' => 'lue IP uudelleen',
'enable autoupdate' => 'päivitä automaattisesti',
'disable autoupdate' => 'älä päivitä automaattisesti',
'Adding User' => 'Lisätään käyttäjää',
'Editing User' => 'Muokataan käyttäjää',
'Adding Domain' => 'Lisätään domainia',
'Editing Domain' => 'Muokataan domainia',
'Adding DNS Domain' => 'Lisätään DNS-domainia',
'Editing DNS Domain' => 'Muokataan DNS-domainia',
'Adding DNS Record' => 'Lisätään DNS-tietuetta',
'Editing DNS Record' => 'Muokataan DNS-tietuetta',
'Adding Mail Domain' => 'Lisätään sähköpostidomainia',
'Editing Mail Domain' => 'Muokataan sähköpostidomainia',
'Adding Mail Account' => 'Lisätään sähköpostitiliä',
'Editing Mail Account' => 'Muokataan sähköpostitiliä',
'Adding database' => 'Lisätään tietokantaa',
'Editing Cron Job' => 'Muokataan Cron-tehtävää',
'Adding Cron Job' => 'Lisätään Cron-tehtävää',
'Editing Database' => 'Muokataan tietokantaa',
'Adding Package' => 'Lisätään pakettia',
'Editing Package' => 'Muokataan pakettia',
'Adding IP address' => 'Lisätään IP-osoitetta',
'Editing IP Address' => 'Muokataan IP-osoitetta',
'Editing Backup Exclusions' => 'Muokataan Varmuuskopioiden poikkeuksia',
'Generating CSR' => 'Generoidaan CSR',
'Listing' => 'Listataan',
'Search Results' => 'Hakutulokset',
'active' => 'aktiivinen',
'spnd' => 'keskeytetty',
'suspended' => 'keskeytetty',
'running' => 'käynnissä',
'stopped' => 'pysäytetty',
'outdated' => 'vanhentunut',
'updated' => 'päivitetty',
'yes' => 'kyllä',
'no' => 'ei',
'none' => 'ei mitään',
'pb' => 'pb', //petatavu
'tb' => 'tb', //teratavu
'gb' => 'gb', //gigatavu
'mb' => 'mb', //megatavu
'minute' => 'minuutti',
'hour' => 'tunti',
'day' => 'päivä',
'days' => 'päivää',
'hours' => 'tuntia',
'minutes' => 'minuuttia',
'month' => 'kuukautta',
'package' => 'paketti',
'traffic' => 'tiedonsiirto',
'disk' => 'levytila',
'Bandwidth' => 'Kaistanleveys',
'Disk' => 'Levy',
'Web' => 'Web',
'Mail' => 'Sähköposti',
'Databases' => 'Tietokannat',
'User Directories' => 'Käyttäjähakemistot',
'Template' => 'Pohja',
'Web Template' => 'Apache-pohja',
'Proxy Template' => 'Nginx-pohja',
'DNS Template' => 'DNS-pohja',
'Web Domains' => 'Web-domainit',
'SSL Domains' => 'SSL-domainit',
'Web Aliases' => 'Web-aliakset',
'per domain' => 'per domaini',
'DNS domains' => 'DNS-domainit',
'DNS records' => 'DNS-tietueet',
'Name Servers' => 'Nimipalvelimet',
'Mail Domains' => 'Sähköpostidomainit',
'Mail Accounts' => 'Sähköpostikäyttäjät',
'Cron Jobs' => 'Cron-tehtävät',
'SSH Access' => 'SSH-oikeudet',
'IP Addresses' => 'IP-osoitteet',
'Backups' => 'Varmuuskopiot',
'Backup System' => 'Varmuuskopioi järjestelmä',
'backup exclusions' => 'varmuuskopioinnin poikkeukset',
'template' => 'pohjat',
'SSL Support' => 'SSL-tuki',
'SSL Home Directory' => 'SSL-kotihakemisto',
'Proxy Support' => 'Nginx tuki',
'Proxy Extensions' => 'Nginx laajennukset',
'Web Statistics' => 'Webtilastot',
'Additional FTP Account' => 'Ylimääräinen FTP-tili',
'SOA' => 'SOA',
'TTL' => 'TTL',
'Expire' => 'Päättyy',
'Records' => 'Tietueet',
'Catchall email' => 'Catchall-sähköposti',
'AntiVirus Support' => 'AntiVirus-tuki',
'AntiSpam Support' => 'AntiSpam-tuki',
'DKIM Support' => 'DKIM-tuki',
'Accounts' => 'Tilit',
'Quota' => 'Kiintiö',
'Autoreply' => 'Automaattinen vastaus',
'Forward to' => 'Uudelleenohjaa',
'Do not store forwarded mail' => 'Älä säilytä uudelleenohjattuja viestejä',
'database' => 'tietokanta',
'User' => 'Käyttäjä',
'Host' => 'Host',
'Charset' => 'Merkistö',
'Min' => 'Min',
'Hour' => 'Tunti',
'Day' => 'Päivä',
'Month' => 'Kuukausi',
'Day of week' => 'Viikonpäivä',
'local' => 'paikallinen',
'Run Time' => 'Run Time',
'Backup Size' => 'Varmuuskopion koko',
'SYS' => 'SYS',
'Domains' => 'Domainit',
'Status' => 'Tila',
'shared' => 'jaetut',
'dedicated' => 'dedicated',
'Owner' => 'Omistaja',
'Users' => 'Käyttäjät',
'Load Average' => 'Keskimääräinen Käyttöaste',
'Memory Usage' => 'Muistinkäyttö',
'HTTPD Usage' => 'HTTPD-käyttö',
'NGINX Usage' => 'NGINX-käyttö',
'APACHE2 Usage' => 'APACHE2-käyttö',
'MySQL Usage on localhost' => 'MySQL-käyttö @ localhost',
'PostgreSQL Usage on localhost' => 'PostgreSQL-käyttö @ localhost',
'Bandwidth Usage eth0' => 'Kaistankäyttö eth0',
'Bandwidth Usage eth1' => 'Kaistankäyttö eth1',
'FTP Usage' => 'FTP-käyttö',
'SSH Usage' => 'SSH-käyttö',
'reverse proxy' => 'reverse proxy',
'web server' => 'web-palvelin',
'dns server' => 'dns-palvelin',
'mail server' => 'sähköpostipalvelin',
'pop/imap server' => 'pop/imap-palvelin',
'email antivirus' => 'sähköpostin antivirus',
'email antispam' => 'sähköpostin antispam',
'database server' => 'tietokantapalvelin',
'ftp server' => 'ftp-palvelin',
'job scheduler' => 'job scheduler', //no-idea
'CPU' => 'Prosessori',
'Memory' => 'Muisti',
'Uptime' => 'Käyttöaika',
'core package' => 'core-paketti',
'php interpreter' => 'php-tulkki',
'internal web server' => 'sisäinen web-palvelin',
'Version' => 'Versio',
'Release' => 'Julkaisu',
'Architecture' => 'Arkkitehtuuri',
'Object' => 'Objekti',
'Owner' => 'Omistaja',
'Username' => 'Käyttäjä',
'Password' => 'Salasana',
'Email' => 'Sähköposti',
'Package' => 'Paketti',
'Language' => 'Kieli',
'First Name' => 'Etunimi',
'Last Name' => 'Sukunimi',
'Send login credentials to email address' => 'Lähetä kirjautumistiedot sähköpostilla.',
'Default Template' => 'Oletuspohja',
'Default Name Servers' => 'Oletusnimipalvelimet',
'Domain' => 'Domain',
'DNS Support' => 'Tarvitsee DNS:n',
'Mail Support' => 'Tarvitsee Sähköpostin',
'Advanced options' => 'Lisäasetukset',
'Aliases' => 'Aliakset',
'SSL Certificate' => 'SSL-sertifikaatti',
'SSL Key' => 'SSL-avain',
'SSL Certificate Authority / Intermediate' => 'SSL Certificate Authority / Intermediate', //no-idea
'SSL CSR' => 'SSL CSR',
'optional' => 'valinnainen',
'internal' => 'sisäinen',
'Statistics Authorization' => 'Tilastoinnin valtuutus',
'Statistics Auth' => 'Tilastoinnin Auth',
'Account' => 'Tili',
'Prefix will be automaticaly added to username' => 'Etuliite %s lisätään automaattisesti käyttäjänimeen.',
'Send FTP credentials to email' => 'Lähetä FTP-kirjautumistiedot sähköpostilla',
'Expiration Date' => 'Viimeinen käyttöpäivä',
'YYYY-MM-DD' => 'YYYY-MM-DD',
'Name servers' => 'Nimipalvelimet',
'Record' => 'Tietue',
'IP or Value' => 'IP or Value', //no-idea
'Priority' => 'Prioriteetti',
'Record Number' => 'Tietueen numero',
'in megabytes' => 'megatavuissa',
'Message' => 'Viesti',
'use local-part' => 'use local-part', //no-idea
'one or more email addresses' => 'yksi tai useampia sähköposteja',
'Prefix will be automaticaly added to database name and database user' => 'Etuliite %s lisätään automaattisesti tietokannan nimeen ja käyttäjään',
'Database' => 'Tietokanta',
'Type' => 'Tyyppi',
'Minute' => 'Minuutti',
'Command' => 'Käsky',
'Package Name' => 'Paketin nimi',
'Netmask' => 'Netmask', //no-idea
'Interface' => 'Interface', //no-idea
'Shared' => 'Jaettu',
'Assigned user' => 'Assigned user',
'Assigned domain' => 'Assigned domain',
'NAT IP association' => 'NAT IP association', //no-idea
'shell' => 'shell',
'web domains' => 'web-domainit',
'web aliases' => 'web-aliakset',
'dns records' => 'dns-tietueet',
'mail domains' => 'sähköpostidomainit',
'mail accounts' => 'sähköpostitilit',
'accounts' => 'tilit',
'databases' => 'tietokannat',
'cron jobs' => 'cron-tehtävät',
'backups' => 'varmuuskopiot',
'quota' => 'kiintiö',
'day of week' => 'viikonpäivä',
'cmd' => 'cmd',
'users' => 'käyttäjät',
'domains' => 'domainit',
'aliases' => 'aliakset',
'records' => 'tietueet',
'jobs' => 'tehtävät',
'username' => 'käyttäjänimi',
'password' => 'salasana',
'type' => 'tyyppi',
'charset' => 'charset',
'domain' => 'domain',
'ip' => 'ip',
'ip address' => 'ip-osoite',
'IP address' => 'IP-osoite',
'netmask' => 'netmask',
'interface' => 'interface',
'assigned user' => 'omistaja',
'ns1' => 'ns1',
'ns2' => 'ns2',
'user' => 'käyttäjä',
'email' => 'sähköposti',
'first name' => 'etunimi',
'last name' => 'sukunimi',
'account' => 'tili',
'ssl certificate' => 'ssl-sertifikaatti',
'ssl key' => 'ssl-avain',
'stats user password' => 'tilastoinnin käyttäjän salasana',
'stats username' => 'tilastoinnin käyttäjä',
'stats password' => 'tilastoinnin salasana',
'ftp user password' => 'ftp-käyttäjän salasana',
'ftp user' => 'ftp-käyttäjä',
'Last 70 lines of %s.%s.log' => '%s 70 viimeistä lokimerkintää.%s.log',
'Download AccessLog' => 'Lataa AccessLog',
'Download ErrorLog' => 'Lataa Virheloki',
'Country' => 'Maa',
'2 letter code' => '2 kirjaimen lyhenne',
'State / Province' => 'Osavaltio / Maakunta',
'City / Locality' => 'Kaupunki / Paikkakunta',
'Organization' => 'Organisaatio',
'1 account' => '1 tili',
'%s accounts' => '%s tiliä',
'1 domain' => '1 domain',
'%s domains' => '%s domainia',
'1 record' => '1 tietue',
'%s records' => '%s tietuetta',
'1 mail account' => '1 sähköpostitili',
'%s mail accounts' => '%s sähköpostitiliä',
'1 database' => '1 tietokanta',
'%s databases' => '%s tietokantaa',
'1 cron job' => '1 cron-tehtävä',
'%s cron jobs' => '%s cron-tehtävää',
'1 archive' => '1 archive',
'%s archives' => '%s archives',
'1 package' => '1 paketti',
'%s packages' => '%s pakettia',
'1 IP address' => '1 IP-osoite',
'%s IP addresses' => '%s IP-osoitetta',
'1 month' => '1 kuukausi',
'%s months' => '%s kuukautta',
'1 log record' => '1 lokimerkintä',
'%s log records' => '%s lokimerkintää',
'1 object' => '1 objekti',
'%s objects' => '%s objektia',
'no exclusions' => 'ei poikkeuksia',
'USER_CREATED_OK' => 'Käyttäjä <a href="/edit/user/?user=%s"><b>%s</b></a> lisättiin onnistuneesti',
'WEB_DOMAIN_CREATED_OK' => 'Domain <a href="/edit/web/?domain=%s"><b>%s</b></a> lisättiin onnistuneesti.',
'DNS_DOMAIN_CREATED_OK' => 'DNS-domain <a href="/list/dns/?domain=%s"><b>%s</b></a> lisättiin onnistuneesti.',
'DNS_RECORD_CREATED_OK' => 'Tietue <b>%s.%s</b> lisättiin onnistuneesti.',
'MAIL_DOMAIN_CREATED_OK' => 'Sähköpostidomain <a href="/list/mail/?domain=%s"><b>%s</b></a> lisättiin onnistuneesti.',
'MAIL_ACCOUNT_CREATED_OK' => 'Sähköpostitili <a href="/edit/mail/?account=%s&domain=%s"><b>%s@%s</b></a> lisättiin onnistuneesti.',
'DATABASE_CREATED_OK' => 'Tietokanta <a href="/edit/db/?database=%s"><b>%s</b></a> lisättiin onnistuneesti.',
'CRON_CREATED_OK' => 'Cron-tehtävä lisättiin onnistuneesti.',
'IP_CREATED_OK' => 'IP-osoite <a href="/edit/ip/?ip=%s"><b>%s</b></a> lisättiin onnistuneesti.',
'PACKAGE_CREATED_OK' => 'Paketti <a href="/edit/package/?package=%s"><b>%s</b></a> lisättiin onnistuneesti.',
'SSL_GENERATED_OK' => 'Sertifikaatti lisättiin onnistuneesti.',
'Autoupdate has been successfully enabled' => 'Automaattinen päivitys otettu käyttöön',
'Autoupdate has been successfully disabled' => 'Automaattinen päivitys poistettu käytöstä',
'Changes has been saved.' => 'Muutokset tallennettu.',
'Confirmation' => 'Hyväksyntä',
'DELETE_USER_CONFIRMATION' => 'Haluatko varmasti poistaa käyttäjän %s?',
'SUSPEND_USER_CONFIRMATION' => 'Haluatko varmasti keskeyttää käyttäjän %s?',
'UNSUSPEND_USER_CONFIRMATION' => 'Haluatko varmasti ottaa käyttöön käyttäjän %s?',
'DELETE_DOMAIN_CONFIRMATION' => 'Haluatko varmasti poistaa domainin %s?',
'SUSPEND_DOMAIN_CONFIRMATION' => 'Haluatko varmasti keskeyttää domainin %s?',
'UNSUSPEND_DOMAIN_CONFIRMATION' => 'Haluatko varmasti ottaa käyttöön domainin %s?',
'DELETE_RECORD_CONFIRMATION' => 'Haluatko varmasti poistaa tietueen %s?',
'SUSPEND_RECORD_CONFIRMATION' => 'Haluatko varmasti keskeyttää tietueen %s?',
'UNSUSPEND_RECORD_CONFIRMATION' => 'Haluatko varmasti ottaa käyttöön tietueen %s?',
'DELETE_MAIL_ACCOUNT_CONFIRMATION' => 'Haluatko varmasti poistaa %s?',
'SUSPEND_MAIL_ACCOUNT_CONFIRMATION' => 'Haluatko varmasti keskeyttää %s?',
'UNSUSPEND_MAIL_ACCOUNT_CONFIRMATION' => 'Haluatko varmasti ottaa käyttöön %s?',
'DELETE_DATABASE_CONFIRMATION' => 'Haluatko varmasti poistaa tietokannan %s?',
'SUSPEND_DATABASE_CONFIRMATION' => 'Haluatko varmasti keskeyttää tietokannan %s?',
'UNSUSPEND_DATABASE_CONFIRMATION' => 'Haluatko varmasti ottaa käyttöön tietokannan %s?',
'DELETE_CRON_CONFIRMATION' => 'Haluatko varmasti poistaa cron-tehtävän?',
'SUSPEND_CRON_CONFIRMATION' => 'Haluatko varmasti keskeyttää cron-tehtävän?',
'UNSUSPEND_CRON_CONFIRMATION' => 'Haluatko varmasti ottaa käyttöön cron-tehtävän?',
'DELETE_BACKUP_CONFIRMATION' => 'Haluatko varmasti poistaa %s varmuuskopion?',
'DELETE_EXCLUSION_CONFIRMATION' => 'Haluatko varmasti poistaa %s poikkeuksen?',
'DELETE_PACKAGE_CONFIRMATION' => 'Haluatko varmasti poistaa paketin %s?',
'DELETE_IP_CONFIRMATION' => 'Haluatko varmasti poistaa IP-osoitteen %s?',
'RESTART_CONFIRMATION' => 'Haluatko varmasti käynnistää uudelleen %s?',
'Welcome' => 'Tervetuloa',
'LOGGED_IN_AS' => 'Kirjautunut käyttäjänä %s',
'Error' => 'Virhe',
'Invalid username or password' => 'Väärä käyttäjänimi tai salasana',
'Invalid username or code' => 'Väärä käyttäjänimi tai koodi',
'Passwords not match' => 'Salasanat eivät täsmää',
'Please enter valid email address.' => 'Syötä toimiva sähköpostiosoite.',
'Field "%s" can not be blank.' => 'Kenttä "%s" ei voi olla tyhjä.',
'Password is too short.' => 'Salasana on liian lyhyt (min. 6 merkkiä)',
'Error code:' => 'Virhekoodi: %s',
'SERVICE_ACTION_FAILED' => '"%s" "%s" epäonnistui',
'IP address is in use' => 'IP-osoite on käytössä',
'BACKUP_SCHEDULED' => 'Tehtävä on lisätty jonoon. Saat sähköpostin kun varmuuskopiosi on valmis ladattavaksi.',
'BACKUP_EXISTS' => 'Aikaisempi varmuuskopiointi on vielä käynnissä, odota kunnes se päättyy.',
'RESTORE_SCHEDULED' => 'Tehtävä on lisätty jonoon. Saat sähköpostin kun varmuuskopiosi on valmis ladattavaksi.',
'RESTORE_EXISTS' => 'Aikaisempi palautus on vielä käynnissä, odota kunnes se päättyy.',
'WEB_EXCLUSIONS' => "Syötä domainin nimi, yksi per rivi. Syötä '*', jos haluat ohittaa kaikki domainit. Ohittaksesi pois tiettyjä hakemistoja käytä seuraavaa rakennetta: domain.com:public_html/cache:public_html/tmp",
'DNS_EXCLUSIONS' => "Syötä domainin nimi, yksi per rivi. Syötä '*', jos haluat ohittaa kaikki domainit.",
'MAIL_EXCLUSIONS' => "Syötä domainin nimi, yksi per rivi. Syötä '*', jos haluat ohittaa kaikki domainit. Ohittaksesi pois tiettyjä hakemistoja käytä seuraavaa rakennetta: domain.com:info:support:postmaster",
'DB_EXCLUSIONS' => "Syötä koko tietokannan nimi, yksi per rivi. Syötä '*', jos haluat ohittaa kaikki tietokannat.",
'CRON_EXCLUSIONS' => "Ohittaaksesi kaikki tehtävät käytä '*'",
'USER_EXCLUSIONS' => "Syötä kansion nimi, yksi per rivi. Ohittaaksesi kaikki tietokannat syötä '*'",
'Welcome to Vesta Control Panel' => 'Tervetuloa Vesta Hallintapaneeliin',
'MAIL_FROM' => 'Vesta Hallintapaneeli <noreply@%s>',
'GREETINGS_GORDON_FREEMAN' => "Morjens, %s %s,\n",
'GREETINGS' => "Morjens,\n",
'ACCOUNT_READY' => "Käyttätilisi on luotu ja odottaa innokkaasti ensimmäistä kirjautumista.\n\nhttps://%s/login/\nKäyttäjä: %s\nSalasana: %s\n\n--\nVesta Hallintapaneeli\n",
'FTP login credentials' => 'FTP-tilitiedot',
'FTP_ACCOUNT_READY' => "FTP-tili on luotu ja odottaa innokkaasti ensimmäistä kirjautumista.\n\nHostname: %s\nKäyttäjä: %s_%s\nSalasana: %s\n\n--\nVesta Hallintapaneeli\n",
'Database Credentials' => 'Tietokannan-tilitiedot',
'DATABASE_READY' => "Tietokanta on luotu onnistuneesti.\n\nTietokanta: %s\nKäyttäjä: %s\nSalasana: %s\n%s\n\n--\nVesta Hallintapaneeli\n",
'forgot password' => 'unohditko salasanan?',
'Confirm' => 'Hyväksy',
'New Password' => 'Uusi salasana',
'Confirm Password' => 'Hyväksy salasana',
'Reset' => 'Nollaa',
'Reset Code' => 'Nollauskoodi',
'RESET_NOTICE' => '',
'RESET_CODE_SENT' => 'Salasanan nollauskoodi on lähetetty sähköpostiisi<br>',
'MAIL_RESET_SUBJECT' => 'Salana vaihdettiin %s',
'PASSWORD_RESET_REQUEST' => "Nollataksesi hallintapaneelin salasanan, seuraa tätä linkkiä:\nhttps://%s/reset/?action=confirm&user=%s&code=%s\n\nVaihtoehtoisesti voit mennä https://%s/reset/?action=code&user=%s ja syöttää nollauskoodin:\n%s\n\nJos et varta vasten pyytänyt tätä salasananvaihtoa, mene paniikkiin ja ota yhteyttä ylläpitoon.\n\n--\nVesta Hallintapaneeli\n",
);

445
web/inc/i18n/fr.php Normal file
View file

@ -0,0 +1,445 @@
<?php
/**
* Vesta language file
* French Translation https://github.com/nhoway
*/
$LANG['fr'] = array(
'Packages' => 'Paquets',
'IP' => 'IP',
'Graphs' => 'Graphs',
'Statistics' => 'Statistiques',
'Log' => 'Log',
'Services' => 'Services',
'Updates' => 'Mises-à-jour',
'Log in' => 'Connexion',
'Log out' => 'Déconnexion',
'USER' => 'USER',
'WEB' => 'WEB',
'DNS' => 'DNS',
'MAIL' => 'MAIL',
'DB' => 'DB',
'CRON' => 'CRON',
'BACKUP' => 'BACKUP',
'Add User' => 'Ajouter un Utilisateur',
'Add Domain' => 'Ajouter un Domaine',
'Add Web Domain' => 'Ajouter un Domaine',
'Add DNS Domain' => 'Ajouter un DNS',
'Add DNS Record' => 'Ajouter un DNS',
'Add Mail Domain' => 'Ajouter un Domaine',
'Add Mail Account' => 'Ajouter un Compte',
'Add Database' => 'Ajouter une BDD',
'Add Cron Job' => 'Ajouter une Tâche',
'Create Backup' => 'Créer un Backup',
'Configure' => 'Configurer',
'Restore All' => 'Restaurer Tout',
'Add Package' => 'Ajouter un Paquet',
'Add IP' => 'Ajouter une IP',
'Search' => 'Rechercher',
'Add one more FTP Account' => 'Ajouter un autre Compte FTP',
'Overall Statistics' => 'Statistiques Générales',
'Daily' => 'Quotidien',
'Weekly' => 'Hebdomadaire',
'Monthly' => 'Mensuel',
'Yearly' => 'Annuel',
'Add' => 'Ajouter',
'Back' => 'Retour',
'Save' => 'Sauvegarde',
'Submit' => 'Envoyer',
'toggle all' => 'selectionner tout',
'apply to selected' => 'appliquer à la sélection',
'rebuild' => 'recréer',
'rebuild web' => 'recréer web',
'rebuild dns' => 'recréer dns',
'rebuild mail' => 'recréer mail',
'rebuild db' => 'recréer db',
'rebuild cron' => 'recréer cron',
'update counters' => 'mettre-à-jour les totaux',
'suspend' => 'suspendre',
'unsuspend' => 'réactiver',
'delete' => 'supprimer',
'show per user' => 'voir par utilisateur',
'login as' => 'connexion en tant que',
'logout' => 'déconnexion',
'edit' => 'éditer',
'open webstats' => 'ouvrir les statistiques web',
'view logs' => 'voir les logs',
'list records' => '%s enregistrements listés',
'add record' => 'ajouter un enregistrement',
'list accounts' => '%s comptes listés',
'add account' => 'ajouter un compte',
'open webmail' => 'ouvrir le webmail',
'open %s' => 'ouvrir %s',
'download' => 'télécharger',
'restore' => 'restaurer',
'configure restore settings' => 'configurer les paramètres de restauration',
'stop' => 'stop',
'start' => 'démarrer',
'restart' => 'redémarrer',
'update' => 'mettre-à-jour',
'generate' => 'générer',
'Generate CSR' => 'Générer un CSR',
'reread IP' => 'actualiser l\'IP',
'enable autoupdate' => 'activer la mise-à-jour automatique',
'disable autoupdate' => 'desactiver la mise-à-jour automatique',
'Adding User' => 'Ajout d\'un Utilisateur',
'Editing User' => 'Edition d\'un Utilisateur',
'Adding Domain' => 'Ajout d\'un Domaine',
'Editing Domain' => 'Edition d\'un Domaine',
'Adding DNS Domain' => 'Ajout d\'un Domaine DNS',
'Editing DNS Domain' => 'Edition d\'un Domaine DNS',
'Adding DNS Record' => 'Ajout d\'un Enregistrement DNS',
'Editing DNS Record' => 'Edition d\'un Enregistrement DNS',
'Adding Mail Domain' => 'Ajout d\'un Domaine Mail',
'Editing Mail Domain' => 'Edition d\'un Domaine Mail',
'Adding Mail Account' => 'Ajout d\'un Compte Mail',
'Editing Mail Account' => 'Edition d\'un Compte Mail',
'Adding database' => 'Ajout d\'une base de données',
'Editing Cron Job' => 'Edition d\'une tâche Cron',
'Adding Cron Job' => 'Ajout d\'une tâche Cron',
'Editing Database' => 'Edition d\'une base de données',
'Adding Package' => 'Ajout d\'un Paquet',
'Editing Package' => 'Edition d\'un Paquet',
'Adding IP address' => 'Ajout d\'une adresse IP',
'Editing IP Address' => 'Edition d\'une adresse IP',
'Editing Backup Exclusions' => 'Edition des exclusions de Backup',
'Generating CSR' => 'Génération d\'un jeton CSR',
'Listing' => 'Listage',
'Search Results' => 'Résultats de Recherche',
'active' => 'actif',
'spnd' => 'suspendu',
'suspended' => 'suspendus',
'running' => 'lancé',
'stopped' => 'arrêté',
'outdated' => 'périmé',
'updated' => 'mis-à-jour',
'yes' => 'oui',
'no' => 'non',
'none' => 'aucun',
'pb' => 'po',
'tb' => 'to',
'gb' => 'go',
'mb' => 'mo',
'minute' => 'minute',
'hour' => 'heure',
'day' => 'jour',
'days' => 'jours',
'hours' => 'heures',
'minutes' => 'minutes',
'month' => 'mois',
'package' => 'paquet',
'Bandwidth' => 'Bande Passante',
'Disk' => 'Disque',
'Web' => 'Web',
'Mail' => 'Mail',
'Databases' => 'Bases de Données',
'User Directories' => 'Répertoires Utilisateurs',
'Template' => 'Template',
'Web Template' => 'Template Apache',
'Proxy Template' => 'Template Nginx',
'DNS Template' => 'Template DNS',
'Web Domains' => 'Domaines Web',
'SSL Domains' => 'Domaines SSL',
'Web Aliases' => 'Alias Web',
'per domain' => 'par domaine',
'DNS domains' => 'Domaines DNS',
'DNS domains' => 'Domaines DNS',
'DNS records' => 'Enregistrements DNS' ,
'Name Servers' => 'Nom des Serveurs',
'Mail Domains' => 'Domaines Mail',
'Mail Accounts' => 'Comptes Mail',
'Cron Jobs' => 'Tâches Cron',
'SSH Access' => 'Accès SSH',
'IP Addresses' => 'Adresses IP',
'Backups' => 'Sauvegardes',
'Backup System' => 'Système de Sauvegarde',
'backup exclusions' => 'exclusions',
'template' => 'template',
'SSL Support' => 'Support SSL',
'SSL Home Directory' => 'Racine SSL',
'Proxy Support' => 'Support Nginx',
'Proxy Extensions' => 'Extensions Nginx',
'Web Statistics' => 'Statistiques Web',
'Additional FTP Account' => 'FTP Additionnel',
'SOA' => 'SOA',
'TTL' => 'TTL',
'Expire' => 'Expiration',
'Records' => 'Enregistrements',
'Catchall email' => 'Email de Récupération',
'AntiVirus Support' => 'Support de l\'AntiVirus',
'AntiSpam Support' => 'Support de l\'AntiSpam',
'DKIM Support' => 'Support DKIM',
'Accounts' => 'Comptes',
'Quota' => 'Quota',
'Autoreply' => 'Réponse Automatique',
'Forward to' => 'Transférer à',
'Do not store forwarded mail' => 'Ne pas conserver le mail transféré',
'database' => 'base de données',
'User' => 'Utilisateur',
'Host' => 'Serveur',
'Charset' => 'Charset',
'Min' => 'Mn',
'Hour' => 'Heure',
'Day' => 'Jour',
'Month' => 'Mois',
'Day of week' => 'Jour de la semaine',
'local' => 'local',
'Run Time' => 'Temps d\'Exécution',
'Backup Size' => 'Taille de la sauvegarde',
'SYS' => 'SYS',
'Domains' => 'Domaines',
'Status' => 'Statuts',
'shared' => 'partagé',
'dedicated' => 'dédié',
'Owner' => 'Propriétaire',
'Users' => 'Utilisateurs',
'Load Average' => 'Charge Moyenne',
'Memory Usage' => 'Utilisation de la Mémoire',
'HTTPD Usage' => 'Utilisation HTTPD',
'NGINX Usage' => 'Utilisation NGINX',
'MySQL Usage on localhost' => 'Utilisation de MySQL sur localhost',
'PostgreSQL Usage on localhost' => 'Utilisation de PostgreSQL sur localhost',
'Bandwidth Usage eth0' => 'Utilisation de la Bande Passante sur eth0',
'FTP Usage' => 'Utilisation du FTP',
'SSH Usage' => 'Utilisation SSH',
'reverse proxy' => 'reverse proxy',
'web server' => 'serveur web',
'dns server' => 'serveur dns',
'mail server' => 'serveur mail',
'pop/imap server' => 'serveur pop/imap',
'email antivirus' => 'email antivirus',
'email antispam' => 'email antispam',
'database server' => 'serveur de base de données',
'ftp server' => 'serveur ftp',
'job scheduler' => 'programmation de tâches',
'CPU' => 'CPU',
'Memory' => 'Mémoire',
'Uptime' => 'Temps de Fonctionnement',
'core package' => 'paquet de base',
'php interpreter' => 'interpréteur php',
'internal web server' => 'serveur web interne',
'Version' => 'Version',
'Release' => 'Release',
'Architecture' => 'Architecture',
'Object' => 'Objet',
'Owner' => 'Propriétaire',
'Username' => 'Nom d\'Utilisateur',
'Password' => 'Mot de Passe',
'Email' => 'Email',
'Package' => 'Paquet',
'Language' => 'Langue',
'First Name' => 'Prénom',
'Last Name' => 'Nom',
'Send login credentials to email address' => 'Envoyer les identifiants à l\'adresse email',
'Default Template' => 'Template par défaut',
'Default Name Servers' => 'Nom de Serveurs par Défaut',
'Domain' => 'Domaine',
'DNS Support' => 'Support DNS',
'Mail Support' => 'Support Email',
'Advanced options' => 'Options avancées',
'Aliases' => 'Alias',
'SSL Certificate' => 'Certificat SSL',
'SSL Key' => 'Clé SSL',
'SSL Certificate Authority / Intermediate' => 'Autorité de certification SSL / Intermédiaire',
'SSL CSR' => 'Jeton CSR SSL',
'optional' => 'optionnel',
'internal' => 'interne',
'Statistics Authorization' => 'Droits d\'Accès aux Statistiques',
'Statistics Auth' => 'Accès aux Statistiques',
'Account' => 'Compte',
'Prefix will be automaticaly added to username' => 'Le préfixe %s sera automatiquement ajouté au nom d\'utilisateur',
'Send FTP credentials to email' => 'Envoyer les identifiants FTP à l\'adresse email',
'Expiration Date' => 'Date d\'Expiration',
'YYYY-MM-DD' => 'YYYY-MM-DD',
'Name servers' => 'Nom des serveurs',
'Record' => 'Valeur de l\'Enregistrement',
'IP or Value' => 'IP ou Valeur',
'Priority' => 'Priorité',
'Record Number' => 'Nombre d\'Enregistrements',
'in megabytes' => 'en mégaoctets',
'Message' => 'Message',
'use local-part' => 'utilisation locale',
'one or more email addresses' => 'une ou plusieurs adresses email',
'Prefix will be automaticaly added to database name and database user' => 'Le préfixe %s sera automatiquement ajouté au nom de la base de données et de son utilisateur',
'Database' => 'Base de Données',
'Type' => 'Type',
'Minute' => 'Minute',
'Command' => 'Commande',
'Package Name' => 'Nom du Paquet',
'Netmask' => 'Masque Réseau',
'Interface' => 'Interface',
'Shared' => 'Partagé',
'Assigned user' => 'Utilisateur associé',
'Assigned domain' => 'Domaine associé',
'NAT IP association' => 'Association NAT IP',
'shell' => 'shell',
'web domains' => 'domaines web',
'web aliases' => 'alias web',
'dns records' => 'enregistrements dns',
'mail domains' => 'domaines email',
'mail accounts' => 'comptes email',
'accounts' => 'comptes',
'databases' => 'bases données',
'cron jobs' => 'tâches cron',
'backups' => 'sauvegardes',
'quota' => 'quota',
'day of week' => 'jour de la semaine',
'cmd' => 'cmd',
'users' => 'utilisateurs',
'disk' => 'disque',
'traffic' => 'traffic',
'domains' => 'domaines',
'aliases' => 'alias',
'records' => 'enregistrements',
'jobs' => 'tâches',
'username' => 'nom d\'utilisateur',
'password' => 'mot de passe',
'type' => 'type',
'charset' => 'charset',
'domain' => 'domaine',
'ip' => 'ip',
'ip address' => 'adresse IP',
'IP address' => 'Adresse IP',
'netmask' => 'masque réseau',
'interface' => 'interface',
'assigned user' => 'utilisateur associé',
'ns1' => 'ns1',
'ns2' => 'ns2',
'user' => 'utilisateur',
'email' => 'email',
'first name' => 'prénom',
'last name' => 'nom',
'account' => 'compte',
'ssl certificate' => 'certificat ssl',
'ssl key' => 'clé ssl',
'stats user password' => 'Mot de passe du compte statistiques',
'stats username' => 'utilisateur statistiques',
'stats password' => 'mot de passe statistiques',
'ftp user password' => 'mot de passe ftp',
'ftp user' => 'utilisateur ftp',
'Last 70 lines of %s.%s.log' => 'Dernières 70 lignes du fichier %s.%s.log',
'Download AccessLog' => 'Télécharger le fichier AccessLog',
'Download ErrorLog' => 'Télécharger le fichier ErrorLog',
'Country' => 'Pays',
'2 letter code' => 'Code sur 2 lettres',
'State / Province' => 'Pays / Province',
'City / Locality' => 'Ville',
'Organization' => 'Organisation',
'1 account' => '1 compte',
'%s accounts' => '%s comptes',
'1 domain' => '1 domaine',
'%s domains' => '%s domaines',
'1 record' => '1 enregistrement',
'%s records' => '%s enregistrements',
'1 mail account' => '1 compte email',
'%s mail accounts' => '%s comptes email',
'1 database' => '1 base de données',
'%s databases' => '%s base de données',
'1 cron job' => '1 tâche cron',
'%s cron jobs' => '%s tâches cron',
'1 archive' => '1 archive',
'%s archives' => '%s archives',
'1 package' => '1 paquet',
'%s packages' => '%s paquets',
'1 IP address' => '1 adresse IP',
'%s IP addresses' => '%s adresses IP',
'1 month' => '1 mois',
'%s months' => '%s mois',
'1 log record' => '1 enregistrement',
'%s log records' => '%s enregistrements',
'1 object' => '1 objet',
'%s objects' => '%s objets',
'no exclusions' => 'pas d\'exclusions',
'USER_CREATED_OK' => 'Utilisateur <a href="/edit/user/?user=%s"><b>%s</b></a> créé avec succès.',
'WEB_DOMAIN_CREATED_OK' => 'Domaine <a href="/edit/web/?domain=%s"><b>%s</b></a> créé avec succès.',
'DNS_DOMAIN_CREATED_OK' => 'Domaine DNS <a href="/list/dns/?domain=%s"><b>%s</b></a> créé avec succès.',
'DNS_RECORD_CREATED_OK' => 'L\'enregistrement <b>%s.%s</b> a été créé avec succès.',
'MAIL_DOMAIN_CREATED_OK' => 'Le domaine email <a href="/list/mail/?domain=%s"><b>%s</b></a> a été créé avec succès.',
'MAIL_ACCOUNT_CREATED_OK' => 'Le compte email <a href="/edit/mail/?account=%s&domain=%s"><b>%s@%s</b></a> a été créé avec succès.',
'DATABASE_CREATED_OK' => 'La base de données <a href="/edit/db/?database=%s"><b>%s</b></a> a été créée avec succès.',
'CRON_CREATED_OK' => 'La tâche Cron a été créée avec succès.',
'IP_CREATED_OK' => 'L\'adresse IP <a href="/edit/ip/?ip=%s"><b>%s</b></a> a été créée avec succès.',
'PACKAGE_CREATED_OK' => 'Le paquet <a href="/edit/package/?package=%s"><b>%s</b></a> a été créé avec succès.',
'SSL_GENERATED_OK' => 'Le certificat a été généré avec succès.',
'Autoupdate has been successfully enabled' => 'Les mises-à-jour automatiques ont été activées avec succès.',
'Autoupdate has been successfully disabled' => 'Les mises-à-jour automatiques ont été desactivées avec succès.',
'Changes has been saved.' => 'Les changements ont été sauvegardés.',
'Confirmation' => 'Confirmation',
'DELETE_USER_CONFIRMATION' => 'Êtes-vous sûr de vouloir supprimer l\'utilisateur %s ?',
'SUSPEND_USER_CONFIRMATION' => 'Êtes-vous sûr de vouloir suspendre l\'utilisateur %s ?',
'UNSUSPEND_USER_CONFIRMATION' => 'Êtes-vous sûr de vouloir réactiver l\'utilisateur %s ?',
'DELETE_DOMAIN_CONFIRMATION' => 'Êtes-vous sûr de vouloir supprimer le domaine %s ?',
'SUSPEND_DOMAIN_CONFIRMATION' => 'Êtes-vous sûr de vouloir suspendre le domaine %s ?',
'UNSUSPEND_DOMAIN_CONFIRMATION' => 'Êtes-vous sûr de vouloir réactiver le domaine %s ?',
'DELETE_RECORD_CONFIRMATION' => 'Êtes-vous sûr de vouloir supprimer l\'enregistrement %s ?',
'SUSPEND_RECORD_CONFIRMATION' => 'Êtes-vous sûr de vouloir suspendre l\'enregistrement %s ?',
'UNSUSPEND_RECORD_CONFIRMATION' => 'Êtes-vous sûr de vouloir réactiver l\'enregistrement %s ?',
'DELETE_MAIL_ACCOUNT_CONFIRMATION' => 'Êtes-vous sûr de vouloir supprimer %s ?',
'SUSPEND_MAIL_ACCOUNT_CONFIRMATION' => 'Êtes-vous sûr de vouloir suspendre %s ?',
'UNSUSPEND_MAIL_ACCOUNT_CONFIRMATION' => 'Êtes-vous sûr de vouloir réactiver %s ?',
'DELETE_DATABASE_CONFIRMATION' => 'Êtes-vous sûr de vouloir supprimer la base de données %s ?',
'SUSPEND_DATABASE_CONFIRMATION' => 'Êtes-vous sûr de vouloir suspendre la base de données %s ?',
'UNSUSPEND_DATABASE_CONFIRMATION' => 'Êtes-vous sûr de vouloir réactiver la base de données %s ?',
'DELETE_CRON_CONFIRMATION' => 'Êtes-vous sûr de vouloir suprimer la tâche cron ?',
'SUSPEND_CRON_CONFIRMATION' => 'Êtes-vous sûr de vouloir suspendre la tâche cron ?',
'UNSUSPEND_CRON_CONFIRMATION' => 'Êtes-vous sûr de vouloir réactiver la tâche cron ?',
'DELETE_BACKUP_CONFIRMATION' => 'Êtes-vous sûr de vouloir supprimer la sauvergarde %s ?',
'DELETE_EXCLUSION_CONFIRMATION' => 'Êtes-vous sûr de vouloir supprimer l\'exclusion %s ?',
'DELETE_PACKAGE_CONFIRMATION' => 'Êtes-vous sûr de vouloir supprimer le paquet %s ?',
'DELETE_IP_CONFIRMATION' => 'Êtes-vous sûr de vouloir supprimer l\'adresse IP %s ?',
'RESTART_CONFIRMATION' => 'Êtes-vous sûr de vouloir redémarrer le serveur %s ?',
'Welcome' => 'Bienvenue',
'LOGGED_IN_AS' => 'Connecté en tant que %s',
'Error' => 'Erreur',
'Invalid username or password' => 'Nom d\'utilisateur ou mot de passe invalide.',
'Invalid username or code' => 'Nom d\'utilisateur ou code de confirmation invalide.',
'Passwords not match' => 'Les mots de passe ne correspondent pas.',
'Please enter valid email address.' => 'Veuillez entrer une adresse email valide.',
'Field "%s" can not be blank.' => 'Le champ "%s" ne peut être vide.',
'Password is too short.' => 'Le mot de passe est trop court (6 caractères minimum)',
'Error code:' => 'Code erreur : %s',
'SERVICE_ACTION_FAILED' => '"%s" "%s" échouée',
'IP address is in use' => 'L\'adresse IP est en cours d\'utilisation',
'BACKUP_SCHEDULED' => 'La tâche a bien été ajoutée à la liste. Vous recevrez un mail de confirmation lorsque la sauvegarde sera prête pour le téléchargement.',
'BACKUP_EXISTS' => 'La création d\'une sauvegarde est déjà en cours. Veuillez attendre que celle-ci soit terminée.',
'RESTORE_SCHEDULED' => 'La tâche a bien été ajoutée à la liste. Vous recevrez un mail de confirmation lorsque sera terminée.',
'RESTORE_EXISTS' => 'La restauration d\'une sauvegarde est déjà en cours. Veuillez attendre que celle-ci soit terminée avant d\en lancer une nouvelle.',
'WEB_EXCLUSIONS' => "Entrez les noms de domaines, un par ligne. Pour exclure tous les domaines utilisez *. Pour exclure des répertoires spécifiques utilisez le format suivant : domain.com:public_html/cache:public_html/tmp",
'DNS_EXCLUSIONS' => "Entrez les noms de domaines, un par ligne. Pour exclure tous les domaines utilisez *.",
'MAIL_EXCLUSIONS' => "Entrez les domaines, un par ligne. Pour exclure tous les domaines utilisez *. Pour exclure des comptes spécifiques utilisez le format suivant : domain.com:info:support:postmaster",
'DB_EXCLUSIONS' => "Entrez le nom complet des bases de données, une par ligne. Pour exclure toutes les bases de données utilisez *.",
'CRON_EXCLUSIONS' => "Pour explure toutes les tâches utilisez *.",
'USER_EXCLUSIONS' => "Entrez les noms de répertoires, un par ligne. Pour exclure tous les répertoires utilisez *.",
'Welcome to Vesta Control Panel' => 'Bienvenue sur l\interface d\'administration Vesta CP',
'MAIL_FROM' => 'Vesta Control Panel <noreply@%s>',
'GREETINGS_GORDON_FREEMAN' => "Bonjour, %s %s,\n",
'GREETINGS' => "Bonjour,\n",
'ACCOUNT_READY' => "Votre compte a été créé avec succès et est prêt à l\'emploi.\n\nhttps://%s/login/\nUtilisateur : %s\nMot de Passe : %s\n\n--\nVesta Control Panel\n",
'FTP login credentials' => 'Identifiants de connexion FTP',
'FTP_ACCOUNT_READY' => "Le compte FTP a été créé avec succès et est prêt à l\'emploi.\n\nHôte : %s\nUtilisateur : %s_%s\nMot de Passe : %s\n\n--\nVesta Control Panel\n",
'Database Credentials' => 'Identifiants de connexion à la Base de Données',
'DATABASE_READY' => "La base de données a été créée avec succès et est prête à l\'emploi.\n\nBase de Données : %s\nUtilisateur : %s\nMot de Passe: %s\n%s\n\n--\nVesta Control Panel\n",
'forgot password' => 'mot de passe oublié',
'Confirm' => 'Confirmer',
'New Password' => 'Nouveau mot de passe',
'Confirm Password' => 'Confirmer le mot de passe',
'Reset' => 'Réinitialiser',
'Reset Code' => 'Code de Réinitialisation',
'RESET_NOTICE' => '',
'RESET_CODE_SENT' => 'Un Code de Réinitialisation de votre mot de passe a été envoyé à votre adresse email<br>',
'MAIL_RESET_SUBJECT' => 'Réinitialisation du mot de passe de %s',
'PASSWORD_RESET_REQUEST' => "Pour réinitialiser votre mot de passe, veuillez suivre le lien suivant :\nhttps://%s/reset/?action=confirm&user=%s&code=%s\n\nSinon, vous pouvez suivre https://%s/reset/?action=code&user=%s et entrer le code de réinitialisation suivant :\n%s\n\nSi vous n'avez pas demandé la réinitialisation de votre mot de passe, veuillez ignorer ce message. Nous vous prions de nous excuser pour la gène occasionnée.\n\n--\nVesta Control Panel\n",
);

445
web/inc/i18n/hu.php Normal file
View file

@ -0,0 +1,445 @@
<?php
/**
* Vesta hungarian language file
* Készítette: Kovács Ákos - (kovacsakos1991@gmail.com)
* www.kovacsakos.info
* 2014.06.18.
*/
$LANG['hu'] = array(
'Packages' => 'Csomagok',
'IP' => 'IP',
'Graphs' => 'Grafikonok',
'Statistics' => 'Statisztikák',
'Log' => 'Log',
'Services' => 'Szolgáltatások',
'Updates' => 'Frissítések',
'Log in' => 'Belépés',
'Log out' => 'Kilépés',
'USER' => 'USER',
'WEB' => 'WEB',
'DNS' => 'DNS',
'MAIL' => 'MAIL',
'DB' => 'ADATBÁZIS',
'CRON' => 'CRON',
'BACKUP' => 'MENTÉS',
'Add User' => 'Új felhasználó',
'Add Domain' => 'Új domain',
'Add Web Domain' => 'Új Web Domain',
'Add DNS Domain' => 'Új DNS Domain',
'Add DNS Record' => 'Új DNS Record',
'Add Mail Domain' => 'Új Mail Domain',
'Add Mail Account' => 'Új Mail fiók',
'Add Database' => 'Új adatbázis',
'Add Cron Job' => 'Új Cron Job',
'Create Backup' => 'Mentés készítése',
'Configure' => 'Beállítás',
'Restore All' => 'Összes visszaállítása',
'Add Package' => 'Csomag hozzáadása',
'Add IP' => 'Új IP',
'Add one more FTP Account' => 'Add one more FTP Account',
'Search' => 'Keresés',
'Overall Statistics' => 'Átfogó statisztikák',
'Daily' => 'Napi',
'Weekly' => 'Heti',
'Monthly' => 'Havi',
'Yearly' => 'Éves',
'Add' => 'Hozzáadás',
'Back' => 'Vissza',
'Save' => 'Mentés',
'Submit' => 'OK',
'toggle all' => 'összes kinyit/bezár',
'apply to selected' => 'alkalmazás a kiválasztottakra',
'rebuild' => 'újratelepít',
'rebuild web' => 'web újraépítés',
'rebuild dns' => 'dns újraépítés',
'rebuild mail' => 'mail újraépítés',
'rebuild db' => 'adatbázis újraépítés',
'rebuild cron' => 'cron újraépítés',
'update counters' => 'számlálók frissítése',
'suspend' => 'felfüggeszt',
'unsuspend' => 'újraaktivál',
'delete' => 'törlés',
'show per user' => 'felhasználónként listáz',
'login as' => 'bejelentkezés, mint',
'logout' => 'kilépés',
'edit' => 'szerkesztés',
'open webstats' => 'statisztikák megnyitása',
'view logs' => 'logok megnyitása',
'list records' => '%s record listázása',
'add record' => 'rekord hozzáadása',
'list accounts' => '%s fiók listázása',
'add account' => 'fiók hozzáadása',
'open webmail' => 'webmail megnyitása',
'open %s' => '%s megnyitása',
'download' => 'letöltés',
'restore' => 'visszaállítás',
'configure restore settings' => 'visszaállítási beállítások konfigurálása',
'stop' => 'stop',
'start' => 'start',
'restart' => 'újraindítás',
'update' => 'frissítés',
'generate' => 'létrehoz',
'Generate CSR' => 'CSR generálás',
'reread IP' => 'IP újraolvasása',
'enable autoupdate' => 'automatikus frissítés engedélyezése',
'disable autoupdate' => 'automatikus frissítés tiltása',
'Adding User' => 'Felhasználó hozzáadása',
'Editing User' => 'Felhasználó szerkesztése',
'Adding Domain' => 'Domain hozzáadása',
'Editing Domain' => 'Domain szerkesztése',
'Adding DNS Domain' => 'DNS Domain hozzáadása',
'Editing DNS Domain' => 'DNS Domain szerkesztése',
'Adding DNS Record' => 'DNS Rekord hozzáadása',
'Editing DNS Record' => 'DNS Record szerkesztése',
'Adding Mail Domain' => 'Mail Domain hozzáadása',
'Editing Mail Domain' => 'Mail Domain szerkesztése',
'Adding Mail Account' => 'Mail Fiók hozzáadása',
'Editing Mail Account' => 'Mail Fiók szerkesztése',
'Adding database' => 'Adatbázis hozzáadása',
'Editing Cron Job' => 'Cron Job szerkesztése',
'Adding Cron Job' => 'Cron Job hozzáadása',
'Editing Database' => 'Adatbázis szerkesztése',
'Adding Package' => 'Csomag hozzáadása',
'Editing Package' => 'Csomag szerkesztése',
'Adding IP address' => 'IP cím hozzáadása',
'Editing IP Address' => 'IP cím szerkesztése',
'Editing Backup Exclusions' => 'Mentési kivételek szerkesztése',
'Generating CSR' => 'CSR generálása',
'Listing' => 'Listázás',
'Search Results' => 'Keresési eredmények',
'active' => 'aktív',
'spnd' => 'felfüggesztett',
'suspended' => 'felfüggesztett',
'running' => 'fut',
'stopped' => 'megállított',
'outdated' => 'elavult',
'updated' => 'frissített',
'yes' => 'igen',
'no' => 'nem',
'none' => 'egyik sem',
'pb' => 'pb',
'tb' => 'tb',
'gb' => 'gb',
'mb' => 'mb',
'minute' => 'perc',
'hour' => 'óra',
'day' => 'nap',
'days' => 'nap',
'hours' => 'óra',
'minutes' => 'perc',
'month' => 'hónap',
'package' => 'csomag',
'Bandwidth' => 'Sávszélesség',
'Disk' => 'Lemezterület',
'Web' => 'Web',
'Mail' => 'Mail',
'Databases' => 'Adatbázis',
'User Directories' => 'Felhasználói könyvtárak',
'Template' => 'Sablon',
'Web Template' => 'Apache sablon',
'Proxy Template' => 'Nginx sablon',
'DNS Template' => 'DNS sablon',
'Web Domains' => 'Web Domainek',
'SSL Domains' => 'SSL Domainek',
'Web Aliases' => 'Web Alias',
'per domain' => 'domainenként',
'DNS domains' => 'DNS Domainek',
'DNS domains' => 'DNS Domainek',
'DNS records' => 'DNS recordok' ,
'Name Servers' => 'Name Serverek',
'Mail Domains' => 'Mail Domainek',
'Mail Accounts' => 'Mail Fiókok',
'Cron Jobs' => 'Cron Jobs',
'SSH Access' => 'SSH hozzáférés',
'IP Addresses' => 'IP Címek',
'Backups' => 'Mentések',
'Backup System' => 'Mentési rendszer',
'backup exclusions' => 'kihagyás a mentésből',
'template' => 'sablon',
'SSL Support' => 'SSL támogatás',
'SSL Home Directory' => 'SSL kezdőlap',
'Proxy Support' => 'Nginx támogatás',
'Proxy Extensions' => 'Nginx kiterjesztések',
'Web Statistics' => 'Web statisztikák',
'Additional FTP Account' => 'Hozzáadott FTP',
'SOA' => 'SOA',
'TTL' => 'TTL',
'Expire' => 'Lejár',
'Records' => 'Rekordok',
'Catchall email' => 'Catchall email',
'AntiVirus Support' => 'AntiVirus támogatás',
'AntiSpam Support' => 'AntiSpam támogatás',
'DKIM Support' => 'DKIM támogatás',
'Accounts' => 'Fiókok',
'Quota' => 'Kvóta',
'Autoreply' => 'Automatikus válasz',
'Forward to' => 'Továbbítás',
'Do not store forwarded mail' => 'Továbbított e-mailek mentésének tiltása',
'database' => 'adatbázis',
'User' => 'Felhasználó',
'Host' => 'Hoszt',
'Charset' => 'Karakterkódolás',
'Min' => 'Perc',
'Hour' => 'Óra',
'Day' => 'Nap',
'Month' => 'Hónap',
'Day of week' => 'A hét napja',
'local' => 'helyi',
'Run Time' => 'Futási idő',
'Backup Size' => 'Mentés mérete',
'SYS' => 'SYS',
'Domains' => 'Domainek',
'Status' => 'Státusz',
'shared' => 'megosztott',
'dedicated' => 'dedikált',
'Owner' => 'Tulajdonos',
'Users' => 'Felhasználók',
'Load Average' => 'Load átlag',
'Memory Usage' => 'Memória használat',
'HTTPD Usage' => 'HTTPD használat',
'NGINX Usage' => 'NGINX használat',
'MySQL Usage on localhost' => 'MySQL használat a localhoston',
'PostgreSQL Usage on localhost' => 'PostgreSQL használat a localhoston',
'Bandwidth Usage eth0' => 'eth0 sávszélesség használat',
'FTP Usage' => 'FTP használat',
'SSH Usage' => 'SSH használat',
'reverse proxy' => 'fordított proxy',
'web server' => 'web szerver',
'dns server' => 'dns szerver',
'mail server' => 'mail szerver',
'pop/imap server' => 'pop/imap szerver',
'email antivirus' => 'email antivirus',
'email antispam' => 'email antispam',
'database server' => 'adatbázis szerver',
'ftp server' => 'ftp szerver',
'job scheduler' => 'job ütemező',
'CPU' => 'CPU',
'Memory' => 'Memória',
'Uptime' => 'Futási idő',
'core package' => 'alapcsomag',
'php interpreter' => 'php értelmező',
'internal web server' => 'külső web szerver',
'Version' => 'Verzió',
'Release' => 'Kiadás',
'Architecture' => 'Architektúra',
'Object' => 'Objektum',
'Owner' => 'Tulajdonos',
'Username' => 'Felhasználónév',
'Password' => 'Jelszó',
'Email' => 'Email',
'Package' => 'Csomag',
'Language' => 'Nyelv',
'First Name' => 'Keresztnév',
'Last Name' => 'Vezetéknév',
'Send login credentials to email address' => 'Belépési adatok küldése e-mailben',
'Default Template' => 'Alapértelmezett sablon',
'Default Name Servers' => 'Alapértelmezett névszerverek',
'Domain' => 'Domain',
'DNS Support' => 'DNS támogatás',
'Mail Support' => 'Mail támogatás',
'Advanced options' => 'Haladó beállítások',
'Aliases' => 'Aliaszok',
'SSL Certificate' => 'SSL igazolás',
'SSL Key' => 'SSL kulcs',
'SSL Certificate Authority / Intermediate' => 'SSL igazolás engedélyezése',
'SSL CSR' => 'SSL CSR',
'optional' => 'opcionális',
'internal' => 'belső',
'Statistics Authorization' => 'Statisztika engedélyezése',
'Statistics Auth' => 'Statisztika engedélyezése',
'Account' => 'Fiók',
'Prefix will be automaticaly added to username' => 'A(z) %s előtag automatikusan hozzáadásra kerül a felhasználónévhez.',
'Send FTP credentials to email' => 'FTP adatok küldése e-mailben',
'Expiration Date' => 'Lejárati dárum',
'YYYY-MM-DD' => 'ÉÉÉÉ-HH-NN',
'Name servers' => 'Névszerverek',
'Record' => 'Rekord',
'IP or Value' => 'IP avgy érték',
'Priority' => 'Prioritás',
'Record Number' => 'Rekord száma',
'in megabytes' => 'megabájtokban',
'Message' => 'üzenet',
'use local-part' => 'helyi rész használata',
'one or more email addresses' => 'egy vagy több e-mail cím',
'Prefix will be automaticaly added to database name and database user' => 'A(z) %s előtag automatikusan hozzáadásra kerül az adatbázis felhasználónévhez',
'Database' => 'Adatbázis',
'Type' => 'Típus',
'Minute' => 'Perc',
'Command' => 'Parancs',
'Package Name' => 'Csomagnév',
'Netmask' => 'Netmask',
'Interface' => 'Interfész',
'Shared' => 'Megosztott',
'Assigned user' => 'Hozzárendelt felhasználó',
'Assigned domain' => 'Hozzárendelt domain',
'NAT IP association' => 'NAT IP hozzárendelés',
'shell' => 'rendszerhéj',
'web domains' => 'web domainek',
'web aliases' => 'web aliaszok',
'dns records' => 'dns rekordok',
'mail domains' => 'mail domainek',
'mail accounts' => 'mail fiókok',
'accounts' => 'fiókok',
'databases' => 'adatbázisok',
'cron jobs' => 'cron jobs',
'backups' => 'mentések',
'quota' => 'kvóta',
'day of week' => 'a hét napja',
'cmd' => 'cmd',
'users' => 'felhasználók',
'domains' => 'domainek',
'aliases' => 'aliaszok',
'records' => 'rekordok',
'jobs' => 'jobs',
'username' => 'felhasználónév',
'password' => 'jelszó',
'type' => 'típus',
'charset' => 'karakterkódolás',
'domain' => 'domain',
'ip' => 'ip',
'ip address' => 'ip cím',
'IP address' => 'IP cím',
'netmask' => 'netmaszk',
'interface' => 'interfész',
'assigned user' => 'hozzárendelt felhasználó',
'ns1' => 'ns1',
'ns2' => 'ns2',
'user' => 'felhasználó',
'email' => 'email',
'first name' => 'vezetéknév',
'last name' => 'keresztnév',
'account' => 'fiók',
'ssl certificate' => 'ssl hitelesítés',
'ssl key' => 'ssl kulcs',
'stats user password' => 'stats user password',
'stats username' => 'stats username',
'stats password' => 'stats password',
'ftp user password' => 'ftp felhasználónév',
'ftp user' => 'ftp felhasználó',
'Last 70 lines of %s.%s.log' => 'A %s.%s.log utolsó 70 sora',
'Download AccessLog' => 'AccessLog letöltése',
'Download ErrorLog' => 'ErrorLog letöltése',
'Country' => 'Ország',
'2 letter code' => '2 Irányítószám',
'State / Province' => 'Megye',
'City / Locality' => 'Város',
'Organization' => 'Szervezet',
'1 account' => '1 fiók',
'%s accounts' => '%s fiók',
'1 domain' => '1 domain',
'%s domains' => '%s domainek',
'1 record' => '1 rekord',
'%s records' => '%s recordok',
'1 mail account' => '1 mail fiók',
'%s mail accounts' => '%s mail fiókok',
'1 database' => '1 adatbázis',
'%s databases' => '%s adatbázis',
'1 cron job' => '1 cron job',
'%s cron jobs' => '%s cron job',
'1 archive' => '1 archívum',
'%s archives' => '%s archívum',
'1 package' => '1 csomag',
'%s packages' => '%s csomag',
'1 IP address' => '1 IP cím',
'%s IP addresses' => '%s IP cím',
'1 month' => '1 hónap',
'%s months' => '%s hónap',
'1 log record' => '1 log rekord',
'%s log records' => '%s log rekord',
'1 object' => '1 objektum',
'%s objects' => '%s objektum',
'no exclusions' => 'nincs kihagyás',
'USER_CREATED_OK' => '<a href="/edit/user/?user=%s"><b>%s</b></a> felhasználó sikeresen létrehozva.',
'WEB_DOMAIN_CREATED_OK' => '<a href="/edit/web/?domain=%s"><b>%s</b></a> domain sikeresen létrehozva.',
'DNS_DOMAIN_CREATED_OK' => '<a href="/list/dns/?domain=%s"><b>%s</b></a> DNS domain sikeresen létrehozva.',
'DNS_RECORD_CREATED_OK' => '<b>%s.%s</b> rekord sikeresen létrehozva.',
'MAIL_DOMAIN_CREATED_OK' => '<a href="/list/mail/?domain=%s"><b>%s</b></a> ail domain sikeresen létrehozva.',
'MAIL_ACCOUNT_CREATED_OK' => '<a href="/edit/mail/?account=%s&domain=%s"><b>%s@%s</b></a> mail fiók sikeresen létrehozva.',
'DATABASE_CREATED_OK' => '<a href="/edit/db/?database=%s"><b>%s</b></a> adatbázis sikeresen létrehozva.',
'CRON_CREATED_OK' => 'Cron job sikeresen létrehozva.',
'IP_CREATED_OK' => '<a href="/edit/ip/?ip=%s"><b>%s</b></a> IP cím sikeresen létrehozva.',
'PACKAGE_CREATED_OK' => 'A(z) <a href="/edit/package/?package=%s"><b>%s</b></a> csomag sikeresen létrehozva.',
'SSL_GENERATED_OK' => 'A tanúsítvány sikeresen létrehozva.',
'Autoupdate has been successfully enabled' => 'Az automatikus frissítés bekapcsolva.',
'Autoupdate has been successfully disabled' => 'Az automatikus frissítés kikapcsolva.',
'Changes has been saved.' => 'A módosítások sikeresen mentésre kerültek.',
'Confirmation' => 'Megerősítés',
'DELETE_USER_CONFIRMATION' => 'Biztos, hogy törölni szeretnéd %s felhasználót?',
'SUSPEND_USER_CONFIRMATION' => 'Biztos, hogy felfüggeszted %s felhasználót?',
'UNSUSPEND_USER_CONFIRMATION' => 'Biztos, hogy újra szeretnéd aktiválni %s felhasználót?',
'DELETE_DOMAIN_CONFIRMATION' => 'Biztos, hogy törlöd a(z) %s domaint?',
'SUSPEND_DOMAIN_CONFIRMATION' => 'Biztos, hogy felfüggeszted a(z) %s domaint?',
'UNSUSPEND_DOMAIN_CONFIRMATION' => 'Biztos, hogy újra szeretnéd aktiválni a(z) %s domaint?',
'DELETE_RECORD_CONFIRMATION' => 'Biztos, hogy törlöd a(z) %s rekordot?',
'SUSPEND_RECORD_CONFIRMATION' => 'Biztos, hogy felfüggeszted a(z) %s rekordot?',
'UNSUSPEND_RECORD_CONFIRMATION' => 'Biztos, hogy újra szeretnéd aktiválni a(z) %s rekordot?',
'DELETE_MAIL_ACCOUNT_CONFIRMATION' => 'Biztos, hogy törlöd a(z) %s -t?',
'SUSPEND_MAIL_ACCOUNT_CONFIRMATION' => 'Biztos, hogy felfüggeszted a(z) %s -t?',
'UNSUSPEND_MAIL_ACCOUNT_CONFIRMATION' => 'Biztos, hogy újra szeretnéd aktiválni a(z) %s -t?',
'DELETE_DATABASE_CONFIRMATION' => 'Biztos, hogy törlöd a(z) %s adatbázist?',
'SUSPEND_DATABASE_CONFIRMATION' => 'Biztos, hogy újra szeretnéd aktiválni a(z) %s adatbázist?',
'UNSUSPEND_DATABASE_CONFIRMATION' => 'Biztos, hogy újra szeretnéd aktiválni a(z) %s adatbázist?',
'DELETE_CRON_CONFIRMATION' => 'Biztos, hogy törlöd a cron job-ot?',
'SUSPEND_CRON_CONFIRMATION' => 'Biztos, hogy felfüggeszted a cron job-ot?',
'UNSUSPEND_CRON_CONFIRMATION' => 'Biztos, hogy újra szeretnéd aktiválni a cron job-ot?',
'DELETE_BACKUP_CONFIRMATION' => 'Biztos, hogy törlöd a(z) %s mentést?',
'DELETE_EXCLUSION_CONFIRMATION' => 'Biztos, hogy törlöd a(z) %s kivételt?',
'DELETE_PACKAGE_CONFIRMATION' => 'Biztos, hogy törlöd a(z) %s csomagot?',
'DELETE_IP_CONFIRMATION' => 'Biztos, hogy törlöd a(z) IP címet?',
'RESTART_CONFIRMATION' => 'Are you sure you want to restart %s?',
'Welcome' => 'Üdvözöljük',
'LOGGED_IN_AS' => 'Belépve, mint %s',
'Error' => 'Hiba',
'Invalid username or password' => 'Hibás felhasználónév vagy jelszó',
'Invalid username or code' => 'Hibás felhasználónév vagy kód',
'Passwords not match' => 'A jelszavak nem egyeznek meg',
'Please enter valid email address.' => 'Kérlek valós e-mail címet adj meg!',
'Field "%s" can not be blank.' => 'A(z) "%s" mező nem lehet üres.',
'Password is too short.' => 'A jelszó túl rövid.(minimum 6 karakter)',
'Error code:' => 'Hibakód: %s',
'SERVICE_ACTION_FAILED' => 'A(z) "%s" "%s" meghiúsult',
'IP address is in use' => 'Az IP cím használatban van.',
'BACKUP_SCHEDULED' => 'A feladat végrehajtás alatt. A mentés elkészültéről e-mail értesítést fogunk küldeni.',
'BACKUP_EXISTS' => 'Egy mentés már folyamatban van. Kérlek várj, míg elkészül.',
'RESTORE_SCHEDULED' => 'A feladat a végrehajtási sorba került. A mentés elkészültéről e-mail értesítést fogunk küldeni.',
'RESTORE_EXISTS' => 'Egy visszaállítás már folyamatban van. Kérlek várj, míg elkészül.',
'WEB_EXCLUSIONS' => "Írd be a domain nevet, soronként egyet. Az összes kihagyásához használj "*" -ot. Adott könyvtár kihagyásához használd a következő formátumot: domain.com:public_html/cache:public_html/tmp",
'DNS_EXCLUSIONS' => "Írd be a domain nevet, soronként egyet. Az összes kihagyásához használj "*" -ot.",
'MAIL_EXCLUSIONS' => "Írd be a domain nevet, soronként egyet. Az összes domain kihagyásához használj "*" -ot. Adott fiók kihagyásához használd a következő formátumot: domain.com:info:support:postmaster",
'DB_EXCLUSIONS' => "Írd be az adatbázis teljes nevét, soronként egyet. Az összes adatbázis kihagyásához használj "*" -ot",
'CRON_EXCLUSIONS' => "Az összes job kihagyásához használj "*" -ot.",
'USER_EXCLUSIONS' => "Írd be a könyvtár nevét, soronként egyet. Az összes kihagyásához használj "*" -ot.",
'Welcome to Vesta Control Panel' => 'Üdv, a Kezelőfelület!',
'MAIL_FROM' => 'Kezelőfelület <noreply@%s>',
'GREETINGS_GORDON_FREEMAN' => "Üdv, %s %s,\n",
'GREETINGS' => "Üdv,\n",
'ACCOUNT_READY' => "A fiókod létrejött és készen áll a használatra.\n\nhttps://%s/login/\nFelhasználónév: %s\nJelszó: %s\n\n--\nKezelőfelület\n",
'FTP login credentials' => 'FTP belépési adatok',
'FTP_ACCOUNT_READY' => "Az FTP felhasználó létrejött és készen áll a használatra.\n\nKiszolgáló: %s\nFelhasználónév: %s_%s\nJelszó: %s\n\n--\nKezelőfelület\n",
'Database Credentials' => 'Adatbázis adatok',
'DATABASE_READY' => "Az adatbázis létrejött és készen áll a használatra.\n\nAdatbázis: %s\nFelhasználónév: %s\nJelszó: %s\n%s\n\n--\nKezelőfelület\n",
'forgot password' => 'elfelejtett jelszó',
'Confirm' => 'Megerősít',
'New Password' => 'Új jelszó',
'Confirm Password' => 'Jelszó megerősítése',
'Reset' => 'Visszaállít',
'Reset Code' => 'Kód újragenerálása',
'RESET_NOTICE' => '',
'RESET_CODE_SENT' => 'A jelszó visszaállításhoz szükséges kód elküldésre került az e-mail címedre<br>',
'MAIL_RESET_SUBJECT' => 'Jelszó újragenerálás %s -kor',
'PASSWORD_RESET_REQUEST' => "A panel jelszavad visszaállításához kattints a következő linkre:\nhttps://%s/reset/?action=confirm&user=%s&code=%s\n\nAlternatively, vagy használd a következőt https://%s/reset/?action=code&user=%s és írd be a kódot:\n%s\n\nHa nem Te kérted a visszaállítást, kérlek hagyd figyelmen kívül ezt a levelet.\n\n--\nKezelőfelület\n",
);

View file

@ -40,6 +40,7 @@ $LANG['id'] = array(
'Restore All' => 'Kembalikan Semua', 'Restore All' => 'Kembalikan Semua',
'Add Package' => 'Tambah Paket', 'Add Package' => 'Tambah Paket',
'Add IP' => 'Tambah IP', 'Add IP' => 'Tambah IP',
'Add one more FTP Account' => 'Tambah satu lagi Pengguna FTP',
'Search' => 'Cari', 'Search' => 'Cari',
'Overall Statistics' => 'Seluruh Statistik', 'Overall Statistics' => 'Seluruh Statistik',
'Daily' => 'Harian', 'Daily' => 'Harian',
@ -332,7 +333,7 @@ $LANG['id'] = array(
'City / Locality' => 'Kota', 'City / Locality' => 'Kota',
'Organization' => 'Organisasi', 'Organization' => 'Organisasi',
'1 account' => '1 pengguna', '1 account' => '1 pengguna',
'%s accounts' => '%s pengguna', '%s accounts' => '%s pengguna',
'1 domain' => '1 domain', '1 domain' => '1 domain',
'%s domains' => '%s domains', '%s domains' => '%s domains',
@ -395,6 +396,7 @@ $LANG['id'] = array(
'DELETE_EXCLUSION_CONFIRMATION' => 'Pengecualian %s mau dihapus?', 'DELETE_EXCLUSION_CONFIRMATION' => 'Pengecualian %s mau dihapus?',
'DELETE_PACKAGE_CONFIRMATION' => 'Paket %s mau dihapus?', 'DELETE_PACKAGE_CONFIRMATION' => 'Paket %s mau dihapus?',
'DELETE_IP_CONFIRMATION' => 'Alamat IP %s beneran mau dihapus?', 'DELETE_IP_CONFIRMATION' => 'Alamat IP %s beneran mau dihapus?',
'RESTART_CONFIRMATION' => '%s mau me-restart?',
'Welcome' => 'Selamat Datang', 'Welcome' => 'Selamat Datang',
'LOGGED_IN_AS' => 'Masuk sebagai pengguna %s', 'LOGGED_IN_AS' => 'Masuk sebagai pengguna %s',
'Error' => 'Kesalahan', 'Error' => 'Kesalahan',

444
web/inc/i18n/it.php Normal file
View file

@ -0,0 +1,444 @@
<?php
/**
* Vesta language file
* Fabio Cagliero - fab120 (fabio@webnuvola.com)
* https://github.com/fab120/ - https://facebook.com/fab120
*/
$LANG['it'] = array(
'Packages' => 'Pacchetti',
'IP' => 'IP',
'Graphs' => 'Grafici',
'Statistics' => 'Statistiche',
'Log' => 'Log',
'Services' => 'Servizi',
'Updates' => 'Aggiornamenti',
'Log in' => 'Log in',
'Log out' => 'Log out',
'USER' => 'USER',
'WEB' => 'WEB',
'DNS' => 'DNS',
'MAIL' => 'MAIL',
'DB' => 'DB',
'CRON' => 'CRON',
'BACKUP' => 'BACKUP',
'Add User' => 'Nuovo Utente',
'Add Domain' => 'Nuovo Dominio',
'Add Web Domain' => 'Nuovo Dominio',
'Add DNS Domain' => 'Nuova Zona DNS',
'Add DNS Record' => 'Nuovo Record',
'Add Mail Domain' => 'Nuovo Dominio',
'Add Mail Account' => 'Nuovo Account',
'Add Database' => 'Nuovo Database',
'Add Cron Job' => 'Nuovo Cron Job',
'Create Backup' => 'Crea Backup',
'Configure' => 'Configura',
'Restore All' => 'Ripristina Tutto',
'Add Package' => 'Nuovo Pacchetto',
'Add IP' => 'Aggiungi IP',
'Search' => 'Cerca',
'Add one more FTP Account' => 'Nuovo account FTP',
'Overall Statistics' => 'Statistiche Generali',
'Daily' => 'Giornaliero',
'Weekly' => 'Settimanale',
'Monthly' => 'Mensile',
'Yearly' => 'Annuale',
'Add' => 'Aggiungi',
'Back' => 'Indietro',
'Save' => 'Salva',
'Submit' => 'Invia',
'toggle all' => 'inverti tutti',
'apply to selected' => 'applica ai selezionati',
'rebuild' => 'ricostruisci',
'rebuild web' => 'ricostruisci web',
'rebuild dns' => 'ricostruisci dns',
'rebuild mail' => 'ricostruisci mail',
'rebuild db' => 'ricostruisci db',
'rebuild cron' => 'ricostruisci cron',
'update counters' => 'aggiorna contatori',
'suspend' => 'sospendi',
'unsuspend' => 'riabilita',
'delete' => 'cancella',
'show per user' => 'mostra per utente',
'login as' => 'accedi come',
'logout' => 'logout',
'edit' => 'modifica',
'open webstats' => 'apri webstats',
'view logs' => 'visualizza logs',
'list records' => 'mostra %s record',
'add record' => 'nuovo record',
'list accounts' => 'mostra %s account',
'add account' => 'aggiungi account',
'open webmail' => 'apri webmail',
'open %s' => 'apri %s',
'download' => 'download',
'restore' => 'ripristina',
'configure restore settings' => 'configure restore settings',
'stop' => 'ferma',
'start' => 'avvia',
'restart' => 'riavvia',
'update' => 'aggiorna',
'generate' => 'genera',
'Generate CSR' => 'Genera CSR',
'reread IP' => 'rileggi IP',
'enable autoupdate' => 'abilita aggiornamenti automatici',
'disable autoupdate' => 'disabilita aggiornamenti automatici',
'Adding User' => 'Aggiunta Utente',
'Editing User' => 'Modifica Utente',
'Adding Domain' => 'Aggiunta Dominio',
'Editing Domain' => 'Modifica Dominio',
'Adding DNS Domain' => 'Aggiunta Dominio DNS',
'Editing DNS Domain' => 'Modifica Dominio DNS',
'Adding DNS Record' => 'Aggiunta Record DNS',
'Editing DNS Record' => 'Modifica Record DNS',
'Adding Mail Domain' => 'Aggiunta Dominio Mail',
'Editing Mail Domain' => 'Modifica Dominio Mail',
'Adding Mail Account' => 'Aggiunta Account Mail',
'Editing Mail Account' => 'Modifica Account Mail',
'Adding database' => 'Aggiunta database',
'Editing Cron Job' => 'Modifica Cron Job',
'Adding Cron Job' => 'Aggiunta Cron Job',
'Editing Database' => 'Modifica Database',
'Adding Package' => 'Aggiunta Pacchetto',
'Editing Package' => 'Modifica Pacchetto',
'Adding IP address' => 'Aggiunta Indirizzo IP',
'Editing IP Address' => 'Modifica Indirizzo IP',
'Editing Backup Exclusions' => 'Modifica Esclusioni Backup',
'Generating CSR' => 'Genera CSR',
'Listing' => 'Lista',
'Search Results' => 'Risultati Ricerca',
'active' => 'attivo',
'spnd' => 'sospeso',
'suspended' => 'sospeso',
'running' => 'in esecuzione',
'stopped' => 'fermato',
'outdated' => 'obsoleto',
'updated' => 'aggiornato',
'yes' => 'si',
'no' => 'no',
'none' => 'nessuno',
'pb' => 'pb',
'tb' => 'tb',
'gb' => 'gb',
'mb' => 'mb',
'minute' => 'minuto',
'hour' => 'ora',
'day' => 'giorno',
'days' => 'giorni',
'hours' => 'ore',
'minutes' => 'minuti',
'month' => 'mese',
'package' => 'pacchetto',
'Bandwidth' => 'Banda',
'Disk' => 'Disco',
'Web' => 'Web',
'Mail' => 'Mail',
'Databases' => 'Databases',
'User Directories' => 'Directories Utente',
'Template' => 'Template',
'Web Template' => 'Apache Template',
'Proxy Template' => 'Nginx Template',
'DNS Template' => 'DNS Template',
'Web Domains' => 'Domini Web',
'SSL Domains' => 'Domini SSL',
'Web Aliases' => 'Alias Web',
'per domain' => 'per dominio',
'DNS Domains' => 'Zone DNS',
'DNS domains' => 'Zone DNS',
'DNS records' => 'Record DNS',
'Name Servers' => 'Name Servers',
'Mail Domains' => 'Domini Mail',
'Mail Accounts' => 'Account Mail',
'Cron Jobs' => 'Cron Jobs',
'SSH Access' => 'Accesso SSH',
'IP Addresses' => 'Indirizzi IP',
'Backups' => 'Backups',
'Backup System' => 'Sistema Backup',
'backup exclusions' => 'esclusioni backup',
'template' => 'template',
'SSL Support' => 'Supporto SSL',
'SSL Home Directory' => 'SSL Home',
'Proxy Support' => 'Supporto Nginx',
'Proxy Extensions' => 'Estensioni Nginx',
'Web Statistics' => 'Statistiche Web',
'Additional FTP Account' => 'FTP Addizionali',
'SOA' => 'SOA',
'TTL' => 'TTL',
'Expire' => 'Scadenza',
'Records' => 'Record',
'Catchall email' => 'Catchall email',
'AntiVirus Support' => 'Supporto AntiVirus',
'AntiSpam Support' => 'Supporto AntiSpam',
'DKIM Support' => 'Supporto DKIM',
'Accounts' => 'Account',
'Quota' => 'Quota',
'Autoreply' => 'Autorisposta',
'Forward to' => 'Inoltra a',
'Do not store forwarded mail' => 'Non salvare le email inoltrate',
'database' => 'database',
'User' => 'Utente',
'Host' => 'Host',
'Charset' => 'Charset',
'Min' => 'Minuto',
'Hour' => 'Ora',
'Day' => 'Giorno',
'Month' => 'Mese',
'Day of week' => 'Giorno della settimana',
'local' => 'local',
'Run Time' => 'Tempo di Esecuzione',
'Backup Size' => 'Dimensioni Backup',
'SYS' => 'SYS',
'Domains' => 'Domini',
'Status' => 'Stato',
'shared' => 'condiviso',
'dedicated' => 'dedicato',
'Owner' => 'Proprietario',
'Users' => 'Utenti',
'Load Average' => 'Carico Medio',
'Memory Usage' => 'Uso Memoria',
'HTTPD Usage' => 'Utilizzo HTTPD',
'NGINX Usage' => 'Utilizzo NGINX',
'MySQL Usage on localhost' => 'Utilizzo MySQL su localhost',
'PostgreSQL Usage on localhost' => 'Utilizzo PostgreSQL su localhost',
'Bandwidth Usage eth0' => 'Utilizzo banda su eth0',
'FTP Usage' => 'Utilizzo FTP',
'SSH Usage' => 'Utilizzo SSH',
'reverse proxy' => 'reverse proxy',
'web server' => 'web server',
'dns server' => 'dns server',
'mail server' => 'mail server',
'pop/imap server' => 'pop/imap server',
'email antivirus' => 'email antivirus',
'email antispam' => 'email antispam',
'database server' => 'database server',
'ftp server' => 'ftp server',
'job scheduler' => 'job scheduler',
'CPU' => 'CPU',
'Memory' => 'Memoria',
'Uptime' => 'Uptime',
'core package' => 'pacchetto di sistema',
'php interpreter' => 'interprete php',
'internal web server' => 'web server interno',
'Version' => 'Versione',
'Release' => 'Release',
'Architecture' => 'Architettura',
'Object' => 'Oggetto',
'Owner' => 'Proprietario',
'Username' => 'Username',
'Password' => 'Password',
'Email' => 'Email',
'Package' => 'Pacchetto',
'Language' => 'Lingua',
'First Name' => 'Nome',
'Last Name' => 'Cognome',
'Send login credentials to email address' => 'Invia le credenziali di login per email',
'Default Template' => 'Default Template',
'Default Name Servers' => 'Default Name Servers',
'Domain' => 'Dominio',
'DNS Support' => 'Supporto DNS',
'Mail Support' => 'Supporto Mail',
'Advanced options' => 'Opzioni Avanzate',
'Aliases' => 'Alias Dominio',
'SSL Certificate' => 'Certificato SSL',
'SSL Key' => 'SSL Key',
'SSL Certificate Authority / Intermediate' => 'SSL Certificate Authority / Intermediate',
'SSL CSR' => 'SSL CSR',
'optional' => 'opzionale',
'internal' => 'interno',
'Statistics Authorization' => 'Autorizzazione Statistiche',
'Statistics Auth' => 'Statistiche Auth',
'Account' => 'Account',
'Prefix will be automaticaly added to username' => 'Il prefisso %s verrà automatiamente aggiunto all\'username',
'Send FTP credentials to email' => 'Invia le credenziali FTP per email',
'Expiration Date' => 'Data di scadenza',
'YYYY-MM-DD' => 'YYYY-MM-DD',
'Name servers' => 'Name servers',
'Record' => 'Record',
'IP or Value' => 'IP o Valore',
'Priority' => 'Priorità',
'Record Number' => 'Numero Record',
'in megabytes' => 'in megabytes',
'Message' => 'Messaggio',
'use local-part' => 'usa local-part',
'one or more email addresses' => 'uno o più indirizzi email',
'Prefix will be automaticaly added to database name and database user' => 'Il prefisso %s verrà automatiamente aggiunto al nome e all\'utente del database',
'Database' => 'Database',
'Type' => 'Tipo',
'Minute' => 'Minuto',
'Command' => 'Comando',
'Package Name' => 'Nome Pacchetto',
'Netmask' => 'Netmask',
'Interface' => 'Interfaccia',
'Shared' => 'Condiviso',
'Assigned user' => 'Utente Assegnato',
'Assigned domain' => 'Dominio Assegnato',
'NAT IP association' => 'Associazione IP NAT',
'shell' => 'shell',
'web domains' => 'domini web',
'web aliases' => 'aliases web',
'dns records' => 'record dns',
'mail domains' => 'domini mail',
'mail accounts' => 'account mail',
'accounts' => 'account',
'databases' => 'database',
'cron jobs' => 'cron jobs',
'backups' => 'backups',
'quota' => 'quota',
'day of week' => 'giorno della settimanta',
'cmd' => 'cmd',
'users' => 'users',
'domains' => 'domini',
'aliases' => 'alias',
'records' => 'record',
'jobs' => 'jobs',
'username' => 'username',
'password' => 'password',
'type' => 'tipo',
'charset' => 'charset',
'domain' => 'dominio',
'ip' => 'ip',
'ip address' => 'indirizzo ip',
'IP address' => 'indirizzo IP',
'netmask' => 'netmask',
'interface' => 'interfaccia',
'assigned user' => 'utente assegnato',
'ns1' => 'ns1',
'ns2' => 'ns2',
'user' => 'user',
'email' => 'email',
'first name' => 'nome',
'last name' => 'cognome',
'account' => 'account',
'ssl certificate' => 'certificato ssl',
'ssl key' => 'key ssl',
'stats user password' => 'stats user password',
'stats username' => 'stats username',
'stats password' => 'stats password',
'ftp user password' => 'ftp user password',
'ftp user' => 'ftp user',
'Last 70 lines of %s.%s.log' => 'Ultime 70 righe di %s.%s.log',
'Download AccessLog' => 'Download AccessLog',
'Download ErrorLog' => 'Download ErrorLog',
'Country' => 'Paese',
'2 letter code' => 'codice di 2 lettere',
'State / Province' => 'Stato / Provincia',
'City / Locality' => 'Città / Località',
'Organization' => 'Organizzazione',
'1 account' => '1 account',
'%s accounts' => '%s account',
'1 domain' => '1 dominio',
'%s domains' => '%s domini',
'1 record' => '1 record',
'%s records' => '%s record',
'1 mail account' => '1 account mail',
'%s mail accounts' => '%s account mail',
'1 database' => '1 database',
'%s databases' => '%s databases',
'1 cron job' => '1 cron job',
'%s cron jobs' => '%s cron jobs',
'1 archive' => '1 archivio',
'%s archives' => '%s archivi',
'1 package' => '1 pacchetto',
'%s packages' => '%s pacchetti',
'1 IP address' => '1 indirizzo IP',
'%s IP addresses' => '%s indirizzi IP',
'1 month' => '1 mese',
'%s months' => '%s mesi',
'1 log record' => '1 log record',
'%s log records' => '%s log record',
'1 object' => '1 oggetto',
'%s objects' => '%s oggetti',
'no exclusions' => 'senza esclusioni',
'USER_CREATED_OK' => 'L\'utente <a href="/edit/user/?user=%s"><b>%s</b></a> è stato creato con successo.',
'WEB_DOMAIN_CREATED_OK' => 'Il dominio <a href="/edit/web/?domain=%s"><b>%s</b></a> è stato creato con successo.',
'DNS_DOMAIN_CREATED_OK' => 'Il dominio DNS <a href="/list/dns/?domain=%s"><b>%s</b></a> è stato creato con successo.',
'DNS_RECORD_CREATED_OK' => 'Il record <b>%s.%s</b> è stato creato con successo.',
'MAIL_DOMAIN_CREATED_OK' => 'Dominio Mail <a href="/list/mail/?domain=%s"><b>%s</b></a> è stato creato con successo.',
'MAIL_ACCOUNT_CREATED_OK' => 'L\'account mail <a href="/edit/mail/?account=%s&domain=%s"><b>%s@%s</b></a> è stato creato con successo.',
'DATABASE_CREATED_OK' => 'Il database <a href="/edit/db/?database=%s"><b>%s</b></a> è stato creato con successo.',
'CRON_CREATED_OK' => 'Il cron job è stato creato con successo.',
'IP_CREATED_OK' => 'L\'indirizzo IP <a href="/edit/ip/?ip=%s"><b>%s</b></a> è stato creato con successo.',
'PACKAGE_CREATED_OK' => 'Il pacchetto <a href="/edit/package/?package=%s"><b>%s</b></a> è stato creato con successo.',
'SSL_GENERATED_OK' => 'Il certificato è stato generato con successo.',
'Autoupdate has been successfully enabled' => 'Gli aggiornamenti automatici sono stati abilitati',
'Autoupdate has been successfully disabled' => 'Gli aggiornamenti automatici sono stati disabilitati',
'Changes has been saved.' => 'I cambiamenti sono stati salvati.',
'Confirmation' => 'Conferma',
'DELETE_USER_CONFIRMATION' => 'Sei sicuro di voler cancellare l\'utente %s?',
'SUSPEND_USER_CONFIRMATION' => 'Sei sicuro di voler disabilitare l\'utente %s?',
'UNSUSPEND_USER_CONFIRMATION' => 'Sei sicuro di voler riabilitare l\'utente %s?',
'DELETE_DOMAIN_CONFIRMATION' => 'Sei sicuro di voler cancellare il dominio %s?',
'SUSPEND_DOMAIN_CONFIRMATION' => 'Sei sicuro di voler disabilitare il dominio %s?',
'UNSUSPEND_DOMAIN_CONFIRMATION' => 'Sei sicuro di voler riabilitare il dominio %s?',
'DELETE_RECORD_CONFIRMATION' => 'Sei sicuro di voler cancellare il record %s?',
'SUSPEND_RECORD_CONFIRMATION' => 'Sei sicuro di voler disabilitare il record %s?',
'UNSUSPEND_RECORD_CONFIRMATION' => 'Sei sicuro di voler riabilitare il record %s?',
'DELETE_MAIL_ACCOUNT_CONFIRMATION' => 'Sei sicuro di voler cancellare %s?',
'SUSPEND_MAIL_ACCOUNT_CONFIRMATION' => 'Sei sicuro di voler disabilitare %s?',
'UNSUSPEND_MAIL_ACCOUNT_CONFIRMATION' => 'Sei sicuro di voler riabilitare %s?',
'DELETE_DATABASE_CONFIRMATION' => 'Sei sicuro di voler cancellare il database %s?',
'SUSPEND_DATABASE_CONFIRMATION' => 'Sei sicuro di voler disabilitare il database %s?',
'UNSUSPEND_DATABASE_CONFIRMATION' => 'Sei sicuro di voler riabilitare il database %s?',
'DELETE_CRON_CONFIRMATION' => 'Sei sicuro di voler cancellare il cron job?',
'SUSPEND_CRON_CONFIRMATION' => 'Sei sicuro di voler disabilitare il cron job?',
'UNSUSPEND_CRON_CONFIRMATION' => 'Sei sicuro di voler riabilitare il cron job?',
'DELETE_BACKUP_CONFIRMATION' => 'Sei sicuro di voler cancellare il backup %s?',
'DELETE_EXCLUSION_CONFIRMATION' => 'Sei sicuro di voler cancellare l\'esclusione %s?',
'DELETE_PACKAGE_CONFIRMATION' => 'Sei sicuro di voler cancellare il pacchetto %s?',
'DELETE_IP_CONFIRMATION' => 'Sei sicuro di voler l\'indirizoz IP %s?',
'RESTART_CONFIRMATION' => 'Sei sicuro di voler riavviare %s?',
'Welcome' => 'Benvenuto',
'LOGGED_IN_AS' => 'Connesso come l\'utente %s',
'Error' => 'Errore',
'Invalid username or password' => 'Username o password non validi',
'Invalid username or code' => 'Esername o codice non validi',
'Passwords not match' => 'Le passwords non coincidono',
'Please enter valid email address.' => 'Inserisci un\'indirizzo email valido.',
'Field "%s" can not be blank.' => 'Il campo "%s" non può essere lasciato vuoto.',
'Password is too short.' => 'La password è troppo corta (minimo 6 caratteri)',
'Error code:' => 'Codice errore: %s',
'SERVICE_ACTION_FAILED' => '"%s" "%s" fallita',
'IP address is in use' => 'L\'indirizzo IP è già in uso',
'BACKUP_SCHEDULED' => 'L\'operazione è stata aggiunta alla coda. Riceverai una notifica via email quando il tuo backup sarà pronto per il download.',
'BACKUP_EXISTS' => 'È già in corso la creazione di un backup. Perfavore attendi che il backup finisca.',
'RESTORE_SCHEDULED' => 'L\'operazione è stata aggiunta alla coda. Riceverai una notifica via email quando il tuo backup sarà pronto per il download.',
'RESTORE_EXISTS' => 'È già in corso un\'oprazione di ripristino. Attendi che finisca prima di rilanciarla nuovamento.',
'WEB_EXCLUSIONS' => "Scrivi un nome di dominio per riga. Per escludere tutti i domini usa *. Per escludere directory specifiche usa il formato: domain.com:public_html/cache:public_html/tmp",
'DNS_EXCLUSIONS' => "Scrivi un nome di dominio per riga. Per escludere tutti i domini usa *",
'MAIL_EXCLUSIONS' => "Scrivi un nome di dominio per riga. Per escludere tutti i domini usa *. Per escludere account specifici usare il formato: domain.com:info:support:postmaster",
'DB_EXCLUSIONS' => "Scrivi un nome completo di database per riga. Per escludere tutti i database usa *",
'CRON_EXCLUSIONS' => "Per escludere tutti i cron job usa *",
'USER_EXCLUSIONS' => "Scrivi un nome di directory per riga. Per escludere tutte le directory usa *",
'Welcome to Vesta Control Panel' => 'Benvenuto nel Vesta Control Panel',
'MAIL_FROM' => 'Vesta Control Panel <noreply@%s>',
'GREETINGS_GORDON_FREEMAN' => "Ciao, %s %s,\n",
'GREETINGS' => "Ciao,\n",
'ACCOUNT_READY' => "Il tuo account è stato creato ed è pronto per l\'utilizzo.\n\nhttps://%s/login/\nUsername: %s\nPassword: %s\n\n--\nVesta Control Panel\n",
'FTP login credentials' => 'Credenziali login FTP',
'FTP_ACCOUNT_READY' => "L\'account FTP è stato creato ed è pronto per l\'uso.\n\nHostname: %s\nUsername: %s_%s\nPassword: %s\n\n--\nVesta Control Panel\n",
'Database Credentials' => 'Credenziali Database',
'DATABASE_READY' => "Il database è stato creato con successo.\n\nDatabase: %s\nUser: %s\nPassword: %s\n%s\n\n--\nVesta Control Panel\n",
'forgot password' => 'password dimenticata',
'Confirm' => 'Conferma',
'New Password' => 'Nuova Password',
'Confirm Password' => 'Conferma Password',
'Reset' => 'Reset',
'Reset Code' => 'Codice Reset',
'RESET_NOTICE' => '',
'RESET_CODE_SENT' => 'Il codice di reset per la tua password ti è stato inviato per email<br>',
'MAIL_RESET_SUBJECT' => 'Password Reset per %s',
'PASSWORD_RESET_REQUEST' => "Per fare il reset della password per il pannello di controllo clicca sul link:\nhttps://%s/reset/?action=confirm&user=%s&code=%s\n\nAlternativamente puoi andare su https://%s/reset/?action=code&user=%s e inserire questo codice di reset:\n%s\n\nSe non hai richiesto il reset della tua password, ignora questa email.\n\n--\nVesta Control Panel\n",
);

View file

@ -38,6 +38,7 @@ $LANG['nl'] = array(
'Restore All' => 'Herstel alles', 'Restore All' => 'Herstel alles',
'Add Package' => 'Pakket toevoegen', 'Add Package' => 'Pakket toevoegen',
'Add IP' => 'IP toevoegen', 'Add IP' => 'IP toevoegen',
'Add one more FTP Account' => 'Extra FTP-account toevoegen',
'Search' => 'Zoeken', 'Search' => 'Zoeken',
'Overall Statistics' => 'Globale statistieken', 'Overall Statistics' => 'Globale statistieken',
'Daily' => 'Dagelijks', 'Daily' => 'Dagelijks',
@ -393,6 +394,7 @@ $LANG['nl'] = array(
'DELETE_EXCLUSION_CONFIRMATION' => 'Weet u zeker dat u uitsluitingen %s wilt verwijderen?', 'DELETE_EXCLUSION_CONFIRMATION' => 'Weet u zeker dat u uitsluitingen %s wilt verwijderen?',
'DELETE_PACKAGE_CONFIRMATION' => 'Weet u zeker dat u het pakket %s wilt verwijderen?', 'DELETE_PACKAGE_CONFIRMATION' => 'Weet u zeker dat u het pakket %s wilt verwijderen?',
'DELETE_IP_CONFIRMATION' => 'Weet u zeker dat u het IP-adres %s wilt verwijderen?', 'DELETE_IP_CONFIRMATION' => 'Weet u zeker dat u het IP-adres %s wilt verwijderen?',
'RESTART_CONFIRMATION' => 'Weet u zeker dat %s wilt herstarten?',
'Welcome' => 'Welkom', 'Welcome' => 'Welkom',
'LOGGED_IN_AS' => 'Ingelogd als gebruiker %s', 'LOGGED_IN_AS' => 'Ingelogd als gebruiker %s',
'Error' => 'Fout', 'Error' => 'Fout',

View file

@ -39,6 +39,7 @@ $LANG['no'] = array(
'Add Package' => 'Legg til Pakke', 'Add Package' => 'Legg til Pakke',
'Add IP' => 'Legg til IP', 'Add IP' => 'Legg til IP',
'Search' => 'Søk', 'Search' => 'Søk',
'Add one more FTP Account' => 'Legg til én FTP Konto',
'Overall Statistics' => 'Samlede Statistikker', 'Overall Statistics' => 'Samlede Statistikker',
'Daily' => 'Daglig', 'Daily' => 'Daglig',
'Weekly' => 'Ukentlig', 'Weekly' => 'Ukentlig',
@ -330,7 +331,7 @@ $LANG['no'] = array(
'City / Locality' => 'By / Beliggenhet', 'City / Locality' => 'By / Beliggenhet',
'Organization' => 'Organisasjon', 'Organization' => 'Organisasjon',
'1 account' => '1 konto', '1 account' => '1 konto',
'%s accounts' => '%s kontoer', '%s accounts' => '%s kontoer',
'1 domain' => '1 domene', '1 domain' => '1 domene',
'%s domains' => '%s domener', '%s domains' => '%s domener',
@ -393,6 +394,7 @@ $LANG['no'] = array(
'DELETE_EXCLUSION_CONFIRMATION' => 'Er du sikker på at du vil slette %s eksklusjon?', 'DELETE_EXCLUSION_CONFIRMATION' => 'Er du sikker på at du vil slette %s eksklusjon?',
'DELETE_PACKAGE_CONFIRMATION' => 'Er du sikker på at du vil slette pakken %s?', 'DELETE_PACKAGE_CONFIRMATION' => 'Er du sikker på at du vil slette pakken %s?',
'DELETE_IP_CONFIRMATION' => 'Er du sikker på at du vil slette IP Addressen %s?', 'DELETE_IP_CONFIRMATION' => 'Er du sikker på at du vil slette IP Addressen %s?',
'RESTART_CONFIRMATION' => 'Er du sikker på at du vil omstarte %s?',
'Welcome' => 'Velkommen', 'Welcome' => 'Velkommen',
'LOGGED_IN_AS' => 'Logget inn som %s', 'LOGGED_IN_AS' => 'Logget inn som %s',
'Error' => 'Feil', 'Error' => 'Feil',

View file

@ -38,6 +38,7 @@ $LANG['pt'] = array(
'Add Package' => 'Adicionar Pacote', 'Add Package' => 'Adicionar Pacote',
'Add IP' => 'Adicionar IP', 'Add IP' => 'Adicionar IP',
'Search' => 'Pesquisar', 'Search' => 'Pesquisar',
'Add one more FTP Account' => 'Adicionar mais uma conta FTP',
'Overall Statistics' => 'Estatísticas Gerais', 'Overall Statistics' => 'Estatísticas Gerais',
'Daily' => 'Diário', 'Daily' => 'Diário',
'Weekly' => 'Semanal', 'Weekly' => 'Semanal',
@ -392,6 +393,7 @@ $LANG['pt'] = array(
'DELETE_EXCLUSION_CONFIRMATION' => 'Tem certeza que deseja deletar o exclusões %s?', 'DELETE_EXCLUSION_CONFIRMATION' => 'Tem certeza que deseja deletar o exclusões %s?',
'DELETE_PACKAGE_CONFIRMATION' => 'Tem certeza que deseja deletar o pacote %s?', 'DELETE_PACKAGE_CONFIRMATION' => 'Tem certeza que deseja deletar o pacote %s?',
'DELETE_IP_CONFIRMATION' => 'Tem certeza que deseja deletar o endereço IP %s?', 'DELETE_IP_CONFIRMATION' => 'Tem certeza que deseja deletar o endereço IP %s?',
'RESTART_CONFIRMATION' => 'Tem certeza que deseja reiniciar %s?',
'Welcome' => 'Bem Vindo', 'Welcome' => 'Bem Vindo',
'LOGGED_IN_AS' => 'Entrar como o usuário %s', 'LOGGED_IN_AS' => 'Entrar como o usuário %s',
'Error' => 'Erro', 'Error' => 'Erro',

View file

@ -40,6 +40,7 @@ $LANG['ro'] = array(
'Add Package' => 'Adăugare pachet', 'Add Package' => 'Adăugare pachet',
'Add IP' => 'Adăugare IP', 'Add IP' => 'Adăugare IP',
'Search' => 'Сăutare', 'Search' => 'Сăutare',
'Add one more FTP Account' => 'Inca un FTP count',
'Overall Statistics' => 'Statistică rezumativă', 'Overall Statistics' => 'Statistică rezumativă',
'Daily' => 'Zilnic', 'Daily' => 'Zilnic',
'Weekly' => 'Săptămânal', 'Weekly' => 'Săptămânal',
@ -394,6 +395,7 @@ $LANG['ro'] = array(
'DELETE_EXCLUSION_CONFIRMATION' => 'Ești sigur că dorești să ștergi excludere %s?', 'DELETE_EXCLUSION_CONFIRMATION' => 'Ești sigur că dorești să ștergi excludere %s?',
'DELETE_PACKAGE_CONFIRMATION' => 'Ești sigur că dorești să ștergi %s', 'DELETE_PACKAGE_CONFIRMATION' => 'Ești sigur că dorești să ștergi %s',
'DELETE_IP_CONFIRMATION' => 'Ești sigur că dorești să șterge IP %s?', 'DELETE_IP_CONFIRMATION' => 'Ești sigur că dorești să șterge IP %s?',
'RESTART_CONFIRMATION' => 'Ești sigur că dorești să restartezi %s?',
'Welcome' => 'Bun venit', 'Welcome' => 'Bun venit',
'LOGGED_IN_AS' => 'Ai intrat ca utilizator %s', 'LOGGED_IN_AS' => 'Ai intrat ca utilizator %s',
'Error' => 'Eroare', 'Error' => 'Eroare',

View file

@ -40,6 +40,7 @@ $LANG['ru'] = array(
'Add Package' => 'Добавить пакет', 'Add Package' => 'Добавить пакет',
'Add IP' => 'Добавить IP', 'Add IP' => 'Добавить IP',
'Search' => 'Поиск', 'Search' => 'Поиск',
'Add one more FTP Account' => 'Добавить еще один FTP аккаунт',
'Overall Statistics' => 'Сводная статистика', 'Overall Statistics' => 'Сводная статистика',
'Daily' => 'Ежедневые', 'Daily' => 'Ежедневые',
'Weekly' => 'Еженедельные', 'Weekly' => 'Еженедельные',
@ -394,6 +395,7 @@ $LANG['ru'] = array(
'DELETE_EXCLUSION_CONFIRMATION' => 'Вы уверены, что хотите удалить исключение %s?', 'DELETE_EXCLUSION_CONFIRMATION' => 'Вы уверены, что хотите удалить исключение %s?',
'DELETE_PACKAGE_CONFIRMATION' => 'Вы уверены, что хотите удалить пакет %s?', 'DELETE_PACKAGE_CONFIRMATION' => 'Вы уверены, что хотите удалить пакет %s?',
'DELETE_IP_CONFIRMATION' => 'Вы уверены, что хотите удалить IP адрес %s?', 'DELETE_IP_CONFIRMATION' => 'Вы уверены, что хотите удалить IP адрес %s?',
'RESTART_CONFIRMATION' => 'Вы уверены, что хотите перезагрузить %s?',
'Welcome' => 'Добро пожаловать', 'Welcome' => 'Добро пожаловать',
'LOGGED_IN_AS' => 'Вы вошли как пользователь %s', 'LOGGED_IN_AS' => 'Вы вошли как пользователь %s',
'Error' => 'Ошибка', 'Error' => 'Ошибка',

View file

@ -39,6 +39,7 @@ $LANG['ua'] = array(
'Restore All' => 'Відновити все', 'Restore All' => 'Відновити все',
'Add Package' => 'Додати пакет', 'Add Package' => 'Додати пакет',
'Add IP' => 'Додати IP', 'Add IP' => 'Додати IP',
'Add one more FTP Account' => 'Додати ще один FTP акаунт',
'Search' => 'Пошук', 'Search' => 'Пошук',
'Overall Statistics' => 'Загальна статистика', 'Overall Statistics' => 'Загальна статистика',
'Daily' => 'Щоденні', 'Daily' => 'Щоденні',
@ -394,6 +395,7 @@ $LANG['ua'] = array(
'DELETE_EXCLUSION_CONFIRMATION' => 'Ви впевнені, що хочете видалити вийняток %s?', 'DELETE_EXCLUSION_CONFIRMATION' => 'Ви впевнені, що хочете видалити вийняток %s?',
'DELETE_PACKAGE_CONFIRMATION' => 'Ви впевнені, що хочете видалити пакет %s?', 'DELETE_PACKAGE_CONFIRMATION' => 'Ви впевнені, що хочете видалити пакет %s?',
'DELETE_IP_CONFIRMATION' => 'Ви впевнені, що хочете видалити IP адресу %s?', 'DELETE_IP_CONFIRMATION' => 'Ви впевнені, що хочете видалити IP адресу %s?',
'RESTART_CONFIRMATION' => 'Ви впевнені, що хочете перезапустити %s?',
'Welcome' => 'Ласкаво просимо', 'Welcome' => 'Ласкаво просимо',
'LOGGED_IN_AS' => 'Ви увійшли як користувач %s', 'LOGGED_IN_AS' => 'Ви увійшли як користувач %s',
'Error' => 'Помилка', 'Error' => 'Помилка',

View file

@ -151,12 +151,12 @@ function humanize_time($usage) {
} }
function humanize_usage($usage) { function humanize_usage($usage) {
if ( $usage > 1000 ) { if ( $usage > 1024 ) {
$usage = $usage / 1000; $usage = $usage / 1024;
if ( $usage > 1000 ) { if ( $usage > 1024 ) {
$usage = $usage / 1000 ; $usage = $usage / 1024 ;
if ( $usage > 1000 ) { if ( $usage > 1024 ) {
$usage = $usage / 1000 ; $usage = $usage / 1024 ;
$usage = number_format($usage, 2); $usage = number_format($usage, 2);
$usage = $usage."".__('pb'); $usage = $usage."".__('pb');
} else { } else {

View file

@ -102,7 +102,7 @@ VE.helpers.createConfirmationDialog = function(elm, dialog_title, confirmed_loca
$(this).dialog("destroy"); $(this).dialog("destroy");
}, },
buttons: { buttons: {
"Ok": function(event, ui) { "OK": function(event, ui) {
location.href = confirmed_location_url; location.href = confirmed_location_url;
}, },
"Cancel": function() { "Cancel": function() {

View file

@ -1,37 +1,158 @@
//
//
// Updates ftp username dynamically, showing its prefix
App.Actions.WEB.update_ftp_username_hint = function(elm, hint) { App.Actions.WEB.update_ftp_username_hint = function(elm, hint) {
if (hint.trim() == '') { if (hint.trim() == '') {
$(elm).parent().find('.hint').html(''); $(elm).parent().find('.hint').html('');
} }
// remove prefix from value in order to eliminate duplicates
hint = hint.replace(/[^\w\d]/gi, '');
if (hint.indexOf(GLOBAL.FTP_USER_PREFIX) == 0) { if (hint.indexOf(GLOBAL.FTP_USER_PREFIX) == 0) {
hint = hint.slice(GLOBAL.FTP_USER_PREFIX.length, hint.length); hint = hint.slice(GLOBAL.FTP_USER_PREFIX.length, hint.length);
} }
$(elm).parent().find('.v-ftp-user').val(hint);
$(elm).parent().find('.hint').text(GLOBAL.FTP_USER_PREFIX + hint); $(elm).parent().find('.hint').text(GLOBAL.FTP_USER_PREFIX + hint);
} }
//
// listener that triggers ftp user hint updating
App.Listeners.WEB.keypress_ftp_username = function() { App.Listeners.WEB.keypress_ftp_username = function() {
var ref = $('input[name="v_ftp_user"]'); var ftp_user_inputs = $('.v-ftp-user');
var current_val = ref.val(); $.each(ftp_user_inputs, function(i, ref) {
if (current_val.trim() != '') { var ref = $(ref);
App.Actions.DB.update_ftp_username_hint(ref, current_val); var current_val = ref.val();
} if (current_val.trim() != '') {
App.Actions.WEB.update_ftp_username_hint(ref, current_val);
}
ref.bind('keypress input', function(evt) { ref.bind('keypress', function(evt) {
clearTimeout(window.frp_usr_tmt);
window.frp_usr_tmt = setTimeout(function() {
var elm = $(evt.target);
App.Actions.WEB.update_ftp_username_hint(elm, $(elm).val());
}, 100);
});
});
}
App.Listeners.WEB.keypress_domain_name = function() {
$('#v_domain').bind('keypress', function(evt) {
clearTimeout(window.frp_usr_tmt); clearTimeout(window.frp_usr_tmt);
window.frp_usr_tmt = setTimeout(function() { window.frp_usr_tmt = setTimeout(function() {
var elm = $(evt.target); //var elm = $(evt.target);
App.Actions.WEB.update_ftp_username_hint(elm, $(elm).val()); //App.Actions.WEB.update_ftp_username_hint(elm, $(elm).val());
var domain = $('.ftp-path-prefix').text(GLOBAL.FTP_USER_PREPATH + '/' + $('#v_domain').val());
}, 100); }, 100);
}); });
} }
//
//
App.Actions.WEB.update_ftp_path_hint = function(elm, hint) {
if (hint.trim() == '') {
$(elm).parent().find('.v-ftp-path-hint').html('');
}
if (hint[0] != '/') {
hint = '/' + hint;
}
hint = hint.replace(/\/(\/+)/g, '/');
$(elm).parent().find('.v-ftp-path-hint').text(hint);
}
App.Listeners.WEB.keypress_ftp_path = function() {
var ftp_path_inputs = $('.v-ftp-path');
$.each(ftp_path_inputs, function(i, ref) {
var ref = $(ref);
var current_val = ref.val();
if (current_val.trim() != '') {
App.Actions.WEB.update_ftp_path_hint(ref, current_val);
}
ref.bind('keypress', function(evt) {
clearTimeout(window.frp_usr_tmt);
window.frp_usr_tmt = setTimeout(function() {
var elm = $(evt.target);
App.Actions.WEB.update_ftp_path_hint(elm, $(elm).val());
}, 100);
});
});
}
//
//
App.Actions.WEB.add_ftp_user_form = function() {
var ref = $('#templates').find('.ftptable').clone(true);
var index = $('.data-col2 .ftptable').length + 1;
ref.find('input').each(function(i, elm) {
var attr_value = $(elm).attr('name').replace('%INDEX%', index);
$(elm).attr('name', attr_value);
});
ref.find('.ftp-user-number').text(index);
$('.data-col2 .ftptable:last').after(ref);
var index = 1;
$('.data-col2 .ftp-user-number:visible').each(function(i, o) {
$(o).text(index);
index += 1;
});
}
App.Actions.WEB.remove_ftp_user = function(elm) {
var ref = $(elm).parents('.ftptable');
ref.remove();
var index = 1;
$('.data-col2 .ftp-user-number:visible').each(function(i, o) {
$(o).text(index);
index += 1;
});
if ($('.ftptable-nrm:visible').length == 0) {
$('.v-add-new-user').hide();
$('input[name="v_ftp"]').attr('checked', false);
}
}
App.Actions.WEB.toggle_additional_ftp_accounts = function(elm) {
if ($(elm).attr('checked')) {
$('.ftptable-nrm, .v-add-new-user, .add-new-ftp-user-button').show();
$('.ftptable-nrm').each(function(i, elm) {
var login = $(elm).find('.v-ftp-user');
if (login.val().trim() != '') {
$(elm).find('.v-ftp-user-deleted').val(0);
}
});
}
else {
$('.ftptable-nrm, .v-add-new-user, .add-new-ftp-user-button').hide();
$('.ftptable-nrm').each(function(i, elm) {
var login = $(elm).find('.v-ftp-user');
if (login.val().trim() != '') {
$(elm).find('.v-ftp-user-deleted').val(1);
}
});
}
if ($('.ftptable-nrm:visible').length == 0) {
var ref = $('#templates').find('.ftptable').clone(true);
var index = $('.data-col2 .ftptable').length + 1;
ref.find('input').each(function(i, elm) {
var attr_value = $(elm).attr('name').replace('%INDEX%', index);
$(elm).attr('name', attr_value);
});
ref.find('.ftp-user-number').text(index);
$('.v-add-new-user').parent('tr').prev().find('td').html(ref);
}
}
// //
// Page entry point // Page entry point
// Trigger listeners
App.Listeners.WEB.keypress_ftp_username(); App.Listeners.WEB.keypress_ftp_username();
App.Listeners.WEB.keypress_ftp_path();
App.Listeners.WEB.keypress_domain_name();

View file

@ -2,28 +2,137 @@ App.Actions.WEB.update_ftp_username_hint = function(elm, hint) {
if (hint.trim() == '') { if (hint.trim() == '') {
$(elm).parent().find('.hint').html(''); $(elm).parent().find('.hint').html('');
} }
hint = hint.replace(/[^\w\d]/gi, '');
if (hint.indexOf(GLOBAL.FTP_USER_PREFIX) == 0) { if (hint.indexOf(GLOBAL.FTP_USER_PREFIX) == 0) {
hint = hint.slice(GLOBAL.FTP_USER_PREFIX.length, hint.length); hint = hint.slice(GLOBAL.FTP_USER_PREFIX.length, hint.length);
} }
$(elm).parent().find('.v-ftp-user').val(hint);
$(elm).parent().find('.hint').text(GLOBAL.FTP_USER_PREFIX + hint); $(elm).parent().find('.hint').text(GLOBAL.FTP_USER_PREFIX + hint);
} }
App.Listeners.WEB.keypress_ftp_username = function() { App.Listeners.WEB.keypress_ftp_username = function() {
var ref = $('input[name="v_ftp_user"]'); var ftp_user_inputs = $('.v-ftp-user');
var current_val = ref.val(); $.each(ftp_user_inputs, function(i, ref) {
if (current_val.trim() != '') { var ref = $(ref);
App.Actions.DB.update_ftp_username_hint(ref, current_val); var current_val = ref.val();
if (current_val.trim() != '') {
App.Actions.WEB.update_ftp_username_hint(ref, current_val);
}
ref.bind('keypress', function(evt) {
clearTimeout(window.frp_usr_tmt);
window.frp_usr_tmt = setTimeout(function() {
var elm = $(evt.target);
App.Actions.WEB.update_ftp_username_hint(elm, $(elm).val());
}, 100);
});
});
}
//
//
App.Actions.WEB.update_ftp_path_hint = function(elm, hint) {
if (hint.trim() == '') {
$(elm).parent().find('.v-ftp-path-hint').html('');
} }
ref.bind('keypress', function(evt) { if (hint[0] != '/') {
clearTimeout(window.frp_usr_tmt); hint = '/' + hint;
window.frp_usr_tmt = setTimeout(function() { }
var elm = $(evt.target);
App.Actions.WEB.update_ftp_username_hint(elm, $(elm).val()); hint = hint.replace(/\/(\/+)/g, '/');
}, 100);
$(elm).parent().find('.v-ftp-path-hint').text(hint);
}
App.Listeners.WEB.keypress_ftp_path = function() {
var ftp_path_inputs = $('.v-ftp-path');
$.each(ftp_path_inputs, function(i, ref) {
var ref = $(ref);
var current_val = ref.val();
if (current_val.trim() != '') {
App.Actions.WEB.update_ftp_path_hint(ref, current_val);
}
ref.bind('keypress', function(evt) {
clearTimeout(window.frp_usr_tmt);
window.frp_usr_tmt = setTimeout(function() {
var elm = $(evt.target);
App.Actions.WEB.update_ftp_path_hint(elm, $(elm).val());
}, 100);
});
}); });
} }
//
//
App.Actions.WEB.add_ftp_user_form = function() {
var ref = $('#templates').find('.ftptable').clone(true);
var index = $('.data-col2 .ftptable').length + 1;
ref.find('input').each(function(i, elm) {
var attr_value = $(elm).attr('name').replace('%INDEX%', index);
$(elm).attr('name', attr_value);
});
ref.find('.ftp-user-number').text(index);
$('.data-col2 .ftptable:last').after(ref);
var index = 1;
$('.data-col2 .ftp-user-number:visible').each(function(i, o) {
$(o).text(index);
index += 1;
});
}
App.Actions.WEB.remove_ftp_user = function(elm) {
var ref = $(elm).parents('.ftptable');
ref.find('.v-ftp-user-deleted').val('1');
if (ref.find('.v-ftp-user-is-new').val() == 1) {
ref.remove();
return true;
}
ref.removeClass('ftptable-nrm');
ref.hide();
var index = 1;
$('.data-col2 .ftp-user-number:visible').each(function(i, o) {
$(o).text(index);
index += 1;
});
if ($('.ftptable-nrm:visible').length == 0) {
$('.add-new-ftp-user-button').hide();
$('input[name="v_ftp"]').attr('checked', false);
}
}
App.Actions.WEB.toggle_additional_ftp_accounts = function(elm) {
if ($(elm).attr('checked')) {
$('.ftptable-nrm, .v-add-new-user, .add-new-ftp-user-button').show();
$('.ftptable-nrm').each(function(i, elm) {
var login = $(elm).find('.v-ftp-user');
if (login.val().trim() != '') {
$(elm).find('.v-ftp-user-deleted').val(0);
}
});
}
else {
$('.ftptable-nrm, .v-add-new-user, .add-new-ftp-user-button').hide();
$('.ftptable-nrm').each(function(i, elm) {
var login = $(elm).find('.v-ftp-user');
if (login.val().trim() != '') {
$(elm).find('.v-ftp-user-deleted').val(1);
}
});
}
}
// //
// Page entry point // Page entry point
App.Listeners.WEB.keypress_ftp_username(); App.Listeners.WEB.keypress_ftp_username();
App.Listeners.WEB.keypress_ftp_path();

View file

@ -66,7 +66,7 @@ var Templator = function()
{ {
'undefined' == typeof App.Templates._indexes[key] ? App.Templates._indexes[key] = {} : false; 'undefined' == typeof App.Templates._indexes[key] ? App.Templates._indexes[key] = {} : false;
'undefined' == typeof App.Templates._indexes[key][ref_key] ? 'undefined' == typeof App.Templates._indexes[key][ref_key] ?
App.Templates._indexes[key][ref_key] = {} : false; App.Templates._indexes[key][ref_key] = {} : false;
jQuery(tpl).each(function(index, o) { jQuery(tpl).each(function(index, o) {
if (':' == o.charAt(0)) { if (':' == o.charAt(0)) {
@ -84,8 +84,8 @@ var Templator = function()
Templator.getTemplate = function(ns, key){ Templator.getTemplate = function(ns, key){
return [ return [
App.Templates._indexes[ns][key], App.Templates._indexes[ns][key],
App.Templates.html[ns][key].slice(0) App.Templates.html[ns][key].slice(0)
]; ];
} }
// init templator // init templator

View file

@ -25,7 +25,7 @@ include($_SERVER['DOCUMENT_ROOT'].'/templates/header.html');
top_panel($user,$TAB); top_panel($user,$TAB);
$lang = 'ru_RU.utf8'; $lang = 'ru_RU.utf8';
setlocale(LC_ALL, $lang); //setlocale(LC_ALL, $lang);
// Data // Data
if ($_SESSION['user'] == 'admin') { if ($_SESSION['user'] == 'admin') {

View file

@ -34,7 +34,7 @@
<td class="data-dotted"> <td class="data-dotted">
<table class="data-col2" width="600px"> <table class="data-col2" width="600px">
<tr> <tr>
<td class="vst-text" style="padding: 24px 0 0 0;"> <td class="vst-text step-top">
<?php print __('Minute');?> <?php print __('Minute');?>
</td> </td>
</tr> </tr>
@ -44,7 +44,7 @@
</td> </td>
</tr> </tr>
<tr> <tr>
<td class="vst-text" style="padding: 12px 0 0 0;"> <td class="vst-text input-label">
<?php print __('Hour');?> <?php print __('Hour');?>
</td> </td>
</tr> </tr>
@ -54,7 +54,7 @@
</td> </td>
</tr> </tr>
<tr> <tr>
<td class="vst-text" style="padding: 12px 0 0 0;"> <td class="vst-text input-label">
<?php print __('Day');?> <?php print __('Day');?>
</td> </td>
</tr> </tr>
@ -64,7 +64,7 @@
</td> </td>
</tr> </tr>
<tr> <tr>
<td class="vst-text" style="padding: 12px 0 0 0;"> <td class="vst-text input-label">
<?php print __('Month');?> <?php print __('Month');?>
</td> </td>
</tr> </tr>
@ -74,7 +74,7 @@
</td> </td>
</tr> </tr>
<tr> <tr>
<td class="vst-text" style="padding: 12px 0 0 0;"> <td class="vst-text input-label">
<?php print __('Day of week');?> <?php print __('Day of week');?>
</td> </td>
</tr> </tr>
@ -84,22 +84,22 @@
</td> </td>
</tr> </tr>
<tr> <tr>
<td class="vst-text" style="padding: 12px 0 0 0;"> <td class="vst-text input-label">
<?php print __('Command');?> <?php print __('Command');?>
</td> </td>
</tr> </tr>
<tr> <tr>
<td> <td>
<input type="text" size="20" class="vst-input" name="v_cmd" <?php if (!empty($v_cmd)) echo "value='".$v_cmd."'"; ?>> <input type="text" size="30" class="vst-input long" name="v_cmd" <?php if (!empty($v_cmd)) echo "value='".$v_cmd."'"; ?>>
</td> </td>
</tr> </tr>
</table> </table>
<table class="data-col2"> <table class="data-col2">
<tr> <tr>
<td style="padding: 24px 0 0 0;" width="116px"> <td class="step-top" width="116px">
<input type="submit" name="ok" value="<?php print __('Add');?>" class="button"> <input type="submit" name="ok" value="<?php print __('Add');?>" class="button">
</td> </td>
<td style="padding: 24px 0 0 0;"> <td class="step-top">
<input type="button" class="button" value="<?php print __('Back');?>" onclick="<?php echo $back ?>"> <input type="button" class="button" value="<?php print __('Back');?>" onclick="<?php echo $back ?>">
</td> </td>
</tr> </tr>

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