aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEinar Bjarni Halldórsson <einar@isnic.is>2026-08-16 19:09:12 +0000
committerJochen Neumeister <joneum@FreeBSD.org>2026-08-16 19:15:13 +0000
commit15033a23ac4f603e23ad01a7b649acd95be83b25 (patch)
tree7466003dddce6139760fe7c5ab9171e8f8bdd77e
parentddef84a05ac70ffe5bd15b756fc5ba30091bb7af (diff)
mail/mailman3: Update rc.d script
Fix the exit code of "service mailman status". Mailman's own status command exits 0 when it is not running and 1 when it is, which is the inverse of the rc.subr convention. Wrap it so that a running master yields 0, as service(8) consumers such as Ansible expect. Also add a start_precmd that detects an already running master via the pidfile, so that "service mailman start" no longer dumps a full click usage block on a second invocation. PR: 292404 Sponsored by: Netzkommune GmbH (cherry picked from commit ae15f89980dff827563056d876641f942a70c6dd)
-rw-r--r--mail/mailman3/Makefile2
-rw-r--r--mail/mailman3/files/mailman.in25
2 files changed, 25 insertions, 2 deletions
diff --git a/mail/mailman3/Makefile b/mail/mailman3/Makefile
index a83cf35b4de3..f3824fa8ba07 100644
--- a/mail/mailman3/Makefile
+++ b/mail/mailman3/Makefile
@@ -1,6 +1,6 @@
PORTNAME= mailman
DISTVERSION= 3.3.10
-PORTREVISION= 4
+PORTREVISION= 5
CATEGORIES= mail
MASTER_SITES= PYPI
PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
diff --git a/mail/mailman3/files/mailman.in b/mail/mailman3/files/mailman.in
index 6e6a1abb8425..43e425135755 100644
--- a/mail/mailman3/files/mailman.in
+++ b/mail/mailman3/files/mailman.in
@@ -25,10 +25,11 @@ load_rc_config $name
command_interpreter=%%PYTHON_CMD%%
command=%%PREFIX%%/bin/${name}
+start_precmd="mailman_prestart"
start_cmd="mailman_command start"
stop_cmd="mailman_command stop"
restart_cmd="mailman_command restart"
-status_cmd="mailman_command status"
+status_cmd="mailman_status"
info_cmd="mailman_command info"
extra_commands=info
@@ -37,6 +38,28 @@ pidfile="%%PREFIX%%/${name}/master.pid"
command_args="-C ${mailman_config}"
+mailman_prestart()
+{
+ rc_pid=$(check_pidfile ${pidfile} ${command_interpreter})
+ if [ -n "$rc_pid" ]; then
+ echo "Mailman already running"
+ return 1
+ fi
+}
+mailman_status()
+{
+ # Mailman status return codes:
+ # 0: No lock has been acquired by any process
+ # 1: Another master watcher is running
+ # 2: No conflicting process exists
+ # 3: Hostname from lock file doesn't match
+ mailman_command status
+ if [ $? -eq 1 ]; then
+ return 0
+ else
+ return 1
+ fi
+}
mailman_command()
{
LANG=en_US.UTF-8 /usr/bin/su -m ${name} -c "${command_interpreter} ${command} ${command_args} ${rc_arg}"