Skip to content

Commit d16a630

Browse files
committed
multiple ftp account support
1 parent 003959d commit d16a630

File tree

6 files changed

+203
-24
lines changed

6 files changed

+203
-24
lines changed

bin/v-add-web-domain-ftp

Lines changed: 22 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ fi
5353
# Get domain values
5454
get_domain_values 'web'
5555

56-
# Define ftp user shell
56+
# Defining ftp user shell
5757
if [ -z "$FTP_SHELL" ]; then
5858
shell='/sbin/nologin'
5959
if [ -e "/usr/bin/rssh" ]; then
@@ -63,22 +63,22 @@ else
6363
shell=$FTP_SHELL
6464
fi
6565

66-
# Define path
66+
# Defining path
6767
if [ -z "$ftp_path" ]; then
68-
ftp_path="$HOMEDIR/$user/web/$domain"
68+
ftp_path_a="$HOMEDIR/$user/web/$domain"
6969
else
70-
# Validating path
71-
ftp_path=$(readlink -f "$HOMEDIR/$user/web/$domain/$ftp_path")
72-
if [ -z "$(echo $ftp_path |grep $HOMEDIR/$user/web/$domain)" ]; then
73-
echo "Error: path $ftp_path is invalid"
70+
# Validating absolute path
71+
ftp_path_a=$(readlink -f "$HOMEDIR/$user/web/$domain/$ftp_path")
72+
if [ -z "$(echo $ftp_path_a |grep $HOMEDIR/$user/web/$domain)" ]; then
73+
echo "Error: absolute path $ftp_path_a is invalid"
7474
log_event "$E_INVALID" "$EVENT"
7575
exit $E_INVALID
7676
fi
77-
# MKDIR if path doesn't exist
78-
if [ ! -e $ftp_path ]; then
79-
mkdir -p $ftp_path
80-
chown $user:$user $ftp_path
81-
chmod 751 $ftp_path
77+
# Creating ftp user home directory
78+
if [ ! -e "$ftp_path_a" ]; then
79+
mkdir -p $ftp_path_a
80+
chown $user:$user "$ftp_path_a"
81+
chmod 751 "$ftp_path_a"
8282
fi
8383
fi
8484

@@ -87,32 +87,37 @@ fi
8787
-s $shell \
8888
-o -u $(id -u $user) \
8989
-g $(id -u $user) \
90-
-M -d "$ftp_path" > /dev/null 2>&1
90+
-M -d "$ftp_path_a" > /dev/null 2>&1
91+
92+
# Set ftp user password
9193
echo "$ftp_user:$ftp_password" | /usr/sbin/chpasswd
92-
ftp_md5="$(awk -v user=$ftp_user -F : 'user == $1 {print $2}' /etc/shadow)"
94+
ftp_md5=$(awk -v user=$ftp_user -F : 'user == $1 {print $2}' /etc/shadow)
9395

9496

9597
#----------------------------------------------------------#
9698
# Vesta #
9799
#----------------------------------------------------------#
98100

101+
# Transforming absolute path to relative
102+
ftp_path_r=$(echo $ftp_path_a |sed "s%$HOMEDIR/$user/web/$domain%%")
103+
99104
# Concatenating ftp variables
100105
if [ ! -z "$FTP_USER" ]; then
101106
ftp_user="$FTP_USER:$ftp_user"
102107
ftp_md5="$FTP_MD5:$ftp_md5"
103-
ftp_path="$FTP_PATH:$ftp_path"
108+
ftp_path="$FTP_PATH:$ftp_path_r"
104109
fi
105110

106111
# Adding new key into web.conf
107112
add_object_key "web" 'DOMAIN' "$domain" 'FTP_PATH' 'PROXY'
108113

109-
# Update config
114+
# Updating config
110115
update_object_value 'web' 'DOMAIN' "$domain" '$FTP_USER' "$ftp_user"
111116
update_object_value 'web' 'DOMAIN' "$domain" '$FTP_MD5' "$ftp_md5"
112117
update_object_value 'web' 'DOMAIN' "$domain" '$FTP_PATH' "$ftp_path"
113118

114119
# Logging
115-
log_history "added ftp account ${1}_${3} for $domain"
120+
log_history "added ftp account ${1}_${3}@$domain"
116121
log_event "$OK" "$EVENT"
117122

