trim the list of nameservers from netGetNameserers, there should be no whitespace...
[grml-shlib.git] / sh-lib
diff --git a/sh-lib b/sh-lib
index 640a5b6..9896f71 100644 (file)
--- 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)
@@ -25,6 +28,9 @@ SYSLOG__="YES"
 
 CMD_LINE__=""   # /proc/cmdline
 
+LANG__="$LANG"
+LC_ALL__="$LC_ALL"
+
 
 # CONFIG FUNCTIONS  {{{
 
@@ -34,6 +40,10 @@ function setExitFunction  { EXIT_FUNCTION__="$1"; }
 
 function disableSyslog  { SYSLOG__="NO";  }
 function enableSyslog   { SYSLOG__="YES"; }
+
+function saveLang { LANG__="$LANG"; LC_ALL__="$LC_ALL"; }
+function restoreLang { LANG="$LANG__"; LC_ALL="$LC_ALL__"; }
+function setCLang { saveLang; LANG="C"; LC_ALL="C"; }
 # }}}
 
 
@@ -44,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"; }
 # }}}
@@ -334,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
@@ -421,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_
@@ -454,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_
@@ -481,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_
@@ -515,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_
@@ -531,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
@@ -613,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