From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by lists.proxmox.com (Postfix) with ESMTPS id 4BB89648F3 for ; Wed, 30 Dec 2020 18:16:24 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 4337324783 for ; Wed, 30 Dec 2020 18:15:54 +0100 (CET) Received: from proxmox-new.maurer-it.com (proxmox-new.maurer-it.com [212.186.127.180]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by firstgate.proxmox.com (Proxmox) with ESMTPS id CAD792475F for ; Wed, 30 Dec 2020 18:15:52 +0100 (CET) Received: from proxmox-new.maurer-it.com (localhost.localdomain [127.0.0.1]) by proxmox-new.maurer-it.com (Proxmox) with ESMTP id 9A41B4587E for ; Wed, 30 Dec 2020 18:15:52 +0100 (CET) From: Stoiko Ivanov To: pmg-devel@lists.proxmox.com Date: Wed, 30 Dec 2020 18:15:37 +0100 Message-Id: <20201230171539.7644-3-s.ivanov@proxmox.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20201230171539.7644-1-s.ivanov@proxmox.com> References: <20201230171539.7644-1-s.ivanov@proxmox.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL 0.074 Adjusted score from AWL reputation of From: address KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment RCVD_IN_DNSWL_MED -2.3 Sender listed at https://www.dnswl.org/, medium trust SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Subject: [pmg-devel] [PATCH pmg-api v2 2/4] api: spamassassin: read local channels X-BeenThere: pmg-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox Mail Gateway development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 30 Dec 2020 17:16:24 -0000 Signed-off-by: Stoiko Ivanov --- v1->v2: * changed the transliteration (tr///) to an equivalent more common s/// src/PMG/API2/SpamAssassin.pm | 83 +++++++++++++++++++++--------------- 1 file changed, 49 insertions(+), 34 deletions(-) diff --git a/src/PMG/API2/SpamAssassin.pm b/src/PMG/API2/SpamAssassin.pm index eab02d9..6b9f8f9 100644 --- a/src/PMG/API2/SpamAssassin.pm +++ b/src/PMG/API2/SpamAssassin.pm @@ -80,50 +80,65 @@ __PACKAGE__->register_method({ my ($param) = @_; my $saversion = $Mail::SpamAssassin::VERSION; - my $channelfile = "/var/lib/spamassassin/$saversion/updates_spamassassin_org.cf"; + my $sa_update_dir = "/var/lib/spamassassin/$saversion/"; + + my $check_channel = sub { + my ($channel) = @_; + + # see sa-update source: + my $channel_file_base = $channel; + $channel_file_base =~ s/[^A-Za-z0-9-]+/_/g; + my $channelfile = "${sa_update_dir}${channel_file_base}.cf"; + + my $mtime = -1; + my $version = -1; + my $newversion = -1; + + if (-f $channelfile) { + # stat metadata cf file + $mtime = (stat($channelfile))[9]; # 9 is mtime + + # parse version from metadata cf file + my $metadata = PVE::Tools::file_read_firstline($channelfile); + if ($metadata =~ m/\s([0-9]+)$/) { + $version = $1; + } else { + warn "invalid metadata in '$channelfile'\n"; + } + } + # call sa-update to see if updates are available - my $mtime = -1; - my $version = -1; - my $newversion = -1; + my $cmd = "$SAUPDATE -v --checkonly --channel $channel"; + PVE::Tools::run_command($cmd, noerr => 1, logfunc => sub { + my ($line) = @_; - if (-f $channelfile) { - # stat metadata cf file - $mtime = (stat($channelfile))[9]; # 9 is mtime + if ($line =~ m/Update available for channel \S+: -?[0-9]+ -> ([0-9]+)/) { + $newversion = $1; + } + }); - # parse version from metadata cf file - my $metadata = PVE::Tools::file_read_firstline($channelfile); - if ($metadata =~ m/\s([0-9]+)$/) { - $version = $1; - } else { - warn "invalid metadata in '$channelfile'\n"; - } - } - # call sa-update to see if updates are available + my $result = { + channel => $channel, + }; - my $cmd = "$SAUPDATE -v --checkonly"; - PVE::Tools::run_command($cmd, noerr => 1, logfunc => sub { - my ($line) = @_; + $result->{version} = $version if $version > -1; + $result->{update_version} = $newversion if $newversion > -1; + $result->{last_updated} = $mtime if $mtime > -1; - if ($line =~ m/Update available for channel \S+: -?[0-9]+ -> ([0-9]+)/) { - $newversion = $1; + if ($newversion > $version) { + $result->{update_avail} = 1; + } else { + $result->{update_avail} = 0; } - }); - - my $result = { - channel => 'updates.spamassassin.org', + return $result; }; - $result->{version} = $version if $version > -1; - $result->{update_version} = $newversion if $newversion > -1; - $result->{last_updated} = $mtime if $mtime > -1; + my @channels = ('updates.spamassassin.org'); - if ($newversion > $version) { - $result->{update_avail} = 1; - } else { - $result->{update_avail} = 0; - } + my $localchannels = PMG::Utils::local_spamassassin_channels(); + push(@channels, map { $_->{channelurl} } @$localchannels); - return [$result]; + return [ map { $check_channel->($_) } @channels]; }}); __PACKAGE__->register_method({ -- 2.20.1