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 base directory
dokuwiki /var/www 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* *mailman2-bin*
*mailman-version* *mailman-version*
*mailman3-bin* *mailman3-bin*
*mailman3-sql*
*mailman3-sql-path*
load-configuration! load-configuration!
) )
@ -105,6 +107,15 @@
;; %hackerbase ALL=(list) NOPASSWD:/usr/lib/mailman3/bin/mailman ;; %hackerbase ALL=(list) NOPASSWD:/usr/lib/mailman3/bin/mailman
(define =mailman3-bin= "sudo -u list /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) (define (load-single-configuration! fname)
(when (file-exists? fname) (when (file-exists? fname)
(let loop ((lines (read-lines (open-input-file fname)))) (let loop ((lines (read-lines (open-input-file fname))))
@ -146,6 +157,14 @@
((mailman3) ((mailman3)
(when (not (*mailman3-bin*)) (when (not (*mailman3-bin*))
(*mailman3-bin* v))) (*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))))))) (loop (cdr lines)))))))
@ -177,6 +196,11 @@
(when (not (*mailman-version*)) (when (not (*mailman-version*))
(*mailman-version* =mailman-version=)) (*mailman-version* =mailman-version=))
(when (not (*mailman3-bin*)) (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 ;; Returns the list of available lists
(define (list-mailman3-lists) (define (list-mailman3-lists)
(filter (if (*mailman3-sql*)
identity (list-mailman3-sql-lists)
(map (lambda (line) (filter
(let ((sline (string-split line "@"))) identity
(if (null? sline) (map (lambda (line)
#f (let ((sline (string-split line "@")))
(car sline)))) (if (null? sline)
(get-mailman3-output-lines "lists" "-q")))) #f
(car sline))))
(get-mailman3-output-lines "lists" "-q")))))
;; Returns the list of members of given list ;; Returns the list of members of given list
(define (list-mailman3-list-members lst) (define (list-mailman3-list-members lst)
(sort (if (*mailman3-sql*)
(get-mailman3-output-lines "members" (list-mailman3-sql-list-members lst)
(format "~A@brmlab.cz" lst) (sort
"-e") (get-mailman3-output-lines "members"
string-ci<?)) (format "~A@brmlab.cz" lst)
"-e")
string-ci<?)))
;; Adds given email ;; Adds given email
(define (add-email-to-mailman3-list lst email) (define (add-email-to-mailman3-list lst email)