public inbox for pmg-devel@lists.proxmox.com
 help / color / mirror / Atom feed
* [pmg-devel] [PATCH pmg-api v2 0/2] sa-custom: move shadow config next to live config
@ 2024-10-04 13:47 Stoiko Ivanov
  2024-10-04 13:47 ` [pmg-devel] [PATCH pmg-api v2 1/2] sa-custom: move shadow config to the same directory Stoiko Ivanov
  2024-10-04 13:47 ` [pmg-devel] [PATCH pmg-api v2 2/2] d/postinst: move pmg-scores.cf shadow file to new location Stoiko Ivanov
  0 siblings, 2 replies; 3+ messages in thread
From: Stoiko Ivanov @ 2024-10-04 13:47 UTC (permalink / raw)
  To: pmg-devel

supersedes: https://lore.proxmox.com/pmg-devel/7d32a0e7-083e-4c2d-bcca-0dd55e0ec5cc@proxmox.com/T/#t
changes v1->v2:
* following Thomas' and Dominik's feedback simply moved the shadow file to
  the same directory as the live one (after checking what SA does when
  parsing its config) - Thanks for the suggestion!
* patch 2/2 moves the file upon package installation.

original cover-letter for v1:
the custom scores are kept in /var/cache/pmg-scores.cf, until they are
applied, by moving them to /etc/mail/spamassassin/pmg-scores.cf.
This currently happens with perl's `rename` function [0], which is a
wrapper for rename(2). `rename` does not work across filesystem
boundaries (errors out with EXDEV).

having `/var` on another filesystem is becoming less common, but
should probably be supported.

following the recommendation of [0] switch over to `File::Copy::move`,
and add some error-checking. File::Copy is shipped with
perl-modules-5.36, thus it does not introduce a new dependency

reported in our community-forum:
https://forum.proxmox.com/threads/.154814/

tested in a container with a seperate volume for `/var/cache`.

other occurences of `rename` in the repo should not be affected
(moving files within the same directory, or e.g. from /etc/pmg/master
to /etc/pmg).

[0] https://perldoc.perl.org/functions/rename

Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>


Stoiko Ivanov (2):
  sa-custom: move shadow config to the same directory
  d/postinst: move pmg-scores.cf shadow file to new location

 debian/postinst     | 11 +++++++++++
 src/PMG/SACustom.pm |  6 ++++--
 2 files changed, 15 insertions(+), 2 deletions(-)

-- 
2.39.5



_______________________________________________
pmg-devel mailing list
pmg-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pmg-devel


^ permalink raw reply	[flat|nested] 3+ messages in thread

* [pmg-devel] [PATCH pmg-api v2 1/2] sa-custom: move shadow config to the same directory
  2024-10-04 13:47 [pmg-devel] [PATCH pmg-api v2 0/2] sa-custom: move shadow config next to live config Stoiko Ivanov
@ 2024-10-04 13:47 ` Stoiko Ivanov
  2024-10-04 13:47 ` [pmg-devel] [PATCH pmg-api v2 2/2] d/postinst: move pmg-scores.cf shadow file to new location Stoiko Ivanov
  1 sibling, 0 replies; 3+ messages in thread
From: Stoiko Ivanov @ 2024-10-04 13:47 UTC (permalink / raw)
  To: pmg-devel

keeping the shadow-file in /var/cache breaks their application if
/var/cache is on another filesystem than /etc/mail/spamassassin.
Perl's `rename` function [0], which is a wrapper for rename(2).
`rename` does not work across filesystem boundaries (errors out with
EXDEV).

having `/var` on another filesystem is becoming less common, but
should probably be supported.

Instead of using some other means of file moving, just put the
shadow file in the same directory as pmg-scores.cf.
SpamAssassin only reads files ending in .(cf|pre)$ from its
config-dirs, so having both files in the same directory should not be
an issue. The use of '.new' for the shadow-file follows the naming for
/etc/network/interfaces(.new).

reported in our community-forum:
https://forum.proxmox.com/threads/.154814/

tested in a container with a seperate volume for `/var/cache`.

[0] https://perldoc.perl.org/functions/rename
[1] https://github.com/apache/spamassassin/blob/trunk/README

Suggested-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
---
 src/PMG/SACustom.pm | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/src/PMG/SACustom.pm b/src/PMG/SACustom.pm
index f91ebf2..21e8ff4 100644
--- a/src/PMG/SACustom.pm
+++ b/src/PMG/SACustom.pm
@@ -6,15 +6,17 @@ use warnings;
 use PVE::INotify;
 use Digest::SHA;
 
-my $shadow_path = "/var/cache/pmg-scores.cf";
 my $conf_path = "/etc/mail/spamassassin/pmg-scores.cf";
+my $shadow_path = "$conf_path.new";
 
 sub get_shadow_path {
     return $shadow_path;
 }
 
 sub apply_changes {
-    rename($shadow_path, $conf_path) if -f $shadow_path;
+    if (-f $shadow_path) {
+	rename($shadow_path, $conf_path) || die 'failed to apply custom scores - $!\n';
+    }
 }
 
 sub calc_digest {
-- 
2.39.5



_______________________________________________
pmg-devel mailing list
pmg-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pmg-devel


^ permalink raw reply	[flat|nested] 3+ messages in thread

* [pmg-devel] [PATCH pmg-api v2 2/2] d/postinst: move pmg-scores.cf shadow file to new location
  2024-10-04 13:47 [pmg-devel] [PATCH pmg-api v2 0/2] sa-custom: move shadow config next to live config Stoiko Ivanov
  2024-10-04 13:47 ` [pmg-devel] [PATCH pmg-api v2 1/2] sa-custom: move shadow config to the same directory Stoiko Ivanov
@ 2024-10-04 13:47 ` Stoiko Ivanov
  1 sibling, 0 replies; 3+ messages in thread
From: Stoiko Ivanov @ 2024-10-04 13:47 UTC (permalink / raw)
  To: pmg-devel

not guarding for install-mode, as the file will not exist on a fresh
install (and we need to do the stat(2) for it anyways).

did not add `|| true` to the `mv` invocation, as moving a file failing
probably warrants apt to error out.

Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
---
 debian/postinst | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/debian/postinst b/debian/postinst
index 770c944..6097f1a 100644
--- a/debian/postinst
+++ b/debian/postinst
@@ -125,6 +125,17 @@ case "$1" in
                 migrate_apt_auth_conf
             fi
         fi
+
+        old_score_location=/var/cache/pmg-scores.cf
+        new_score_location=/etc/mail/spamassassin/pmg-scores.cf.new
+        if test -e "$old_score_location"; then
+            if ! test -e "$new_score_location"; then
+                echo "moving $old_score_location to $new_score_location"
+                mv "$old_score_location" "$new_score_location"
+            else
+                echo "both $old_score_location and $new_score_location exist - please review manually"
+            fi
+        fi
     ;;
 
     abort-upgrade)
-- 
2.39.5



_______________________________________________
pmg-devel mailing list
pmg-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pmg-devel


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2024-10-04 13:47 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-10-04 13:47 [pmg-devel] [PATCH pmg-api v2 0/2] sa-custom: move shadow config next to live config Stoiko Ivanov
2024-10-04 13:47 ` [pmg-devel] [PATCH pmg-api v2 1/2] sa-custom: move shadow config to the same directory Stoiko Ivanov
2024-10-04 13:47 ` [pmg-devel] [PATCH pmg-api v2 2/2] d/postinst: move pmg-scores.cf shadow file to new location Stoiko Ivanov

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal