You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
kamailio/utils/kamctl/kamdbctl

501 lines
11 KiB

#!/bin/bash
#
# control tool for maintaining Kamailio databases
#
#===================================================================
### version for this script
VERSION='4.4.0'
PATH=$PATH:/usr/local/sbin/
# for testing only, please don't enable this in production environments
# as this introduce security risks
TEST="false"
### include resource files, if any
# check for rc file at same location with kamdbctl
which greadlink > /dev/null 2>&1
ret=$?
if [ $ret -eq 0 ] ; then
KAMCTLFULLPATH=$(greadlink -f "$0")
else
which readlink > /dev/null 2>&1
ret=$?
if [ $ret -eq 0 ] ; then
KAMCTLFULLPATH=$(readlink -f "$0")
fi
fi
if [ -n "$KAMCTLFULLPATH" ] ; then
KAMCTLDIRPATH=$(dirname "$KAMCTLFULLPATH")
if [ -f $KAMCTLDIRPATH/kamctlrc ]; then
. $KAMCTLDIRPATH/kamctlrc
fi
fi
# check for rc file at standard locations
if [ -f /etc/kamailio/kamctlrc ]; then
. /etc/kamailio/kamctlrc
fi
if [ -f /usr/local/etc/kamailio/kamctlrc ]; then
. /usr/local/etc/kamailio/kamctlrc
fi
if [ -f ~/.kamctlrc ]; then
. ~/.kamctlrc
fi
if [ $TEST = "true" ]; then
if [ -f ./kamctlrc ]; then
. ./kamctlrc
fi
fi
if [ -z "$MYDIR" ] ; then
MYDIR=`dirname $0`
fi
if [ -z "$MYLIBDIR" ] ; then
MYLIBDIR="/usr/local/lib/kamailio/kamctl"
if [ ! -d "$MYLIBDIR" ]; then
MYLIBDIR=$MYDIR
fi
fi
##### ------------------------------------------------ #####
### load base functions
#
if [ -f "$MYLIBDIR/kamdbctl.base" ]; then
. "$MYLIBDIR/kamdbctl.base"
else
echo -e "Cannot load core functions '$MYLIBDIR/kamdbctl.base' - exiting ...\n"
exit -1
fi
#
##### ------------------------------------------------ #####
### DBENGINE
#
unset USED_DBENGINE
if [ -z "$DBENGINE" ] ; then
merr "database engine not specified, please setup one in the config script"
exit 1
fi
case $DBENGINE in
MYSQL|mysql|MySQL)
if [ -f "$MYLIBDIR/kamdbctl.mysql" ]; then
. "$MYLIBDIR/kamdbctl.mysql"
USED_DBENGINE="mysql"
else
merr "could not load the script in $MYLIBDIR/kamdbctl.mysql for database engine $DBENGINE"
fi
;;
PGSQL|pgsql|postgres|postgresql|POSTGRESQL)
if [ -f "$MYLIBDIR/kamdbctl.pgsql" ]; then
. "$MYLIBDIR/kamdbctl.pgsql"
USED_DBENGINE="postgres"
else
merr "could not load the script in $MYLIBDIR/kamdbctl.pgsql for database engine $DBENGINE"
fi
;;
ORACLE|oracle|Oracle)
if [ -f "$MYLIBDIR/kamdbctl.oracle" ]; then
. "$MYLIBDIR/kamdbctl.oracle"
USED_DBENGINE="oracle"
else
merr "could not load the script in $MYLIBDIR/kamdbctl.oracle for database engine $DBENGINE"
fi
;;
DBTEXT|dbtext|textdb)
if [ -f "$MYLIBDIR/kamdbctl.dbtext" ]; then
. "$MYLIBDIR/kamdbctl.dbtext"
USED_DBENGINE="dbtext"
DBNAME=$DB_PATH
else
merr "could not load the script in $MYLIBDIR/kamdbctl.dbtext for database engine $DBENGINE"
fi
;;
DB_BERKELEY|db_berkeley|BERKELEY|berkeley)
if [ -f "$MYLIBDIR/kamdbctl.db_berkeley" ]; then
. "$MYLIBDIR/kamdbctl.db_berkeley"
USED_DBENGINE="berkeley"
DBNAME=$DB_PATH
else
merr "could not load the script in $MYLIBDIR/kamdbctl.db_berkeley for database engine $DBENGINE"
fi
;;
SQLITE|sqlite)
if [ -f "$MYLIBDIR/kamdbctl.sqlite" ]; then
. "$MYLIBDIR/kamdbctl.sqlite"
USED_DBENGINE="sqlite"
DBNAME=$DB_PATH
else
merr "could not load the script in $MYLIBDIR/kamdbctl.sqlite for database engine $DBENGINE"
fi
;;
esac
if [ -z "$USED_DBENGINE" ] ; then
merr "database engine not loaded - tried '$DBENGINE'"
exit 1
else
mdbg "database engine '$USED_DBENGINE' loaded"
fi
# dump all rows
kamailio_dump() # pars: <database name>
{
if [ $# -ne 2 ] ; then
merr "kamailio_dump function takes two param"
exit 1
fi
if [ "$USED_DBENGINE" == "oracle" ]; then
oracle_dump $1 $2
elif [ "$PW" = "" ] ; then
$DUMP_CMD $1 > $2
else
$DUMP_CMD "-p$PW" $1 > $2
fi
if [ "$?" -ne 0 ]; then
merr "db dump failed"
exit 1
fi
minfo "db dump successful"
}
kamailio_restore() #pars: <database name> <filename>
{
if [ $# -ne 2 ] ; then
merr "kamailio_restore function takes two params"
exit 1
fi
if [ "$USED_DBENGINE" == "oracle" ]; then
oracle_restore $1 $2
else
sql_query $1 < $2
fi
if [ "$?" -ne 0 ]; then
merr "db restore failed"
exit 1
fi
minfo "db restore successful"
}
kamailio_pframework_create() #pars: none
{
if [ -e $DEFAULT_CFG_DIR/pi_framework_sample ] ; then
get_answer ask "Sample already exists. Overwrite? (y/n): "
if [ "$ANSWER" != "y" ]; then
exit 1
fi
fi
touch $DEFAULT_CFG_DIR/pi_framework_sample
if [ $? -ne 0 ] ; then
merr "Unable to create $DEFAULT_CFG_DIR/pi_framework_sample"
exit 1
fi
if [ -d "$DATA_DIR/xhttp_pi" ] ; then
PI_MODULES="$STANDARD_MODULES"
else
merr "Please install first the xhttp_pi module"
exit 1
fi
get_answer $INSTALL_EXTRA_TABLES "Add provisionning framework for extra tables? (y/n): "
if [ "$ANSWER" = "y" ]; then
PI_MODULES="$PI_MODULES $EXTRA_MODULES"
fi
get_answer $INSTALL_PRESENCE_TABLES "Add provisionning framework for presence tables? (y/n): "
if [ "$ANSWER" = "y" ]; then
PI_PRESENCE_MODULES="TRUE"
fi
cat $DATA_DIR/xhttp_pi/pi_framework-00 > $DEFAULT_CFG_DIR/pi_framework_sample
for TABLE in $PI_MODULES; do
if [ -e $DATA_DIR/xhttp_pi/$TABLE-table ]; then
cat $DATA_DIR/xhttp_pi/$TABLE-table >> $DEFAULT_CFG_DIR/pi_framework_sample
else
merr "Unable to configure: $TABLE - missing table descriptor"
fi
done
if [ "$PI_PRESENCE_MODULES" = "TRUE" ]; then
if [ -e $DATA_DIR/xhttp_pi/presence-table ]; then
cat $DATA_DIR/xhttp_pi/presence-table >> $DEFAULT_CFG_DIR/pi_framework_sample
else
merr "Unable to configure: presence - missing table descriptor"
fi
if [ -e $DATA_DIR/xhttp_pi/rls-table ]; then
cat $DATA_DIR/xhttp_pi/rls-table >> $DEFAULT_CFG_DIR/pi_framework_sample
else
merr "Unable to configure: rls - missing table descriptor"
fi
fi
cat $DATA_DIR/xhttp_pi/pi_framework-01 >> $DEFAULT_CFG_DIR/pi_framework_sample
for TABLE in $PI_MODULES; do
if [ -e $DATA_DIR/xhttp_pi/$TABLE-mod ]; then
cat $DATA_DIR/xhttp_pi/$TABLE-mod >> $DEFAULT_CFG_DIR/pi_framework_sample
else
merr "Unable to configure: $TABLE - missing mod descriptor"
fi
done
if [ "$PI_PRESENCE_MODULES" = "TRUE" ]; then
if [ -e $DATA_DIR/xhttp_pi/presence-mod ]; then
cat $DATA_DIR/xhttp_pi/presence-mod >> $DEFAULT_CFG_DIR/pi_framework_sample
else
merr "Unable to configure: presence - missing mod descriptor"
fi
if [ -e $DATA_DIR/xhttp_pi/rls-mod ]; then
cat $DATA_DIR/xhttp_pi/rls-mod >> $DEFAULT_CFG_DIR/pi_framework_sample
else
merr "Unable to configure: rls - missing mod descriptor"
fi
fi
cat $DATA_DIR/xhttp_pi/pi_framework-02 >> $DEFAULT_CFG_DIR/pi_framework_sample
minfo "Sample provisionning framework saved as: $DEFAULT_CFG_DIR/pi_framework_sample"
}
kamailio_pframework() #pars: <action>
{
if [ $# -ne 1 ] ; then
merr "kamailio_pframework function takes one parameter"
exit 1
fi
case $1 in
create)
shift
kamailio_pframework_create "$@"
exit $?
;;
*)
merr "Unexpected pframework action: $1"
usage
exit 1
;;
esac
}
case $1 in
migrate)
if [ "$USED_DBENGINE" != "mysql" ] ; then
merr "$USED_DBENGINE don't support migrate operation"
exit 1
fi
if [ $# -ne 3 ] ; then
merr "migrate requires 2 parameters: old and new database"
exit 1
fi
# create new database
minfo "Creating new Database $3...."
NO_USER_INIT="yes"
kamailio_create $3
if [ "$?" -ne 0 ] ; then
echo "migrate: creating new database failed"
exit 1
fi
# migrate data
minfo "Migrating data from $2 to $3...."
migrate_db $2 $3
minfo "Migration successfully completed."
exit 0;
;;
copy)
# copy database to some other name
if [ "$USED_DBENGINE" == "berkeley" -o "$USED_DBENGINE" == "dbtext" ] ; then
merr "$USED_DBENGINE don't support this operation"
exit 1
fi
shift
if [ $# -ne 1 ]; then
usage
exit 1
fi
if [ "$USED_DBENGINE" = "sqlite" ]; then
cp $DB_PATH $1
exit $?
fi
tmp_file=`mktemp /tmp/kamdbctl.XXXXXXXXXX` || exit 1
kamailio_dump $DBNAME $tmp_file
ret=$?
if [ "$ret" -ne 0 ]; then
rm $tmp_file
exit $ret
fi
NO_USER_INIT="yes"
kamailio_create $1
ret=$?
if [ "$ret" -ne 0 ]; then
rm $tmp_file
exit $ret
fi
kamailio_restore $1 $tmp_file
ret=$?
rm -f $tmp_file
exit $ret
;;
backup)
if [ "$USED_DBENGINE" == "berkeley" -o "$USED_DBENGINE" == "dbtext" ] ; then
merr "$USED_DBENGINE don't support this operation"
exit 1
fi
# backup current database
shift
if [ $# -ne 1 ]; then
usage
exit 1
fi
kamailio_dump $DBNAME $1
exit $?
;;
restore)
if [ "$USED_DBENGINE" == "berkeley" -o "$USED_DBENGINE" == "dbtext" ] ; then
merr "$USED_DBENGINE don't support this operation"
exit 1
fi
# restore database from a backup
shift
if [ $# -ne 1 ]; then
usage
exit 1
fi
kamailio_restore $DBNAME $1
exit $?
;;
create)
# create new database structures
shift
if [ $# -eq 1 ] ; then
DBNAME="$1"
fi
kamailio_create $DBNAME
exit $?
;;
presence)
presence_create $DBNAME
exit $?
;;
extra)
extra_create $DBNAME
exit $?
;;
dbuid)
dbuid_create $DBNAME
exit $?
;;
drop)
# delete kamailio database
# create new database structures
shift
if [ $# -eq 1 ] ; then
DBNAME="$1"
fi
kamailio_drop $DBNAME
exit $?
;;
reinit)
# delete database and create a new one
# create new database structures
shift
if [ $# -eq 1 ] ; then
DBNAME="$1"
fi
kamailio_drop $DBNAME
ret=$?
if [ "$ret" -ne 0 ]; then
exit $ret
fi
kamailio_create $DBNAME
exit $?
;;
dbonly)
# create only an empty database
if [ "$USED_DBENGINE" != "mysql" ] ; then
merr "$USED_DBENGINE db engine doesn't support this operation"
exit 1
fi
shift
if [ $# -eq 1 ] ; then
DBNAME="$1"
fi
kamailio_db_create $DBNAME
exit $?
;;
grant)
# grant privileges to database
if [ "$USED_DBENGINE" != "mysql" ] ; then
merr "$USED_DBENGINE db engine doesn't support this operation"
exit 1
fi
shift
if [ $# -eq 1 ] ; then
DBNAME="$1"
fi
kamailio_db_grant $DBNAME
exit $?
;;
revoke)
# revoke privileges to database
if [ "$USED_DBENGINE" != "mysql" ] ; then
merr "$USED_DBENGINE db engine doesn't support this operation"
exit 1
fi
shift
if [ $# -eq 1 ] ; then
DBNAME="$1"
fi
kamailio_db_revoke $DBNAME
exit $?
;;
add-tables)
if [ "$USED_DBENGINE" != "mysql" ] ; then
merr "$USED_DBENGINE don't support add-tables operation"
exit 1
fi
if [ $# -ne 2 ] ; then
merr "add-tables requires 1 parameter: group id of tables"
exit 1
fi
if [ -z "$DBNAME" ] ; then
merr "DBNAME is not set"
exit 1
fi
kamailio_add_tables $DBNAME $2
exit $?
;;
bdb|db_berkeley)
shift
kamailio_berkeley "$@"
exit $?
;;
pframework)
shift
kamailio_pframework "$@"
exit $?
;;
version)
echo "$0 $VERSION"
;;
*)
usage
exit 1;
;;
esac