From fde185ff6ff8650813d56e3c9f2f0bf0d03d95d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Pant=C5=AF=C4=8Dek?= Date: Sun, 17 Sep 2023 15:59:27 +0200 Subject: [PATCH] Make SQL access to mailman3 configurable. --- doc/etc-hackerbase | 9 +++++++++ src/configuration.scm | 26 +++++++++++++++++++++++++- src/mailman3.scm | 30 +++++++++++++++++------------- 3 files changed, 51 insertions(+), 14 deletions(-) diff --git a/doc/etc-hackerbase b/doc/etc-hackerbase index 48e602c..2ab2000 100644 --- a/doc/etc-hackerbase +++ b/doc/etc-hackerbase @@ -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 diff --git a/src/configuration.scm b/src/configuration.scm index 5550305..65c9b33 100644 --- a/src/configuration.scm +++ b/src/configuration.scm @@ -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=))) ) diff --git a/src/mailman3.scm b/src/mailman3.scm index 966e5b2..622860f 100644 --- a/src/mailman3.scm +++ b/src/mailman3.scm @@ -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