From: Dietmar Maurer Date: Mon, 19 Mar 2012 12:30:40 +0000 (+0100) Subject: fix bug #116, #103: try to keep ordering in /etc/network/interfaces X-Git-Url: https://git.proxmox.com/?p=pve-common.git;a=commitdiff_plain;h=ed4e6e0c5105791111f4c76a0ac5bfd6d63087c7 fix bug #116, #103: try to keep ordering in /etc/network/interfaces --- diff --git a/Makefile b/Makefile index 1b8d0e1..dac4643 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ RELEASE=2.0 VERSION=1.0 -PKGREL=19 +PKGREL=20 PACKAGE=libpve-common-perl diff --git a/data/PVE/INotify.pm b/data/PVE/INotify.pm index 12dc11b..110e034 100644 --- a/data/PVE/INotify.pm +++ b/data/PVE/INotify.pm @@ -727,9 +727,11 @@ sub read_etc_network_interfaces { my $d = $ifaces->{$i}; while (defined ($line = <$fh>)) { - if ($line =~ m/^#(.*)\s*$/) { - $d->{comment} = '' if !$d->{comment}; - $d->{comment} .= PVE::Tools::decode_text($1) . "\n"; + if ($line =~ m/^\s*#(.*)\s*$/) { + # NOTE: we use 'comments' instead of 'comment' to + # avoid automatic utf8 conversion + $d->{comments} = '' if !$d->{comments}; + $d->{comments} .= "$1\n"; } elsif ($line =~ m/^\s+((\S+)\s+(.+))$/) { my $option = $1; my ($id, $value) = ($2, $3); @@ -876,10 +878,10 @@ sub __interface_to_string { $raw .= "\t$option\n"; } - # add comments - my $comment = $d->{comment} || ''; - foreach my $cl (split(/\n/, $comment)) { - $raw .= '#' . PVE::Tools::encode_text($cl) . "\n"; + # add comments + my $comments = $d->{comments} || ''; + foreach my $cl (split(/\n/, $comments)) { + $raw .= "#$cl\n"; } $raw .= "\n"; @@ -894,14 +896,48 @@ sub write_etc_network_interfaces { my $printed = {}; + my $if_type_hash = { + loopback => 10, + eth => 20, + bond => 30, + bridge => 40, + }; + + my $lookup_type_prio = sub { + my $iface = shift; + + my $alias = 0; + if ($iface =~ m/^(\S+):\d+$/) { + $iface = $1; + $alias = 1; + } + + my $pri; + if ($iface eq 'lo') { + $pri = $if_type_hash->{loopback}; + } elsif ($iface =~ m/^eth\d+$/) { + $pri = $if_type_hash->{eth} + $alias; + } elsif ($iface =~ m/^bond\d+$/) { + $pri = $if_type_hash->{bond} + $alias; + } elsif ($iface =~ m/^vmbr\d+$/) { + $pri = $if_type_hash->{bridge} + $alias; + } + + return $pri || ($if_type_hash->{unknown} + $alias); + }; + foreach my $iface (sort { my $ref1 = $ifaces->{$a}; my $ref2 = $ifaces->{$b}; - my $p1 = $ref1->{priority} || 100000; - my $p2 = $ref2->{priority} || 100000; + my $p1 = &$lookup_type_prio($a); + my $p2 = &$lookup_type_prio($b); return $p1 <=> $p2 if $p1 != $p2; + $p1 = $ref1->{priority} || 100000; + $p2 = $ref2->{priority} || 100000; + + return $p1 <=> $p2 if $p1 != $p2; return $a cmp $b; } keys %$ifaces) { diff --git a/debian/changelog b/debian/changelog index e373585..125d073 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +libpve-common-perl (1.0-20) unstable; urgency=low + + * fix bug #116, #103: try to keep ordering in /etc/network/interfaces + + -- Proxmox Support Team Mon, 19 Mar 2012 13:30:07 +0100 + libpve-common-perl (1.0-19) unstable; urgency=low * add dns-name format