]> git.proxmox.com Git - pve-common.git/commitdiff
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 9ad34f1ec08f7ea90aa0681c44b3dc71a8189b62..458a2daa8015c08d584e3044b083c6f9d4698953 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 79d8cfd80bc846dd7e4dea4dacb8a15740e84e55..e0a882854d72dd8a9dd6c765e17e81bf9b3d95c3 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;