--- 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} +} +