summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin H. Johnson <robbat2@gentoo.org>2012-01-08 16:24:03 -0800
committerRobin H. Johnson <robbat2@gentoo.org>2012-01-08 16:24:10 -0800
commit4255ba175bd7c3ccadc5bc894d00ccb844467067 (patch)
tree40965581526479833b09054c5d9dc028348536b9
parentd02d3af02e4254b04949de546c5d53af82cc2fc2 (diff)
downloadopenrc-4255ba175bd7c3ccadc5bc894d00ccb844467067.tar.gz
openrc-4255ba175bd7c3ccadc5bc894d00ccb844467067.tar.bz2
openrc-4255ba175bd7c3ccadc5bc894d00ccb844467067.tar.xz
net: net.lo, lots of scripts
The program function in depend blocks is now able to search paths by itself. If passed multiple arguments or multiple calls, at least one of the arguments passed must be a program or a shell builtin (eg ip built into busybox). If a qualified path is specified, only that path will be checked, otherwise it will be checked as a builtin, then $PATH will be checked for the named binary (via type). Signed-off-by: Robin H. Johnson <robbat2@gentoo.org>
-rw-r--r--init.d/net.lo.in40
-rw-r--r--net/br2684ctl.sh13
-rw-r--r--net/bridge.sh2
-rw-r--r--net/ethtool.sh5
-rw-r--r--net/ip6to4.sh1
-rw-r--r--net/iproute2.sh5
-rw-r--r--net/macchanger.sh1
-rw-r--r--net/macvlan.sh5
-rw-r--r--net/tuntap.sh1
-rw-r--r--net/vlan.sh5
10 files changed, 36 insertions, 42 deletions
diff --git a/init.d/net.lo.in b/init.d/net.lo.in
index de393bd..2913561 100644
--- a/init.d/net.lo.in
+++ b/init.d/net.lo.in
@@ -172,7 +172,9 @@ _configure_variables()
_which()
{
local i OIFS
+ # Empty
[ -z "$1" ] && return
+ # check paths
OIFS="$IFS"
IFS=:
for i in $PATH ; do
@@ -181,6 +183,22 @@ _which()
IFS=$OIFS
}
+# Like _which, but also consider shell builtins, and multiple alternatives
+_program_available()
+{
+ [ -z "$1" ] && return 0
+ local x=
+ for x; do
+ case "${x}" in
+ /*) [ -x "${x}" ] && break;;
+ *) type "${x}" >/dev/null 2>&1 && break;;
+ esac
+ unset x
+ done
+ [ -n "${x}" ] && echo $x && return 0
+ return 1
+}
+
_show_address()
{
einfo "received address $(_get_inet_address "${IFACE}")"
@@ -323,11 +341,10 @@ _load_modules()
eval set -- \$module_${i}_program
if [ -n "$1" ]; then
- x=
- for x; do
- [ -x "${x}" ] && break
- done
- [ -x "${x}" ] || continue
+ if ! _program_available "$@" >/dev/null; then
+ vewarn "Skipping module $mod due to missing program: $@"
+ continue
+ fi
fi
if ${starting}; then
eval set -- \$module_${i}_program_start
@@ -335,15 +352,10 @@ _load_modules()
eval set -- \$module_${i}_program_stop
fi
if [ -n "$1" ]; then
- x=
- for x; do
- case "${x}" in
- /*) [ -x "${x}" ] && break;;
- *) type "${x}" >/dev/null 2>&1 && break;;
- esac
- unset x
- done
- [ -n "${x}" ] || continue
+ if ! _program_available "$@" >/dev/null; then
+ vewarn "Skipping module $mod due to missing program: $@"
+ continue
+ fi
fi
eval provides=\$module_${i}_provide
diff --git a/net/br2684ctl.sh b/net/br2684ctl.sh
index d605579..b3f6119 100644
--- a/net/br2684ctl.sh
+++ b/net/br2684ctl.sh
@@ -1,19 +1,10 @@
# Copyright (c) 2007-2008 Roy Marples <roy@marples.name>
# Released under the 2-clause BSD license.
-_br2684ctl()
-{
- if [ -x /usr/sbin/br2684ctl ]; then
- echo /usr/sbin/br2684ctl
- else
- echo /sbin/br2684ctl
- fi
-}
-
br2684ctl_depend()
{
before ppp
- program start $(_br2684ctl)
+ program start br2684ctl
}
_config_vars="$_config_vars bridge bridge_add brctl"
@@ -42,7 +33,7 @@ br2684ctl_pre_start()
esac
einfo "Starting RFC 2684 Bridge control on ${IFACE}"
- start-stop-daemon --start --exec $(_br2684ctl) --background \
+ start-stop-daemon --start --exec $(_which br2684ctl) --background \
--make-pidfile --pidfile "/var/run/br2684ctl-${IFACE}.pid" \
-- -c "${IFACE#nas*}" ${opts}
eend $?
diff --git a/net/bridge.sh b/net/bridge.sh
index 7b80ec0..4f3618a 100644
--- a/net/bridge.sh
+++ b/net/bridge.sh
@@ -4,7 +4,7 @@
bridge_depend()
{
before interface macnet
- program /sbin/brctl
+ program brctl
}
_config_vars="$_config_vars bridge bridge_add brctl"
diff --git a/net/ethtool.sh b/net/ethtool.sh
index ba5719d..4e10409 100644
--- a/net/ethtool.sh
+++ b/net/ethtool.sh
@@ -3,10 +3,7 @@
ethtool_depend()
{
- local x
- x=$(_which ethtool)
- [ -z "$x" ] && return 1
- program $x
+ program ethtool
before interface
}
diff --git a/net/ip6to4.sh b/net/ip6to4.sh
index 959a2a0..51b3858 100644
--- a/net/ip6to4.sh
+++ b/net/ip6to4.sh
@@ -6,6 +6,7 @@ _config_vars="$_config_vars link suffix relay"
ip6to4_depend()
{
after interface
+ program ip
}
ip6to4_pre_start()
diff --git a/net/iproute2.sh b/net/iproute2.sh
index 16d9a60..9b89352 100644
--- a/net/iproute2.sh
+++ b/net/iproute2.sh
@@ -3,10 +3,7 @@
iproute2_depend()
{
- local x
- x=$(_which ip)
- [ -z "$x" ] && return 1
- program $x
+ program ip
provide interface
after ifconfig
}
diff --git a/net/macchanger.sh b/net/macchanger.sh
index ad41309..4e535ec 100644
--- a/net/macchanger.sh
+++ b/net/macchanger.sh
@@ -4,6 +4,7 @@
macchanger_depend()
{
before macnet
+ # no program 'macchanger', as we have partial functionality without it
}
_config_vars="$_config_vars mac"
diff --git a/net/macvlan.sh b/net/macvlan.sh
index ccb28ea..86a659c 100644
--- a/net/macvlan.sh
+++ b/net/macvlan.sh
@@ -5,10 +5,7 @@
macvlan_depend()
{
- local x
- x=$(_which ip)
- [ -z "${X}" ] && return 1
- program $x
+ program ip
after interface
before dhcp macchanger
}
diff --git a/net/tuntap.sh b/net/tuntap.sh
index 679b097..d0f24c5 100644
--- a/net/tuntap.sh
+++ b/net/tuntap.sh
@@ -4,6 +4,7 @@
tuntap_depend()
{
before bridge interface macchanger
+ program ip openvpn tunctl
}
_config_vars="$_config_vars iproute2 openvpn tunctl"
diff --git a/net/vlan.sh b/net/vlan.sh
index ec30dd6..ff63dfd 100644
--- a/net/vlan.sh
+++ b/net/vlan.sh
@@ -3,10 +3,7 @@
vlan_depend()
{
- local x
- x=$(_which ip)
- [ -z "$x" ] && return 1
- program $x
+ program ip
after interface
before dhcp
}