#!/bin/sh
#
# BAREOS® - Backup Archiving REcovery Open Sourced
#
# Copyright (C) 2000-2011 Free Software Foundation Europe e.V.
# Copyright (C) 2013-2020 Bareos GmbH & Co. KG
#
# This program is Free Software; you can redistribute it and/or
# modify it under the terms of version three of the GNU Affero General Public
# License as published by the Free Software Foundation and included
# in the file LICENSE.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
# 02110-1301, USA.
#
# shell script to grant privileges to the bareos database
# for PostgreSQL, Ingres, MySQL, or SQLite.
#

#
# Source the Bareos config functions.
#

# change to root dir
cd /


. /usr/pkg/lib/bareos/scripts/bareos-config-lib.sh

db_name="${db_name:-`get_database_name bareos`}"
db_user="${db_user:-`get_database_user bareos`}"
# if $db_password is defined but empty, an empty password will be used ("-" instead of ":-")
db_password="${db_password-`get_database_password `}"
db_version=`get_database_version`
bareos_sql_ddl=`get_database_ddl_dir`
temp_sql_grants="/tmp/grants.sql.$$"
default_db_type=`get_database_driver_default`

#
# See if the first argument is a valid backend name.
# If so the user overrides the default database backend.
#
if [ $# -gt 0 ]; then
   case $1 in
      sqlite3)
         db_type=$1
         shift
         ;;
      mysql)
         db_type=$1
         shift
         ;;
      postgresql)
         db_type=$1
         shift
         ;;
      *)
         ;;
   esac
fi

#
# If no new db_type is gives use the default db_type.
#
if [ -z "${db_type}" ]; then
   db_type="${default_db_type}"
fi

echo "Granting ${db_type} tables"

get_database_grant_privileges "${db_type}" "${db_user}" "${db_password}" > ${temp_sql_grants}
if [ $? != 0 ]; then
    echo "Error creating privileges."
    exit 1
fi

bindir=`get_database_utility_path ${db_type}`
if [ ! -z "${bindir}" ]; then
   PATH="$bindir:$PATH"
fi

case ${db_type} in
   sqlite3)
      #
      # Nothing to do for SQLite3
      #
      retval=0
      ;;
   mysql)
      mysql $* -f < ${temp_sql_grants}

      retval=$?
      ;;
   postgresql)
      PGOPTIONS='--client-min-messages=warning' psql -f ${temp_sql_grants} -d ${db_name} $*

      retval=$?
      ;;
   *)
      echo "Unknown database type $1"
      exit 1
      ;;
esac

rm -f ${temp_sql_grants}

if [ "${retval}" = 0 ]; then
   echo "Privileges for user ${db_user} granted ON database ${db_name}."
else
   echo "Error creating privileges."
fi

exit ${retval}
