Skip to content

Commit

Permalink
Improve array handling
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
joukewitteveen committed May 6, 2013
1 parent 2587acd commit 711c464
Show file tree
Hide file tree
Showing 7 changed files with 33 additions and 40 deletions.
2 changes: 1 addition & 1 deletion src/lib/connections/bond
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
. "$SUBR_DIR/ip"

: ${IFENSLAVE:=ifenslave}
: ${BindsToInterfaces=}
declare -a BindsToInterfaces

bond_up() {
if is_interface "$Interface"; then
Expand Down
2 changes: 1 addition & 1 deletion src/lib/connections/bridge
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
. "$SUBR_DIR/ip"

: ${BRCTL:=brctl}
: ${BindsToInterfaces=}
declare -a BindsToInterfaces

bridge_up() {
if is_interface "$Interface"; then
Expand Down
2 changes: 1 addition & 1 deletion src/lib/connections/tunnel
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

. "$SUBR_DIR/ip"

: ${BindsToInterfaces=}
declare -a BindsToInterfaces

tunnel_up() {
if is_interface "$Interface"; then
Expand Down
2 changes: 1 addition & 1 deletion src/lib/connections/tuntap
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

. "$SUBR_DIR/ip"

: ${BindsToInterfaces=}
declare -a BindsToInterfaces

tuntap_up() {
if is_interface "$Interface"; then
Expand Down
2 changes: 1 addition & 1 deletion src/lib/globals
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
58 changes: 25 additions & 33 deletions src/lib/ip
Original file line number Diff line number Diff line change
Expand Up @@ -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'"
Expand All @@ -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'"
Expand Down Expand Up @@ -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

Expand All @@ -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
Expand All @@ -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
Expand Down
5 changes: 3 additions & 2 deletions src/netctl.in
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit 711c464

Please sign in to comment.