From d985475421f12918bb28cabfc06794e962198c71 Mon Sep 17 00:00:00 2001 From: Joerg Steffens Date: Mon, 3 Feb 2014 13:45:41 +0100 Subject: [PATCH] use config file settings to configure database Let the database configuration scripts get the configuration parameter from the director config file. Now, the scripts try to get there values in following order: 1. environment variable (db_name, db_user, db_password) 2. director config file 3. fallback value (from configure) Signed-off-by: Marco van Wieringen --- debian/control | 1 - scripts/bareos-config-lib.sh.in | 99 ++++++++++++++++++++------ src/cats/create_bareos_database.in | 4 +- src/cats/ddl/grants/mysql-readonly.sql | 3 +- src/cats/ddl/grants/mysql.sql | 5 +- src/cats/drop_bareos_database.in | 4 +- src/cats/drop_bareos_tables.in | 4 +- src/cats/grant_bareos_privileges.in | 7 +- src/cats/make_bareos_tables.in | 4 +- src/cats/update_bareos_tables.in | 4 +- 10 files changed, 98 insertions(+), 37 deletions(-) diff --git a/debian/control b/debian/control index c7f4c085d60..e2aef0513d0 100644 --- a/debian/control +++ b/debian/control @@ -340,4 +340,3 @@ Description: Backup Archiving Recovery Open Sourced - storage-python-plugin data across a network of computers of different kinds. . This package provides the python plugin for the storage daemon. - diff --git a/scripts/bareos-config-lib.sh.in b/scripts/bareos-config-lib.sh.in index 507c79664c2..53fbd8eb5fb 100644 --- a/scripts/bareos-config-lib.sh.in +++ b/scripts/bareos-config-lib.sh.in @@ -1,5 +1,6 @@ #!/bin/sh +CONFIG_LIB=@scriptdir@/bareos-config-lib.sh DIR_CFG=@sysconfdir@ CFG_DIR=${DIR_CFG}/bareos-dir.conf DIR_SCRIPTS=@scriptdir@ @@ -52,6 +53,24 @@ is_function() # fi # } +warn() +{ + echo "Warning: $@" >&2 +} + +error() +{ + echo "Error: $@" >&2 +} + +get_config_lib_file() +{ + # can be used in following way: + # LIB=`bareos-config get_config_lib_file` + # . $LIB + echo "${CONFIG_LIB}" +} + get_user_fd() { echo "${FILE_DAEMON_USER}" @@ -190,33 +209,72 @@ setup_sd_user() exit 1 } -get_database_driver() +get_config_param() { - if ! [ -r "${CFG_DIR}" ]; then - return + # + # get parameter values from a Bareos configuration file + # + + # configuration file + CFG_FILE="$1" + # section, currently ignored + SECTION="$2" + # name of the section, currently ignored + NAME="$3" + # parameter to get from config file + PARAM="$4" + # default value, if parameter is not found + DEFAULT="$5" + + if ! [ -r "${CFG_FILE}" ]; then + warn "failed to get parameter ${SECTION} ${NAME} ${PARAM}: can't read ${CFG_FILE}" + # if default value is given, return it anyway + [ "$DEFAULT" ] && echo "$DEFAULT" + return 1 fi - # get dbdriver, that is defined in director configuration. - # If string is still set to default, return nothing - DBDRIVER=`egrep -i '^[ ]*dbdriver[ ]*=' ${CFG_DIR} |\ + # get parameter from configuration file + VALUE=`egrep -i "^[ ]*${PARAM}[ ]*=" ${CFG_FILE} |\ cut -d'=' -f2 | \ - sed -e 's/[ ]*"//' -e 's/"//' | \ - grep -v "XXX_REPLACE_WITH_DATABASE_DRIVER_XXX"` + sed -e 's/[ ]*"//' -e 's/"//'` + [ "$VALUE" ] || VALUE="$DEFAULT" + echo "$VALUE" +} - echo "$DBDRIVER" +get_database_param() +{ + PARAM="$1" + DEFAULT="$2" + get_config_param "${CFG_DIR}" "catalog" "MyCatalog" "$PARAM" "$DEFAULT" + return $? +} + +get_database_driver() +{ + DEFAULT="$1" + get_database_param "dbdriver" "$DEFAULT" | grep -v "XXX_REPLACE_WITH_DATABASE_DRIVER_XXX" + return $? } get_database_name() { - if ! [ -r "${CFG_DIR}" ]; then - return - fi + DEFAULT="$1" + get_database_param "dbname" "$DEFAULT" + return $? +} - # get dbname, that is defined in director configuration. - DBNAME=`egrep -i '^[ ]*dbname[ ]*=' ${CFG_DIR} |\ - cut -d'=' -f2 | \ - sed -e 's/[ ]*"//' -e 's/"//'` - echo "$DBNAME" +get_database_user() +{ + DEFAULT="$1" + get_database_param "dbuser" "$DEFAULT" + return $? +} + +get_database_password() +{ + DEFAULT="$1" + get_database_param "dbpassword" "$DEFAULT" + return $? } get_databases_installed() @@ -282,9 +340,10 @@ get_translated_sql_file() fi db_type="${db_type:-`get_database_driver_default`}" - db_name="${db_name:-@db_name@}" - db_user="${db_user:-@db_user@}" - db_password="${db_password:-@db_password@}" + db_name="${db_name:-`get_database_name @db_name@`}" + db_user="${db_user:-`get_database_user @db_user@`}" + # if $db_password is defined but empty, an empty password will be used ("-" instead of ":-") + db_password="${db_password-`get_database_password @db_password@`}" db_version=`get_database_version` case ${db_type} in diff --git a/src/cats/create_bareos_database.in b/src/cats/create_bareos_database.in index 3b53547f5b5..e02b9cbaccf 100644 --- a/src/cats/create_bareos_database.in +++ b/src/cats/create_bareos_database.in @@ -29,8 +29,8 @@ # . @scriptdir@/bareos-config-lib.sh -db_name="${db_name:-@db_name@}" -db_user="${db_user:-@db_user@}" +db_name="${db_name:-`get_database_name @db_name@`}" +db_user="${db_user:-`get_database_user @db_user@`}" dir_user=`get_user_dir` dir_group=`get_group_dir` default_db_type=`get_database_driver_default` diff --git a/src/cats/ddl/grants/mysql-readonly.sql b/src/cats/ddl/grants/mysql-readonly.sql index 8cea1adc9e6..15c47c274a1 100644 --- a/src/cats/ddl/grants/mysql-readonly.sql +++ b/src/cats/ddl/grants/mysql-readonly.sql @@ -1,5 +1,6 @@ USE mysql -- read-only access for third party applications GRANT SELECT ON TABLE @DB_NAME@.* TO @DB_USER@@localhost @DB_PASS@; -GRANT SELECT ON TABLE @DB_NAME@.* TO @DB_USER@@"%" @DB_PASS@; +GRANT SELECT ON TABLE @DB_NAME@.* TO @DB_USER@@'127.0.0.1' @DB_PASS@; +GRANT SELECT ON TABLE @DB_NAME@.* TO @DB_USER@@'::1' @DB_PASS@; FLUSH PRIVILEGES; diff --git a/src/cats/ddl/grants/mysql.sql b/src/cats/ddl/grants/mysql.sql index 7b7143b632b..3aa4fb4c2d2 100644 --- a/src/cats/ddl/grants/mysql.sql +++ b/src/cats/ddl/grants/mysql.sql @@ -1,4 +1,5 @@ USE mysql -GRANT ALL PRIVILEGES ON @DB_NAME@.* TO @DB_USER@@localhost @DB_PASS@; -GRANT ALL PRIVILEGES ON @DB_NAME@.* TO @DB_USER@@"%" @DB_PASS@; +GRANT ALL PRIVILEGES ON TABLE @DB_NAME@.* TO @DB_USER@@localhost @DB_PASS@; +GRANT ALL PRIVILEGES ON TABLE @DB_NAME@.* TO @DB_USER@@'127.0.0.1' @DB_PASS@; +GRANT ALL PRIVILEGES ON TABLE @DB_NAME@.* TO @DB_USER@@'::1' @DB_PASS@; FLUSH PRIVILEGES; diff --git a/src/cats/drop_bareos_database.in b/src/cats/drop_bareos_database.in index 7638d1107ad..8b41c9579eb 100644 --- a/src/cats/drop_bareos_database.in +++ b/src/cats/drop_bareos_database.in @@ -28,8 +28,8 @@ # . @scriptdir@/bareos-config-lib.sh -db_name="${db_name:-@db_name@}" -db_user="${db_user:-@db_user@}" +db_name="${db_name:-`get_database_name @db_name@`}" +db_user="${db_user:-`get_database_user @db_user@`}" default_db_type=`get_database_driver_default` working_dir=`get_working_dir` diff --git a/src/cats/drop_bareos_tables.in b/src/cats/drop_bareos_tables.in index e7de49bcec6..b5329c837d2 100644 --- a/src/cats/drop_bareos_tables.in +++ b/src/cats/drop_bareos_tables.in @@ -29,8 +29,8 @@ # . @scriptdir@/bareos-config-lib.sh -db_name="${db_name:-@db_name@}" -db_user="${db_user:-@db_user@}" +db_name="${db_name:-`get_database_name @db_name@`}" +db_user="${db_user:-`get_database_user @db_user@`}" db_version=`get_database_version` bareos_sql_ddl=`get_database_ddl_dir` temp_sql_schema="/tmp/drops.sql.$$" diff --git a/src/cats/grant_bareos_privileges.in b/src/cats/grant_bareos_privileges.in index 4b3bae36332..5b9f4989d2d 100644 --- a/src/cats/grant_bareos_privileges.in +++ b/src/cats/grant_bareos_privileges.in @@ -29,9 +29,10 @@ # . @scriptdir@/bareos-config-lib.sh -db_name="${db_name:-@db_name@}" -db_user="${db_user:-@db_user@}" -db_password="${db_password:-@db_password@}" +db_name="${db_name:-`get_database_name @db_name@`}" +db_user="${db_user:-`get_database_user @db_user@`}" +# if $db_password is defined but empty, an empty password will be used ("-" instead of ":-") +db_password="${db_password-`get_database_password @db_password@`}" db_version=`get_database_version` bareos_sql_ddl=`get_database_ddl_dir` temp_sql_grants="/tmp/grants.sql.$$" diff --git a/src/cats/make_bareos_tables.in b/src/cats/make_bareos_tables.in index 01c8bb4dad0..fdf1798dd0e 100644 --- a/src/cats/make_bareos_tables.in +++ b/src/cats/make_bareos_tables.in @@ -29,8 +29,8 @@ # . @scriptdir@/bareos-config-lib.sh -db_name="${db_name:-@db_name@}" -db_user="${db_user:-@db_user@}" +db_name="${db_name:-`get_database_name @db_name@`}" +db_user="${db_user:-`get_database_user @db_user@`}" db_version=`get_database_version` bareos_sql_ddl=`get_database_ddl_dir` temp_sql_schema="/tmp/creates.sql.$$" diff --git a/src/cats/update_bareos_tables.in b/src/cats/update_bareos_tables.in index f4e9aa96f30..bb9255cf156 100644 --- a/src/cats/update_bareos_tables.in +++ b/src/cats/update_bareos_tables.in @@ -28,8 +28,8 @@ # . @scriptdir@/bareos-config-lib.sh -db_name="${db_name:-@db_name@}" -db_user="${db_user:-@db_user@}" +db_name="${db_name:-`get_database_name @db_name@`}" +db_user="${db_user:-`get_database_user @db_user@`}" db_version=`get_database_version` bareos_sql_ddl=`get_database_ddl_dir` temp_sql_schema="/tmp/tables.sql.$$"