Make SQL access to mailman3 configurable.

This commit is contained in:
Dominik Pantůček 2023-09-17 15:59:27 +02:00
parent c7088e3f5d
commit fde185ff6f
3 changed files with 51 additions and 14 deletions

View file

@ -20,3 +20,12 @@ summary-mailto rada@brmlab.cz
# DokuWiki base directory
dokuwiki /var/www
# New mailman 3.x
mailman-version 3
# Use direct SQL access
mailman3-sql 1
# The path to SQLite3 DB file
mailman3-sql-path /var/lib/mailman3/data/mailman.db

View file

@ -40,6 +40,8 @@
*mailman2-bin*
*mailman-version*
*mailman3-bin*
*mailman3-sql*
*mailman3-sql-path*
load-configuration!
)
@ -105,6 +107,15 @@
;; %hackerbase ALL=(list) NOPASSWD:/usr/lib/mailman3/bin/mailman
(define =mailman3-bin= "sudo -u list /usr/lib/mailman3/bin/mailman")
;; A string is the default, gets converted to boolean at the end of
;; loading configuration
(define *mailman3-sql* (make-parameter #f))
(define =mailman3-sql= "0")
;; The path to SQLite3 DB file
(define *mailman3-sql-path* (make-parameter #f))
(define =mailman3-sql-path= "mailman.db")
(define (load-single-configuration! fname)
(when (file-exists? fname)
(let loop ((lines (read-lines (open-input-file fname))))
@ -146,6 +157,14 @@
((mailman3)
(when (not (*mailman3-bin*))
(*mailman3-bin* v)))
((mailman3-sql)
;; Gets to be string? - convert to boolean at the
;; end of loading!
(when (not (*mailman3-sql*))
(*mailman3-sql* v)))
((mailman3-sql-path)
(when (not (*mailman3-sql-path*))
(*mailman3-sql-path* v)))
)))
(loop (cdr lines)))))))
@ -177,6 +196,11 @@
(when (not (*mailman-version*))
(*mailman-version* =mailman-version=))
(when (not (*mailman3-bin*))
(*mailman3-bin* =mailman3-bin=)))
(*mailman3-bin* =mailman3-bin=))
(when (not (*mailman3-sql*))
(*mailman3-sql* =mailman3-sql=))
(*mailman3-sql* (not (equal? (*mailman3-sql*) "0")))
(when (not (*mailman3-sql-path*))
(*mailman3-sql-path* =mailman3-sql-path=)))
)

View file

@ -71,22 +71,26 @@
;; Returns the list of available lists
(define (list-mailman3-lists)
(filter
identity
(map (lambda (line)
(let ((sline (string-split line "@")))
(if (null? sline)
#f
(car sline))))
(get-mailman3-output-lines "lists" "-q"))))
(if (*mailman3-sql*)
(list-mailman3-sql-lists)
(filter
identity
(map (lambda (line)
(let ((sline (string-split line "@")))
(if (null? sline)
#f
(car sline))))
(get-mailman3-output-lines "lists" "-q")))))
;; Returns the list of members of given list
(define (list-mailman3-list-members lst)
(sort
(get-mailman3-output-lines "members"
(format "~A@brmlab.cz" lst)
"-e")
string-ci<?))
(if (*mailman3-sql*)
(list-mailman3-sql-list-members lst)
(sort
(get-mailman3-output-lines "members"
(format "~A@brmlab.cz" lst)
"-e")
string-ci<?)))
;; Adds given email
(define (add-email-to-mailman3-list lst email)