# $Id$
# # import_resource $table $serial $resource $value
# import_resource()
# {
# local table="$1"
# local serial="$2"
# local resource="$3"
# local value="$4"
#
# if [[ ${DEBUG} = 1 ]]
# then
# echo "${table}->${resource}=${value}" >> /root/lala.log
# echo "mysqldo \"update ${table} set ${resource}='${value}' where serial=${serial};\"" >> /root/lala.log
# fi
#
# mysql_insert "${table}",serial="${serial}","${resource}"="${value}"
# }
# run_class $method $caller $argv1 $argv2 ... $argvN
run_class()
{
local method="$1"
local caller="$2"
local class
local cmd
local argv
if valid_session
then
class="${caller%.*}"
cmd="${caller#*.}"
argv="${@/${caller}/}" # remove caller
argv="${argv/${method}/}" # remove method
# echo "method=${method}"
# echo "caller=${caller}"
# echo "class=${class}"
# echo "cmd=${cmd}"
# echo "argv=${argv}"
# check if class.cmd exist
if [[ ! -z $(typeset -f "${method}"_"${class}"_"${cmd}") ]]
then
"${method}"_"${class}"_"${cmd}" ${argv}
else
eecho "unkown method '${method}' . class '${class}' . cmd '${cmd}'"
fi
else
invalid_session
fi
}
help_topics()
{
local i
local topics
topics=$(typeset -f | grep '^help_' | sed 's:help_\(.*\)\ .*():\1:' | sed 's:_:\.:' | sort)
mecho "Global commands:"
mecho "\timport - import settings to database"
mecho "\tget - shows current value for a settings"
mecho "\tset - sets value for a setting"
mecho "\tauth - authenticate to the daemon"
mecho "\tprovide - shows provides of a system"
mecho "\trequire - verify plugin requirements"
mecho "\tnocolors - disable colors, useful for the webclient"
mecho "\tquiet - do not print any unecessary messages"
mecho "\thelp - shows help"
mecho "\tquit - quits the connection to the server"
mecho
mecho "Help topics:"
for i in ${topics}
do
# excludes
case ${i} in
help_topics|topics) continue ;;
esac
mecho "\t${i}"
done
mecho
mecho "Type 'help [topic]' for more information about every topic."
}
# on newer xorg-servers root is not allowed to run progs in a user session
x11runas()
{
if pidof X
then
su - "${MCORE_UNPRIV_USER}" -c "DISPLAY=${MCORE_XORG_DISPLAY} $@"
fi
}
addconfig()
{
local opts
if [[ -z ${CONFIG} ]]
then
eecho "You must define \$CONFIG varibale first!"
return 1
fi
if [[ ! -d $(dirname ${CONFIG}) ]]
then
install -d $(dirname ${CONFIG})
fi
# check for opts
case $1 in
-n) shift; opts=" -n" ;;
-e) shift; opts=" -e" ;;
esac
echo ${opts} "$@" >> ${CONFIG}
}
clearconfig()
{
if [[ -z ${CONFIG} ]]
then
eecho "You must define \$CONFIG varibale first!"
return 1
fi
if [[ ! -d $(dirname ${CONFIG}) ]]
then
install -d $(dirname ${CONFIG})
fi
: > ${CONFIG}
}
# no_duplicate $list $item
no_duplicate()
{
local i
local list="$1"
local item="$2"
for i in ${list}
do
[[ ${i} = ${item} ]] && return 1
done
return 0
}
require()
{
local requires="$@"
local i
for i in ${requires}
do
# check for duplicate provides
if no_duplicate "${PROVIDE}" "${i}"
then
export REQUIRE="${REQUIRE} ${i}"
else
decho "duplicate provide '${i}' detected!"
fi
done
}
verify_requirements()
{
local req
local prov
local missing
local sorted
for req in ${REQUIRE}
do
# scan PROVIDE for dupes
# if a dupe is found, then requirement is fullfilled
# else add to missing
if no_duplicate "${PROVIDE}" "${req}"
then
missing="${missing} ${req}"
fi
done
# sort them alpabetically
sorted=$(for i in ${REQUIRE}; do echo "${i}"; done | sort)
# show missing and set the right retval
if [[ -z ${missing} ]]
then
rvecho "${sorted}"
return 0
else
for req in ${sorted}
do
if no_duplicate "${missing}" "$req"
then
# print normal
rvecho -n " ${req}"
else
# print missing
eecho -n " ${req}"
fi
done
return 1
fi
}
provide()
{
local provides="$@"
local i
for i in ${provides}
do
# check for duplicate provides
if no_duplicate "${PROVIDE}" "${i}"
then
export PROVIDE="${PROVIDE} ${i}"
else
decho "duplicate provide '${i}' detected!"
fi
done
}
print_provide()
{
local sorted
# sort them alpabetically
sorted=$(for i in ${PROVIDE}; do echo "${i}"; done | sort)
# do not escape, or CRLFS get printed to screen too
rvecho ${sorted}
}
# message only echo | disabled in quiet mode
mecho()
{
local COLCYAN="\033[1;36m"
local COLDEFAULT="\033[0m"
local opts
local webcrlf
# print nothing if quiet mode was requested
[[ ${QUIET} = true ]] && return
if [[ ${NOCOLORS} = true ]]
then
COLCYAN=""
COLDEFAULT=""
fi
[[ ${WEBCRLF} = true ]] && webcrlf="
"
# respect -n
case $1 in
-n) shift; opts="n" ;;
esac
echo -e${opts} "${COLCYAN}$@${COLDEFAULT}${webcrlf}"
}
# prints error messages | enabled even in quiet mode
eecho()
{
local COLRED="\033[1;31m"
local COLDEFAULT="\033[0m"
local opts
local webcrlf
if [[ ${NOCOLORS} = true ]]
then
COLRED=""
COLDEFAULT=""
fi
[[ ${WEBCRLF} = true ]] && webcrlf="
"
# respect -n
case $1 in
-n) shift; opts="n" ;;
esac
echo -e${opts} "${COLRED}$@${COLDEFAULT}${webcrlf}"
}
# prints return values of get | enabled even in quiet mode
rvecho()
{
local COLPURPLE="\033[1;35m"
local COLDEFAULT="\033[0m"
local opts
local webcrlf
if [[ ${NOCOLORS} = true ]]
then
COLPURPLE=""
COLDEFAULT=""
fi
[[ ${WEBCRLF} = true ]] && webcrlf="
"
# respect -n
case $1 in
-n) shift; opts="n" ;;
esac
echo -e${opts} "${COLPURPLE}$@${COLDEFAULT}${webcrlf}"
}
# prints debug messages if requested | enabled even in quiet mode
decho()
{
# print nothing if debug mode was *not* requested
[[ ${DEBUG} != 1 ]] && return
eecho "DEBUG: ${@}"
}
path_not_empty()
{
local path="$1"
[[ -z ${path} ]] && eecho "path_not_empty(): no path given!" && return 1
# return ERR if path does not exist
[[ ! -d ${path} ]] && return 1
# return ERR if path empty
[[ -z $(find "${path}" -mindepth 1 -maxdepth 1) ]] && return 1
# every thing went ok, directory not empty
return 0
}