Skip to content

Commit

Permalink
Use config file settings to configure database
Browse files Browse the repository at this point in the history
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 <marco.van.wieringen@bareos.com>
  • Loading branch information
joergsteffens authored and Marco van Wieringen committed Apr 9, 2014
1 parent e52dd29 commit 4338d7c
Show file tree
Hide file tree
Showing 13 changed files with 143 additions and 37 deletions.
127 changes: 107 additions & 20 deletions scripts/bareos-config-lib.sh.in
@@ -1,8 +1,10 @@
#!/bin/sh

CONFIG_LIB=@scriptdir@/bareos-config-lib.sh
DIR_CFG=@sysconfdir@
CFG_DIR=${DIR_CFG}/bareos-dir.conf
DIR_SCRIPTS=@scriptdir@
DBCHECK="@sbindir@/bareos-dbcheck -B -c ${CFG_DIR}"

SEC_GROUPS="tape disk"

Expand Down Expand Up @@ -52,6 +54,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}"
Expand Down Expand Up @@ -190,33 +210,99 @@ 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"

DBCHECK_OUTPUT=`$DBCHECK`
rc=$?
if [ $rc != 0 ]; then
temp_log="/tmp/bareos-config.$$.log"
echo "executing: $DBCHECK" >> $temp_log
echo "${DBCHECK_OUTPUT}" >> $temp_log
echo "" >> $temp_log

# if default value is given, return it anyway
if [ -n "$DEFAULT" ]; then
warn "failed to get \"${PARAM}\" from config, using default value \"${DEFAULT}\", see $temp_log"
echo "$DEFAULT"
else
warn "failed to get \"${PARAM}\" from config, see $temp_log"
fi

return 1
fi

# DBCHECK gets the database parameter from the Director config file in a standard format,
# however, it writes "db_name" (like the environment variables)
# instead of "dbname" like in the config file.
# Replace "db_" by "db" to be compatible with the config file.
VALUE=`echo "$DBCHECK_OUTPUT" | sed "s/^db_/db/" | sed -n "s/^${PARAM}=//p"`

[ -z "$VALUE" ] && VALUE="$DEFAULT"
echo "$VALUE"
return $rc
}

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()
Expand Down Expand Up @@ -282,9 +368,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
Expand Down
4 changes: 2 additions & 2 deletions src/cats/create_bareos_database.in
Expand Up @@ -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`
Expand Down
3 changes: 3 additions & 0 deletions src/cats/ddl/creates/mysql.sql
Expand Up @@ -451,4 +451,7 @@ INSERT INTO Status (JobStatus,JobStatusLong,Severity) VALUES
('a', 'SD despooling attributes', 15);

-- Initialize Version
-- DELETE should not be required,
-- but prevents errors if create script is called multiple times
DELETE FROM Version WHERE VersionId<=2002;
INSERT INTO Version (VersionId) VALUES (2002);
4 changes: 4 additions & 0 deletions src/cats/ddl/creates/postgresql.sql
Expand Up @@ -472,6 +472,10 @@ INSERT INTO Status (JobStatus,JobStatusLong,Severity) VALUES
INSERT INTO Status (JobStatus,JobStatusLong,Severity) VALUES
('i', 'Doing batch insert file records',15);

-- Initialize Version
-- DELETE should not be required,
-- but prevents errors if create script is called multiple times
DELETE FROM Version WHERE VersionId<=2002;
INSERT INTO Version (VersionId) VALUES (2002);

-- Make sure we have appropriate permissions
3 changes: 3 additions & 0 deletions src/cats/ddl/creates/sqlite3.sql
Expand Up @@ -461,6 +461,9 @@ INSERT INTO Status (JobStatus,JobStatusLong,Severity) VALUES
('i', 'Doing batch insert file records',15);

-- Initialize Version
-- DELETE should not be required,
-- but prevents errors if create script is called multiple times
DELETE FROM Version WHERE VersionId<=2002;
INSERT INTO Version (VersionId) VALUES (2002);

PRAGMA default_cache_size = 100000;
Expand Down
5 changes: 3 additions & 2 deletions src/cats/ddl/grants/mysql-readonly.sql
@@ -1,5 +1,6 @@
USE mysql
-- read-only access for third party applications
GRANT SELECT PRIVILEGES ON @DB_NAME@.* TO @DB_USER@@localhost @DB_PASS@;
GRANT SELECT PRIVILEGES ON @DB_NAME@.* TO @DB_USER@@"%" @DB_PASS@;
GRANT SELECT ON TABLE @DB_NAME@.* TO @DB_USER@@localhost @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;
5 changes: 3 additions & 2 deletions 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;
6 changes: 6 additions & 0 deletions src/cats/ddl/updates/mysql.2001_2002.sql
Expand Up @@ -35,3 +35,9 @@ ALTER TABLE Pool ADD COLUMN MinBlockSize INTEGER UNSIGNED DEFAULT 0;
ALTER TABLE Pool ADD COLUMN MaxBlockSize INTEGER UNSIGNED DEFAULT 0;

UPDATE Version SET VersionId = 2002;

-- remove unsecure user entry,
-- created by older Bareos versions,
-- if configured to run without password
DELETE FROM mysql.user where User='bareos' and Host="%" and Password="";
FLUSH PRIVILEGES;
4 changes: 2 additions & 2 deletions src/cats/drop_bareos_database.in
Expand Up @@ -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`

Expand Down
4 changes: 2 additions & 2 deletions src/cats/drop_bareos_tables.in
Expand Up @@ -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.$$"
Expand Down
7 changes: 4 additions & 3 deletions src/cats/grant_bareos_privileges.in
Expand Up @@ -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.$$"
Expand Down
4 changes: 2 additions & 2 deletions src/cats/make_bareos_tables.in
Expand Up @@ -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.$$"
Expand Down
4 changes: 2 additions & 2 deletions src/cats/update_bareos_tables.in
Expand Up @@ -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.$$"
Expand Down

0 comments on commit 4338d7c

Please sign in to comment.