Serghey Rodin 11 лет назад
Родитель
Сommit
d16a630566

+ 22 - 17
bin/v-add-web-domain-ftp

@@ -53,7 +53,7 @@ fi
 # Get domain values
 get_domain_values 'web'
 
-# Define ftp user shell
+# Defining ftp user shell
 if [ -z "$FTP_SHELL" ]; then
     shell='/sbin/nologin'
     if [ -e "/usr/bin/rssh" ]; then
@@ -63,22 +63,22 @@ else
     shell=$FTP_SHELL
 fi
 
-# Define path
+# Defining path
 if [ -z "$ftp_path" ]; then
-    ftp_path="$HOMEDIR/$user/web/$domain"
+    ftp_path_a="$HOMEDIR/$user/web/$domain"
 else
-    # Validating path
-    ftp_path=$(readlink -f "$HOMEDIR/$user/web/$domain/$ftp_path")
-    if [ -z "$(echo $ftp_path |grep $HOMEDIR/$user/web/$domain)" ]; then
-        echo "Error: path $ftp_path is invalid"
+    # 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
-    # MKDIR if path doesn't exist
-    if [ ! -e $ftp_path ]; then
-        mkdir -p $ftp_path
-        chown $user:$user $ftp_path
-        chmod 751 $ftp_path
+    # 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
 
@@ -87,32 +87,37 @@ fi
     -s $shell \
     -o -u $(id -u $user) \
     -g $(id -u $user) \
-    -M -d "$ftp_path"  > /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                              #
 #----------------------------------------------------------#
 
+# 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"
+    ftp_path="$FTP_PATH:$ftp_path_r"
 fi
 
 # Adding new key into web.conf
 add_object_key "web" 'DOMAIN' "$domain" 'FTP_PATH' 'PROXY'
 
-# Update config
+# 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 ${1}_${3} for $domain"
+log_history "added ftp account ${1}_${3}@$domain"
 log_event "$OK" "$EVENT"
 
 exit

+ 71 - 0
bin/v-change-web-domain-ftp-password

@@ -0,0 +1,71 @@
+#!/bin/bash
+# info: change ftp user password.
+# options: USER DOMAIN FTP_USER FTP_PASSWORD
+#
+# The function changes ftp user password.
+
+
+#----------------------------------------------------------#
+#                    Variable&Function                     #
+#----------------------------------------------------------#
+
+# Argument defenition
+user=$1
+domain=$(idn -t --quiet -u "$2" )
+domain_idn=$(idn -t --quiet -a "$domain")
+ftp_user=$3
+ftp_password=$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_PASSWORD'
+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"
+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                             #
+#----------------------------------------------------------#
+
+# 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)
+
+
+#----------------------------------------------------------#
+#                       Vesta                              #
+#----------------------------------------------------------#
+
+# 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 "changed password for $ftp_user on $domain"
+log_event "$OK" "$EVENT"
+
+exit

+ 89 - 0
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

+ 8 - 2
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

+ 8 - 4
bin/v-delete-web-domain-ftp

@@ -45,22 +45,26 @@ fi
 #----------------------------------------------------------#
 
 # Deleting ftp user
-/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                              #
 #----------------------------------------------------------#
 
-# Rebuild FTP variables
+# 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 "/^$/d"| sed -e ':a;N;$!ba;s/\n/:/g')
+    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 "/^$/d"| sed -e ':a;N;$!ba;s/\n/:/g')
+    cut -f 2 -d :| sed -e ':a;N;$!ba;s/\n/:/g')
 
 # Update config
 update_object_value 'web' 'DOMAIN' "$domain" '$FTP_USER' "$ftp_user"

+ 5 - 1
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