118123
exit
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
#!/bin/bash
2+
# info: change ftp user password.
3+
# options: USER DOMAIN FTP_USER FTP_PASSWORD
4+
#
5+
# The function changes ftp user password.
6+
7+
8+
#----------------------------------------------------------#
9+
# Variable&Function #
10+
#----------------------------------------------------------#
11+
12+
# Argument defenition
13+
user=$1
14+
domain=$(idn -t --quiet -u "$2" )
15+
domain_idn=$(idn -t --quiet -a "$domain")
16+
ftp_user=$3
17+
ftp_password=$4
18+
19+
# Includes
20+
source $VESTA/func/main.sh
21+
source $VESTA/func/domain.sh
22+
source $VESTA/conf/vesta.conf
23+
24+
25+
#----------------------------------------------------------#
26+
# Verifications #
27+
#----------------------------------------------------------#
28+
29+
check_args '4' "$#" 'USER DOMAIN FTP_USER FTP_PASSWORD'
30+
validate_format 'user' 'domain' 'ftp_user' 'ftp_password'
31+
is_system_enabled "$WEB_SYSTEM" 'WEB_SYSTEM'
32+
is_object_valid 'user' 'USER' "$user"
33+
is_object_unsuspended 'user' 'USER' "$user"
34+
is_object_valid 'web' 'DOMAIN' "$domain"
35+
is_object_unsuspended 'web' 'DOMAIN' "$domain"
36+
get_domain_values 'web'
37+
if [ -z "$(echo $FTP_USER | tr ':' '\n' | grep ^$ftp_user$)" ]; then
38+
echo "Error: account $ftp_user doesn't exist"
39+
log_event "$E_NOTEXIST" "$EVENT"
40+
exit $E_NOTEXIST
41+
fi
42+
43+
44+
#----------------------------------------------------------#
45+
# Action #
46+
#----------------------------------------------------------#
47+
48+
# Changing ftp user password
49+
echo "$ftp_user:$ftp_password" | /usr/sbin/chpasswd
50+
ftp_md5=$(awk -v user=$ftp_user -F : 'user == $1 {print $2}' /etc/shadow)
51+
52+
53+
#----------------------------------------------------------#
54+
# Vesta #
55+
#----------------------------------------------------------#
56+
57+
# Rebuilding FTP variables
58+
position=$(echo $FTP_USER |tr ':' '\n' |grep -n '' |grep ":$ftp_user$" |\
59+
cut -f 1 -d:)
60+
ftp_md5=$(echo $FTP_MD5 |tr ':' '\n' |grep -n '' |\
61+
sed -e "s%^$position:.*%$position:$ftp_md5%" |\
62+
cut -f 2 -d :| sed -e "/^$/d"| sed -e ':a;N;$!ba;s/\n/:/g')
63+
64+
# Updating config
65+
update_object_value 'web' 'DOMAIN' "$domain" '$FTP_MD5' "$ftp_md5"
66+
67+
# Logging
68+
log_history "changed password for $ftp_user on $domain"
69+
log_event "$OK" "$EVENT"
70+
71+
exit

bin/v-change-web-domain-ftp-path

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
#!/bin/bash
2+
# info: change path for ftp user.
3+
# options: USER DOMAIN FTP_USER FTP_PATH
4+
#
5+
# The function changes ftp user path.
6+
7+
8+
#----------------------------------------------------------#
9+
# Variable&Function #
10+
#----------------------------------------------------------#
11+
12+
# Argument defenition
13+
user=$1
14+
domain=$(idn -t --quiet -u "$2" )
15+
domain_idn=$(idn -t --quiet -a "$domain")
16+
ftp_user=$3
17+
ftp_path=$4
18+
19+
# Includes
20+
source $VESTA/func/main.sh
21+
source $VESTA/func/domain.sh
22+
source $VESTA/conf/vesta.conf
23+
24+
25+
#----------------------------------------------------------#
26+
# Verifications #
27+
#----------------------------------------------------------#
28+
29+
check_args '4' "$#" 'USER DOMAIN FTP_USER FTP_PATH'
30+
validate_format 'user' 'domain' 'ftp_user'
31+
is_system_enabled "$WEB_SYSTEM" 'WEB_SYSTEM'
32+
is_object_valid 'user' 'USER' "$user"
33+
is_object_unsuspended 'user' 'USER' "$user"
34+
is_object_valid 'web' 'DOMAIN' "$domain"
35+
is_object_unsuspended 'web' 'DOMAIN' "$domain"
36+
get_domain_values 'web'
37+
if [ -z "$(echo $FTP_USER | tr ':' '\n' | grep ^$ftp_user$)" ]; then
38+
echo "Error: account $ftp_user doesn't exist"
39+
log_event "$E_NOTEXIST" "$EVENT"
40+
exit $E_NOTEXIST
41+
fi
42+
ftp_path_a=$(readlink -f "$HOMEDIR/$user/web/$domain/$ftp_path")
43+
if [ -z "$(echo $ftp_path_a |grep $HOMEDIR/$user/web/$domain)" ]; then
44+
echo "Error: absolute path $ftp_path_a is invalid"
45+
log_event "$E_INVALID" "$EVENT"
46+
exit $E_INVALID
47+
fi
48+
49+
50+
#----------------------------------------------------------#
51+
# Action #
52+
#----------------------------------------------------------#
53+
54+
# MKDIR if path doesn't exist
55+
if [ ! -e "$ftp_path_a" ]; then
56+
mkdir -p "$ftp_path_a"
57+
chown $user:$user "$ftp_path_a"
58+
chmod 751 "$ftp_path_a"
59+
fi
60+
61+
# Chaning ftp user path
62+
pw_str=$(grep -n "^$ftp_user:" /etc/passwd)
63+
str=$(echo "$pw_str" | cut -f 1 -d :)
64+
old_path=$(echo "$pw_str" | cut -f 7 -d :)
65+
sed -i "$str s%$old_path%$ftp_path_a%g" /etc/passwd
66+
67+
68+
#----------------------------------------------------------#
69+
# Vesta #
70+
#----------------------------------------------------------#
71+
72+
# Transforming absolute path to relative
73+
ftp_path_r=$(echo $ftp_path_a |sed "s%$HOMEDIR/$user/web/$domain%%")
74+
75+
# Rebuilding FTP variables
76+
position=$(echo $FTP_USER |tr ':' '\n' |grep -n '' |grep ":$ftp_user$" |\
77+
cut -f 1 -d:)
78+
ftp_path=$(echo $FTP_PATH |tr ':' '\n' |grep -n '' |\
79+
sed -e "s%^$position:.*%$position:$ftp_path_r%" |\
80+
cut -f 2 -d :| sed -e ':a;N;$!ba;s/\n/:/g')
81+
82+
# Updating config
83+
update_object_value 'web' 'DOMAIN' "$domain" '$FTP_PATH' "$ftp_path"
84+
85+
# Logging
86+
log_history "changed path to $ftp_path_a for $ftp_user@$domain"
87+
log_event "$OK" "$EVENT"
88+
89+
exit

