--- src/lib/globals | 9 +++++++++ src/netctl.in | 40 +++++++++------------------------------- 2 files changed, 18 insertions(+), 31 deletions(-) diff --git a/src/lib/globals b/src/lib/globals index 61e4973..a9e9751 100644 --- a/src/lib/globals +++ b/src/lib/globals @@ -132,6 +132,15 @@ load_profile() { source "$SUBR_DIR/connections/$Connection" } +## Wrapper around systemctl converting profile names to unit names +# $1: systemctl command +# $2...: profile names +sd_call() { + local command=$1 + shift + systemctl $command $(systemd-escape --template=netctl@.service "$@") +} + # Set a restrictive umask do_readable : diff --git a/src/netctl.in b/src/netctl.in index 9466e73..0df3759 100644 --- a/src/netctl.in +++ b/src/netctl.in @@ -27,28 +27,6 @@ Commands: END } -sd_booted() { - [[ -d /run/systemd/system ]] -} - -sd_escape() { - local IFS='' - # Prevent a recursion loop on backspaces - set -- "${@//\\/\\x5c}" - while [[ "$*" =~ [^[:alnum:].:_/\\] ]]; do - set -- "${@//$BASH_REMATCH/$(printf '\\x%x' "'$BASH_REMATCH")}" - done - printf '%s\n' "${@//\//-}" -} - -# Wrapper around systemctl to convert profile names to unit names -sd_call() { - local command=$1 - shift - set -- $(sd_escape "$@") - systemctl $command $(printf 'netctl@%s.service\n' "$@") -} - list() { local indicators=( '*' ' ' ) list_profiles | while read -r Profile; do @@ -105,7 +83,7 @@ switch_to() { } unit_enable() { - local unit="@systemdsystemconfdir@/netctl@$(sd_escape "$1").service" + local unit="@systemdsystemconfdir@/netctl@$(systemd-escape "$1").service" if [[ -e $unit ]]; then report_error "A unit file for profile '$1' already exists" return 1 @@ -118,14 +96,14 @@ unit_enable() { declare -p BindsToInterfaces &> /dev/null || 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" + printf "BindsTo=$(systemd-escape "$InterfaceRoot")%s.device\n" \ + $(systemd-escape "${BindsToInterfaces[@]}") >> "$unit" + printf "After=$(systemd-escape "$InterfaceRoot")%s.device\n" \ + $(systemd-escape "${BindsToInterfaces[@]}") >> "$unit" fi if (( ${#After[@]} )); then printf 'After="netctl@%s.service"\n' \ - $(sd_escape "${After[@]}") >> "$unit" + $(systemd-escape "${After[@]}") >> "$unit" fi mkdir -p "@systemdsystemconfdir@/multi-user.target.wants" echo "ln -s '$unit' '${unit/system\//system/multi-user.target.wants/}'" @@ -133,7 +111,7 @@ unit_enable() { } unit_disable() { - local unit="@systemdsystemconfdir@/netctl@$(sd_escape "$1").service" + local unit="@systemdsystemconfdir@/netctl@$(systemd-escape "$1").service" if sd_call "is-enabled --quiet" "$1" &> /dev/null; then sd_call disable "$1" fi @@ -172,14 +150,14 @@ case $# in enable|disable) ensure_root "$(basename "$0")" "unit_$1" "$2" - if sd_booted; then + if systemd-notify --booted; then systemctl daemon-reload fi;; reenable) ensure_root "$(basename "$0")" unit_disable "$2" unit_enable "$2" - if sd_booted; then + if systemd-notify --booted; then systemctl daemon-reload fi;; edit) -- 2.10.0