implémentation de network_interfaces_remove_iface[s]

This commit is contained in:
Jephté Clain 2014-02-07 14:52:17 +04:00
parent ca2fabf6ca
commit 7c5d6e1125
1 changed files with 102 additions and 3 deletions

View File

@ -508,7 +508,6 @@ $1 == "iface" {
}
$1 ~ /^(allow-)?auto$/ {
for (i = 2; i <= NF; i++) {
print "auto: " $i ", iface=" iface
if ($i == iface) {
have_auto = 1
}
@ -518,7 +517,6 @@ print "auto: " $i ", iface=" iface
}
$1 == "allow-hotplug" {
for (i = 2; i <= NF; i++) {
print "hotplug: " $i ", iface=" iface
if ($i == iface) {
have_hotplug = 1
}
@ -554,8 +552,109 @@ function network_interfaces_check_confip() {
__network_interfaces_check_confip
}
function __network_interfaces_remove_iface() {
awkrun -f iface="$1" '
function match_iface(iface, line) {
if (line == "") line = $0 " "
return line ~ (" " iface " ")
}
function remove_auto_iface(iface, line) {
if (line == "") line = $0 " "
gsub(" " iface " ", " ", line)
return line
}
function print_auto_iface(line) {
if (line ~ /^(allow-)?auto *$/) {
# une seule interface sur la ligne: ne pas l"afficher
} else {
# supprimer l"interface de la ligne
sub(/ *$/, "", line)
print line
}
}
function remove_hotplug_iface(iface, line) {
if (line == "") line = $0
if (line !~ / $/) line = line " "
gsub(" " iface " ", " ", line)
return line
}
function print_hotplug_iface(line) {
if (line ~ /^allow-hotplug *$/) {
# une seule interface sur la ligne: ne pas l"afficher
} else {
# supprimer l"interface de la ligne
sub(/ *$/, "", line)
print line
}
}
BEGIN {
in_iface = 0
found_iface = 0
modified = 0
}
!found_iface && $1 == "iface" && $2 == iface && $3 == "inet" {
in_iface = 1
found_iface = 1
modified = 1
next
}
$1 == "iface" {
in_iface = 0
}
$1 ~ /^(allow-)?auto$/ {
in_iface = 0
if (match_iface(iface)) {
print_auto_iface(remove_auto_iface(iface))
modified = 1
next
}
}
$1 == "allow-hotplug" {
in_iface = 0
if (match_iface(iface)) {
print_hotplug_iface(remove_hotplug_iface(iface))
modified = 1
next
}
}
!in_iface { print }
END {
if (modified) exit 0
else exit 1
}'
}
function network_interfaces_remove_iface() {
:
# Supprimer dans le fichier $2(=/etc/network/interfaces) toute la
# configuration qui concerne l'interface $1
local iface="$1" nifile="${2:-/etc/network/interfaces}"
local tmpfile; ac_set_tmpfile tmpfile
local modified
if __network_interfaces_remove_iface "$iface" <"$nifile" >"$tmpfile"; then
cat "$tmpfile" >"$nifile"
modified=1
fi
ac_clean "$tmpfile"
[ -n "$modified" ]
}
function network_interfaces_remove_ifaces() {
# Supprimer dans le fichier $2(=/etc/network/interfaces) toute la
# configuration qui concerne les interfaces du tableau $1=(ifaces)
local -a __niri_ifaces; array_copy __niri_ifaces "${1:-ifaces}"
local nifile="${2:-/etc/network/interfaces}"
local workfile; ac_set_tmpfile workfile
local tmpfile; ac_set_tmpfile tmpfile
local iface modified
cat "$nifile" >"$workfile"
for iface in "${__niri_ifaces[@]}"; do
if __network_interfaces_remove_iface "$iface" <"$workfile" >"$tmpfile"; then
cat "$tmpfile" >"$workfile"
modified=1
fi
done
[ -n "$modified" ] && cat "$workfile" >"$nifile"
ac_clean "$workfile" "$tmpfile"
[ -n "$modified" ]
}
function network_interfaces_add_confbr() {