correctly copy bridge config
authorDietmar Maurer <dietmar@proxmox.com>
Wed, 26 Feb 2014 06:47:10 +0000 (07:47 +0100)
committerDietmar Maurer <dietmar@proxmox.com>
Wed, 26 Feb 2014 06:47:10 +0000 (07:47 +0100)
Simply use IO::File to write /proc/xyz files instead of running
external program using system("echo ...") (which fails when running
in perl taint mode).

data/PVE/Network.pm
data/PVE/ProcFSTools.pm

index 9ad34f1..458a2da 100644 (file)
@@ -114,8 +114,7 @@ sub copy_bridge_config {
            my $v0 = PVE::Tools::file_read_firstline("/sys/class/net/$br0/bridge/$sysname");
            my $v1 = PVE::Tools::file_read_firstline("/sys/class/net/$br1/bridge/$sysname");
            if ($v0 ne $v1) {
            my $v0 = PVE::Tools::file_read_firstline("/sys/class/net/$br0/bridge/$sysname");
            my $v1 = PVE::Tools::file_read_firstline("/sys/class/net/$br1/bridge/$sysname");
            if ($v0 ne $v1) {
-               system("echo \"$v0\" > /sys/class/net/$br1/bridge/$sysname") == 0 ||
-                   warn "unable to set bridge config '$sysname'\n";
+               write_proc_entry("/sys/class/net/$br1/bridge/$sysname", $v0);
            }
        };
        warn $@ if $@;
            }
        };
        warn $@ if $@;
index 79d8cfd..e0a8828 100644 (file)
@@ -246,4 +246,14 @@ sub read_proc_net_dev {
     return $res;
 }
 
     return $res;
 }
 
+sub write_proc_entry {
+    my ($filename, $data) = @_;#
+
+    my $fh = IO::File->new($filename,  O_WRONLY);
+    die "unable to open file '$filename' - $!\n" if !$fh;
+    die "unable to write '$filename' - $!\n" unless print $fh $data;
+    die "closing file '$filename' failed - $!\n" unless close $fh;
+    $fh->close();
+}
+
 1;
 1;