Compare commits

..

No commits in common. "master" and "0.9.8-12" have entirely different histories.

4553 changed files with 29817 additions and 286556 deletions

9
.gitignore vendored
View file

@ -1,9 +0,0 @@
*.tar
*.zip
*.gzip
*.gz
.vscode
.DS_Store
src/react/node_modules
src/react/build
/.idea

View file

@ -1,23 +0,0 @@
### Operating System (OS/VERSION):
Type here, e.g. CentOS 6
### VestaCP Version:
Type here, e.g. 3.14159
### Installed Software (what you got with the installer):
Type here, e.g. php-fpm, apache, nginx, mysql
### Steps to Reproduce:
Type here, e.g. install vesta and type rm -rf / --no-preserve-root
### Related Issues/Forum Threads:
Found anything that might be related to this? It might help us find the cause.
### Other Notes:
Anything else?

View file

@ -1,44 +1,29 @@
[Vesta Control Panel](http://vestacp.com/) [Vesta Control Panel](http://vestacp.com/)
================================================== ==================================================
Vesta is back under active development as of 25 February 2024. We are commited to open source, and will engage with the community to identify the new roadmap for Vesta. Stay tuned!
[![Join the chat at https://gitter.im/vesta-cp/Lobby](https://badges.gitter.im/vesta-cp/Lobby.svg)](https://gitter.im/vesta-cp/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
* Vesta is an open source hosting control panel. * Vesta is an open source hosting control panel.
* Vesta has a clean and focused interface without the clutter. * Vesta has a clean and focused interface without the clutter.
* Vesta has the latest of very innovative technologies. * Vesta has the latest of very innovative technologies.
How to install (2 step)
How to install
---------------------------- ----------------------------
Connect to your server as root via SSH Connect to your server as root via SSH
```bash ```bash
ssh root@your.server ssh root@your.server
``` ```
Download the installation script, and run it: Download the installation script
```bash ```bash
curl https://vestacp.com/pub/vst-install.sh | bash curl -O http://vestacp.com/pub/vst-install.sh
``` ```
How to install (3 step) Run it
----------------------------
If the above example does not work, try this 3 step method:
Connect to your server as root via SSH
```bash
ssh root@your.server
```
Download the installation script:
```bash
curl -O https://vestacp.com/pub/vst-install.sh
```
Then run it:
```bash ```bash
bash vst-install.sh bash vst-install.sh
``` ```
License License
---------------------------- ----------------------------
Vesta is licensed under [GPL v3 ](https://github.com/outroll/vesta/blob/master/LICENSE) license Vesta is licensed under [GPL v3 ](https://github.com/serghey-rodin/vesta/blob/master/LICENSE.txt) license

View file

@ -1,5 +0,0 @@
# Security Policy
## Reporting a Vulnerability
Please report security issues to dev@vestacp.com

View file

@ -1,66 +0,0 @@
#!/bin/bash
# info: update user notification
# options: USER NOTIFICATION
#
# The function updates user notification.
#----------------------------------------------------------#
# Variable&Function #
#----------------------------------------------------------#
# Argument definition
user=$1
nid=$2
# Includes
source $VESTA/func/main.sh
source $VESTA/conf/vesta.conf
#----------------------------------------------------------#
# Verifications #
#----------------------------------------------------------#
check_args '2' "$#" 'USER NOTIFICATION'
is_format_valid 'user' 'nid'
is_object_valid 'user' 'USER' "$user"
#----------------------------------------------------------#
# Action #
#----------------------------------------------------------#
# Updating notification
update_object_value 'notifications' 'NID' "$nid" '$ACK' 'yes' 2>/dev/null
# Checking last notification
if [ -e "$USER_DATA/notifications.conf" ]; then
if [ -z "$(grep NID= $USER_DATA/notifications.conf)" ]; then
notice='no'
fi
if [ -z "$(grep "ACK='no'" $USER_DATA/notifications.conf)" ]; then
notice='no'
fi
else
notice='no'
fi
#----------------------------------------------------------#
# Vesta #
#----------------------------------------------------------#
# Updating notification counter
if [ "$notice" = 'no' ]; then
if [ -z "$(grep NOTIFICATIONS $USER_DATA/user.conf)" ]; then
sed -i "s/^TIME/NOTIFICATIONS='no'\nTIME/g" $USER_DATA/user.conf
else
update_user_value "$user" '$NOTIFICATIONS' "no"
fi
fi
# Logging
log_event "$OK" "$ARGUMENTS"
exit

View file

@ -1,67 +0,0 @@
#!/bin/bash
# info: activate vesta license
# options: MODULE LICENSE
#
# The function activates and registers the vesta license
#----------------------------------------------------------#
# Variable&Function #
#----------------------------------------------------------#
# Argument definition
module=$(echo $1 | tr '[:lower:]' '[:upper:]')
license=$2
# Importing system environment
source /etc/profile
# Includes
source $VESTA/func/main.sh
source $VESTA/conf/vesta.conf
#----------------------------------------------------------#
# Verifications #
#----------------------------------------------------------#
# Checking arg number
check_args '2' "$#" 'MODULE LICENSE'
is_user_format_valid "$license" "license"
#----------------------------------------------------------#
# Action #
#----------------------------------------------------------#
# Activating license
v_host='https://vestacp.com/checkout'
answer=$(curl -s "$v_host/activate.php?licence_key=$license&module=$module")
check_result $? "cant' connect to vestacp.com " $E_CONNECT
# Checking server answer
if [[ "$answer" != '0' ]]; then
echo "Error: $module license $license is invalid"
exit $E_INVALID
fi
#----------------------------------------------------------#
# Vesta #
#----------------------------------------------------------#
# Updating vesta.conf
if [ -z "$(grep "${module}_KEY" $VESTA/conf/vesta.conf)" ]; then
echo "${module}_KEY='$license'" >> $VESTA/conf/vesta.conf
else
sed -i "s/${module}_KEY=.*/${module}_KEY='$license'/g" $VESTA/conf/vesta.conf
fi
# Activating sftpjail
if [ "$module" = 'SFTPJAIL' ]; then
setsid $BIN/v-add-sys-sftp-jail 2>/dev/null
fi
# Logging
log_event "$OK" "$ARGUMENTS"
exit

101
bin/v-add-backup-ftp-host Executable file
View file

@ -0,0 +1,101 @@
#!/bin/bash
# info: add backup ftp host
# options: HOST USERNAME PASSWORD [PATH] [PORT]
#
# The function adds ftp host for system backups
#----------------------------------------------------------#
# Variable&Function #
#----------------------------------------------------------#
# Argument defenition
host=$1
ftp_user=$2
ftp_password=$3
ftp_path=${4-/backup}
ftp_port=${5-21}
A3='******'
# Includes
source $VESTA/func/main.sh
source $VESTA/conf/vesta.conf
# Defining ftp command function
ftpc() {
ftp -p -n $host $ftp_port <<EOF
quote USER $ftp_user
quote PASS $ftp_password
binary
$1
$2
$3
quit
EOF
}
#----------------------------------------------------------#
# Verifications #
#----------------------------------------------------------#
check_args '3' "$#" "HOST USERNAME PASSWORD [PATH] [PORT]"
validate_format 'host' 'ftp_user' 'ftp_password'
#----------------------------------------------------------#
# Action #
#----------------------------------------------------------#
# Checking network connection
fconn=$(ftpc)
ferror=$(echo $fconn |grep -i -e failed -e error -e "Can't" -e "not conn")
if [ ! -z "$ferror" ]; then
echo "Error: can't login to ftp"
log_event "$E_CONNECT" "$EVENT"
exit $E_CONNECT
fi
# Checking write permissions
ftpc "mkdir $ftp_path" > /dev/null 2>&1
ftmpdir="$ftp_path/vst.bK76A9SUkt"
ftp_result=$(ftpc "mkdir $ftmpdir" "rm $ftmpdir"|grep -v Trying)
if [ ! -z "$ftp_result" ] ; then
echo "$ftp_result"
rm -rf $tmpdir
echo "Error: can't create temp folder on the ftp"
log_event "$E_FTP" "$EVENT"
exit $E_FTP
fi
# Adding backup host
echo "HOST='$host'
USERNAME='$ftp_user'
PASSWORD='$ftp_password'
BPATH='$ftp_path'
PORT='$ftp_port'
TIME='$TIME'
DATE='$DATE'" > $VESTA/conf/ftp.backup.conf
chmod 660 $VESTA/conf/ftp.backup.conf
#----------------------------------------------------------#
# Vesta #
#----------------------------------------------------------#
# Update vesta.conf
if [ -z "$(grep LANGUAGE $VESTA/conf/vesta.conf)" ]; then
echo "BACKUP_SYSTEM='ftp'" >> $VESTA/conf/vesta.conf
else
bckp=$(echo "$BACKUP_SYSTEM,ftp" |\
sed "s/,/\n/g"|\
sort -r -u |\
sed "/^$/d"|\
sed ':a;N;$!ba;s/\n/,/g')
sed -i "s/BACKUP_SYSTEM=.*/BACKUP_SYSTEM='$bckp'/g" $VESTA/conf/vesta.conf
fi
# Logging
log_event "$OK" "$EVENT"
exit

View file

@ -1,200 +0,0 @@
#!/bin/bash
# info: add backup host
# options: TYPE HOST USERNAME PASSWORD [PATH] [PORT]
#
# This function adds a backup host
#----------------------------------------------------------#
# Variable&Function #
#----------------------------------------------------------#
# Argument definition
type=$1
host=$2
user=$3
password=$4; HIDE=4
path=${5-/backup}
port=$6
# Includes
source $VESTA/func/main.sh
source $VESTA/conf/vesta.conf
# Defining ftp command function
ftpc() {
ftp -p -n $host $port <<EOF
quote USER $user
quote PASS $password
binary
$1
$2
$3
quit
EOF
}
# Defining sftp command function
sftpc() {
expect -f "-" <<EOF "$@"
set count 0
spawn /usr/bin/sftp -o StrictHostKeyChecking=no -o Port=$port $user@$host
expect {
"password:" {
send "$password\r"
exp_continue
}
-re "Couldn't|(.*)disconnect|(.*)stalled|(.*)not found" {
set count \$argc
set output "Disconnected."
set rc $E_FTP
exp_continue
}
-re ".*denied.*(publickey|password)." {
set output "Permission denied, wrong publickey or password."
set rc $E_CONNECT
}
"sftp>" {
if {\$count < \$argc} {
set arg [lindex \$argv \$count]
send "\$arg\r"
incr count
} else {
send "exit\r"
set output "Disconnected."
if {[info exists rc] != 1} {
set rc $OK
}
}
exp_continue
}
timeout {
set output "Connection timeout."
set rc $E_CONNECT
}
}
if {[info exists output] == 1} {
puts "\$output"
}
exit \$rc
EOF
}
#----------------------------------------------------------#
# Verifications #
#----------------------------------------------------------#
if [ "$type" != 'local' ];then
check_args '4' "$#" "TYPE HOST USERNAME PASSWORD [PATH] [PORT]"
is_format_valid 'user' 'host' 'path' 'port'
is_password_valid
if [ "$type" = 'sftp' ]; then
which expect >/dev/null 2>&1
check_result $? "expect command not found" $E_NOTEXIST
fi
host "$host" >/dev/null 2>&1
check_result $? "host connection failed" "$E_CONNECT"
fi
#----------------------------------------------------------#
# Action #
#----------------------------------------------------------#
# Checking network connection
if [ "$type" = 'ftp' ]; then
if [ -z $port ]; then
port=21
fi
fconn=$(ftpc 2>&1)
ferror=$(echo $fconn |\
grep -i -e failed -e error -e "can't" -e "not conn" -e "incorrect")
if [ ! -z "$ferror" ]; then
echo "Error: can't login to ftp $user@$host"
log_event "$E_CONNECT" "$ARGUMENTS"
exit $E_CONNECT
fi
# Checking write permissions
if [ -z $path ]; then
ftmpdir="vst.bK76A9SUkt"
else
ftpc "mkdir $path" > /dev/null 2>&1
ftmpdir="$path/vst.bK76A9SUkt"
fi
ftp_result=$(ftpc "mkdir $ftmpdir" "rm $ftmpdir"|grep -v Trying)
if [ ! -z "$ftp_result" ] ; then
echo "$ftp_result"
rm -rf $tmpdir
echo "Error: can't create $ftmpdir folder on the ftp"
log_event "$E_FTP" "$ARGUMENTS"
exit $E_FTP
fi
fi
if [ "$type" = 'sftp' ]; then
if [ -z $port ]; then
port=22
fi
if [ -z $path ]; then
sftmpdir="vst.bK76A9SUkt"
sftpc "mkdir $sftmpdir" "rmdir $sftmpdir" > /dev/null 2>&1
else
if sftpc "mkdir $path" > /dev/null 2>&1 ; then
sftmpdir="$path/vst.bK76A9SUkt"
sftpc "mkdir $sftmpdir" "rmdir $sftmpdir" > /dev/null 2>&1
else
sftmpdir="$path/vst.bK76A9SUkt"
sftpc "mkdir $sftmpdir" "rmdir $sftmpdir" > /dev/null 2>&1
fi
fi
rc=$?
if [[ "$rc" != 0 ]]; then
case $rc in
$E_CONNECT) echo "Error: can't login to sftp $user@$host";;
$E_FTP) echo "Error: can't create temp folder on the sftp host";;
esac
log_event "$rc" "$ARGUMENTS"
exit "$rc"
fi
fi
# Adding backup host
if [ $type != 'local' ]; then
time_n_date=$(date +'%T %F')
time=$(echo "$time_n_date" |cut -f 1 -d \ )
date=$(echo "$time_n_date" |cut -f 2 -d \ )
str="HOST='$host'\nUSERNAME='$user'\nPASSWORD='$password'"
str="$str\nBPATH='$path'\nPORT='$port'\nTIME='$time'\nDATE='$date'"
echo -e "$str" > $VESTA/conf/$type.backup.conf
chmod 660 $VESTA/conf/$type.backup.conf
fi
#----------------------------------------------------------#
# Vesta #
#----------------------------------------------------------#
# Update vesta.conf
if [ -z "$(grep BACKUP_SYSTEM $VESTA/conf/vesta.conf)" ]; then
echo "BACKUP_SYSTEM='$type'" >> $VESTA/conf/vesta.conf
else
bckp=$(echo "$BACKUP_SYSTEM,$type" |\
sed "s/,/\n/g"|\
sort -r -u |\
sed "/^$/d"|\
sed ':a;N;$!ba;s/\n/,/g')
sed -i "s/BACKUP_SYSTEM=.*/BACKUP_SYSTEM='$bckp'/g" $VESTA/conf/vesta.conf
fi
# Logging
log_event "$OK" "$ARGUMENTS"
exit

View file

@ -10,14 +10,14 @@
# Variable&Function # # Variable&Function #
#----------------------------------------------------------# #----------------------------------------------------------#
# Argument definition # Argument defenition
user=$1 user=$1
min=$2 min=$2
hour=$3 hour=$3
day=$4 day=$4
month=$5 month=$5
wday=$6 wday=$6
command=$(echo $7 |sed "s/'/%quote%/g") command=$(echo $7 | sed "s/'/%quote%/g")
job=$8 job=$8
restart=$9 restart=$9
@ -25,7 +25,8 @@ restart=$9
source $VESTA/func/main.sh source $VESTA/func/main.sh
source $VESTA/conf/vesta.conf source $VESTA/conf/vesta.conf
HIDE=7 # Assing new value
A7="$command"
#----------------------------------------------------------# #----------------------------------------------------------#
@ -33,13 +34,13 @@ HIDE=7
#----------------------------------------------------------# #----------------------------------------------------------#
check_args '7' "$#" 'USER MIN HOUR DAY MONTH WDAY COMMAND [JOB] [RESTART]' check_args '7' "$#" 'USER MIN HOUR DAY MONTH WDAY COMMAND [JOB] [RESTART]'
is_format_valid 'user' 'min' 'hour' 'day' 'month' 'wday' 'command' validate_format 'user' 'min' 'hour' 'day' 'month' 'wday' 'command'
is_system_enabled "$CRON_SYSTEM" 'CRON_SYSTEM' is_system_enabled "$CRON_SYSTEM" 'CRON_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_package_full 'CRON_JOBS' is_package_full 'CRON_JOBS'
get_next_cronjob get_next_cronjob
is_format_valid 'job' validate_format 'job'
is_object_new 'cron' 'JOB' "$job" is_object_new 'cron' 'JOB' "$job"
@ -47,14 +48,9 @@ is_object_new 'cron' 'JOB' "$job"
# Action # # Action #
#----------------------------------------------------------# #----------------------------------------------------------#
# Generating timestamp
time_n_date=$(date +'%T %F')
time=$(echo "$time_n_date" |cut -f 1 -d \ )
date=$(echo "$time_n_date" |cut -f 2 -d \ )
# Concatenating cron string # Concatenating cron string
str="JOB='$job' MIN='$min' HOUR='$hour' DAY='$day' MONTH='$month' WDAY='$wday'" str="JOB='$job' MIN='$min' HOUR='$hour' DAY='$day' MONTH='$month' WDAY='$wday'"
str="$str CMD='$command' SUSPENDED='no' TIME='$time' DATE='$date'" 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
@ -76,12 +72,14 @@ sync_cron_jobs
# Increasing cron value # Increasing cron value
increase_user_value $user '$U_CRON_JOBS' increase_user_value $user '$U_CRON_JOBS'
# Restarting crond # Restart crond
$BIN/v-restart-cron $BIN/v-restart-cron
check_result $? "Cron restart failed" >/dev/null if [ $? -ne 0 ]; then
exit $E_RESTART
fi
# Logging # Logging
log_history "added cron job $job" log_history "added cron job $job"
log_event "$OK" "$ARGUMENTS" log_event "$OK" "$EVENT"
exit exit

View file

@ -1,43 +0,0 @@
#!/bin/bash
# info: add letsencrypt cronjob
# options: NONE
#
# The script for enabling letsencrypt cronjob
#----------------------------------------------------------#
# Variable&Function #
#----------------------------------------------------------#
# Includes
source $VESTA/func/main.sh
source $VESTA/conf/vesta.conf
#----------------------------------------------------------#
# Verifications #
#----------------------------------------------------------#
is_system_enabled "$CRON_SYSTEM" 'CRON_SYSTEM'
#----------------------------------------------------------#
# Action #
#----------------------------------------------------------#
# Add cron job
cmd="sudo /usr/local/vesta/bin/v-update-sys-queue letsencrypt"
check_cron=$(grep "$cmd" $VESTA/data/users/admin/cron.conf 2> /dev/null)
if [ -z "$check_cron" ] && [ ! -z "$CRON_SYSTEM" ]; then
$BIN/v-add-cron-job admin '*/5' '*' '*' '*' '*' "$cmd"
fi
#----------------------------------------------------------#
# Vesta #
#----------------------------------------------------------#
# Logging
log_event "$OK" "$ARGUMENTS"
exit

View file

@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
# info: add cron reports # info: add cron reports
# options: user # opions: user
# #
# The script for enabling reports on cron tasks and administrative # The script for enabling reports on cron tasks and administrative
# notifications. # notifications.
@ -10,7 +10,7 @@
# Variable&Function # # Variable&Function #
#----------------------------------------------------------# #----------------------------------------------------------#
# Argument definition # Argument defenition
user=$1 user=$1
# Includes # Includes
@ -23,7 +23,7 @@ source $VESTA/conf/vesta.conf
#----------------------------------------------------------# #----------------------------------------------------------#
check_args '1' "$#" 'USER' check_args '1' "$#" 'USER'
is_format_valid 'user' validate_format 'user'
is_system_enabled "$CRON_SYSTEM" 'CRON_SYSTEM' is_system_enabled "$CRON_SYSTEM" 'CRON_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"
@ -46,10 +46,12 @@ sync_cron_jobs
# Restart crond # Restart crond
$BIN/v-restart-cron $BIN/v-restart-cron
check_result $? "Cron restart failed" >/dev/null if [ $? -ne 0 ]; then
exit $E_RESTART
fi
# Logging # Logging
log_history "enabled cron reporting" log_history "enabled cron reporting"
log_event "$OK" "$ARGUMENTS" log_event "$OK" "$EVENT"
exit exit

View file

@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
# info: add cron reports # info: add cron reports
# options: NONE # opions: NONE
# #
# The script for enabling restart cron tasks # The script for enabling restart cron tasks
@ -38,6 +38,6 @@ fi
#----------------------------------------------------------# #----------------------------------------------------------#
# Logging # Logging
log_event "$OK" "$ARGUMENTS" log_event "$OK" "$EVENT"
exit exit

View file

@ -9,7 +9,7 @@
# Variable&Function # # Variable&Function #
#----------------------------------------------------------# #----------------------------------------------------------#
# Argument definition # Argument defenition
user=admin user=admin
# Includes # Includes
@ -34,14 +34,9 @@ fi
# Action # # Action #
#----------------------------------------------------------# #----------------------------------------------------------#
# Generating timestamp # Define time somewhere at nigth
time_n_date=$(date +'%T %F') min=$(gen_password '012345' '2')
time=$(echo "$time_n_date" |cut -f 1 -d \ ) hour=$(gen_password '1234567' '1')
date=$(echo "$time_n_date" |cut -f 2 -d \ )
# Define time somewhere at night
min=$(generate_password '012345' '2')
hour=$(generate_password '1234567' '1')
day='*' day='*'
month='*' month='*'
wday='*' wday='*'
@ -49,7 +44,7 @@ command='sudo /usr/local/vesta/bin/v-update-sys-vesta-all'
# Concatenating cron string # Concatenating cron string
str="JOB='$job' MIN='$min' HOUR='$hour' DAY='$day' MONTH='$month' WDAY='$wday'" str="JOB='$job' MIN='$min' HOUR='$hour' DAY='$day' MONTH='$month' WDAY='$wday'"
str="$str CMD='$command' SUSPENDED='no' TIME='$time' DATE='$date'" 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
@ -71,12 +66,14 @@ sync_cron_jobs
# Increasing cron value # Increasing cron value
increase_user_value $user '$U_CRON_JOBS' increase_user_value $user '$U_CRON_JOBS'
# Restarting crond # Restart crond
$BIN/v-restart-cron $BIN/v-restart-cron
check_result $? "Cron restart failed" >/dev/null if [ $? -ne 0 ]; then
exit $E_RESTART
fi
# Logging # Logging
log_history "added cron job $job" log_history "added cron job $job"
log_event "$OK" "$ARGUMENTS" log_event "$OK" "$EVENT"
exit exit

View file

@ -15,11 +15,11 @@
# Variable&Function # # Variable&Function #
#----------------------------------------------------------# #----------------------------------------------------------#
# Argument definition # Argument defenition
user=$1 user=$1
database="$user"_"$2" database="$user"_"$2"
dbuser="$user"_"$3" dbuser="$user"_"$3"
password=$4; HIDE=4 dbpass=$4
type=${5-mysql} type=${5-mysql}
host=$6 host=$6
charset=${7-UTF8} charset=${7-UTF8}
@ -30,25 +30,27 @@ source $VESTA/func/main.sh
source $VESTA/func/db.sh source $VESTA/func/db.sh
source $VESTA/conf/vesta.conf source $VESTA/conf/vesta.conf
# Hiding password
A4='******'
EVENT="$DATE $TIME $SCRIPT $A1 $A2 $A3 $A4 $A5 $A6 $A7 $A8 $A9"
#----------------------------------------------------------# #----------------------------------------------------------#
# Verifications # # Verifications #
#----------------------------------------------------------# #----------------------------------------------------------#
check_args '4' "$#" 'USER DATABASE DBUSER DBPASS [TYPE] [HOST] [CHARSET]' check_args '4' "$#" 'USER DATABASE DBUSER DBPASS [TYPE] [HOST] [CHARSET]'
is_format_valid 'user' 'database' 'dbuser' 'charset' validate_format 'user' 'database' 'dbuser' 'dbpass' 'charset'
is_system_enabled "$DB_SYSTEM" 'DB_SYSTEM' is_system_enabled "$DB_SYSTEM" 'DB_SYSTEM'
is_type_valid "$DB_SYSTEM" "$type" is_type_valid "$DB_SYSTEM" "$type"
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_new 'db' 'DB' "$database" is_object_new 'db' 'DB' "$database"
get_next_dbhost get_next_dbhost
is_object_valid "../../../conf/$type" 'HOST' "$host" is_object_valid "../../../conf/$type" 'DBHOST' "$host"
is_object_unsuspended "../../../conf/$type" 'DBHOST' "$host" is_object_unsuspended "../../../conf/$type" 'DBHOST' "$host"
#is_charset_valid #is_charset_valid
is_package_full 'DATABASES' is_package_full 'DATABASES'
is_password_valid
dbpass="$password"
#----------------------------------------------------------# #----------------------------------------------------------#
@ -66,15 +68,14 @@ esac
# Vesta # # Vesta #
#----------------------------------------------------------# #----------------------------------------------------------#
# Generating timestamp # Update time and date
time_n_date=$(date +'%T %F') DATE=$(date +%F)
time=$(echo "$time_n_date" |cut -f 1 -d \ ) TIME=$(date +%T)
date=$(echo "$time_n_date" |cut -f 2 -d \ )
# Adding db to db conf # Adding db to db conf
str="DB='$database' DBUSER='$dbuser' MD5='$md5' HOST='$host' TYPE='$type'" str="DB='$database' DBUSER='$dbuser' MD5='$md5' HOST='$host' TYPE='$type'"
str="$str CHARSET='$charset' U_DISK='0' SUSPENDED='no' TIME='$time'" str="$str CHARSET='$charset' U_DISK='0' SUSPENDED='no' TIME='$TIME'"
str="$str DATE='$date'" str="$str DATE='$DATE'"
echo "$str" >> $USER_DATA/db.conf echo "$str" >> $USER_DATA/db.conf
chmod 660 $USER_DATA/db.conf chmod 660 $USER_DATA/db.conf
@ -84,6 +85,6 @@ increase_user_value "$user" '$U_DATABASES'
# Logging # Logging
log_history "added $type database $database" log_history "added $type database $database"
log_event "$OK" "$ARGUMENTS" log_event "$OK" "$EVENT"
exit exit

View file

@ -13,11 +13,11 @@
# Variable&Function # # Variable&Function #
#----------------------------------------------------------# #----------------------------------------------------------#
# Argument definition # Argument defenition
type=$1 type=$1
host=$2 host=$2
dbuser=$3 dbuser=$3
password=$4; HIDE=4 dbpass=$4
max_db=${6-500} max_db=${6-500}
charsets=${7-UTF8,LATIN1,WIN1250,WIN1251,WIN1252,WIN1256,WIN1258,KOI8} charsets=${7-UTF8,LATIN1,WIN1250,WIN1251,WIN1252,WIN1256,WIN1258,KOI8}
template=${8-template1} template=${8-template1}
@ -27,31 +27,8 @@ source $VESTA/func/main.sh
source $VESTA/func/db.sh source $VESTA/func/db.sh
source $VESTA/conf/vesta.conf source $VESTA/conf/vesta.conf
is_mysql_host_alive() { # Hiding password
mycnf=$(mktemp) A4='******'
echo "[client]">$mycnf
echo "host='$HOST'" >> $mycnf
echo "user='$USER'" >> $mycnf
echo "password='$PASSWORD'" >> $mycnf
chmod 600 $mycnf
mysql --defaults-file=$mycnf -e 'SELECT VERSION()' >/dev/null 2>&1
rm $mycnf
if [ '0' -ne "$?" ]; then
echo "Error: MySQL connection to $host failed"
log_event "$E_CONNECT" "$ARGUMENTS"
exit $E_CONNECT
fi
}
is_pgsql_host_alive() {
export PGPASSWORD="$dbpass"
psql -h $host -U $dbuser -c "SELECT VERSION()" > /dev/null 2>&1
if [ '0' -ne "$?" ]; then
echo "Error: PostgreSQL connection to $host failed"
log_event "$E_CONNECT" "$ARGUMENTS"
exit $E_CONNECT
fi
}
#----------------------------------------------------------# #----------------------------------------------------------#
@ -60,12 +37,10 @@ is_pgsql_host_alive() {
args_usage='TYPE HOST DBUSER DBPASS [MAX_DB] [CHARSETS] [TPL]' args_usage='TYPE HOST DBUSER DBPASS [MAX_DB] [CHARSETS] [TPL]'
check_args '4' "$#" "$args_usage" check_args '4' "$#" "$args_usage"
is_format_valid 'host' 'dbuser' 'max_db' 'charsets' 'template' validate_format 'host' 'dbuser' 'dbpass' 'max_db' 'charsets' 'template'
#is_system_enabled "$DB_SYSTEM" 'DB_SYSTEM' is_system_enabled "$DB_SYSTEM" 'DB_SYSTEM'
#is_type_valid "$DB_SYSTEM" "$type" is_type_valid "$DB_SYSTEM" "$type"
is_dbhost_new is_dbhost_new
is_password_valid
dbpass="$password"
case $type in case $type in
mysql) is_mysql_host_alive ;; mysql) is_mysql_host_alive ;;
pgsql) is_pgsql_host_alive ;; pgsql) is_pgsql_host_alive ;;
@ -76,44 +51,27 @@ esac
# Action # # Action #
#----------------------------------------------------------# #----------------------------------------------------------#
# Generating timestamp # Concatentating db host string
time_n_date=$(date +'%T %F')
time=$(echo "$time_n_date" |cut -f 1 -d \ )
date=$(echo "$time_n_date" |cut -f 2 -d \ )
# Concatenating db host string
case $type in case $type in
mysql) str="HOST='$host' USER='$dbuser' PASSWORD='$dbpass'"; mysql) str="HOST='$host' USER='$dbuser' PASSWORD='$dbpass'";
str="$str CHARSETS='$charsets' MAX_DB='$max_db' U_SYS_USERS=''"; str="$str CHARSETS='$charsets' MAX_DB='$max_db' U_SYS_USERS=''";
str="$str U_DB_BASES='0' SUSPENDED='no' TIME='$time' DATE='$date'";; str="$str U_DB_BASES='0' SUSPENDED='no' TIME='$TIME' DATE='$DATE'";;
pgsql) str="HOST='$host' USER='$dbuser' PASSWORD='$dbpass'"; pgsql) str="HOST='$host' USER='$dbuser' PASSWORD='$dbpass'";
str="$str CHARSETS='$charsets' TPL='$template' MAX_DB='$max_db'"; str="$str CHARSETS='$charsets' TPL='$template' MAX_DB='$max_db'";
str="$str U_SYS_USERS='' U_DB_BASES='0' SUSPENDED='no'"; str="$str U_SYS_USERS='' U_DB_BASES='0' SUSPENDED='no'";
str="$str TIME='$time' DATE='$date'";; str="$str TIME='$TIME' DATE='$DATE'";;
esac esac
# Adding host to conf
echo "$str" >> $VESTA/conf/$type.conf
chmod 660 $VESTA/conf/$type.conf
#----------------------------------------------------------# #----------------------------------------------------------#
# Vesta # # Vesta #
#----------------------------------------------------------# #----------------------------------------------------------#
# Adding host to conf
echo "$str" >> $VESTA/conf/$type.conf
chmod 660 $VESTA/conf/$type.conf
# Updating vesta.conf
if [ -z "$(grep DB_SYSTEM $VESTA/conf/vesta.conf)" ]; then
echo "DB_SYSTEM='$type'" >> $VESTA/conf/vesta.conf
else
db=$(echo "$DB_SYSTEM,$type" |\
sed "s/,/\n/g"|\
sort -r -u |\
sed "/^$/d"|\
sed ':a;N;$!ba;s/\n/,/g')
sed -i "s/DB_SYSTEM=.*/DB_SYSTEM='$db'/g" $VESTA/conf/vesta.conf
fi
# Logging # Logging
log_event "$OK" "$ARGUMENTS" log_event "$OK" "$EVENT"
exit exit

View file

@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
# info: add dns domain # info: add dns domain
# options: USER DOMAIN IP [NS1] [NS2] [NS3] [..] [NS8] [RESTART] # options: USER DOMAIN IP [NS1] [NS2] [NS3] [NS4] [RESTART]
# #
# The function adds DNS zone with records defined in the template. If the exp # The function adds DNS zone with records defined in the template. If the exp
# argument isn't stated, the expiration date value will be set to next year. # argument isn't stated, the expiration date value will be set to next year.
@ -13,75 +13,56 @@
# Variable&Function # # Variable&Function #
#----------------------------------------------------------# #----------------------------------------------------------#
# Argument definition # Argument defenition
user=$1 user=$1
domain=$2 domain=$(idn -t --quiet -u "$2" )
domain=$(echo $domain | sed -e 's/\.*$//g' -e 's/^\.*//g')
domain=$(echo $domain | tr '[:upper:]' '[:lower:]')
domain_idn=$(idn -t --quiet -a "$domain")
ip=$3 ip=$3
ns1=$4 ns1=$4
ns2=$5 ns2=$5
ns3=$6 ns3=$6
ns4=$7 ns4=$7
ns5=$8 restart=$8
ns6=$9
ns7=${10}
ns8=${11}
restart=${12}
# Includes # Includes
source $VESTA/func/main.sh source $VESTA/func/main.sh
source $VESTA/func/domain.sh source $VESTA/func/domain.sh
source $VESTA/conf/vesta.conf source $VESTA/conf/vesta.conf
# Additional argument formatting
format_domain
format_domain_idn
#----------------------------------------------------------# #----------------------------------------------------------#
# Verifications # # Verifications #
#----------------------------------------------------------# #----------------------------------------------------------#
check_args '3' "$#" 'USER DOMAIN IP [NS1] [NS2] [NS3] [..] [NS8] [RESTART]' check_args '3' "$#" 'USER DOMAIN IP [NS1] [NS2] [NS3] [NS4]'
is_format_valid 'user' 'domain' 'ip' validate_format 'user' 'domain' 'ip'
is_system_enabled "$DNS_SYSTEM" 'DNS_SYSTEM' is_system_enabled "$DNS_SYSTEM" 'DNS_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_domain_new 'dns' "$domain" is_domain_new 'dns'
is_package_full 'DNS_DOMAINS' is_package_full 'DNS_DOMAINS'
template=$(get_user_value '$DNS_TEMPLATE') template=$(get_user_value '$DNS_TEMPLATE')
is_dns_template_valid $template is_dns_template_valid
if [ ! -z "$ns1" ]; then if [ ! -z "$ns1" ]; then
ns1=$(echo $4 |sed -e 's/\.*$//g' -e 's/^\.*//g') ns1=$(echo $4 | sed -e 's/\.*$//g' -e 's/^\.*//g')
is_format_valid 'ns1' validate_format 'ns1'
fi fi
if [ ! -z "$ns2" ]; then if [ ! -z "$ns2" ]; then
ns2=$(echo $5 |sed -e 's/\.*$//g' -e 's/^\.*//g') ns2=$(echo $5 | sed -e 's/\.*$//g' -e 's/^\.*//g')
is_format_valid 'ns2' validate_format 'ns2'
fi fi
if [ ! -z "$ns3" ]; then if [ ! -z "$ns3" ]; then
ns3=$(echo $6 |sed -e 's/\.*$//g' -e 's/^\.*//g') ns3=$(echo $6 | sed -e 's/\.*$//g' -e 's/^\.*//g')
is_format_valid 'ns3' validate_format 'ns3'
fi fi
if [ ! -z "$ns4" ]; then if [ ! -z "$ns4" ]; then
ns4=$(echo $7 |sed -e 's/\.*$//g' -e 's/^\.*//g') ns4=$(echo $7 | sed -e 's/\.*$//g' -e 's/^\.*//g')
is_format_valid 'ns4' validate_format 'ns4'
fi
if [ ! -z "$ns5" ]; then
ns5=$(echo $8 |sed -e 's/\.*$//g' -e 's/^\.*//g')
is_format_valid 'ns5'
fi
if [ ! -z "$ns6" ]; then
ns6=$(echo $9 |sed -e 's/\.*$//g' -e 's/^\.*//g')
is_format_valid 'ns6'
fi
if [ ! -z "$ns7" ]; then
ns7=$(echo ${10} |sed -e 's/\.*$//g' -e 's/^\.*//g')
is_format_valid 'ns7'
fi
if [ ! -z "$ns8" ]; then
ns8=$(echo ${11} |sed -e 's/\.*$//g' -e 's/^\.*//g')
is_format_valid 'ns8'
fi fi
@ -100,7 +81,6 @@ if [ -z $ns2 ]; then
fi fi
soa="$ns1" soa="$ns1"
exp=$(date +%F -d "+ 1 year") exp=$(date +%F -d "+ 1 year")
serial=$(date +'%Y%m%d01')
ttl=14400 ttl=14400
# Reading template # Reading template
@ -108,30 +88,13 @@ template_data=$(cat $DNSTPL/$template.tpl)
# Deleting unused nameservers # Deleting unused nameservers
if [ -z "$ns3" ]; then if [ -z "$ns3" ]; then
template_data=$(echo "$template_data" |grep -v %ns3%) template_data=$(echo "$template_data" | grep -v %ns3%)
fi fi
if [ -z "$ns4" ]; then if [ -z "$ns4" ]; then
template_data=$(echo "$template_data" |grep -v %ns4%) template_data=$(echo "$template_data" | grep -v %ns4%)
fi
if [ -z "$ns5" ]; then
template_data=$(echo "$template_data" |grep -v %ns5%)
fi
if [ -z "$ns6" ]; then
template_data=$(echo "$template_data" |grep -v %ns6%)
fi
if [ -z "$ns7" ]; then
template_data=$(echo "$template_data" |grep -v %ns7%)
fi
if [ -z "$ns8" ]; then
template_data=$(echo "$template_data" |grep -v %ns8%)
fi fi
# Generating timestamp # Add dns zone to the user config
time_n_date=$(date +'%T %F')
time=$(echo "$time_n_date" |cut -f 1 -d \ )
date=$(echo "$time_n_date" |cut -f 2 -d \ )
# Adding dns zone to the user config
echo "$template_data" |\ echo "$template_data" |\
sed -e "s/%ip%/$ip/g" \ sed -e "s/%ip%/$ip/g" \
-e "s/%domain_idn%/$domain_idn/g" \ -e "s/%domain_idn%/$domain_idn/g" \
@ -140,25 +103,21 @@ echo "$template_data" |\
-e "s/%ns2%/$ns2/g" \ -e "s/%ns2%/$ns2/g" \
-e "s/%ns3%/$ns3/g" \ -e "s/%ns3%/$ns3/g" \
-e "s/%ns4%/$ns4/g" \ -e "s/%ns4%/$ns4/g" \
-e "s/%ns5%/$ns5/g" \ -e "s/%time%/$TIME/g" \
-e "s/%ns6%/$ns6/g" \ -e "s/%date%/$DATE/g" > $USER_DATA/dns/$domain.conf
-e "s/%ns7%/$ns7/g" \
-e "s/%ns8%/$ns8/g" \
-e "s/%time%/$time/g" \
-e "s/%date%/$date/g" > $USER_DATA/dns/$domain.conf
chmod 660 $USER_DATA/dns/$domain.conf chmod 660 $USER_DATA/dns/$domain.conf
records="$(wc -l $USER_DATA/dns/$domain.conf |cut -f 1 -d ' ')" records="$(wc -l $USER_DATA/dns/$domain.conf |cut -f 1 -d ' ')"
# Adding dns.conf record # Adding dns.conf record
dns_rec="DOMAIN='$domain' IP='$ip' TPL='$template' TTL='$ttl' EXP='$exp'" dns_rec="DOMAIN='$domain' IP='$ip' TPL='$template' TTL='$ttl' EXP='$exp'"
dns_rec="$dns_rec SOA='$soa' SERIAL='$serial' SRC='' RECORDS='$records'" dns_rec="$dns_rec SOA='$soa' RECORDS='$records' SUSPENDED='no' TIME='$TIME'"
dns_rec="$dns_rec SUSPENDED='no' TIME='$time' DATE='$date'" dns_rec="$dns_rec DATE='$DATE'"
echo "$dns_rec" >> $USER_DATA/dns.conf echo "$dns_rec" >> $USER_DATA/dns.conf
chmod 660 $USER_DATA/dns.conf chmod 660 $USER_DATA/dns.conf
# Creating system configs # Create system configs
if [[ "$DNS_SYSTEM" =~ named|bind ]]; then if [[ "$DNS_SYSTEM" =~ named|bind ]]; then
if [ -e '/etc/named.conf' ]; then if [ -e '/etc/named.conf' ]; then
dns_conf='/etc/named.conf' dns_conf='/etc/named.conf'
@ -176,14 +135,14 @@ if [[ "$DNS_SYSTEM" =~ named|bind ]]; then
# Updating domain dns zone # Updating domain dns zone
update_domain_zone update_domain_zone
# Changing permissions # Set permissions
chmod 640 $HOMEDIR/$user/conf/dns/$domain.db chmod 640 $conf
chown root:$dns_group $HOMEDIR/$user/conf/dns/$domain.db chown root:$dns_group $conf
fi fi
# Updating dns-cluster queue # Updating dns-cluster queue
if [ ! -z "$DNS_CLUSTER" ]; then if [ ! -z "$DNS_CLUSTER" ]; then
cmd="$BIN/v-add-remote-dns-domain $user $domain yes" cmd="$BIN/v-add-remote-dns-domain $user $domain no"
echo "$cmd" >> $VESTA/data/queue/dns-cluster.pipe echo "$cmd" >> $VESTA/data/queue/dns-cluster.pipe
fi fi
@ -197,11 +156,15 @@ increase_user_value "$user" '$U_DNS_DOMAINS'
increase_user_value "$user" '$U_DNS_RECORDS' "$records" increase_user_value "$user" '$U_DNS_RECORDS' "$records"
# Restart named # Restart named
$BIN/v-restart-dns $restart if [ "$restart" != 'no' ]; then
check_result $? "DNS restart failed" $BIN/v-restart-dns
if [ $? -ne 0 ]; then
exit $E_RESTART
fi
fi
# Logging # Logging
log_history "added dns domain $domain" log_history "added dns domain $domain"
log_event "$OK" "$ARGUMENTS" log_event "$OK" "$EVENT"
exit exit

View file

@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
# info: add dns domain or dns record after web domain alias # info: add dns domain or dns record based on web domain alias restart
# options: USER ALIAS IP [RESTART] # options: USER DOMAIN
# #
# The function adds dns domain or dns record based on web domain alias. # The function adds dns domain or dns record based on web domain alias.
@ -9,11 +9,15 @@
# Variable&Function # # Variable&Function #
#----------------------------------------------------------# #----------------------------------------------------------#
# Argument definition # Argument defenition
user=$1 user=$1
alias=$2 domain=$(echo $2 | sed -e 's/\.*$//g' -e 's/^\.*//g')
ip=$3 domain_idn=$(idn -t --quiet -a "$domain")
restart=$4 dom_alias=$(idn -t --quiet -u "$3" )
dom_alias=$(echo $dom_alias | sed -e 's/\.*$//g' -e 's/^\.*//g')
dom_alias=$(echo $dom_alias | tr '[:upper:]' '[:lower:]')
dom_alias_idn=$(idn -t --quiet -a "$dom_alias" )
restart="$4"
# Includes # Includes
source $VESTA/func/main.sh source $VESTA/func/main.sh
@ -25,54 +29,58 @@ source $VESTA/conf/vesta.conf
# Verifications # # Verifications #
#----------------------------------------------------------# #----------------------------------------------------------#
check_args '3' "$#" 'USER ALIAS IP [RESTART]' check_args '3' "$#" 'USER DOMAIN ALIAS'
is_format_valid 'user' 'alias' 'ip' validate_format 'user' 'domain'
is_system_enabled "$WEB_SYSTEM" 'WEB_SYSTEM'
is_system_enabled "$DNS_SYSTEM" 'DNS_SYSTEM' is_system_enabled "$DNS_SYSTEM" 'DNS_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"
if [ -e "$USER_DATA/dns/$alias.conf" ]; then is_object_valid 'web' 'DOMAIN' "$domain"
exit is_object_unsuspended 'web' 'DOMAIN' "$domain"
fi
#----------------------------------------------------------# #----------------------------------------------------------#
# Action # # Action #
#----------------------------------------------------------# #----------------------------------------------------------#
# Logging # Parsing domain values
log_event "$OK" "$ARGUMENTS" get_domain_values 'web'
# Define additional vars # Check if it a simple domain
sub_domain=$(echo "$alias" |awk -F '.' '{print $1}') if [ $(echo -e "${dom_alias//\./\n}" | wc -l) -le 2 ]; then
top_domain=$(echo "$alias" |sed -e "s/^$sub_domain.//") if [ ! -e "$USER_DATA/dns/$dom_alias.conf" ]; then
domain_lvl=$(echo "$alias" |grep -o "\." |wc -l)
# Adding second level domain
if [ "$domain_lvl" -eq 1 ] || [ "${#top_domain}" -le '6' ]; then
$BIN/v-add-dns-domain \ $BIN/v-add-dns-domain \
$user $alias $ip '' '' '' '' '' '' '' '' $restart >> /dev/null $user $dom_alias $IP '' '' '' '' '' $restart > /dev/null
exit fi
fi
# Adding top-level domain and then its sub
$BIN/v-add-dns-domain $user $top_domain $ip '' '' '' '' '' '' '' '' $restart >> /dev/null
# Checking top-level domain
if [ ! -e "$USER_DATA/dns/$top_domain.conf" ]; then
exit
fi
# Checking subdomain record
if [ "$sub_domain" == '*' ]; then
check_record=$(grep -w "RECORD='\*'" $USER_DATA/dns/$top_domain.conf)
else else
check_record=$(grep -w "RECORD='$sub_domain'" $USER_DATA/dns/$top_domain.conf) # Check subdomain
fi sub=$(echo "$dom_alias" | cut -f1 -d . -s)
dom=$(echo "$dom_alias" | sed -e "s/^$sub.//" )
# Adding subdomain record # Ignore short domains like co.uk, com.au and so on
if [ -z "$check_record" ]; then if [ "${#dom}" -le '6' ]; then
exit
fi
if [ ! -e "$USER_DATA/dns/$dom.conf" ]; then
$BIN/v-add-dns-domain \
$user $dom $IP '' '' '' '' $restart > /dev/null
if [ $? -eq 0 ]; then
$BIN/v-add-dns-record \ $BIN/v-add-dns-record \
$user $top_domain "$sub_domain" A $ip '' '' $restart >> /dev/null $user $dom "$sub" A $IP '' '' $restart
fi
else
if [ "$sub" == '*' ]; then
rec=$(grep -w "RECORD='\*'" $USER_DATA/dns/$dom.conf)
else
rec=$(grep -w "RECORD='$sub'" $USER_DATA/dns/$dom.conf)
fi
if [ -z "$rec" ]; then
$BIN/v-add-dns-record \
$user $dom "$sub" A $IP '' '' $restart > /dev/null
fi
fi
fi fi
@ -80,6 +88,6 @@ fi
# Vesta # # Vesta #
#----------------------------------------------------------# #----------------------------------------------------------#
# No logging # No Logging
exit exit

View file

@ -12,10 +12,11 @@
# Variable&Function # # Variable&Function #
#----------------------------------------------------------# #----------------------------------------------------------#
# Argument definition # Argument defenition
user=$1 user=$1
domain=$2 domain=$(idn -t --quiet -u "$2" )
domain_idn=$2 domain=$(echo $domain | tr '[:upper:]' '[:lower:]')
domain_idn=$(idn -t --quiet -a "$domain")
record=$(idn -t --quiet -u "$3" ) record=$(idn -t --quiet -u "$3" )
record=$(echo "$record" | tr '[:upper:]' '[:lower:]') record=$(echo "$record" | tr '[:upper:]' '[:lower:]')
rtype=$(echo "$4"| tr '[:lower:]' '[:upper:]') rtype=$(echo "$4"| tr '[:lower:]' '[:upper:]')
@ -40,31 +41,18 @@ fi
# Add trailing dot at the end of NS/CNAME/MX/PTR/SRV record # Add trailing dot at the end of NS/CNAME/MX/PTR/SRV record
if [[ $rtype =~ NS|CNAME|MX|PTR|SRV ]]; then if [[ $rtype =~ NS|CNAME|MX|PTR|SRV ]]; then
trailing_dot=$(echo $dvalue | grep "\.$") trailing_dot=$(echo $dvalue | grep "\.$")
if [ -z "$trailing_dot" ]; then if [ -z $trailing_dot ]; then
dvalue="$dvalue." dvalue="$dvalue."
fi fi
fi fi
if [ $rtype != "CAA" ]; then
dvalue=${dvalue//\"/}
if [[ "$dvalue" =~ [\;[:space:]] ]]; then
dvalue='"'"$dvalue"'"'
fi
fi
# Additional argument formatting
format_domain
format_domain_idn
# TODO: $domain_idn not used in this script - maybe $domain should be converted to $doman_idn ?
#----------------------------------------------------------# #----------------------------------------------------------#
# Verifications # # Verifications #
#----------------------------------------------------------# #----------------------------------------------------------#
check_args '5' "$#" 'USER DOMAIN RECORD TYPE VALUE [PRIORITY] [ID] [RESTART]' check_args '5' "$#" 'USER DOMAIN RECORD TYPE VALUE [PRIORITY] [ID] [RESTART]'
is_format_valid 'user' 'domain' 'record' 'rtype' 'dvalue' validate_format 'user' 'domain' 'record' 'rtype' 'dvalue'
is_system_enabled "$DNS_SYSTEM" 'DNS_SYSTEM' is_system_enabled "$DNS_SYSTEM" 'DNS_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"
@ -72,7 +60,7 @@ is_object_valid 'dns' 'DOMAIN' "$domain"
is_object_unsuspended 'dns' 'DOMAIN' "$domain" is_object_unsuspended 'dns' 'DOMAIN' "$domain"
is_package_full 'DNS_RECORDS' is_package_full 'DNS_RECORDS'
get_next_dnsrecord get_next_dnsrecord
is_format_valid 'id' validate_format 'id'
is_object_new "dns/$domain" 'ID' "$id" is_object_new "dns/$domain" 'ID' "$id"
is_dns_fqnd "$rtype" "$dvalue" is_dns_fqnd "$rtype" "$dvalue"
is_dns_nameserver_valid "$domain" "$rtype" "$dvalue" is_dns_nameserver_valid "$domain" "$rtype" "$dvalue"
@ -82,15 +70,10 @@ is_dns_nameserver_valid "$domain" "$rtype" "$dvalue"
# Action # # Action #
#----------------------------------------------------------# #----------------------------------------------------------#
# Generating timestamp
time_n_date=$(date +'%T %F')
time=$(echo "$time_n_date" |cut -f 1 -d \ )
date=$(echo "$time_n_date" |cut -f 2 -d \ )
# Adding record # Adding record
zone="$USER_DATA/dns/$domain.conf" zone="$USER_DATA/dns/$domain.conf"
dns_rec="ID='$id' RECORD='$record' TYPE='$rtype' PRIORITY='$priority'" dns_rec="ID='$id' RECORD='$record' TYPE='$rtype' PRIORITY='$priority'"
dns_rec="$dns_rec VALUE='$dvalue' SUSPENDED='no' TIME='$time' DATE='$date'" dns_rec="$dns_rec VALUE='$dvalue' SUSPENDED='no' TIME='$TIME' DATE='$DATE'"
echo "$dns_rec" >> $zone echo "$dns_rec" >> $zone
chmod 660 $zone chmod 660 $zone
@ -99,7 +82,6 @@ sort_dns_records
# Updating zone # Updating zone
if [[ "$DNS_SYSTEM" =~ named|bind ]]; then if [[ "$DNS_SYSTEM" =~ named|bind ]]; then
update_domain_serial
update_domain_zone update_domain_zone
fi fi
@ -118,17 +100,21 @@ fi
# Vesta # # Vesta #
#----------------------------------------------------------# #----------------------------------------------------------#
# Update counters # Upddate counters
records="$(wc -l $USER_DATA/dns/$domain.conf | cut -f1 -d ' ')" records="$(wc -l $USER_DATA/dns/$domain.conf | cut -f1 -d ' ')"
update_object_value 'dns' 'DOMAIN' "$domain" '$RECORDS' "$records" update_object_value 'dns' 'DOMAIN' "$domain" '$RECORDS' "$records"
increase_user_value "$user" '$U_DNS_RECORDS' increase_user_value "$user" '$U_DNS_RECORDS'
# Restart named # Restart named
$BIN/v-restart-dns $restart if [ "$restart" != 'no' ]; then
check_result $? $E_RESTART 'dns failed to restart' $BIN/v-restart-dns
if [ $? -ne 0 ]; then
exit $E_RESTART
fi
fi
# Logging # Logging
log_history "added $rtype dns record $record for $domain" log_history "added $rtype dns record $record for $domain"
log_event "$OK" "$ARGUMENTS" log_event "$OK" "$EVENT"
exit exit

View file

@ -25,9 +25,9 @@ source $VESTA/conf/vesta.conf
# Verifications # # Verifications #
#----------------------------------------------------------# #----------------------------------------------------------#
check_args '2' "$#" 'USER DOMAIN [IP] [RESTART]' check_args '2' "$#" 'USER DOMAIN [IP] [RESTART]'
is_format_valid 'user' 'domain' validate_format 'user' 'domain'
if [ ! -z "$ip" ] ; then if [ ! -z "$ip" ] ; then
is_format_valid 'ip' validate_format 'ip'
fi fi
is_object_valid 'user' 'USER' "$user" is_object_valid 'user' 'USER' "$user"
is_object_unsuspended 'user' 'USER' "$user" is_object_unsuspended 'user' 'USER' "$user"
@ -39,43 +39,50 @@ is_object_unsuspended 'user' 'USER' "$user"
# Get ip if it wasn't defined # Get ip if it wasn't defined
if [ -z "$ip" ]; then if [ -z "$ip" ]; then
get_user_ip ip=$(get_user_ip $user)
if [ -z "$ip" ]; then if [ -z "$ip" ]; then
check_result $E_NOTEXIST "no avaiable IP address" echo "Error: no avaiable IP address"
log_event "$E_NOTEXIST" "$EVENT"
exit $E_NOTEXIST
fi fi
fi fi
# Working on web domain # Web domain
if [ ! -z "$WEB_SYSTEM" ]; then if [ ! -z "$WEB_SYSTEM" ]; then
$BIN/v-add-web-domain $user $domain $ip 'no' $BIN/v-add-web-domain $user $domain $ip 'no'
check_result $? "can't add web domain" >/dev/null return_code=$?
fi fi
# Working on DNS domain # Proxy support
if [ ! -z "$DNS_SYSTEM" ]; then if [ ! -z "$PROXY_SYSTEM" ] && [ "$return_code" -eq 0 ]; then
$BIN/v-add-dns-domain $user $domain $ip "" "" "" "" "" '' '' '' 'no' extentions="jpg,jpeg,gif,png,ico,svg,css,zip,tgz,gz,rar,bz2,doc,xls"
check_result $? "can't add dns domain" >/dev/null extentions="$extentions,exe,pdf,ppt,txt,odt,ods,odp,odf,tar,wav"
extentions="$extentions,bmp,rtf,js,mp3,avi,mpeg,flv,html,htm"
$BIN/v-add-web-domain-proxy $user $domain 'default' "$extentions" 'no'
fi fi
# Working on mail domain # DNS domain
if [ ! -z "$MAIL_SYSTEM" ]; then if [ ! -z "$DNS_SYSTEM" ] && [ "$return_code" -eq 0 ]; then
$BIN/v-add-dns-domain $user $domain $ip 'no'
return_code=$?
fi
# Mail domain
if [ ! -z "$MAIL_SYSTEM" ] && [ "$return_code" -eq 0 ]; then
$BIN/v-add-mail-domain $user $domain $BIN/v-add-mail-domain $user $domain
check_result $? "can't add mail domain" >/dev/null return_code=$?
fi fi
# Restarting services # Restart services
$BIN/v-restart-web $restart if [ "$restart" != 'no' ] && [ "$return_code" -eq 0 ]; then
check_result $? "can't restart web" > /dev/null $BIN/v-restart-web
$BIN/v-restart-proxy
$BIN/v-restart-proxy $restart $BIN/v-restart-dns
check_result $? "can't restart proxy" > /dev/null fi
$BIN/v-restart-dns $restart
check_result $? "can't restart dns" > /dev/null
#----------------------------------------------------------# #----------------------------------------------------------#
# Vesta # # Vesta #
#----------------------------------------------------------# #----------------------------------------------------------#
exit exit $return_code

View file

@ -12,7 +12,7 @@
# Importing system variables # Importing system variables
source /etc/profile source /etc/profile
# Argument definition # Argument defenition
ip=$1 ip=$1
chain=$(echo $2|tr '[:lower:]' '[:upper:]') chain=$(echo $2|tr '[:lower:]' '[:upper:]')
@ -29,7 +29,7 @@ source $VESTA/conf/vesta.conf
#----------------------------------------------------------# #----------------------------------------------------------#
check_args '2' "$#" 'IP CHAIN' check_args '2' "$#" 'IP CHAIN'
is_format_valid 'ip' 'chain' validate_format 'ip' 'chain'
is_system_enabled "$FIREWALL_SYSTEM" 'FIREWALL_SYSTEM' is_system_enabled "$FIREWALL_SYSTEM" 'FIREWALL_SYSTEM'
@ -59,13 +59,8 @@ fi
# Adding chain # Adding chain
$BIN/v-add-firewall-chain $chain $BIN/v-add-firewall-chain $chain
# Generating timestamp
time_n_date=$(date +'%T %F')
time=$(echo "$time_n_date" |cut -f 1 -d \ )
date=$(echo "$time_n_date" |cut -f 2 -d \ )
# Adding ip to banlist # Adding ip to banlist
echo "IP='$ip' CHAIN='$chain' TIME='$time' DATE='$date'" >> $conf echo "IP='$ip' CHAIN='$chain' TIME='$TIME' DATE='$DATE'" >> $conf
$iptables -I fail2ban-$chain 1 -s $ip \ $iptables -I fail2ban-$chain 1 -s $ip \
-j REJECT --reject-with icmp-port-unreachable 2>/dev/null -j REJECT --reject-with icmp-port-unreachable 2>/dev/null
@ -78,6 +73,6 @@ chmod 660 $conf
#----------------------------------------------------------# #----------------------------------------------------------#
# Logging # Logging
log_event "$OK" "$ARGUMENTS" log_event "$OK" "$EVENT"
exit exit

View file

@ -12,7 +12,7 @@
# Importing system variables # Importing system variables
source /etc/profile source /etc/profile
# Argument definition # Argument defenition
chain=$(echo $1 | tr '[:lower:]' '[:upper:]') chain=$(echo $1 | tr '[:lower:]' '[:upper:]')
port=$2 port=$2
protocol=${4-TCP} protocol=${4-TCP}
@ -21,12 +21,6 @@ protocol=$(echo $protocol|tr '[:lower:]' '[:upper:]')
# Defining absolute path to iptables # Defining absolute path to iptables
iptables="/sbin/iptables" iptables="/sbin/iptables"
# Get vesta port by reading nginx.conf
vestaport=$(grep 'listen' $VESTA/nginx/conf/nginx.conf | awk '{print $2}' | sed "s|;||")
if [ -z "$vestaport" ]; then
vestaport=8083
fi
# Includes # Includes
source $VESTA/func/main.sh source $VESTA/func/main.sh
source $VESTA/conf/vesta.conf source $VESTA/conf/vesta.conf
@ -37,7 +31,7 @@ source $VESTA/conf/vesta.conf
#----------------------------------------------------------# #----------------------------------------------------------#
check_args '1' "$#" 'CHAIN [PORT] [PROTOCOL]' check_args '1' "$#" 'CHAIN [PORT] [PROTOCOL]'
is_format_valid 'chain' validate_format 'chain'
is_system_enabled "$FIREWALL_SYSTEM" 'FIREWALL_SYSTEM' is_system_enabled "$FIREWALL_SYSTEM" 'FIREWALL_SYSTEM'
@ -47,19 +41,13 @@ is_system_enabled "$FIREWALL_SYSTEM" 'FIREWALL_SYSTEM'
# Checking known chains # Checking known chains
case $chain in case $chain in
SSH) # Get ssh port by reading ssh config file. SSH) port=22; protocol=TCP ;;
sshport=$(grep '^Port ' /etc/ssh/sshd_config | head -1 | cut -d ' ' -f 2)
if [ -z "$sshport" ]; then
sshport=22
fi
port=$sshport;
protocol=TCP ;;
FTP) port=21; protocol=TCP ;; FTP) port=21; protocol=TCP ;;
MAIL) port='25,465,587,2525,110,995,143,993'; protocol=TCP ;; MAIL) port='25,465,587,2525,110,995,143,993'; protocol=TCP ;;
DNS) port=53; protocol=UDP ;; DNS) port=53; protocol=UDP ;;
WEB) port='80,443'; protocol=TCP ;; WEB) port='80,443'; protocol=TCP ;;
DB) port='3306,5432'; protocol=TCP ;; DB) port='3306,5432'; protocol=TCP ;;
VESTA) port=$vestaport; protocol=TCP ;; VESTA) port=8083; protocol=TCP ;;
*) check_args '2' "$#" 'CHAIN PORT' ;; *) check_args '2' "$#" 'CHAIN PORT' ;;
esac esac
@ -93,6 +81,6 @@ chmod 660 $chains
#----------------------------------------------------------# #----------------------------------------------------------#
# Logging # Logging
log_event "$OK" "$ARGUMENTS" log_event "$OK" "$EVENT"
exit exit

View file

@ -12,7 +12,7 @@
# Importing system variables # Importing system variables
source /etc/profile source /etc/profile
# Argument definition # Argument defenition
action=$(echo $1|tr '[:lower:]' '[:upper:]') action=$(echo $1|tr '[:lower:]' '[:upper:]')
ip=$2 ip=$2
port_ext=$3 port_ext=$3
@ -47,13 +47,13 @@ sort_fw_rules() {
#----------------------------------------------------------# #----------------------------------------------------------#
check_args '3' "$#" 'ACTION IP PORT [PROTOCOL] [COMMENT] [RULE]' check_args '3' "$#" 'ACTION IP PORT [PROTOCOL] [COMMENT] [RULE]'
is_format_valid 'action' 'protocol' 'port_ext' 'ip' validate_format 'action' 'protocol' 'port_ext' 'ip'
is_system_enabled "$FIREWALL_SYSTEM" 'FIREWALL_SYSTEM' is_system_enabled "$FIREWALL_SYSTEM" 'FIREWALL_SYSTEM'
get_next_fw_rule get_next_fw_rule
is_format_valid 'rule' validate_format 'rule'
is_object_new '../../data/firewall/rules' 'RULE' "$rule" is_object_new '../../data/firewall/rules' 'RULE' "$rule"
if [ ! -z "$comment" ]; then if [ ! -z "$comment"]; then
is_format_valid 'comment' validate_format 'comment'
fi fi
@ -61,15 +61,10 @@ fi
# Action # # Action #
#----------------------------------------------------------# #----------------------------------------------------------#
# Generating timestamp
time_n_date=$(date +'%T %F')
time=$(echo "$time_n_date" |cut -f 1 -d \ )
date=$(echo "$time_n_date" |cut -f 2 -d \ )
# Concatenating rule # Concatenating rule
str="RULE='$rule' ACTION='$action' PROTOCOL='$protocol' PORT='$port_ext'" str="RULE='$rule' ACTION='$action' PROTOCOL='$protocol' PORT='$port_ext'"
str="$str IP='$ip' COMMENT='$comment' SUSPENDED='no'" str="$str IP='$ip' COMMENT='$comment' SUSPENDED='no'"
str="$str TIME='$time' DATE='$date'" str="$str TIME='$TIME' DATE='$DATE'"
# Adding to config # Adding to config
echo "$str" >> $VESTA/data/firewall/rules.conf echo "$str" >> $VESTA/data/firewall/rules.conf
@ -89,6 +84,6 @@ $BIN/v-update-firewall
#----------------------------------------------------------# #----------------------------------------------------------#
# Logging # Logging
log_event "$OK" "$ARGUMENTS" log_event "$OK" "$EVENT"
exit exit

View file

@ -1,76 +0,0 @@
#!/bin/bash
# info: archive directory
# options: USER ARCHIVE SOURCE
#
# The function creates tar archive
user=$1
archive=$2
src0=$3
# Checking arguments
if [ -z "$src0" ]; then
echo "Usage: USER ARCHIVE FILE [FILE_2] [FILE_3] [FILE ...]"
exit 1
fi
# Checking vesta user
if [ ! -e "$VESTA/data/users/$user" ]; then
echo "Error: vesta user $user doesn't exist"
exit 3
fi
# Checking user homedir
homedir=$(grep "^$user:" /etc/passwd |cut -f 6 -d :)
if [ -z $homedir ]; then
echo "Error: user home directory doesn't exist"
exit 12
fi
# Checking archive
if [ -e "$archive" ]; then
echo "Error: archive already exist $archive"
exit 1
fi
# Checking source path
IFS=$'\n'
i=1
for src in $*; do
if [ "$i" -gt 2 ]; then
rpath=$(readlink -f "$src")
if [ -z "$(echo $rpath |egrep "^/tmp|^$homedir")" ]; then
echo "Error: invalid source path $src"
exit 1
fi
fi
((i++))
done
i=1
for src in $*; do
if [ "$i" -gt 2 ]; then
# Deleting leading home path
src=$(echo "$src"| sed -e "s|/home/$user/||")
# Creating tar.gz archive
sudo -u $user tar -rf "${archive/.gz/}" -C /home/$user $src >\
/dev/null 2>&1
if [ "$?" -ne 0 ]; then
echo "Error: archive $archive was not created"
exit 3
fi
fi
((i++))
done
# Checking gzip
if [[ "$archive" =~ \.gz$ ]]; then
sudo -u $user gzip "${archive/.gz/}" >/dev/null 2>&1
if [ "$?" -ne 0 ]; then
echo "Error: archive $archive was not gziped"
exit 3
fi
fi
exit

View file

@ -1,44 +0,0 @@
#!/bin/bash
# info: add directory
# options: USER DIRECTORY
#
# The function creates new directory on the file system
user=$1
dst_dir=$2
# Checking arguments
if [ -z "$dst_dir" ]; then
echo "Usage: USER DIRECTORY"
exit 1
fi
# Checking vesta user
if [ ! -e "$VESTA/data/users/$user" ]; then
echo "Error: vesta user $user doesn't exist"
exit 3
fi
# Checking user homedir
homedir=$(grep "^$user:" /etc/passwd | cut -f 6 -d :)
if [ -z $homedir ]; then
echo "Error: user home directory doesn't exist"
exit 12
fi
# Checking destination path
rpath=$(readlink -f "$dst_dir")
if [ -z "$(echo $rpath |egrep "^/tmp|^$homedir")" ]; then
echo "Error: invalid destination path $dst_dir"
exit 2
fi
# Adding directory
sudo -u $user mkdir -p "$dst_dir" >/dev/null 2>&1
if [ $? -ne 0 ]; then
echo "Error: directory $dst_dir was not created"
exit 3
fi
# Extiging
exit

View file

@ -1,44 +0,0 @@
#!/bin/bash
# info: add file
# options: USER FILE
#
# The function creates new files on file system
user=$1
dst_file=$2
# Checking arguments
if [ -z "$dst_file" ]; then
echo "Usage: USER FILE"
exit 1
fi
# Checking vesta user
if [ ! -e "$VESTA/data/users/$user" ]; then
echo "Error: vesta user $user doesn't exist"
exit 3
fi
# Checking user homedir
homedir=$(grep "^$user:" /etc/passwd | cut -f 6 -d :)
if [ -z $homedir ]; then
echo "Error: user home directory doesn't exist"
exit 12
fi
# Checking destination path
rpath=$(readlink -f "$dst_file")
if [ -z "$(echo $rpath |egrep "^/tmp|^$homedir")" ]; then
echo "Error: invalid destination path $dst_dir"
exit 2
fi
# Creating file
sudo -u $user touch "$dst_file" >/dev/null 2>&1
if [ $? -ne 0 ]; then
echo "Error: file $dst_file was not created"
exit 3
fi
# Exiting
exit

View file

@ -1,399 +0,0 @@
#!/bin/bash
# info: check letsencrypt domain
# options: USER DOMAIN [ALIASES]
#
# The function check and validates domain with Let's Encript
#----------------------------------------------------------#
# Variable&Function #
#----------------------------------------------------------#
# Argument definition
user=$1
domain=$2
aliases=$3
# LE API
API='https://acme-v02.api.letsencrypt.org'
# Includes
source $VESTA/func/main.sh
source $VESTA/func/domain.sh
source $VESTA/conf/vesta.conf
# Additional argument formatting
format_identifier_idn() {
identifier_idn=$identifier
if [[ "$identifier_idn" = *[![:ascii:]]* ]]; then
identifier_idn=$(idn -t --quiet -a $identifier_idn)
fi
}
# encode base64
encode_base64() {
cat |base64 |tr '+/' '-_' |tr -d '\r\n='
}
# Let's Encrypt v2 curl function
query_le_v2() {
protected='{"nonce": "'$3'",'
protected=''$protected' "url": "'$1'",'
protected=''$protected' "alg": "RS256", "kid": "'$KID'"}'
content="Content-Type: application/jose+json"
payload_=$(echo -n "$2" |encode_base64)
protected_=$(echo -n "$protected" |encode_base64)
signature_=$(printf "%s" "$protected_.$payload_" |\
openssl dgst -sha256 -binary -sign $USER_DATA/ssl/user.key |\
encode_base64)
post_data='{"protected":"'"$protected_"'",'
post_data=$post_data'"payload":"'"$payload_"'",'
post_data=$post_data'"signature":"'"$signature_"'"}'
# Save http response to file passed as "$4" arg or print to stdout if not provided
# http response headers are always sent to stdout
local save_to_file=${4:-"/dev/stdout"}
curl --silent --dump-header /dev/stdout --data "$post_data" "$1" --header "$content" --output "$save_to_file"
}
#----------------------------------------------------------#
# Verifications #
#----------------------------------------------------------#
check_args '2' "$#" 'USER DOMAIN [ALIASES]'
is_format_valid 'user' 'domain' 'aliases'
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'
echo "-----------------------------------------------------------------------------------" >> /usr/local/vesta/log/letsencrypt.log
echo "[$(date)] : v-add-letsencrypt-domain $domain [$aliases]" >> /usr/local/vesta/log/letsencrypt.log
# check if alias is the letsencrypt wildcard domain, if not, make the normal checks
if [[ "$aliases" != "*.$domain" ]]; then
for alias in $(echo "$aliases" |tr ',' '\n' |sort -u); do
check_alias="$(echo $ALIAS |tr ',' '\n' |grep ^$alias$)"
if [ -z "$check_alias" ]; then
echo "[$(date)] : EXIT=domain alias $alias doesn't exist" >> /usr/local/vesta/log/letsencrypt.log
check_result $E_NOTEXIST "domain alias $alias doesn't exist"
fi
done
fi;
#----------------------------------------------------------#
# Action #
#----------------------------------------------------------#
# Registering LetsEncrypt user account
echo "[$(date)] : v-add-letsencrypt-user $user" >> /usr/local/vesta/log/letsencrypt.log
$BIN/v-add-letsencrypt-user $user
echo "[$(date)] : result: $?" >> /usr/local/vesta/log/letsencrypt.log
if [ "$?" -ne 0 ]; then
touch $VESTA/data/queue/letsencrypt.pipe
sed -i "/ $domain /d" $VESTA/data/queue/letsencrypt.pipe
send_notice "LETSENCRYPT" "Account registration failed"
echo "[$(date)] : EXIT=LE account registration" >> /usr/local/vesta/log/letsencrypt.log
check_result $E_CONNECT "LE account registration" >/dev/null
fi
# Parsing LetsEncrypt account data
source $USER_DATA/ssl/le.conf
# Checking wildcard alias
if [ "$aliases" = "*.$domain" ]; then
echo "[$(date)] : Checking wildcard alias" >> /usr/local/vesta/log/letsencrypt.log
wildcard='yes'
proto="dns-01"
if [ ! -e "$VESTA/data/users/$user/dns/$domain.conf" ]; then
echo "[$(date)] : EXIT=DNS domain $domain doesn't exist" >> /usr/local/vesta/log/letsencrypt.log
check_result $E_NOTEXIST "DNS domain $domain doesn't exist"
fi
else
proto="http-01"
fi
# Requesting nonce / STEP 1
echo "[$(date)] : --- Requesting nonce / STEP 1 ---" >> /usr/local/vesta/log/letsencrypt.log
echo "[$(date)] : curl -s -I \"$API/directory\"" >> /usr/local/vesta/log/letsencrypt.log
answer=$(curl -s -I "$API/directory")
echo "[$(date)] : answer=$answer" >> /usr/local/vesta/log/letsencrypt.log
nonce=$(echo "$answer" |grep -i nonce |cut -f2 -d \ |tr -d '\r\n')
echo "[$(date)] : nonce=$nonce" >> /usr/local/vesta/log/letsencrypt.log
status=$(echo "$answer"|grep HTTP/ |tail -n1 |cut -f 2 -d ' ')
echo "[$(date)] : status=$status" >> /usr/local/vesta/log/letsencrypt.log
if [[ "$status" -ne 200 ]]; then
echo "[$(date)] : EXIT=Let's Encrypt nonce request status $status" >> /usr/local/vesta/log/letsencrypt.log
check_result $E_CONNECT "Let's Encrypt nonce request status $status"
fi
# Placing new order / STEP 2
echo "[$(date)] : --- Placing new order / STEP 2 ---" >> /usr/local/vesta/log/letsencrypt.log
url="$API/acme/new-order"
payload='{"identifiers":['
for identifier in $(echo $domain,$aliases |tr ',' '\n' |sort -u); do
format_identifier_idn
payload=$payload'{"type":"dns","value":"'$identifier_idn'"},'
done
payload=$(echo "$payload"|sed "s/,$//")
payload=$payload']}'
echo "[$(date)] : payload=$payload" >> /usr/local/vesta/log/letsencrypt.log
echo "[$(date)] : query_le_v2 \"$url\" \"$payload\" \"$nonce\"" >> /usr/local/vesta/log/letsencrypt.log
answer=$(query_le_v2 "$url" "$payload" "$nonce")
echo "[$(date)] : answer=$answer" >> /usr/local/vesta/log/letsencrypt.log
nonce=$(echo "$answer" |grep -i nonce |cut -f2 -d \ |tr -d '\r\n')
echo "[$(date)] : nonce=$nonce" >> /usr/local/vesta/log/letsencrypt.log
authz=$(echo "$answer" |grep "acme/authz" |cut -f2 -d '"')
echo "[$(date)] : authz=$authz" >> /usr/local/vesta/log/letsencrypt.log
finalize=$(echo "$answer" |grep 'finalize":' |cut -f4 -d '"')
echo "[$(date)] : finalize=$finalize" >> /usr/local/vesta/log/letsencrypt.log
status=$(echo "$answer" |grep HTTP/ |tail -n1 |cut -f2 -d ' ')
echo "[$(date)] : status=$status" >> /usr/local/vesta/log/letsencrypt.log
if [[ "$status" -ne 201 ]]; then
echo "[$(date)] : EXIT=Let's Encrypt new auth status $status" >> /usr/local/vesta/log/letsencrypt.log
check_result $E_CONNECT "Let's Encrypt new auth status $status"
fi
# Requesting authorization token / STEP 3
echo "[$(date)] : --- Requesting authorization token / STEP 3 ---" >> /usr/local/vesta/log/letsencrypt.log
for auth in $authz; do
payload=''
echo "[$(date)] : for auth=$auth" >> /usr/local/vesta/log/letsencrypt.log
echo "[$(date)] : query_le_v2 \"$auth\" \"$payload\" \"$nonce\"" >> /usr/local/vesta/log/letsencrypt.log
answer=$(query_le_v2 "$auth" "$payload" "$nonce")
echo "[$(date)] : answer=$answer" >> /usr/local/vesta/log/letsencrypt.log
url=$(echo "$answer" |grep -A3 $proto |grep '"url"' |cut -f 4 -d \")
echo "[$(date)] : url=$url" >> /usr/local/vesta/log/letsencrypt.log
token=$(echo "$answer" |grep -A3 $proto |grep token |cut -f 4 -d \")
echo "[$(date)] : token=$token" >> /usr/local/vesta/log/letsencrypt.log
nonce=$(echo "$answer" |grep -i nonce |cut -f2 -d \ |tr -d '\r\n')
echo "[$(date)] : nonce=$nonce" >> /usr/local/vesta/log/letsencrypt.log
status=$(echo "$answer"|grep HTTP/ |tail -n1 |cut -f 2 -d ' ')
echo "[$(date)] : status=$status" >> /usr/local/vesta/log/letsencrypt.log
if [[ "$status" -ne 200 ]]; then
echo "[$(date)] : EXIT=Let's Encrypt acme/authz bad status $status" >> /usr/local/vesta/log/letsencrypt.log
check_result $E_CONNECT "Let's Encrypt acme/authz bad status $status"
fi
# Configuring challenge / STEP 4
echo "[$(date)] : --- Configuring challenge / STEP 4 ---" >> /usr/local/vesta/log/letsencrypt.log
echo "[$(date)] : wildcard=$wildcard" >> /usr/local/vesta/log/letsencrypt.log
if [ "$wildcard" = 'yes' ]; then
record=$(printf "%s" "$token.$THUMB" |\
openssl dgst -sha256 -binary |encode_base64)
old_records=$($BIN/v-list-dns-records $user $domain plain|grep 'TXT')
old_records=$(echo "$old_records" |grep _acme-challenge |cut -f 1)
for old_record in $old_records; do
$BIN/v-delete-dns-record "$user" "$domain" "$old_record"
done
$BIN/v-add-dns-record "$user" "$domain" "_acme-challenge" "TXT" "$record"
exitstatus=$?
echo "[$(date)] : v-add-dns-record \"$user\" \"$domain\" \"_acme-challenge\" \"TXT\" \"$record\"" >> /usr/local/vesta/log/letsencrypt.log
if [ "$exitstatus" -ne 0 ]; then
echo "[$(date)] : EXIT=DNS _acme-challenge record wasn't created" >> /usr/local/vesta/log/letsencrypt.log
fi
check_result $exitstatus "DNS _acme-challenge record wasn't created"
else
if [ "$WEB_SYSTEM" = 'nginx' ] || [ ! -z "$PROXY_SYSTEM" ]; then
if [ -f "/usr/local/vesta/web/inc/nginx_proxy" ]; then
# if vesta is behind main nginx
well_known="$HOMEDIR/$user/web/$domain/public_html/.well-known"
acme_challenge="$well_known/acme-challenge"
mkdir -p $acme_challenge
echo "$token.$THUMB" > $acme_challenge/$token
echo "[$(date)] : in $acme_challenge/$token we put: $token.$THUMB" >> /usr/local/vesta/log/letsencrypt.log
chown -R $user:$user $well_known
else
# default nginx method
conf="$HOMEDIR/$user/conf/web/nginx.$domain.conf_letsencrypt"
sconf="$HOMEDIR/$user/conf/web/snginx.$domain.conf_letsencrypt"
# if [ ! -e "$conf" ]; then
echo 'location ~ "^/\.well-known/acme-challenge/(.*)$" {' \
> $conf
echo ' default_type text/plain;' >> $conf
echo ' return 200 "$1.'$THUMB'";' >> $conf
echo '}' >> $conf
# fi
echo "[$(date)] : in $conf we put: $THUMB" >> /usr/local/vesta/log/letsencrypt.log
if [ ! -e "$sconf" ]; then
ln -s "$conf" "$sconf"
fi
echo "[$(date)] : v-restart-proxy" >> /usr/local/vesta/log/letsencrypt.log
$BIN/v-restart-proxy
if [ -z "$PROXY_SYSTEM" ]; then
# apache-less variant
echo "[$(date)] : v-restart-web" >> /usr/local/vesta/log/letsencrypt.log
$BIN/v-restart-web
fi
exitstatus=$?
if [ "$exitstatus" -ne 0 ]; then
echo "[$(date)] : EXIT=Proxy restart failed = $exitstatus" >> /usr/local/vesta/log/letsencrypt.log
fi
check_result $exitstatus "Proxy restart failed" >/dev/null
fi
else
well_known="$HOMEDIR/$user/web/$domain/public_html/.well-known"
acme_challenge="$well_known/acme-challenge"
mkdir -p $acme_challenge
echo "$token.$THUMB" > $acme_challenge/$token
chown -R $user:$user $well_known
echo "[$(date)] : in $acme_challenge/$token we put: $token.$THUMB" >> /usr/local/vesta/log/letsencrypt.log
# $BIN/v-restart-web
# check_result $? "Web restart failed" >/dev/null
fi
fi
# Requesting ACME validation / STEP 5
echo "[$(date)] : --- Requesting ACME validation / STEP 5 ---" >> /usr/local/vesta/log/letsencrypt.log
validation_check=$(echo "$answer" |grep '"valid"')
echo "[$(date)] : validation_check=$validation_check" >> /usr/local/vesta/log/letsencrypt.log
if [[ ! -z "$validation_check" ]]; then
validation='valid'
else
validation='pending'
fi
# Doing pol check on status
i=1
while [ "$validation" = 'pending' ]; do
echo "[$(date)] : - Doing pol check on status" >> /usr/local/vesta/log/letsencrypt.log
payload='{}'
echo "[$(date)] : query_le_v2 \"$url\" \"$payload\" \"$nonce\"" >> /usr/local/vesta/log/letsencrypt.log
answer=$(query_le_v2 "$url" "$payload" "$nonce")
echo "[$(date)] : answer=$answer" >> /usr/local/vesta/log/letsencrypt.log
validation=$(echo "$answer"|grep -A1 $proto |tail -n1|cut -f4 -d \")
echo "[$(date)] : validation=$validation" >> /usr/local/vesta/log/letsencrypt.log
nonce=$(echo "$answer" |grep -i nonce |cut -f2 -d \ |tr -d '\r\n')
echo "[$(date)] : nonce=$nonce" >> /usr/local/vesta/log/letsencrypt.log
status=$(echo "$answer"|grep HTTP/ |tail -n1 |cut -f 2 -d ' ')
echo "[$(date)] : status=$status" >> /usr/local/vesta/log/letsencrypt.log
if [[ "$status" -ne 200 ]]; then
echo "[$(date)] : EXIT=Let's Encrypt validation status $status" >> /usr/local/vesta/log/letsencrypt.log
check_result $E_CONNECT "Let's Encrypt validation status $status"
fi
i=$((i + 1))
if [ "$i" -gt 10 ]; then
echo "[$(date)] : EXIT=Let's Encrypt domain validation timeout" >> /usr/local/vesta/log/letsencrypt.log
check_result $E_CONNECT "Let's Encrypt domain validation timeout"
fi
sleeping=$((i*2))
echo "[$(date)] : sleep $sleeping (i=$i)" >> /usr/local/vesta/log/letsencrypt.log
sleep $sleeping
done
if [ "$validation" = 'invalid' ]; then
echo "[$(date)] : EXIT=Let's Encrypt domain verification failed" >> /usr/local/vesta/log/letsencrypt.log
check_result $E_CONNECT "Let's Encrypt domain verification failed"
fi
done
# Generating new ssl certificate
ssl_dir=$($BIN/v-generate-ssl-cert "$domain" "info@$domain" "US" "California"\
"San Francisco" "Vesta" "IT" "$aliases" |tail -n1 |awk '{print $2}')
# Sending CSR to finalize order / STEP 6
echo "[$(date)] : --- Sending CSR to finalize order / STEP 6 ---" >> /usr/local/vesta/log/letsencrypt.log
csr=$(openssl req -in $ssl_dir/$domain.csr -outform DER |encode_base64)
payload='{"csr":"'$csr'"}'
echo "[$(date)] : query_le_v2 \"$finalize\" \"$payload\" \"$nonce\"" >> /usr/local/vesta/log/letsencrypt.log
answer=$(query_le_v2 "$finalize" "$payload" "$nonce")
echo "[$(date)] : answer=$answer" >> /usr/local/vesta/log/letsencrypt.log
nonce=$(echo "$answer" |grep -i nonce |cut -f2 -d \ |tr -d '\r\n')
echo "[$(date)] : nonce=$nonce" >> /usr/local/vesta/log/letsencrypt.log
status=$(echo "$answer"|grep HTTP/ |tail -n1 |cut -f 2 -d ' ')
echo "[$(date)] : status=$status" >> /usr/local/vesta/log/letsencrypt.log
certificate=$(echo "$answer"|grep 'certificate":' |cut -f4 -d '"')
echo "[$(date)] : certificate=$certificate" >> /usr/local/vesta/log/letsencrypt.log
if [[ "$status" -ne 200 ]]; then
echo "[$(date)] : EXIT=Let's Encrypt finalize bad status $status" >> /usr/local/vesta/log/letsencrypt.log
check_result $E_CONNECT "Let's Encrypt finalize bad status $status"
fi
# Downloading signed certificate / STEP 7
echo "[$(date)] : --- Downloading signed certificate / STEP 7 ---" >> /usr/local/vesta/log/letsencrypt.log
echo "[$(date)] : query_le_v2 \"$certificate\" \"\" \"$nonce\"" >> /usr/local/vesta/log/letsencrypt.log
answer=$(query_le_v2 "$certificate" "" "$nonce" "$ssl_dir/$domain.pem")
echo "[$(date)] : answer=$answer" >> /usr/local/vesta/log/letsencrypt.log
status=$(echo "$answer"|grep HTTP/ |tail -n1 |cut -f 2 -d ' ')
echo "[$(date)] : status=$status" >> /usr/local/vesta/log/letsencrypt.log
if [[ "$status" -ne 200 ]]; then
[ -d "$ssl_dir" ] && rm -rf "$ssl_dir"
echo "[$(date)] : EXIT=Let's Encrypt downloading signed cert failed status: $status" >> /usr/local/vesta/log/letsencrypt.log
check_result $E_NOTEXIST "Let's Encrypt downloading signed cert failed status: $status"
fi
# Splitting up downloaded pem
# echo "[$(date)] : - Splitting up downloaded pem" >> /usr/local/vesta/log/letsencrypt.log
crt_end=$(grep -n 'END CERTIFICATE' $ssl_dir/$domain.pem |head -n1 |cut -f1 -d:)
# echo "[$(date)] : crt_end=$crt_end" >> /usr/local/vesta/log/letsencrypt.log
head -n $crt_end $ssl_dir/$domain.pem > $ssl_dir/$domain.crt
pem_lines=$(wc -l $ssl_dir/$domain.pem |cut -f 1 -d ' ')
# echo "[$(date)] : pem_lines=$pem_lines" >> /usr/local/vesta/log/letsencrypt.log
ca_end=$(grep -n 'BEGIN CERTIFICATE' $ssl_dir/$domain.pem |tail -n1 |cut -f 1 -d :)
# echo "[$(date)] : ca_end=$ca_end" >> /usr/local/vesta/log/letsencrypt.log
ca_end=$(( pem_lines - crt_end + 1 ))
# echo "[$(date)] : ca_end=$ca_end" >> /usr/local/vesta/log/letsencrypt.log
tail -n $ca_end $ssl_dir/$domain.pem > $ssl_dir/$domain.ca
# Temporary fix for double "END CERTIFICATE"
if [[ $(head -n 1 $ssl_dir/$domain.ca) = "-----END CERTIFICATE-----" ]]; then
sed -i '1,2d' $ssl_dir/$domain.ca
fi
# Adding SSL
ssl_home=$(search_objects 'web' 'LETSENCRYPT' 'yes' 'SSL_HOME')
$BIN/v-delete-web-domain-ssl $user $domain >/dev/null 2>&1
echo "[$(date)] : v-add-web-domain-ssl $user $domain $ssl_dir $ssl_home" >> /usr/local/vesta/log/letsencrypt.log
$BIN/v-add-web-domain-ssl $user $domain $ssl_dir $ssl_home
exitstatus=$?
echo "[$(date)] : v-add-web-domain-ssl status: $exitstatus" >> /usr/local/vesta/log/letsencrypt.log
if [ "$exitstatus" -ne '0' ]; then
touch $VESTA/data/queue/letsencrypt.pipe
sed -i "/ $domain /d" $VESTA/data/queue/letsencrypt.pipe
echo "[$(date)] : EXIT=$domain certificate installation failed" >> /usr/local/vesta/log/letsencrypt.log
send_notice 'LETSENCRYPT' "$domain certificate installation failed"
check_result $exitstatus "SSL install" >/dev/null
fi
# Adding LE autorenew cronjob
if [ -z "$(grep v-update-lets $VESTA/data/users/admin/cron.conf)" ]; then
min=$(generate_password '012345' '2')
hour=$(generate_password '1234567' '1')
cmd="sudo $BIN/v-update-letsencrypt-ssl"
$BIN/v-add-cron-job admin "$min" "$hour" '*' '*' '*' "$cmd" > /dev/null
fi
# Updating letsencrypt key
if [ -z "$LETSENCRYPT" ]; then
add_object_key "web" 'DOMAIN' "$domain" 'LETSENCRYPT' 'FTP_USER'
fi
update_object_value 'web' 'DOMAIN' "$domain" '$LETSENCRYPT' 'yes'
reset_web_counter "$user" "$domain" 'LETSENCRYPT_FAIL_COUNT'
#----------------------------------------------------------#
# Vesta #
#----------------------------------------------------------#
# Deleteing task from queue
touch $VESTA/data/queue/letsencrypt.pipe
sed -i "/ $domain /d" $VESTA/data/queue/letsencrypt.pipe
# Notifying user
send_notice 'LETSENCRYPT' "$domain SSL has been installed successfully"
echo "[$(date)] : EXIT=***** $domain SSL has been installed successfully *****" >> /usr/local/vesta/log/letsencrypt.log
# Logging
log_event "$OK" "$ARGUMENTS"
exit

View file

@ -1,141 +0,0 @@
#!/bin/bash
# info: register letsencrypt user account
# options: USER
#
# The function creates and register LetsEncript account
#----------------------------------------------------------#
# Variable&Function #
#----------------------------------------------------------#
# Argument definition
user=$1
# LE API
API='https://acme-v02.api.letsencrypt.org'
# Includes
source $VESTA/func/main.sh
source $VESTA/conf/vesta.conf
# encode base64
encode_base64() {
cat |base64 |tr '+/' '-_' |tr -d '\r\n='
}
# Let's Encrypt v2 curl function
query_le_v2() {
protected='{"nonce": "'$3'",'
protected=''$protected' "url": "'$1'",'
protected=''$protected' "alg": "RS256", "jwk": '$jwk'}'
content="Content-Type: application/jose+json"
payload_=$(echo -n "$2" |encode_base64)
protected_=$(echo -n "$protected" |encode_base64)
signature_=$(printf "%s" "$protected_.$payload_" |\
openssl dgst -sha256 -binary -sign $USER_DATA/ssl/user.key |\
encode_base64)
post_data='{"protected":"'"$protected_"'",'
post_data=$post_data'"payload":"'"$payload_"'",'
post_data=$post_data'"signature":"'"$signature_"'"}'
curl -s -i -d "$post_data" "$1" -H "$content"
}
#----------------------------------------------------------#
# Verifications #
#----------------------------------------------------------#
check_args '1' "$#" 'USER'
is_format_valid 'user'
is_object_valid 'user' 'USER' "$user"
if [ -e "$USER_DATA/ssl/le.conf" ]; then
source "$USER_DATA/ssl/le.conf"
fi
if [ ! -z "$KID" ]; then
exit
fi
#----------------------------------------------------------#
# Action #
#----------------------------------------------------------#
# Defining user email
if [[ -z "$EMAIL" ]]; then
EMAIL=$(get_user_value '$CONTACT')
fi
# Defining user agreement
agreement=''
# Generating user key
KEY="$USER_DATA/ssl/user.key"
if [ ! -e "$KEY" ]; then
openssl genrsa -out $KEY 4096 >/dev/null 2>&1
chmod 600 $KEY
fi
# Defining key exponent
if [ -z "$EXPONENT" ]; then
EXPONENT=$(openssl pkey -inform pem -in "$KEY" -noout -text_pub |\
grep Exponent: |cut -f 2 -d '(' |cut -f 1 -d ')' |sed -e 's/x//' |\
xxd -r -p |encode_base64)
fi
# Defining key modulus
if [ -z "$MODULUS" ]; then
MODULUS=$(openssl rsa -in "$KEY" -modulus -noout |\
sed -e 's/^Modulus=//' |xxd -r -p |encode_base64)
fi
# Defining JWK
jwk='{"e":"'$EXPONENT'","kty":"RSA","n":"'"$MODULUS"'"}'
# Defining key thumbnail
if [ -z "$THUMB" ]; then
THUMB="$(echo -n "$jwk" |openssl dgst -sha256 -binary |encode_base64)"
fi
# Requesting ACME nonce
nonce=$(curl -s -I "$API/directory" |grep -i nonce |cut -f2 -d\ |tr -d '\r\n')
# Creating ACME account
url="$API/acme/new-acct"
payload='{"termsOfServiceAgreed": true}'
answer=$(query_le_v2 "$url" "$payload" "$nonce")
kid=$(echo "$answer" |grep -i location: |cut -f2 -d ' '|tr -d '\r')
# Checking answer status
status=$(echo "$answer" |grep HTTP/ |tail -n1 |cut -f2 -d ' ')
if [[ "${status:0:2}" -ne "20" ]]; then
check_result $E_CONNECT "Let's Encrypt acc registration failed $status"
fi
#----------------------------------------------------------#
# Vesta #
#----------------------------------------------------------#
# Adding le.conf
if [ ! -e "$USER_DATA/ssl/le.conf" ]; then
echo "EXPONENT='$EXPONENT'" > $USER_DATA/ssl/le.conf
echo "MODULUS='$MODULUS'" >> $USER_DATA/ssl/le.conf
echo "THUMB='$THUMB'" >> $USER_DATA/ssl/le.conf
echo "EMAIL='$EMAIL'" >> $USER_DATA/ssl/le.conf
echo "KID='$kid'" >> $USER_DATA/ssl/le.conf
chmod 660 $USER_DATA/ssl/le.conf
else
sed -i '/^KID=/d' $USER_DATA/ssl/le.conf
echo "KID='$kid'" >> $USER_DATA/ssl/le.conf
fi
# Logging
log_event "$OK" "$ARGUMENTS"
exit

View file

@ -9,22 +9,23 @@
# Variable&Function # # Variable&Function #
#----------------------------------------------------------# #----------------------------------------------------------#
# Argument definition # Argument defenition
user=$1 user=$1
domain=$2 domain=$(idn -t --quiet -u "$2" )
account=$3 domain=$(echo $domain | tr '[:upper:]' '[:lower:]')
password=$4; HIDE=4 domain_idn=$(idn -t --quiet -a "$domain")
quota=${5-unlimited} account=$(echo $3 | tr '[:upper:]' '[:lower:]')
password=$4
quota=${5-0}
# Includes # Includes
source $VESTA/func/main.sh source $VESTA/func/main.sh
source $VESTA/func/domain.sh source $VESTA/func/domain.sh
source $VESTA/conf/vesta.conf source $VESTA/conf/vesta.conf
# Additional argument formatting # Hiding password
if [[ "$account" =~ [[:upper:]] ]]; then A4='******'
account=$(echo "$account" |tr '[:upper:]' '[:lower:]') EVENT="$DATE $TIME $SCRIPT $A1 $A2 $A3 $A4 $A5 $A6 $A7 $A8 $A9"
fi
#----------------------------------------------------------# #----------------------------------------------------------#
@ -32,10 +33,7 @@ fi
#----------------------------------------------------------# #----------------------------------------------------------#
check_args '4' "$#" 'USER DOMAIN ACCOUNT PASSWORD [QUOTA]' check_args '4' "$#" 'USER DOMAIN ACCOUNT PASSWORD [QUOTA]'
is_format_valid 'user' 'domain' 'account' validate_format 'user' 'domain' 'account' 'password' 'quota'
if [ "$quota" != 'unlimited' ]; then
is_format_valid 'quota'
fi
is_system_enabled "$MAIL_SYSTEM" 'MAIL_SYSTEM' is_system_enabled "$MAIL_SYSTEM" 'MAIL_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"
@ -43,22 +41,19 @@ is_object_valid 'mail' 'DOMAIN' "$domain"
is_object_unsuspended 'mail' 'DOMAIN' "$domain" is_object_unsuspended 'mail' 'DOMAIN' "$domain"
is_package_full 'MAIL_ACCOUNTS' is_package_full 'MAIL_ACCOUNTS'
is_mail_new "$account" is_mail_new "$account"
is_password_valid
#----------------------------------------------------------# #----------------------------------------------------------#
# Action # # Action #
#----------------------------------------------------------# #----------------------------------------------------------#
# Generating hashed password if [ -x '/usr/bin/doveadm' ]; then
salt=$(generate_password "$PW_MATRIX" "8") md5=$(/usr/bin/doveadm pw -s md5 -p "$password")
md5="{MD5}$($BIN/v-generate-password-hash md5 $salt <<<$password)" else
md5=$(/usr/sbin/dovecotpw -s md5 -p "$password")
fi
# Adding account info into password file
if [[ "$MAIL_SYSTEM" =~ exim ]]; then if [[ "$MAIL_SYSTEM" =~ exim ]]; then
if [ "$quota" = 'unlimited' ]; then
quota='0'
fi
str="$account:$md5:$user:mail::$HOMEDIR/$user:$quota" str="$account:$md5:$user:mail::$HOMEDIR/$user:$quota"
echo $str >> $HOMEDIR/$user/conf/mail/$domain/passwd echo $str >> $HOMEDIR/$user/conf/mail/$domain/passwd
fi fi
@ -68,18 +63,9 @@ fi
# Vesta # # Vesta #
#----------------------------------------------------------# #----------------------------------------------------------#
# Generating timestamp str="ACCOUNT='$account' ALIAS='' QUOTA='$quota' AUTOREPLY='no' FWD=''"
time_n_date=$(date +'%T %F') str="$str FWD_ONLY='' MD5='$md5' U_DISK='0' SUSPENDED='no' TIME='$TIME'"
time=$(echo "$time_n_date" |cut -f 1 -d \ ) str="$str DATE='$DATE'"
date=$(echo "$time_n_date" |cut -f 2 -d \ )
if [[ "$quota" -eq '0' ]]; then
quota='unlimited'
fi
str="ACCOUNT='$account' ALIAS='' AUTOREPLY='no' FWD='' FWD_ONLY=''"
str="$str MD5='$md5' QUOTA='$quota' U_DISK='0' SUSPENDED='no'"
str="$str TIME='$time' DATE='$date'"
echo "$str" >> $USER_DATA/mail/$domain.conf echo "$str" >> $USER_DATA/mail/$domain.conf
chmod 660 $USER_DATA/mail/$domain.conf chmod 660 $USER_DATA/mail/$domain.conf
@ -90,6 +76,6 @@ update_object_value 'mail' 'DOMAIN' "$domain" '$ACCOUNTS' "$accounts"
# Logging # Logging
log_history "added mail account $account@$domain" log_history "added mail account $account@$domain"
log_event "$OK" "$ARGUMENTS" log_event "$OK" "$EVENT"
exit exit

View file

@ -9,10 +9,11 @@
# Variable&Function # # Variable&Function #
#----------------------------------------------------------# #----------------------------------------------------------#
# Argument definition # Argument defenition
user=$1 user=$1
domain=$2 domain=$(idn -t --quiet -u "$2" )
domain_idn=$2 domain=$(echo $domain | tr '[:upper:]' '[:lower:]')
domain_idn=$(idn -t --quiet -a "$domain")
account=$3 account=$3
malias=$4 malias=$4
@ -21,18 +22,13 @@ source $VESTA/func/main.sh
source $VESTA/func/domain.sh source $VESTA/func/domain.sh
source $VESTA/conf/vesta.conf source $VESTA/conf/vesta.conf
# Additional argument formatting
format_domain
format_domain_idn
# TODO: $domain_idn not used in this script - maybe $domain should be converted to $doman_idn ?
#----------------------------------------------------------# #----------------------------------------------------------#
# Verifications # # Verifications #
#----------------------------------------------------------# #----------------------------------------------------------#
check_args '4' "$#" 'USER DOMAIN ACCOUNT ALIAS' check_args '4' "$#" 'USER DOMAIN ACCOUNT ALIAS'
is_format_valid 'user' 'domain' 'account' 'malias' validate_format 'user' 'domain' 'account' 'malias'
is_system_enabled "$MAIL_SYSTEM" 'MAIL_SYSTEM' is_system_enabled "$MAIL_SYSTEM" 'MAIL_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"
@ -49,7 +45,7 @@ is_mail_new "$malias"
# Adding exim alias # Adding exim alias
if [[ "$MAIL_SYSTEM" =~ exim ]]; then if [[ "$MAIL_SYSTEM" =~ exim ]]; then
str="$malias@$domain_idn:$account@$domain_idn" str="$malias@$domain:$account@$domain"
echo "$str" >> $HOMEDIR/$user/conf/mail/$domain/aliases echo "$str" >> $HOMEDIR/$user/conf/mail/$domain/aliases
fi fi
@ -69,6 +65,6 @@ update_object_value "mail/$domain" 'ACCOUNT' "$account" '$ALIAS' "$aliases"
# Logging # Logging
log_history "added alias $malias to $account@$domain " log_history "added alias $malias to $account@$domain "
log_event "$OK" "$ARGUMENTS" log_event "$OK" "$EVENT"
exit exit

View file

@ -9,10 +9,11 @@
# Variable&Function # # Variable&Function #
#----------------------------------------------------------# #----------------------------------------------------------#
# Argument definition # Argument defenition
user=$1 user=$1
domain=$2 domain=$(idn -t --quiet -u "$2" )
domain_idn=$2 domain=$(echo $domain | tr '[:upper:]' '[:lower:]')
domain_idn=$(idn -t --quiet -a "$domain")
account=$3 account=$3
autoreply=$4 autoreply=$4
@ -28,18 +29,13 @@ else
MAIL_USER=exim MAIL_USER=exim
fi fi
# Additional argument formatting
format_domain
format_domain_idn
# TODO: $domain_idn not used in this script - maybe $domain should be converted to $doman_idn ?
#----------------------------------------------------------# #----------------------------------------------------------#
# Verifications # # Verifications #
#----------------------------------------------------------# #----------------------------------------------------------#
check_args '4' "$#" 'USER DOMAIN ACCOUNT MESSAGE' check_args '4' "$#" 'USER DOMAIN ACCOUNT MESSAGE'
is_format_valid 'user' 'domain' 'account' 'autoreply' validate_format 'user' 'domain' 'account' 'autoreply'
is_system_enabled "$MAIL_SYSTEM" 'MAIL_SYSTEM' is_system_enabled "$MAIL_SYSTEM" 'MAIL_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"
@ -74,6 +70,6 @@ update_object_value "mail/$domain" 'ACCOUNT' "$account" '$AUTOREPLY' 'yes'
# Logging # Logging
log_history "added autoreply message on $account@$domain" log_history "added autoreply message on $account@$domain"
log_event "$OK" "$ARGUMENTS" log_event "$OK" "$EVENT"
exit exit

View file

@ -9,10 +9,11 @@
# Variable&Function # # Variable&Function #
#----------------------------------------------------------# #----------------------------------------------------------#
# Argument definition # Argument defenition
user=$1 user=$1
domain=$2 domain=$(idn -t --quiet -u "$2" )
domain_idn=$2 domain=$(echo $domain | tr '[:upper:]' '[:lower:]')
domain_idn=$(idn -t --quiet -a "$domain")
account=$3 account=$3
forward=$4 forward=$4
@ -21,17 +22,13 @@ source $VESTA/func/main.sh
source $VESTA/func/domain.sh source $VESTA/func/domain.sh
source $VESTA/conf/vesta.conf source $VESTA/conf/vesta.conf
# Additional argument formatting
format_domain
format_domain_idn
#----------------------------------------------------------# #----------------------------------------------------------#
# Verifications # # Verifications #
#----------------------------------------------------------# #----------------------------------------------------------#
check_args '4' "$#" 'USER DOMAIN ACCOUNT FORWARD' check_args '4' "$#" 'USER DOMAIN ACCOUNT FORWARD'
is_format_valid 'user' 'domain' 'account' 'forward' validate_format 'user' 'domain' 'account' 'forward'
is_system_enabled "$MAIL_SYSTEM" 'MAIL_SYSTEM' is_system_enabled "$MAIL_SYSTEM" 'MAIL_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"
@ -42,7 +39,7 @@ is_object_unsuspended "mail/$domain" 'ACCOUNT' "$account"
fwd=$(get_object_value "mail/$domain" 'ACCOUNT' "$account" '$FWD') fwd=$(get_object_value "mail/$domain" 'ACCOUNT' "$account" '$FWD')
if [ ! -z "$(echo $fwd | grep -w $forward)" ]; then if [ ! -z "$(echo $fwd | grep -w $forward)" ]; then
echo "Error: forward $forward exists" echo "Error: forward $forward exists"
log_event "$E_EXISTS $ARGUMENTS" log_event "$E_EXISTS $EVENT"
exit $E_EXISTS exit $E_EXISTS
fi fi
@ -60,8 +57,8 @@ fi
# Adding forward to exim # Adding forward to exim
if [[ "$MAIL_SYSTEM" =~ exim ]]; then if [[ "$MAIL_SYSTEM" =~ exim ]]; then
sed -i "/^$account@$domain_idn:/ d" $HOMEDIR/$user/conf/mail/$domain/aliases sed -i "/^$account@$domain:/ d" $HOMEDIR/$user/conf/mail/$domain/aliases
echo "$account@$domain_idn:$fwd" >> $HOMEDIR/$user/conf/mail/$domain/aliases echo "$account@$domain:$fwd" >> $HOMEDIR/$user/conf/mail/$domain/aliases
fi fi
@ -74,6 +71,6 @@ update_object_value "mail/$domain" 'ACCOUNT' "$account" '$FWD' "$fwd"
# Logging # Logging
log_history "added forwarding from $account@$domain to $forward" log_history "added forwarding from $account@$domain to $forward"
log_event "$OK" "$ARGUMENTS" log_event "$OK" "$EVENT"
exit exit

View file

@ -9,10 +9,11 @@
# Variable&Function # # Variable&Function #
#----------------------------------------------------------# #----------------------------------------------------------#
# Argument definition # Argument defenition
user=$1 user=$1
domain=$2 domain=$(idn -t --quiet -u "$2" )
domain_idn=$2 domain=$(echo $domain | tr '[:upper:]' '[:lower:]')
domain_idn=$(idn -t --quiet -a "$domain")
account=$3 account=$3
# Includes # Includes
@ -27,18 +28,13 @@ else
MAIL_USER=exim MAIL_USER=exim
fi fi
# Additional argument formatting
format_domain
format_domain_idn
# TODO: $domain_idn not used in this script - maybe $domain should be converted to $doman_idn ?
#----------------------------------------------------------# #----------------------------------------------------------#
# Verifications # # Verifications #
#----------------------------------------------------------# #----------------------------------------------------------#
check_args '3' "$#" 'USER DOMAIN ACCOUNT' check_args '3' "$#" 'USER DOMAIN ACCOUNT'
is_format_valid 'user' 'domain' 'account' validate_format 'user' 'domain' 'account'
is_system_enabled "$MAIL_SYSTEM" 'MAIL_SYSTEM' is_system_enabled "$MAIL_SYSTEM" 'MAIL_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"
@ -49,7 +45,7 @@ is_object_unsuspended "mail/$domain" 'ACCOUNT' "$account"
fwd=$(get_object_value "mail/$domain" 'ACCOUNT' "$account" '$FWD') fwd=$(get_object_value "mail/$domain" 'ACCOUNT' "$account" '$FWD')
if [ -z "$fwd" ]; then if [ -z "$fwd" ]; then
echo "Error: forward doesn't exist" echo "Error: forward doesn't exist"
log_event "$E_NOTEXIST $ARGUMENTS" log_event "$E_NOTEXIST $EVENT"
exit $E_NOTEXIST exit $E_NOTEXIST
fi fi
@ -60,7 +56,7 @@ fi
# Adding account to fwd_only # Adding account to fwd_only
if [[ "$MAIL_SYSTEM" =~ exim ]]; then if [[ "$MAIL_SYSTEM" =~ exim ]]; then
echo "$account" >> $HOMEDIR/$user/conf/mail/$domain/fwd_only echo "$account" > $HOMEDIR/$user/conf/mail/$domain/fwd_only
chown -R $MAIL_USER:mail $HOMEDIR/$user/conf/mail/$domain/fwd_only chown -R $MAIL_USER:mail $HOMEDIR/$user/conf/mail/$domain/fwd_only
fi fi
@ -75,6 +71,6 @@ update_object_value "mail/$domain" 'ACCOUNT' "$account" '$FWD_ONLY' "yes"
# Logging # Logging
log_history "added fwd_only flag for $account@$domain" log_history "added fwd_only flag for $account@$domain"
log_event "$OK" "$ARGUMENTS" log_event "$OK" "$EVENT"
exit exit

View file

@ -9,9 +9,12 @@
# Variable&Function # # Variable&Function #
#----------------------------------------------------------# #----------------------------------------------------------#
# Argument definition # Argument defenition
user=$1 user=$1
domain=$2 domain=$(idn -t --quiet -u "$2" )
domain=$(echo $domain | sed -e 's/\.*$//g' -e 's/^\.*//g')
domain=$(echo $domain | tr '[:upper:]' '[:lower:]')
domain_idn=$(idn -t --quiet -a "$domain")
antispam=${3-yes} antispam=${3-yes}
antivirus=${4-yes} antivirus=${4-yes}
dkim=${5-yes} dkim=${5-yes}
@ -29,38 +32,28 @@ else
MAIL_USER=exim MAIL_USER=exim
fi fi
# Additional argument formatting
format_domain
format_domain_idn
#----------------------------------------------------------# #----------------------------------------------------------#
# Verifications # # Verifications #
#----------------------------------------------------------# #----------------------------------------------------------#
check_args '2' "$#" 'USER DOMAIN [ANTISPAM] [ANTIVIRUS] [DKIM] [DKIM_SIZE]' check_args '2' "$#" 'USER DOMAIN [ANTISPAM] [ANTIVIRUS] [DKIM] [DKIM_SIZE]'
is_format_valid 'user' 'domain' 'antispam' 'antivirus' 'dkim' 'dkim_size' validate_format 'user' 'domain' 'antispam' 'antivirus' 'dkim' 'dkim_size'
is_system_enabled "$MAIL_SYSTEM" 'MAIL_SYSTEM' is_system_enabled "$MAIL_SYSTEM" 'MAIL_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_domain_new 'mail' "$domain" is_domain_new 'mail'
is_package_full 'MAIL_DOMAINS' is_package_full 'MAIL_DOMAINS'
is_dir_symlink $HOMEDIR/$user/mail
#----------------------------------------------------------# #----------------------------------------------------------#
# Action # # Action #
#----------------------------------------------------------# #----------------------------------------------------------#
# Generating timestamp
time_n_date=$(date +'%T %F')
time=$(echo "$time_n_date" |cut -f 1 -d \ )
date=$(echo "$time_n_date" |cut -f 2 -d \ )
# Adding domain to mail.conf # Adding domain to mail.conf
s="DOMAIN='$domain' ANTIVIRUS='$antivirus' ANTISPAM='$antispam' DKIM='$dkim'" s="DOMAIN='$domain' ANTIVIRUS='$antivirus' ANTISPAM='$antispam' DKIM='$dkim'"
s="$s CATCHALL='' ACCOUNTS='0' U_DISK='0' SUSPENDED='no' TIME='$time'" s="$s ACCOUNTS='0' U_DISK='0' CATCHALL='' SUSPENDED='no' TIME='$TIME'"
s="$s DATE='$date'" s="$s DATE='$DATE'"
echo $s >> $USER_DATA/mail.conf echo $s >> $USER_DATA/mail.conf
touch $USER_DATA/mail/$domain.conf touch $USER_DATA/mail/$domain.conf
@ -120,10 +113,10 @@ if [ ! -z "$DNS_SYSTEM" ] && [ "$dkim" = 'yes' ]; then
p=$(cat $USER_DATA/mail/$domain.pub|grep -v ' KEY---'|tr -d '\n') p=$(cat $USER_DATA/mail/$domain.pub|grep -v ' KEY---'|tr -d '\n')
record='_domainkey' record='_domainkey'
policy="\"t=y; o=~;\"" policy="\"t=y; o=~;\""
$BIN/v-add-dns-record $user $domain $record TXT "$policy" '' '' 'no' $BIN/v-add-dns-record $user $domain $record TXT "$policy"
record='mail._domainkey' record='mail._domainkey'
selector="\"v=DKIM1\; k=rsa\; p=$p\"" selector="\"k=rsa\; p=$p\""
$BIN/v-add-dns-record $user $domain $record TXT "$selector" $BIN/v-add-dns-record $user $domain $record TXT "$selector"
fi fi
fi fi
@ -141,6 +134,6 @@ fi
# Logging # Logging
log_history "added mail domain $domain" log_history "added mail domain $domain"
log_event "$OK" "$ARGUMENTS" log_event "$OK" "$EVENT"
exit exit

View file

@ -2,35 +2,31 @@
# info: add mail domain antispam support # info: add mail domain antispam support
# options: USER DOMAIN # options: USER DOMAIN
# #
# The function enables spamassasin for incoming emails. # The function enables spamassasin for incomming emails.
#----------------------------------------------------------# #----------------------------------------------------------#
# Variable&Function # # Variable&Function #
#----------------------------------------------------------# #----------------------------------------------------------#
# Argument definition # Argument defenition
user=$1 user=$1
domain=$2 domain=$(idn -t --quiet -u "$2" )
domain_idn=$2 domain=$(echo $domain | tr '[:upper:]' '[:lower:]')
domain_idn=$(idn -t --quiet -a "$domain")
# Includes # Includes
source $VESTA/func/main.sh source $VESTA/func/main.sh
source $VESTA/func/domain.sh source $VESTA/func/domain.sh
source $VESTA/conf/vesta.conf source $VESTA/conf/vesta.conf
# Additional argument formatting
format_domain
format_domain_idn
# TODO: $domain_idn not used in this script - maybe $domain should be converted to $doman_idn ?
#----------------------------------------------------------# #----------------------------------------------------------#
# Verifications # # Verifications #
#----------------------------------------------------------# #----------------------------------------------------------#
check_args '2' "$#" 'USER DOMAIN' check_args '2' "$#" 'USER DOMAIN'
is_format_valid 'user' 'domain' validate_format 'user' 'domain'
is_system_enabled "$MAIL_SYSTEM" 'MAIL_SYSTEM' is_system_enabled "$MAIL_SYSTEM" 'MAIL_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"
@ -58,6 +54,6 @@ update_object_value 'mail' 'DOMAIN' "$domain" '$ANTISPAM' 'yes'
# Logging # Logging
log_history "enabled antispam on $domain" log_history "enabled antispam on $domain"
log_event "$OK" "$ARGUMENTS" log_event "$OK" "$EVENT"
exit exit

View file

@ -2,35 +2,31 @@
# info: add mail domain antivirus support # info: add mail domain antivirus support
# options: USER DOMAIN # options: USER DOMAIN
# #
# The function enables clamav scan for incoming emails. # The function enables clamav scan for incomming emails.
#----------------------------------------------------------# #----------------------------------------------------------#
# Variable&Function # # Variable&Function #
#----------------------------------------------------------# #----------------------------------------------------------#
# Argument definition # Argument defenition
user=$1 user=$1
domain=$2 domain=$(idn -t --quiet -u "$2" )
domain_idn=$2 domain=$(echo $domain | tr '[:upper:]' '[:lower:]')
domain_idn=$(idn -t --quiet -a "$domain")
# Includes # Includes
source $VESTA/func/main.sh source $VESTA/func/main.sh
source $VESTA/func/domain.sh source $VESTA/func/domain.sh
source $VESTA/conf/vesta.conf source $VESTA/conf/vesta.conf
# Additional argument formatting
format_domain
format_domain_idn
# TODO: $domain_idn not used in this script - maybe $domain should be converted to $doman_idn ?
#----------------------------------------------------------# #----------------------------------------------------------#
# Verifications # # Verifications #
#----------------------------------------------------------# #----------------------------------------------------------#
check_args '2' "$#" 'USER DOMAIN' check_args '2' "$#" 'USER DOMAIN'
is_format_valid 'user' 'domain' validate_format 'user' 'domain'
is_system_enabled "$MAIL_SYSTEM" 'MAIL_SYSTEM' is_system_enabled "$MAIL_SYSTEM" 'MAIL_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"
@ -58,6 +54,6 @@ update_object_value 'mail' 'DOMAIN' "$domain" '$ANTIVIRUS' 'yes'
# Logging # Logging
log_history "enabled antivirus on $domain" log_history "enabled antivirus on $domain"
log_event "$OK" "$ARGUMENTS" log_event "$OK" "$EVENT"
exit exit

View file

@ -2,17 +2,18 @@
# info: add mail domain catchall account # info: add mail domain catchall account
# options: USER DOMAIN EMAIL # options: USER DOMAIN EMAIL
# #
# The function enables catchall account for incoming emails. # The function enables catchall account for incomming emails.
#----------------------------------------------------------# #----------------------------------------------------------#
# Variable&Function # # Variable&Function #
#----------------------------------------------------------# #----------------------------------------------------------#
# Argument definition # Argument defenition
user=$1 user=$1
domain=$2 domain=$(idn -t --quiet -u "$2" )
domain_idn=$2 domain=$(echo $domain | tr '[:upper:]' '[:lower:]')
domain_idn=$(idn -t --quiet -a "$domain")
email="$3" email="$3"
# Includes # Includes
@ -20,17 +21,13 @@ source $VESTA/func/main.sh
source $VESTA/func/domain.sh source $VESTA/func/domain.sh
source $VESTA/conf/vesta.conf source $VESTA/conf/vesta.conf
# Additional argument formatting
format_domain
format_domain_idn
#----------------------------------------------------------# #----------------------------------------------------------#
# Verifications # # Verifications #
#----------------------------------------------------------# #----------------------------------------------------------#
check_args '3' "$#" 'USER DOMAIN EMAIL' check_args '3' "$#" 'USER DOMAIN EMAIL'
is_format_valid 'user' 'domain' 'email' validate_format 'user' 'domain' 'email'
is_system_enabled "$MAIL_SYSTEM" 'MAIL_SYSTEM' is_system_enabled "$MAIL_SYSTEM" 'MAIL_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"
@ -45,8 +42,8 @@ is_object_value_empty 'mail' 'DOMAIN' "$domain" '$CATCHALL'
# Adding catchall alias # Adding catchall alias
if [[ "$MAIL_SYSTEM" =~ exim ]]; then if [[ "$MAIL_SYSTEM" =~ exim ]]; then
sed -i "/*@$domain_idn:/d" $HOMEDIR/$user/conf/mail/$domain/aliases sed -i "/*@$domain:/d" $HOMEDIR/$user/conf/mail/$domain/aliases
echo "*@$domain_idn:$email" >> $HOMEDIR/$user/conf/mail/$domain/aliases echo "*@$domain:$email" >> $HOMEDIR/$user/conf/mail/$domain/aliases
fi fi
@ -59,6 +56,6 @@ update_object_value 'mail' 'DOMAIN' "$domain" '$CATCHALL' "$email"
# Logging # Logging
log_history "added $email as catchall email for $domain" log_history "added $email as catchall email for $domain"
log_event "$OK" "$ARGUMENTS" log_event "$OK" "$EVENT"
exit exit

View file

@ -9,10 +9,11 @@
# Variable&Function # # Variable&Function #
#----------------------------------------------------------# #----------------------------------------------------------#
# Argument definition # Argument defenition
user=$1 user=$1
domain=$2 domain=$(idn -t --quiet -u "$2" )
domain_idn=$2 domain=$(echo $domain | tr '[:upper:]' '[:lower:]')
domain_idn=$(idn -t --quiet -a "$domain")
dkim_size=${3-1024} dkim_size=${3-1024}
# Includes # Includes
@ -27,18 +28,13 @@ else
MAIL_USER=exim MAIL_USER=exim
fi fi
# Additional argument formatting
format_domain
format_domain_idn
# TODO: $domain_idn not used in this script - maybe $domain should be converted to $doman_idn ?
#----------------------------------------------------------# #----------------------------------------------------------#
# Verifications # # Verifications #
#----------------------------------------------------------# #----------------------------------------------------------#
check_args '2' "$#" 'USER DOMAIN [DKIM_SIZE]' check_args '2' "$#" 'USER DOMAIN [DKIM_SIZE]'
is_format_valid 'user' 'domain' 'dkim_size' validate_format 'user' 'domain' 'dkim_size'
is_system_enabled "$MAIL_SYSTEM" 'MAIL_SYSTEM' is_system_enabled "$MAIL_SYSTEM" 'MAIL_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"
@ -67,12 +63,12 @@ fi
# Adding dns records # Adding dns records
if [ ! -z "$DNS_SYSTEM" ] && [ -e "$USER_DATA/dns/$domain.conf" ]; then if [ ! -z "$DNS_SYSTEM" ] && [ -e "$USER_DATA/dns/$domain.conf" ]; then
p=$(cat $USER_DATA/mail/$domain.pub |grep -v ' KEY---' |tr -d '\n') p=$(cat $USER_DATA/mail/$domain.pub |grep -v ' KEY---' |tr -d '\n')
record="_domainkey" record='_domainkey'
policy="\"t=y; o=~;\"" policy="\"t=y; o=~;\""
$BIN/v-add-dns-record $user $domain $record TXT "$policy" '' '' 'no' $BIN/v-add-dns-record $user $domain $record TXT "$policy"
record="mail._domainkey" record='mail._domainkey'
selector="\"v=DKIM1\; k=rsa\; p=$p\"" selector="\"k=rsa\; p=$p\""
$BIN/v-add-dns-record $user $domain $record TXT "$selector" $BIN/v-add-dns-record $user $domain $record TXT "$selector"
fi fi
@ -83,10 +79,10 @@ fi
# Adding dkim in config # Adding dkim in config
update_object_value 'mail' 'DOMAIN' "$domain" '$DKIM' 'yes' update_object_value 'mail' 'DOMAIN' "$domain" '$DKIM' 'yes'
increase_user_value "$user" '$U_MAIL_DKIM' increase_user_value "$user" '$U_MAIL_DKMI'
# Logging # Logging
log_history "enabled DKIM support for $domain" log_history "enabled DKIM support for $domain"
log_event "$OK" "$ARGUMENTS" log_event "$OK" "$EVENT"
exit exit

View file

@ -9,12 +9,11 @@
# Variable&Function # # Variable&Function #
#----------------------------------------------------------# #----------------------------------------------------------#
# Argument definition # Argument defenition
user=$1 user=$1
domain=$2 domain=$2
flush=$3 flush=$3
# Includes # Includes
source $VESTA/func/main.sh source $VESTA/func/main.sh
source $VESTA/func/remote.sh source $VESTA/func/remote.sh
@ -26,61 +25,103 @@ source $VESTA/conf/vesta.conf
#----------------------------------------------------------# #----------------------------------------------------------#
check_args '2' "$#" 'USER DOMAIN [FLUSH]' check_args '2' "$#" 'USER DOMAIN [FLUSH]'
is_format_valid 'user' 'domain' validate_format 'user' 'domain'
is_system_enabled "$DNS_CLUSTER" 'DNS_CLUSTER' is_system_enabled "$DNS_CLUSTER" 'DNS_CLUSTER'
is_procces_running
remote_dns_health_check if [ ! -e "$VESTA/conf/dns-cluster.conf" ]; then
echo "Error: dns-cluster.conf doesn't exist"
log_event "$E_NOTEXIST $EVENT"
exit $E_NOTEXIST
fi
number_of_proc=$(ps auxf | grep -v grep | grep $VESTA/bin/$SCRIPT | wc -l)
if [ "$number_of_proc" -gt 2 ]; then
echo "Error: another sync process already exists"
log_event "$E_EXISTS $EVENT"
exit $E_EXISTS
fi
#----------------------------------------------------------# #----------------------------------------------------------#
# Action # # Action #
#----------------------------------------------------------# #----------------------------------------------------------#
# Parsing domain record # Check domain existance
str=$(grep "DOMAIN='$domain'" $USER_DATA/dns.conf 2>/dev/null) check_local_domain=$(grep "DOMAIN='$domain'" $USER_DATA/dns.conf 2>/dev/null)
if [ -z "$str" ]; then if [ -z "$check_local_domain" ]; then
pipe="$VESTA/data/queue/dns-cluster.pipe" pipe="$VESTA/data/queue/dns-cluster.pipe"
queue_str=$(grep -n "$SCRIPT $1 $2 " $pipe |cut -f1 -d: |head -n1) str=$(grep -n "$SCRIPT $1 $2$" $pipe | cut -f1 -d: | head -n1)
if [ ! -z "$queue_str" ]; then if [ ! -z "$str" ]; then
sed -i "$queue_str d" $pipe sed -i "$str d" $pipe
fi fi
exit exit
fi fi
old_ifs="$IFS"
IFS=$'\n' IFS=$'\n'
for cluster in $(grep "SUSPENDED='no'" $VESTA/conf/dns-cluster.conf); do
# Parsing remote dns host parameters # Check remote dns nodes
eval $cluster remote_dns_health_check
# Parsing domain parameters search_str=$(grep "SUSPENDED='no'" $VESTA/conf/dns-cluster.conf)
for cluster_str in $search_str; do
# Get host values
eval $cluster_str
# Check connection type
if [ -z "TYPE" ]; then
TYPE='api'
fi
# Check recipient dns user
if [ -z "$DNS_USER" ]; then
DNS_USER='dns-cluster'
fi
# Switch on connection type
case $TYPE in
ssh) send_cmd="send_ssh_cmd" ;;
*) send_cmd="send_api_cmd" ;;
esac
# Check dns exceptions
if [ -z "$DNS_CLUSTER_IGNORE" ]; then
DNS_CLUSTER_IGNORE='dns-cluster'
fi
# Check flush parameters
# Sync domain
str=$(grep "DOMAIN='$domain'" $USER_DATA/dns.conf)
eval $str eval $str
# Syncing domain data $send_cmd v-insert-dns-domain $DNS_USER "$str" $HOSTNAME "$flush" 'no'
cluster_cmd v-insert-dns-domain $DNS_USER "$str" $HOSTNAME $flush 'no' if [ $? -eq 0 ]; then
check_result $? "$HOST connection failed" $E_CONNECT # Sync records
if [ "$TYPE" = 'ssh' ]; then
tmp=$(mktemp -u)
scp_cmd $USER_DATA/dns/$DOMAIN.conf $tmp
$send_cmd v-insert-dns-records $DNS_USER $DOMAIN $tmp 'no'
else
for str in $(cat $USER_DATA/dns/$DOMAIN.conf); do
str=$(echo "$str" | sed 's/"/\\"/g')
$send_cmd v-insert-dns-record $DNS_USER $DOMAIN "$str"
done
fi
# Syncing domain records # Rebuild dns zone
tmp_file="/tmp/vst-sync.$DOMAIN" $send_cmd v-rebuild-dns-domain $DNS_USER $domain 'scheduled'
cluster_file $USER_DATA/dns/$DOMAIN.conf $tmp_file if [ $? -ne 0 ]; then
check_result $? "$HOST connection failed" $E_CONNECT echo "Error: $TYPE connection to $HOST failed"
log_event "$E_CONNECT $EVENT"
exit $E_CONNECT
fi
fi
# Inserting synced records
cluster_cmd v-insert-dns-records $DNS_USER $DOMAIN $tmp_file 'no'
check_result $? "$HOST connection failed" $E_CONNECT
# Rebuilding dns zone
cluster_cmd v-rebuild-dns-domain $DNS_USER $domain 'yes' 'no'
check_result $? "$HOST connection failed" $E_CONNECT
done done
# Update pipe
#----------------------------------------------------------#
# Vesta #
#----------------------------------------------------------#
# Updating pipe
rm -f $tmpfile rm -f $tmpfile
pipe="$VESTA/data/queue/dns-cluster.pipe" pipe="$VESTA/data/queue/dns-cluster.pipe"
str=$(grep -n "$SCRIPT $1 $2 " $pipe | cut -f1 -d: | head -n1) str=$(grep -n "$SCRIPT $1 $2 " $pipe | cut -f1 -d: | head -n1)
@ -88,4 +129,8 @@ if [ ! -z "$str" ]; then
sed -i "$str d" $pipe sed -i "$str d" $pipe
fi fi
#----------------------------------------------------------#
# Vesta #
#----------------------------------------------------------#
exit exit

View file

@ -9,17 +9,12 @@
# Variable&Function # # Variable&Function #
#----------------------------------------------------------# #----------------------------------------------------------#
# Argument definition # Argument defenition
host=$1 host=$1
HOST=$host
port=$2 port=$2
PORT=$port
user=$3 user=$3
USER=$user password=$4
password=$4; HIDE=4
PASSWORD=$password
type=${5-api} type=${5-api}
TYPE="$type"
dns_user=${6-dns-cluster} dns_user=${6-dns-cluster}
DNS_USER=$dns_user DNS_USER=$dns_user
@ -28,6 +23,9 @@ source $VESTA/func/main.sh
source $VESTA/func/remote.sh source $VESTA/func/remote.sh
source $VESTA/conf/vesta.conf source $VESTA/conf/vesta.conf
# Hiding passwords
A4='******'
#----------------------------------------------------------# #----------------------------------------------------------#
# Verifications # # Verifications #
@ -35,9 +33,8 @@ source $VESTA/conf/vesta.conf
args_usage='HOST PORT USER PASSWORD [TYPE] [DNS_USER]' args_usage='HOST PORT USER PASSWORD [TYPE] [DNS_USER]'
check_args '4' "$#" "$args_usage" check_args '4' "$#" "$args_usage"
is_format_valid 'host' 'port' 'user' 'type' 'dns_user' validate_format 'host' 'port' 'user' 'password' 'type' 'dns_user'
is_system_enabled "$DNS_SYSTEM" 'DNS_SYSTEM' is_system_enabled "$DNS_SYSTEM" 'DNS_SYSTEM'
is_password_valid
is_dnshost_new is_dnshost_new
is_dnshost_alive is_dnshost_alive
@ -46,15 +43,10 @@ is_dnshost_alive
# Action # # Action #
#----------------------------------------------------------# #----------------------------------------------------------#
# Generating timestamp
time_n_date=$(date +'%T %F')
time=$(echo "$time_n_date" |cut -f 1 -d \ )
date=$(echo "$time_n_date" |cut -f 2 -d \ )
# Concatentating dns host string # Concatentating dns host string
str="HOST='$host' PORT='$port' USER='$user' PASSWORD='$password'" str="HOST='$host' PORT='$port' USER='$user' PASSWORD='$password'"
str="$str DNS_USER='$dns_user' TYPE='$type' SUSPENDED='no'" str="$str DNS_USER='$dns_user' TYPE='$type' SUSPENDED='no'"
str="$str TIME='$time' DATE='$date'" 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
@ -67,27 +59,37 @@ else
sed -i "s/DNS_CLUSTER=.*/DNS_CLUSTER='yes'/g" $VESTA/conf/vesta.conf sed -i "s/DNS_CLUSTER=.*/DNS_CLUSTER='yes'/g" $VESTA/conf/vesta.conf
fi fi
# Enabling remote dns-cluster queue # Enabling restart queue
cluster_cmd v-add-cron-restart-job HOST=$host
check_result $? "$HOST connection failed" $E_CONNECT PORT=$port
USER=$user
PASSWORD=$password
case $type in
ssh) send_cmd="send_ssh_cmd" ;;
*) send_cmd="send_api_cmd" ;;
esac
$send_cmd v-add-cron-restart-job
# Syncing all domains # Sync current zones
$BIN/v-sync-dns-cluster $host $BIN/v-sync-dns-cluster $host
check_result $? "$HOST sync failed" $E_CONNECT return_code=$?
if [ "$return_code" -ne 0 ]; then
exit $return_code
fi
# Add dns-cluster cron job
#----------------------------------------------------------#
# Vesta #
#----------------------------------------------------------#
# Adding local dns-cluster cron job
cmd="sudo /usr/local/vesta/bin/v-update-sys-queue dns-cluster" cmd="sudo /usr/local/vesta/bin/v-update-sys-queue dns-cluster"
check_cron=$(grep "$cmd" $VESTA/data/users/admin/cron.conf 2> /dev/null) check_cron=$(grep "$cmd" $VESTA/data/users/admin/cron.conf 2> /dev/null)
if [ -z "$check_cron" ] && [ ! -z "$CRON_SYSTEM" ]; then if [ -z "$check_cron" ] && [ ! -z "$CRON_SYSTEM" ]; then
$BIN/v-add-cron-job admin '*/5' '*' '*' '*' '*' "$cmd" $BIN/v-add-cron-job admin '*/5' '*' '*' '*' '*' "$cmd"
fi fi
#----------------------------------------------------------#
# Vesta #
#----------------------------------------------------------#
# Logging # Logging
log_event "$OK" "$ARGUMENTS" log_event "$OK" "$EVENT"
exit exit

View file

@ -9,7 +9,7 @@
# Variable&Function # # Variable&Function #
#----------------------------------------------------------# #----------------------------------------------------------#
# Argument definition # Argument defenition
user=$1 user=$1
domain=$2 domain=$2
id=$3 id=$3
@ -25,61 +25,87 @@ source $VESTA/conf/vesta.conf
#----------------------------------------------------------# #----------------------------------------------------------#
check_args '3' "$#" 'USER DOMAIN ID' check_args '3' "$#" 'USER DOMAIN ID'
is_format_valid 'user' 'domain' 'id' validate_format 'user' 'domain' 'id'
is_system_enabled "$DNS_CLUSTER" 'DNS_CLUSTER' is_system_enabled "$DNS_CLUSTER" 'DNS_CLUSTER'
is_object_valid 'user' 'USER' "$user" is_object_valid 'user' 'USER' "$user"
is_object_valid 'dns' 'DOMAIN' "$domain" is_object_valid 'dns' 'DOMAIN' "$domain"
is_procces_running is_object_valid "dns/$domain" 'ID' "$id"
remote_dns_health_check
if [ ! -e "$VESTA/conf/dns-cluster.conf" ]; then
echo "Error: dns-cluster.conf doesn't exist"
log_event "$E_NOTEXIST $EVENT"
exit $E_NOTEXIST
fi
number_of_proc=$(ps auxf | grep -v grep | grep $VESTA/bin/$SCRIPT | wc -l)
if [ "$number_of_proc" -gt 2 ]; then
echo "Error: another sync process already exists"
log_event "$E_EXISTS $EVENT"
exit $E_EXISTS
fi
#----------------------------------------------------------# #----------------------------------------------------------#
# Action # # Action #
#----------------------------------------------------------# #----------------------------------------------------------#
# Parsing record old_ifs="$IFS"
str=$(grep "ID='$id'" $USER_DATA/dns/$domain.conf)
if [ -z "$str" ]; then
pipe="$VESTA/data/queue/dns-cluster.pipe"
queue_str=$(grep -n "$SCRIPT $1 $2 $3$" $pipe | cut -f1 -d: | head -n1)
if [ ! -z "$queue_str" ]; then
sed -i "$queue_str d" $pipe
fi
exit
fi
IFS=$'\n' IFS=$'\n'
for cluster in $(grep "SUSPENDED='no'" $VESTA/conf/dns-cluster.conf); do
# Parsing remote host parameters # Check remote dns nodes
eval $cluster remote_dns_health_check
# Syncing serial for cluster_str in $(grep "SUSPENDED='no'" $VESTA/conf/dns-cluster.conf); do
str=$(grep "DOMAIN='$domain'" $USER_DATA/dns.conf) # Get host values
cluster_cmd v-insert-dns-domain $DNS_USER "$str" $HOSTNAME 'domain' 'no' eval $cluster_str
check_result $? "$HOST connection failed (soa sync)" $E_CONNECT
# Syncing record # Check connection type
str=$(grep "ID='$id'" $USER_DATA/dns/$domain.conf | sed 's/"/\\"/g') if [ -z "TYPE" ]; then
cluster_cmd v-insert-dns-record $DNS_USER $domain "$str" 'no' TYPE='api'
check_result $? "$HOST connection failed (record sync)" $E_CONNECT fi
# Rebuilding dns zone # Switch on connection type
cluster_cmd v-rebuild-dns-domain $DNS_USER $domain 'yes' 'no' case $TYPE in
check_result $? "$HOST connection failed (rebuild)" $E_CONNECT ssh) send_cmd="send_ssh_cmd" ;;
*) send_cmd="send_api_cmd" ;;
esac
# Check recipient dns user
if [ -z "$DNS_USER" ]; then
DNS_USER='dns-cluster'
fi
# Check dns exceptions
if [ -z "$DNS_CLUSTER_IGNORE" ]; then
DNS_CLUSTER_IGNORE='dns-cluster'
fi
# Sync record
str=$(grep "ID='$id'" $USER_DATA/dns/$domain.conf)
str=$(echo "$str" | sed 's/"/\\"/g')
$send_cmd v-insert-dns-record $DNS_USER $domain "$str" 'no'
if [ $? -eq 0 ]; then
# Rebuild dns zone
$send_cmd v-rebuild-dns-domain $DNS_USER $domain 'scheduled'
if [ $? -ne 0 ]; then
echo "Error: $TYPE connection to $HOST failed (rebuild)"
log_event "$E_CONNECT $EVENT"
exit $E_CONNECT
fi
fi
done done
# Update pipe
#----------------------------------------------------------#
# Vesta #
#----------------------------------------------------------#
# Updating pipe
pipe="$VESTA/data/queue/dns-cluster.pipe" pipe="$VESTA/data/queue/dns-cluster.pipe"
str=$(grep -n "$SCRIPT $1 $2 $3$" $pipe | cut -f1 -d: | head -n1) str=$(grep -n "$SCRIPT $1 $2 $3$" $pipe | cut -f1 -d: | head -n1)
if [ ! -z "$str" ]; then if [ ! -z "$str" ]; then
sed -i "$str d" $pipe sed -i "$str d" $pipe
fi fi
#----------------------------------------------------------#
# Vesta #
#----------------------------------------------------------#
exit exit

View file

@ -1,11 +1,11 @@
#!/bin/bash #!/bin/bash
# info: add system ip address # info: add system ip address
# options: IP NETMASK [INTERFACE] [USER] [IP_STATUS] [IP_NAME] [NAT_IP] # options: IP MASK [INTERFACE] [USER] [IP_STATUS] [IP_NAME] [NAT_IP]
# #
# The function adds ip address into a system. It also creates rc scripts. You # The function adds ip address into a system. It also creates rc scripts. You
# can specify ip name which will be used as root domain for temporary aliases. # can specify ip name which will be used as root domain for temporary aliases.
# For example, if you set a1.myhosting.com as name, each new domain created on # For example, if you set a1.myhosting.com as name, each new domain created on
# this ip will automatically receive alias $domain.a1.myhosting.com. Of course # this ip will automaticaly receive alias $domain.a1.myhosting.com. Of course
# you must have wildcard record *.a1.myhosting.com pointed to ip. This feature # you must have wildcard record *.a1.myhosting.com pointed to ip. This feature
# is very handy when customer wants to test domain before dns migration. # is very handy when customer wants to test domain before dns migration.
@ -14,9 +14,9 @@
# Variable&Function # # Variable&Function #
#----------------------------------------------------------# #----------------------------------------------------------#
# Argument definition # Argument defenition
ip=${1// /} ip=${1// /}
netmask=$2 mask=$2
interface="${3-eth0}" interface="${3-eth0}"
user="${4-admin}" user="${4-admin}"
ip_status="${5-shared}" ip_status="${5-shared}"
@ -34,40 +34,36 @@ source $VESTA/conf/vesta.conf
# Verifications # # Verifications #
#----------------------------------------------------------# #----------------------------------------------------------#
check_args '2' "$#" 'IP NETMASK [INTERFACE] [USER] [STATUS] [NAME] [NATED_IP]' check_args '2' "$#" 'IP MASK [INTERFACE] [USER] [IP_STATUS] [IP_NAME] [NAT_IP]'
is_format_valid 'ip' 'netmask' 'interface' 'user' 'ip_status' validate_format 'ip' 'mask' 'interface' 'user' 'ip_status'
is_ip_free is_ip_free
is_object_valid 'user' 'USER' "$user" is_object_valid 'user' 'USER' "$user"
is_object_unsuspended 'user' 'USER' "$user" is_object_unsuspended 'user' 'USER' "$user"
if [ ! -z "$ip_name" ] ; then if [ ! -z "$ip_name" ] ; then
is_format_valid 'ip_name' validate_format 'ip_name'
fi fi
if [ ! -z "$nat_ip" ] ; then if [ ! -z "$nat_ip" ] ; then
is_format_valid 'nat_ip' validate_format 'nat_ip'
fi fi
#----------------------------------------------------------# #----------------------------------------------------------#
# Action # # Action #
#----------------------------------------------------------# #----------------------------------------------------------#
iface=$(get_ip_iface) get_ip_iface
cidr=$(convert_netmask $netmask) sys_ip_check=$(/sbin/ifconfig | grep "addr:$ip ")
broadcast=$(get_broadcast $ip $netmask)
sys_ip_check=$(/sbin/ip addr | grep "$ip")
if [ -z "$sys_ip_check" ]; then if [ -z "$sys_ip_check" ]; then
# Adding sys ip # Adding sys ip
/sbin/ip addr add $ip/$cidr dev $interface \ /sbin/ifconfig "$iface" "$ip" netmask "$mask"
broadcast $broadcast label $iface
# Adding RHEL/CentOS/Fedora/Amazon startup script # Adding RHEL/CentOS/Fedora startup script
if [ -d "/etc/sysconfig" ]; then if [ -e "/etc/redhat-release" ]; then
sys_ip="# Added by vesta" sys_ip="# Added by vesta"
sys_ip="$sys_ip\nDEVICE=$iface" sys_ip="$sys_ip\nDEVICE=$iface"
sys_ip="$sys_ip\nBOOTPROTO=static" sys_ip="$sys_ip\nBOOTPROTO=static"
sys_ip="$sys_ip\nONBOOT=yes" sys_ip="$sys_ip\nONBOOT=yes"
sys_ip="$sys_ip\nIPADDR=$ip" sys_ip="$sys_ip\nIPADDR=$ip"
sys_ip="$sys_ip\nNETMASK=$netmask" sys_ip="$sys_ip\nNETMASK=$mask"
echo -e $sys_ip > /etc/sysconfig/network-scripts/ifcfg-$iface echo -e $sys_ip > /etc/sysconfig/network-scripts/ifcfg-$iface
fi fi
@ -77,16 +73,11 @@ if [ -z "$sys_ip_check" ]; then
sys_ip="$sys_ip\nauto $iface" sys_ip="$sys_ip\nauto $iface"
sys_ip="$sys_ip\niface $iface inet static" sys_ip="$sys_ip\niface $iface inet static"
sys_ip="$sys_ip\naddress $ip" sys_ip="$sys_ip\naddress $ip"
sys_ip="$sys_ip\nnetmask $netmask" sys_ip="$sys_ip\nnetmask $mask"
echo -e $sys_ip >> /etc/network/interfaces echo -e $sys_ip >> /etc/network/interfaces
fi fi
fi fi
# Generating timestamp
time_n_date=$(date +'%T %F')
time=$(echo "$time_n_date" |cut -f 1 -d \ )
date=$(echo "$time_n_date" |cut -f 2 -d \ )
# Adding vesta ip # Adding vesta ip
echo "OWNER='$user' echo "OWNER='$user'
STATUS='$ip_status' STATUS='$ip_status'
@ -94,28 +85,23 @@ NAME='$ip_name'
U_SYS_USERS='' U_SYS_USERS=''
U_WEB_DOMAINS='0' U_WEB_DOMAINS='0'
INTERFACE='$interface' INTERFACE='$interface'
NETMASK='$netmask' NETMASK='$mask'
NAT='$nat_ip' NAT='$nat_ip'
TIME='$time' TIME='$TIME'
DATE='$date'" > $VESTA/data/ips/$ip DATE='$DATE'" > $VESTA/data/ips/$ip
chmod 660 $VESTA/data/ips/$ip chmod 660 $VESTA/data/ips/$ip
# WEB support # WEB support
if [ ! -z "$WEB_SYSTEM" ]; then if [ ! -z "$WEB_SYSTEM" ]; then
web_conf="/etc/$WEB_SYSTEM/conf.d/$ip.conf" web_conf="/etc/$WEB_SYSTEM/conf.d/$ip.conf"
rm -f $web_conf
if [ "$WEB_SYSTEM" = 'httpd' ] || [ "$WEB_SYSTEM" = 'apache2' ]; then if [ "$WEB_SYSTEM" = 'httpd' ] || [ "$WEB_SYSTEM" = 'apache2' ]; then
if [ -z "$(/usr/sbin/apachectl -v | grep Apache/2.4)" ]; then
echo "NameVirtualHost $ip:$WEB_PORT" > $web_conf echo "NameVirtualHost $ip:$WEB_PORT" > $web_conf
fi
echo "Listen $ip:$WEB_PORT" >> $web_conf echo "Listen $ip:$WEB_PORT" >> $web_conf
fi fi
if [ "$WEB_SSL" = 'mod_ssl' ]; then if [ "$WEB_SSL" = 'mod_ssl' ]; then
if [ -z "$(/usr/sbin/apachectl -v | grep Apache/2.4)" ]; then
echo "NameVirtualHost $ip:$WEB_SSL_PORT" >> $web_conf echo "NameVirtualHost $ip:$WEB_SSL_PORT" >> $web_conf
fi
echo "Listen $ip:$WEB_SSL_PORT" >> $web_conf echo "Listen $ip:$WEB_SSL_PORT" >> $web_conf
fi fi
fi fi
@ -142,14 +128,6 @@ if [ ! -z "$PROXY_SYSTEM" ]; then
rpaf_str="$rpaf_str $ip" rpaf_str="$rpaf_str $ip"
sed -i "s/.*RPAFproxy_ips.*/$rpaf_str/" $rpaf_conf sed -i "s/.*RPAFproxy_ips.*/$rpaf_str/" $rpaf_conf
fi fi
#mod_remoteip
remoteip_conf="/etc/$WEB_SYSTEM/mods-enabled/remoteip.conf"
if [ -e "$remoteip_conf" ]; then
if [ $( grep -ic "$ip" $remoteip_conf ) -eq 0 ]; then
sed -i "s/<\/IfModule>/RemoteIPInternalProxy $ip\n<\/IfModule>/g" $remoteip_conf
fi
fi
fi fi
@ -172,23 +150,18 @@ else
increase_user_value 'admin' '$IP_AVAIL' increase_user_value 'admin' '$IP_AVAIL'
fi fi
# Restarting web server # Restart web server
$BIN/v-restart-web $BIN/v-restart-web
check_result $? "Web restart failed" >/dev/null if [ $? -ne 0 ]; then
exit $E_RESTART
# Restarting proxy server
if [ ! -z "$PROXY_SYSTEM" ]; then
$BIN/v-restart-proxy
check_result $? "Proxy restart failed" >/dev/null
fi fi
$BIN/v-restart-proxy
# Restarting firewall if [ $? -ne 0 ]; then
if [ ! -z "$FIREWALL_SYSTEM" ]; then exit $E_RESTART
$BIN/v-update-firewall
fi fi
# Logging # Logging
log_history "added system ip address $ip" '' 'admin' log_history "added system ip address $ip" '' 'admin'
log_event "$OK" "$ARGUMENTS" log_event "$OK" "$EVENT"
exit exit

View file

@ -1,106 +0,0 @@
#!/bin/bash
# info: copy mail ssl certificate
# options: USER DOMAIN [RESTART]
#
# The function copies user domain SSL to mail SSL directory
#----------------------------------------------------------#
# Variable&Function #
#----------------------------------------------------------#
# Argument definition
user=$1
domain=$2
restart=$3
# Includes
source $VESTA/func/main.sh
source $VESTA/func/domain.sh
source $VESTA/conf/vesta.conf
#----------------------------------------------------------#
# Verifications #
#----------------------------------------------------------#
check_args '2' "$#" 'USER DOMAIN [RESTART]'
is_format_valid 'user' 'domain'
is_system_enabled "$MAIL_SYSTEM" 'MAIL_SYSTEM'
is_object_valid 'user' 'USER' "$user"
is_object_valid 'web' 'DOMAIN' "$domain"
is_object_value_exist 'web' 'DOMAIN' "$domain" '$SSL'
#----------------------------------------------------------#
# Action #
#----------------------------------------------------------#
# Defining certificate location
dom_crt="/home/$user/conf/web/ssl.$domain.pem"
dom_key="/home/$user/conf/web/ssl.$domain.key"
vst_crt="$VESTA/ssl/mail.crt"
vst_key="$VESTA/ssl/mail.key"
# Checking certificate
if [ ! -e "$dom_crt" ] || [ ! -e "$dom_key" ]; then
check_result $E_NOTEXIST "$domain certificate doesn't exist"
fi
# Checking difference
diff $dom_crt $vst_crt >/dev/null 2>&1
if [ $? -ne 0 ]; then
rm -f $vst_crt.old $vst_key.old
mv $vst_crt $vst_crt.old >/dev/null 2>&1
mv $vst_key $vst_key.old >/dev/null 2>&1
cp $dom_crt $vst_crt 2>/dev/null
cp $dom_key $vst_key 2>/dev/null
chown root:mail $vst_crt $vst_key
else
restart=no
fi
# Updating mail certificate
case $MAIL_SYSTEM in
exim) conf='/etc/exim/exim.conf';;
exim4) conf='/etc/exim4/exim4.conf.template';;
esac
if [ -e "$conf" ]; then
sed -e "s|^tls_certificate.*|tls_certificate = $vst_crt|" \
-e "s|^tls_privatekey.*|tls_privatekey = $vst_key|" -i $conf
fi
# Updating imap certificate
conf="/etc/dovecot/conf.d/10-ssl.conf"
if [ ! -z "$IMAP_SYSTEM" ] && [ -e "$conf" ]; then
sed -e "s|ssl_cert.*|ssl_cert = <$vst_crt|" \
-e "s|ssl_key.*|ssl_key = <$vst_key|" -i $conf
fi
#----------------------------------------------------------#
# Vesta #
#----------------------------------------------------------#
# Restarting services
if [ "$restart" != 'no' ]; then
if [ ! -z "$MAIL_SYSTEM" ]; then
$BIN/v-restart-service $MAIL_SYSTEM
fi
if [ ! -z "$IMAP_SYSTEM" ]; then
$BIN/v-restart-service $IMAP_SYSTEM
fi
fi
# Updating vesta.conf
if [ -z "$(grep MAIL_CERTIFICATE $VESTA/conf/vesta.conf)" ]; then
echo "MAIL_CERTIFICATE='$user:$domain'" >> $VESTA/conf/vesta.conf
else
sed -i "s/MAIL_CERTIFICATE.*/MAIL_CERTIFICATE='$user:$domain'/g" \
$VESTA/conf/vesta.conf
fi
# Logging
log_event "$OK" "$ARGUMENTS"
exit

View file

@ -1,12 +1,12 @@
#!/bin/bash #!/bin/bash
# info: add system quota # info: add system quota
# options: NONE # opions: NONE
# #
# The script enables filesystem quota on /home partition # The script enables filesystem quota on /home patition
#----------------------------------------------------------# #----------------------------------------------------------#
# Variable & Function # # Variable&Function #
#----------------------------------------------------------# #----------------------------------------------------------#
# Includes # Includes
@ -19,15 +19,21 @@ source $VESTA/conf/vesta.conf
#----------------------------------------------------------# #----------------------------------------------------------#
# Checking quota package # Checking quota package
quota=$(which --skip-alias --skip-functions quota 2>/dev/null) if [ ! -e "/usr/sbin/setquota" ]; then
if [ $? -ne 0 ]; then if [ -e "/etc/redhat-release" ]; then
if [ -d "/etc/sysconfig" ]; then
yum -y install quota >/dev/null 2>&1 yum -y install quota >/dev/null 2>&1
check_result $? "quota package installation failed" $E_UPDATE result=$?
else else
export DEBIAN_FRONTEND=noninteractive export DEBIAN_FRONTEND=noninteractive
apt-get -y install quota >/dev/null 2>&1 apt-get -y install quota >/dev/null 2>&1
check_result $? "quota package installation failed" $E_UPDATE result=$?
fi
# Checking installation status
if [ "$result" -ne 0 ]; then
echo "Error: quota package wasn't successfully installed"
log_event "$E_UPDATE" "$EVENT"
exit $E_UPDATE
fi fi
fi fi
@ -36,38 +42,38 @@ fi
# Action # # Action #
#----------------------------------------------------------# #----------------------------------------------------------#
# Adding group and user quota on /home partition # Adding usrquota option on /home partition
mnt=$(df -P /home | awk '{print $6}' | tail -n1) mnt=$(df -P /home |awk '{print $6}' |tail -n1)
lnr=$(cat -n /etc/fstab | grep -v "#" | awk '{print $1,$3}' | grep "$mnt$" | cut -f 1 -d ' ') lnr=$(cat -n /etc/fstab |awk '{print $1,$3}' |grep "$mnt$" |cut -f 1 -d ' ')
opt=$(sed -n ${lnr}p /etc/fstab | awk '{print $4}') options=$(sed -n ${lnr}p /etc/fstab |awk '{print $4}')
fnd='usrquota\|grpquota\|usrjquota=aquota.user\|grpjquota=aquota.group\|jqfmt=vfsv0' if [ -z "$(echo $options |grep usrquota)" ]; then
if [ $(echo $opt | tr ',' '\n' | grep -x $fnd | wc -l) -ne 5 ]; then sed -i "$lnr s/$options/$options,usrquota/" /etc/fstab
old=$(echo $(echo $opt | tr ',' '\n' | grep -v 'usrquota\|grpquota\|usrjquota=\|grpjquota=\|jqfmt=') | tr ' ' ',')
new='usrquota,grpquota,usrjquota=aquota.user,grpjquota=aquota.group,jqfmt=vfsv0'
sed -i "$lnr s/$opt/$old,$new/" /etc/fstab
mount -o remount $mnt mount -o remount $mnt
fi fi
# Adding v2 group and user quota index # Adding aquota.user file
if [ ! -e "$mnt/aquota.user" ] || [ ! -e "$mnt/aquota.group" ]; then if [ ! -e "$mnt/aquota.user" ]; then
quotacheck -avcugm >/dev/null 2>&1 quotacheck -cu $mnt >/dev/null 2>&1
fi fi
# Adding quotacheck on reboot # Building fs quota index
touch /forcequotacheck quotacheck -um $mnt
# Adding cron job # Adding weekly cron job
echo '#!/bin/bash' > /etc/cron.daily/quotacheck echo "quotacheck -um $mnt" > /etc/cron.daily/quotacheck
echo 'touch /forcequotacheck' >> /etc/cron.daily/quotacheck
chmod a+x /etc/cron.daily/quotacheck chmod a+x /etc/cron.daily/quotacheck
# Enabling group and user quota # Enabling fs quota
if [ ! -z "$(quotaon -pa | grep " $mnt " | grep 'user\|group' | grep 'is off')" ]; then if [ ! -z "$(quotaon -pa|grep " $mnt "|grep user|grep 'off')" ]; then
quotaon -v $mnt quotaon $mnt
check_result $? "quota can't be enabled in $mnt" $E_DISK if [ $? -ne 0 ]; then
echo "Error: quota can't be enabled on $mnt partition"
log_event "$E_DISK" "$EVENT"
exit $E_DISK
fi
fi fi
# Updating vesta.conf value # Updating DISK_QUOTA value
if [ -z "$(grep DISK_QUOTA $VESTA/conf/vesta.conf)" ]; then if [ -z "$(grep DISK_QUOTA $VESTA/conf/vesta.conf)" ]; then
echo "DISK_QUOTA='yes'" >> $VESTA/conf/vesta.conf echo "DISK_QUOTA='yes'" >> $VESTA/conf/vesta.conf
else else
@ -85,6 +91,6 @@ done
#----------------------------------------------------------# #----------------------------------------------------------#
# Logging # Logging
log_event "$OK" "$ARGUMENTS" log_event "$OK" "$EVENT"
exit exit

View file

@ -1,106 +0,0 @@
#!/bin/bash
# info: add system sftp jail
# options: NONE
#
# The script enables sftp jailed environment
#----------------------------------------------------------#
# Variable&Function #
#----------------------------------------------------------#
# Importing system environment as we run this script
# mostly by cron which do not read it by itself
source /etc/profile
# Includes
source $VESTA/func/main.sh
source $VESTA/conf/vesta.conf
#----------------------------------------------------------#
# Verifications #
#----------------------------------------------------------#
if [ -z "$SFTPJAIL_KEY" ]; then
exit
fi
#----------------------------------------------------------#
# Action #
#----------------------------------------------------------#
# Checking sshd directives
config='/etc/ssh/sshd_config'
sftp_n=$(grep -n "Subsystem.*sftp" $config |grep -v internal |grep -v ":#")
sftp_i=$(grep -n "Subsystem.*sftp" $config |grep internal |grep -v ":#")
# Disabling normal sftp
if [ ! -z "$sftp_n" ]; then
fline=$(echo $sftp_n |cut -f 1 -d :)
sed -i "${fline}s/Subsystem.*sftp/#Subsystem sftp/" $config
restart='yes'
fi
# Enabling jailed sftp
if [ -z "$sftp_i" ]; then
echo " " >> $config
echo "Subsystem sftp internal-sftp" >> $config
echo "Match Group sftp-only" >> $config
echo "ChrootDirectory /chroot/%u" >> $config
echo " AllowTCPForwarding no" >> $config
echo " X11Forwarding no" >> $config
echo " ForceCommand internal-sftp" >> $config
restart='yes'
fi
# Validating opensshd config
if [ "$restart" = 'yes' ]; then
subj="OpenSSH restart failed"
email=$(grep CONTACT $VESTA/data/users/admin/user.conf |cut -f 2 -d \')
/usr/sbin/sshd -t >/dev/null 2>&1
if [ "$?" -ne 0 ]; then
mail_text="OpenSSH can not be restarted. Please check config:
\n\n$(/usr/sbin/sshd -t)"
echo -e "$mail_text" |$SENDMAIL -s "$subj" $email
else
service ssh restart >/dev/null 2>&1
service sshd restart >/dev/null 2>&1
fi
fi
# Adding sftp group
groupadd sftp-only 2>/dev/null
# Checking users
shells="rssh|nologin"
for user in $(grep "$HOMEDIR" /etc/passwd |egrep "$shells" |cut -f 1 -d:); do
$BIN/v-add-user-sftp-jail $user
done
# Adding v-add-sys-sftp-jail to startup
if [ -e "/etc/rc.local" ]; then
check_sftp=$(grep $0 /etc/rc.local)
check_exit=$(grep ^exit /etc/rc.local)
if [ -z "$check_sftp" ]; then
if [ -z "$check_exit" ]; then
echo "$BIN/v-add-sys-sftp-jail" >> /etc/rc.local
else
sed -i "s|^exit|$BIN/v-add-sys-sftp-jail\nexit|" /etc/rc.local
fi
fi
chmod +x /etc/rc.local
else
echo "$BIN/v-add-sys-sftp-jail" > /etc/rc.local
chmod +x /etc/rc.local
fi
#----------------------------------------------------------#
# Vesta #
#----------------------------------------------------------#
# Logging
log_event "$OK" "$ARGUMENTS"
exit

View file

@ -1,97 +0,0 @@
#!/bin/bash
# info: add vesta ssl certificate
# options: USER DOMAIN [RESTART]
#
# The function copies user domain SSL to vesta SSL directory
#----------------------------------------------------------#
# Variable&Function #
#----------------------------------------------------------#
# Argument definition
user=$1
domain=$2
restart=$3
# Includes
source $VESTA/func/main.sh
source $VESTA/func/domain.sh
source $VESTA/conf/vesta.conf
#----------------------------------------------------------#
# Verifications #
#----------------------------------------------------------#
check_args '2' "$#" 'USER DOMAIN [RESTART]'
is_format_valid 'user' 'domain'
is_system_enabled "$WEB_SYSTEM" 'WEB_SYSTEM'
is_object_valid 'user' 'USER' "$user"
is_object_valid 'web' 'DOMAIN' "$domain"
is_object_value_exist 'web' 'DOMAIN' "$domain" '$SSL'
#----------------------------------------------------------#
# Action #
#----------------------------------------------------------#
# Defining certificate location
dom_crt="/home/$user/conf/web/ssl.$domain.pem"
dom_key="/home/$user/conf/web/ssl.$domain.key"
vst_crt="$VESTA/ssl/certificate.crt"
vst_key="$VESTA/ssl/certificate.key"
# Checking certificate
if [ ! -e "$dom_crt" ] || [ ! -e "$dom_key" ]; then
check_result $E_NOTEXIST "$domain certificate doesn't exist"
fi
# Checking difference
diff $dom_crt $vst_crt >/dev/null 2>&1
if [ $? -ne 0 ]; then
rm -f $vst_crt.old $vst_key.old
mv $vst_crt $vst_crt.old
mv $vst_key $vst_key.old
cp $dom_crt $vst_crt 2>/dev/null
cp $dom_key $vst_key 2>/dev/null
chown root:mail $vst_crt $vst_key
else
restart=no
fi
#----------------------------------------------------------#
# Vesta #
#----------------------------------------------------------#
# Restarting services
if [ "$restart" != 'no' ]; then
if [ ! -z "$MAIL_SYSTEM" ] && [ -z "$MAIL_CERTIFICATE" ]; then
$BIN/v-restart-service $MAIL_SYSTEM
fi
if [ ! -z "$IMAP_SYSTEM" ] && [ -z "$MAIL_CERTIFICATE" ]; then
$BIN/v-restart-service $IMAP_SYSTEM
fi
if [ ! -z "$FTP_SYSTEM" ]; then
$BIN/v-restart-service "$FTP_SYSTEM"
fi
if [ -e "/var/run/vesta-nginx.pid" ]; then
kill -HUP $(cat /var/run/vesta-nginx.pid)
else
service vesta restart
fi
fi
# Updating vesta.conf
if [ -z "$(grep VESTA_CERTIFICATE $VESTA/conf/vesta.conf)" ]; then
echo "VESTA_CERTIFICATE='$user:$domain'" >> $VESTA/conf/vesta.conf
else
sed -i "s/VESTA_CERTIFICATE.*/VESTA_CERTIFICATE='$user:$domain'/g" \
$VESTA/conf/vesta.conf
fi
# Logging
log_event "$OK" "$ARGUMENTS"
exit

View file

@ -9,9 +9,9 @@
# Variable&Function # # Variable&Function #
#----------------------------------------------------------# #----------------------------------------------------------#
# Argument definition # Argument defenition
user=$1 user=$1
password=$2; HIDE=2 password=$2
email=$3 email=$3
package=${4-default} package=${4-default}
fname=$5 fname=$5
@ -21,10 +21,16 @@ lname=$6
source $VESTA/func/main.sh source $VESTA/func/main.sh
source $VESTA/conf/vesta.conf source $VESTA/conf/vesta.conf
# Hiding password
A2='******'
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 "^$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
check_result $E_EXISTS "user $user exists" echo "Error: user $user exists"
log_event "$E_EXISTS" "$EVENT"
exit $E_EXISTS
fi fi
} }
@ -34,12 +40,12 @@ is_user_free() {
#----------------------------------------------------------# #----------------------------------------------------------#
check_args '3' "$#" 'USER PASSWORD EMAIL [PACKAGE] [FNAME] [LNAME]' check_args '3' "$#" 'USER PASSWORD EMAIL [PACKAGE] [FNAME] [LNAME]'
is_format_valid 'user' 'email' 'package' validate_format 'user' 'password' 'email' 'package'
if [ ! -z "$fname" ]; then if [ ! -z "$fname" ]; then
is_format_valid 'fname' 'lname' validate_format 'fname' 'lname'
fi fi
is_user_free "$user" is_user_free "$user"
is_password_valid
is_package_valid is_package_valid
@ -48,7 +54,7 @@ is_package_valid
#----------------------------------------------------------# #----------------------------------------------------------#
# Parsing package data # Parsing package data
pkg_data=$(cat $VESTA/data/packages/$package.pkg |egrep -v "TIME|DATE") pkg_data=$(cat $VESTA/data/packages/$package.pkg |grep -v TIME |grep -v DATE)
# Checking shell # Checking shell
shell_conf=$(echo "$pkg_data" | grep 'SHELL' | cut -f 2 -d \') shell_conf=$(echo "$pkg_data" | grep 'SHELL' | cut -f 2 -d \')
@ -56,7 +62,11 @@ shell=$(grep -w "$shell_conf" /etc/shells |head -n1)
# Adding user # Adding user
/usr/sbin/useradd "$user" -s "$shell" -c "$email" -m -d "$HOMEDIR/$user" /usr/sbin/useradd "$user" -s "$shell" -c "$email" -m -d "$HOMEDIR/$user"
check_result $? "user creation failed" $E_INVALID if [ $? -ne 0 ]; then
echo "Error: user creation failed"
log_event "$E_INVALID" "$EVENT"
exit $E_INVALID
fi
# Adding password # Adding password
echo "$user:$password" | /usr/sbin/chpasswd echo "$user:$password" | /usr/sbin/chpasswd
@ -65,16 +75,21 @@ echo "$user:$password" | /usr/sbin/chpasswd
mkdir $HOMEDIR/$user/conf mkdir $HOMEDIR/$user/conf
if [ ! -z "$WEB_SYSTEM" ]; then if [ ! -z "$WEB_SYSTEM" ]; then
mkdir $HOMEDIR/$user/conf/web $HOMEDIR/$user/web $HOMEDIR/$user/tmp mkdir $HOMEDIR/$user/conf/web
mkdir $HOMEDIR/$user/web
mkdir $HOMEDIR/$user/tmp
chmod 751 $HOMEDIR/$user/conf/web chmod 751 $HOMEDIR/$user/conf/web
chmod 700 $HOMEDIR/$user/tmp chmod 751 $HOMEDIR/$user/web
chown $user:$user $HOMEDIR/$user/web $HOMEDIR/$user/tmp chmod 771 $HOMEDIR/$user/tmp
chown $user:$user $HOMEDIR/$user/web
chown $user:$user $HOMEDIR/$user/tmp
fi fi
if [ ! -z "$MAIL_SYSTEM" ]; then if [ ! -z "$MAIL_SYSTEM" ]; then
mkdir $HOMEDIR/$user/conf/mail $HOMEDIR/$user/mail mkdir $HOMEDIR/$user/conf/mail
mkdir $HOMEDIR/$user/mail
chmod 751 $HOMEDIR/$user/mail chmod 751 $HOMEDIR/$user/mail
chmod 755 $HOMEDIR/$user/conf/mail chmod 751 $HOMEDIR/$user/conf/mail
fi fi
if [ ! -z "$DNS_SYSTEM" ]; then if [ ! -z "$DNS_SYSTEM" ]; then
@ -92,51 +107,54 @@ chattr +i $HOMEDIR/$user/conf
#----------------------------------------------------------# #----------------------------------------------------------#
# Adding user dir # Adding user dir
mkdir -p $USER_DATA/ssl $USER_DATA/dns $USER_DATA/mail mkdir $USER_DATA
chmod 770 $USER_DATA
# Creating configuration files and pipes # Creating configuration files and pipes
touch $USER_DATA/backup.conf \ touch $USER_DATA/backup.conf
$USER_DATA/history.log \ chmod 660 $USER_DATA/backup.conf
$USER_DATA/stats.log \ touch $USER_DATA/history.log
$USER_DATA/web.conf \ chmod 660 $USER_DATA/history.log
$USER_DATA/dns.conf \ touch $USER_DATA/stats.log
$USER_DATA/mail.conf \ chmod 660 $USER_DATA/stats.log
$USER_DATA/db.conf \
$USER_DATA/cron.conf
chmod 770 $USER_DATA \
$USER_DATA/ssl \
$USER_DATA/dns \
$USER_DATA/mail
chmod 660 $USER_DATA/backup.conf \
$USER_DATA/history.log \
$USER_DATA/stats.log \
$USER_DATA/web.conf \
$USER_DATA/dns.conf \
$USER_DATA/mail.conf \
$USER_DATA/db.conf \
$USER_DATA/cron.conf
# Updating queue pipes
echo "$BIN/v-update-user-disk $user" >> $VESTA/data/queue/disk.pipe echo "$BIN/v-update-user-disk $user" >> $VESTA/data/queue/disk.pipe
if [ ! -z "$WEB_SYSTEM" ]; then if [ ! -z "$WEB_SYSTEM" ]; then
mkdir $USER_DATA/ssl
chmod 770 $USER_DATA/ssl
touch $USER_DATA/web.conf
chmod 660 $USER_DATA/web.conf
echo "$BIN/v-update-web-domains-traff $user" \ echo "$BIN/v-update-web-domains-traff $user" \
>> $VESTA/data/queue/traffic.pipe >> $VESTA/data/queue/traffic.pipe
echo "$BIN/v-update-web-domains-disk $user" >> $VESTA/data/queue/disk.pipe echo "$BIN/v-update-web-domains-disk $user" >> $VESTA/data/queue/disk.pipe
fi fi
if [ ! -z "$DNS_SYSTEM" ]; then
mkdir $USER_DATA/dns
chmod 770 $USER_DATA/dns
touch $USER_DATA/dns.conf
chmod 660 $USER_DATA/dns.conf
fi
if [ ! -z "$MAIL_SYSTEM" ]; then if [ ! -z "$MAIL_SYSTEM" ]; then
mkdir $USER_DATA/mail
chmod 770 $USER_DATA/mail
touch $USER_DATA/mail.conf
chmod 660 $USER_DATA/mail.conf
echo "$BIN/v-update-mail-domains-disk $user" >> $VESTA/data/queue/disk.pipe echo "$BIN/v-update-mail-domains-disk $user" >> $VESTA/data/queue/disk.pipe
fi fi
if [ ! -z "$DB_SYSTEM" ]; then if [ ! -z "$DB_SYSTEM" ]; then
touch $USER_DATA/db.conf
chmod 660 $USER_DATA/db.conf
echo "$BIN/v-update-databases-disk $user" >> $VESTA/data/queue/disk.pipe echo "$BIN/v-update-databases-disk $user" >> $VESTA/data/queue/disk.pipe
fi fi
# Generating timestamp if [ ! -z "$CRON_SYSTEM" ]; then
time_n_date=$(date +'%T %F') touch $USER_DATA/cron.conf
time=$(echo "$time_n_date" |cut -f 1 -d \ ) chmod 660 $USER_DATA/cron.conf
date=$(echo "$time_n_date" |cut -f 2 -d \ ) fi
# Filling user config # Filling user config
if [ "$user" != 'admin' ]; then if [ "$user" != 'admin' ]; then
@ -154,7 +172,7 @@ $pkg_data
CONTACT='$email' CONTACT='$email'
CRON_REPORTS='yes' CRON_REPORTS='yes'
MD5='$(awk -v user=$user -F : 'user == $1 {print $2}' /etc/shadow)' MD5='$(awk -v user=$user -F : 'user == $1 {print $2}' /etc/shadow)'
RKEY='$(generate_password)' RKEY='$(gen_password)'
SUSPENDED='no' SUSPENDED='no'
SUSPENDED_USERS='0' SUSPENDED_USERS='0'
SUSPENDED_WEB='0' SUSPENDED_WEB='0'
@ -183,9 +201,8 @@ U_DATABASES='0'
U_CRON_JOBS='0' U_CRON_JOBS='0'
U_BACKUPS='0' U_BACKUPS='0'
LANGUAGE='' LANGUAGE=''
NOTIFICATIONS='no' TIME='$TIME'
TIME='$time' DATE='$DATE'" > $USER_DATA/user.conf
DATE='$date'" > $USER_DATA/user.conf
chmod 660 $USER_DATA/user.conf chmod 660 $USER_DATA/user.conf
# Updating quota # Updating quota
@ -203,13 +220,8 @@ if [ -x "$VESTA/data/packages/$package.sh" ]; then
$VESTA/data/packages/$package.sh "$user" "$email" "$fname" "$lname" $VESTA/data/packages/$package.sh "$user" "$email" "$fname" "$lname"
fi fi
# Adding jailed sftp env
if [ ! -z "$SFTPJAIL_KEY" ]; then
$BIN/v-add-user-sftp-jail $user
fi
# Logging # Logging
log_history "added system user $user" '' 'admin' log_history "added system user $user" '' 'admin'
log_event "$OK" "$ARGUMENTS" log_event "$OK" "$EVENT"
exit exit

View file

@ -1,125 +0,0 @@
#!/bin/bash
# info: adding user favourites
# options: USER SYSTEM OBJECT
#
# The function adds object to users favourites
#----------------------------------------------------------#
# Variable&Function #
#----------------------------------------------------------#
# Argument definition
user=$1
system=$(echo "$2" |tr '[:lower:]' '[:upper:]')
object=$3
email=$3
id=$3
# Includes
source $VESTA/func/main.sh
source $VESTA/conf/vesta.conf
#----------------------------------------------------------#
# Verifications #
#----------------------------------------------------------#
check_args '3' "$#" 'USER SYSTEM OBJECT'
is_format_valid 'user' 'system'
case $system in
MAIL_ACC) is_format_valid 'email' ;;
CRON) is_format_valid 'id' ;;
DNS_REC) is_format_valid 'id' ;;
*) is_format_valid 'object'
esac
is_object_valid 'user' 'USER' "$user"
is_object_unsuspended 'user' 'USER' "$user"
# Checking system
case $system in
USER) check='ok' ;;
WEB) check='ok' ;;
DNS) check='ok' ;;
DNS_REC) check='ok' ;;
MAIL) check='ok' ;;
MAIL_ACC) check='ok' ;;
DB) check='ok' ;;
CRON) check='ok' ;;
BACKUP) check='ok' ;;
IP) check='ok' ;;
PACKAGE) check='ok' ;;
FIREWALL) check='ok' ;;
*) check_args '2' '0' 'USER SYSTEM OBJECT'
esac
#----------------------------------------------------------#
# Action #
#----------------------------------------------------------#
# Flushing vars
USER=''
WEB=''
DNS=''
DNS_REC=''
MAIL=''
MAIL_ACC=''
DB=''
CRON=''
BACKUP=''
IP=''
PACKAGE=''
FIREWALL=''
# Creating config just in case
touch $USER_DATA/favourites.conf
# Reading current values
source $USER_DATA/favourites.conf
# Assigning current system value
eval value=\$$system
# Checking if object is new
check_fav=$(echo "$value" |tr ',' '\n'| grep "^$object$")
if [ ! -z "$check_fav" ]; then
exit 0
fi
# Adding object to favorites
if [ -z "$value" ]; then
value="$object"
else
value="$value,$object"
fi
# Updating sytem
eval $system=$value
# Updating user favorites
echo "USER='$USER'
WEB='$WEB'
DNS='$DNS'
DNS_REC='$DNS_REC'
MAIL='$MAIL'
MAIL_ACC='$MAIL_ACC'
DB='$DB'
CRON='$CRON'
BACKUP='$BACKUP'
IP='$IP'
PACKAGE='$PACKAGE'
FIREWALL='$FIREWALL'" > $USER_DATA/favourites.conf
# Changing file permission
chmod 640 $USER_DATA/favourites.conf
#----------------------------------------------------------#
# Vesta #
#----------------------------------------------------------#
# Logging
log_history "added starred $object in $system listing"
log_event "$OK" "$ARGUMENTS"
exit

View file

@ -1,76 +0,0 @@
#!/bin/bash
# info: add user notification
# options: USER TOPIC NOTICE [TYPE]
#
# The function adds user notification.
#----------------------------------------------------------#
# Variable&Function #
#----------------------------------------------------------#
# Argument definition
user=$1
topic=$(echo $2 |sed "s/'/%quote%/g")
notice=$(echo $3 |sed "s/'/%quote%/g")
type=$4
# Includes
source $VESTA/func/main.sh
source $VESTA/conf/vesta.conf
#----------------------------------------------------------#
# Verifications #
#----------------------------------------------------------#
check_args '2' "$#" 'USER TOPIC NOTICE [TYPE]'
is_format_valid 'user' 'topic' 'notice'
is_object_valid 'user' 'USER' "$user"
#----------------------------------------------------------#
# Action #
#----------------------------------------------------------#
# Defining notification id
if [ -e "$USER_DATA/notifications.conf" ]; then
nid=$(grep "NID=" $USER_DATA/notifications.conf |cut -f 2 -d \')
nid=$(echo "$nid" |sort -n |tail -n1)
if [ ! -z "$nid" ]; then
nid="$((nid +1))"
else
nid=1
fi
else
nid=1
fi
# Generating timestamp
time_n_date=$(date +'%T %F')
time=$(echo "$time_n_date" |cut -f 1 -d \ )
date=$(echo "$time_n_date" |cut -f 2 -d \ )
# Concatenating string
str="NID='$nid' TOPIC='$topic' NOTICE='$notice' TYPE='$type'"
str="$str ACK='no' TIME='$time' DATE='$date'"
# Adding to config
echo "$str" >> $USER_DATA/notifications.conf
# Changing permissions
chmod 660 $USER_DATA/notifications.conf
#----------------------------------------------------------#
# Vesta #
#----------------------------------------------------------#
# Updating notification counter
if [ -z "$(grep NOTIFICATIONS $USER_DATA/user.conf)" ]; then
sed -i "s/^TIME/NOTIFICATIONS='yes'\nTIME/g" $USER_DATA/user.conf
else
update_user_value "$user" '$NOTIFICATIONS' "yes"
fi
exit

View file

@ -9,7 +9,7 @@
# Variable&Function # # Variable&Function #
#----------------------------------------------------------# #----------------------------------------------------------#
# Argument definition # Argument defenition
pkg_dir=$1 pkg_dir=$1
package=$2 package=$2
rewrite=$3 rewrite=$3
@ -22,47 +22,24 @@ source $VESTA/conf/vesta.conf
is_package_new() { is_package_new() {
if [ -e "$VESTA/data/packages/$package.pkg" ]; then if [ -e "$VESTA/data/packages/$package.pkg" ]; then
echo "Error: package $package already exists." echo "Error: package $package already exists."
log_event "$E_EXISTS" "$ARGUMENTS" log_event "$E_EXISTS" "$EVENT"
exit $E_EXISTS exit $E_EXISTS
fi fi
} }
is_package_consistent() { is_package_consistent() {
source $pkg_dir/$package.pkg source $pkg_dir/$package.pkg
if [ "$WEB_DOMAINS" != 'unlimited' ]; then validate_format_int $WEB_DOMAINS 'WEB_DOMAINS'
is_int_format_valid $WEB_DOMAINS 'WEB_DOMAINS' validate_format_int $WEB_ALIASES 'WEB_ALIASES'
fi validate_format_int $DNS_DOMAINS 'DNS_DOMAINS'
if [ "$WEB_ALIASES" != 'unlimited' ]; then validate_format_int $DNS_RECORDS 'DNS_RECORDS'
is_int_format_valid $WEB_ALIASES 'WEB_ALIASES' validate_format_int $MAIL_DOMAINS 'MAIL_DOMAINS'
fi validate_format_int $MAIL_ACCOUNTS 'MAIL_ACCOUNTS'
if [ "$DNS_DOMAINS" != 'unlimited' ]; then validate_format_int $DATABASES 'DATABASES'
is_int_format_valid $DNS_DOMAINS 'DNS_DOMAINS' validate_format_int $CRON_JOBS 'CRON_JOBS'
fi validate_format_int $DISK_QUOTA 'DISK_QUOTA'
if [ "$DNS_RECORDS" != 'unlimited' ]; then validate_format_int $BACKUPS 'BACKUPS'
is_int_format_valid $DNS_RECORDS 'DNS_RECORDS' validate_format_shell $SHELL
fi
if [ "$MAIL_DOMAINS" != 'unlimited' ]; then
is_int_format_valid $MAIL_DOMAINS 'MAIL_DOMAINS'
fi
if [ "$MAIL_ACCOUNTS" != 'unlimited' ]; then
is_int_format_valid $MAIL_ACCOUNTS 'MAIL_ACCOUNTS'
fi
if [ "$DATABASES" != 'unlimited' ]; then
is_int_format_valid $DATABASES 'DATABASES'
fi
if [ "$CRON_JOBS" != 'unlimited' ]; then
is_int_format_valid $CRON_JOBS 'CRON_JOBS'
fi
if [ "$DISK_QUOTA" != 'unlimited' ]; then
is_int_format_valid $DISK_QUOTA 'DISK_QUOTA'
fi
if [ "$BANDWIDTH" != 'unlimited' ]; then
is_int_format_valid $BANDWIDTH 'BANDWIDTH'
fi
if [ "$BACKUPS" != 'unlimited' ]; then
is_int_format_valid $BACKUPS 'BACKUPS'
fi
is_format_valid_shell $SHELL
} }
@ -71,7 +48,7 @@ is_package_consistent() {
#----------------------------------------------------------# #----------------------------------------------------------#
check_args '2' "$#" 'PKG_DIR PACKAGE' 'rewrite' check_args '2' "$#" 'PKG_DIR PACKAGE' 'rewrite'
is_format_valid 'pkg_dir' 'package' validate_format 'pkg_dir' 'package'
if [ "$rewrite" != 'yes' ]; then if [ "$rewrite" != 'yes' ]; then
is_package_new is_package_new
fi fi
@ -97,6 +74,6 @@ if [ "$rewrite" != 'yes' ]; then
else else
log_history "updated user package $package" '' 'admin' log_history "updated user package $package" '' 'admin'
fi fi
log_event "$OK" "$ARGUMENTS" log_event "$OK" "$EVENT"
exit exit

View file

@ -1,66 +0,0 @@
#!/bin/bash
# info: add user sftp jail
# options: USER
#
# The script enables sftp jailed environment
#----------------------------------------------------------#
# Variable&Function #
#----------------------------------------------------------#
# Argument definition
user=$1
# Includes
source $VESTA/func/main.sh
source $VESTA/conf/vesta.conf
#----------------------------------------------------------#
# Verifications #
#----------------------------------------------------------#
check_args '1' "$#" 'USER'
is_format_valid 'user'
if [ -z "$SFTPJAIL_KEY" ]; then
exit
fi
user_str=$(grep "^$user:" /etc/passwd |egrep "rssh|nologin")
if [ -z "$user_str" ]; then
exit
fi
#----------------------------------------------------------#
# Action #
#----------------------------------------------------------#
# Defining user homedir
home="$(echo $user_str |cut -f 6 -d :)"
# Adding chroot directory
if [ ! -d "/chroot/$user/$home" ]; then
mkdir -p /chroot/$user/$home
chmod 750 /chroot/$user
chmod 775 /chroot/$user/$home
chown root:sftp-only /chroot/$user
chown $user:sftp-only /chroot/$user/$home
fi
# Adding user to sftp group
usermod -a -G sftp-only $user
# Mouting home directory
if [ -z "$(mount |grep /chroot/$user/$home)" ]; then
mount -o bind $home /chroot/$user/$home/
fi
#----------------------------------------------------------#
# Vesta #
#----------------------------------------------------------#
# Logging
log_event "$OK" "$ARGUMENTS"
exit

View file

@ -1,133 +0,0 @@
#!/bin/bash
# info: add vesta softaculous
# options: [TYPE]
#
# The script enables softaculous plugin
#----------------------------------------------------------#
# Variable&Function #
#----------------------------------------------------------#
TYPE=$1
# Includes
source /etc/profile
source $VESTA/func/main.sh
source $VESTA/conf/vesta.conf
#----------------------------------------------------------#
# Verifications #
#----------------------------------------------------------#
if [ "$TYPE" = 'WEB' ]; then
if [ ! -e "$VESTA/softaculous" ] && [ ! -e "$VESTA/ioncube" ]; then
$BIN/v-schedule-vesta-softaculous
exit
fi
else
cmd="v-add-vesta-softaculous"
check_cron=$(grep "$cmd" $VESTA/data/users/admin/cron.conf 2> /dev/null)
if [ ! -z "$check_cron" ]; then
eval $check_cron
$BIN/v-delete-cron-job admin $JOB
fi
fi
if [ "$SOFTACULOUS" = 'yes' ]; then
exit
fi
#----------------------------------------------------------#
# Action #
#----------------------------------------------------------#
# Cleaning yum cache
if [ -d "/etc/sysconfig" ]; then
yum -q clean all
yum="yum -q -y --noplugins --disablerepo=* --enablerepo=vesta"
else
export DEBIAN_FRONTEND=noninteractive
apt-get update -o Dir::Etc::sourcelist="sources.list.d/vesta.list" \
-o Dir::Etc::sourceparts="-" -o APT::Get::List-Cleanup="0" -qq
fi
# Updating php pacakge
if [ -z "$($VESTA/php/bin/php -v|grep 'PHP 5.6')" ]; then
if [ -d "/etc/sysconfig" ]; then
$yum -y update vesta-php
check_result $? "vesta-php package upgrade failed" $E_UPDATE
else
apt-get -y install vesta-php
check_result $? "vesta-php package upgrade failed" $E_UPDATE
fi
fi
# Adding vesta-ioncube package
if [ -d "/etc/sysconfig" ]; then
rpm -q vesta-ioncube >/dev/null 2>&1
if [ $? -ne 0 ]; then
$yum -y install vesta-ioncube >/dev/null 2>&1
check_result $? "vesta-ioncube package installation failed" $E_UPDATE
fi
else
dpkg -l vesta-ioncube |grep ^ii >/dev/null 2>&1
if [ $? -ne 0 ]; then
apt-get -y install vesta-ioncube >/dev/null 2>&1
check_result $? "vesta-ioncube package installation failed" $E_UPDATE
fi
fi
# Adding vesta-softaculous package
if [ -d "/etc/sysconfig" ]; then
rpm -q vesta-softaculous >/dev/null 2>&1
if [ $? -ne 0 ]; then
$yum -y install vesta-softaculous >/dev/null 2>&1
check_result $? "vesta-softaculous package installation failed" $E_UPDATE
fi
else
dpkg -l vesta-softaculous |grep ^ii >/dev/null 2>&1
if [ $? -ne 0 ]; then
apt-get -y install vesta-softaculous >/dev/null 2>&1
check_result $? "vesta-softaculous package installation failed" $E_UPDATE
fi
fi
# Installing softaculous
if [ ! -e "$VESTA/softaculous/vst_installed" ]; then
mkdir -p /var/softaculous
chown -R admin:admin /var/softaculous
cd $VESTA/softaculous
wget -q http://c.vestacp.com/3rdparty/softaculous_install.inc
$VESTA/php/bin/php softaculous_install.inc
check_result $? "vesta-softaculous package installation failed" $E_UPDATE
touch $VESTA/softaculous/vst_installed
fi
# Enabling symlink
if [ -e "$VESTA/disabled_plugins/softaculous" ]; then
if [ ! -e "$VESTA/web/softaculous" ]; then
mv $VESTA/disabled_plugins/softaculous $VESTA/web/softaculous
fi
fi
# Updating SOFTACULOUS value
if [ -z "$(grep SOFTACULOUS $VESTA/conf/vesta.conf)" ]; then
echo "SOFTACULOUS='yes'" >> $VESTA/conf/vesta.conf
else
sed -i "s/SOFTACULOUS.*/SOFTACULOUS='yes'/g" \
$VESTA/conf/vesta.conf
fi
#----------------------------------------------------------#
# Vesta #
#----------------------------------------------------------#
# Logging
log_event "$OK" "$ARGUMENTS"
exit

View file

@ -1,28 +1,27 @@
#!/bin/bash #!/bin/bash
# info: add web domain # info: add web domain
# options: USER DOMAIN [IP] [ALIASES] [PROXY_EXTENSIONS] [RESTART] # options: USER DOMAIN IP [RESTART]
# #
# The function adds virtual host to a server. In cases when ip is # The function adds virtual host to a server. In cases when a template is
# undefined in the script, "default" template will be used. The alias of # undefined in the script, the template "default" will be used. The alias of
# www.domain.tld type will be automatically assigned to the domain unless # www.domain.tld type will be automatically assigned to the domain. If ip have
# "none" is transmited as argument. If ip have associated dns name, this # assocated dns name, this domain will also get the alias domain-tpl.$ipname.
# domain will also get the alias domain-tpl.$ipname. An alias with the ip # An alias with the ip name is useful during the site testing while dns isn't
# name is useful during the site testing while dns isn't moved to server yet. # moved to a server yet.
#----------------------------------------------------------# #----------------------------------------------------------#
# Variable&Function # # Variable&Function #
#----------------------------------------------------------# #----------------------------------------------------------#
# Argument defenition
# Argument definition
user=$1 user=$1
domain=$2 domain=$(idn -t --quiet -u "$2" )
domain_idn=$2 domain=$(echo $domain | sed -e 's/\.*$//g' -e 's/^\.*//g')
domain=$(echo $domain | tr '[:upper:]' '[:lower:]')
domain_idn=$(idn -t --quiet -a "$domain")
ip=$3 ip=$3
restart=$4 # will be moved to the end soon restart=$4
aliases=$5
proxy_ext=$6
# Includes # Includes
source $VESTA/func/main.sh source $VESTA/func/main.sh
@ -30,42 +29,62 @@ source $VESTA/func/domain.sh
source $VESTA/func/ip.sh source $VESTA/func/ip.sh
source $VESTA/conf/vesta.conf source $VESTA/conf/vesta.conf
# Additional argument formatting
format_domain
format_domain_idn
format_aliases
#----------------------------------------------------------# #----------------------------------------------------------#
# Verifications # # Verifications #
#----------------------------------------------------------# #----------------------------------------------------------#
check_args '3' "$#" 'USER DOMAIN IP [RESTART]'
validate_format 'user' 'domain' 'ip'
is_system_enabled "$WEB_SYSTEM" 'WEB_SYSTEM' is_system_enabled "$WEB_SYSTEM" 'WEB_SYSTEM'
check_args '2' "$#" 'USER DOMAIN [IP] [RESTART] [ALIASES] [PROXY_EXTENSIONS]'
is_format_valid 'user' 'domain' 'aliases' 'ip' 'proxy_ext'
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_package_full 'WEB_DOMAINS' 'WEB_ALIASES' is_domain_new 'web'
is_domain_new 'web' "$domain,$aliases" is_ip_valid
is_dir_symlink $HOMEDIR/$user/web is_ip_avalable
if_dir_exists $HOMEDIR/$user/web/$domain is_package_full 'WEB_DOMAINS'
is_dir_symlink $HOMEDIR/$user/web/$domain
if [ ! -z "$ip" ]; then template=$(get_user_value '$WEB_TEMPLATE')
is_ip_valid "$ip" "$user" is_web_template_valid
else
get_user_ip
fi
#----------------------------------------------------------# #----------------------------------------------------------#
# Action # # Action #
#----------------------------------------------------------# #----------------------------------------------------------#
# Reading user values # Define real ip in case of NAT
source $USER_DATA/user.conf IP=$ip
ip=$(get_real_ip $ip)
# Creating domain directories # Defining domain aliases
sudo -u $user mkdir -p $HOMEDIR/$user/web/$domain \ ip_name=$(get_ip_name)
ip_name_idn=$(idn -t --quiet -a "$ip_name")
domain_alias="www.$domain"
domain_alias_idn="www.$domain_idn"
if [ ! -z "$ip_name" ]; then
domain_alias_dash="${domain//./-}.$ip_name"
domain_alias_dash_idn="${domain_idn//./-}.$ip_name_idn"
aliases="$domain_alias,$domain_alias_dash"
aliases_idn="$domain_alias_idn,$domain_alias_dash_idn"
alias_string="ServerAlias $domain_alias_idn $domain_alias_dash_idn"
else
aliases="$domain_alias"
aliases_idn="$domain_alias_idn"
alias_string="ServerAlias $domain_alias_idn"
fi
# Defining vars for add_config function
group="$user"
email="info@$domain"
docroot="$HOMEDIR/$user/web/$domain/public_html"
tpl_file="$WEBTPL/$WEB_SYSTEM/$template.tpl"
conf="$HOMEDIR/$user/conf/web/$WEB_SYSTEM.conf"
# Adding web config
add_web_config
# Building directory tree
mkdir -p $HOMEDIR/$user/web/$domain \
$HOMEDIR/$user/web/$domain/public_html \ $HOMEDIR/$user/web/$domain/public_html \
$HOMEDIR/$user/web/$domain/public_shtml \ $HOMEDIR/$user/web/$domain/public_shtml \
$HOMEDIR/$user/web/$domain/document_errors \ $HOMEDIR/$user/web/$domain/document_errors \
@ -74,74 +93,63 @@ sudo -u $user mkdir -p $HOMEDIR/$user/web/$domain \
$HOMEDIR/$user/web/$domain/stats \ $HOMEDIR/$user/web/$domain/stats \
$HOMEDIR/$user/web/$domain/logs $HOMEDIR/$user/web/$domain/logs
# Creating domain logs # Adding domain logs
touch /var/log/$WEB_SYSTEM/domains/$domain.bytes \ touch /var/log/$WEB_SYSTEM/domains/$domain.bytes \
/var/log/$WEB_SYSTEM/domains/$domain.log \ /var/log/$WEB_SYSTEM/domains/$domain.log \
/var/log/$WEB_SYSTEM/domains/$domain.error.log /var/log/$WEB_SYSTEM/domains/$domain.error.log
# Adding symlink for logs
ln -f -s /var/log/$WEB_SYSTEM/domains/$domain.*log \ ln -f -s /var/log/$WEB_SYSTEM/domains/$domain.*log \
$HOMEDIR/$user/web/$domain/logs/ $HOMEDIR/$user/web/$domain/logs/
# Adding domain skeleton # Adding domain skeleton
sudo -u $user cp -r $WEBTPL/skel/* $HOMEDIR/$user/web/$domain/ >/dev/null 2>&1 if [ -e "$WEBTPL/skel/public_html/" ]; then
cp -r $WEBTPL/skel/public_html/ $HOMEDIR/$user/web/$domain/
fi
if [ -e "$WEBTPL/skel/public_shtml/" ]; then
cp -r $WEBTPL/skel/public_shtml/ $HOMEDIR/$user/web/$domain/
fi
if [ -e "$WEBTPL/skel/document_errors/" ]; then
cp -r $WEBTPL/skel/document_errors/ $HOMEDIR/$user/web/$domain/
fi
if [ -e "$WEBTPL/skel/cgi-bin/" ]; then
cp -r $WEBTPL/skel/cgi-bin/ $HOMEDIR/$user/web/$domain/
fi
# Changing tpl values
for file in $(find "$HOMEDIR/$user/web/$domain/" -type f); do for file in $(find "$HOMEDIR/$user/web/$domain/" -type f); do
sed -i "s/%domain%/$domain/g" $file sed -i "s/%domain%/$domain/g" $file
done done
# Changing file owner & permission # Changing file owner
chown -R $user:$user $HOMEDIR/$user/web/$domain chown -R $user:$user $HOMEDIR/$user/web/$domain
chown root:$user /var/log/$WEB_SYSTEM/domains/$domain.* $conf chown root:$user /var/log/$WEB_SYSTEM/domains/$domain.*
chown root:$user $conf
# Changing file permissions
chmod 640 $conf
chmod 551 $HOMEDIR/$user/web/$domain
chmod 751 $HOMEDIR/$user/web/$domain/private
chmod 751 $HOMEDIR/$user/web/$domain/cgi-bin
chmod 751 $HOMEDIR/$user/web/$domain/public_html
chmod 751 $HOMEDIR/$user/web/$domain/public_shtml
chmod 751 $HOMEDIR/$user/web/$domain/document_errors
chmod -f -R 665 $HOMEDIR/$user/web/$domain/cgi-bin/*
chmod -f -R 665 $HOMEDIR/$user/web/$domain/public_html/*
chmod -f -R 665 $HOMEDIR/$user/web/$domain/document_errors/*
chmod 551 $HOMEDIR/$user/web/$domain/stats
chmod 551 $HOMEDIR/$user/web/$domain/logs
chmod 640 /var/log/$WEB_SYSTEM/domains/$domain.* chmod 640 /var/log/$WEB_SYSTEM/domains/$domain.*
sudo -u $user chmod 751 $HOMEDIR/$user/web/$domain $HOMEDIR/$user/web/$domain/*
sudo -u $user chmod 551 $HOMEDIR/$user/web/$domain/stats $HOMEDIR/$user/web/$domain/logs
sudo -u $user chmod 644 $HOMEDIR/$user/web/$domain/public_*html/*.*
# Addding PHP-FPM backend # Running template trigger
if [ ! -z "$WEB_BACKEND" ]; then if [ -x $WEBTPL/$WEB_SYSTEM/$template.sh ]; then
if [ -z "$BACKEND_TEMPLATE" ]; then $WEBTPL/$WEB_SYSTEM/$template.sh $user $domain $ip $HOMEDIR $docroot
BACKEND_TEMPLATE='default'
if [ -z "$(grep BACKEND_TEMPLATE $USER_DATA/user.conf)" ]; then
sed -i "s/^DNS_TEMPL/BACKEND_TEMPLATE='default'\nDNS_TEMPL/g" \
$USER_DATA/user.conf
else
update_user_value "$user" '$BACKEND_TEMPLATE' "default"
fi
fi
$BIN/v-add-web-domain-backend "$user" "$domain" $BACKEND_TEMPLATE
check_result $? "Backend error" >/dev/null
fi fi
# Preparing domain aliases # Checking web config
if [ "$aliases" = 'none' ]; then web_conf="/etc/$WEB_SYSTEM/conf.d/vesta.conf"
ALIAS='' if [ -z "$(grep $conf $web_conf)" ]; then
else echo "Include $conf" >> $web_conf
ALIAS="www.$domain"
if [ -z "$aliases" ]; then
ALIAS="www.$domain"
else
ALIAS="$aliases"
fi
ip_alias=$(get_ip_alias $domain)
if [ ! -z "$ip_alias" ]; then
ALIAS="$ALIAS,$ip_alias"
fi
fi
# Preparing domain variables
prepare_web_domain_values
# Adding web server config
add_web_config "$WEB_SYSTEM" "$WEB_TEMPLATE.tpl"
# Adding proxy config
if [ ! -z "$PROXY_SYSTEM" ]; then
PROXY_EXT="$proxy_ext"
if [ -z "$proxy_ext" ]; then
PROXY_EXT="jpg,jpeg,gif,png,ico,svg,css,zip,tgz,gz,rar,bz2,doc,xls"
PROXY_EXT="$PROXY_EXT,exe,pdf,ppt,txt,odt,ods,odp,odf,tar,wav,bmp"
PROXY_EXT="$PROXY_EXT,rtf,js,mp3,avi,mpeg,flv,html,htm"
fi
add_web_config "$PROXY_SYSTEM" "$PROXY_TEMPLATE.tpl"
fi fi
@ -150,32 +158,31 @@ fi
#----------------------------------------------------------# #----------------------------------------------------------#
# Increasing counters # Increasing counters
increase_ip_value "$local_ip" increase_ip_value "$ip"
increase_user_value "$user" '$U_WEB_DOMAINS' increase_user_value "$user" '$U_WEB_DOMAINS'
increase_user_value "$user" '$U_WEB_ALIASES' "$alias_number" increase_user_value "$user" '$U_WEB_ALIASES'
# Generating timestamp # Defining domain variables
time_n_date=$(date +'%T %F') str="DOMAIN='$domain' IP='$IP' IP6='' ALIAS='$aliases' TPL='$template'"
time=$(echo "$time_n_date" |cut -f 1 -d \ ) str="$str SSL='no' SSL_HOME='same' FTP_USER='' FTP_MD5=''"
date=$(echo "$time_n_date" |cut -f 2 -d \ ) str="$str PROXY='' PROXY_EXT='' STATS='' STATS_USER=''"
str="$str STATS_CRYPT='' U_DISK='0' U_BANDWIDTH='0' SUSPENDED='no'"
str="$str TIME='$TIME' DATE='$DATE'"
# Adding domain in web.conf # Registering domain
echo "DOMAIN='$domain' IP='$ip' IP6='' ALIAS='$ALIAS' TPL='$WEB_TEMPLATE'\ echo "$str" >> $USER_DATA/web.conf
SSL='no' SSL_HOME='same' LETSENCRYPT='no' FTP_USER='' FTP_MD5=''\ chmod 660 $USER_DATA/web.conf
BACKEND='$BACKEND_TEMPLATE' PROXY='$PROXY_TEMPLATE' PROXY_EXT='$PROXY_EXT'\
STATS='' STATS_USER='' STATS_CRYPT='' U_DISK='0' U_BANDWIDTH='0'\
SUSPENDED='no' TIME='$time' DATE='$date'" >> $USER_DATA/web.conf
# Restarting web server # Restart web server
$BIN/v-restart-web $restart if [ "$restart" != 'no' ]; then
check_result $? "Web restart failed" >/dev/null $BIN/v-restart-web
if [ $? -ne 0 ]; then
# Restarting proxy server exit $E_RESTART
$BIN/v-restart-proxy $restart fi
check_result $? "Proxy restart failed" >/dev/null fi
# Logging # Logging
log_history "added web domain $domain" log_history "added web domain $domain"
log_event "$OK" "$ARGUMENTS" log_event "$OK" "$EVENT"
exit exit

View file

@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
# info: add web domain alias # info: add web domain alias
# options: USER DOMAIN ALIASES [RESTART] # options: USER DOMAIN ALIAS [RESTART]
# #
# The call is intended for adding aliases to a domain (it is also called # The call is intended for adding aliases to a domain (it is also called
# "domain parking"). The function supports wildcards *.domain.tpl. # "domain parking"). The function supports wildcards *.domain.tpl.
@ -10,11 +10,15 @@
# Variable&Function # # Variable&Function #
#----------------------------------------------------------# #----------------------------------------------------------#
# Argument definition # Argument defenition
user=$1 user=$1
domain=$2 domain=$(idn -t --quiet -u "$2" )
domain_idn=$2 domain=$(echo $domain | tr '[:upper:]' '[:lower:]')
aliases=$3 domain_idn=$(idn -t --quiet -a "$domain")
dom_alias=$(idn -t --quiet -u "$3" )
dom_alias=$(echo $dom_alias | sed -e 's/\.*$//g' -e 's/^\.*//g')
dom_alias=$(echo $dom_alias | tr '[:upper:]' '[:lower:]')
dom_alias_idn=$(idn -t --quiet -a "$dom_alias" )
restart="$4" restart="$4"
# Includes # Includes
@ -23,25 +27,19 @@ source $VESTA/func/domain.sh
source $VESTA/func/ip.sh source $VESTA/func/ip.sh
source $VESTA/conf/vesta.conf source $VESTA/conf/vesta.conf
# Additional argument formatting
format_domain
format_domain_idn
# TODO: $domain_idn not used in this script - maybe $domain should be converted to $doman_idn ?
format_aliases
#----------------------------------------------------------# #----------------------------------------------------------#
# Verifications # # Verifications #
#----------------------------------------------------------# #----------------------------------------------------------#
check_args '3' "$#" 'USER DOMAIN ALIASES [RESTART]' check_args '3' "$#" 'USER DOMAIN DOM_ALIAS [RESTART]'
is_format_valid 'user' 'domain' 'dom_alias' validate_format 'user' 'domain' 'dom_alias'
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_domain_new 'web' "$aliases" is_domain_new 'web' "$dom_alias"
is_package_full 'WEB_ALIASES' is_package_full 'WEB_ALIASES'
@ -51,31 +49,43 @@ is_package_full 'WEB_ALIASES'
# Parsing domain values # Parsing domain values
get_domain_values 'web' get_domain_values 'web'
tpl_file="$WEBTPL/$WEB_SYSTEM/$TPL.tpl"
conf="$HOMEDIR/$user/conf/web/$WEB_SYSTEM.conf"
ip=$(get_real_ip $IP)
# Parsing domain aliases
if [ -z "$ALIAS" ]; then
ALIAS="$dom_alias"
else
ALIAS="$ALIAS,$dom_alias"
fi
# Preparing domain values for the template substitution # Preparing domain values for the template substitution
local_ip=$(get_real_ip $IP) upd_web_domain_values
if [ -z "$ALIAS" ]; then
ALIAS="$aliases" # Recreating vhost
else del_web_config
ALIAS="$ALIAS,$aliases" add_web_config
fi
prepare_web_domain_values
# Rebuilding vhost
del_web_config "$WEB_SYSTEM" "$TPL.tpl"
add_web_config "$WEB_SYSTEM" "$TPL.tpl"
if [ "$SSL" = 'yes' ]; then if [ "$SSL" = 'yes' ]; then
del_web_config "$WEB_SYSTEM" "$TPL.stpl" tpl_file="$WEBTPL/$WEB_SYSTEM/$TPL.stpl"
add_web_config "$WEB_SYSTEM" "$TPL.stpl" conf="$HOMEDIR/$user/conf/web/s$WEB_SYSTEM.conf"
del_web_config
add_web_config
fi fi
# Rebuilding proxy configuration # Checking proxy
if [ ! -z "$PROXY_SYSTEM" ] && [ ! -z "$PROXY" ]; then if [ ! -z "$PROXY" ]; then
del_web_config "$PROXY_SYSTEM" "$PROXY.tpl" tpl_file="$WEBTPL/$PROXY_SYSTEM/$PROXY.tpl"
add_web_config "$PROXY_SYSTEM" "$PROXY.tpl" conf="$HOMEDIR/$user/conf/web/$PROXY_SYSTEM.conf"
del_web_config
add_web_config
if [ "$SSL" = 'yes' ]; then if [ "$SSL" = 'yes' ]; then
del_web_config "$PROXY_SYSTEM" "$PROXY.stpl" tpl_file="$WEBTPL/$PROXY_SYSTEM/$PROXY.stpl"
add_web_config "$PROXY_SYSTEM" "$PROXY.stpl" conf="$HOMEDIR/$user/conf/web/s$PROXY_SYSTEM.conf"
del_web_config
add_web_config
fi fi
fi fi
@ -86,18 +96,24 @@ fi
# Adding new alias # Adding new alias
update_object_value 'web' 'DOMAIN' "$domain" '$ALIAS' "$ALIAS" update_object_value 'web' 'DOMAIN' "$domain" '$ALIAS' "$ALIAS"
# Update counters
increase_user_value "$user" '$U_WEB_ALIASES' increase_user_value "$user" '$U_WEB_ALIASES'
# Restarting web server # Adding task to the vesta pipe
$BIN/v-restart-web $restart if [ "$restart" != 'no' ]; then
check_result $? "Web restart failed" >/dev/null $BIN/v-restart-web
if [ $? -ne 0 ]; then
exit $E_RESTART
fi
# Restarting proxy server $BIN/v-restart-proxy
$BIN/v-restart-proxy $restart if [ $? -ne 0 ]; then
check_result $? "Proxy restart failed" >/dev/null exit $E_RESTART
fi
fi
log_history "added $dom_alias as alias for $domain"
log_history "added $aliases for $domain" log_event "$OK" "$EVENT"
log_event "$OK" "$ARGUMENTS"
exit exit

View file

@ -1,77 +0,0 @@
#!/bin/bash
# info: add web domain backend
# options: USER DOMAIN [TEMPLATE] [RESTART]
#
# The call is used for adding web backend configuration.
#----------------------------------------------------------#
# Variable&Function #
#----------------------------------------------------------#
# Argument definition
user=$1
domain=$2
template=${3-default}
restart=$4
# Includes
source $VESTA/func/main.sh
source $VESTA/func/domain.sh
source $VESTA/conf/vesta.conf
#----------------------------------------------------------#
# Verifications #
#----------------------------------------------------------#
check_args '2' "$#" 'USER DOMAIN [TEMPLATE] [RESTART]'
is_system_enabled "$WEB_BACKEND" 'WEB_BACKEND'
is_object_valid 'user' 'USER' "$user"
is_object_unsuspended 'user' 'USER' "$user"
is_backend_template_valid "$template"
#----------------------------------------------------------#
# Action #
#----------------------------------------------------------#
# Defining pool directory
prepare_web_backend
# Checking backend configuration
if [ -e "$pool/$backend_type.conf" ]; then
exit
fi
# Allocating backend port
backend_port=9000
ports=$(grep listen $pool/* 2>/dev/null |grep -o :[0-9].*)
ports=$(echo "$ports" |sed "s/://" |sort -n)
for port in $ports; do
if [ "$backend_port" -eq "$port" ]; then
backend_port=$((backend_port + 1))
fi
done
# Adding backend config
cat $WEBTPL/$WEB_BACKEND/$template.tpl |\
sed -e "s|%backend_port%|$backend_port|" \
-e "s|%user%|$user|g"\
-e "s|%domain%|$domain|g"\
-e "s|%backend%|$backend_type|g" > $pool/$backend_type.conf
#----------------------------------------------------------#
# Vesta #
#----------------------------------------------------------#
# Restart backend server
$BIN/v-restart-web-backend $restart
check_result $? "Web backend restart failed" >/dev/null
# Logging
log_history "added $WEB_BACKEND backend configuration for $domain"
log_event "$OK" "$ARGUMENTS"
exit

View file

@ -9,12 +9,12 @@
# Variable&Function # # Variable&Function #
#----------------------------------------------------------# #----------------------------------------------------------#
# Argument definition # Argument defenition
user=$1 user=$1
domain=$2 domain=$(idn -t --quiet -u "$2" )
domain_idn=$2 domain_idn=$(idn -t --quiet -a "$domain")
ftp_user=${1}_${3} ftp_user=${1}_${3}
password=$4; HIDE=4 ftp_password=$4
ftp_path=$5 ftp_path=$5
# Includes # Includes
@ -22,10 +22,9 @@ source $VESTA/func/main.sh
source $VESTA/func/domain.sh source $VESTA/func/domain.sh
source $VESTA/conf/vesta.conf source $VESTA/conf/vesta.conf
# Additional argument formatting # Hiding password
format_domain A4='******'
format_domain_idn EVENT="$DATE $TIME $SCRIPT $A1 $A2 $A3 $A4 $A5 $A6 $A7 $A8 $A9"
# TODO: $domain_idn not used in this script - maybe $domain should be converted to $doman_idn ?
#----------------------------------------------------------# #----------------------------------------------------------#
@ -33,7 +32,7 @@ format_domain_idn
#----------------------------------------------------------# #----------------------------------------------------------#
check_args '4' "$#" 'USER DOMAIN FTP_USER FTP_PASSWORD [FTP_PATH]' check_args '4' "$#" 'USER DOMAIN FTP_USER FTP_PASSWORD [FTP_PATH]'
is_format_valid 'user' 'domain' 'ftp_user' 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"
@ -42,10 +41,9 @@ is_object_unsuspended 'web' 'DOMAIN' "$domain"
check_ftp_user=$(grep "^$ftp_user:" /etc/passwd) check_ftp_user=$(grep "^$ftp_user:" /etc/passwd)
if [ ! -z "$check_ftp_user" ] && [ "$FTP_USER" != "$ftp_user" ]; then if [ ! -z "$check_ftp_user" ] && [ "$FTP_USER" != "$ftp_user" ]; then
echo "Error: ftp user $ftp_user already exists" echo "Error: ftp user $ftp_user already exists"
log_event "$E_EXISTS" "$ARGUMENTS" log_event "$E_EXISTS" "$EVENT"
exit $E_EXISTS exit $E_EXISTS
fi fi
is_password_valid
#----------------------------------------------------------# #----------------------------------------------------------#
@ -56,8 +54,12 @@ is_password_valid
get_domain_values 'web' get_domain_values 'web'
# Defining ftp user shell # Defining ftp user shell
shell=$(which nologin) if [ -z "$FTP_SHELL" ]; then
if [ ! -z "$FTP_SHELL" ]; then shell='/sbin/nologin'
if [ -e "/usr/bin/rssh" ]; then
shell='/usr/bin/rssh'
fi
else
shell=$FTP_SHELL shell=$FTP_SHELL
fi fi
@ -69,7 +71,7 @@ else
ftp_path_a=$(readlink -f "$HOMEDIR/$user/web/$domain/$ftp_path") ftp_path_a=$(readlink -f "$HOMEDIR/$user/web/$domain/$ftp_path")
if [ -z "$(echo $ftp_path_a |grep $HOMEDIR/$user/web/$domain)" ]; then if [ -z "$(echo $ftp_path_a |grep $HOMEDIR/$user/web/$domain)" ]; then
echo "Error: absolute path $ftp_path_a is invalid" echo "Error: absolute path $ftp_path_a is invalid"
log_event "$E_INVALID" "$ARGUMENTS" log_event "$E_INVALID" "$EVENT"
exit $E_INVALID exit $E_INVALID
fi fi
# Creating ftp user home directory # Creating ftp user home directory
@ -84,18 +86,13 @@ fi
/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 -g $user) \ -g $(id -u $user) \
-M -d "$ftp_path_a" > /dev/null 2>&1 -M -d "$ftp_path_a" > /dev/null 2>&1
# Set ftp user password # Set ftp user password
echo "$ftp_user:$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)
# Adding jailed sftp env
if [ ! -z "$SFTPJAIL_KEY" ]; then
$BIN/v-add-user-sftp-jail $ftp_user
fi
#----------------------------------------------------------# #----------------------------------------------------------#
# Vesta # # Vesta #
@ -121,6 +118,6 @@ update_object_value 'web' 'DOMAIN' "$domain" '$FTP_PATH' "$ftp_path"
# Logging # Logging
log_history "added ftp account ${1}_${3}@$domain" log_history "added ftp account ${1}_${3}@$domain"
log_event "$OK" "$ARGUMENTS" log_event "$OK" "$EVENT"
exit exit

View file

@ -1,115 +0,0 @@
#!/bin/bash
# info: add password protection for web domain
# options: USER DOMAIN AUTH_USER AUTH_PASSWORD [RESTART]
#
# The call is used for securing web domain with http auth
#----------------------------------------------------------#
# Variable&Function #
#----------------------------------------------------------#
# Argument definition
user=$1
domain=$2
auth_user=$3
password=$4; HIDE=4
restart=${5-yes}
# Includes
source $VESTA/func/main.sh
source $VESTA/func/domain.sh
source $VESTA/conf/vesta.conf
# Defining htpasswd file
htaccess="$HOMEDIR/$user/conf/web/$WEB_SYSTEM.$domain.conf_htaccess"
htpasswd="$HOMEDIR/$user/conf/web/$WEB_SYSTEM.$domain.htpasswd"
shtaccess="$HOMEDIR/$user/conf/web/s$WEB_SYSTEM.$domain.conf_htaccess"
shtpasswd="$HOMEDIR/$user/conf/web/s$WEB_SYSTEM.$domain.htpasswd"
docroot="$HOMEDIR/$user/web/$domain/public_html"
#----------------------------------------------------------#
# Verifications #
#----------------------------------------------------------#
check_args '4' "$#" 'USER DOMAIN AUTH_USER AUTH_PASSWORD [RESTART]'
is_format_valid 'user' 'domain'
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_password_valid
get_domain_values 'web'
if [ ! -z "$(echo "$AUTH_USER" |tr : '\n' |grep ^$auth_user$)" ]; then
echo "Error: auth user $auth_user already exists"
log_event "$E_EXISTS" "$ARGUMENTS"
exit $E_EXISTS
fi
#----------------------------------------------------------#
# Action #
#----------------------------------------------------------#
# Adding htaccess password protection
if [ ! -e "$htaccess" ]; then
if [ "$WEB_SYSTEM" != 'nginx' ]; then
echo "<Directory $docroot>" > $htaccess
echo " AuthUserFile $htpasswd" >> $htaccess
echo " AuthName \"$domain access\"" >> $htaccess
echo " AuthType Basic" >> $htaccess
echo " Require valid-user" >> $htaccess
echo "</Directory>" >> $htaccess
else
echo "auth_basic \"$domain password access\";" > $htaccess
echo "auth_basic_user_file $htpasswd;" >> $htaccess
fi
restart_required='yes'
fi
# Adding httpasswd user
auth_hash=$($BIN/v-generate-password-hash htpasswd htpasswd $password)
touch $htpasswd
chmod 640 $htpasswd $htaccess
chgrp $user $htpasswd $htaccess
sed -i "/^$auth_user:/d" $htpasswd
echo "$auth_user:$auth_hash" >> $htpasswd
# Symbolic link for secure web templates
if [ ! -L $shtpasswd ]; then
ln -s $htpasswd $shtpasswd
fi
if [ ! -L $shtaccess ]; then
ln -s $htaccess $shtaccess
fi
# Restarting web server
if [ "$restart" != 'no' ] && [ "$restart_required" = 'yes' ]; then
$BIN/v-restart-web
fi
#----------------------------------------------------------#
# Vesta #
#----------------------------------------------------------#
# Preparing web.conf keys
if [ ! -z "$AUTH_USER" ]; then
auth_user="$AUTH_USER:$auth_user"
auth_hash="$AUTH_HASH:$auth_hash"
else
# Adding new key into web.conf
add_object_key "web" 'DOMAIN' "$domain" 'AUTH_USER' 'U_DISK'
add_object_key "web" 'DOMAIN' "$domain" 'AUTH_HASH' 'U_DISK'
fi
# Updating config
update_object_value 'web' 'DOMAIN' "$domain" '$AUTH_USER' "$auth_user"
update_object_value 'web' 'DOMAIN' "$domain" '$AUTH_HASH' "$auth_hash"
# Logging
log_history "added http auth user $httpauth_user on $domain"
log_event "$OK" "$ARGUMENTS"
exit

View file

@ -10,9 +10,10 @@
# Variable&Function # # Variable&Function #
#----------------------------------------------------------# #----------------------------------------------------------#
# Argument definition # Argument defenition
user=$1 user=$1
domain=$2 domain=$(idn -t --quiet -u "$2" )
domain_idn=$(idn -t --quiet -a "$domain")
template=$3 template=$3
default_extentions="jpg,jpeg,gif,png,ico,svg,css,zip,tgz,gz,rar,bz2,doc,xls,\ default_extentions="jpg,jpeg,gif,png,ico,svg,css,zip,tgz,gz,rar,bz2,doc,xls,\
exe,pdf,ppt,txt,odt,ods,odp,odf,tar,wav,bmp,rtf,js,mp3,avi,mpeg,flv,html,htm" exe,pdf,ppt,txt,odt,ods,odp,odf,tar,wav,bmp,rtf,js,mp3,avi,mpeg,flv,html,htm"
@ -31,7 +32,7 @@ source $VESTA/conf/vesta.conf
#----------------------------------------------------------# #----------------------------------------------------------#
check_args '2' "$#" 'USER DOMAIN [TEMPLATE] [EXTENTIONS] [RESTART]' check_args '2' "$#" 'USER DOMAIN [TEMPLATE] [EXTENTIONS] [RESTART]'
is_format_valid 'user' 'domain' 'extentions' validate_format 'user' 'domain' 'extentions'
is_system_enabled "$PROXY_SYSTEM" 'PROXY_SYSTEM' is_system_enabled "$PROXY_SYSTEM" 'PROXY_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"
@ -41,7 +42,7 @@ is_object_value_empty 'web' 'DOMAIN' "$domain" '$PROXY'
if [ -z $template ]; then if [ -z $template ]; then
template=$(get_user_value '$PROXY_TEMPLATE') template=$(get_user_value '$PROXY_TEMPLATE')
fi fi
is_proxy_template_valid $template is_proxy_template_valid
#----------------------------------------------------------# #----------------------------------------------------------#
@ -50,16 +51,44 @@ is_proxy_template_valid $template
# Defining domain parameters # Defining domain parameters
get_domain_values 'web' get_domain_values 'web'
prepare_web_domain_values PROXY="$template"
local_ip=$(get_real_ip $IP) PROXY_EXT="$extentions"
tpl_file="$WEBTPL/$PROXY_SYSTEM/$PROXY.tpl"
conf="$HOMEDIR/$user/conf/web/$PROXY_SYSTEM.conf"
ip=$(get_real_ip $IP)
# Preparing domain values for the template substitution # Preparing domain values for the template substitution
PROXY_EXT="$extentions" upd_web_domain_values
add_web_config "$PROXY_SYSTEM" "$template.tpl" add_web_config
# Adding proxy for ssl # Set permission and ownership
chown root:$user $conf
chmod 640 $conf
# Checking proxy config
proxy_conf="/etc/$PROXY_SYSTEM/conf.d/vesta.conf"
if [ -z "$(grep "$conf" $proxy_conf)" ]; then
echo "include $conf;" >> $proxy_conf
fi
# Checking ssl
if [ "$SSL" = 'yes' ]; then if [ "$SSL" = 'yes' ]; then
add_web_config "$PROXY_SYSTEM" "$template.stpl" tpl_file="$WEBTPL/$PROXY_SYSTEM/$PROXY.stpl"
conf="$HOMEDIR/$user/conf/web/s$PROXY_SYSTEM.conf"
add_web_config
chown root:$user $conf
chmod 640 $conf
proxy_conf="/etc/$PROXY_SYSTEM/conf.d/vesta.conf"
if [ -z "$(grep "$conf" $proxy_conf)" ]; then
echo "include $conf;" >> $proxy_conf
fi
fi
# Running template trigger
if [ -x $WEBTPL/$PROXY_SYSTEM/$template.sh ]; then
$WEBTPL/$PROXY_SYSTEM/$template.sh $user $domain $ip $HOMEDIR $docroot
fi fi
@ -68,14 +97,18 @@ fi
#----------------------------------------------------------# #----------------------------------------------------------#
# Update config # Update config
update_object_value 'web' 'DOMAIN' "$domain" '$PROXY' "$template" update_object_value 'web' 'DOMAIN' "$domain" '$PROXY' "$PROXY"
update_object_value 'web' 'DOMAIN' "$domain" '$PROXY_EXT' "$extentions" update_object_value 'web' 'DOMAIN' "$domain" '$PROXY_EXT' "$extentions"
# Restarting web server # Restart web server
$BIN/v-restart-proxy $restart if [ "$restart" != 'no' ]; then
check_result $? "Proxy restart failed" >/dev/null $BIN/v-restart-proxy
if [ $? -ne 0 ]; then
exit $E_RESTART
fi
fi
log_history "enabled proxy support for $domain" log_history "enabled proxy support for $domain"
log_event "$OK" "$ARGUMENTS" log_event "$OK" "$EVENT"
exit exit

View file

@ -14,44 +14,27 @@
# Variable&Function # # Variable&Function #
#----------------------------------------------------------# #----------------------------------------------------------#
# Argument definition # Argument defenition
user=$1 user=$1
domain=$2 domain=$(idn -t --quiet -u "$2" )
domain_idn=$(idn -t --quiet -a "$domain")
ssl_dir=$3 ssl_dir=$3
ssl_home=${4-same} ssl_home=${4-same}
restart="$5" restart="$5"
# Additional argument formatting
if [[ "$domain" =~ [[:upper:]] ]]; then
domain=$(echo "$domain" |tr '[:upper:]' '[:lower:]')
fi
if [[ "$domain" =~ ^www\..* ]]; then
domain=$(echo "$domain" |sed -e "s/^www.//")
fi
if [[ "$domain" =~ .*\.$ ]]; then
domain=$(echo "$domain" |sed -e "s/\.$//")
fi
domain=$(idn -t --quiet -u "$domain" )
domain_idn=$(idn -t --quiet -a "$domain")
# Includes # Includes
source $VESTA/func/main.sh source $VESTA/func/main.sh
source $VESTA/func/domain.sh source $VESTA/func/domain.sh
source $VESTA/func/ip.sh source $VESTA/func/ip.sh
source $VESTA/conf/vesta.conf source $VESTA/conf/vesta.conf
# Additional argument formatting
format_domain
format_domain_idn
#----------------------------------------------------------# #----------------------------------------------------------#
# Verifications # # Verifications #
#----------------------------------------------------------# #----------------------------------------------------------#
check_args '3' "$#" 'USER DOMAIN SSL_DIR [SSL_HOME] [RESTART]' check_args '3' "$#" 'USER DOMAIN SSL_DIR [SSL_HOME] [RESTART]'
is_format_valid 'user' 'domain' 'ssl_dir' validate_format 'user' 'domain' 'ssl_dir'
is_system_enabled "$WEB_SYSTEM" 'WEB_SYSTEM' is_system_enabled "$WEB_SYSTEM" 'WEB_SYSTEM'
is_system_enabled "$WEB_SSL" 'SSL_SUPPORT' is_system_enabled "$WEB_SSL" 'SSL_SUPPORT'
is_object_valid 'user' 'USER' "$user" is_object_valid 'user' 'USER' "$user"
@ -77,6 +60,22 @@ if [ -e "$ssl_dir/$domain.ca" ]; then
fi fi
chmod 660 $USER_DATA/ssl/$domain.* chmod 660 $USER_DATA/ssl/$domain.*
# Parsing domain values
get_domain_values 'web'
conf="$HOMEDIR/$user/conf/web/s$WEB_SYSTEM.conf"
tpl_file="$WEBTPL/$WEB_SYSTEM/$TPL.stpl"
SSL_HOME="$ssl_home"
ip=$(get_real_ip $IP)
# Preparing domain values for the template substitution
upd_web_domain_values
# Adding domain to the web config
add_web_config
chown root:$user $conf
chmod 640 $conf
# Adding certificate to user dir # Adding certificate to user dir
cp -f $USER_DATA/ssl/$domain.crt $HOMEDIR/$user/conf/web/ssl.$domain.crt cp -f $USER_DATA/ssl/$domain.crt $HOMEDIR/$user/conf/web/ssl.$domain.crt
cp -f $USER_DATA/ssl/$domain.key $HOMEDIR/$user/conf/web/ssl.$domain.key cp -f $USER_DATA/ssl/$domain.key $HOMEDIR/$user/conf/web/ssl.$domain.key
@ -85,20 +84,31 @@ if [ -e "$USER_DATA/ssl/$domain.ca" ]; then
cp -f $USER_DATA/ssl/$domain.ca $HOMEDIR/$user/conf/web/ssl.$domain.ca cp -f $USER_DATA/ssl/$domain.ca $HOMEDIR/$user/conf/web/ssl.$domain.ca
fi fi
# Parsing domain values # Running template trigger
get_domain_values 'web' if [ -x $WEBTPL/$WEB_SYSTEM/$template.sh ]; then
local_ip=$(get_real_ip $IP) $WEBTPL/$WEB_SYSTEM/$template.sh $user $domain $ip $HOMEDIR $sdocroot
fi
# Preparing domain values for the template substitution # Checking web config
SSL_HOME="$ssl_home" web_conf="/etc/$WEB_SYSTEM/conf.d/vesta.conf"
prepare_web_domain_values if [ -z "$(grep "$conf" $web_conf)" ]; then
echo "Include $conf" >> $web_conf
fi
# Adding domain to the web config # Checking proxy
add_web_config "$WEB_SYSTEM" "$TPL.stpl" if [ ! -z "$PROXY" ]; then
conf="$HOMEDIR/$user/conf/web/s$PROXY_SYSTEM.conf"
tpl_file="$WEBTPL/$PROXY_SYSTEM/$PROXY.stpl"
add_web_config
# Checking proxy config chown root:$user $conf
if [ ! -z "$PROXY_SYSTEM" ] && [ ! -z "$PROXY" ]; then chmod 640 $conf
add_web_config "$PROXY_SYSTEM" "$PROXY.stpl"
# Checking proxy config
proxy_conf="/etc/$PROXY_SYSTEM/conf.d/vesta.conf"
if [ -z "$(grep "$conf" $proxy_conf )" ]; then
echo "include $conf;" >> $proxy_conf
fi
fi fi
@ -113,44 +123,21 @@ increase_user_value "$user" '$U_WEB_SSL'
update_object_value 'web' 'DOMAIN' "$domain" '$SSL_HOME' "$SSL_HOME" update_object_value 'web' 'DOMAIN' "$domain" '$SSL_HOME' "$SSL_HOME"
update_object_value 'web' 'DOMAIN' "$domain" '$SSL' "yes" update_object_value 'web' 'DOMAIN' "$domain" '$SSL' "yes"
# Restarting web server # Restart web server
$BIN/v-restart-web $restart if [ "$restart" != 'no' ]; then
check_result $? "Web restart failed" >/dev/null $BIN/v-restart-web
if [ $? -ne 0 ]; then
$BIN/v-restart-proxy $restart exit $E_RESTART
check_result $? "Proxy restart failed" >/dev/null
# Updating system ssl dependencies
if [ ! -z "$VESTA_CERTIFICATE" ]; then
crt_user=$(echo "$VESTA_CERTIFICATE" |cut -f 1 -d :)
crt_domain=$(echo "$VESTA_CERTIFICATE" |cut -f 2 -d :)
if [ "$user" = "$crt_user" ] && [ "$domain" = "$crt_domain" ]; then
$BIN/v-add-sys-vesta-ssl $user $domain >/dev/null 2>&1
fi fi
fi
if [ ! -z "$MAIL_CERTIFICATE" ]; then
crt_user=$(echo "$MAIL_CERTIFICATE" |cut -f 1 -d :)
crt_domain=$(echo "$MAIL_CERTIFICATE" |cut -f 2 -d :)
if [ "$user" = "$crt_user" ] && [ "$domain" = "$crt_domain" ]; then
$BIN/v-add-sys-mail-ssl $user $domain >/dev/null 2>&1
fi
fi
if [ ! -z "$UPDATE_HOSTNAME_SSL" ] && [ "$UPDATE_HOSTNAME_SSL" = "yes" ]; then $BIN/v-restart-proxy
hostname=$(hostname) if [ $? -ne 0 ]; then
if [ "$hostname" = "$domain" ]; then exit $E_RESTART
$BIN/v-update-host-certificate $user $domain
fi fi
fi fi
UPDATE_SSL_SCRIPT=''
source $VESTA/conf/vesta.conf
if [ ! -z "$UPDATE_SSL_SCRIPT" ]; then
eval "$UPDATE_SSL_SCRIPT $user $domain"
fi
# Logging # Logging
log_history "enabled ssl support for $domain" log_history "enabled ssl support for $domain"
log_event "$OK" "$ARGUMENTS" log_event "$OK" "$EVENT"
exit exit

View file

@ -13,10 +13,10 @@
# Variable&Function # # Variable&Function #
#----------------------------------------------------------# #----------------------------------------------------------#
# Argument definition # Argument defenition
user=$1 user=$1
domain=$2 domain=$(idn -t --quiet -u "$2" )
domain_idn=$2 domain_idn=$(idn -t --quiet -a "$domain")
type=$3 type=$3
# Includes # Includes
@ -24,17 +24,13 @@ source $VESTA/func/main.sh
source $VESTA/func/domain.sh source $VESTA/func/domain.sh
source $VESTA/conf/vesta.conf source $VESTA/conf/vesta.conf
# Additional argument formatting
format_domain
format_domain_idn
#----------------------------------------------------------# #----------------------------------------------------------#
# Verifications # # Verifications #
#----------------------------------------------------------# #----------------------------------------------------------#
check_args '3' "$#" 'USER DOMAIN TYPE' check_args '3' "$#" 'USER DOMAIN TYPE'
is_format_valid 'user' 'domain' validate_format 'user' 'domain'
is_system_enabled "$WEB_SYSTEM" 'WEB_SYSTEM' is_system_enabled "$WEB_SYSTEM" 'WEB_SYSTEM'
is_type_valid "$STATS_SYSTEM" "$type" is_type_valid "$STATS_SYSTEM" "$type"
is_object_valid 'user' 'USER' "$user" "$user" is_object_valid 'user' 'USER' "$user" "$user"
@ -51,8 +47,10 @@ is_object_value_empty 'web' 'DOMAIN' "$domain" '$STATS'
# Parse aliases # Parse aliases
get_domain_values 'web' get_domain_values 'web'
# Preparing domain values for the template substitution
upd_web_domain_values
# Adding statistic config # Adding statistic config
prepare_web_domain_values
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" \
@ -92,7 +90,7 @@ update_object_value 'web' 'DOMAIN' "$domain" '$STATS' "$type"
# Logging # Logging
log_history "enabled web log analyzer for $domain" log_history "enabled web log analyzer for $domain"
log_event "$OK" "$ARGUMENTS" log_event "$OK" "$EVENT"
# Build stats # Build stats
exec $BIN/v-update-web-domain-stat $user $domain exec $BIN/v-update-web-domain-stat $user $domain

View file

@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
# info: add password protection to web domain statistics # info: add password protection to web domain statistics
# options: USER DOMAIN STATS_USER STATS_PASSWORD [RESTART] # options: USER DOMAIN STATS_USER STATS_PASSWORD
# #
# The call is used for securing the web statistics page. # The call is used for securing the web statistics page.
@ -9,57 +9,52 @@
# Variable&Function # # Variable&Function #
#----------------------------------------------------------# #----------------------------------------------------------#
# Argument definition # Argument defenition
user=$1 user=$1
domain=$2 domain=$(idn -t --quiet -u "$2" )
stats_user=$3 stats_user=$3
password=$4; HIDE=4 stats_pass=$4
restart=$5
# Includes # Includes
source $VESTA/func/main.sh source $VESTA/func/main.sh
source $VESTA/func/domain.sh source $VESTA/func/domain.sh
source $VESTA/conf/vesta.conf source $VESTA/conf/vesta.conf
# Hiding password
A4='******'
EVENT="$DATE $TIME $SCRIPT $A1 $A2 $A3 $A4 $A5 $A6 $A7 $A8 $A9"
#----------------------------------------------------------# #----------------------------------------------------------#
# Verifications # # Verifications #
#----------------------------------------------------------# #----------------------------------------------------------#
check_args '4' "$#" 'USER DOMAIN STATS_USER STATS_PASS [RESTART]' check_args '4' "$#" 'USER DOMAIN STATS_USER STATS_PASS'
is_format_valid 'user' 'domain' 'stats_user' validate_format 'user' 'domain' 'stats_user' 'stats_pass'
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_password_valid
#----------------------------------------------------------# #----------------------------------------------------------#
# Action # # Action #
#----------------------------------------------------------# #----------------------------------------------------------#
# Defining statistic dir # Definining statistic dir
stats_dir="$HOMEDIR/$user/web/$domain/stats" stats_dir="$HOMEDIR/$user/web/$domain/stats"
conf_dir="$HOMEDIR/$user/conf/web"
# Adding htaccess file # Adding htaccess file
if [ "$WEB_SYSTEM" = 'nginx' ]; then echo "AuthUserFile $stats_dir/.htpasswd
echo "auth_basic \"Web Statistics\";" > $conf_dir/$domain.auth AuthName \"Web Statistics\"
echo "auth_basic_user_file $stats_dir/.htpasswd;" >> $conf_dir/$domain.auth AuthType Basic
else Require valid-user" > $stats_dir/.htaccess
echo "AuthUserFile $stats_dir/.htpasswd" > $stats_dir/.htaccess
echo "AuthName \"Web Statistics\"" >> $stats_dir/.htaccess
echo "AuthType Basic" >> $stats_dir/.htaccess
echo "Require valid-user" >> $stats_dir/.htaccess
fi
# Generating htaccess user and password # Generating htaccess user and password
salt=$(generate_password "$PW_MATRIX" "8") rm -f $stats_dir/.htpasswd
stats_pass=$($BIN/v-generate-password-hash md5 $salt $password) htpasswd -bc $stats_dir/.htpasswd "$stats_user" "$stats_pass" &>/dev/null
echo "$stats_user:$stats_pass" > $stats_dir/.htpasswd stats_crypt=$(grep $stats_user: $stats_dir/.htpasswd |cut -f 2 -d :)
#----------------------------------------------------------# #----------------------------------------------------------#
# Vesta # # Vesta #
@ -67,16 +62,10 @@ echo "$stats_user:$stats_pass" > $stats_dir/.htpasswd
# Adding stats user in config # Adding stats user in config
update_object_value 'web' 'DOMAIN' "$domain" '$STATS_USER' "$stats_user" update_object_value 'web' 'DOMAIN' "$domain" '$STATS_USER' "$stats_user"
update_object_value 'web' 'DOMAIN' "$domain" '$STATS_CRYPT' "$stats_pass" update_object_value 'web' 'DOMAIN' "$domain" '$STATS_CRYPT' "$stats_crypt"
# Restarting web server
if [ "$WEB_SYSTEM" = 'nginx' ]; then
$BIN/v-restart-web $restart
check_result $? "Web restart failed" >/dev/null
fi
# Logging # Logging
log_history "added password protection for web stats on $domain" log_history "added password protection for web stats on $domain"
log_event "$OK" "$ARGUMENTS" log_event "$OK" "$EVENT"
exit exit

File diff suppressed because it is too large Load diff

View file

@ -9,8 +9,8 @@
# Variable&Function # # Variable&Function #
#----------------------------------------------------------# #----------------------------------------------------------#
# Importing system environment as we run this script # Importing system enviroment as we run this script
# mostly by cron which not read it by itself # mostly by cron wich not read it by itself
source /etc/profile source /etc/profile
# Includes # Includes
@ -22,15 +22,7 @@ source $VESTA/conf/vesta.conf
# Action # # Action #
#----------------------------------------------------------# #----------------------------------------------------------#
$BIN/v-check-vesta-license >/dev/null for user in $(ls $VESTA/data/users); do
if [ -z "$BACKUP_SYSTEM" ]; then
exit
fi
for user in $(grep '@' /etc/passwd |cut -f1 -d:); do
if [ ! -f "$VESTA/data/users/$user/user.conf" ]; then
continue;
fi
check_suspend=$(grep "SUSPENDED='no'" $VESTA/data/users/$user/user.conf) check_suspend=$(grep "SUSPENDED='no'" $VESTA/data/users/$user/user.conf)
log=$VESTA/log/backup.log log=$VESTA/log/backup.log
if [ ! -z "$check_suspend" ]; then if [ ! -z "$check_suspend" ]; then
@ -47,6 +39,6 @@ done
#----------------------------------------------------------# #----------------------------------------------------------#
# No Logging # No Logging
#log_event "$OK" "$ARGUMENTS" #log_event "$OK" "$EVENT"
exit exit

View file

@ -10,7 +10,7 @@
# Variable&Function # # Variable&Function #
#----------------------------------------------------------# #----------------------------------------------------------#
# Argument definition # Argument defenition
user=$1 user=$1
job=$2 job=$2
min=$3 min=$3
@ -30,27 +30,21 @@ source $VESTA/conf/vesta.conf
#----------------------------------------------------------# #----------------------------------------------------------#
check_args '7' "$#" 'USER JOB MIN HOUR DAY MONTH WDAY COMMAND' check_args '7' "$#" 'USER JOB MIN HOUR DAY MONTH WDAY COMMAND'
is_format_valid 'user' 'job' 'min' 'hour' 'day' 'month' 'wday' 'command' validate_format 'user' 'job' 'min' 'hour' 'day' 'month' 'wday' 'command'
is_system_enabled "$CRON_SYSTEM" 'CRON_SYSTEM' is_system_enabled "$CRON_SYSTEM" 'CRON_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 'cron' 'JOB' "$job" is_object_valid 'cron' 'JOB' "$job"
is_object_unsuspended 'cron' 'JOB' "$job"
#----------------------------------------------------------# #----------------------------------------------------------#
# Action # # Action #
#----------------------------------------------------------# #----------------------------------------------------------#
# Generating timestamp
time_n_date=$(date +'%T %F')
time=$(echo "$time_n_date" |cut -f 1 -d \ )
date=$(echo "$time_n_date" |cut -f 2 -d \ )
# Concatenating cron string # Concatenating cron string
command=$(echo $command | sed -e "s/'/%quote%/g") command=$(echo $command | sed -e "s/'/%quote%/g")
str="JOB='$job' MIN='$min' HOUR='$hour' DAY='$day' MONTH='$month' WDAY='$wday'" str="JOB='$job' MIN='$min' HOUR='$hour' DAY='$day' MONTH='$month' WDAY='$wday'"
str="$str CMD='$command' SUSPENDED='no' TIME='$time' DATE='$date'" str="$str CMD='$command' SUSPENDED='no' TIME='$TIME' DATE='$DATE'"
# Deleting old job # Deleting old job
sed -i "/JOB='$job' /d" $USER_DATA/cron.conf sed -i "/JOB='$job' /d" $USER_DATA/cron.conf
@ -69,12 +63,14 @@ sync_cron_jobs
# Vesta # # Vesta #
#----------------------------------------------------------# #----------------------------------------------------------#
# Restarting crond # Restart crond
$BIN/v-restart-cron $BIN/v-restart-cron
check_result $? "Cron restart failed" >/dev/null if [ $? -ne 0 ]; then
exit $E_RESTART
fi
# Logging # Logging
log_history "changed cron job $job" log_history "changed cron job $job"
log_event "$OK" "$ARGUMENTS" log_event "$OK" "$EVENT"
exit exit

View file

@ -1,68 +0,0 @@
#!/bin/bash
# info: change database server password
# options: TYPE HOST USER PASSWORD
#
# The function changes database server password.
#----------------------------------------------------------#
# Variable&Function #
#----------------------------------------------------------#
# Argument definition
type=$1
host=$2
dbuser=$3
password=$4; HIDE=4
# Includes
source $VESTA/func/main.sh
source $VESTA/func/db.sh
source $VESTA/conf/vesta.conf
#----------------------------------------------------------#
# Verifications #
#----------------------------------------------------------#
args_usage='TYPE HOST DBUSER DBPASS'
check_args '4' "$#" "$args_usage"
is_format_valid 'host' 'dbuser'
is_object_valid "../../conf/$type" 'HOST' "$host"
dbpass="$password"
#----------------------------------------------------------#
# Action #
#----------------------------------------------------------#
# Define email
email=$(grep CONTACT $VESTA/data/users/admin/user.conf |cut -f2 -d \')
subj="v-change-database-host-password $*"
case $type in
mysql) mysql_connect $host;
query="USE mysql; UPDATE user SET"
query="$query password=PASSWORD('$dbpass')"
query="$query WHERE User='$dbuser';"
query="$query FLUSH PRIVILEGES;"
mysql_query "$query" ;
if [ "$dbuser" == "root" ]; then
echo -e "[client]\npassword='$dbpass'\n" > /root/.my.cnf
chmod 600 /root/.my.cnf
fi;;
pgsql) echo "TBD" >/dev/null;;
esac
update_object_value "../../conf/$type" 'HOST' "$host" '$USER' "$dbuser"
update_object_value "../../conf/$type" 'HOST' "$host" '$PASSWORD' "$dbpass"
#----------------------------------------------------------#
# Vesta #
#----------------------------------------------------------#
# Logging
log_event "$OK" "$ARGUMENTS"
exit

View file

@ -1,5 +1,5 @@
#!/bin/bash #!/bin/bash
# info: change database owner # info: change database password
# options: DATABASE USER # options: DATABASE USER
# #
# The function for changing database owner. # The function for changing database owner.
@ -9,7 +9,7 @@
# Variable&Function # # Variable&Function #
#----------------------------------------------------------# #----------------------------------------------------------#
# Argument definition # Argument defenition
database=$1 database=$1
user=$2 user=$2
@ -25,7 +25,7 @@ source $VESTA/conf/vesta.conf
#----------------------------------------------------------# #----------------------------------------------------------#
check_args '2' "$#" 'DATABASE USER' check_args '2' "$#" 'DATABASE USER'
is_format_valid 'database' 'user' validate_format 'database' 'user'
is_system_enabled "$DB_SYSTEM" 'DB_SYSTEM' is_system_enabled "$DB_SYSTEM" 'DB_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"
@ -34,7 +34,7 @@ is_object_unsuspended 'user' 'USER' "$user"
owner=$(echo $database | cut -f 1 -d '_') owner=$(echo $database | cut -f 1 -d '_')
if [ ! -e "$VESTA/data/users/$owner" ]; then if [ ! -e "$VESTA/data/users/$owner" ]; then
echo "Error: database owner doesn't exist" echo "Error: database owner doesn't exist"
log_event "$E_NOTEXIST" "$ARGUMENTS" log_event "$E_NOTEXIST" "$EVENT"
exit $E_NOTEXIST exit $E_NOTEXIST
fi fi
@ -47,7 +47,7 @@ fi
db_data=$(grep "DB='$database'" $VESTA/data/users/$owner/db.conf) db_data=$(grep "DB='$database'" $VESTA/data/users/$owner/db.conf)
if [ -z "$db_data" ]; then if [ -z "$db_data" ]; then
echo "Error: database $database doesn't exist" echo "Error: database $database doesn't exist"
log_event "$E_NOTEXIST" "$ARGUMENTS" log_event "$E_NOTEXIST" "$EVENT"
exit $E_NOTEXIST exit $E_NOTEXIST
fi fi
@ -56,7 +56,7 @@ new_db=$(echo $database | sed "s/^${owner}_/${user}_/")
check_db=$(grep "DB='$new_db'" $VESTA/data/users/$user/db.conf) check_db=$(grep "DB='$new_db'" $VESTA/data/users/$user/db.conf)
if [ ! -z "$check_db" ]; then if [ ! -z "$check_db" ]; then
echo "Error: $new_db database exists" echo "Error: $new_db database exists"
log_event "$E_EXISTS" "$ARGUMENTS" log_event "$E_EXISTS" "$EVENT"
exit $E_EXISTS exit $E_EXISTS
fi fi
@ -69,7 +69,7 @@ fi
tmpdir=$(mktemp -p $BACKUP -d) tmpdir=$(mktemp -p $BACKUP -d)
if [ "$?" -ne 0 ]; then if [ "$?" -ne 0 ]; then
echo "Error: can't create $tmpdir" echo "Error: can't create $tmpdir"
log_event "$E_NOTEXIST" "$ARGUMENTS" log_event "$E_NOTEXIST" "$EVENT"
exit $E_NOTEXIST exit $E_NOTEXIST
fi fi
@ -80,6 +80,7 @@ $BIN/v-suspend-database $owner $database > /dev/null 2>&1
eval $db_data eval $db_data
dump="$tmpdir/$database.$TYPE.sql" dump="$tmpdir/$database.$TYPE.sql"
grants="$tmpdir/$database.$TYPE.$DBUSER" grants="$tmpdir/$database.$TYPE.$DBUSER"
send_mail='/bin/true'
case $TYPE in case $TYPE in
mysql) dump_mysql_database ;; mysql) dump_mysql_database ;;
pgsql) dump_pgsql_database ;; pgsql) dump_pgsql_database ;;
@ -119,6 +120,6 @@ $BIN/v-update-user-counters $user
#----------------------------------------------------------# #----------------------------------------------------------#
# Logging # Logging
log_event "$OK" "$ARGUMENTS" log_event "$OK" "$EVENT"
exit exit

View file

@ -10,30 +10,33 @@
# Variable&Function # # Variable&Function #
#----------------------------------------------------------# #----------------------------------------------------------#
# Argument definition # Argument defenition
user=$1 user=$1
database=$2 database=$2
password=$3; HIDE=3 dbpass=$3
# Includes # Includes
source $VESTA/func/main.sh source $VESTA/func/main.sh
source $VESTA/func/db.sh source $VESTA/func/db.sh
source $VESTA/conf/vesta.conf source $VESTA/conf/vesta.conf
# Hiding password
A3='******'
EVENT="$DATE $TIME $SCRIPT $A1 $A2 $A3 $A4 $A5 $A6 $A7 $A8 $A9"
#----------------------------------------------------------# #----------------------------------------------------------#
# Verifications # # Verifications #
#----------------------------------------------------------# #----------------------------------------------------------#
check_args '3' "$#" 'USER DATABASE DBPASS' check_args '3' "$#" 'USER DATABASE DBPASS'
is_format_valid 'user' 'database' validate_format 'user' 'database' 'dbpass'
is_system_enabled "$DB_SYSTEM" 'DB_SYSTEM' is_system_enabled "$DB_SYSTEM" 'DB_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 'db' 'DB' "$database" is_object_valid 'db' 'DB' "$database"
is_object_unsuspended 'db' 'DB' "$database" is_object_unsuspended 'db' 'DB' "$database"
is_password_valid
dbpass="$password"
#----------------------------------------------------------# #----------------------------------------------------------#
# Action # # Action #
@ -56,6 +59,6 @@ update_object_value 'db' 'DB' "$database" '$MD5' "$md5"
# Logging # Logging
log_history "changed $database database password" log_history "changed $database database password"
log_event "$OK" "$ARGUMENTS" log_event "$OK" "$EVENT"
exit exit

View file

@ -9,11 +9,11 @@
# Variable&Function # # Variable&Function #
#----------------------------------------------------------# #----------------------------------------------------------#
# Argument definition # Argument defenition
user=$1 user=$1
database=$2 database=$2
dbuser="$user"_"$3" dbuser="$user"_"$3"
password=$4; HIDE=4 dbpass=$4
# Includes # Includes
source $VESTA/func/main.sh source $VESTA/func/main.sh
@ -21,25 +21,25 @@ source $VESTA/func/db.sh
source $VESTA/func/rebuild.sh source $VESTA/func/rebuild.sh
source $VESTA/conf/vesta.conf source $VESTA/conf/vesta.conf
# Hiding password
A4='******'
EVENT="$DATE $TIME $SCRIPT $A1 $A2 $A3 $A4 $A5 $A6 $A7 $A8 $A9"
#----------------------------------------------------------# #----------------------------------------------------------#
# Verifications # # Verifications #
#----------------------------------------------------------# #----------------------------------------------------------#
check_args '3' "$#" 'USER DATABASE DBUSER [DBPASS]' check_args '3' "$#" 'USER DATABASE DBUSER [DBPASS]'
is_format_valid 'user' 'database' 'dbuser' validate_format 'user' 'database' 'dbuser'
if [ ! -z "$dbpass" ]; then
validate_format 'dbpass'
fi
is_system_enabled "$DB_SYSTEM" 'DB_SYSTEM' is_system_enabled "$DB_SYSTEM" 'DB_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 'db' 'DB' "$database" is_object_valid 'db' 'DB' "$database"
is_object_unsuspended 'db' 'DB' "$database" is_object_unsuspended 'db' 'DB' "$database"
is_password_valid
dbpass="$password"
#----------------------------------------------------------#
# Action #
#----------------------------------------------------------#
# Compare old and new user # Compare old and new user
old_dbuser=$(get_object_value 'db' 'DB' "$database" '$DBUSER') old_dbuser=$(get_object_value 'db' 'DB' "$database" '$DBUSER')
@ -47,6 +47,11 @@ if [ "$old_dbuser" = "$dbuser" ]; then
exit exit
fi fi
#----------------------------------------------------------#
# Action #
#----------------------------------------------------------#
# Set new dbuser # Set new dbuser
update_object_value 'db' 'DB' "$database" '$DBUSER' "$dbuser" update_object_value 'db' 'DB' "$database" '$DBUSER' "$dbuser"
@ -86,6 +91,6 @@ fi
# Logging # Logging
log_history "changed $database database user to $dbuser" log_history "changed $database database user to $dbuser"
log_event "$OK" "$ARGUMENTS" log_event "$OK" "$EVENT"
exit exit

View file

@ -1,5 +1,5 @@
#!/bin/bash #!/bin/bash
# info: change dns domain expiration date # info: change dns domain expiriation date
# options: USER DOMAIN EXP # options: USER DOMAIN EXP
# #
# The function of changing the term of expiration domain's registration. The # The function of changing the term of expiration domain's registration. The
@ -10,28 +10,23 @@
# Variable&Function # # Variable&Function #
#----------------------------------------------------------# #----------------------------------------------------------#
# Argument definition # Argument defenition
user=$1 user=$1
domain=$2 domain=$(idn -t --quiet -u "$2" )
domain_idn=$2 domain_idn=$(idn -t --quiet -a "$domain")
exp=$3 exp=$3
# Includes # Includes
source $VESTA/func/main.sh source $VESTA/func/main.sh
source $VESTA/conf/vesta.conf source $VESTA/conf/vesta.conf
# Additional argument formatting
format_domain
format_domain_idn
# TODO: $domain_idn not used in this script - maybe $domain should be converted to $doman_idn ?
#----------------------------------------------------------# #----------------------------------------------------------#
# Verifications # # Verifications #
#----------------------------------------------------------# #----------------------------------------------------------#
check_args '3' "$#" 'USER DOMAIN EXP' check_args '3' "$#" 'USER DOMAIN EXP'
is_format_valid 'user' 'domain' 'exp' validate_format 'user' 'domain' 'exp'
is_system_enabled "$DNS_SYSTEM" 'DNS_SYSTEM' is_system_enabled "$DNS_SYSTEM" 'DNS_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"
@ -62,7 +57,7 @@ fi
#----------------------------------------------------------# #----------------------------------------------------------#
# Logging # Logging
log_history "changed whois expiration date for $domain" log_history "changed whois expiriation date for $domain"
log_event "$OK" "$ARGUMENTS" log_event "$OK" "$EVENT"
exit exit

View file

@ -9,10 +9,10 @@
# Variable&Function # # Variable&Function #
#----------------------------------------------------------# #----------------------------------------------------------#
# Argument definition # Argument defenition
user=$1 user=$1
domain=$2 domain=$(idn -t --quiet -u "$2" )
domain_idn=$2 domain_idn=$(idn -t --quiet -a "$domain")
ip=$3 ip=$3
restart=$4 restart=$4
@ -21,18 +21,13 @@ source $VESTA/func/main.sh
source $VESTA/func/domain.sh source $VESTA/func/domain.sh
source $VESTA/conf/vesta.conf source $VESTA/conf/vesta.conf
# Additional argument formatting
format_domain
format_domain_idn
# TODO: $domain_idn not used in this script - maybe $domain should be converted to $doman_idn ?
#----------------------------------------------------------# #----------------------------------------------------------#
# Verifications # # Verifications #
#----------------------------------------------------------# #----------------------------------------------------------#
check_args '3' "$#" 'USER DOMAIN IP' check_args '3' "$#" 'USER DOMAIN IP'
is_format_valid 'user' 'domain' 'ip' validate_format 'user' 'domain' 'ip'
is_system_enabled "$DNS_SYSTEM" 'DNS_SYSTEM' is_system_enabled "$DNS_SYSTEM" 'DNS_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"
@ -56,7 +51,6 @@ sed -i "s/$old/$ip/g" $USER_DATA/dns/$domain.conf
# Updating zone # Updating zone
if [[ "$DNS_SYSTEM" =~ named|bind ]]; then if [[ "$DNS_SYSTEM" =~ named|bind ]]; then
update_domain_serial
update_domain_zone update_domain_zone
fi fi
@ -65,7 +59,7 @@ if [ ! -z "$DNS_CLUSTER" ]; then
# Check for first sync # Check for first sync
dlock=$(grep "domain $user $domain" $VESTA/data/queue/dns-cluster.pipe) dlock=$(grep "domain $user $domain" $VESTA/data/queue/dns-cluster.pipe)
if [ -z "$dlock" ]; then if [ -z "$dlock" ]; then
cmd="$BIN/v-add-remote-dns-domain $user $domain domain yes" cmd="$BIN/v-add-remote-dns-domain $user $domain domain"
echo "$cmd" >> $VESTA/data/queue/dns-cluster.pipe echo "$cmd" >> $VESTA/data/queue/dns-cluster.pipe
fi fi
fi fi
@ -75,12 +69,16 @@ fi
# Vesta # # Vesta #
#----------------------------------------------------------# #----------------------------------------------------------#
# Restarting named # Restart named
$BIN/v-restart-dns $restart if [ "$restart" != 'no' ]; then
check_result $? "DNS restart failed" >/dev/null $BIN/v-restart-dns
if [ $? -ne 0 ]; then
exit $E_RESTART
fi
fi
# Logging # Logging
log_history "changed dns ip for $domain to $ip" log_history "changed dns ip for $domain to $ip"
log_event "$OK" "$ARGUMENTS" log_event "$OK" "$EVENT"
exit exit

View file

@ -10,10 +10,10 @@
# Variable&Function # # Variable&Function #
#----------------------------------------------------------# #----------------------------------------------------------#
# Argument definition # Argument defenition
user=$1 user=$1
domain=$2 domain=$(idn -t --quiet -u "$2" )
domain_idn=$2 domain_idn=$(idn -t --quiet -a "$domain")
soa=$(echo $3 | sed -e 's/\.*$//g' -e 's/^\.*//g') soa=$(echo $3 | sed -e 's/\.*$//g' -e 's/^\.*//g')
restart=$4 restart=$4
@ -22,18 +22,13 @@ source $VESTA/func/main.sh
source $VESTA/func/domain.sh source $VESTA/func/domain.sh
source $VESTA/conf/vesta.conf source $VESTA/conf/vesta.conf
# Additional argument formatting
format_domain
format_domain_idn
# TODO: $domain_idn not used in this script - maybe $domain should be converted to $doman_idn ?
#----------------------------------------------------------# #----------------------------------------------------------#
# Verifications # # Verifications #
#----------------------------------------------------------# #----------------------------------------------------------#
check_args '3' "$#" 'USER DOMAIN SOA' check_args '3' "$#" 'USER DOMAIN SOA'
is_format_valid 'user' 'domain' 'soa' validate_format 'user' 'domain' 'soa'
is_system_enabled "$DNS_SYSTEM" 'DNS_SYSTEM' is_system_enabled "$DNS_SYSTEM" 'DNS_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"
@ -50,7 +45,6 @@ update_object_value 'dns' 'DOMAIN' "$domain" '$SOA' "$soa"
# Updating zone # Updating zone
if [[ "$DNS_SYSTEM" =~ named|bind ]]; then if [[ "$DNS_SYSTEM" =~ named|bind ]]; then
update_domain_serial
update_domain_zone update_domain_zone
fi fi
@ -69,12 +63,16 @@ fi
# Vesta # # Vesta #
#----------------------------------------------------------# #----------------------------------------------------------#
# Restarting named # Restart named
$BIN/v-restart-dns $restart if [ "$restart" != 'no' ]; then
check_result $? "DNS restart failed" >/dev/null $BIN/v-restart-dns
if [ $? -ne 0 ]; then
exit $E_RESTART
fi
fi
# Logging # Logging
log_history "changed soa record for $domain to $soa" log_history "changed soa record for $domain to $soa"
log_event "$OK" "$ARGUMENTS" log_event "$OK" "$EVENT"
exit exit

View file

@ -11,10 +11,10 @@
# Variable&Function # # Variable&Function #
#----------------------------------------------------------# #----------------------------------------------------------#
# Argument definition # Argument defenition
user=$1 user=$1
domain=$2 domain=$(idn -t --quiet -u "$2" )
domain_idn=$2 domain_idn=$(idn -t --quiet -a "$domain")
template=$3 template=$3
restart=$4 restart=$4
@ -23,23 +23,19 @@ source $VESTA/func/main.sh
source $VESTA/func/domain.sh source $VESTA/func/domain.sh
source $VESTA/conf/vesta.conf source $VESTA/conf/vesta.conf
# Additional argument formatting
format_domain
format_domain_idn
#----------------------------------------------------------# #----------------------------------------------------------#
# Verifications # # Verifications #
#----------------------------------------------------------# #----------------------------------------------------------#
check_args '3' "$#" 'USER DOMAIN TEMPLATE [RESTART]' check_args '3' "$#" 'USER DOMAIN TEMPLATE [RESTART]'
is_format_valid 'user' 'domain' 'template' validate_format 'user' 'domain' 'template'
is_system_enabled "$DNS_SYSTEM" 'DNS_SYSTEM' is_system_enabled "$DNS_SYSTEM" 'DNS_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 'dns' 'DOMAIN' "$domain" is_object_valid 'dns' 'DOMAIN' "$domain"
is_object_unsuspended 'dns' 'DOMAIN' "$domain" is_object_unsuspended 'dns' 'DOMAIN' "$domain"
is_dns_template_valid "$template" is_dns_template_valid
#----------------------------------------------------------# #----------------------------------------------------------#
@ -47,7 +43,8 @@ is_dns_template_valid "$template"
#----------------------------------------------------------# #----------------------------------------------------------#
# Defining variables # Defining variables
get_domain_values 'dns' ip=$(get_object_value 'dns' 'DOMAIN' "$domain" '$IP')
i=1 i=1
ns=$(get_user_value '$NS') ns=$(get_user_value '$NS')
for nameserver in ${ns//,/ };do for nameserver in ${ns//,/ };do
@ -55,49 +52,21 @@ for nameserver in ${ns//,/ };do
(( ++i)) (( ++i))
done done
# Reading template
template_data=$(cat $DNSTPL/$template.tpl)
# Deleting unused nameservers
if [ -z "$ns3" ]; then
template_data=$(echo "$template_data" |grep -v %ns3%)
fi
if [ -z "$ns4" ]; then
template_data=$(echo "$template_data" |grep -v %ns4%)
fi
if [ -z "$ns5" ]; then
template_data=$(echo "$template_data" |grep -v %ns5%)
fi
if [ -z "$ns6" ]; then
template_data=$(echo "$template_data" |grep -v %ns6%)
fi
if [ -z "$ns7" ]; then
template_data=$(echo "$template_data" |grep -v %ns7%)
fi
if [ -z "$ns8" ]; then
template_data=$(echo "$template_data" |grep -v %ns8%)
fi
# Changing tpl # Changing tpl
echo "$template_data" |\ cat $DNSTPL/$template.tpl |\
sed -e "s/%ip%/$IP/g" \ sed -e "s/%ip%/$ip/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/%ns1%/$ns1/g" \ -e "s/%ns1%/$ns1/g" \
-e "s/%ns2%/$ns2/g" \ -e "s/%ns2%/$ns2/g" \
-e "s/%ns3%/$ns3/g" \ -e "s/%ns3%/$ns3/g" \
-e "s/%ns4%/$ns4/g" \ -e "s/%ns4%/$ns4/g" \
-e "s/%ns5%/$ns5/g" \
-e "s/%ns6%/$ns6/g" \
-e "s/%ns7%/$ns7/g" \
-e "s/%ns8%/$ns8/g" \
-e "s/%time%/$TIME/g" \ -e "s/%time%/$TIME/g" \
-e "s/%date%/$DATE/g" > $USER_DATA/dns/$domain.conf -e "s/%date%/$DATE/g" > $USER_DATA/dns/$domain.conf
records="$(wc -l $USER_DATA/dns/$domain.conf |cut -f 1 -d ' ')" records="$(wc -l $USER_DATA/dns/$domain.conf |cut -f 1 -d ' ')"
# Updating zone # Updating zone
if [[ "$DNS_SYSTEM" =~ named|bind ]]; then if [[ "$DNS_SYSTEM" =~ named|bind ]]; then
update_domain_serial
update_domain_zone update_domain_zone
fi fi
@ -120,12 +89,16 @@ fi
update_object_value 'dns' 'DOMAIN' "$domain" '$TPL' "$template" update_object_value 'dns' 'DOMAIN' "$domain" '$TPL' "$template"
update_object_value 'dns' 'DOMAIN' "$domain" '$RECORDS' "$records" update_object_value 'dns' 'DOMAIN' "$domain" '$RECORDS' "$records"
# Restarting named # Restart named
$BIN/v-restart-dns $restart if [ "$restart" != 'no' ]; then
check_result $? "DNS restart failed" >/dev/null $BIN/v-restart-dns
if [ $? -ne 0 ]; then
exit $E_RESTART
fi
fi
# Logging # Logging
log_history "changed dns template for $domain to $template" '' 'admin' log_history "changed dns template for $domain to $template" '' 'admin'
log_event "$OK" "$ARGUMENTS" log_event "$OK" "$EVENT"
exit exit

View file

@ -2,17 +2,17 @@
# info: change dns domain ttl # info: change dns domain ttl
# options: USER DOMAIN TTL # options: USER DOMAIN TTL
# #
# The function for changing the time to live TTL parameter for all records. # The function for chaning the time to live TTL parameter for all records.
#----------------------------------------------------------# #----------------------------------------------------------#
# Variable&Function # # Variable&Function #
#----------------------------------------------------------# #----------------------------------------------------------#
# Argument definition # Argument defenition
user=$1 user=$1
domain=$2 domain=$(idn -t --quiet -u "$2" )
domain_idn=$2 domain_idn=$(idn -t --quiet -a "$domain")
ttl=$3 ttl=$3
restart=$4 restart=$4
@ -21,18 +21,13 @@ source $VESTA/func/main.sh
source $VESTA/func/domain.sh source $VESTA/func/domain.sh
source $VESTA/conf/vesta.conf source $VESTA/conf/vesta.conf
# Additional argument formatting
format_domain
format_domain_idn
# TODO: $domain_idn not used in this script - maybe $domain should be converted to $doman_idn ?
#----------------------------------------------------------# #----------------------------------------------------------#
# Verifications # # Verifications #
#----------------------------------------------------------# #----------------------------------------------------------#
check_args '3' "$#" 'USER DOMAIN TTL' check_args '3' "$#" 'USER DOMAIN TTL'
is_format_valid 'user' 'domain' 'ttl' validate_format 'user' 'domain' 'ttl'
is_system_enabled "$DNS_SYSTEM" 'DNS_SYSTEM' is_system_enabled "$DNS_SYSTEM" 'DNS_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"
@ -49,7 +44,6 @@ update_object_value 'dns' 'DOMAIN' "$domain" '$TTL' "$ttl"
# Updating zone # Updating zone
if [[ "$DNS_SYSTEM" =~ named|bind ]]; then if [[ "$DNS_SYSTEM" =~ named|bind ]]; then
update_domain_serial
update_domain_zone update_domain_zone
fi fi
@ -68,12 +62,16 @@ fi
# Vesta # # Vesta #
#----------------------------------------------------------# #----------------------------------------------------------#
# Restarting named # Restart named
$BIN/v-restart-dns $restart if [ "$restart" != 'no' ]; then
check_result $? "DNS restart failed" >/dev/null $BIN/v-restart-dns
if [ $? -ne 0 ]; then
exit $E_RESTART
fi
fi
# Logging # Logging
log_history "changed TTL for $domain to $ttl" log_history "changed TTL for $domain to $ttl"
log_event "$OK" "$ARGUMENTS" log_event "$OK" "$EVENT"
exit exit

View file

@ -9,10 +9,11 @@
# Variable&Function # # Variable&Function #
#----------------------------------------------------------# #----------------------------------------------------------#
# Argument definition # Argument defenition
user=$1 user=$1
domain=$2 domain=$(idn -t --quiet -u "$2" )
domain_idn=$2 domain=$(echo $domain | tr '[:upper:]' '[:lower:]')
domain_idn=$(idn -t --quiet -a "$domain")
id=$3 id=$3
dvalue=$(idn -t --quiet -u "$4" ) dvalue=$(idn -t --quiet -u "$4" )
priority=$5 priority=$5
@ -23,18 +24,13 @@ source $VESTA/func/main.sh
source $VESTA/func/domain.sh source $VESTA/func/domain.sh
source $VESTA/conf/vesta.conf source $VESTA/conf/vesta.conf
# Additional argument formatting
format_domain
format_domain_idn
# TODO: $domain_idn not used in this script - maybe $domain should be converted to $doman_idn ?
#----------------------------------------------------------# #----------------------------------------------------------#
# Verifications # # Verifications #
#----------------------------------------------------------# #----------------------------------------------------------#
check_args '4' "$#" 'USER DOMAIN ID VALUE [PRIORITY] [RESTART]' check_args '4' "$#" 'USER DOMAIN ID VALUE [PRIORITY] [RESTART]'
is_format_valid 'user' 'domain' 'id' 'dvalue' validate_format 'user' 'domain' 'id' 'dvalue'
is_system_enabled "$DNS_SYSTEM" 'DNS_SYSTEM' is_system_enabled "$DNS_SYSTEM" 'DNS_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"
@ -71,14 +67,9 @@ is_dns_nameserver_valid "$domain" "$TYPE" "$dvalue"
# Deleting old record # Deleting old record
sed -i "/^ID='$id'/d" $USER_DATA/dns/$domain.conf sed -i "/^ID='$id'/d" $USER_DATA/dns/$domain.conf
# Generating timestamp
time_n_date=$(date +'%T %F')
time=$(echo "$time_n_date" |cut -f 1 -d \ )
date=$(echo "$time_n_date" |cut -f 2 -d \ )
# Adding record # Adding record
dns_rec="ID='$id' RECORD='$RECORD' TYPE='$TYPE' PRIORITY='$priority'" dns_rec="ID='$id' RECORD='$RECORD' TYPE='$TYPE' PRIORITY='$priority'"
dns_rec="$dns_rec VALUE='$dvalue' SUSPENDED='no' TIME='$time' DATE='$date'" dns_rec="$dns_rec VALUE='$dvalue' SUSPENDED='no' TIME='$TIME' DATE='$DATE'"
echo "$dns_rec" >> $USER_DATA/dns/$domain.conf echo "$dns_rec" >> $USER_DATA/dns/$domain.conf
# Sorting records # Sorting records
@ -86,7 +77,6 @@ sort_dns_records
# Updating zone # Updating zone
if [[ "$DNS_SYSTEM" =~ named|bind ]]; then if [[ "$DNS_SYSTEM" =~ named|bind ]]; then
update_domain_serial
update_domain_zone update_domain_zone
fi fi
@ -105,12 +95,16 @@ fi
# Vesta # # Vesta #
#----------------------------------------------------------# #----------------------------------------------------------#
# Restarting named # Restart named
$BIN/v-restart-dns $restart if [ "$restart" != 'no' ]; then
check_result $? "DNS restart failed" >/dev/null $BIN/v-restart-dns
if [ $? -ne 0 ]; then
exit $E_RESTART
fi
fi
# Logging # Logging
log_history "changed dns record on $domain to $dvalue" log_history "changed dns record on $domain to $dvalue"
log_event "$OK" "$ARGUMENTS" log_event "$OK" "$EVENT"
exit exit

View file

@ -9,10 +9,11 @@
# Variable&Function # # Variable&Function #
#----------------------------------------------------------# #----------------------------------------------------------#
# Argument definition # Argument defenition
user=$1 user=$1
domain=$2 domain=$(idn -t --quiet -u "$2" )
domain_idn=$2 domain=$(echo $domain | tr '[:upper:]' '[:lower:]')
domain_idn=$(idn -t --quiet -a "$domain")
id=$3 id=$3
newid=$4 newid=$4
restart=$5 restart=$5
@ -22,18 +23,13 @@ source $VESTA/func/main.sh
source $VESTA/func/domain.sh source $VESTA/func/domain.sh
source $VESTA/conf/vesta.conf source $VESTA/conf/vesta.conf
# Additional argument formatting
format_domain
format_domain_idn
# TODO: $domain_idn not used in this script - maybe $domain should be converted to $doman_idn ?
#----------------------------------------------------------# #----------------------------------------------------------#
# Verifications # # Verifications #
#----------------------------------------------------------# #----------------------------------------------------------#
check_args '4' "$#" 'USER DOMAIN ID NEWID [RESTART]' check_args '4' "$#" 'USER DOMAIN ID NEWID [RESTART]'
is_format_valid 'user' 'domain' 'id' 'newid' validate_format 'user' 'domain' 'id' 'newid'
is_system_enabled "$DNS_SYSTEM" 'DNS_SYSTEM' is_system_enabled "$DNS_SYSTEM" 'DNS_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"
@ -55,7 +51,6 @@ sort_dns_records
# Updating zone # Updating zone
if [[ "$DNS_SYSTEM" =~ named|bind ]]; then if [[ "$DNS_SYSTEM" =~ named|bind ]]; then
update_domain_serial
update_domain_zone update_domain_zone
fi fi
@ -74,12 +69,16 @@ fi
# Vesta # # Vesta #
#----------------------------------------------------------# #----------------------------------------------------------#
# Restarting named # Restart named
$BIN/v-restart-dns $restart if [ "$restart" != 'no' ]; then
check_result $? "DNS restart failed" >/dev/null $BIN/v-restart-dns
if [ $? -ne 0 ]; then
exit $E_RESTART
fi
fi
# Logging # Logging
log_history "changed dns record id on $domain" log_history "changed dns record id on $domain"
log_event "$OK" "$ARGUMENTS" log_event "$OK" "$EVENT"
exit exit

View file

@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
# info: change domain owner # info: change ip owner
# options: DOMAIN USER # options: DOMAIN USER [IP]
# #
# The function of changing domain ownership. # The function of changing domain ownership.
@ -9,9 +9,10 @@
# Variable&Function # # Variable&Function #
#----------------------------------------------------------# #----------------------------------------------------------#
# Argument definition # Argument defenition
domain=$1 domain=$1
user=$2 user=$2
ip=$3
# Includes # Includes
source $VESTA/func/ip.sh source $VESTA/func/ip.sh
@ -23,13 +24,20 @@ source $VESTA/conf/vesta.conf
# Verifications # # Verifications #
#----------------------------------------------------------# #----------------------------------------------------------#
check_args '2' "$#" 'DOMAIN USER' check_args '2' "$#" 'DOMAIN USER [IP]'
is_format_valid 'domain' 'user' validate_format 'domain' 'user'
is_object_valid 'user' 'USER' "$user" is_object_valid 'user' 'USER' "$user"
is_object_unsuspended 'user' 'USER' "$user" is_object_unsuspended 'user' 'USER' "$user"
owner=$($BIN/v-search-domain-owner $domain) if [ ! -z "$ip" ]; then
is_ip_valid
is_ip_avalable
fi
owner=$(v-search-domain-owner $domain)
if [ -z "$owner" ]; then if [ -z "$owner" ]; then
check_result $E_NOTEXIST "domain $domain doesn't exist" echo "Error: domain $domain doesn't exist"
log_event "$E_NOTEXIST" "$EVENT"
exit $E_NOTEXIST
fi fi
if [ "$owner" = "$user" ]; then if [ "$owner" = "$user" ]; then
exit exit
@ -148,18 +156,6 @@ if [ ! -z "$mail_data" ]; then
$BIN/v-unsuspend-mail-domain $user $domain no >> /dev/null 2>&1 $BIN/v-unsuspend-mail-domain $user $domain no >> /dev/null 2>&1
$BIN/v-rebuild-mail-domains $owner no $BIN/v-rebuild-mail-domains $owner no
$BIN/v-rebuild-mail-domains $user $BIN/v-rebuild-mail-domains $user
# Checking exim username for later chowning
exim_user="exim";
check_exim_username=$(grep -c '^Debian-exim:' /etc/passwd)
if [ "$check_exim_username" -eq 1 ]; then
exim_user="Debian-exim"
fi
# Chowning mail conf files to exim user
if [ -d "$HOMEDIR/$user/conf/mail/$domain" ]; then
find $HOMEDIR/$user/conf/mail/$domain -user root \
-exec chown $exim_user {} \;
fi
fi fi
# Update counters # Update counters
@ -172,6 +168,6 @@ $BIN/v-update-user-counters $user
#----------------------------------------------------------# #----------------------------------------------------------#
# Logging # Logging
log_event "$OK" "$ARGUMENTS" log_event "$OK" "$EVENT"
exit exit

View file

@ -13,7 +13,7 @@
# Importing system variables # Importing system variables
source /etc/profile source /etc/profile
# Argument definition # Argument defenition
rule=$1 rule=$1
action=$(echo $2|tr '[:lower:]' '[:upper:]') action=$(echo $2|tr '[:lower:]' '[:upper:]')
ip=$3 ip=$3
@ -40,9 +40,9 @@ sort_fw_rules() {
#----------------------------------------------------------# #----------------------------------------------------------#
check_args '5' "$#" 'RULE ACTION IP PORT [PROTOCOL] [COMMENT]' check_args '5' "$#" 'RULE ACTION IP PORT [PROTOCOL] [COMMENT]'
is_format_valid 'rule' 'action' 'protocol' 'port_ext' 'ip' validate_format 'rule' 'action' 'protocol' 'port_ext' 'ip'
if [ ! -z "$comment" ]; then if [ ! -z "$comment" ]; then
is_format_valid 'comment' validate_format 'comment'
fi fi
is_system_enabled "$FIREWALL_SYSTEM" 'FIREWALL_SYSTEM' is_system_enabled "$FIREWALL_SYSTEM" 'FIREWALL_SYSTEM'
is_object_valid '../../data/firewall/rules' 'RULE' "$rule" is_object_valid '../../data/firewall/rules' 'RULE' "$rule"
@ -52,15 +52,10 @@ is_object_valid '../../data/firewall/rules' 'RULE' "$rule"
# Action # # Action #
#----------------------------------------------------------# #----------------------------------------------------------#
# Generating timestamp
time_n_date=$(date +'%T %F')
time=$(echo "$time_n_date" |cut -f 1 -d \ )
date=$(echo "$time_n_date" |cut -f 2 -d \ )
# Concatenating firewall rule # Concatenating firewall rule
str="RULE='$rule' ACTION='$action' PROTOCOL='$protocol' PORT='$port_ext'" str="RULE='$rule' ACTION='$action' PROTOCOL='$protocol' PORT='$port_ext'"
str="$str IP='$ip' COMMENT='$comment' SUSPENDED='no'" str="$str IP='$ip' COMMENT='$comment' SUSPENDED='no'"
str="$str TIME='$time' DATE='$date'" str="$str TIME='$TIME' DATE='$DATE'"
# Deleting old rule # Deleting old rule
sed -i "/RULE='$rule' /d" $VESTA/data/firewall/rules.conf sed -i "/RULE='$rule' /d" $VESTA/data/firewall/rules.conf
@ -80,6 +75,6 @@ $BIN/v-update-firewall
#----------------------------------------------------------# #----------------------------------------------------------#
# Logging # Logging
log_event "$OK" "$ARGUMENTS" log_event "$OK" "$EVENT"
exit exit

View file

@ -1,51 +0,0 @@
#!/bin/bash
# info: change file permission
# options: USER FILE PERMISSIONS
#
# The function changes file access permissions on the file system
user=$1
src_file=$2
permissions=$3
# Checking arguments
if [ -z "$permissions" ]; then
echo "Usage: USER FILE PERMISSIONS"
exit 1
fi
# Checking vesta user
if [ ! -e "$VESTA/data/users/$user" ]; then
echo "Error: vesta user $user doesn't exist"
exit 3
fi
# Checking user homedir
homedir=$(grep "^$user:" /etc/passwd | cut -f 6 -d :)
if [ -z $homedir ]; then
echo "Error: user home directory doesn't exist"
exit 12
fi
# Checking source file
if [ ! -fe "$src_file" ]; then
echo "Error: source file doesn't exist $src_file"
exit 3
fi
# Checking source path
rpath=$(readlink -f "$src_file")
if [ -z "$(echo $rpath |egrep "^/tmp|^$homedir")" ]; then
echo "Error: invalid source path $src_file"
exit 2
fi
# Changing file permissions
sudo -u $user chmod -R $permissions "$src_file" >/dev/null 2>&1
if [ $? -ne 0 ]; then
echo "Error: access permission on $src_file was not changed"
exit 3
fi
# Exiting
exit

View file

@ -9,22 +9,22 @@
# Variable&Function # # Variable&Function #
#----------------------------------------------------------# #----------------------------------------------------------#
# Argument definition # Argument defenition
user=$1 user=$1
domain=$2 domain=$(idn -t --quiet -u "$2" )
domain_idn=$2 domain=$(echo $domain | tr '[:upper:]' '[:lower:]')
domain_idn=$(idn -t --quiet -a "$domain")
account=$3 account=$3
password=$4; HIDE=4 password=$4
# Includes # Includes
source $VESTA/func/main.sh source $VESTA/func/main.sh
source $VESTA/func/domain.sh source $VESTA/func/domain.sh
source $VESTA/conf/vesta.conf source $VESTA/conf/vesta.conf
# Additional argument formatting # Hiding password
format_domain A4='******'
format_domain_idn EVENT="$DATE $TIME $SCRIPT $A1 $A2 $A3 $A4 $A5 $A6 $A7 $A8 $A9"
# TODO: $domain_idn not used in this script - maybe $domain should be converted to $doman_idn ?
#----------------------------------------------------------# #----------------------------------------------------------#
@ -32,7 +32,7 @@ format_domain_idn
#----------------------------------------------------------# #----------------------------------------------------------#
check_args '4' "$#" 'USER DOMAIN ACCOUNT PASSWORD' check_args '4' "$#" 'USER DOMAIN ACCOUNT PASSWORD'
is_format_valid 'user' 'domain' 'account' validate_format 'user' 'domain' 'account' 'password'
is_system_enabled "$MAIL_SYSTEM" 'MAIL_SYSTEM' is_system_enabled "$MAIL_SYSTEM" 'MAIL_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"
@ -40,23 +40,21 @@ is_object_valid 'mail' 'DOMAIN' "$domain"
is_object_unsuspended 'mail' 'DOMAIN' "$domain" is_object_unsuspended 'mail' 'DOMAIN' "$domain"
is_object_valid "mail/$domain" 'ACCOUNT' "$account" is_object_valid "mail/$domain" 'ACCOUNT' "$account"
is_object_unsuspended "mail/$domain" 'ACCOUNT' "$account" is_object_unsuspended "mail/$domain" 'ACCOUNT' "$account"
is_password_valid
#----------------------------------------------------------# #----------------------------------------------------------#
# Action # # Action #
#----------------------------------------------------------# #----------------------------------------------------------#
# Generating hashed password if [ -x '/usr/bin/doveadm' ]; then
salt=$(generate_password "$PW_MATRIX" "8") md5=$(/usr/bin/doveadm pw -s md5 -p "$password")
md5="{MD5}$($BIN/v-generate-password-hash md5 $salt <<<$password)" else
md5=$(/usr/sbin/dovecotpw -s md5 -p "$password")
fi
if [[ "$MAIL_SYSTEM" =~ exim ]]; then if [[ "$MAIL_SYSTEM" =~ exim ]]; then
quota=$(grep $account $VESTA/data/users/${user}/mail/${domain}.conf)
quota=$(echo $quota | awk '{ print $7 }' | sed -e "s/'//g" )
quota=$(echo $quota | cut -d "=" -f 2 | sed -e "s/unlimited/0/g")
sed -i "/^$account:/d" $HOMEDIR/$user/conf/mail/$domain/passwd sed -i "/^$account:/d" $HOMEDIR/$user/conf/mail/$domain/passwd
str="$account:$md5:$user:mail::$HOMEDIR/$user:${quota}M" str="$account:$md5:$user:mail::$HOMEDIR/$user:$quota"
echo $str >> $HOMEDIR/$user/conf/mail/$domain/passwd echo $str >> $HOMEDIR/$user/conf/mail/$domain/passwd
fi fi
@ -70,6 +68,6 @@ update_object_value "mail/$domain" 'ACCOUNT' "$account" '$MD5' "$md5"
# Logging # Logging
log_history "changed password for $account@$domain" log_history "changed password for $account@$domain"
log_event "$OK" "$ARGUMENTS" log_event "$OK" "$EVENT"
exit exit

View file

@ -9,10 +9,11 @@
# Variable&Function # # Variable&Function #
#----------------------------------------------------------# #----------------------------------------------------------#
# Argument definition # Argument defenition
user=$1 user=$1
domain=$2 domain=$(idn -t --quiet -u "$2" )
domain_idn=$2 domain=$(echo $domain | tr '[:upper:]' '[:lower:]')
domain_idn=$(idn -t --quiet -a "$domain")
account=$3 account=$3
quota=$4 quota=$4
@ -21,21 +22,13 @@ source $VESTA/func/main.sh
source $VESTA/func/domain.sh source $VESTA/func/domain.sh
source $VESTA/conf/vesta.conf source $VESTA/conf/vesta.conf
# Additional argument formatting
format_domain
format_domain_idn
# TODO: $domain_idn not used in this script - maybe $domain should be converted to $doman_idn ?
#----------------------------------------------------------# #----------------------------------------------------------#
# Verifications # # Verifications #
#----------------------------------------------------------# #----------------------------------------------------------#
check_args '4' "$#" 'USER DOMAIN ACCOUNT QUOTA' check_args '4' "$#" 'USER DOMAIN ACCOUNT QUOTA'
is_format_valid 'user' 'domain' 'account' validate_format 'user' 'domain' 'account' 'quota'
if [ "$quota" != 'unlimited' ]; then
is_format_valid 'quota'
fi
is_system_enabled "$MAIL_SYSTEM" 'MAIL_SYSTEM' is_system_enabled "$MAIL_SYSTEM" 'MAIL_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"
@ -51,9 +44,6 @@ is_object_unsuspended "mail/$domain" 'ACCOUNT' "$account"
md5=$(get_object_value "mail/$domain" 'ACCOUNT' "$account" '$MD5') md5=$(get_object_value "mail/$domain" 'ACCOUNT' "$account" '$MD5')
if [[ "$MAIL_SYSTEM" =~ exim ]]; then if [[ "$MAIL_SYSTEM" =~ exim ]]; then
if [ "$quota" = 'unlimited' ]; then
quota=0
fi
sed -i "/^$account:/d" $HOMEDIR/$user/conf/mail/$domain/passwd sed -i "/^$account:/d" $HOMEDIR/$user/conf/mail/$domain/passwd
str="$account:$md5:$user:mail::$HOMEDIR/$user:$quota" str="$account:$md5:$user:mail::$HOMEDIR/$user:$quota"
echo $str >> $HOMEDIR/$user/conf/mail/$domain/passwd echo $str >> $HOMEDIR/$user/conf/mail/$domain/passwd
@ -64,15 +54,11 @@ fi
# Vesta # # Vesta #
#----------------------------------------------------------# #----------------------------------------------------------#
if [[ "$quota" -eq 0 ]]; then
quota='unlimited'
fi
# Update quota # Update quota
update_object_value "mail/$domain" 'ACCOUNT' "$account" '$QUOTA' "$quota" update_object_value "mail/$domain" 'ACCOUNT' "$account" '$QUOTA' "$quota"
# Logging # Logging
log_history "changed mail quota for $account@$domain to $quota" log_history "changed mail quota for $account@$domain to $quota"
log_event "$OK" "$ARGUMENTS" log_event "$OK" "$EVENT"
exit exit

View file

@ -2,35 +2,32 @@
# info: change mail domain catchall email # info: change mail domain catchall email
# options: USER DOMAIN EMAIL # options: USER DOMAIN EMAIL
# #
# The function changes mail domain catchall. # The function changes mail domain cathcall.
#----------------------------------------------------------# #----------------------------------------------------------#
# Variable&Function # # Variable&Function #
#----------------------------------------------------------# #----------------------------------------------------------#
# Argument definition # Argument defenition
user=$1 user=$1
domain=$2 domain=$(idn -t --quiet -u "$2" )
domain_idn=$2 domain=$(echo $domain | tr '[:upper:]' '[:lower:]')
email=$3 domain_idn=$(idn -t --quiet -a "$domain")
email="$3"
# Includes # Includes
source $VESTA/func/main.sh source $VESTA/func/main.sh
source $VESTA/func/domain.sh source $VESTA/func/domain.sh
source $VESTA/conf/vesta.conf source $VESTA/conf/vesta.conf
# Additional argument formatting
format_domain
format_domain_idn
#----------------------------------------------------------# #----------------------------------------------------------#
# Verifications # # Verifications #
#----------------------------------------------------------# #----------------------------------------------------------#
check_args '3' "$#" 'USER DOMAIN EMAIL' check_args '3' "$#" 'USER DOMAIN EMAIL'
is_format_valid 'user' 'domain' 'email' validate_format 'user' 'domain' 'email'
is_system_enabled "$MAIL_SYSTEM" 'MAIL_SYSTEM' is_system_enabled "$MAIL_SYSTEM" 'MAIL_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"
@ -44,8 +41,8 @@ is_object_unsuspended 'mail' 'DOMAIN' "$domain"
# Change cathcall alias # Change cathcall alias
if [[ "$MAIL_SYSTEM" =~ exim ]]; then if [[ "$MAIL_SYSTEM" =~ exim ]]; then
sed -i "/*@$domain_idn:/d" $HOMEDIR/$user/conf/mail/$domain/aliases sed -i "/*@$domain:/d" $HOMEDIR/$user/conf/mail/$domain/aliases
echo "*@$domain_idn:$email" >> $HOMEDIR/$user/conf/mail/$domain/aliases echo "*@$domain:$email" >> $HOMEDIR/$user/conf/mail/$domain/aliases
fi fi
@ -56,8 +53,9 @@ fi
# Change catchall in config # Change catchall in config
update_object_value 'mail' 'DOMAIN' "$domain" '$CATCHALL' "$email" update_object_value 'mail' 'DOMAIN' "$domain" '$CATCHALL' "$email"
# Logging # Logging
log_history "changed catchall email for $domain to $email" log_history "changed catchall email for $domain to $email"
log_event "$OK" "$ARGUMENTS" log_event "$OK" "$EVENT"
exit exit

View file

@ -1,5 +1,5 @@
#!/bin/bash #!/bin/bash
# info: change remote dns domain expiration date # info: change remote dns domain expiriation date
# options: USER DOMAIN # options: USER DOMAIN
# #
# The function synchronize dns domain with the remote server. # The function synchronize dns domain with the remote server.
@ -9,7 +9,7 @@
# Variable&Function # # Variable&Function #
#----------------------------------------------------------# #----------------------------------------------------------#
# Argument definition # Argument defenition
user=$1 user=$1
domain=$2 domain=$2
@ -24,41 +24,83 @@ source $VESTA/conf/vesta.conf
#----------------------------------------------------------# #----------------------------------------------------------#
check_args '2' "$#" 'USER DOMAIN' check_args '2' "$#" 'USER DOMAIN'
is_format_valid 'user' 'domain' validate_format 'user' 'domain'
is_system_enabled "$DNS_CLUSTER" 'DNS_CLUSTER' is_system_enabled "$DNS_CLUSTER" 'DNS_CLUSTER'
is_object_valid 'user' 'USER' "$user" is_object_valid 'user' 'USER' "$user"
is_object_valid 'dns' 'DOMAIN' "$domain" is_object_valid 'dns' 'DOMAIN' "$domain"
is_procces_running
remote_dns_health_check if [ ! -e "$VESTA/conf/dns-cluster.conf" ]; then
echo "Error: dns-cluster.conf doesn't exist"
log_event "$E_NOTEXIST $EVENT"
exit $E_NOTEXIST
fi
number_of_proc=$(ps auxf | grep -v grep | grep $VESTA/bin/$SCRIPT | wc -l)
if [ "$number_of_proc" -gt 2 ]; then
echo "Error: another sync process already exists"
log_event "$E_EXISTS $EVENT"
exit $E_EXISTS
fi
#----------------------------------------------------------# #----------------------------------------------------------#
# Action # # Action #
#----------------------------------------------------------# #----------------------------------------------------------#
old_ifs="$IFS"
IFS=$'\n' IFS=$'\n'
for cluster in $(grep "SUSPENDED='no'" $VESTA/conf/dns-cluster.conf); do
# Parsing remote host parameters # Check remote dns nodes
eval $cluster remote_dns_health_check
# Syncing domain for cluster_str in $(grep "SUSPENDED='no'" $VESTA/conf/dns-cluster.conf); do
# Get host values
eval $cluster_str
# Check connection type
if [ -z "TYPE" ]; then
TYPE='api'
fi
# Switch on connection type
case $TYPE in
ssh) send_cmd="send_ssh_cmd" ;;
*) send_cmd="send_api_cmd" ;;
esac
# Check recipient dns user
if [ -z "$DNS_USER" ]; then
DNS_USER='dns-cluster'
fi
# Check dns exceptions
if [ -z "$DNS_CLUSTER_IGNORE" ]; then
DNS_CLUSTER_IGNORE='dns-cluster'
fi
# Sync domain
str=$(grep "DOMAIN='$domain'" $USER_DATA/dns.conf) str=$(grep "DOMAIN='$domain'" $USER_DATA/dns.conf)
cluster_cmd v-insert-dns-domain $DNS_USER "$str" $HOSTNAME 'no' eval $str
check_result $? "$HOST connection failed (exp insert)" $E_CONNECT $send_cmd v-insert-dns-domain $DNS_USER "$str" $HOSTNAME 'scheduled'
if [ $? -ne 0 ]; then
echo "Error: $TYPE connection to $HOST failed"
log_event "$E_CONNECT $EVENT"
exit $E_CONNECT
fi
done done
# Update pipe
#----------------------------------------------------------#
# Vesta #
#----------------------------------------------------------#
# Updating pipe
pipe="$VESTA/data/queue/dns-cluster.pipe" pipe="$VESTA/data/queue/dns-cluster.pipe"
str=$(grep -n "$SCRIPT $1 $2 $3$" $pipe | cut -f1 -d: | head -n1) str=$(grep -n "$SCRIPT $1 $2 $3$" $pipe | cut -f1 -d: | head -n1)
if [ ! -z "$str" ]; then if [ ! -z "$str" ]; then
sed -i "$str d" $pipe sed -i "$str d" $pipe
fi fi
#----------------------------------------------------------#
# Vesta #
#----------------------------------------------------------#
exit exit

View file

@ -9,7 +9,7 @@
# Variable&Function # # Variable&Function #
#----------------------------------------------------------# #----------------------------------------------------------#
# Argument definition # Argument defenition
user=$1 user=$1
domain=$2 domain=$2
@ -24,45 +24,86 @@ source $VESTA/conf/vesta.conf
#----------------------------------------------------------# #----------------------------------------------------------#
check_args '2' "$#" 'USER DOMAIN' check_args '2' "$#" 'USER DOMAIN'
is_format_valid 'user' 'domain' validate_format 'user' 'domain'
is_system_enabled "$DNS_CLUSTER" 'DNS_CLUSTER' is_system_enabled "$DNS_CLUSTER" 'DNS_CLUSTER'
is_object_valid 'user' 'USER' "$user" is_object_valid 'user' 'USER' "$user"
is_object_valid 'dns' 'DOMAIN' "$domain" is_object_valid 'dns' 'DOMAIN' "$domain"
is_procces_running
remote_dns_health_check if [ ! -e "$VESTA/conf/dns-cluster.conf" ]; then
echo "Error: dns-cluster.conf doesn't exist"
log_event "$E_NOTEXIST $EVENT"
exit $E_NOTEXIST
fi
number_of_proc=$(ps auxf | grep -v grep | grep $VESTA/bin/$SCRIPT | wc -l)
if [ "$number_of_proc" -gt 2 ]; then
echo "Error: another sync process already exists"
log_event "$E_EXISTS $EVENT"
exit $E_EXISTS
fi
#----------------------------------------------------------# #----------------------------------------------------------#
# Action # # Action #
#----------------------------------------------------------# #----------------------------------------------------------#
old_ifs="$IFS"
IFS=$'\n' IFS=$'\n'
for cluster in $(grep "SUSPENDED='no'" $VESTA/conf/dns-cluster.conf); do
# Parsing remote host parameters # Check remote dns nodes
eval $cluster remote_dns_health_check
# Syncing SOA for cluster_str in $(grep "SUSPENDED='no'" $VESTA/conf/dns-cluster.conf); do
# Get host values
eval $cluster_str
# Check connection type
if [ -z "TYPE" ]; then
TYPE='api'
fi
# Switch on connection type
case $TYPE in
ssh) send_cmd="send_ssh_cmd" ;;
*) send_cmd="send_api_cmd" ;;
esac
# Check recipient dns user
if [ -z "$DNS_USER" ]; then
DNS_USER='dns-cluster'
fi
# Check dns exceptions
if [ -z "$DNS_CLUSTER_IGNORE" ]; then
DNS_CLUSTER_IGNORE='dns-cluster'
fi
# Sync domain
str=$(grep "DOMAIN='$domain'" $USER_DATA/dns.conf) str=$(grep "DOMAIN='$domain'" $USER_DATA/dns.conf)
cluster_cmd v-insert-dns-domain $DNS_USER "$str" $HOSTNAME 'domain' 'no' eval $str
check_result $? "$HOST connection failed (sync)" $E_CONNECT $send_cmd v-insert-dns-domain $DNS_USER "$str" $HOSTNAME 'no'
# Rebuilding dns zone # Rebuild dns zone
cluster_cmd v-rebuild-dns-domain $DNS_USER $domain 'yes' 'no' $send_cmd v-rebuild-dns-domain $DNS_USER $domain 'scheduled'
check_result $? "$HOST connection failed (rebuild)" $E_CONNECT if [ $? -ne 0 ]; then
echo "Error: $TYPE connection to $HOST failed (rebuild)"
log_event "$E_CONNECT $EVENT"
exit $E_CONNECT
fi
done done
# Update pipe
#----------------------------------------------------------#
# Vesta #
#----------------------------------------------------------#
# Updating pipe
pipe="$VESTA/data/queue/dns-cluster.pipe" pipe="$VESTA/data/queue/dns-cluster.pipe"
str=$(grep -n "$SCRIPT $1 $2 $3$" $pipe | cut -f1 -d: | head -n1) str=$(grep -n "$SCRIPT $1 $2 $3$" $pipe | cut -f1 -d: | head -n1)
if [ ! -z "$str" ]; then if [ ! -z "$str" ]; then
sed -i "$str d" $pipe sed -i "$str d" $pipe
fi fi
#----------------------------------------------------------#
# Vesta #
#----------------------------------------------------------#
exit exit

View file

@ -9,7 +9,7 @@
# Variable&Function # # Variable&Function #
#----------------------------------------------------------# #----------------------------------------------------------#
# Argument definition # Argument defenition
user=$1 user=$1
domain=$2 domain=$2
@ -24,45 +24,100 @@ source $VESTA/conf/vesta.conf
#----------------------------------------------------------# #----------------------------------------------------------#
check_args '2' "$#" 'USER DOMAIN' check_args '2' "$#" 'USER DOMAIN'
is_format_valid 'user' 'domain' validate_format 'user' 'domain'
is_system_enabled "$DNS_CLUSTER" 'DNS_CLUSTER' is_system_enabled "$DNS_CLUSTER" 'DNS_CLUSTER'
is_object_valid 'user' 'USER' "$user" is_object_valid 'user' 'USER' "$user"
is_object_valid 'dns' 'DOMAIN' "$domain" is_object_valid 'dns' 'DOMAIN' "$domain"
is_procces_running
remote_dns_health_check if [ ! -e "$VESTA/conf/dns-cluster.conf" ]; then
echo "Error: dns-cluster.conf doesn't exist"
log_event "$E_NOTEXIST $EVENT"
exit $E_NOTEXIST
fi
number_of_proc=$(ps auxf | grep -v grep | grep $VESTA/bin/$SCRIPT | wc -l)
if [ "$number_of_proc" -gt 2 ]; then
echo "Error: another sync process already exists"
log_event "$E_EXISTS $EVENT"
exit $E_EXISTS
fi
#----------------------------------------------------------# #----------------------------------------------------------#
# Action # # Action #
#----------------------------------------------------------# #----------------------------------------------------------#
old_ifs="$IFS"
IFS=$'\n' IFS=$'\n'
for cluster in $(grep "SUSPENDED='no'" $VESTA/conf/dns-cluster.conf); do
# Parsing remote host parameters # Check remote dns nodes
eval $cluster remote_dns_health_check
# Syncing TTL # Starting cluster loop
for cluster_str in $(grep "SUSPENDED='no'" $VESTA/conf/dns-cluster.conf); do
# Get host values
eval $cluster_str
# Check connection type
if [ -z "TYPE" ]; then
TYPE='api'
fi
# Switch on connection type
case $TYPE in
ssh) send_cmd="send_ssh_cmd" ;;
*) send_cmd="send_api_cmd" ;;
esac
# Check host connection
$send_cmd v-list-sys-config
if [ $? -ne 0 ]; then
echo "Error: $TYPE connection to $HOST failed"
log_event "$E_CONNECT $EVENT"
exit $E_CONNECT
fi
# Check recipient dns user
if [ -z "$DNS_USER" ]; then
DNS_USER='dns-cluster'
fi
$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"
exit $E_NOTEXIST
fi
# Check dns exceptions
if [ -z "$DNS_CLUSTER_IGNORE" ]; then
DNS_CLUSTER_IGNORE='dns-cluster'
fi
# Sync domain
str=$(grep "DOMAIN='$domain'" $USER_DATA/dns.conf) str=$(grep "DOMAIN='$domain'" $USER_DATA/dns.conf)
cluster_cmd v-insert-dns-domain $DNS_USER "$str" $HOSTNAME 'domain' 'no' eval $str
check_result $? "$HOST connection failed (sync)" $E_CONNECT $send_cmd v-insert-dns-domain $DNS_USER "$str" $HOSTNAME 'no'
# Rebuilding dns zone # Rebuild dns zone
cluster_cmd v-rebuild-dns-domain $DNS_USER $domain 'yes' 'no' $send_cmd v-rebuild-dns-domain $DNS_USER $domain 'scheduled'
check_result $? "$HOST connection failed (rebuild)" $E_CONNECT if [ $? -ne 0 ]; then
echo "Error: $TYPE connection to $HOST failed (rebuild)"
log_event "$E_CONNECT $EVENT"
exit $E_CONNECT
fi
done done
# Update pipe
#----------------------------------------------------------#
# Vesta #
#----------------------------------------------------------#
# Updating pipe
pipe="$VESTA/data/queue/dns-cluster.pipe" pipe="$VESTA/data/queue/dns-cluster.pipe"
str=$(grep -n "$SCRIPT $1 $2 $3$" $pipe | cut -f1 -d: | head -n1) str=$(grep -n "$SCRIPT $1 $2 $3$" $pipe | cut -f1 -d: | head -n1)
if [ ! -z "$str" ]; then if [ ! -z "$str" ]; then
sed -i "$str d" $pipe sed -i "$str d" $pipe
fi fi
#----------------------------------------------------------#
# Vesta #
#----------------------------------------------------------#
exit exit

View file

@ -10,7 +10,7 @@
# Variable&Function # # Variable&Function #
#----------------------------------------------------------# #----------------------------------------------------------#
# Argument definition # Argument defenition
key=$(echo "$1" | tr '[:lower:]' '[:upper:]' ) key=$(echo "$1" | tr '[:lower:]' '[:upper:]' )
value=$2 value=$2
@ -18,34 +18,27 @@ value=$2
source $VESTA/func/main.sh source $VESTA/func/main.sh
source $VESTA/conf/vesta.conf source $VESTA/conf/vesta.conf
PATH="$PATH:/usr/local/sbin:/sbin:/usr/sbin:/root/bin"
#----------------------------------------------------------# #----------------------------------------------------------#
# Verifications # # Verifications #
#----------------------------------------------------------# #----------------------------------------------------------#
check_args '2' "$#" 'KEY VALUE' check_args '2' "$#" 'KEY VALUE'
is_format_valid 'key' validate_format 'key'
check_ckey=$(grep "^$key='" $VESTA/conf/vesta.conf)
if [ -z "$check_ckey" ]; then
echo "Error: key $key not found"
log_event "$E_INVALID" "$EVENT"
exit $E_INVALID
fi
format_no_quotes "$value" 'value'
#----------------------------------------------------------# #----------------------------------------------------------#
# Action # # Action #
#----------------------------------------------------------# #----------------------------------------------------------#
# Updating conf # Updating conf
check_ckey=$(grep "^$key='" $VESTA/conf/vesta.conf) sed -i "s/$key=.*/$key='$value'/g" $VESTA/conf/vesta.conf
if [ -z "$check_ckey" ]; then
echo "$key='$value'" >> $VESTA/conf/vesta.conf
else
sed -i "s|$key=.*|$key='$value'|g" $VESTA/conf/vesta.conf
fi
if [ "$key" = "BACKUP" ] && [ "$value" != '/backup' ]; then
rm /backup
ln -s $value /backup
fi
#----------------------------------------------------------# #----------------------------------------------------------#
@ -53,6 +46,6 @@ fi
#----------------------------------------------------------# #----------------------------------------------------------#
# Logging # Logging
log_event "$OK" "$ARGUMENTS" log_event "$OK" "$EVENT"
exit exit

View file

@ -9,7 +9,7 @@
# Variable&Function # # Variable&Function #
#----------------------------------------------------------# #----------------------------------------------------------#
# Argument definition # Argument defenition
domain=$1 domain=$1
# Includes # Includes
@ -22,7 +22,7 @@ source $VESTA/conf/vesta.conf
#----------------------------------------------------------# #----------------------------------------------------------#
check_args '1' "$#" 'HOSTNAME' check_args '1' "$#" 'HOSTNAME'
is_format_valid 'domain' validate_format 'domain'
#----------------------------------------------------------# #----------------------------------------------------------#
@ -31,16 +31,18 @@ is_format_valid 'domain'
hostname $domain hostname $domain
if [ -d "/etc/sysconfig" ]; then # RHEL/CentOS
# RHEL/CentOS/Amazon if [ -e "/etc/redhat-release" ]; then
touch /etc/sysconfig/network touch /etc/sysconfig/network
if [ -z "$(grep HOSTNAME /etc/sysconfig/network)" ]; then if [ -z "$(grep HOSTNAME /etc/sysconfig/network)" ]; then
echo "HOSTNAME='$domain'" >> /etc/sysconfig/network echo "HOSTNAME='$domain'" >> /etc/sysconfig/network
else else
sed -i "s/HOSTNAME=.*/HOSTNAME='$domain'/" /etc/sysconfig/network sed -i "s/HOSTNAME=.*/HOSTNAME='$domain'/" /etc/sysconfig/network
fi fi
else fi
# Debian/Ubuntu
# Debian/Ubuntu
if [ ! -e "/etc/redhat-release" ]; then
echo "$domain" > /etc/hostname echo "$domain" > /etc/hostname
fi fi
@ -50,6 +52,6 @@ fi
#----------------------------------------------------------# #----------------------------------------------------------#
# Logging # Logging
log_event "$OK" "$ARGUMENTS" log_event "$OK" "$EVENT"
exit exit

View file

@ -9,7 +9,7 @@
# Variable&Function # # Variable&Function #
#----------------------------------------------------------# #----------------------------------------------------------#
# Argument definition # Argument defenition
ip=$1 ip=$1
ip_name=$2 ip_name=$2
@ -24,9 +24,11 @@ source $VESTA/conf/vesta.conf
#----------------------------------------------------------# #----------------------------------------------------------#
check_args '2' "$#" 'IP IP_NAME' check_args '2' "$#" 'IP IP_NAME'
is_format_valid 'ip' validate_format 'ip'
is_format_valid 'ip_name' if [ ! -z "$ip_name" ]; then
is_ip_valid "$ip" validate_format 'ip_name'
fi
is_ip_valid
#----------------------------------------------------------# #----------------------------------------------------------#
@ -42,7 +44,7 @@ update_ip_value '$NAME' "$ip_name"
#----------------------------------------------------------# #----------------------------------------------------------#
# Logging # Logging
log_history "changed associated dns on $ip to $ip_name" '' 'admin' log_history "changed associated dns on $ip to $domain" '' 'admin'
log_event "$OK" "$ARGUMENTS" log_event "$OK" "$EVENT"
exit exit

View file

@ -9,7 +9,7 @@
# Variable&Function # # Variable&Function #
#----------------------------------------------------------# #----------------------------------------------------------#
# Argument definition # Argument defenition
ip=$1 ip=$1
nat_ip=$2 nat_ip=$2
restart=$3 restart=$3
@ -25,83 +25,65 @@ source $VESTA/conf/vesta.conf
#----------------------------------------------------------# #----------------------------------------------------------#
check_args '2' "$#" 'IP NAT_IP [RESTART]' check_args '2' "$#" 'IP NAT_IP [RESTART]'
is_format_valid 'ip' validate_format 'ip'
is_format_valid 'nat_ip' if [ ! -z "$nat_ip" ]; then
is_ip_valid "$ip" validate_format 'nat_ip'
fi
is_ip_valid
#----------------------------------------------------------# #----------------------------------------------------------#
# Action # # Action #
#----------------------------------------------------------# #----------------------------------------------------------#
# Updating IP # Changing nat ip
if [ -z "$(grep NAT= $VESTA/data/ips/$ip)" ]; then if [ -z "$(grep NAT= $VESTA/data/ips/$ip)" ]; then
sed -i "s/^TIME/NAT='$nat_ip'\nTIME/g" $VESTA/data/ips/$ip sed -i "s/^TIME/NAT='$nat_ip'\nTIME/g" $VESTA/data/ips/$ip
old=''
new=$nat_ip
else else
old=$(get_ip_value '$NAT') update_ip_value '$NAT' "$nat_ip"
new=$nat_ip fi
sed -i "s/NAT=.*/NAT='$new'/" $VESTA/data/ips/$ip
if [ -z "$nat_ip" ]; then # Check ftp system
new=$ip if [ "$FTP_SYSTEM" = 'vsftpd' ]; then
# Find configuration
if [ -e '/etc/vsftpd/vsftpd.conf' ]; then
conf='/etc/vsftpd/vsftpd.conf'
fi fi
fi
# Updating WEB configs if [ -e '/etc/vsftpd.conf' ]; then
if [ ! -z "$old" ] && [ ! -z "$WEB_SYSTEM" ]; then conf='/etc/vsftpd.conf'
sed -i "s/$old/$new/" $VESTA/data/users/*/web.conf fi
for user in $(ls $VESTA/data/users/); do
$BIN/v-rebuild-web-domains $user no
done
$BIN/v-restart-dns $restart
fi
# Updating DNS configs # Update config
if [ ! -z "$old" ] && [ ! -z "$DNS_SYSTEM" ]; then if [ -z "$(grep pasv_address $conf)" ]; then
sed -i "s/$old/$new/" $VESTA/data/users/*/dns.conf if [ ! -z "$nat_ip" ]; then
sed -i "s/$old/$new/" $VESTA/data/users/*/dns/*.conf
for user in $(ls $VESTA/data/users/); do
$BIN/v-rebuild-dns-domains $user no
done
$BIN/v-restart-dns $restart
fi
# Updating FTP
if [ ! -z "$old" ] && [ ! -z "$FTP_SYSTEM" ]; then
conf=$(find /etc -name $FTP_SYSTEM.conf)
if [ -e "$conf" ]; then
sed -i "s/$old/$new/g" $conf
if [ "$FTP_SYSTEM" = 'vsftpd' ]; then
check_pasv=$(grep pasv_address $conf)
if [ -z "$check_pasv" ] && [ ! -z "$nat_ip" ]; then
echo "pasv_address=$nat_ip" >> $conf echo "pasv_address=$nat_ip" >> $conf
fi fi
if [ ! -z "$check_pasv" ] && [ -z "$nat_ip" ]; then else
if [ ! -z "$nat_ip" ]; then
sed -i "s/pasv_address=.*/pasv_address='$nat_ip'/g" $conf
else
sed -i "/pasv_address/d" $conf sed -i "/pasv_address/d" $conf
fi fi
if [ ! -z "$check_pasv" ] && [ ! -z "$nat_ip" ]; then
sed -i "s/pasv_address=.*/pasv_address='$nat_ip'/g" $conf
fi fi
fi
fi
$BIN/v-restart-ftp $restart
fi fi
# Updating firewall
if [ ! -z "$old" ] && [ ! -z "$FIREWALL_SYSTEM" ]; then
sed -i "s/$old/$new/g" $VESTA/data/firewall/*.conf
$BIN/v-update-firewall
fi
#----------------------------------------------------------# #----------------------------------------------------------#
# Vesta # # Vesta #
#----------------------------------------------------------# #----------------------------------------------------------#
# Restart ftp server
if [ "$restart" != 'no' ]; then
$BIN/v-restart-ftp
if [ $? -ne 0 ]; then
exit $E_RESTART
fi
fi
# Logging # Logging
log_history "changed associated nat address on $ip to $nat_ip" '' 'admin' log_history "changed associated nat address on $ip to $nat_ip" '' 'admin'
log_event "$OK" "$ARGUMENTS" log_event "$OK" "$EVENT"
exit exit

View file

@ -9,7 +9,7 @@
# Variable&Function # # Variable&Function #
#----------------------------------------------------------# #----------------------------------------------------------#
# Argument definition # Argument defenition
ip=$1 ip=$1
user=$2 user=$2
@ -24,13 +24,14 @@ source $VESTA/conf/vesta.conf
#----------------------------------------------------------# #----------------------------------------------------------#
check_args '2' "$#" 'IP USER' check_args '2' "$#" 'IP USER'
is_format_valid 'ip' 'user' validate_format 'ip' 'user'
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_ip_valid "$ip" is_ip_valid
is_ip_key_empty '$U_WEB_DOMAINS' is_ip_key_empty '$U_WEB_DOMAINS'
is_ip_key_empty '$U_SYS_USERS' is_ip_key_empty '$U_SYS_USERS'
#----------------------------------------------------------# #----------------------------------------------------------#
# Action # # Action #
#----------------------------------------------------------# #----------------------------------------------------------#
@ -76,6 +77,6 @@ fi
# Logging # Logging
log_history "changed owner of $ip to $user" '' 'admin' log_history "changed owner of $ip to $user" '' 'admin'
log_event "$OK" "$ARGUMENTS" log_event "$OK" "$EVENT"
exit exit

View file

@ -9,7 +9,7 @@
# Variable&Function # # Variable&Function #
#----------------------------------------------------------# #----------------------------------------------------------#
# Argument definition # Argument defenition
ip=$1 ip=$1
ip_status=$2 ip_status=$2
@ -24,16 +24,21 @@ source $VESTA/conf/vesta.conf
#----------------------------------------------------------# #----------------------------------------------------------#
check_args '2' "$#" 'IP IP_STATUS' check_args '2' "$#" 'IP IP_STATUS'
is_format_valid 'ip' 'ip_status' validate_format 'ip' 'ip_status'
is_ip_valid "$ip" is_ip_valid
if [ "$ip_status" = "$(get_ip_value '$STATUS')" ]; then if [ "$ip_status" = "$(get_ip_value '$STATUS')" ]; then
check_result "$E_EXISTS" "status $ip_status is already set" echo "Error: status $ip_status is already set"
log_event "$E_EXISTS" "$EVENT"
exit $E_EXISTS
fi fi
web_domains=$(get_ip_value '$U_WEB_DOMAINS') web_domains=$(get_ip_value '$U_WEB_DOMAINS')
sys_user=$(get_ip_value '$U_SYS_USERS') sys_user=$(get_ip_value '$U_SYS_USERS')
ip_owner=$(get_ip_value '$OWNER') ip_owner=$(get_ip_value '$OWNER')
if [ "$web_domains" -ne '0' ] && [ "$sys_user" != "$ip_owner" ]; then if [ "$web_domains" -ne '0' ] && [ "$sys_user" != "$ip_owner" ]; then
check_result "$E_INUSE" "ip $ip is used" echo "Error: ip $ip is used"
log_event "$E_INUSE" "$EVENT"
exit $E_INUSE
fi fi
@ -51,6 +56,6 @@ update_ip_value '$STATUS' "$ip_status"
# Logging # Logging
log_history "changed $ip status to $ip_status" '' 'admin' log_history "changed $ip status to $ip_status" '' 'admin'
log_event "$OK" "$ARGUMENTS" log_event "$OK" "$EVENT"
exit exit

View file

@ -9,7 +9,7 @@
# Variable&Function # # Variable&Function #
#----------------------------------------------------------# #----------------------------------------------------------#
# Argument definition # Argument defenition
language=$1 language=$1
# Includes # Includes
@ -20,7 +20,7 @@ source $VESTA/conf/vesta.conf
is_language_valid() { is_language_valid() {
if [ ! -e "$VESTA/web/inc/i18n/$language.php" ]; then if [ ! -e "$VESTA/web/inc/i18n/$language.php" ]; then
echo "Error: language file $language doesn't exist" echo "Error: language file $language doesn't exist"
log_event "$E_NOTEXIST $ARGUMENTS" log_event "$E_NOTEXIST $EVENT"
exit $E_NOTEXIST exit $E_NOTEXIST
fi fi
} }
@ -31,7 +31,7 @@ is_language_valid() {
#----------------------------------------------------------# #----------------------------------------------------------#
check_args '1' "$#" 'LANGUAGE' check_args '1' "$#" 'LANGUAGE'
is_format_valid 'language' validate_format 'language'
is_language_valid $language is_language_valid $language
@ -52,6 +52,6 @@ fi
#----------------------------------------------------------# #----------------------------------------------------------#
# Logging # Logging
log_event "$OK" "$ARGUMENTS" log_event "$OK" "$EVENT"
exit exit

View file

@ -1,131 +0,0 @@
#!/bin/bash
# info: change service config
# options: CONFIG SERVICE [RESTART]
#
# The function for changing service confguration.
#----------------------------------------------------------#
# Variable&Function #
#----------------------------------------------------------#
# Argument definition
src=$1
service=$2
restart=$3
echo "$0 $*" >/tmp/t.log
# Includes
source $VESTA/func/main.sh
source $VESTA/conf/vesta.conf
#----------------------------------------------------------#
# Verifications #
#----------------------------------------------------------#
check_args '2' "$#" 'CONFIG SERVICE [RESTART]'
if [ ! -e "$src" ]; then
check_result "$E_NOTEXIST" "$src config doesn't exist"
fi
#----------------------------------------------------------#
# Action #
#----------------------------------------------------------#
# Defining dst config path
case $service in
nginx) dst='/etc/nginx/nginx.conf';;
httpd) dst='/etc/httpd/conf/httpd.conf';;
apache2) dst='/etc/apache2/apache2.conf';;
exim) dst='/etc/exim/exim.conf';;
exim4) dst='/etc/exim4/exim4.conf.template';;
vsftpd) dst=$(find /etc/vsftpd* -name 'vsftpd.conf');;
proftpd) dst=$(find /etc/proftpd* -name 'proftpd.conf');;
php) dst=$(find /etc/php* -name php.ini);;
mysql) dst=$(find /etc/my* -name my.cnf);;
mysqld) dst=$(find /etc/my* -name my.cnf);;
mariadb) dst=$(find /etc/my* -name my.cnf);;
postgresql) dst=$($BIN/v-list-sys-pgsql-config plain |cut -f 1);;
postgresql-hba) dst=$($BIN/v-list-sys-pgsql-config plain |cut -f 2);;
dovecot) dst=$(find /etc/dovecot* -name dovecot.conf);;
dovecot-1) dst='/etc/dovecot/conf.d/10-auth.conf';;
dovecot-2) dst='/etc/dovecot/conf.d/10-logging.conf';;
dovecot-3) dst='/etc/dovecot/conf.d/10-mail.conf';;
dovecot-4) dst='/etc/dovecot/conf.d/10-master.conf';;
dovecot-5) dst='/etc/dovecot/conf.d/10-ssl.conf';;
dovecot-6) dst='/etc/dovecot/conf.d/20-imap.conf';;
dovecot-7) dst='/etc/dovecot/conf.d/20-pop3.conf';;
dovecot-8) dst='/etc/dovecot/conf.d/auth-passwdfile.conf.ext';;
named) dst='/etc/named.conf';;
bind9) dst='/etc/bind/named.conf';;
bind9-opt) dst='/etc/bind/named.conf.options';;
spamd) dst=$($BIN/v-list-sys-spamd-config plain);;
spamassassin) dst=$($BIN/v-list-sys-spamd-config plain);;
clamd) dst=$($BIN/v-list-sys-clamd-config plain);;
clamd.scan) dst=$($BIN/v-list-sys-clamd-config plain);;
cron) dst='/etc/crontab';;
crond) dst='/etc/crontab';;
fail2ban) dst='/etc/fail2ban/jail.local';;
*) check_result $E_NOTEXIST "service $service doesn't exist"
esac
# Checking config path
for config in $dst; do
if [ ! -e "$config" ]; then
check_result $E_NOTEXIST "$service config doesn't exist"
fi
done
# Checking diff between src and dst configs
for config in $dst; do
diff -q $src $config >/dev/null
if [ $? -ne 0 ]; then
cp $config $config.vst.back
cp $src $config
update="yes"
fi
done
# Restarting service
if [ "$update" = 'yes' ] && [ "$restart" != 'no' ]; then
if [[ "$service" =~ - ]]; then
service=$(echo ${service%-*})
fi
if [ "$service" = 'php' ]; then
if [ "$WEB_SYSTEM" = "nginx" ]; then
if [ $(ps --no-headers -o comm 1) == systemd ]; then
service=$(systemctl | grep -o -E "php.*fpm.*\.service")
service=${service//.service/}
else
service=$(ls /etc/init.d/php*fpm* |cut -f 4 -d /)
fi
else
service=$WEB_SYSTEM
fi
fi
for single_service in $service; do
service $single_service restart >/dev/null 2>&1
done <<< "$service"
if [ $? -ne 0 ]; then
for config in $dst; do
cat $config.vst.back > $config
rm -f $config.vst.back
done
check_result $E_RESTART "$service failed to start with new config"
fi
fi
#----------------------------------------------------------#
# Vesta #
#----------------------------------------------------------#
# Logging
log_event "$OK" "$ARGUMENTS"
exit

View file

@ -1,72 +0,0 @@
#!/bin/bash
# info: change system timezone
# options: TIMEZONE
#
# The function for changing system timezone.
#----------------------------------------------------------#
# Variable&Function #
#----------------------------------------------------------#
# Argument definition
timezone=$1
# Includes
source $VESTA/func/main.sh
source $VESTA/conf/vesta.conf
is_timezone_valid() {
if [ ! -e "/usr/share/zoneinfo/$timezone" ]; then
echo "Error: tz file $timezone doesn't exist"
log_event $E_NOTEXIST "$ARGUMENTS"
exit $E_NOTEXIST
fi
}
#----------------------------------------------------------#
# Verifications #
#----------------------------------------------------------#
check_args '1' "$#" 'TIMEZONE'
is_timezone_valid
#----------------------------------------------------------#
# Action #
#----------------------------------------------------------#
# Changing system timezone
which timedatectls >/dev/null 2>&1
if [ "$?" -eq 0 ]; then
timedatectl set-timezone $timezone
else
if [ -e "/etc/sysconfig/clock" ]; then
sed -i "s/ZONE.*//" /etc/sysconfig/clock
echo "ZONE=\"$timezone\"" >> /etc/sysconfig/clock
fi
if [ -e "/etc/timezone" ]; then
echo "$timezone" > /etc/timezone
fi
rm -f /etc/localtime
ln -sf /usr/share/zoneinfo/$timezone /etc/localtime
fi
# Chaning php timezone
if [ ! -z "$WEB_SYSTEM" ]; then
for conf in $(find /etc/php* -name php.ini); do
sed -i "s|;date.timezone =|date.timezone =|" $conf
sed -i "s|date.timezone =.*|date.timezone = $timezone|" $conf
done
fi
#----------------------------------------------------------#
# Vesta #
#----------------------------------------------------------#
# Logging
log_event "$OK" "$ARGUMENTS"
exit

View file

@ -1,77 +0,0 @@
#!/bin/bash
# info: change vesta ssl certificate
# options: SSL_DIR [RESTART]
#
# The function changes vesta SSL certificate and the key.
#----------------------------------------------------------#
# Variable&Function #
#----------------------------------------------------------#
# Argument definition
domain='certificate'
ssl_dir=$1
restart=$2
# Includes
source $VESTA/func/main.sh
source $VESTA/func/domain.sh
source $VESTA/conf/vesta.conf
#----------------------------------------------------------#
# Verifications #
#----------------------------------------------------------#
check_args '1' "$#" 'SSL_DIR [RESTART]'
is_format_valid 'ssl_dir'
#----------------------------------------------------------#
# Action #
#----------------------------------------------------------#
# Checking new certificate
certificate=$(cat $ssl_dir/$domain.crt |grep -n END)
certificate_count=$(echo "$certificate" |wc -l)
if [ "$certificate_count" -gt 1 ]; then
crt_end=$(echo "$certificate" |head -n1 |cut -f 1 -d :)
crt_lines=$(wc -l $ssl_dir/$domain.crt |cut -f1 -d ' ')
pem_begin=$((crt_lines - crt_end))
mv $ssl_dir/$domain.crt $ssl_dir/$domain.crt_full
head -n $crt_end $ssl_dir/$domain.crt_full > $ssl_dir/$domain.crt
tail -n $pem_begin $ssl_dir/$domain.crt_full > $ssl_dir/$domain.ca
is_web_domain_cert_valid
mv -f $ssl_dir/$domain.crt_full $ssl_dir/$domain.crt
rm -f $ssl_dir/$domain.ca
else
is_web_domain_cert_valid
fi
# Moving old certificate
mv $VESTA/ssl/certificate.crt $VESTA/ssl/certificate.crt.back
mv $VESTA/ssl/certificate.key $VESTA/ssl/certificate.key.back
# Adding new certificate
cp -f $ssl_dir/certificate.crt $VESTA/ssl/certificate.crt
cp -f $ssl_dir/certificate.key $VESTA/ssl/certificate.key
#----------------------------------------------------------#
# Vesta #
#----------------------------------------------------------#
# Restarting web server
if [ "$restart" != 'no' ]; then
kill -HUP $(cat /var/run/vesta-nginx.pid)
$BIN/v-restart-mail
if [ ! -z "$IMAP_SYSTEM" ]; then
v-restart-service "$IMAP_SYSTEM"
fi
fi
# Logging
log_event "$OK" "$ARGUMENTS"
exit

View file

@ -9,7 +9,7 @@
# Variable&Function # # Variable&Function #
#----------------------------------------------------------# #----------------------------------------------------------#
# Argument definition # Argument defenition
user=$1 user=$1
email=$2 email=$2
@ -23,7 +23,7 @@ source $VESTA/conf/vesta.conf
#----------------------------------------------------------# #----------------------------------------------------------#
check_args '2' "$#" 'USER EMAIL' check_args '2' "$#" 'USER EMAIL'
is_format_valid 'user' 'email' validate_format 'user' 'email'
is_object_valid 'user' 'USER' "$user" is_object_valid 'user' 'USER' "$user"
is_object_unsuspended 'user' 'USER' "$user" is_object_unsuspended 'user' 'USER' "$user"
@ -49,6 +49,6 @@ $BIN/v-rebuild-cron-jobs $user > /dev/null 2>&1
# Logging # Logging
log_history "changed contact email to $email" log_history "changed contact email to $email"
log_event "$OK" "$ARGUMENTS" log_event "$OK" "$EVENT"
exit exit

View file

@ -9,7 +9,7 @@
# Variable&Function # # Variable&Function #
#----------------------------------------------------------# #----------------------------------------------------------#
# Argument definition # Argument defenition
user=$1 user=$1
language=$2 language=$2
@ -19,14 +19,9 @@ source $VESTA/conf/vesta.conf
is_language_valid() { is_language_valid() {
if ! [[ "$1" =~ ^[[:alnum:]_-]+$ ]]; then if [ ! -e "$VESTA/web/inc/i18n/$language.php" ]; then
echo "Error: language $1 is not valid" echo "Error: language $language not exist"
log_event "$E_INVALID" "$ARGUMENTS" log_event "$E_NOTEXIST $EVENT"
exit $E_INVALID
fi
if [ ! -e "$VESTA/web/inc/i18n/$1.php" ]; then
echo "Error: language $1 doesn't exist"
log_event "$E_NOTEXIST" "$ARGUMENTS"
exit $E_NOTEXIST exit $E_NOTEXIST
fi fi
} }
@ -37,7 +32,7 @@ is_language_valid() {
#----------------------------------------------------------# #----------------------------------------------------------#
check_args '2' "$#" 'USER LANGUAGE' check_args '2' "$#" 'USER LANGUAGE'
is_format_valid 'user' 'language' validate_format 'user' 'language'
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_language_valid $language is_language_valid $language
@ -61,6 +56,6 @@ fi
# Logging # Logging
log_history "changed language to $language" log_history "changed language to $language"
log_event "$OK" "$ARGUMENTS" log_event "$OK" "$EVENT"
exit exit

View file

@ -9,7 +9,7 @@
# Variable&Function # # Variable&Function #
#----------------------------------------------------------# #----------------------------------------------------------#
# Argument definition # Argument defenition
user=$1 user=$1
fname=$2 fname=$2
lname=$3 lname=$3
@ -24,7 +24,7 @@ source $VESTA/conf/vesta.conf
#----------------------------------------------------------# #----------------------------------------------------------#
check_args '3' "$#" 'USER FNAME LNAME' check_args '3' "$#" 'USER FNAME LNAME'
is_format_valid 'user' 'fname' 'lname' validate_format 'user' 'fname' 'lname'
is_object_valid 'user' 'USER' "$user" is_object_valid 'user' 'USER' "$user"
is_object_unsuspended 'user' 'USER' "$user" is_object_unsuspended 'user' 'USER' "$user"
@ -48,6 +48,6 @@ update_user_value "$user" '$LNAME' "$lname"
# Logging # Logging
log_history "changed user name to $fname $lname" log_history "changed user name to $fname $lname"
log_event "$OK" "$ARGUMENTS" log_event "$OK" "$EVENT"
exit exit

View file

@ -1,24 +1,20 @@
#!/bin/bash #!/bin/bash
# info: change user nameservers # info: change user nameservers
# options: USER NS1 NS2 [NS3] [NS4] [NS5] [NS6] [NS7] [NS8] # options: USER NS1 NS2 [NS3] [NS4]
# #
# The function for changing default nameservers for specific user. # The function for changing default nameservers for speciefic user.
#----------------------------------------------------------# #----------------------------------------------------------#
# Variable&Function # # Variable&Function #
#----------------------------------------------------------# #----------------------------------------------------------#
# Argument definition # Argument defenition
user=$1 user=$1
ns1=$(echo $2 | sed -e 's/\.*$//g' -e 's/^\.*//g') ns1=$(echo $2 | sed -e 's/\.*$//g' -e 's/^\.*//g')
ns2=$(echo $3 | sed -e 's/\.*$//g' -e 's/^\.*//g') ns2=$(echo $3 | sed -e 's/\.*$//g' -e 's/^\.*//g')
ns3=$(echo $4 | sed -e 's/\.*$//g' -e 's/^\.*//g') ns3=$4
ns4=$(echo $5 | sed -e 's/\.*$//g' -e 's/^\.*//g') ns4=$5
ns5=$(echo $6 | sed -e 's/\.*$//g' -e 's/^\.*//g')
ns6=$(echo $7 | sed -e 's/\.*$//g' -e 's/^\.*//g')
ns7=$(echo $8 | sed -e 's/\.*$//g' -e 's/^\.*//g')
ns8=$(echo $9 | sed -e 's/\.*$//g' -e 's/^\.*//g')
# Includes # Includes
source $VESTA/func/main.sh source $VESTA/func/main.sh
@ -30,34 +26,19 @@ source $VESTA/conf/vesta.conf
#----------------------------------------------------------# #----------------------------------------------------------#
# Checking args # Checking args
check_args '3' "$#" 'USER NS1 NS2 [NS3] [NS4] [NS5] [NS6] [NS7] [NS8]' check_args '3' "$#" 'USER NS1 NS2 [NS3] [NS4]'
# Checking argument format # Checking argument format
is_format_valid 'user' 'ns1' 'ns2' validate_format 'user' 'ns1' 'ns2'
if [ ! -z "$ns3" ]; then if [ ! -z "$ns3" ]; then
ns3=$(echo $4 | sed -e 's/\.*$//g' -e 's/^\.*//g') ns3=$(echo $4 | sed -e 's/\.*$//g' -e 's/^\.*//g')
is_format_valid 'ns3' validate_format 'ns3'
fi fi
if [ ! -z "$ns4" ]; then if [ ! -z "$ns4" ]; then
ns4=$(echo $5 | sed -e 's/\.*$//g' -e 's/^\.*//g') ns4=$(echo $5 | sed -e 's/\.*$//g' -e 's/^\.*//g')
is_format_valid 'ns4' validate_format 'ns4'
fi
if [ ! -z "$ns5" ]; then
ns5=$(echo $6 | sed -e 's/\.*$//g' -e 's/^\.*//g')
is_format_valid 'ns5'
fi
if [ ! -z "$ns6" ]; then
ns6=$(echo $7 | sed -e 's/\.*$//g' -e 's/^\.*//g')
is_format_valid 'ns6'
fi
if [ ! -z "$ns7" ]; then
ns7=$(echo $8 | sed -e 's/\.*$//g' -e 's/^\.*//g')
is_format_valid 'ns7'
fi
if [ ! -z "$ns8" ]; then
ns8=$(echo $9 | sed -e 's/\.*$//g' -e 's/^\.*//g')
is_format_valid 'ns8'
fi fi
is_object_valid 'user' 'USER' "$user" is_object_valid 'user' 'USER' "$user"
is_object_unsuspended 'user' 'USER' "$user" is_object_unsuspended 'user' 'USER' "$user"
@ -67,7 +48,7 @@ is_object_unsuspended 'user' 'USER' "$user"
#----------------------------------------------------------# #----------------------------------------------------------#
# Merging values # Merging values
ns="$ns1,$ns2,$ns3,$ns4,$ns5,$ns6,$ns7,$ns8" ns="$ns1,$ns2,$ns3,$ns4"
ns=$(echo "$ns" | sed -e "s/,,//g" -e "s/,$//") ns=$(echo "$ns" | sed -e "s/,,//g" -e "s/,$//")
# Changing ns values # Changing ns values
@ -79,7 +60,7 @@ update_user_value "$user" '$NS' "$ns"
#----------------------------------------------------------# #----------------------------------------------------------#
# Logging # Logging
log_history "updated nameservers $ns1 $ns2 $ns3 $ns4 $ns5 $ns6 $ns7 $ns8" log_history "changed user nameservers to $ns1, $ns2"
log_event "$OK" "$ARGUMENTS" log_event "$OK" "$EVENT"
exit exit

View file

@ -9,19 +9,23 @@
# Variable&Function # # Variable&Function #
#----------------------------------------------------------# #----------------------------------------------------------#
# Argument definition # Argument defenition
user=$1 user=$1
package=$2 package=$2
force=$3 force=$3
# Includes # Includes
source $VESTA/func/main.sh source $VESTA/func/main.sh
source $VESTA/func/domain.sh
source $VESTA/conf/vesta.conf source $VESTA/conf/vesta.conf
is_package_avalable() { is_package_avalable() {
# Parsing user data
usr_data=$(cat $USER_DATA/user.conf)
IFS=$'\n'
for key in $usr_data; do
eval ${key%%=*}=${key#*=}
done
source $USER_DATA/user.conf
WEB_DOMAINS='0' WEB_DOMAINS='0'
DATABASES='0' DATABASES='0'
MAIL_DOMAINS='0' MAIL_DOMAINS='0'
@ -29,66 +33,32 @@ is_package_avalable() {
DISK_QUOTA='0' DISK_QUOTA='0'
BANDWIDTH='0' BANDWIDTH='0'
pkg_data=$(cat $VESTA/data/packages/$package.pkg| egrep -v "TIME|DATE") pkg_data=$(cat $VESTA/data/packages/$package.pkg |grep -v TIME |\
IFS=$'\n' grep -v DATE)
for str in $pkg_data; do eval $pkg_data
key=$(echo $str |cut -f 1 -d =)
value=$(echo $str |cut -f 2 -d \')
eval $key="$value"
done
# Checking usage agains package limits # Comparing user data with package
if [ "$WEB_DOMAINS" != 'unlimited' ]; then if [[ "$WEB_DOMAINS" -lt "$U_WEB_DOMAINS" ]] ||\
if [ "$WEB_DOMAINS" -lt "$U_WEB_DOMAINS" ]; then [[ "$DNS_DOMAINS" -lt "$U_DNS_DOMAINS" ]] ||\
check_result $E_LIMIT "Package doesn't cover WEB_DOMAIN usage" [[ "$MAIL_DOMAINS" -lt "$U_MAIL_DOMAINS" ]] ||\
[[ "$DATABASES" -lt "$U_DATABASES" ]] ||\
[[ "$CRON_JOBS" -lt "$U_CRON_JOBS" ]] ||\
[[ "$DISK_QUOTA" -lt "$U_DISK" ]] ||\
[[ "$BANDWIDTH" -lt "$U_BANDWIDTH" ]]; then
echo "Error: Package not cover current usage"
log_event "$E_LIMIT" "$EVENT"
exit $E_LIMIT
fi fi
fi
if [ "$DNS_DOMAINS" != 'unlimited' ]; then
if [ "$DNS_DOMAINS" -lt "$U_DNS_DOMAINS" ]; then
check_result $E_LIMIT "Package doesn't cover DNS_DOMAIN usage"
fi
fi
if [ "$MAIL_DOMAINS" != 'unlimited' ]; then
if [ "$MAIL_DOMAINS" -lt "$U_MAIL_DOMAINS" ]; then
check_result $E_LIMIT "Package doesn't cover MAIL_DOMAIN usage"
fi
fi
if [ "$DATABASES" != 'unlimited' ]; then
if [ "$DATABASES" -lt "$U_DATABASES" ]; then
check_result $E_LIMIT "Package doesn't cover DATABASE usage"
fi
fi
if [ "$CRON_JOBS" != 'unlimited' ]; then
if [ "$CRON_JOBS" -lt "$U_CRON_JOBS" ]; then
check_result $E_LIMIT "Package doesn't cover CRON usage"
fi
fi
if [ "$DISK_QUOTA" != 'unlimited' ]; then
if [ "$DISK_QUOTA" -lt "$U_DISK" ]; then
check_result $E_LIMIT "Package doesn't cover DISK usage"
fi
fi
if [ "$BANDWIDTH" != 'unlimited' ]; then
if [ "$BANDWIDTH" -lt "$U_BANDWIDTH" ]; then
check_result $E_LIMIT "Package doesn't cover BANDWIDTH usage"
fi
fi
# Checking templates
is_web_template_valid $WEB_TEMPLATE
is_dns_template_valid $DNS_TEMPLATE
is_proxy_template_valid $PROXY_TEMPLATE
} }
change_user_package() { change_user_package() {
source $USER_DATA/user.conf usr_data=$(cat $USER_DATA/user.conf)
pkg_data=$(cat $VESTA/data/packages/$package.pkg| egrep -v "TIME|DATE") eval $usr_data
IFS=$'\n'
for str in $pkg_data; do pkg_data=$(cat $VESTA/data/packages/$package.pkg |grep -v TIME |\
key=$(echo $str |cut -f 1 -d =) grep -v DATE)
value=$(echo $str |cut -f 2 -d \') eval $pkg_data
eval $key="$value"
done
echo "FNAME='$FNAME' echo "FNAME='$FNAME'
LNAME='$LNAME' LNAME='$LNAME'
PACKAGE='$package' PACKAGE='$package'
@ -140,7 +110,6 @@ U_DATABASES='$U_DATABASES'
U_CRON_JOBS='$U_CRON_JOBS' U_CRON_JOBS='$U_CRON_JOBS'
U_BACKUPS='$U_BACKUPS' U_BACKUPS='$U_BACKUPS'
LANGUAGE='$LANGUAGE' LANGUAGE='$LANGUAGE'
NOTIFICATIONS='$NOTIFICATIONS'
TIME='$TIME' TIME='$TIME'
DATE='$DATE'" > $USER_DATA/user.conf DATE='$DATE'" > $USER_DATA/user.conf
} }
@ -151,7 +120,7 @@ DATE='$DATE'" > $USER_DATA/user.conf
#----------------------------------------------------------# #----------------------------------------------------------#
check_args '2' "$#" 'USER PACKAGE [FORCE]' check_args '2' "$#" 'USER PACKAGE [FORCE]'
is_format_valid 'user' 'package' validate_format 'user' 'package'
is_object_valid 'user' 'USER' "$user" is_object_valid 'user' 'USER' "$user"
is_package_valid is_package_valid
if [ "$force" != 'yes' ];then if [ "$force" != 'yes' ];then
@ -167,7 +136,7 @@ fi
change_user_package change_user_package
# Update user shell # Update user shell
shell_conf=$(echo "$pkg_data" |grep 'SHELL' |cut -f 2 -d \') shell_conf=$(echo "$pkg_data" | grep 'SHELL' | cut -f 2 -d \')
shell=$(grep -w "$shell_conf" /etc/shells |head -n1) shell=$(grep -w "$shell_conf" /etc/shells |head -n1)
/usr/bin/chsh -s "$shell" "$user" &>/dev/null /usr/bin/chsh -s "$shell" "$user" &>/dev/null
@ -176,12 +145,6 @@ if [ -x "$VESTA/data/packages/$package.sh" ]; then
$VESTA/data/packages/$package.sh "$user" "$CONTACT" "$FNAME" "$LNAME" $VESTA/data/packages/$package.sh "$user" "$CONTACT" "$FNAME" "$LNAME"
fi fi
# Update disk quota
source $VESTA/conf/vesta.conf
if [ "$DISK_QUOTA" = 'yes' ]; then
$BIN/v-update-user-quota $user
fi
#----------------------------------------------------------# #----------------------------------------------------------#
# Vesta # # Vesta #
@ -189,6 +152,6 @@ fi
# Logging # Logging
log_history "changed $user package to $package" '' 'admin' log_history "changed $user package to $package" '' 'admin'
log_event "$OK" "$ARGUMENTS" log_event "$OK" "$EVENT"
exit exit

View file

@ -9,31 +9,27 @@
# Variable&Function # # Variable&Function #
#----------------------------------------------------------# #----------------------------------------------------------#
# Argument definition # Argument defenition
user=$1 user=$1
password=$2; HIDE=2 password=$2
# Importing system enviroment as we run this script
# mostly by cron wich not read it by itself
source /etc/profile
# Includes # Includes
source $VESTA/func/main.sh source $VESTA/func/main.sh
source $VESTA/conf/vesta.conf source $VESTA/conf/vesta.conf
# Hiding password
A2="******"
EVENT="$DATE $TIME $SCRIPT $A1 $A2 $A3 $A4 $A5 $A6 $A7 $A8 $A9"
#----------------------------------------------------------# #----------------------------------------------------------#
# Verifications # # Verifications #
#----------------------------------------------------------# #----------------------------------------------------------#
if [ "$user" = "root" ]; then
check_result $E_FORBIDEN "Changing root password is forbiden"
fi
check_args '2' "$#" 'USER PASSWORD' check_args '2' "$#" 'USER PASSWORD'
is_format_valid 'user' validate_format 'user' 'password'
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_password_valid
#----------------------------------------------------------# #----------------------------------------------------------#
@ -44,21 +40,17 @@ is_password_valid
echo "$user:$password" | /usr/sbin/chpasswd echo "$user:$password" | /usr/sbin/chpasswd
md5=$(awk -v user=$user -F : 'user == $1 {print $2}' /etc/shadow) md5=$(awk -v user=$user -F : 'user == $1 {print $2}' /etc/shadow)
if [ "$user" = 'admin' ] && [ -e "$VESTA/web/reset.admin" ]; then
rm -f $VESTA/web/reset.admin
fi
#----------------------------------------------------------# #----------------------------------------------------------#
# Vesta # # Vesta #
#----------------------------------------------------------# #----------------------------------------------------------#
# Changing RKEY value # Changing RKEY value
update_user_value "$user" '$RKEY' "$(generate_password)" update_user_value "$user" '$RKEY' "$(gen_password)"
update_user_value "$user" '$MD5' "$md5" update_user_value "$user" '$MD5' "$md5"
# Logging # Logging
log_history "changed password" log_history "changed password"
log_event "$OK" "$ARGUMENTS" log_event "$OK" "$EVENT"
exit exit

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