From 850fb2d150c95909b2724225e3ea60bfea2e1dae Mon Sep 17 00:00:00 2001 From: pemontto Date: Wed, 30 Dec 2020 12:37:51 +0000 Subject: [PATCH] Fix MySQL ONLY_FULL_GROUP_BY --- docker-compose.yml | 3 ++- server/files/entrypoint_nginx.sh | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index 659aad2..9ef8aa8 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -45,9 +45,10 @@ services: # Database Configuration (And their defaults) # - "MYSQL_HOST=db" # - "MYSQL_USER=misp" -# - "MYSQL_PASSWORD=example" # NOTE: This should be AlphaNum with no Special Chars. Otherwise, edit config files after first run. +# - "MYSQL_PASSWORD=example" # NOTE: This should be AlphaNum with no Special Chars. Otherwise, edit config files after first run. # - "MYSQL_DATABASE=misp" # Optional Settings +# - "MYSQL_ROOT_PASSWORD=password" # Enable to allow fixing ONLY_FULL_GROUP_BY MySQL defaults # - "NOREDIR=true" # Do not redirect port 80 # - "DISIPV6=true" # Disable IPV6 in nginx # - "SECURESSL=true" # Enable higher security SSL in nginx diff --git a/server/files/entrypoint_nginx.sh b/server/files/entrypoint_nginx.sh index 6bb0495..f2a84d9 100755 --- a/server/files/entrypoint_nginx.sh +++ b/server/files/entrypoint_nginx.sh @@ -9,6 +9,7 @@ MISP_APP_CONFIG_PATH=/var/www/MISP/app/Config [ -z "$REDIS_FQDN" ] && REDIS_FQDN=redis [ -z "$MISP_MODULES_FQDN" ] && MISP_MODULES_FQDN="http://misp-modules" [ -z "$MYSQLCMD" ] && MYSQLCMD="mysql -u $MYSQL_USER -p$MYSQL_PASSWORD -P $MYSQL_PORT -h $MYSQL_HOST -r -N $MYSQL_DATABASE" +[ -z "$MYSQLROOTCMD" ] && MYSQLROOTCMD="mysql -u root -p$MYSQL_ROOT_PASSWORD -P $MYSQL_PORT -h $MYSQL_HOST -r -N $MYSQL_DATABASE" ENTRYPOINT_PID_FILE="/entrypoint_apache.install" [ ! -f $ENTRYPOINT_PID_FILE ] && touch $ENTRYPOINT_PID_FILE @@ -92,6 +93,19 @@ init_mysql(){ exit 1 fi + # If we're given the root password, disable the default sql_mode ONLY_FULL_GROUP_BY + # in MySQL. Required until https://github.com/MISP/MISP/issues/1894 is fixed + if [ -n "$MYSQL_ROOT_PASSWORD" ]; then + echo -n "Checking if ONLY_FULL_GROUP_BY mode is enabled..." + sql_mode=$(echo "SELECT @@sql_mode" | $MYSQLROOTCMD | grep "ONLY_FULL_GROUP_BY") + if [ -n "$sql_mode" ]; then + echo -e "\nDisabling MySQL default ONLY_FULL_GROUP_BY" + echo "SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));" | $MYSQLROOTCMD 1>/dev/null + else + echo " OK" + fi + fi + if [ $(isDBinitDone) -eq 0 ]; then echo "Database has already been initialized" else