diff --git a/bin/v-add-remote-dns-host b/bin/v-add-remote-dns-host index a9bdd25c4..835f97f36 100755 --- a/bin/v-add-remote-dns-host +++ b/bin/v-add-remote-dns-host @@ -16,6 +16,7 @@ user=$3 password=$4 type=${5-api} dns_user=${6-dns-cluster} +DNS_USER=$dns_user # Includes source $VESTA/func/main.sh @@ -42,9 +43,10 @@ is_dnshost_alive # Action # #----------------------------------------------------------# -# Concatentating db host string -str="HOST='$host' USER='$user' PASSWORD='$password' DNS_USER='$dns_user'" -str="$str TYPE='$type' SUSPENDED='no' TIME='$TIME' DATE='$DATE'" +# Concatentating dns host string +str="HOST='$host' PORT='$port' USER='$user' PASSWORD='$password'" +str="$str DNS_USER='$dns_user' TYPE='$type' SUSPENDED='no'" +str="$str TIME='$TIME' DATE='$DATE'" # Adding host to dns-cluster.conf echo "$str" >> $VESTA/conf/dns-cluster.conf diff --git a/bin/v-add-user b/bin/v-add-user index 732fde24e..9fb122319 100755 --- a/bin/v-add-user +++ b/bin/v-add-user @@ -207,7 +207,6 @@ chmod 660 $USER_DATA/user.conf # Updating quota if [ "$DISK_QUOTA" = 'yes' ]; then - echo "Setting quota" $BIN/v-update-user-quota "$user" fi diff --git a/bin/v-add-web-domain-ftp b/bin/v-add-web-domain-ftp index d6c3fb45f..be10e90b8 100755 --- a/bin/v-add-web-domain-ftp +++ b/bin/v-add-web-domain-ftp @@ -1,8 +1,8 @@ #!/bin/bash # 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") ftp_user=${1}_${3} ftp_password=$4 +ftp_path=$5 # Includes source $VESTA/func/main.sh @@ -30,57 +31,93 @@ EVENT="$DATE $TIME $SCRIPT $A1 $A2 $A3 $A4 $A5 $A6 $A7 $A8 $A9" # 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' 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" +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 # #----------------------------------------------------------# +# Get domain values get_domain_values 'web' -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 + +# Defining ftp user shell +if [ -z "$FTP_SHELL" ]; then + shell='/sbin/nologin' + if [ -e "/usr/bin/rssh" ]; then + shell='/usr/bin/rssh' + fi +else + shell=$FTP_SHELL fi -if [ ! -z "$FTP_USER" ]; then - /usr/sbin/userdel -f $FTP_USER > /dev/null 2>&1 +# Defining path +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 -# Define shell -shell='/sbin/nologin' -if [ -e "/usr/bin/rssh" ]; then - shell='/usr/bin/rssh' -fi - -# Adding user +# Adding ftp user /usr/sbin/useradd $ftp_user \ -s $shell \ -o -u $(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 -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 # #----------------------------------------------------------# -# 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_MD5' "$ftp_md5" +update_object_value 'web' 'DOMAIN' "$domain" '$FTP_PATH' "$ftp_path" # Logging -log_history "added ftp account $ftp_user for $domain" +log_history "added ftp account ${1}_${3}@$domain" log_event "$OK" "$EVENT" exit diff --git a/bin/v-add-web-domain-stats b/bin/v-add-web-domain-stats index 5d6056d18..8ee057618 100755 --- a/bin/v-add-web-domain-stats +++ b/bin/v-add-web-domain-stats @@ -52,20 +52,20 @@ upd_web_domain_values # Adding statistic config cat $WEBTPL/$type/$type.tpl |\ - sed -e "s/%ip%/$ip/g" \ - -e "s/%web_port%/$WEB_PORT/g" \ - -e "s/%web_system%/$WEB_SYSTEM/g" \ - -e "s/%web_ssl_port%/$WEB_SSL_PORT/g" \ - -e "s/%rgroups%/$WEB_RGROUPS/g" \ - -e "s/%proxy_system%/$PROXY_SYSTEM/g" \ - -e "s/%proxy_port%/$PROXY_PORT/g" \ - -e "s/%proxy_ssl_port%/$PROXY_SSL_PORT/g" \ - -e "s/%domain_idn%/$domain_idn/g" \ - -e "s/%domain%/$domain/g" \ - -e "s/%user%/$user/g" \ - -e "s/%home%/${HOMEDIR////\/}/g" \ - -e "s/%alias%/${aliases//,/ }/g" \ - -e "s/%alias_idn%/${aliases_idn//,/ }/g" \ + sed -e "s|%ip%|$ip|g" \ + -e "s|%web_port%|$WEB_PORT|g" \ + -e "s|%web_system%|$WEB_SYSTEM|g" \ + -e "s|%web_ssl_port%|$WEB_SSL_PORT|g" \ + -e "s|%rgroups%|$WEB_RGROUPs|g" \ + -e "s|%proxy_system%|$PROXY_SYSTEM|g" \ + -e "s|%proxy_port%|$PROXY_PORT|g" \ + -e "s|%proxy_ssl_port%|$PROXY_SSL_PORT|g" \ + -e "s|%domain_idn%|$domain_idn|g" \ + -e "s|%domain%|$domain|g" \ + -e "s|%user%|$user|g" \ + -e "s|%home%|$HOMEDIR|g" \ + -e "s|%alias%|${aliases//,/ }|g" \ + -e "s|%alias_idn%|${aliases_idn//,/ }|g" \ > $HOMEDIR/$user/conf/web/$type.$domain.conf if [ "$type" == 'awstats' ]; then diff --git a/bin/v-change-user-language b/bin/v-change-user-language index 3bc437a84..22011151b 100755 --- a/bin/v-change-user-language +++ b/bin/v-change-user-language @@ -49,14 +49,6 @@ else update_user_value "$user" '$LANGUAGE' "$language" 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 # diff --git a/bin/v-change-web-domain-ftp b/bin/v-change-web-domain-ftp-password similarity index 66% rename from bin/v-change-web-domain-ftp rename to bin/v-change-web-domain-ftp-password index a69cf510e..c4cd90f98 100755 --- a/bin/v-change-web-domain-ftp +++ b/bin/v-change-web-domain-ftp-password @@ -1,8 +1,8 @@ #!/bin/bash -# info: add ftp account for web domain. +# info: change ftp user 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 domain=$(idn -t --quiet -u "$2" ) domain_idn=$(idn -t --quiet -a "$domain") -ftp_user=${1}_${3} +ftp_user=$3 ftp_password=$4 # Includes @@ -33,31 +33,39 @@ is_object_valid 'user' 'USER' "$user" is_object_unsuspended 'user' 'USER' "$user" is_object_valid '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 # #----------------------------------------------------------# -# Adding user -/usr/sbin/adduser $ftp_user -g $user -s /sbin/nologin -M \ - -d "$HOMEDIR/$user/web/$domain" > /dev/null 2>&1 +# Changing ftp user password 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 # #----------------------------------------------------------# -# Update config -update_object_value 'web' 'DOMAIN' "$domain" '$FTP_USER' "$ftp_user" +# Rebuilding FTP variables +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" # Logging -log_history "added ftp account $ftp_user for $domain" +log_history "changed password for $ftp_user on $domain" log_event "$OK" "$EVENT" exit diff --git a/bin/v-change-web-domain-ftp-path b/bin/v-change-web-domain-ftp-path new file mode 100755 index 000000000..f4489c0a1 --- /dev/null +++ b/bin/v-change-web-domain-ftp-path @@ -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 diff --git a/bin/v-delete-user b/bin/v-delete-user index d05cc7d9d..07efd7496 100755 --- a/bin/v-delete-user +++ b/bin/v-delete-user @@ -89,8 +89,14 @@ fi sed -i "/ $user$/d" $VESTA/data/queue/disk.pipe sed -i "/ $user$/d" $VESTA/data/queue/traffic.pipe -# Removing system user -/usr/sbin/userdel -f $user +# Deleting system 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 rm -rf $HOMEDIR/$user rm -f /var/spool/mail/$user diff --git a/bin/v-delete-web-domain b/bin/v-delete-web-domain index 68c86d2fc..3ee9121d2 100755 --- a/bin/v-delete-web-domain +++ b/bin/v-delete-web-domain @@ -89,9 +89,15 @@ if [ ! -z "$STATS" ] && [ "$STATS" != 'no' ]; then rm -f /etc/awstats/$STATS.$domain.conf fi -# Deleting ftp account +# Deleting ftp users 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 # Deleting directory diff --git a/bin/v-delete-web-domain-ftp b/bin/v-delete-web-domain-ftp index 2b776e304..01b8ac479 100755 --- a/bin/v-delete-web-domain-ftp +++ b/bin/v-delete-web-domain-ftp @@ -1,6 +1,6 @@ #!/bin/bash -# info: delete webdomain ftp account. -# options: USER DOMAIN +# info: delete webdomain ftp account +# options: USER DOMAIN FTP_USER # # The function deletes additional ftp account. @@ -13,6 +13,7 @@ user=$1 domain=$(idn -t --quiet -u "$2" ) domain_idn=$(idn -t --quiet -a "$domain") +ftp_user=$3 # Includes source $VESTA/func/main.sh @@ -24,14 +25,19 @@ source $VESTA/conf/vesta.conf # Verifications # #----------------------------------------------------------# -check_args '2' "$#" 'USER DOMAIN' -validate_format 'user' 'domain' +check_args '3' "$#" 'USER DOMAIN FTP_USER' +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" -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 -get_domain_values 'web' -/usr/sbin/userdel -f $FTP_USER >> /dev/null 2>&1 +/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 #----------------------------------------------------------# # 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_object_value 'web' 'DOMAIN' "$domain" '$FTP_USER' '' -update_object_value 'web' 'DOMAIN' "$domain" '$FTP_MD5' '' +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_PATH' "$ftp_path" # Logging -log_history "deleted ftp account $FTP_USER for $domain" +log_history "deleted ftp account ${3} for $domain" log_event "$OK" "$EVENT" exit diff --git a/bin/v-list-sys-rrd b/bin/v-list-sys-rrd index 49b0b2e78..2dc026b91 100755 --- a/bin/v-list-sys-rrd +++ b/bin/v-list-sys-rrd @@ -37,6 +37,9 @@ json_list_rrd() { [ "$type" = 'ssh' ]; then title="$(echo $rrd| tr '[:lower:]' '[:upper:]') Usage" fi + if [ "$type" = 'mail' ]; then + title="Exim Usage" + fi if [ "$type" = 'db' ]; then db_type=$(echo $rrd|cut -f 1 -d _ |sed -e 's/mysql/MySQL/g' \ -e 's/pgsql/PostgreSQL/g' ) @@ -84,14 +87,14 @@ if [ -n "$WEB_SYSTEM" ] && [ "$WEB_SYSTEM" != 'no' ]; then rrd_types="$rrd_types web" fi +if [ -n "$MAIL_SYSTEM" ] && [ "$MAIL_SYSTEM" != 'no' ]; then + rrd_types="$rrd_types mail" +fi + if [ -n "$DB_SYSTEM" ] && [ "$DB_SYSTEM" != 'no' ]; then rrd_types="$rrd_types db" fi -#if [ -n "$MAIL_SYSTEM" ] && [ "$MAIL_SYSTEM" != 'no' ]; then -# rrd_types="$rrd_types mail" -#fi - if [ -n "$FTP_SYSTEM" ] && [ "$FTP_SYSTEM" != 'no' ]; then rrd_types="$rrd_types ftp" fi diff --git a/bin/v-list-user b/bin/v-list-user index ea818ac1f..817fb8422 100755 --- a/bin/v-list-user +++ b/bin/v-list-user @@ -70,6 +70,7 @@ is_object_valid 'user' 'USER' "$user" # Defining config conf=$USER_DATA/user.conf +HOME=$HOMEDIR/$user # Defining fileds to select 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_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_BACKUPS $LANGUAGE $TIME $DATE' + $U_BACKUPS $LANGUAGE $HOME $TIME $DATE' # Listing user case $format in diff --git a/bin/v-list-web-domain b/bin/v-list-web-domain index 9a8ea34d7..8a1c794de 100755 --- a/bin/v-list-web-domain +++ b/bin/v-list-web-domain @@ -76,7 +76,11 @@ conf=$USER_DATA/web.conf # Defining fileds to select 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 case $format in diff --git a/bin/v-list-web-domains b/bin/v-list-web-domains index d39b7aac8..95f061702 100755 --- a/bin/v-list-web-domains +++ b/bin/v-list-web-domains @@ -34,8 +34,8 @@ is_object_valid 'user' 'USER' "$user" conf=$USER_DATA/web.conf # Defining fileds to select -fields="\$DOMAIN \$IP \$IP6 \$U_DISK \$U_BANDWIDTH \$TPL \$ALIAS" -fields="$fields \$STATS \$STATS_USER \$SSL \$SSL_HOME \$FTP_USER" +fields="\$DOMAIN \$IP \$IP6 \$U_DISK \$U_BANDWIDTH \$TPL \$ALIAS \$STATS" +fields="$fields \$STATS_USER \$SSL \$SSL_HOME \$FTP_USER \$FTP_PATH" fields="$fields \$PROXY \$PROXY_EXT \$SUSPENDED \$TIME \$DATE" # Listing domains diff --git a/bin/v-restart-ftp b/bin/v-restart-ftp index ad28339e2..611672797 100755 --- a/bin/v-restart-ftp +++ b/bin/v-restart-ftp @@ -45,7 +45,7 @@ if [ -z "$FTP_SYSTEM" ] || [ "$FTP_SYSTEM" = 'remote' ]; then fi # Restart system -/etc/init.d/$FTP_SYSTEM restart >/dev/null 2>&1 +service $FTP_SYSTEM restart >/dev/null 2>&1 if [ $? -ne 0 ]; then send_email_report echo "Error: $FTP_SYSTEM restart failed" diff --git a/bin/v-restart-mail b/bin/v-restart-mail index 717752624..325f0f0f8 100755 --- a/bin/v-restart-mail +++ b/bin/v-restart-mail @@ -45,7 +45,7 @@ if [ -z "$MAIL_SYSTEM" ] || [ "$MAIL_SYSTEM" = 'remote' ]; then fi # Restart system -/etc/init.d/$MAIL_SYSTEM restart >/dev/null 2>&1 +service $MAIL_SYSTEM restart >/dev/null 2>&1 if [ $? -ne 0 ]; then send_email_report echo "Error: $MAIL_SYSTEM restart failed" diff --git a/bin/v-restore-user b/bin/v-restore-user index 1615e6ce6..5971ca836 100755 --- a/bin/v-restore-user +++ b/bin/v-restore-user @@ -363,11 +363,16 @@ if [ "$web" != 'no' ]; then exit $E_PARSING fi + # Fix for tar < 1.24 + find $HOMEDIR/$user/web/$domain -type d \ + -exec chown -h $user:$user {} \; + # ReChown files if uid differs if [ "$old_uid" -ne "$new_uid" ]; then find $HOMEDIR/$user/web/$domain/ -user $old_uid \ -exec chown -h $user:$user {} \; fi + done # Restart WEB diff --git a/bin/v-update-sys-rrd b/bin/v-update-sys-rrd index 6420f6079..81cc6d64e 100755 --- a/bin/v-update-sys-rrd +++ b/bin/v-update-sys-rrd @@ -110,6 +110,11 @@ for period in $periods; do $BIN/v-update-sys-rrd-$PROXY_SYSTEM $period >/dev/null 2>&1 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 if [ ! -z "$FTP_SYSTEM" ] && [ "$FTP_SYSTEM" != 'no' ]; then $BIN/v-update-sys-rrd-ftp $period >/dev/null 2>&1 diff --git a/bin/v-update-sys-rrd-mail b/bin/v-update-sys-rrd-mail new file mode 100755 index 000000000..1f01b52d3 --- /dev/null +++ b/bin/v-update-sys-rrd-mail @@ -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 diff --git a/bin/v-update-sys-rrd-mem b/bin/v-update-sys-rrd-mem index 69b0de918..515ec2802 100755 --- a/bin/v-update-sys-rrd-mem +++ b/bin/v-update-sys-rrd-mem @@ -95,11 +95,11 @@ rrdtool graph $RRD/mem/$period-mem.png \ GPRINT:used:'LAST: Current\:''%8.0lf' \ GPRINT:used:'MIN: Min\:''%8.0lf' \ GPRINT:used:'MAX: Max\:''%8.0lf\j' \ - AREA:free#1c74cd:"FREE" \ + LINE1:free#1c74cd:"FREE" \ GPRINT:free:'LAST: Current\:''%8.0lf' \ GPRINT:free:'MIN: Min\:''%8.0lf' \ GPRINT:free:'MAX: Max\:''%8.0lf\j'\ - LINE1:swap#f57900:"SWAP" \ + LINE2:swap#f57900:"SWAP" \ GPRINT:swap:'LAST:Current\:''%8.0lf' \ GPRINT:swap:'MIN:Min\:''%8.0lf' \ GPRINT:swap:'MAX:Max\:''%8.0lf\j' &>/dev/null; result=$? diff --git a/bin/v-update-sys-vesta-all b/bin/v-update-sys-vesta-all index f73ef95e7..75bc036f1 100755 --- a/bin/v-update-sys-vesta-all +++ b/bin/v-update-sys-vesta-all @@ -9,6 +9,9 @@ # Variable&Function # #----------------------------------------------------------# +# Importing system variables +source /etc/profile + # Includes source $VESTA/func/main.sh source $VESTA/conf/vesta.conf diff --git a/bin/v-update-user-backup-exclusions b/bin/v-update-user-backup-exclusions index 7cb2f6678..898a1d55b 100755 --- a/bin/v-update-user-backup-exclusions +++ b/bin/v-update-user-backup-exclusions @@ -67,7 +67,7 @@ echo "WEB='$WEB'" > $USER_DATA/backup-excludes.conf echo "DNS='$DNS'" >> $USER_DATA/backup-excludes.conf echo "MAIL='$MAIL'" >> $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 chmod 660 $USER_DATA/backup-excludes.conf diff --git a/bin/v-update-user-quota b/bin/v-update-user-quota index 99b2e11d6..f248662ed 100755 --- a/bin/v-update-user-quota +++ b/bin/v-update-user-quota @@ -32,7 +32,7 @@ is_object_valid 'user' 'USER' "$user" # Updating disk quota soft=$(get_user_value '$DISK_QUOTA') -soft=$((soft * 100)) +soft=$((soft * 1000)) hard=$((soft + 50000)) mnt=$(df -P /home |awk '{print $6}' |tail -n1) diff --git a/func/domain.sh b/func/domain.sh index 1bf1cde8a..fc10c38da 100644 --- a/func/domain.sh +++ b/func/domain.sh @@ -491,9 +491,9 @@ is_dns_nameserver_valid() { if [ ! -z "$remote" ]; then zone=$USER_DATA/dns/$d.conf a_record=$(echo $r |cut -f 1 -d '.') - record=$(grep "RECORD='$a_record'" $zone| grep "TYPE='A'") - if [ -z "$record" ]; then - echo "Error: corresponding A record $a_record.$d is not exist" + n_record=$(grep "RECORD='$a_record'" $zone| grep "TYPE='A'") + if [ -z "$n_record" ]; then + echo "Error: corresponding A record $a_record.$d does not exist" log_event "$E_NOTEXIST" "$EVENT" exit $E_NOTEXIST fi diff --git a/func/main.sh b/func/main.sh index 93cb4caa1..6864545cb 100644 --- a/func/main.sh +++ b/func/main.sh @@ -740,11 +740,16 @@ validate_format_mhdmw() { # proxy extention or DNS record validate_format_common() { exclude="[!|#|$|^|&|(|)|+|=|{|}|:|<|>|?|/|\|\"|'|;|%|\`| ]" - if [[ "$1" =~ $exclude ]] || [ 200 -le ${#1} ]; then + if [[ "$1" =~ $exclude ]]; then echo "Error: $2 $1 is not valid" log_event "$E_INVALID" "$EVENT" exit $E_INVALID 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 diff --git a/func/rebuild.sh b/func/rebuild.sh index de3cc4fec..22ca03106 100644 --- a/func/rebuild.sh +++ b/func/rebuild.sh @@ -318,21 +318,36 @@ rebuild_web_domain_conf() { $WEBTPL/$PROXY_SYSTEM/$PROXY.sh $user $domain $ip $HOMEDIR $docroot fi - # Checking ftp - if [ ! -z "$FTP_USER" ]; then - if [ -z "$(grep ^$FTP_USER: /etc/passwd)" ]; then - shell='/sbin/nologin' - if [ -e "/usr/bin/rssh" ]; then - shell='/usr/bin/rssh' - fi - /usr/sbin/useradd $FTP_USER \ + # Defining ftp user shell + if [ -z "$FTP_SHELL" ]; then + shell='/sbin/nologin' + if [ -e "/usr/bin/rssh" ]; then + shell='/usr/bin/rssh' + fi + else + 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 \ -o -u $(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 - shadow=$(grep "^$FTP_USER:" /etc/shadow) + # Updating ftp user password + shadow=$(grep "^$ftp_user:" /etc/shadow) shdw3=$(echo "$shadow" | cut -f3 -d :) shdw4=$(echo "$shadow" | cut -f4 -d :) shdw5=$(echo "$shadow" | cut -f5 -d :) @@ -340,15 +355,14 @@ rebuild_web_domain_conf() { shdw7=$(echo "$shadow" | cut -f7 -d :) shdw8=$(echo "$shadow" | cut -f8 -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" - chmod u+w /etc/shadow - sed -i "/^$FTP_USER:*/d" /etc/shadow + sed -i "/^$ftp_user:*/d" /etc/shadow echo "$shadow_str" >> /etc/shadow chmod u-w /etc/shadow fi - fi + done } # DNS domain rebuild diff --git a/func/remote.sh b/func/remote.sh index 8f386594a..61b050065 100644 --- a/func/remote.sh +++ b/func/remote.sh @@ -6,11 +6,21 @@ send_api_cmd() { USER=admin fi - auth="user=$USER&password=$PASSWORD&returncode=yes" - cmd="cmd=$1" - args="arg1=$2&arg2=$3&arg3=$4&arg4=$5&arg5=$6&arg6=$7&arg7=$8&arg8=$9" - args=$(echo "$args" |sed -e "s/+/%2B/g") - answer=$(curl -s -k --data "$auth&$cmd&$args" https://$HOST:$PORT/api/) + answer=$(curl -s -k \ + --data-urlencode "user=$USER" \ + --data-urlencode "password=$PASSWORD" \ + --data-urlencode "returncode=yes" \ + --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 return 1 else @@ -90,7 +100,7 @@ is_dnshost_alive() { $send_cmd v-list-sys-config if [ $? -ne 0 ]; then echo "Error: $type connection to $HOST failed" - log_event "$E_CONNECT $EVENT" + log_event "$E_CONNECT" "$EVENT" exit $E_CONNECT fi @@ -104,7 +114,7 @@ is_dnshost_alive() { $send_cmd v-list-user $DNS_USER if [ $? -ne 0 ]; then echo "Error: dns user $DNS_USER doesn't exist" - log_event "$E_NOTEXIST $EVENT" + log_event "$E_NOTEXIST" "$EVENT" exit $E_NOTEXIST fi } @@ -146,7 +156,7 @@ remote_dns_health_check() { echo -e "\n\n--\nVesta Control Panel\n$(hostname)" >> $tmpfile cat $tmpfile | $send_mail -s "$subj" $email - log_event "$E_CONNECT $EVENT" + log_event "$E_CONNECT" "$EVENT" dconf="../../../conf/dns-cluster" update_object_value "$dconf" 'HOST' "$HOST" '$SUSPENDED' 'yes' fi diff --git a/install/debian/dovecot/conf.d/10-ssl.conf b/install/debian/dovecot/conf.d/10-ssl.conf index e1d444239..3aaff6eec 100644 --- a/install/debian/dovecot/conf.d/10-ssl.conf +++ b/install/debian/dovecot/conf.d/10-ssl.conf @@ -1,3 +1,3 @@ ssl = yes -ssl_cert =