# Authors: grml-team (grml.org), (c) Michael Gebetsroither <gebi@grml.org>
# Bug-Reports: see http://grml.org/bugs/
# License: This file is licensed under the GPL v2.
-# Latest change: Mon May 02 00:17:44 CEST 2005 [gebi]
+# Latest change: Mon Jun 04 01:17:23 CEST 2007 [mika]
################################################################################
# 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)
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"; }
# }}}
local level_="$1"
local type_="$2"
local message_="$3"
-
+
if [ $VERBOSE__ -ge $level_ -a -n "$message_" ]; then
echo -n "$type_" >&2
echo "$message_" >&2
{
local message_="$1" # error message
local exit_code_="$2"
-
+
if [ -n "$exit_code_" ]; then
logger -p user.alert -t "$PROG_NAME__" -i "$message_ ret($exit_code_)" >&2
else
#
###
-# i don't want to write exit status controle stuff every time
+##
+# ATTENTION... THIS FUNCTION IS A BIG SECURITY HOLE
+# this function will be changed in future release
+##
+# I don't want to write exit status control stuff every time
function execute
{
local to_exec_="$1" # command to execute
local ret_=''
+ # NOT A GOOD IDEA
eval "$to_exec_"
ret_=$?
if [ -e "$file_to_test_" ]; then
if [ -z "$message_" ]; then
- $error_function_ "file does allready exist \"$file_to_test_\"" 67
+ $error_function_ "file does already exist \"$file_to_test_\"" 67
else
$error_function_ "$message_"
fi
checkId 0 "$1" "$2"
}
+function isGrml
+{
+ if [ -f /etc/grml_version ] ; then
+ dprint "isGrml(): this seems to be a grml system"
+ return 0
+ else
+ dprint "isGrml(): this is not a grml system"
+ return 1
+ fi
+}
function runsFromHd
{
function secureInput
{
local to_secure_="$1"
-
+
local secured_=''
secured_=`echo -n "$to_secure_" |tr -c '[:alnum:]/.\-,\(\)' '_'`
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_"
+}
+
+
+# Trim off white-space characters
+# white-space in the "C" and "POSIX" locales are:
+# space
+# form-feed ('\f')
+# newline ('\n')
+# carriage return ('\r')
+# horizontal tab ('\t')
+# vertical tab ('\v')
+function stringTrim
+{
+ local str_="$1"
+ local result_=""
+
+ result_="`echo "$str_" | sed -e 's/^\s*//' -e 's/\s*$//'`" || \
+ warn "stringTrim(): Problems stripping of blanks" || return 1
+ dprint "stringTrim(): \"$str_\" => \"$result_\""
+ echo "$result_"
}
# Simple shell grep
# validates an IP FIXME
function netValidIp
{
- local ip_="$1" # ip addresse to validate
+ local ip_="$1" # ip address to validate
local error_function_=${2:-"eprint"} # function to call on error
local message_="$3" # user supplied error message
-
+
local ret_=''
echo "$ip_" | grep -E -q -e '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}.[0-9]{1,3}' \
ret_=$?
if [ $ret_ -ne 0 ]; then
if [ -z "$message_" ]; then
- "$error_function_" "ip-addresse \"$ip_\" is NOT valied" $ret_
+ "$error_function_" "ip-address \"$ip_\" is NOT valid" $ret_
else
"$error_function_" "$message_" $ret_
fi
return 1
fi
- dprint "ip-addresse \"$ip_\" is valied" $ret_
+ dprint "ip-address \"$ip_\" is valid" $ret_
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_
local iface_="$1"
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_
- else
+ else
"$error_function_" "$message_" $ret_
fi
return 1
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_
fi
return 1
fi
- dprint "addresse for \"$iface_\" is \"$ip_\"" $ret_
+ dprint "address for \"$iface_\" is \"$ip_\"" $ret_
echo "$ip_"
return 0
-}
+}
function netGetNameservers
{
local error_function_=${1:-"eprint"} # function to call on error
local message_="$2" # user supplied error message
-
+
local file_="/etc/resolv.conf"
local ns_=""
warn "file \"$file_\" does not exist, could not get nameservers"
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_
# }}}
+# 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"; do
+ eval "function ${i}Service { _touchService ${i} \"\$1\" \"\$2\" \"\$3\"; }"
+ done
+ eval "function forceReloadService { _touchService force-reload \"\$1\" \"\$2\" \"\$3\"; }"
+}
+_createServiceFunctions
+# }}}
# prints the next free /dev/loop* to stdout
function findNextFreeLoop
local tmp_='' # tmp
local i='' # counter
local ret_='' # saved return value
-
+
for i in 'losetup' 'losetup.orig'; do
tmp_=`$i -f 2>/dev/null`
if [ $? -eq 0 ]; then
function _initProgName
{
local name_="$1" # program name
-
+
local tmp_name_=`basename "$name_"` || \
logger -p user.alert -i "Init-initProgName: problems executing ( basename \"$name_\" ) ret($?)" >/dev/null
-
+
secureInput "$tmp_name_"
}
PROG_NAME__=`_initProgName "$0"`
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