summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJouke Witteveen <j.witteveen@gmail.com>2013-05-06 19:20:25 +0200
committerJouke Witteveen <j.witteveen@gmail.com>2013-05-06 19:20:25 +0200
commit711c46457ae9fef52c7c529d89c67d0d526f73ef (patch)
tree6dd72940136b91807c4fb2c20e1070cc0b6584d5
parent2587acda28156f50149a15cad67d0c0bc1eb0bb4 (diff)
downloadnetctl-711c46457ae9fef52c7c529d89c67d0d526f73ef.tar.gz
netctl-711c46457ae9fef52c7c529d89c67d0d526f73ef.tar.xz
Improve array handling
When interpreted as an array, the empty string represents a 1-element array consisting of the empty string. This is actually very reasonable. Reported by: Thomas Bächler <thomas@archlinux.org>
-rw-r--r--src/lib/connections/bond2
-rw-r--r--src/lib/connections/bridge2
-rw-r--r--src/lib/connections/tunnel2
-rw-r--r--src/lib/connections/tuntap2
-rw-r--r--src/lib/globals2
-rw-r--r--src/lib/ip58
-rw-r--r--src/netctl.in5
7 files changed, 33 insertions, 40 deletions
diff --git a/src/lib/connections/bond b/src/lib/connections/bond
index 099e44c..ea56f3b 100644
--- a/src/lib/connections/bond
+++ b/src/lib/connections/bond
@@ -3,7 +3,7 @@
. "$SUBR_DIR/ip"
: ${IFENSLAVE:=ifenslave}
-: ${BindsToInterfaces=}
+declare -a BindsToInterfaces
bond_up() {
if is_interface "$Interface"; then
diff --git a/src/lib/connections/bridge b/src/lib/connections/bridge
index 5ad380d..56e2c84 100644
--- a/src/lib/connections/bridge
+++ b/src/lib/connections/bridge
@@ -3,7 +3,7 @@
. "$SUBR_DIR/ip"
: ${BRCTL:=brctl}
-: ${BindsToInterfaces=}
+declare -a BindsToInterfaces
bridge_up() {
if is_interface "$Interface"; then
diff --git a/src/lib/connections/tunnel b/src/lib/connections/tunnel
index fd8dee3..34882b2 100644
--- a/src/lib/connections/tunnel
+++ b/src/lib/connections/tunnel
@@ -2,7 +2,7 @@
. "$SUBR_DIR/ip"
-: ${BindsToInterfaces=}
+declare -a BindsToInterfaces
tunnel_up() {
if is_interface "$Interface"; then
diff --git a/src/lib/connections/tuntap b/src/lib/connections/tuntap
index d035262..71a8259 100644
--- a/src/lib/connections/tuntap
+++ b/src/lib/connections/tuntap
@@ -2,7 +2,7 @@
. "$SUBR_DIR/ip"
-: ${BindsToInterfaces=}
+declare -a BindsToInterfaces
tuntap_up() {
if is_interface "$Interface"; then
diff --git a/src/lib/globals b/src/lib/globals
index 94c2ac7..1d7feea 100644
--- a/src/lib/globals
+++ b/src/lib/globals
@@ -78,7 +78,7 @@ timeout_wait() {
local timeout=$1
(( timeout *= 5 ))
shift
- while ! eval "$*"; do
+ until eval "$*"; do
(( timeout-- > 0 )) || return 1
sleep 0.2
done
diff --git a/src/lib/ip b/src/lib/ip
index 8af7069..2a84c0d 100644
--- a/src/lib/ip
+++ b/src/lib/ip
@@ -51,14 +51,12 @@ ip_set() {
esac
;;
static)
- if [[ $Address ]]; then
- for addr in "${Address[@]}"; do
- if ! do_debug ip addr add "$addr" brd + dev "$Interface"; then
- report_error "Could not add address '$addr' to interface '$Interface'"
- return 1
- fi
- done
- fi
+ for addr in "${Address[@]}"; do
+ if ! do_debug ip addr add "$addr" brd + dev "$Interface"; then
+ report_error "Could not add address '$addr' to interface '$Interface'"
+ return 1
+ fi
+ done
if [[ $Gateway ]]; then
if ! do_debug ip route add default via "$Gateway" dev "$Interface"; then
report_error "Could not set gateway '$Gateway' on interface '$Interface'"
@@ -74,8 +72,8 @@ ip_set() {
;;
esac
- # Add static IP routes
- if [[ $IP && $Routes ]]; then
+ if [[ $IP ]]; then
+ # Add static IP routes
for route in "${Routes[@]}"; do
if ! do_debug ip route add $route dev "$Interface"; then
report_error "Could not add route '$route' to interface '$Interface'"
@@ -121,13 +119,11 @@ ip_set() {
sysctl -q -w "net.ipv6.conf.$interface_sysctl.accept_ra=0"
;;&
stateless|static)
- if [[ -n $Address6 ]]; then
- for addr in "${Address6[@]}"; do
- if ! do_debug ip -6 addr add $addr dev "$Interface"; then
- report_error "Could not add address '$addr' to interface '$Interface'"
- fi
- done
- fi
+ for addr in "${Address6[@]}"; do
+ if ! do_debug ip -6 addr add $addr dev "$Interface"; then
+ report_error "Could not add address '$addr' to interface '$Interface'"
+ fi
+ done
;;
esac
@@ -139,14 +135,12 @@ ip_set() {
fi
# Add static IPv6 routes
- if [[ $Routes6 ]]; then
- for route in "${Routes6[@]}"; do
- if ! do_debug ip -6 route add $route dev "$Interface"; then
- report_error "Could not add route '$route' to interface '$Interface'"
- return 1
- fi
- done
- fi
+ for route in "${Routes6[@]}"; do
+ if ! do_debug ip -6 route add $route dev "$Interface"; then
+ report_error "Could not add route '$route' to interface '$Interface'"
+ return 1
+ fi
+ done
# Set a custom gateway after DAD has finished
if [[ $IP6 == @(stateless|static) && $Gateway6 ]]; then
@@ -157,14 +151,12 @@ ip_set() {
fi
fi
- if [[ $IPCustom ]]; then
- for line in "${IPCustom[@]}"; do
- if ! do_debug ip $line; then
- report_error "Could not configure interface ($line)"
- return 1
- fi
- done
- fi
+ for line in "${IPCustom[@]}"; do
+ if ! do_debug ip $line; then
+ report_error "Could not configure interface ($line)"
+ return 1
+ fi
+ done
if [[ $Hostname ]]; then
if ! do_debug hostnamectl set-hostname "$Hostname"; then
diff --git a/src/netctl.in b/src/netctl.in
index 2d04d28..e9325e3 100644
--- a/src/netctl.in
+++ b/src/netctl.in
@@ -109,14 +109,15 @@ unit_enable() {
echo ".include @systemdsystemunitdir@/netctl@.service" > "$unit"
echo -e "\n[Unit]" >> "$unit"
[[ -n $Description ]] && echo "Description=$Description" >> "$unit"
- if [[ -n ${BindsToInterfaces=$Interface} ]]; then
+ [[ -v BindsToInterfaces ]] || BindsToInterfaces=$Interface
+ if (( ${#BindsToInterfaces[@]} )); then
: ${InterfaceRoot=sys/subsystem/net/devices/}
printf "BindsTo=$(sd_escape "$InterfaceRoot")%s.device\n" \
$(sd_escape "${BindsToInterfaces[@]}") >> "$unit"
printf "After=$(sd_escape "$InterfaceRoot")%s.device\n" \
$(sd_escape "${BindsToInterfaces[@]}") >> "$unit"
fi
- if [[ -n $After ]]; then
+ if (( ${#After[@]} )); then
printf 'After="netctl@%s.service"\n' \
$(sd_escape "${After[@]}") >> "$unit"
fi