bin/v-delete-web-domain

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,9 +89,15 @@ if [ ! -z "$STATS" ] && [ "$STATS" != 'no' ]; then
8989
rm -f /etc/awstats/$STATS.$domain.conf
9090
fi
9191

92-
# Deleting ftp account
92+
# Deleting ftp users
9393
if [ ! -z "$FTP_USER" ]; then
94-
/usr/sbin/userdel -f $FTP_USER >> /dev/null 2>&1
94+
for ftp_user in ${FTP_USER//:/ }; do
95+
/usr/sbin/userdel $ftp_user >> /dev/null 2>&1
96+
if [ "$?" != 0 ]; then
97+
sed -i "/^$ftp_user:/d" /etc/passwd
98+
sed -i "/^$ftp_user:/d" /etc/shadow
99+
fi
100+
done
95101
fi
96102

97103
# Deleting directory

bin/v-delete-web-domain-ftp

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,22 +45,26 @@ fi
4545
#----------------------------------------------------------#
4646

4747
# Deleting ftp user
48-
/usr/sbin/userdel -f $ftp_user >> /dev/null 2>&1
48+
/usr/sbin/userdel $ftp_user >> /dev/null 2>&1
49+
if [ "$?" != 0 ]; then
50+
sed -i "/^$ftp_user:/d" /etc/passwd
51+
sed -i "/^$ftp_user:/d" /etc/shadow
52+
fi
4953

5054

5155
#----------------------------------------------------------#
5256
# Vesta #
5357
#----------------------------------------------------------#
5458

55-
# Rebuild FTP variables
59+
# Rebuilding FTP variables
5660
position=$(echo $FTP_USER |tr ':' '\n' |grep -n '' |grep ":$ftp_user$" |\
5761
cut -f 1 -d:)
5862
ftp_user=$(echo $FTP_USER |tr ':' '\n' |grep -n '' |grep -v "^$position:" |\
5963
cut -f 2 -d :| sed -e "/^$/d"| sed -e ':a;N;$!ba;s/\n/:/g')
6064
ftp_md5=$(echo $FTP_MD5 |tr ':' '\n' |grep -n '' |grep -v "^$position:" |\
61-
cut -f 2 -d :| sed -e "/^$/d"| sed -e ':a;N;$!ba;s/\n/:/g')
65+
cut -f 2 -d :| sed -e ':a;N;$!ba;s/\n/:/g')
6266
ftp_path=$(echo $FTP_PATH |tr ':' '\n' |grep -n '' |grep -v "^$position:" |\
63-
cut -f 2 -d :| sed -e "/^$/d"| sed -e ':a;N;$!ba;s/\n/:/g')
67+
cut -f 2 -d :| sed -e ':a;N;$!ba;s/\n/:/g')
6468

6569
# Update config
6670
update_object_value 'web' 'DOMAIN' "$domain" '$FTP_USER' "$ftp_user"

bin/v-list-web-domain

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,11 @@ conf=$USER_DATA/web.conf
7676

7777
# Defining fileds to select
7878
fields='$DOMAIN $IP $IP6 $U_DISK $U_BANDWIDTH $TPL $ALIAS $STATS $STATS_USER
79-
$SSL $SSL_HOME $FTP_USER $PROXY $PROXY_EXT $SUSPENDED $TIME $DATE'
79+
$SSL $SSL_HOME $FTP_USER $FTP_PATH $PROXY $PROXY_EXT $DOCUMENT_ROOT
80+
$SUSPENDED $TIME $DATE'
81+
82+
# Defining document root
83+
DOCUMENT_ROOT="$HOMEDIR/$user/web/$domain/public_html"
8084

8185
# Listing domains
8286
case $format in

0 commit comments

Comments
 (0)