# $Id$ # loads client classes from $MCLIBDIR load_client_classes() { # client specific for i in ${MCLIBDIR}/include/*.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() # { # 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 "\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 "\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 [[ -n $(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 } 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" ;; '') 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} | sort) do if [[ -z ${retval} ]] then retval="$(basename ${i})" else retval="${retval} $(basename ${i})" fi done rvecho "${retval}" }