--- mcore-src/trunk/mcore-tools/daemon/include/daemon.global.class 2011/02/02 21:17:54 1252
+++ mcore-src/trunk/mcore-tools/daemon/include/daemon.global.class 2014/01/10 10:23:50 2139
@@ -1,5 +1,39 @@
# $Id$
+# loads client classes from $MCORE_LIBDIR
+load_client_classes()
+{
+ local i
+
+ # client specific
+ for i in $(find ${MCORE_LIBDIR}/include -type f -name \*.client.class)
+ do
+ source ${i} || eecho "error loading ${i}"
+ done
+}
+
+# restarts the whole service via remote cmd
+restart_service()
+{
+ local pid
+ for pid in $(pidof sslsvd)
+ do
+ kill -SIGHUP ${pid}
+ done
+}
+
+# stops the whole service via remote cmd
+stop_service()
+{
+ local pid
+ for pid in $(pidof sslsvd)
+ do
+ kill -15 ${pid}
+ sleep 1
+ kill -9 ${pid}
+ done
+}
+
# # import_resource $table $serial $resource $value
# import_resource()
# {
@@ -26,7 +60,7 @@
local cmd
local argv
- if validate_session
+ if valid_session
then
class="${caller%.*}"
cmd="${caller#*.}"
@@ -44,7 +78,7 @@
then
"${method}"_"${class}"_"${cmd}" ${argv}
else
- echo "unkown method '${method}' . class '${class}' . cmd '${cmd}'"
+ eecho "unkown method '${method}' . class '${class}' . cmd '${cmd}'"
fi
else
invalid_session
@@ -58,12 +92,21 @@
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 "\thelp - shows help"
+ 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 "\treload - reloads all client classes plugins"
+ mecho "\trestart - restarts the daemon"
+ mecho "\tstop - stops the daemon"
+ mecho "\tnocolors - disable colors, useful for the webclient"
+ mecho "\tcolors - enable colors"
+ mecho "\tquiet - do not print any unecessary messages"
+ mecho "\thelp - shows help"
+ mecho "\tversion - prints version of the daemon"
+ mecho "\tquit - quits the connection to the server"
mecho
mecho "Help topics:"
for i in ${topics}
@@ -75,19 +118,26 @@
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()
{
- su - "${MCORE_UNPRIV_USER}" -c "$@"
+ if [[ -n $(pidof X) ]]
+ then
+ su - "${MCORE_UNPRIV_USER}" -c "DISPLAY=${MCORE_XORG_DISPLAY} $@"
+ fi
}
addconfig()
{
+ local opts
+
if [[ -z ${CONFIG} ]]
then
- echo "You must define \$CONFIG varibale first!"
+ eecho "You must define \$CONFIG varibale first!"
return 1
fi
@@ -95,14 +145,21 @@
then
install -d $(dirname ${CONFIG})
fi
- echo "$@" >> ${CONFIG}
+
+ # check for opts
+ case $1 in
+ -n) shift; opts=" -n" ;;
+ -e) shift; opts=" -e" ;;
+ esac
+
+ echo ${opts} "$@" >> ${CONFIG}
}
clearconfig()
{
if [[ -z ${CONFIG} ]]
then
- echo "You must define \$CONFIG varibale first!"
+ eecho "You must define \$CONFIG varibale first!"
return 1
fi
@@ -113,6 +170,21 @@
: > ${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="$@"
@@ -120,21 +192,59 @@
for i in ${requires}
do
- export REQUIRE="${REQUIRE} ${i}"
+ # check for duplicate provides
+ if no_duplicate "${PROVIDE}" "${i}"
+ then
+ export REQUIRE="${REQUIRE} ${i}"
+ else
+ decho "duplicate provide '${i}' detected!"
+ fi
done
}
-not_provided()
+verify_requirements()
{
- local i
- local item="$1"
+ local req
+ local prov
+ local missing
+ local sorted
- for i in ${PROVIDE}
+ for req in ${REQUIRE}
do
- [[ ${i} = ${item} ]] && return 1
+ # 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
- return 0
+ # sort them alpabetically
+ sorted=$(for i in ${REQUIRE}; do echo "${i}"; done | sort)
+
+ # show missing and set the right retval
+ if [[ -z ${missing} ]]
+ then
+ # do not escape, or CRLFS get printed to screen too
+ 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
+ # print CRLF
+ echo
+ return 1
+ fi
}
provide()
@@ -145,11 +255,11 @@
for i in ${provides}
do
# check for duplicate provides
- if not_provided "${i}"
+ if no_duplicate "${PROVIDE}" "${i}"
then
export PROVIDE="${PROVIDE} ${i}"
else
- [[ ${DEBUG} = 1 ]] && echo "duplicate provide '${i}' detected!"
+ decho "duplicate provide '${i}' detected!"
fi
done
}
@@ -161,18 +271,203 @@
# sort them alpabetically
sorted=$(for i in ${PROVIDE}; do echo "${i}"; done | sort)
# do not escape, or CRLFS get printed to screen too
- mecho ${sorted}
+ 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
- echo -e "${COLCYAN}$@${COLDEFAULT}"
+ [[ ${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
+}
+
+help_daemon_mroot()
+{
+ mecho "get daemon.mroot"
+ mecho " Prints current MROOT variable."
+ mecho
+ mecho "set daemon.mroot [path]"
+ mecho " set MROOT variable to given path."
+}
+
+get_daemon_mroot()
+{
+ rvecho "${MROOT}"
+}
+
+set_daemon_mroot()
+{
+ local path=$1
+
+ if [[ -d ${path} ]]
+ then
+ export MROOT="${path}"
+ decho "MROOT='${MROOT}' is set."
+ else
+ eecho "Path '${path}' does not exist. MROOT not set."
+ fi
+}
+
+list_files_in_directory()
+{
+ local i
+ local retval
+ local path
+ local opts
+ local type
+
+ # basic getops
+ for i in $*
+ do
+ case $1 in
+ -mindepth) shift; opts+=" -mindepth $1" ;;
+ -maxdepth) shift; opts+=" -maxdepth $1" ;;
+ -type) shift; type="$1" ;;
+ -name) shift; opts+=" -name $1" ;;
+ '') continue ;;
+ *) path="$1" ;;
+ esac
+ shift
+ done
+
+ if [[ -z ${path} ]]
+ then
+ eecho "No path given."
+ return 1
+ fi
+
+ if [[ ! -d ${path} ]]
+ then
+ eecho "Directory '${path}' does not exist."
+ return 1
+ fi
+
+ # default to files
+ [[ -z ${type} ]] && type=f
+
+ for i in $(find ${path} ${opts} -type ${type} -printf '%f\n' | sort)
+ do
+ if [[ -z ${retval} ]]
+ then
+ retval="${i}"
+ else
+ retval+=" ${i}"
+ fi
+ done
+
+ rvecho "${retval}"
+}
+
+print_version()
+{
+ echo "mcored-$(<${MCORE_LIBDIR}/VERSION)"
+}
+
+system_chroot()
+{
+ local cmd="$@"
+ if [[ -z ${MROOT} ]]
+ then
+ echo "system_chroot(): \$MROOT was not set, doing nothing!"
+ return 1
+ fi
+ if [ ! -d ${MROOT} ]
+ then
+ eecho "system_chroot(): MROOT='${MROOT}' does not exist."
+ return 1
+ fi
+
+ chroot ${MROOT} ${cmd}
+}
+