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 C5ABD697B3 for ; Tue, 19 Jan 2021 11:39:00 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 3C4F41CE3D for ; Tue, 19 Jan 2021 11:38:30 +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)) (No client certificate requested) by firstgate.proxmox.com (Proxmox) with ESMTPS id AB2791CDF4 for ; Tue, 19 Jan 2021 11:38:28 +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 7489546079 for ; Tue, 19 Jan 2021 11:38:28 +0100 (CET) From: Stoiko Ivanov To: pmg-devel@lists.proxmox.com Date: Tue, 19 Jan 2021 11:38:13 +0100 Message-Id: <20210119103815.15934-5-s.ivanov@proxmox.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210119103815.15934-1-s.ivanov@proxmox.com> References: <20210119103815.15934-1-s.ivanov@proxmox.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL 0.069 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 URIBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [spamassassin.pm] Subject: [pmg-devel] [PATCH pmg-api v3 4/6] 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: Tue, 19 Jan 2021 10:39:00 -0000 Signed-off-by: Stoiko Ivanov --- 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