diff --git a/func/db.sh b/func/db.sh index 59a307462..9026737d2 100644 --- a/func/db.sh +++ b/func/db.sh @@ -25,17 +25,20 @@ mysql_connect() { chmod 660 $mycnf fi fi - err="/tmp/e.mysql" - mysql --defaults-file=$mycnf -e 'SELECT VERSION()' >/dev/null 2> $err + mysql_out=$(mktemp) + mysql --defaults-file=$mycnf -e 'SELECT VERSION()' > $mysql_out 2>&1 if [ '0' -ne "$?" ]; then if [ "$notify" != 'no' ]; then - echo -e "Can't connect to MySQL $HOST\n$(cat $err)" |\ + echo -e "Can't connect to MySQL $HOST\n$(cat $mysql_out)" |\ $SENDMAIL -s "$subj" $email fi + rm -f $mysql_out echo "Error: Connection to $HOST failed" log_event "$E_CONNECT" "$ARGUMENTS" exit $E_CONNECT fi + mysql_ver=$(cat $mysql_out |tail -n1 |cut -f 1 -d -) + rm -f $mysql_out } mysql_query() { @@ -199,9 +202,13 @@ add_mysql_database() { IDENTIFIED BY '$dbpass'" mysql_query "$query" > /dev/null - query="SHOW GRANTS FOR \`$dbuser\`" - md5=$(mysql_query "$query" 2>/dev/null) - md5=$(echo "$md5" |grep 'PASSWORD' |tr ' ' '\n' |tail -n1 |cut -f 2 -d \') + if [ "$(echo $mysql_ver |cut -d '.' -f2)" -ge 7 ]; then + md5=$(mysql_query "SHOW CREATE USER \`$dbuser\`" 2>/dev/null) + md5=$(echo "$md5" |grep password |cut -f8 -d \') + else + md5=$(mysql_query "SHOW GRANTS FOR \`$dbuser\`" 2>/dev/null) + md5=$(echo "$md5" |grep PASSW|tr ' ' '\n' |tail -n1 |cut -f 2 -d \') + fi } # Create PostgreSQL database diff --git a/func/rebuild.sh b/func/rebuild.sh index 7b62dd54f..69331cce4 100644 --- a/func/rebuild.sh +++ b/func/rebuild.sh @@ -531,44 +531,20 @@ rebuild_mail_domain_conf() { # 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 "$SENDMAIL" ]; then - echo "Can't parse MySQL DB config" | $SENDMAIL -s "$subj" $email - fi - log_event "$E_PARSING" "$ARGUMENTS" - exit $E_PARSING + mysql_connect $HOST + mysql_query "CREATE DATABASE \`$DB\` CHARACTER SET $CHARSET" >/dev/null + if [ "$(echo $mysql_ver |cut -d '.' -f2)" -ge 7 ]; then + mysql_query "CREATE USER IF NOT EXISTS \`$DBUSER\`" >/dev/null + mysql_query "CREATE USER IF NOT EXISTS \`$DBUSER\`@localhost" >/dev/null + query="UPDATE mysql.user SET authentication_string='$MD5'" + query="$query WHERE User='$DBUSER'" + else + query="UPDATE mysql.user SET Password='$MD5' WHERE User='$DBUSER'" 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 "$SENDMAIL" ]; then - echo "Database connection to MySQL host $HOST failed" |\ - $SENDMAIL -s "$subj" $email - fi - log_event "$E_CONNECT" "$ARGUMENTS" - exit $E_CONNECT - 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 - - query="FLUSH PRIVILEGES;" - mysql -h $HOST -u $USER -p$PASSWORD -e "$query" > /dev/null 2>&1 + mysql_query "GRANT ALL ON \`$DB\`.* TO \`$DBUSER\`@\`%\`" >/dev/null + mysql_query "GRANT ALL ON \`$DB\`.* TO \`$DBUSER\`@localhost" >/dev/null + mysql_query "$query" >/dev/null + mysql_query "FLUSH PRIVILEGES" >/dev/null } # Rebuild PostgreSQL