Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package kanku for openSUSE:Factory checked in at 2022-03-14 19:35:34 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/kanku (Old) and /work/SRC/openSUSE:Factory/.kanku.new.25692 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "kanku" Mon Mar 14 19:35:34 2022 rev:10 rq:961619 version:0.12.3 Changes: -------- --- /work/SRC/openSUSE:Factory/kanku/kanku.changes 2022-02-18 23:03:50.553408627 +0100 +++ /work/SRC/openSUSE:Factory/.kanku.new.25692/kanku.changes 2022-03-14 19:37:25.094151695 +0100 @@ -1,0 +2,17 @@ +Mon Mar 14 08:38:10 UTC 2022 - [email protected] + +- Update to version 0.12.3: + * [web] fix outdated cached settings in "Job Groups" + * [cli] added job_groups to check_configs command + * [core] fixed config read + * [core] improvments for config file handling + * [core] improved iptables/ss/netstat handling + * Fixes #boo 1196604 + * [setup] removed backup of sudoers file + * removed ssh_user from KankuFile + * [dist] change default logging to stderr/journald + * [util] VM::Image - use new buffer size while uncompressing + * [common] fixed x-scheme-handler_kanku + * [handler][bugfix] central config for host_interfaces in PortForward + +------------------------------------------------------------------- Old: ---- kanku-0.12.2.tar.xz New: ---- kanku-0.12.3.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ kanku.spec ++++++ --- /var/tmp/diff_new_pack.FNRXd3/_old 2022-03-14 19:37:25.570152266 +0100 +++ /var/tmp/diff_new_pack.FNRXd3/_new 2022-03-14 19:37:25.574152270 +0100 @@ -22,7 +22,7 @@ Name: kanku # Version gets set by obs-service-tar_scm -Version: 0.12.2 +Version: 0.12.3 Release: 0 License: GPL-3.0-only Summary: Development and continuous integration @@ -304,6 +304,16 @@ Command line client for kanku, mainly used for setup tasks and in developer mode. +%post cli + cat >> %{_localstatedir}/adm/update-messages/%{name}-%{version}-%{release}-something << EOF + +WARNING: kankus iptables/ss/netstat handling changed. + +Please re-run "kanku setup --devel" if you are using kanku in developer mode. + + +EOF + %files cli %dir /usr/share/kanku/views/cli/ %dir /usr/share/kanku/views/cli/rjob @@ -311,7 +321,10 @@ /usr/share/kanku/views/cli/rjob/*.tt /usr/lib/kanku/lib/Kanku/Cli/ /usr/lib/kanku/lib/Kanku/Cli.pm +/usr/lib/kanku/iptables_wrapper +/usr/lib/kanku/ss_netstat_wrapper /etc/bash_completion.d/kanku.sh +%ghost %{_localstatedir}/adm/update-messages/%{name}-%{version}-%{release}-something %package common-server Summary: Common server files or settings for kanku ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.FNRXd3/_old 2022-03-14 19:37:25.622152328 +0100 +++ /var/tmp/diff_new_pack.FNRXd3/_new 2022-03-14 19:37:25.626152333 +0100 @@ -1,6 +1,6 @@ <servicedata> <service name="tar_scm"> <param name="url">https://github.com/M0ses/kanku.git</param> - <param name="changesrevision">004146763606fbd08b5f629aedc9f3b1477f5037</param></service></servicedata> + <param name="changesrevision">cca272e0d9be007c988f6c320a0d8096f6c13196</param></service></servicedata> (No newline at EOF) ++++++ debian.changelog ++++++ --- /var/tmp/diff_new_pack.FNRXd3/_old 2022-03-14 19:37:25.646152357 +0100 +++ /var/tmp/diff_new_pack.FNRXd3/_new 2022-03-14 19:37:25.654152366 +0100 @@ -1,4 +1,10 @@ -kanku (0.12.2-0) UNRELEASED; urgency=medium +kanku (0.12.3-0) unstable; urgency=medium + + * updated to upstream version 0.12.3 + + -- Frank Schreiner <[email protected]> Mon, 14 Mar 2022 10:18:03 +0100 + +kanku (0.12.2-0) unstable; urgency=medium * updated to upstream version 0.10.1 ++++++ debian.dsc ++++++ --- /var/tmp/diff_new_pack.FNRXd3/_old 2022-03-14 19:37:25.698152419 +0100 +++ /var/tmp/diff_new_pack.FNRXd3/_new 2022-03-14 19:37:25.702152424 +0100 @@ -2,7 +2,7 @@ Source: kanku Binary: kanku Architecture: any -Version: 0.12.2 +Version: 0.12.3 Maintainer: Frank Schreiner <[email protected]> Standards-Version: 3.8.2 Homepage: https://github.com/M0ses/kanku ++++++ kanku-0.12.2.tar.xz -> kanku-0.12.3.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kanku-0.12.2/KankuFile new/kanku-0.12.3/KankuFile --- old/kanku-0.12.2/KankuFile 2022-02-18 09:38:15.000000000 +0100 +++ new/kanku-0.12.3/KankuFile 2022-03-14 08:43:00.000000000 +0100 @@ -2,13 +2,8 @@ Kanku::Util::IPTables: start_port: 49001 - domain_name: kanku-devel default_job: devel -ssh_user: root - -#qemu: -# user: jobs: ###### JOB: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kanku-0.12.2/Makefile new/kanku-0.12.3/Makefile --- old/kanku-0.12.2/Makefile 2022-02-18 09:38:15.000000000 +0100 +++ new/kanku-0.12.3/Makefile 2022-03-14 08:43:00.000000000 +0100 @@ -72,6 +72,8 @@ install -m 755 bin/network-setup.pl $(DESTDIR)/usr/lib/kanku/network-setup.pl install -m 755 bin/kanku $(DESTDIR)/usr/bin/kanku install -m 755 bin/kanku-app.psgi $(DESTDIR)/usr/lib/kanku/kanku-app.psgi + install -m 755 bin/ss_netstat_wrapper $(DESTDIR)/usr/lib/kanku/ss_netstat_wrapper + install -m 755 bin/iptables_wrapper $(DESTDIR)/usr/lib/kanku/iptables_wrapper sbin: install -m 755 sbin/kanku-worker $(DESTDIR)/usr/sbin/kanku-worker diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kanku-0.12.2/RELEASE-NOTES-0.12.0.md new/kanku-0.12.3/RELEASE-NOTES-0.12.0.md --- old/kanku-0.12.2/RELEASE-NOTES-0.12.0.md 2022-02-18 09:38:15.000000000 +0100 +++ new/kanku-0.12.3/RELEASE-NOTES-0.12.0.md 2022-03-14 08:43:00.000000000 +0100 @@ -1,4 +1,4 @@ -# kanku release notes 0.12.0 +# Release 0.12.0 ## New Featues diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kanku-0.12.2/bin/iptables_wrapper new/kanku-0.12.3/bin/iptables_wrapper --- old/kanku-0.12.2/bin/iptables_wrapper 1970-01-01 01:00:00.000000000 +0100 +++ new/kanku-0.12.3/bin/iptables_wrapper 2022-03-14 08:43:00.000000000 +0100 @@ -0,0 +1,41 @@ +#!/usr/bin/perl + +use strict; +use warnings; + +my $rule = $ARGV[0]; +die "No argument given!\n" unless $rule; +my ($action, $table, $chain, $args) = split /:/, $rule, 4; +die "Invalid table $table specified\n" unless $table =~ /^(nat|filter)$/; +my @iptables = ('iptables','-t', $table); +my @cmd; + +if ($action eq 'D') { + # D:<table>:<chain>:<line> + die "No valid line found" unless $args =~ /^\d+$/; + @cmd = (@iptables, '-D', $chain, $args); +} elsif ($action eq 'I') { + if ($table eq 'nat') { + # I:<table>:<chain>:<dest>:<proto>:<dport>:<to_host>:<to_port>:<comment> + my ($dest, $proto, $dport, $to_host, $to_port, $comment) = split /:/, $args, 6; + @cmd = (@iptables, '-I', $chain, '1', '-d', $dest, '-p', $proto, '--dport', $dport, '-j', 'DNAT', '--to', "$to_host:$to_port",'-m', 'comment', '--comment', "$comment"); + } elsif($table eq 'filter') { + # I:<table>:<chain>:<dest>:<proto>:<dport>:<comment> + my ($dest, $proto, $dport, $comment) = split /:/, $args, 4; + @cmd = (@iptables, '-I', $chain, '1', '-d', $dest, '-p', $proto, '--dport', $dport,'-m','state', '--state','NEW', '-j', 'ACCEPT','-m', 'comment', '--comment', "$comment"); + } else { + die "Invalid table $table specified\n"; + } +} elsif ($action eq 'L') { + # L:<table>:<chain> + @cmd = (@iptables,'-t', $table, '-L', $chain, qw{-v -n --line-numbers}); +} elsif ($action eq 'N') { + # N:<table>:<chain> + @cmd = (@iptables,'-t',$table,'-N', $chain); +} else { + die "No valid action!\n"; +} + +print "@cmd\n" if $::ENV{KANKU_DEBUG}; +system(@cmd); +exit $? >> 8; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kanku-0.12.2/bin/ss_netstat_wrapper new/kanku-0.12.3/bin/ss_netstat_wrapper --- old/kanku-0.12.2/bin/ss_netstat_wrapper 1970-01-01 01:00:00.000000000 +0100 +++ new/kanku-0.12.3/bin/ss_netstat_wrapper 2022-03-14 08:43:00.000000000 +0100 @@ -0,0 +1,11 @@ +#!/bin/bash +set -e +export LANG=C +BIN=`type -p ss` +if [ -z "$BIN" ];then + BIN=`type -p netstat` +fi + +$BIN -ltn + +exit 0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kanku-0.12.2/dist/kanku.spec new/kanku-0.12.3/dist/kanku.spec --- old/kanku-0.12.2/dist/kanku.spec 2022-02-18 09:38:15.000000000 +0100 +++ new/kanku-0.12.3/dist/kanku.spec 2022-03-14 08:43:00.000000000 +0100 @@ -304,6 +304,16 @@ Command line client for kanku, mainly used for setup tasks and in developer mode. +%post cli + cat >> %{_localstatedir}/adm/update-messages/%{name}-%{version}-%{release}-something << EOF + +WARNING: kankus iptables/ss/netstat handling changed. + +Please re-run "kanku setup --devel" if you are using kanku in developer mode. + + +EOF + %files cli %dir /usr/share/kanku/views/cli/ %dir /usr/share/kanku/views/cli/rjob @@ -311,7 +321,10 @@ /usr/share/kanku/views/cli/rjob/*.tt /usr/lib/kanku/lib/Kanku/Cli/ /usr/lib/kanku/lib/Kanku/Cli.pm +/usr/lib/kanku/iptables_wrapper +/usr/lib/kanku/ss_netstat_wrapper /etc/bash_completion.d/kanku.sh +%ghost %{_localstatedir}/adm/update-messages/%{name}-%{version}-%{release}-something %package common-server Summary: Common server files or settings for kanku diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kanku-0.12.2/dist/x-scheme-handler_kanku.xml new/kanku-0.12.3/dist/x-scheme-handler_kanku.xml --- old/kanku-0.12.2/dist/x-scheme-handler_kanku.xml 2022-02-18 09:38:15.000000000 +0100 +++ new/kanku-0.12.3/dist/x-scheme-handler_kanku.xml 2022-03-14 08:43:00.000000000 +0100 @@ -1,6 +1,8 @@ <?xml version="1.0" encoding="utf-8"?> -<mime-type xmlns="http://www.freedesktop.org/standards/shared-mime-info" type="x-scheme-handler/kanku"> - <!--Created automatically by update-mime-database. DO NOT EDIT!--> - <comment>kanku mime type</comment> - <glob pattern="KankuFile"/> -</mime-type> +<mime-info xmlns='http://www.freedesktop.org/standards/shared-mime-info'> + <mime-type type="x-scheme-handler/kanku"> + <!--Created automatically by update-mime-database. DO NOT EDIT!--> + <comment>kanku mime type</comment> + <glob pattern="KankuFile"/> + </mime-type> +</mime-info> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kanku-0.12.2/etc/logging/default.conf new/kanku-0.12.3/etc/logging/default.conf --- old/kanku-0.12.2/etc/logging/default.conf 2022-02-18 09:38:15.000000000 +0100 +++ new/kanku-0.12.3/etc/logging/default.conf 2022-03-14 08:43:00.000000000 +0100 @@ -1,11 +1,10 @@ log4perl.rootLogger=DEBUG, LOGFILE -log4perl.appender.LOGFILE=Log::Log4perl::Appender::File -log4perl.appender.LOGFILE.filename=/var/log/kanku/kanku.log -log4perl.appender.LOGFILE.mode=append +log4perl.appender.LOGFILE = Log::Log4perl::Appender::Screen +log4perl.appender.LOGFILE.stderr = 1 +log4perl.appender.LOGFILE.layout = Log::Log4perl::Layout::PatternLayout +log4perl.appender.LOGFILE.layout.ConversionPattern = %C %L - %m%n -log4perl.appender.LOGFILE.layout=PatternLayout -log4perl.appender.LOGFILE.layout.ConversionPattern=[%d][%p][%P] %C %L - %m%n log4perl.category.WebUI = DEBUG, WebUILog log4perl.appender.WebUILog=Log::Log4perl::Appender::File diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kanku-0.12.2/lib/Kanku/Cli/check_configs.pm new/kanku-0.12.3/lib/Kanku/Cli/check_configs.pm --- old/kanku-0.12.2/lib/Kanku/Cli/check_configs.pm 2022-02-18 09:38:15.000000000 +0100 +++ new/kanku-0.12.3/lib/Kanku/Cli/check_configs.pm 2022-03-14 08:43:00.000000000 +0100 @@ -68,6 +68,15 @@ $logger->debug("$job - ok"); } } + for my $job (sort Kanku::Config->instance()->job_group_list) { + eval { Kanku::Config->instance()->job_group_config($job); }; + if($@) { + $logger->error("Failed to load job config $job:\n$@"); + $result = 1; + } else { + $logger->debug("$job - ok"); + } + } } elsif ($self->devel) { eval { Kanku::Config->initialize(class=>'KankuFile'); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kanku-0.12.2/lib/Kanku/Handler/PortForward.pm new/kanku-0.12.3/lib/Kanku/Handler/PortForward.pm --- old/kanku-0.12.2/lib/Kanku/Handler/PortForward.pm 2022-02-18 09:38:15.000000000 +0100 +++ new/kanku-0.12.3/lib/Kanku/Handler/PortForward.pm 2022-03-14 08:43:00.000000000 +0100 @@ -31,7 +31,14 @@ has '+host_interface' => ( lazy => 1, - default => sub { $_[0]->job()->context()->{host_interface} || '' } + default => sub { + my $pkg = __PACKAGE__; + my $cfg = Kanku::Config->instance()->config(); + return + $_[0]->job()->context()->{host_interface} + || $cfg->{$pkg}->{host_interface} + || '' + }, ); has '+ipaddress' => ( diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kanku-0.12.2/lib/Kanku/REST.pm new/kanku-0.12.3/lib/Kanku/REST.pm --- old/kanku-0.12.2/lib/Kanku/REST.pm 2022-02-18 09:38:15.000000000 +0100 +++ new/kanku-0.12.3/lib/Kanku/REST.pm 2022-03-14 08:43:00.000000000 +0100 @@ -12,6 +12,7 @@ use Try::Tiny; use Session::Token; use Carp qw/longmess/; +use Digest::SHA qw(sha512_base64); use Kanku::Config; use Kanku::Schema; @@ -138,11 +139,12 @@ } foreach my $name (@_job_groups) { - my $job_group_config = { name => $name, groups => []}; + my $job_group_config = { name => $name, groups => [], digest => undef}; push @config , $job_group_config; my $job_group_cfg; try { $job_group_cfg = $cfg->job_group_config($name); + $job_group_config->{digest} = sha512_base64($cfg->job_group_config_plain($name)); } catch { $job_group_cfg = $_; }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kanku-0.12.2/lib/Kanku/Roles/Config/Base.pm new/kanku-0.12.3/lib/Kanku/Roles/Config/Base.pm --- old/kanku-0.12.2/lib/Kanku/Roles/Config/Base.pm 2022-02-18 09:38:15.000000000 +0100 +++ new/kanku-0.12.3/lib/Kanku/Roles/Config/Base.pm 2022-03-14 08:43:00.000000000 +0100 @@ -30,6 +30,8 @@ has config => ( is => 'rw', isa => 'HashRef', + lazy => 1, + default => sub { return Kanku::YAML::LoadFile($_[0]->file) }, ); has cf => ( @@ -67,25 +69,20 @@ } ); -sub _build_config { - my $self = shift; - return Kanku::YAML::LoadFile($self->file); -} +sub _build_config { return Kanku::YAML::LoadFile($_[0]->file) } around 'config' => sub { my ($orig, $self) = @_; my $cfg_file = $self->file->stringify; - if ( ! -f $cfg_file ) { - die "Configuration file $cfg_file doesn`t exists\n"; - } + die "Configuration file $cfg_file doesn`t exists\n" unless -f $cfg_file; + + my $mtime = $self->file->stat->mtime; + my $ltime = $self->last_modified; - if ( - $self->file->stat->mtime > $self->last_modified or - ! $self->$orig - ) { - if ( $self->last_modified ) { - $self->logger->debug("Modification of config file ($cfg_file) detected. Re-reading"); + if ($mtime != $ltime) { + if ($ltime) { + $self->logger->debug("Modification of config file detected. Re-reading ($mtime/$ltime)"); } else { $self->logger->debug("Initial read of config file '$cfg_file'"); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kanku-0.12.2/lib/Kanku/Roles/Config.pm new/kanku-0.12.3/lib/Kanku/Roles/Config.pm --- old/kanku-0.12.2/lib/Kanku/Roles/Config.pm 2022-02-18 09:38:15.000000000 +0100 +++ new/kanku-0.12.3/lib/Kanku/Roles/Config.pm 2022-03-14 08:43:00.000000000 +0100 @@ -41,11 +41,6 @@ } } -has config => ( - is => 'rw', - isa => 'HashRef', -); - has last_modified => ( is => 'rw', isa => "Int", @@ -67,34 +62,6 @@ } ); -sub _build_config { - my ($self) = @_; - my $cfg = Kanku::YAML::LoadFile($_[0]->file); - $self->logger->debug('Config from file "'.$_[0]->file.'"'); - $self->logger->debug(Dumper($cfg)); - return $cfg; -} - -around 'config' => sub { - my ($orig, $self) = @_; - my $cfg_file = $self->file->stringify; - if ( ! -f $cfg_file ) { - die "Configuration file $cfg_file doesn`t exists\n"; - } - - if ( $self->file->stat->mtime > $self->last_modified ) { - if ( $self->last_modified ) { - $self->logger->debug("Modification of config file detected. Re-reading"); - } else { - $self->logger->debug("Initial read of config file '$cfg_file'"); - } - $self->last_modified($self->file->stat->mtime); - return $self->$orig( $self->_build_config() ); - } - - return $self->$orig(); -}; - sub job_config { my ($self, $job_name) = @_; my ($cfg, $yml); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kanku-0.12.2/lib/Kanku/Setup/Roles/Common.pm new/kanku-0.12.3/lib/Kanku/Setup/Roles/Common.pm --- old/kanku-0.12.2/lib/Kanku/Setup/Roles/Common.pm 2022-02-18 09:38:15.000000000 +0100 +++ new/kanku-0.12.3/lib/Kanku/Setup/Roles/Common.pm 2022-03-14 08:43:00.000000000 +0100 @@ -375,14 +375,8 @@ if ($choice) { my $sudoers_file = file('/etc/sudoers.d/kanku'); - $self->_backup_config_file($sudoers_file); $logger->info("Adding commands for user $user in " . $sudoers_file->stringify); - my @tcmd; - for my $cmd (qw/iptables ss netstat/) { - my $cmdpath = which($cmd); - push @tcmd, $cmdpath if $cmdpath; - } - $sudoers_file->spew("$user ALL=NOPASSWD: ".join(',', @tcmd)."\n"); + $sudoers_file->spew("$user ALL=NOPASSWD: /usr/lib/kanku/ss_netstat_wrapper,/usr/lib/kanku/iptables_wrapper\n"); } return; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kanku-0.12.2/lib/Kanku/Util/IPTables.pm new/kanku-0.12.3/lib/Kanku/Util/IPTables.pm --- old/kanku-0.12.2/lib/Kanku/Util/IPTables.pm 2022-02-18 09:38:15.000000000 +0100 +++ new/kanku-0.12.3/lib/Kanku/Util/IPTables.pm 2022-03-14 08:43:00.000000000 +0100 @@ -28,9 +28,10 @@ # For future use: we could also get the ip from the serial login # but therefore we need the domain_name has [qw/domain_name/] => (is=>'rw',isa=>'Str'); -has [qw/guest_ipaddress forward_port_list iptables_chain/] => (is=>'rw',isa=>'Str'); +has [qw/guest_ipaddress forward_port_list iptables_chain iptables_wrapper/] => (is=>'rw',isa=>'Str'); has forward_ports => (is=>'rw',isa=>'ArrayRef',default=>sub { [] }); has '+iptables_chain' => (lazy=>1, default => 'KANKU_HOSTS'); +has '+iptables_wrapper' => (lazy=>1, default => '/usr/lib/kanku/iptables_wrapper'); has 'host_interface' => ( is => 'rw', @@ -44,7 +45,7 @@ default =>sub { my $host_interface = $_[0]->host_interface; if (! $host_interface ) { - my $cfg = Kanku::Config->instance()->config(); + my $cfg = Kanku::Config->instance->cf; $host_interface = $cfg->{'Kanku::Util::IPTables'}->{host_interface}; } @@ -124,11 +125,12 @@ my $domain_name = shift || $self->domain_name; my $rules = $self->get_active_rules_for_domain($domain_name); my $sudo = $self->sudo(); + my $wrapper = $self->iptables_wrapper; foreach my $table (keys(%{$rules})) { foreach my $chain (keys(%{$rules->{$table}})) { foreach my $line_number (reverse(@{$rules->{$table}->{$chain}})) { - my $cmd = $sudo."iptables -t $table -D $chain $line_number"; + my $cmd = $sudo."$wrapper D:$table:$chain:$line_number"; my @out = `$cmd 2>&1`; if ($?) { die "Error while deleting rules by executing command: $?\n\t$cmd\n\n@out" @@ -136,7 +138,7 @@ } } } -}; +} sub add_forward_rules_for_domain { my $self = shift; @@ -148,6 +150,8 @@ my $portlist = { tcp =>[],udp=>[] }; my $host_ip = $self->host_ipaddress; + my $wrapper = $self->iptables_wrapper; + my $chain = $self->iptables_chain; if (! $host_ip ) { $self->logger->warn("No ipaddress found for host_interface '".$self->host_interface."'"); @@ -167,7 +171,7 @@ # ignore case for protocol TCP = tcp my $trans = lc($1); my $port = $2; - my $app = lc($4); + my $app = lc($4||q{}); push(@{$portlist->{$trans}}, [$port, $app]); } else { die "Malicious rule detected '$rule'\n"; @@ -184,11 +188,11 @@ foreach my $port ( @{$portlist->{$proto}} ) { my $host_port = shift(@fw_ports); - my $comment = " -m comment --comment 'Kanku:host:".$self->domain_name.":$port->[1]:".$self->domain_autostart."'"; + my $comment = "Kanku:host:".$self->domain_name.":$port->[1]:".$self->domain_autostart; my @cmds = ( - "iptables -t nat -I ".$self->iptables_chain." 1 -d $host_ip -p $proto --dport $host_port -j DNAT --to $guest_ip:$port->[0] $comment", - "iptables -I ".$self->iptables_chain." 1 -d $guest_ip/32 -p $proto -m state --state NEW -m tcp --dport $port->[0] -j ACCEPT $comment" + "$wrapper I:nat:$chain:$host_ip:$proto:$host_port:$guest_ip:$port->[0]:$comment", + "$wrapper I:filter:$chain:$guest_ip/32:$proto:$port->[0]:$comment" ); for my $cmd (@cmds) { @@ -200,7 +204,7 @@ } } -}; +} sub store_iptables_autostart { my ($self, $file) = @_; @@ -222,7 +226,9 @@ sub restore_iptables_autostart { my ($self, $file) = @_; - my $sudo = $self->sudo || q{}; + my $sudo = $self->sudo || q{}; + my $wrapper = $self->iptables_wrapper; + my $chain = $self->iptables_chain; my $lines; if(-f $file) { open(my $fh, '<', $file) || die "Could not open $file: $!\n"; @@ -238,9 +244,9 @@ for my $rule (@{$restore->{$table}}) { my $cmd; if ($rule->{target} eq 'DNAT') { - $cmd = "iptables -t $table -I ".$self->iptables_chain." 1 -d $rule->{dest}/32 -p $rule->{proto} --dport $rule->{dpt} -j DNAT --to $rule->{to_host}:$rule->{to_port} -m comment --comment \"$rule->{comment}\""; + $cmd = "$wrapper I:$table:$chain:$rule->{dest}/32:$rule->{proto}:$rule->{dpt}:$rule->{to_host}:$rule->{to_port}:$rule->{comment}"; } elsif ($rule->{target} eq 'ACCEPT'){ - $cmd = "iptables -I ".$self->iptables_chain." 1 -d $rule->{dest}/32 -p $rule->{proto} -m state --state NEW -m tcp --dport $rule->{dpt} -j ACCEPT -m comment --comment \"$rule->{comment}\""; + $cmd = "$wrapper I:$table:$chain:$rule->{dest}/32:$rule->{proto}:$rule->{dpt}:$rule->{comment}"; } $self->logger->debug("Executing command '$cmd'"); @@ -254,11 +260,12 @@ sub chain_exists { my ($self, $table, $chain) = @_; - my $sudo = $self->sudo(); + my $sudo = $self->sudo(); + my $wrapper = $self->iptables_wrapper; my @rules; $table ||= 'filter'; $chain ||= $self->iptables_chain; - my $cmd = "$sudo LANG=C iptables -t $table -L $chain"; + my $cmd = "$sudo $wrapper L:$table:$chain"; my @lines = `$cmd`; return 1 unless $?; @@ -271,9 +278,10 @@ my ($self, $table, $chain) = @_; my $sudo = $self->sudo(); my @rules; - $table ||= 'filter'; - $chain ||= $self->iptables_chain; - my $cmd = "$sudo LANG=C iptables -t $table -L $chain -v -n --line-numbers"; + $table ||= 'filter'; + $chain ||= $self->iptables_chain; + my $wrapper = $self->iptables_wrapper; + my $cmd = "$sudo $wrapper L:$table:$chain"; my @lines = `$cmd`; @@ -337,17 +345,20 @@ sub _check_chain { my ($self) = @_; - my $sudo = $self->sudo(); - my $cmd = "LANG=C iptables -L ".$self->iptables_chain." -n"; + my $wrapper = $self->iptables_wrapper; + my $sudo = $self->sudo(); + my $chain = $self->iptables_chain; + my $cmd = "$wrapper L:filter:$chain"; my $out = `$sudo$cmd 2>&1`; if ($out =~ /iptables: No chain\/target\/match by that name./ ) { - $cmd = "LANG=C iptables -N ".$self->iptables_chain; + $cmd = "$wrapper N:filter:$chain"; $out = `$sudo$cmd 2>&1`; if ($?) { die "Error while creating iptables chain($?):\n\t$cmd\n\n$out\n"; } } } + sub _find_free_ports { my $self = shift; my $start_port = shift; @@ -367,24 +378,24 @@ } return @result; -}; +} has _used_ports => ( is => 'rw', isa => 'HashRef', lazy => 1, default => sub { + # TODO: make usable for tcp and udp my $self = shift; my $hostip = $self->host_ipaddress; my $result = {}; - my $cmd = ""; - # TODO: make usable for tcp and udp + my $sudo = $self->sudo; + my $lib_p = '/usr/lib/kanku'; + my $bin = "$lib_p/ss_netstat_wrapper"; + die "$bin not found" unless -f $bin; - # prepare command to read used ports from host services - my $bin = which 'ss'; - $bin = which 'netstat' unless $bin; if ($bin) { - $cmd = $self->sudo . "LANG=C $bin -ltn"; + my $cmd = $sudo.$bin; foreach my $line (`$cmd`) { chomp $line; @@ -417,15 +428,7 @@ ); sub sudo { - - my $sudo = ""; - - # if EUID not root - if ( $> != 0 ) { - $sudo = "sudo -n "; - } - - return $sudo; + return ($> != 0) ? "sudo -n " : q{}; } __PACKAGE__->meta->make_immutable; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kanku-0.12.2/lib/Kanku/Util/VM/Image.pm new/kanku-0.12.3/lib/Kanku/Util/VM/Image.pm --- old/kanku-0.12.2/lib/Kanku/Util/VM/Image.pm 2022-02-18 09:38:15.000000000 +0100 +++ new/kanku-0.12.3/lib/Kanku/Util/VM/Image.pm 2022-03-14 08:43:00.000000000 +0100 @@ -272,7 +272,7 @@ my $to_read = $final_size - $self->_total_sent; my $nbytes = $self->_nbytes; - $self->logger->info("-- Sending another $to_read bytes"); + $self->logger->info("-- Sending another $to_read bytes BufferSize"); my $f = '/dev/zero'; @@ -302,7 +302,7 @@ sub _simple_upload { my ($self, $f, $st) = @_; my $nbytes = $self->_nbytes; - $self->logger->info('-- _copy_volume -- Uploading file'); + $self->logger->info("-- _copy_volume -- Uploading file (BufferSize: $nbytes)"); open my $fh, '<', $f or croak("cannot open $f: $!"); @@ -334,15 +334,16 @@ sub _extract_and_upload { my ($self, $f, $st) = @_; + my $nbytes = $self->_nbytes; - $self->logger->info('-- _copy_volume -- Uncompressing and uploading file'); + $self->logger->info("-- _copy_volume -- Uncompressing and uploading file (BufferSize: $nbytes)"); my $z = new IO::Uncompress::AnyUncompress $f or croak("IO::Uncompress::AnyUncompress failed: $AnyUncompressError\n"); while (1) { my $data; - my $rv = $z->read(\$data); + my $rv = $z->read(\$data, $nbytes); if ($rv < 0) { croak("cannot read $f: $!"); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kanku-0.12.2/public/js/kanku/job_group.js new/kanku-0.12.3/public/js/kanku/job_group.js --- old/kanku-0.12.2/public/js/kanku/job_group.js 2022-02-18 09:38:15.000000000 +0100 +++ new/kanku-0.12.3/public/js/kanku/job_group.js 2022-03-14 08:43:00.000000000 +0100 @@ -3,7 +3,8 @@ data: function() { this.restoreSettings(); return { - allJobs: this.allJobs || [], + allJobs: this.allJobs || {jobs:[], digest:undefined}, + digest: this.digest || "", showGroupList: 0 } }, @@ -30,7 +31,10 @@ this.restoreDefaults(); } else { currentSettings = JSON.parse(currentSettingsString); - if (!currentSettings[this.job_group.name]) { + if ( + !currentSettings[this.job_group.name] || + currentSettings[this.job_group.name].digest != this.job_group.digest + ) { this.restoreDefaults(); } else { this.allJobs = currentSettings[this.job_group.name]; @@ -41,7 +45,7 @@ }, restoreDefaults: function() { console.log("Started restoreDefaults"); - this.allJobs = new Array(); + this.allJobs = {jobs:[], digest:this.job_group.digest}; console.log("Started restoreDefaults for "+this.job_group.name); console.log(this.job_group); var jgl = Object.keys(this.job_group.groups).length; @@ -50,11 +54,11 @@ for (let i=0; i < jgl;i++) { console.log("blah (i): "+i); console.log(this.job_group.groups[i]); - this.allJobs[i]=new Array(); + this.allJobs.jobs[i]=new Array(); var groups_count = this.job_group.groups[i].jobs.length; for (let a=0; a < groups_count;a++) { console.log("blah (i)(a): "+a); - this.allJobs[i][a]=true; + this.allJobs.jobs[i][a]=true; } } console.log("restoreDefaults this.allJobs:"); @@ -66,7 +70,7 @@ var url = uri_base + "/rest/job_group/trigger/"+this.job_group.name+".json"; console.log(this.allJobs); this.saveSettings(); - var data = this.allJobs; + var data = this.allJobs.jobs; axios.post(url, { data: data, is_admin: this.is_admin}).then(function(response) { show_messagebox(response.data.state, response.data.msg); }); @@ -90,7 +94,7 @@ + ' <input type=hidden name="description" :value="group.description">' + ' <div class="form-group">' + ' <div v-for="(c,a) in group.jobs">' - + ' <input type=checkbox v-model="allJobs[i][a]"> <label>{{ c }}</label>' + + ' <input type=checkbox v-model="allJobs.jobs[i][a]"> <label>{{ c }}</label>' + ' </div>' + ' </div>' + ' </div>'
