X-Git-Url: http://git.grml.org/?p=grml-shlib.git;a=blobdiff_plain;f=sh-lib;h=9896f71c44b1c4046ccc4b808c89a8e7d61eaa65;hp=437d60c10bffdbf5d337ba7267f4e4a7a65fd0f7;hb=174f38e91192fb8a1f39298ec484a6e0f3ed9f84;hpb=9ac245952aee3971004e3f6bf8f0746efdc43506 diff --git a/sh-lib b/sh-lib index 437d60c..9896f71 100644 --- a/sh-lib +++ b/sh-lib @@ -14,6 +14,9 @@ VERBOSE_TMP__=0 # FIXME maybe PROG_PATH__ for better error reporting? PROG_NAME__="" # initialised within init section +# directory for init scripts +INITD_DIR__="/etc/init.d/" + # >= level and the function will print the message EPRINT__=1 # eprint (error print) EEPRINT__=2 # 2print (intern error print) @@ -51,6 +54,9 @@ function unsetVerbose { VERBOSE_TMP__=$VERBOSE__; VERBOSE__=0; } function restoreVerbose { VERBOSE__=$VERBOSE_TMP__; } function getVerbose { echo "$VERBOSE__"; } +function setDebug { setVerbose "$DPRINT__"; } +function unsetDebug { restoreVerbose; } + function setExitFunction { EXIT_FUNCTION__="$1"; } function resetExitFunction { EXIT_FUNCTION__="_syslog"; } # }}} @@ -341,18 +347,12 @@ function secureInput function relToAbs { local relpath_="$1" - - local D_='' - local B_='' local abspath_='' - local end_path_='' - D_=`dirname "$relpath_"` - B_=`basename "$relpath_"` - abspath_=`cd "$D_" 2>/dev/null && pwd || echo "$D_"`/$B_ - end_path_=`echo "$abspath_" |tr --squeeze-repeats /` - dprint "relToAbs(): \"$relpath_\" => \"$end_path_\"" - echo "$end_path_" + abspath_="`readlink -f \"$relpath_\"`" || \ + warn "relToAbs(): Problems getting absolute path" "$?" || return 1 + dprint "relToAbs(): \"$relpath_\" => \"$abspath_\"" + echo "$abspath_" } # Simple shell grep @@ -428,19 +428,41 @@ function netValidIp return $ret_ } +function netGetIfaces +{ + local error_function_=${1:-"eprint"} # function to call on error + local message_="$2" # user supplied error message + local if_='' + local ret_='' + + #ip a|grep 'inet ' |awk '$NF !~ /lo/{print $NF}' + if_="`ip a|grep 'inet ' |awk '{print $NF}'`" + ret_=$? + if [ -z "$if_" ]; then + if [ -z "$message_" ]; then + "$error_function_" "no interfaces found" $ret_ + else + "$error_function_" "$message_" $ret_ + fi + return 1 + fi + dprint "interfaces found" $ret_ + echo "$if_" +} + # FIXME function netGetDefaultGateway { local error_function_=${1:-"eprint"} # function to call on error local message_="$2" # user supplied error message - local LANG=C - local LC_ALL=C local ip_='' local ret_='' + setCLang ip_=`route -n | awk '/^0\.0\.0\.0/{print $2; exit}'` ret_=$? + restoreLang if [ -z "$ip_" ]; then if [ -z "$message_" ]; then "$error_function_" "no default gateway found" $ret_ @@ -461,13 +483,13 @@ function netGetNetmask local error_function_=${2:-"eprint"} # function to call on error local message_="$3" # user supplied error message - local LANG=C - local LC_ALL=C local nm_='' local ret_='' + setCLang nm_=`ifconfig "$iface_" | awk '/[Mm]ask/{FS="[: ]*"; $0=$0; print $8; exit}'` ret_=$? + restoreLang if [ -z "$nm_" ]; then if [ -z "$message_" ]; then "$error_function_" "could not find a netmask for \"$iface_\"" $ret_ @@ -488,14 +510,14 @@ function netGetIp local error_function_=${2:-"eprint"} # function to call on error local message_="$3" # user supplied error message - local LANG=C - local LC_ALL=C local ip_="" local ret_="" + setCLang #ip_=`ip addr list eth0 |mawk '/inet/{split($2,A,"/"); print A[1]}'` ip_=`ifconfig "$iface_" | awk '/[Ii]net [Aa]ddr/{FS="[: ]*"; $0=$0; print $4; exit}'` ret_=$? + restoreLang if [ -z "$ip_" ]; then if [ -z "$message_" ]; then "$error_function_" "no ip for \"$iface_\" found" $ret_ @@ -522,7 +544,9 @@ function netGetNameservers return 1 fi - ns_=`awk '/^nameserver/{printf "%s ",$2}' $file_` + setCLang + ns_=`awk '/^nameserver/{printf "%s ",$2}' $file_ |xargs echo` + restoreLang if [ -z "$ns_" ]; then if [ -z "$message_" ]; then "$error_function_" "no nameservers found" $ret_ @@ -538,6 +562,58 @@ function netGetNameservers # }}} +# SERVICES {{{ +function _touchService +{ + local action_="${1:-"start"}" + local service_="$2" + local error_function_=${3:-"eprint"} # function to call on error + local message_="$4" # user supplied error message + + local i="" + local known_action_='false' + for i in "start" "stop" "restart" "reload" "force-reload"; do + if [[ $i == $action_ ]]; then + known_action_='true' + break + fi + done + $known_action_ || warn "_touchService(): unknown action \"$action_\"" + + + local service_path_="" + service_path_="${INITD_DIR__}/$service_" + if [ ! -e "$service_path_" ]; then + warn "_touchService(): service does not exist: \"$service_\"" + return 1 + fi + if [ ! -x "$service_path_" ]; then + warn "_touchService(): service is not executable: \"$service_\"" + fi + + local ret_="" + "$service_path_" "$action_" + ret_=$? + if [[ $ret_ != 0 ]]; then + if [ -z "$message_" ]; then + "$error_function_" "Problems ${action_}ing service \"$service_\"" $ret_ + else + "$error_function_" "$message_" $ret_ + fi + return 1 + fi + dprint "_touchService(): successfully started service \"$service_\"" + return 0 +} + +function _createServiceFunctions +{ + for i in "start" "stop" "restart" "reload" "force-reload"; do + eval "function ${i}Service { _touchService ${i} \"\$1\" \"\$2\" \"\$3\"; }" + done +} +_createServiceFunctions +# }}} # prints the next free /dev/loop* to stdout function findNextFreeLoop @@ -620,8 +696,16 @@ function _checkBootParam return 1 } _checkBootParam + + +function _setDebugLevel +{ + local debug_="${DEBUG:-0}" + VERBOSE__="$debug_" +} +_setDebugLevel # }}} # END OF FILE ################################################################################ -# vim:foldmethod=marker +# vim:foldmethod=marker expandtab shiftwidth=2 tabstop=2