From 0758d0928c035e4447e657f8dab499f1a09e2c65 Mon Sep 17 00:00:00 2001 From: Dietmar Maurer Date: Wed, 26 Feb 2014 07:47:10 +0100 Subject: [PATCH] correctly copy bridge config 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 | 3 +-- data/PVE/ProcFSTools.pm | 10 ++++++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/data/PVE/Network.pm b/data/PVE/Network.pm index 9ad34f1..458a2da 100644 --- a/data/PVE/Network.pm +++ b/data/PVE/Network.pm @@ -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) { - 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 $@; diff --git a/data/PVE/ProcFSTools.pm b/data/PVE/ProcFSTools.pm index 79d8cfd..e0a8828 100644 --- a/data/PVE/ProcFSTools.pm +++ b/data/PVE/ProcFSTools.pm @@ -246,4 +246,14 @@ sub read_proc_net_dev { 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; -- 2.39.2