From c610c8597c726a428cb2ec0fc584070c1e1614e9 Mon Sep 17 00:00:00 2001 From: Stoiko Ivanov Date: Fri, 22 Feb 2019 19:51:59 +0100 Subject: [PATCH] move read_proxy_conf from PVE::API2Tools to new Utils module move the read_proxy_conf method into a new perl module 'PVE::APIServer::Utils'. It now takes the proxy_name (e.g. pveproxy, pmgproxy) as variable to be used for the configfile location (/etc/default/$proxy_name) This serves as preparation to make pmgproxy configurable in the same way as pveproxy. Signed-off-by: Stoiko Ivanov Signed-off-by: Thomas Lamprecht --- Makefile | 1 + PVE/APIServer/AnyEvent.pm | 0 PVE/APIServer/Utils.pm | 55 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 56 insertions(+) mode change 100755 => 100644 PVE/APIServer/AnyEvent.pm create mode 100644 PVE/APIServer/Utils.pm diff --git a/Makefile b/Makefile index 5c5b088..e23ee97 100644 --- a/Makefile +++ b/Makefile @@ -57,6 +57,7 @@ install: ${BTDATA} install -d -m 755 ${PERL5DIR}/PVE/APIServer install -m 0644 PVE/APIServer/AnyEvent.pm ${PERL5DIR}/PVE/APIServer install -m 0644 PVE/APIServer/Formatter.pm ${PERL5DIR}/PVE/APIServer + install -m 0644 PVE/APIServer/Utils.pm ${PERL5DIR}/PVE/APIServer install -d -m 755 ${PERL5DIR}/PVE/APIServer/Formatter install -m 0644 PVE/APIServer/Formatter/Standard.pm ${PERL5DIR}/PVE/APIServer/Formatter install -m 0644 PVE/APIServer/Formatter/Bootstrap.pm ${PERL5DIR}/PVE/APIServer/Formatter diff --git a/PVE/APIServer/AnyEvent.pm b/PVE/APIServer/AnyEvent.pm old mode 100755 new mode 100644 diff --git a/PVE/APIServer/Utils.pm b/PVE/APIServer/Utils.pm new file mode 100644 index 0000000..36b9c1f --- /dev/null +++ b/PVE/APIServer/Utils.pm @@ -0,0 +1,55 @@ +package PVE::APIServer::Utils; + +use strict; +use warnings; + +use Net::IP; + +sub read_proxy_config { + my ($proxy_name) = @_; + + my $conffile = "/etc/default/$proxy_name"; + + # Note: evaluate with bash + my $shcmd = ". $conffile;\n"; + $shcmd .= 'echo \"ALLOW_FROM:\$ALLOW_FROM\";'; + $shcmd .= 'echo \"DENY_FROM:\$DENY_FROM\";'; + $shcmd .= 'echo \"POLICY:\$POLICY\";'; + $shcmd .= 'echo \"CIPHERS:\$CIPHERS\";'; + $shcmd .= 'echo \"DHPARAMS:\$DHPARAMS\";'; + $shcmd .= 'echo \"HONOR_CIPHER_ORDER:\$HONOR_CIPHER_ORDER\";'; + $shcmd .= 'echo \"COMPRESSION:\$COMPRESSION\";'; + + my $data = -f $conffile ? `bash -c "$shcmd"` : ''; + + my $res = {}; + + while ($data =~ s/^(.*)\n//) { + my ($key, $value) = split(/:/, $1, 2); + next if !defined($value) || $value eq ''; + if ($key eq 'ALLOW_FROM' || $key eq 'DENY_FROM') { + my $ips = []; + foreach my $ip (split(/,/, $value)) { + $ip = "0/0" if $ip eq 'all'; + push @$ips, Net::IP->new($ip) || die Net::IP::Error() . "\n"; + } + $res->{$key} = $ips; + } elsif ($key eq 'POLICY') { + die "unknown policy '$value'\n" if $value !~ m/^(allow|deny)$/; + $res->{$key} = $value; + } elsif ($key eq 'CIPHERS') { + $res->{$key} = $value; + } elsif ($key eq 'DHPARAMS') { + $res->{$key} = $value; + } elsif ($key eq 'HONOR_CIPHER_ORDER' || $key eq 'COMPRESSION') { + die "unknown value '$value' - use 0 or 1\n" if $value !~ m/^(0|1)$/; + $res->{$key} = $value; + } else { + # silently skip everythin else? + } + } + + return $res; +} + +1; -- 2.39.2