backup/restore procedure

This commit is contained in:
Serghey Rodin 2013-03-27 01:16:14 +02:00
commit e23249a997
29 changed files with 1638 additions and 583 deletions

View file

@ -19,7 +19,7 @@ get_next_dbhost() {
old_weight='100'
for db in $host_str; do
eval $db
let weight="$U_DB_BASES * 100 / $MAX_DB" &>/dev/null
let weight="$U_DB_BASES * 100 / $MAX_DB" >/dev/null 2>&1
if [ "$old_weight" -gt "$weight" ]; then
host="$HOST"
old_weight="$weight"
@ -88,14 +88,14 @@ decrease_dbhost_values() {
add_mysql_database() {
host_str=$(grep "HOST='$host'" $VESTA/conf/mysql.conf)
eval $host_str
if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ] || [ -z $PORT ]; then
if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ]; then
echo "Error: mysql config parsing failed"
log_event "$E_PARSING" "$EVENT"
exit $E_PARSING
fi
query='SELECT VERSION()'
mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" &> /dev/null
mysql -h $HOST -u $USER -p$PASSWORD -e "$query" > /dev/null 2>&1
if [ '0' -ne "$?" ]; then
echo "Error: Connection failed"
log_event "$E_DB $EVENT"
@ -104,18 +104,18 @@ add_mysql_database() {
query="CREATE DATABASE \`$database\` CHARACTER SET $charset"
mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" &> /dev/null
mysql -h $HOST -u $USER -p$PASSWORD -e "$query" > /dev/null 2>&1
query="GRANT ALL ON \`$database\`.* TO \`$dbuser\`@\`%\`
IDENTIFIED BY '$dbpass'"
mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" &> /dev/null
mysql -h $HOST -u $USER -p$PASSWORD -e "$query" > /dev/null 2>&1
query="GRANT ALL ON \`$database\`.* TO \`$dbuser\`@localhost
IDENTIFIED BY '$dbpass'"
mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" &> /dev/null
mysql -h $HOST -u $USER -p$PASSWORD -e "$query" > /dev/null 2>&1
query="SHOW GRANTS FOR \`$dbuser\`"
md5=$(mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query")
md5=$(mysql -h $HOST -u $USER -p$PASSWORD -e "$query")
md5=$(echo "$md5" |grep 'PASSWORD' |tr ' ' '\n' |tail -n1 |cut -f 2 -d \')
}
@ -131,7 +131,7 @@ add_pgsql_database() {
fi
query='SELECT VERSION()'
psql -h $HOST -U $USER -p $PORT -c "$query" &> /dev/null
psql -h $HOST -U $USER -c "$query" > /dev/null 2>&1
if [ '0' -ne "$?" ]; then
echo "Error: Connection failed"
log_event "$E_DB" "$EVENT"
@ -139,7 +139,7 @@ add_pgsql_database() {
fi
query="CREATE ROLE $dbuser WITH LOGIN PASSWORD '$dbpass'"
psql -h $HOST -U $USER -p $PORT -c "$query" &> /dev/null
psql -h $HOST -U $USER -c "$query" > /dev/null 2>&1
query="CREATE DATABASE $database OWNER $dbuser"
if [ "$TPL" = 'template0' ]; then
@ -147,16 +147,16 @@ add_pgsql_database() {
else
query="$query TEMPLATE $TPL"
fi
psql -h $HOST -U $USER -p $PORT -c "$query" &> /dev/null
psql -h $HOST -U $USER -c "$query" > /dev/null 2>&1
query="GRANT ALL PRIVILEGES ON DATABASE $database TO $dbuser"
psql -h $HOST -U $USER -p $PORT -c "$query" &> /dev/null
psql -h $HOST -U $USER -c "$query" > /dev/null 2>&1
query="GRANT CONNECT ON DATABASE template1 to $dbuser"
psql -h $HOST -U $USER -p $PORT -c "$query" &> /dev/null
psql -h $HOST -U $USER -c "$query" > /dev/null 2>&1
query="SELECT rolpassword FROM pg_authid WHERE rolname='$dbuser';"
md5=$(psql -h $HOST -U $USER -p $PORT -c "$query"|grep md5|cut -f 2 -d \ )
md5=$(psql -h $HOST -U $USER -c "$query"|grep md5|cut -f 2 -d \ )
}
# Check if database host do not exist in config
@ -174,7 +174,7 @@ is_dbhost_new() {
# Check MySQL database host
is_mysql_host_alive() {
query='SELECT VERSION()'
mysql -h $host -u $dbuser -p$dbpass -P $port -e "$query" &> /dev/null
mysql -h $host -u $dbuser -p$dbpass -e "$query" > /dev/null 2>&1
if [ '0' -ne "$?" ]; then
echo "Error: Connection to $host failed"
log_event "$E_DB" "$EVENT"
@ -185,7 +185,7 @@ is_mysql_host_alive() {
# Check PostgreSQL database host
is_pgsql_host_alive() {
export PGPASSWORD="$dbpass"
psql -h $host -U $dbuser -p $port -c "SELECT VERSION()" &> /dev/null
psql -h $host -U $dbuser -c "SELECT VERSION()" > /dev/null 2>&1
if [ '0' -ne "$?" ]; then
echo "Error: Connection to $host failed"
log_event "$E_DB" "$EVENT"
@ -203,14 +203,14 @@ get_database_values() {
change_mysql_password() {
host_str=$(grep "HOST='$HOST'" $VESTA/conf/mysql.conf)
eval $host_str
if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ] || [ -z $PORT ]; then
if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ]; then
echo "Error: mysql config parsing failed"
log_event "$E_PARSING" "$EVENT"
exit $E_PARSING
fi
query='SELECT VERSION()'
mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" &> /dev/null
mysql -h $HOST -u $USER -p$PASSWORD -e "$query" > /dev/null 2>&1
if [ '0' -ne "$?" ]; then
echo "Error: Connection failed"
log_event "$E_DB $EVENT"
@ -219,14 +219,14 @@ change_mysql_password() {
query="GRANT ALL ON \`$database\`.* TO \`$DBUSER\`@\`%\`
IDENTIFIED BY '$dbpass'"
mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" &> /dev/null
mysql -h $HOST -u $USER -p$PASSWORD -e "$query" > /dev/null 2>&1
query="GRANT ALL ON \`$database\`.* TO \`$DBUSER\`@localhost
IDENTIFIED BY '$dbpass'"
mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" &> /dev/null
mysql -h $HOST -u $USER -p$PASSWORD -e "$query" > /dev/null 2>&1
query="SHOW GRANTS FOR '$DBUSER'"
md5=$(mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query")
md5=$(mysql -h $HOST -u $USER -p$PASSWORD -e "$query")
md5=$(echo "$md5" |grep 'PASSWORD' |tr ' ' '\n' |tail -n1 |cut -f 2 -d \')
}
@ -242,7 +242,7 @@ change_pgsql_password() {
fi
query='SELECT VERSION()'
psql -h $HOST -U $USER -p $PORT -c "$query" &> /dev/null
psql -h $HOST -U $USER -c "$query" > /dev/null 2>&1
if [ '0' -ne "$?" ]; then
echo "Error: Connection failed"
log_event "$E_DB" "$EVENT"
@ -250,24 +250,24 @@ change_pgsql_password() {
fi
query="ALTER ROLE $DBUSER WITH LOGIN PASSWORD '$dbpass'"
psql -h $HOST -U $USER -p $PORT -c "$query" &> /dev/null
psql -h $HOST -U $USER -c "$query" > /dev/null 2>&1
query="SELECT rolpassword FROM pg_authid WHERE rolname='$DBUSER';"
md5=$(psql -h $HOST -U $USER -p $PORT -c "$query"|grep md5|cut -f 2 -d \ )
md5=$(psql -h $HOST -U $USER -c "$query"|grep md5|cut -f 2 -d \ )
}
# Delete MySQL database
delete_mysql_database() {
host_str=$(grep "HOST='$HOST'" $VESTA/conf/mysql.conf)
eval $host_str
if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ] || [ -z $PORT ]; then
if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ]; then
echo "Error: mysql config parsing failed"
log_event "$E_PARSING" "$EVENT"
exit $E_PARSING
fi
query='SELECT VERSION()'
mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" &> /dev/null
mysql -h $HOST -u $USER -p$PASSWORD -e "$query" > /dev/null 2>&1
if [ '0' -ne "$?" ]; then
echo "Error: Connection failed"
log_event "$E_DB $EVENT"
@ -275,20 +275,20 @@ delete_mysql_database() {
fi
query="DROP DATABASE \`$database\`"
mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" &> /dev/null
mysql -h $HOST -u $USER -p$PASSWORD -e "$query" > /dev/null 2>&1
query="REVOKE ALL ON \`$database\`.* FROM \`$DBUSER\`@\`%\`"
mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" &> /dev/null
mysql -h $HOST -u $USER -p$PASSWORD -e "$query" > /dev/null 2>&1
query="REVOKE ALL ON \`$database\`.* FROM \`$DBUSER\`@localhost"
mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" &> /dev/null
mysql -h $HOST -u $USER -p$PASSWORD -e "$query" > /dev/null 2>&1
if [ "$(grep "DBUSER='$DBUSER'" $USER_DATA/db.conf |wc -l)" -lt 2 ]; then
query="DROP USER '$DBUSER'@'%'"
mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" &> /dev/null
mysql -h $HOST -u $USER -p$PASSWORD -e "$query" > /dev/null 2>&1
query="DROP USER '$DBUSER'@'localhost'"
mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" &> /dev/null
mysql -h $HOST -u $USER -p$PASSWORD -e "$query" > /dev/null 2>&1
fi
}
@ -304,7 +304,7 @@ delete_pgsql_database() {
fi
query='SELECT VERSION()'
psql -h $HOST -U $USER -p $PORT -c "$query" &> /dev/null
psql -h $HOST -U $USER -c "$query" > /dev/null 2>&1
if [ '0' -ne "$?" ]; then
echo "Error: Connection failed"
log_event "$E_DB" "$EVENT"
@ -312,16 +312,16 @@ delete_pgsql_database() {
fi
query="REVOKE ALL PRIVILEGES ON DATABASE $database FROM $DBUSER"
psql -h $HOST -U $USER -p $PORT -c "$query" &> /dev/null
psql -h $HOST -U $USER -c "$query" > /dev/null 2>&1
query="DROP DATABASE $database"
psql -h $HOST -U $USER -p $PORT -c "$query" &> /dev/null
psql -h $HOST -U $USER -c "$query" > /dev/null 2>&1
if [ "$(grep "DBUSER='$DBUSER'" $USER_DATA/db.conf |wc -l)" -lt 2 ]; then
query="REVOKE CONNECT ON DATABASE template1 FROM $db_user"
psql -h $HOST -U $USER -p $PORT -c "$query" &> /dev/null
psql -h $HOST -U $USER -c "$query" > /dev/null 2>&1
query="DROP ROLE $db_user"
psql -h $HOST -U $USER -p $PORT -c "$query" &> /dev/null
psql -h $HOST -U $USER -c "$query" > /dev/null 2>&1
fi
}
@ -329,39 +329,41 @@ delete_pgsql_database() {
dump_mysql_database() {
host_str=$(grep "HOST='$HOST'" $VESTA/conf/mysql.conf)
eval $host_str
if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ] || [ -z $PORT ]; then
if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ]; then
rm -rf $tmpdir
echo "Can't parse mysql config" | $mail -s "$subj" $email
echo "Can't parse mysql config" | $send_mail -s "$subj" $email
echo "Error: mysql config parsing failed"
log_event "$E_PARSING" "$EVENT"
exit $E_PARSING
fi
query='SELECT VERSION()'
mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" &> /dev/null
mysql -h $HOST -u $USER -p$PASSWORD -e "$query" > /dev/null 2>&1
if [ '0' -ne "$?" ]; then
rm -rf $tmpdir
echo "Can't connect to mysql server $HOST" | $mail -s "$subj" $email
echo "Can't connect to mysql server $HOST" |\
$send_mail -s "$subj" $email
echo "Error: Connection failed"
log_event "$E_DB $EVENT"
exit $E_DB
fi
mysqldump -h $HOST -u $USER -p$PASSWORD -P$PORT -r $dump $database
mysqldump -h $HOST -u $USER -p$PASSWORD -r $dump $database
if [ '0' -ne "$?" ]; then
rm -rf $tmpdir
echo "Can't dump mysql database $database" | $mail -s "$subj" $email
echo "Can't dump mysql database $database" |\
$send_mail -s "$subj" $email
echo "Error: dump $database failed"
log_event "$E_DB $EVENT"
exit $E_DB
fi
query="SHOW GRANTS FOR '$DBUSER'@'localhost'"
mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" |\
mysql -h $HOST -u $USER -p$PASSWORD -e "$query" |\
grep -v "Grants for" > $grants
query="SHOW GRANTS FOR '$DBUSER'@'%'"
mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" |\
mysql -h $HOST -u $USER -p$PASSWORD -e "$query" |\
grep -v "Grants for" > $grants
}
@ -372,35 +374,38 @@ dump_pgsql_database() {
export PGPASSWORD="$PASSWORD"
if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ] || [ -z $TPL ]; then
rm -rf $tmpdir
echo "Can't parse pgsql config" | $mail -s "$subj" $email
echo "Can't parse pgsql config" |\
$send_mail -s "$subj" $email
echo "Error: postgresql config parsing failed"
log_event "$E_PARSING" "$EVENT"
exit $E_PARSING
fi
query='SELECT VERSION()'
psql -h $HOST -U $USER -p $PORT -c "$query" &> /dev/null
psql -h $HOST -U $USER -c "$query" > /dev/null 2>&1
if [ '0' -ne "$?" ]; then
rm -rf $tmpdir
echo "Can't connect to pgsql server $HOST" | $mail -s "$subj" $email
echo "Can't connect to pgsql server $HOST" |\
$send_mail -s "$subj" $email
echo "Error: Connection failed"
log_event "$E_DB" "$EVENT"
exit $E_DB
fi
pg_dump -h $HOST -U $USER -p $PORT -c -d -O -x -i -f $dump $database \
pg_dump -h $HOST -U $USER -c -d -O -x -i -f $dump $database \
2> /dev/null
if [ '0' -ne "$?" ]; then
rm -rf $tmpdir
echo "Can't dump pgsql database $database" | $mail -s "$subj" $email
echo "Can't dump pgsql database $database" |\
$send_mail -s "$subj" $email
echo "Error: dump $database failed"
log_event "$E_DB $EVENT"
exit $E_DB
fi
query="SELECT rolpassword FROM pg_authid WHERE rolname='$DBUSER';"
md5=$(psql -h $HOST -U $USER -p $PORT -c "$query"|head -n1|cut -f 2 -d \ )
md5=$(psql -h $HOST -U $USER -c "$query" | head -n1 | cut -f 2 -d \ )
pw_str="UPDATE pg_authid SET rolpassword='$md5' WHERE rolname='$DBUSER';"
gr_str="GRANT ALL PRIVILEGES ON DATABASE $database to '$DBUSER'"
echo -e "$pw_str\n$gr_str" >> $grants
@ -421,14 +426,14 @@ is_dbhost_free() {
suspend_mysql_database() {
host_str=$(grep "HOST='$HOST'" $VESTA/conf/mysql.conf)
eval $host_str
if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ] || [ -z $PORT ]; then
if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ]; then
echo "Error: mysql config parsing failed"
log_event "$E_PARSING" "$EVENT"
exit $E_PARSING
fi
query='SELECT VERSION()'
mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" &> /dev/null
mysql -h $HOST -u $USER -p$PASSWORD -e "$query" > /dev/null 2>&1
if [ '0' -ne "$?" ]; then
echo "Error: Connection failed"
log_event "$E_DB $EVENT"
@ -436,10 +441,10 @@ suspend_mysql_database() {
fi
query="REVOKE ALL ON \`$database\`.* FROM \`$DBUSER\`@\`%\`"
mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" &> /dev/null
mysql -h $HOST -u $USER -p$PASSWORD -e "$query" > /dev/null 2>&1
query="REVOKE ALL ON \`$database\`.* FROM \`$DBUSER\`@localhost"
mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" &> /dev/null
mysql -h $HOST -u $USER -p$PASSWORD -e "$query" > /dev/null 2>&1
}
# Suspend PostgreSQL database
@ -454,7 +459,7 @@ suspend_pgsql_database() {
fi
query='SELECT VERSION()'
psql -h $HOST -U $USER -p $PORT -c "$query" &> /dev/null
psql -h $HOST -U $USER -c "$query" > /dev/null 2>&1
if [ '0' -ne "$?" ]; then
echo "Error: Connection failed"
log_event "$E_DB" "$EVENT"
@ -462,21 +467,21 @@ suspend_pgsql_database() {
fi
query="REVOKE ALL PRIVILEGES ON $database FROM $DBUSER"
psql -h $HOST -U $USER -p $PORT -c "$query" &> /dev/null
psql -h $HOST -U $USER -c "$query" > /dev/null 2>&1
}
# Unsuspend MySQL database
unsuspend_mysql_database() {
host_str=$(grep "HOST='$HOST'" $VESTA/conf/mysql.conf)
eval $host_str
if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ] || [ -z $PORT ]; then
if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ]; then
echo "Error: mysql config parsing failed"
log_event "$E_PARSING" "$EVENT"
exit $E_PARSING
fi
query='SELECT VERSION()'
mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" &> /dev/null
mysql -h $HOST -u $USER -p$PASSWORD -e "$query" > /dev/null 2>&1
if [ '0' -ne "$?" ]; then
echo "Error: Connection failed"
log_event "$E_DB $EVENT"
@ -484,10 +489,10 @@ unsuspend_mysql_database() {
fi
query="GRANT ALL ON \`$database\`.* FROM \`$DBUSER\`@\`%\`"
mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" &> /dev/null
mysql -h $HOST -u $USER -p$PASSWORD -e "$query" > /dev/null 2>&1
query="GRANT ALL ON \`$database\`.* TO \`$DBUSER\`@localhost"
mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" &> /dev/null
mysql -h $HOST -u $USER -p$PASSWORD -e "$query" > /dev/null 2>&1
}
# Unsuspend PostgreSQL database
@ -502,7 +507,7 @@ unsuspend_pgsql_database() {
fi
query='SELECT VERSION()'
psql -h $HOST -U $USER -p $PORT -c "$query" &> /dev/null
psql -h $HOST -U $USER -c "$query" > /dev/null 2>&1
if [ '0' -ne "$?" ]; then
echo "Error: Connection failed"
log_event "$E_DB" "$EVENT"
@ -510,21 +515,21 @@ unsuspend_pgsql_database() {
fi
query="GRANT ALL PRIVILEGES ON DATABASE $database TO $DBUSER"
psql -h $HOST -U $USER -p $PORT -c "$query" &> /dev/null
psql -h $HOST -U $USER -c "$query" > /dev/null 2>&1
}
# Get MySQL disk usage
get_mysql_disk_usage() {
host_str=$(grep "HOST='$HOST'" $VESTA/conf/mysql.conf)
eval $host_str
if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ] || [ -z $PORT ]; then
if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ]; then
echo "Error: mysql config parsing failed"
log_event "$E_PARSING" "$EVENT"
exit $E_PARSING
fi
query='SELECT VERSION()'
mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" &> /dev/null
mysql -h $HOST -u $USER -p$PASSWORD -e "$query" > /dev/null 2>&1
if [ '0' -ne "$?" ]; then
echo "Error: Connection failed"
log_event "$E_DB $EVENT"
@ -533,7 +538,7 @@ get_mysql_disk_usage() {
query="SELECT SUM( data_length + index_length ) / 1024 / 1024 \"Size\"
FROM information_schema.TABLES WHERE table_schema='$database'"
usage=$(mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" |tail -n1)
usage=$(mysql -h $HOST -u $USER -p$PASSWORD -e "$query" |tail -n1)
if [ "$usage" == 'NULL' ] || [ "${usage:0:1}" -eq '0' ]; then
usage=1
fi
@ -553,7 +558,7 @@ get_pgsql_disk_usage() {
fi
query='SELECT VERSION()'
psql -h $HOST -U $USER -p $PORT -c "$query" &> /dev/null
psql -h $HOST -U $USER -c "$query" > /dev/null 2>&1
if [ '0' -ne "$?" ]; then
echo "Error: Connection failed"
log_event "$E_DB" "$EVENT"
@ -561,7 +566,7 @@ get_pgsql_disk_usage() {
fi
query="SELECT pg_database_size('$database');"
usage=$(psql -h $HOST -U $USER -p $PORT -c "$query")
usage=$(psql -h $HOST -U $USER -c "$query")
usage=$(echo "$usage" | grep -v "-" | grep -v 'row' | sed -e "/^$/d")
usage=$(echo "$usage" | grep -v "pg_database_size" | awk '{print $1}')
if [ -z "$usage" ]; then
@ -573,73 +578,3 @@ get_pgsql_disk_usage() {
fi
}
# Rebuild MySQL database
rebuild_mysql_database() {
host_str=$(grep "HOST='$HOST'" $VESTA/conf/mysql.conf)
eval $host_str
if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ] || [ -z $PORT ]; then
echo "Error: mysql config parsing failed"
log_event "$E_PARSING" "$EVENT"
exit $E_PARSING
fi
query='SELECT VERSION()'
mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" &> /dev/null
if [ '0' -ne "$?" ]; then
echo "Error: Connection failed"
log_event "$E_DB $EVENT"
exit $E_DB
fi
query="CREATE DATABASE \`$database\` CHARACTER SET $CHARSET"
mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" &> /dev/null
query="GRANT ALL ON \`$database\`.* TO \`$DBUSER\`@\`%\`"
mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" &> /dev/null
query="GRANT ALL ON \`$database\`.* TO \`$DBUSER\`@localhost"
mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" &> /dev/null
query="UPDATE mysql.user SET Password='$MD5' WHERE User='$DBUSER';"
mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" &> /dev/null
}
# Rebuild PostgreSQL database
rebuild_pgsql_database() {
host_str=$(grep "HOST='$HOST'" $VESTA/conf/pgsql.conf)
eval $host_str
export PGPASSWORD="$PASSWORD"
if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ] || [ -z $TPL ]; then
echo "Error: postgresql config parsing failed"
log_event "$E_PARSING" "$EVENT"
exit $E_PARSING
fi
query='SELECT VERSION()'
psql -h $HOST -U $USER -p $PORT -c "$query" &> /dev/null
if [ '0' -ne "$?" ]; then
echo "Error: Connection failed"
log_event "$E_DB" "$EVENT"
exit $E_DB
fi
query="CREATE ROLE $DBUSER"
psql -h $HOST -U $USER -p $PORT -c "$query" &> /dev/null
query="UPDATE pg_authid SET rolpassword='$MD5' WHERE rolname='$DBUSER'"
psql -h $HOST -U $USER -p $PORT -c "$query" &> /dev/null
query="CREATE DATABASE $database OWNER $DBUSER"
if [ "$TPL" = 'template0' ]; then
query="$query ENCODING '$CHARSET' TEMPLATE $TPL"
else
query="$query TEMPLATE $TPL"
fi
psql -h $HOST -U $USER -p $PORT -c "$query" &> /dev/null
query="GRANT ALL PRIVILEGES ON DATABASE $database TO $DBUSER"
psql -h $HOST -U $USER -p $PORT -c "$query" &> /dev/null
query="GRANT CONNECT ON DATABASE template1 to $dbuser"
psql -h $HOST -U $USER -p $PORT -c "$query" &> /dev/null
}

View file

@ -1,8 +1,9 @@
# Validationg ip address
is_ip_valid() {
check_nat=$(grep -H "^NAT='$ip'" $VESTA/data/ips/* 2>/dev/null)
if [ ! -e "$VESTA/data/ips/$ip" ] && [ -z "$check_nat" ] ; then
echo "Error: IP $ip not exist"
userip=${1-$ip}
check_nat=$(grep -H "^NAT='$userip'" $VESTA/data/ips/* 2>/dev/null)
if [ ! -e "$VESTA/data/ips/$userip" ] && [ -z "$check_nat" ] ; then
echo "Error: IP $userip not exist"
log_event "$E_NOTEXIST" "$EVENT"
exit $E_NOTEXIST
fi
@ -10,10 +11,11 @@ is_ip_valid() {
# Check if ip availabile for user
is_ip_avalable() {
if [ -e "$VESTA/data/ips/$ip" ]; then
ip_data=$(cat $VESTA/data/ips/$ip)
userip=${1-$ip}
if [ -e "$VESTA/data/ips/$userip" ]; then
ip_data=$(cat $VESTA/data/ips/$userip)
else
nated_ip=$(grep -H "^NAT='$ip'" $VESTA/data/ips/*)
nated_ip=$(grep -H "^NAT='$userip'" $VESTA/data/ips/* 2>/dev/null)
nated_ip=$(echo "$nated_ip" | cut -f 1 -d : | cut -f 7 -d /)
ip_data=$(cat $VESTA/data/ips/$nated_ip)
fi
@ -24,7 +26,7 @@ is_ip_avalable() {
shared='yes'
fi
if [ "$owner" != "$user" ] && [ "$shared" != 'yes' ]; then
echo "Error: User $user don't have permission to use $ip"
echo "Error: User $user don't have permission to use $userip"
log_event "$E_FORBIDEN" "$EVENT"
exit $E_FORBIDEN
fi
@ -196,6 +198,7 @@ create_ip_startup() {
echo -e "$ip_data" > $iconf-$iface
}
# Get real ip address
get_real_ip() {
if [ -e "$VESTA/data/ips/$1" ]; then
echo $1
@ -203,4 +206,24 @@ get_real_ip() {
nated_ip=$(grep -H "^NAT='$1'" $VESTA/data/ips/*)
echo "$nated_ip" | cut -f 1 -d : | cut -f 7 -d /
fi
}
}
# Get user ip
get_user_ip(){
ip=$(grep -H "OWNER='$1'" $VESTA/data/ips/* 2>/dev/null | head -n1)
ip=$(echo "$ip" | cut -f 7 -d / | cut -f 1 -d :)
if [ -z "$ip" ]; then
admin_ips=$(grep -H "OWNER='admin'" $VESTA/data/ips/* 2>/dev/null)
admin_ips=$(echo "$admin_ips" | cut -f 7 -d / | cut -f 1 -d :)
for admin_ip in $admin_ips; do
if [ -z "$ip" ]; then
shared=$(grep "STATUS='shared'" $VESTA/data/ips/$admin_ip)
if [ ! -z "$shared" ]; then
ip=$admin_ip
fi
fi
done
fi
echo "$ip"
}

View file

@ -170,8 +170,8 @@ is_backup_scheduled() {
fi
}
# Check if object is free and can be created
is_object_free() {
# Check if object is new
is_object_new() {
if [ $2 = 'USER' ]; then
if [ -d "$USER_DATA" ]; then
object="OK"
@ -588,7 +588,7 @@ validate_format_username() {
validate_format_domain() {
exclude="[!|@|#|$|^|&|*|(|)|+|=|{|}|:|,|<|>|?|_|/|\|\"|'|;|%|\`| ]"
if [[ "$1" =~ $exclude ]] || [[ "$1" =~ "^[0-9]+$" ]]; then
echo "Error: domain $1 is not valid"
echo "Error: $2 $1 is not valid"
log_event "$E_INVALID" "$EVENT"
exit $E_INVALID
fi
@ -687,10 +687,10 @@ validate_format_dvalue() {
validate_format_ip "$1"
fi
if [ "$rtype" = 'NS' ]; then
validate_format_domain "$1"
validate_format_domain "$1" 'ns_record'
fi
if [ "$rtype" = 'MX' ]; then
validate_format_domain "$1"
validate_format_domain "$1" 'mx_record'
validate_format_int "$priority"
fi
@ -730,7 +730,7 @@ validate_format(){
antispam) validate_format_boolean "$arg" 'antispam' ;;
antivirus) validate_format_boolean "$arg" 'antivirus' ;;
autoreply) validate_format_autoreply "$arg" ;;
backup) validate_format_date "$arg" ;;
backup) validate_format_domain "$arg" 'backup' ;;
charset) validate_format_name "$arg" "$arg_name" ;;
charsets) validate_format_common "$arg" 'charsets' ;;
database) validate_format_database "$arg" 'database';;
@ -739,8 +739,8 @@ validate_format(){
dbuser) validate_format_database "$arg" 'db_user';;
dkim) validate_format_boolean "$arg" 'dkim' ;;
dkim_size) validate_format_key_size "$arg" ;;
domain) validate_format_domain "$arg" ;;
dom_alias) validate_format_domain_alias "$arg" ;;
domain) validate_format_domain "$arg" 'domain';;
dom_alias) validate_format_domain_alias "$arg" 'alias';;
dvalue) validate_format_dvalue "$arg";;
email) validate_format_email "$arg" ;;
exp) validate_format_date "$arg" ;;
@ -749,12 +749,12 @@ validate_format(){
forward) validate_format_email "$arg" ;;
ftp_password) validate_format_password "$arg" ;;
ftp_user) validate_format_username "$arg" "$arg_name" ;;
host) validate_format_domain "$arg" "$arg_name" ;;
host) validate_format_domain "$arg" "$arg_name" 'host';;
hour) validate_format_mhdmw "$arg" $arg_name ;;
id) validate_format_int "$arg" ;;
interface) validate_format_interface "$arg" ;;
ip) validate_format_ip "$arg" ;;
ip_name) validate_format_domain "$arg" ;;
ip_name) validate_format_domain "$arg" 'domain';;
ip_status) validate_format_ip_status "$arg" ;;
job) validate_format_int "$arg" ;;
key) validate_format_username "$arg" "$arg_name" ;;
@ -765,10 +765,10 @@ validate_format(){
min) validate_format_mhdmw "$arg" $arg_name ;;
month) validate_format_mhdmw "$arg" $arg_name ;;
nat_ip) validate_format_ip "$arg" ;;
ns1) validate_format_domain "$arg" ;;
ns2) validate_format_domain "$arg" ;;
ns3) validate_format_domain "$arg" ;;
ns4) validate_format_domain "$arg" ;;
ns1) validate_format_domain "$arg" 'name_server';;
ns2) validate_format_domain "$arg" 'name_server';;
ns3) validate_format_domain "$arg" 'name_server';;
ns4) validate_format_domain "$arg" 'name_server';;
package) validate_format_name "$arg" "$arg_name" ;;
password) validate_format_password "$arg" ;;
port) validate_format_int "$arg" ;;
@ -777,7 +777,7 @@ validate_format(){
record) validate_format_common "$arg" 'record';;
rtype) validate_format_dns_type "$arg" ;;
shell) validate_format_shell "$arg" ;;
soa) validate_format_domain "$arg" ;;
soa) validate_format_domain "$arg" 'soa_record';;
stats_pass) validate_format_password "$arg" ;;
stats_user) validate_format_username "$arg" "$arg_name" ;;
template) validate_format_name "$arg" "$arg_name" ;;

484
func/rebuild.sh Normal file
View file

@ -0,0 +1,484 @@
# WEB domain rebuild
rebuild_web_domain_conf() {
# Get domain values
domain_idn=$(idn -t --quiet -a "$domain")
get_domain_values 'web'
ip=$(get_real_ip $IP)
# Preparing domain values for the template substitution
upd_web_domain_values
# Rebuilding directories
mkdir -p $HOMEDIR/$user/web/$domain \
$HOMEDIR/$user/web/$domain/public_html \
$HOMEDIR/$user/web/$domain/public_shtml \
$HOMEDIR/$user/web/$domain/document_errors \
$HOMEDIR/$user/web/$domain/cgi-bin \
$HOMEDIR/$user/web/$domain/private \
$HOMEDIR/$user/web/$domain/stats \
$HOMEDIR/$user/web/$domain/logs
# Create domain logs
touch /var/log/httpd/domains/$domain.bytes \
/var/log/httpd/domains/$domain.log \
/var/log/httpd/domains/$domain.error.log
# Create symlinks
cd $HOMEDIR/$user/web/$domain/logs/
ln -f -s /var/log/httpd/domains/$domain.log .
ln -f -s /var/log/httpd/domains/$domain.error.log .
cd - > /dev/null
# Propagate html skeleton
if [ ! -e "$WEBTPL/skel/document_errors/" ]; then
cp -r $WEBTPL/skel/document_errors/ $HOMEDIR/$user/web/$domain/
fi
# Set folder permissions
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 551 $HOMEDIR/$user/web/$domain/stats
chmod 551 $HOMEDIR/$user/web/$domain/logs
chmod 640 /var/log/httpd/domains/$domain.*
# Set ownership
chown $user:$user $HOMEDIR/$user/web/$domain
chown $user:$user $HOMEDIR/$user/web/$domain/private
chown $user:$user $HOMEDIR/$user/web/$domain/cgi-bin
chown $user:$user $HOMEDIR/$user/web/$domain/public_html
chown $user:$user $HOMEDIR/$user/web/$domain/public_shtml
chown -R $user:$user $HOMEDIR/$user/web/$domain/document_errors
chown root:$user /var/log/httpd/domains/$domain.*
# Adding tmp_httpd.conf
tpl_file="$WEBTPL/apache_$TPL.tpl"
conf="$HOMEDIR/$user/conf/web/tmp_httpd.conf"
add_web_config
chown root:apache $conf
chmod 640 $conf
# Running template trigger
if [ -x $WEBTPL/apache_$TPL.sh ]; then
$WEBTPL/apache_$TPL.sh $user $domain $ip $HOMEDIR $docroot
fi
# Checking aliases
if [ ! -z "$ALIAS" ]; then
aliases=$(echo "$ALIAS"|tr ',' '\n'| wc -l)
user_aliases=$((user_aliases + aliases))
fi
# Checking stats
if [ ! -z "$STATS" ]; then
cat $WEBTPL/$STATS.tpl |\
sed -e "s/%ip%/$ip/g" \
-e "s/%web_port%/$WEB_PORT/g" \
-e "s/%web_ssl_port%/$WEB_SSL_PORT/g" \
-e "s/%proxy_port%/$PROXY_PORT/g" \
-e "s/%proxy_ssl_port%/$PROXY_SSL_PORT/g" \
-e "s/%domain_idn%/$domain_idn/g" \
-e "s/%domain%/$domain/g" \
-e "s/%user%/$user/g" \
-e "s/%home%/${HOMEDIR////\/}/g" \
-e "s/%alias%/${aliases//,/ }/g" \
-e "s/%alias_idn%/${aliases_idn//,/ }/g" \
> $HOMEDIR/$user/conf/web/$STATS.$domain.conf
if [ "$STATS" == 'awstats' ]; then
if [ ! -e "/etc/awstats/$STATS.$domain_idn.conf" ]; then
ln -s $HOMEDIR/$user/conf/web/$STATS.$domain.conf \
/etc/awstats/$STATS.$domain_idn.conf
fi
fi
webstats="$BIN/v-update-web-domain-stat $user $domain"
check_webstats=$(grep "$webstats" $VESTA/data/queue/webstats.pipe)
if [ -z "$check_webstats" ]; then
echo "$webstats" >> $VESTA/data/queue/webstats.pipe
fi
if [ ! -z "$STATS_USER" ]; then
stats_dir="$HOMEDIR/$user/web/$domain/stats"
# Adding htaccess file
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
# Generating htaccess user and password
echo "$STATS_USER:$STATS_CRYPT" > $stats_dir/.htpasswd
fi
fi
# Checking ssl
if [ "$SSL" = 'yes' ]; then
# Adding domain to the shttpd.conf
conf="$HOMEDIR/$user/conf/web/tmp_shttpd.conf"
tpl_file="$WEBTPL/apache_$TPL.stpl"
add_web_config
chown root:apache $conf
chmod 640 $conf
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.pem \
$HOMEDIR/$user/conf/web/ssl.$domain.pem
if [ -e "$USER_DATA/ssl/$domain.ca" ]; then
cp -f $USER_DATA/ssl/$domain.ca \
$HOMEDIR/$user/conf/web/ssl.$domain.ca
fi
# Running template trigger
if [ -x $WEBTPL/apache_$TPL.sh ]; then
$WEBTPL/apache_$TPL.sh $user $domain $ip $HOMEDIR $sdocroot
fi
user_ssl=$((user_ssl + 1))
ssl_change='yes'
fi
# Checking nginx
if [ ! -z "$NGINX" ]; then
tpl_file="$WEBTPL/nginx_$NGINX.tpl"
conf="$HOMEDIR/$user/conf/web/tmp_nginx.conf"
add_web_config
chown root:nginx $conf
chmod 640 $conf
if [ "$SSL" = 'yes' ]; then
tpl_file="$WEBTPL/nginx_$NGINX.stpl"
conf="$HOMEDIR/$user/conf/web/tmp_snginx.conf"
add_web_config
chown root:nginx $conf
chmod 640 $conf
fi
ngix_change='yes'
fi
if [ "$SUSPENDED" = 'yes' ]; then
suspended_web=$((suspended_web + 1))
fi
user_domains=$((user_domains + 1))
# Checking ftp
if [ ! -z "$FTP_USER" ]; then
if [ -z "$(grep ^$FTP_USER: /etc/passwd)" ]; then
/usr/sbin/adduser -o -u $(id -u $user) -g $user -s /sbin/nologin \
-M -d "$HOMEDIR/$user/web/$domain" $FTP_USER > /dev/null 2>&1
shadow='/etc/shadow'
shdw=$(grep "^$FTP_USER:" $shadow)
shdw3=$(echo "$shdw" | cut -f3 -d :)
shdw4=$(echo "$shdw" | cut -f4 -d :)
shdw5=$(echo "$shdw" | cut -f5 -d :)
shdw6=$(echo "$shdw" | cut -f6 -d :)
shdw7=$(echo "$shdw" | cut -f7 -d :)
shdw8=$(echo "$shdw" | cut -f8 -d :)
shdw9=$(echo "$shdw" | cut -f9 -d :)
chmod u+w $shadow
sed -i "/^$FTP_USER:*/d" $shadow
shdw_str="$FTP_USER:$FTP_MD5:$shdw3:$shdw4:$shdw5:$shdw6"
shdw_str="$shdw_str:$shdw7:$shdw8:$shdw9"
echo "$shdw_str" >> $shadow
chmod u-w $shadow
fi
fi
}
# DNS domain rebuild
rebuild_dns_domain_conf() {
# Get domain values
get_domain_values 'dns'
domain_idn=$(idn -t --quiet -a "$domain")
# Checking zone file
if [ ! -e "$USER_DATA/dns/$domain.conf" ]; then
cat $DNSTPL/$TPL.tpl |\
sed -e "s/%ip%/$IP/g" \
-e "s/%domain_idn%/$domain_idn/g" \
-e "s/%domain%/$domain/g" \
-e "s/%ns1%/$ns1/g" \
-e "s/%ns2%/$ns2/g" \
-e "s/%ns3%/$ns3/g" \
-e "s/%ns4%/$ns4/g" \
-e "s/%time%/$TIME/g" \
-e "s/%date%/$DATE/g" > $USER_DATA/dns/$domain.conf
fi
# Sorting records
sort_dns_records
# Updating zone
update_domain_zone
# Set file permissions
chmod 640 $HOMEDIR/$user/conf/dns/$domain.db
chown root:named $HOMEDIR/$user/conf/dns/$domain.db
# Bind config check
nconf='/etc/named.conf'
if [ "$SUSPENDED" = 'yes' ]; then
rm_string=$(grep -n /etc/namedb/$domain.db $nconf | cut -d : -f 1)
if [ ! -z "$rm_string" ]; then
sed -i "$rm_string d" $nconf
fi
suspended_dns=$((suspended_dns + 1))
else
if [ -z "$(grep /$domain.db $nconf)" ]; then
named="zone \"$domain_idn\" {type master; file"
named="$named \"$HOMEDIR/$user/conf/dns/$domain.db\";};"
echo "$named" >> /etc/named.conf
fi
fi
user_domains=$((user_domains + 1))
records=$(wc -l $USER_DATA/dns/$domain.conf | cut -f 1 -d ' ')
user_records=$((user_records + records))
update_object_value 'dns' 'DOMAIN' "$domain" '$RECORDS' "$records"
}
# MAIL domain rebuild
rebuild_mail_domain_conf() {
# Get domain values
get_domain_values 'mail'
# Rebuilding config structure
rm -f /etc/exim/domains/$domain
mkdir -p $HOMEDIR/$user/conf/mail/$domain
ln -s $HOMEDIR/$user/conf/mail/$domain /etc/exim/domains/
rm -f $HOMEDIR/$user/conf/mail/$domain/aliases
rm -f $HOMEDIR/$user/conf/mail/$domain/protection
rm -f $HOMEDIR/$user/conf/mail/$domain/passwd
touch $HOMEDIR/$user/conf/mail/$domain/aliases
touch $HOMEDIR/$user/conf/mail/$domain/protection
touch $HOMEDIR/$user/conf/mail/$domain/passwd
chown -R dovecot:mail $HOMEDIR/$user/conf/mail/$domain
chown -R dovecot:mail /etc/exim/domains/$domain
chmod 770 $HOMEDIR/$user/conf/mail/$domain
chmod 660 $HOMEDIR/$user/conf/mail/$domain/*
chmod 770 /etc/exim/domains/$domain
# Adding antispam protection
if [ "$ANTISPAM" = 'yes' ]; then
echo 'antispam' >> $HOMEDIR/$user/conf/mail/$domain/protection
fi
# Adding antivirus protection
if [ "$ANTIVIRUS" = 'yes' ]; then
echo 'antivirus' >> $HOMEDIR/$user/conf/mail/$domain/protection
fi
# Adding dkim
if [ "$DKIM" = 'yes' ]; then
U_MAIL_DKMI=$((U_MAIL_DKMI + 1))
pem="$USER_DATA/mail/$domain.pem"
pub="$USER_DATA/mail/$domain.pub"
openssl genrsa -out $pem 512 &>/dev/null
openssl rsa -pubout -in $pem -out $pub &>/dev/null
chmod 660 $USER_DATA/mail/$domain.*
cp $pem $HOMEDIR/$user/conf/mail/$domain/dkim.pem
chown root:mail $HOMEDIR/$user/conf/mail/$domain/dkim.pem
chmod 660 $HOMEDIR/$user/conf/mail/$domain/dkim.pem
# Deleting old dkim records
records=$($BIN/v-list-dns-domain-records $user $domain plain)
dkim_records=$(echo "$records" |grep -w '_domainkey'|cut -f 1 -d ' ')
for id in $dkim_records; do
$BIN/v-delete-dns-domain-record $user $domain $id
done
# Adding dkim dns records
check_dns_domain=$(is_object_valid 'dns' 'DOMAIN' "$domain")
if [ "$?" -eq 0 ]; then
p=$(cat $pub|grep -v ' KEY---'|tr -d '\n')
record='_domainkey'
policy="\"t=y; o=~;\""
$BIN/v-add-dns-domain-record $user $domain $record TXT "$policy"
record='mail._domainkey'
slct="\"k=rsa\; p=$p\""
$BIN/v-add-dns-domain-record $user $domain $record TXT "$slct"
fi
fi
# Removing symbolic link
if [ "$SUSPENDED" = 'yes' ]; then
SUSPENDED_MAIL=$((SUSPENDED_MAIL +1))
rm -f /etc/exim/domains/$domain
fi
if [ ! -e $HOMEDIR/$user/mail/$domain ]; then
mkdir $HOMEDIR/$user/mail/$domain
fi
chown $user:mail $HOMEDIR/$user/mail/$domain
chmod 770 $HOMEDIR/$user/mail/$domain
dom_aliases=$HOMEDIR/$user/conf/mail/$domain/aliases
if [ ! -z "$CATCHALL" ]; then
echo "*@$domain:$CATCHALL" >> $dom_aliases
fi
# Rebuild domain accounts
accs=0
dom_diks=0
if [ -e "$USER_DATA/mail/$domain.conf" ]; then
accounts=$(search_objects "mail/$domain" 'SUSPENDED' "no" 'ACCOUNT')
else
accounts=''
fi
for account in $accounts; do
(( ++accs))
dom_diks=$((dom_diks + U_DISK))
object=$(grep "ACCOUNT='$account'" $USER_DATA/mail/$domain.conf)
eval "$object"
if [ "$SUSPENDED" = 'yes' ]; then
MD5='SUSPENDED'
fi
str="$account:$MD5:$user:mail::$HOMEDIR/$user:$QUOTA"
echo $str >> $HOMEDIR/$user/conf/mail/$domain/passwd
for malias in ${ALIAS//,/ }; do
echo "$malias@$domain:$account@$domain" >> $dom_aliases
done
if [ ! -z "$FWD" ]; then
echo "$account@$domain:$FWD" >> $dom_aliases
fi
done
update_object_value 'mail' 'DOMAIN' "$domain" '$ACCOUNTS' "$accs"
update_object_value 'mail' 'DOMAIN' "$domain" '$U_DISK' "$dom_diks"
U_MAIL_ACCOUNTS=$((U_MAIL_ACCOUNTS + accs))
U_DISK_MAIL=$((U_DISK_MAIL + dom_diks))
U_MAIL_DOMAINS=$((U_MAIL_DOMAINS + 1))
}
# Rebuild MySQL
rebuild_mysql_database() {
host_str=$(grep "HOST='$HOST'" $VESTA/conf/mysql.conf)
eval $host_str
if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ]; then
echo "Error: mysql config parsing failed"
if [ ! -z "$send_mail" ]; then
echo "Can't parse MySQL DB config" | $send_mail -s "$subj" $email
fi
log_event "$E_PARSING" "$EVENT"
exit $E_PARSING
fi
query='SELECT VERSION()'
mysql -h $HOST -u $USER -p$PASSWORD -e "$query" > /dev/null 2>&1
if [ '0' -ne "$?" ]; then
echo "Error: Database connection to $HOST failed"
if [ ! -z "$send_mail" ]; then
echo "Database connection to MySQL host $HOST failed" |\
$send_mail -s "$subj" $email
fi
log_event "$E_DB $EVENT"
exit $E_DB
fi
query="CREATE DATABASE \`$DB\` CHARACTER SET $CHARSET"
mysql -h $HOST -u $USER -p$PASSWORD -e "$query" > /dev/null 2>&1
query="GRANT ALL ON \`$DB\`.* TO \`$DBUSER\`@\`%\`"
mysql -h $HOST -u $USER -p$PASSWORD -e "$query" > /dev/null 2>&1
query="GRANT ALL ON \`$DB\`.* TO \`$DBUSER\`@localhost"
mysql -h $HOST -u $USER -p$PASSWORD -e "$query" > /dev/null 2>&1
query="UPDATE mysql.user SET Password='$MD5' WHERE User='$DBUSER';"
mysql -h $HOST -u $USER -p$PASSWORD -e "$query" > /dev/null 2>&1
}
# Rebuild PostgreSQL
rebuild_pgsql_database() {
host_str=$(grep "HOST='$HOST'" $VESTA/conf/pgsql.conf)
eval $host_str
export PGPASSWORD="$PASSWORD"
if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ] || [ -z $TPL ]; then
echo "Error: postgresql config parsing failed"
if [ ! -z "$send_mail" ]; then
echo "Can't parse PostgreSQL config" | $send_mail -s "$subj" $email
fi
log_event "$E_PARSING" "$EVENT"
exit $E_PARSING
fi
query='SELECT VERSION()'
psql -h $HOST -U $USER -c "$query" > /dev/null 2>&1
if [ '0' -ne "$?" ]; then
echo "Error: Connection failed"
if [ ! -z "$send_mail" ]; then
echo "Database connection to PostgreSQL host $HOST failed" |\
$send_mail -s "$subj" $email
fi
log_event "$E_DB" "$EVENT"
exit $E_DB
fi
query="CREATE ROLE $DBUSER"
psql -h $HOST -U $USER -c "$query" > /dev/null 2>&1
query="UPDATE pg_authid SET rolpassword='$MD5' WHERE rolname='$DBUSER'"
psql -h $HOST -U $USER -c "$query" > /dev/null 2>&1
query="CREATE DATABASE $DB OWNER $DBUSER"
if [ "$TPL" = 'template0' ]; then
query="$query ENCODING '$CHARSET' TEMPLATE $TPL"
else
query="$query TEMPLATE $TPL"
fi
psql -h $HOST -U $USER -c "$query" > /dev/null 2>&1
query="GRANT ALL PRIVILEGES ON DATABASE $DB TO $DBUSER"
psql -h $HOST -U $USER -c "$query" > /dev/null 2>&1
query="GRANT CONNECT ON DATABASE template1 to $dbuser"
psql -h $HOST -U $USER -c "$query" > /dev/null 2>&1
}
# Import MySQL dump
import_mysql_database() {
host_str=$(grep "HOST='$HOST'" $VESTA/conf/mysql.conf)
eval $host_str
if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ]; then
echo "Error: mysql config parsing failed"
log_event "$E_PARSING" "$EVENT"
exit $E_PARSING
fi
mysql -h $HOST -u $USER -p$PASSWORD $DB < $1 > /dev/null 2>&1
}
# Import PostgreSQL dump
import_pgsql_database() {
host_str=$(grep "HOST='$HOST'" $VESTA/conf/pgsql.conf)
eval $host_str
export PGPASSWORD="$PASSWORD"
if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ] || [ -z $TPL ]; then
echo "Error: postgresql config parsing failed"
log_event "$E_PARSING" "$EVENT"
exit $E_PARSING
fi
psql -h $HOST -U $USER $DB < $1 > /dev/null 2>&1
}