# $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 echo "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 "\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() { su - "${MCORE_UNPRIV_USER}" -c "DISPLAY=${MCORE_XORG_DISPLAY} $@" } addconfig() { local opts if [[ -z ${CONFIG} ]] then echo "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 echo "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 [[ ${DEBUG} = 1 ]] && echo "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 mecho "${sorted}" return 0 else for req in ${sorted} do if no_duplicate "${missing}" "$req" then # print normal mecho -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 [[ ${DEBUG} = 1 ]] && echo "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 mecho ${sorted} } mecho() { local COLCYAN="\033[1;36m" local COLDEFAULT="\033[0m" local opts local webcrlf 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}" } 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}" } path_not_empty() { local path="$1" [[ -z ${path} ]] && "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 }