Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-12-SP1:GA
SuSEfirewall2.6458
0001-ignore-bootlock-for-virtual-and-hotplugged...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 0001-ignore-bootlock-for-virtual-and-hotplugged-devices-bnc-785299.patch of Package SuSEfirewall2.6458
From e0f355177eaaaf55f498d63fe1e3d93662bab83b Mon Sep 17 00:00:00 2001 From: Matthias Gerstner <matthias.gerstner@suse.de> Date: Wed, 8 Mar 2017 15:28:25 +0100 Subject: [PATCH] ignore bootlock for virtual and hotplugged devices (bsc#785299) --- SuSEfirewall2 | 75 +++++++++++++++++++++++++++++++++++++++++++++++++++--- SuSEfirewall2_ifup | 2 +- 2 files changed, 73 insertions(+), 4 deletions(-) diff --git a/SuSEfirewall2 b/SuSEfirewall2 index 995d89a..3f33900 100755 --- a/SuSEfirewall2 +++ b/SuSEfirewall2 @@ -174,6 +174,67 @@ set_defaults() done } + +function get_device_path() +{ + local iface="$1" + /usr/bin/readlink "/sys/class/net/$iface" +} + +function match_device_path() +{ + local iface="$1" + local match="$2" + + link=`get_device_path $iface` + if [[ "$link" == *"$match"* ]]; then + return 0 + fi + + return 1 +} + +# gets a network device name as input and returns zero if it is a virtual +# device like tap/tun/bond or a physical device, non-zero otherwise +function is_virtual_device() +{ + local iface="$1" + match_device_path $iface "virtual" + return $? +} + +# like is_virtual_device() but checks whether the device is a removable, +# hot-plugged device +function is_hotplugged_device() +{ + local iface="$1" + # difficult to generically determine whether a network device is + # removable, go for USB ... + match_device_path $iface "usb" + return $? +} + +# takes a network device name as input and returns zero if we should ignore an +# active bootlock for changes on this device, otherwise non-zero +function allow_bootlock_ignore() +{ + local iface="$1" + + # skip the loopback by default + if [[ "$iface" = "lo" ]]; then + return 1 + fi + + # respect virtual or hotplugged evices + if is_virtual_device "$iface" || is_hotplugged_device "$iface"; then + return 0 + fi + + # anything else has to wait until boot finish + return 1 +} + + CONFIGURATIONSDIR_0="/etc/sysconfig/SuSEfirewall2.d/services" CONFIGURATIONSDIR_1="/usr/share/SuSEfirewall2/services" DEFAULTSDIR=("/etc/sysconfig/SuSEfirewall2.d/defaults" "/usr/share/SuSEfirewall2/defaults") @@ -206,7 +267,7 @@ if test -x /usr/bin/tty && ! /usr/bin/tty -s; then quiet=1 fi -getopttmp=`/usr/bin/getopt -o hq --long help,scriptsdir:,batch,nobatch,file:,debug,test,bootlock,bootunlock,quiet \ +getopttmp=`/usr/bin/getopt -o hqi: --long help,scriptsdir:,batch,nobatch,file:,debug,test,bootlock,bootunlock,quiet,interface: \ -n 'SuSEfirewall2' -- "$@"` [ $? != 0 ] && die 1 "getopt error" @@ -225,6 +286,9 @@ while true ; do --bootunlock) remove_bootlock=1 ; shift ;; -h|--help) help ; shift ;; -q|--quiet) quiet=1 ; shift ;; + # only used by if-{up,down} scripts to indicate the interface + # that changed + -i|--interface) up_down_iface="$2"; shift 2 ;; --) shift ; break ;; *) die 1 "getopt error"; ;; esac @@ -831,8 +895,13 @@ setlock() fi ### Locking mechanism if [ "$needlock" -ne 0 ]; then - if [ -e "$BOOTLOCKFILE" ]; then - die 0 "$BOOTLOCKFILE exists which means system boot in progress, exit." + if [ -e "$BOOTLOCKFILE" ] ; then + # ignore the bootlock, which is only a performance shortcut, in + # case a virtual or hotplugged interface has just been configured + # (bsc#785299) + if [ -z "$up_down_iface" ] || ! allow_bootlock_ignore "$up_down_iface"; then + die 0 "$BOOTLOCKFILE exists which means system boot in progress, exit." + fi fi if [ -e "$LOCKFILE" ]; then read PID < $LOCKFILE diff --git a/SuSEfirewall2_ifup b/SuSEfirewall2_ifup index 3a4d766..ef3210d 100755 --- a/SuSEfirewall2_ifup +++ b/SuSEfirewall2_ifup @@ -101,7 +101,7 @@ case "$0" in [ "$FIREWALL" = 'yes' ] || exit 0 if sfw2_active; then - /sbin/SuSEfirewall2 -q start + /sbin/SuSEfirewall2 -q -i "$iface" start fi ;; *) echo "don't know what to do" >&2 ;; -- 2.10.2
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor