From c41e0eb9611f48ba6f5b7b28a8da7e359da70268 Mon Sep 17 00:00:00 2001 From: Yohann D'ANELLO Date: Thu, 8 Oct 2020 14:32:27 +0200 Subject: [PATCH] Support of SOAP server --- Dockerfile | 10 +- entrypoint.sh | 4 + nginx.conf.template | 7 ++ robot.conf.template | 1 + sympasoap | 170 +++++++++++++++++++++++++++++ trusted_applications.conf.template | 4 + 6 files changed, 195 insertions(+), 1 deletion(-) create mode 100755 sympasoap create mode 100644 trusted_applications.conf.template diff --git a/Dockerfile b/Dockerfile index 159bbbc..9ea4d99 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,6 +2,7 @@ FROM debian:buster ENV DEBIAN_FRONTEND=noninteractive ENV RUNLEVEL=1 +ENV PERL_MM_USE_DEFAULT=1 RUN echo exit 0 > /usr/sbin/policy-rc.d && \ chmod +x /usr/sbin/policy-rc.d @@ -30,6 +31,8 @@ RUN apt update && \ sympa && \ rm -rf /var/lib/apt/lists/* +RUN cpan install SOAP::Lite + COPY rsyslog.d /etc/rsyslog.d COPY sympa.conf.template /etc/sympa/sympa/sympa.conf.template @@ -54,6 +57,7 @@ COPY list_aliases.tt2 /etc/sympa/list_aliases.tt2 COPY transport.sympa.template /etc/sympa/transport.sympa.template COPY virtual.sympa.template /etc/sympa/virtual.sympa.template COPY robot.conf.template /etc/sympa/robot.conf.template +COPY trusted_applications.conf.template /etc/sympa/trusted_applications.conf.template COPY nginx.conf.template /etc/nginx/site.conf.template RUN mkdir /etc/sympa/transport && \ @@ -63,6 +67,9 @@ RUN mkdir /etc/sympa/transport && \ COPY wwsympa /etc/init.d/wwsympa RUN chmod +x /etc/init.d/wwsympa +COPY sympasoap /etc/init.d/sympasoap +RUN chmod +x /etc/init.d/sympasoap + RUN touch /etc/sympa/transport.sympa \ /etc/sympa/virtual.sympa && \ chown sympa:sympa /etc/sympa/*.sympa @@ -81,6 +88,7 @@ EXPOSE 25 80 465 VOLUME /var/lib/sympa \ /var/spool/sympa \ /etc/sympa/robots \ - /etc/sympa/transport + /etc/sympa/transport \ + /etc/sympa/trusted_applications ENV DOMAINS="localhost" diff --git a/entrypoint.sh b/entrypoint.sh index a793c59..1fa7b57 100755 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -21,6 +21,9 @@ do [[ -f /etc/sympa/robots/$domain.conf ]] || cat /etc/sympa/robot.conf.template | sed "s/{{MAILING_LIST_DOMAIN}}/$domain/g" > /etc/sympa/robots/$domain.conf [[ -f /etc/sympa/$domain/robot.conf ]] || ln -s /etc/sympa/robots/$domain.conf /etc/sympa/$domain/robot.conf chown -R sympa:sympa /etc/sympa/$domain /etc/sympa/robots + [[ -f /etc/sympa/trusted_applications/$domain.conf ]] || cat /etc/sympa/trusted_applications.conf.template | sed "s/{{MAILING_LIST_DOMAIN}}/$domain/g" > /etc/sympa/trusted_applications/$domain.conf + [[ -f /etc/sympa/$domain/trusted_applications.conf ]] || ln -s /etc/sympa/trusted_applications/$domain.conf /etc/sympa/$domain/trusted_applications.conf + chown -R sympa:sympa /etc/sympa/$domain /etc/sympa/robots [[ -d /var/lib/sympa/list_data/$domain ]] || mkdir -m 0750 -p /var/lib/sympa/list_data/$domain chown -R sympa:sympa /var/lib/sympa/list_data/$domain cat /etc/sympa/transport.sympa.template | sed "s/{{MAILING_LIST_DOMAIN}}/$domain/g" >> /etc/sympa/transport.sympa @@ -47,5 +50,6 @@ service postfix reload /usr/lib/sympa/bin/sympa_newaliases.pl service sympa restart service wwsympa restart +service sympasoap restart nginx -g "daemon off;" diff --git a/nginx.conf.template b/nginx.conf.template index cae5850..a124362 100644 --- a/nginx.conf.template +++ b/nginx.conf.template @@ -11,6 +11,13 @@ server { fastcgi_param PATH_INFO $fastcgi_path_info; } + location /sympasoap { + include /etc/nginx/fastcgi_params; + fastcgi_pass unix:/run/sympa/sympasoap.socket; + fastcgi_split_path_info ^(/sympasoap)(.*)$; + fastcgi_param PATH_INFO $fastcgi_path_info; + } + location /static-sympa { alias /usr/share/sympa/static_content; } diff --git a/robot.conf.template b/robot.conf.template index 69cfd6b..dbac93d 100644 --- a/robot.conf.template +++ b/robot.conf.template @@ -1 +1,2 @@ wwsympa_url https://{{MAILING_LIST_DOMAIN}}/sympa +soap_url https://{{MAILING_LIST_DOMAIN}}/sympasoap diff --git a/sympasoap b/sympasoap new file mode 100755 index 0000000..3d3b12b --- /dev/null +++ b/sympasoap @@ -0,0 +1,170 @@ +#!/bin/sh +# +# sympasoap Sympa Web Interface +# +# Written by IKEDA Soji 2011-10-20 +# +# chkconfig: 345 95 05 +# description: sympa is a powerful mailing lists management system. + +if [ -f /etc/rc.d/init.d/functions ]; then + # Source function library. + . /etc/rc.d/init.d/functions + + ## Set a flag + use_functions=1 +fi + +# SympaSoap parameters +# SympaSoap binaries directory +sympafcgidir="/usr/lib/cgi-bin/sympa" + +# Sympa config files directory +sympaconf="/etc/sympa/sympa/sympa.conf" + +FCGI_CHILDREN=5 +FCGI_USER=sympa +FCGI_GROUP=sympa +FCGI_PID_DIR=/var/run/sympa +FCGI_OPTS='-s /var/run/sympa/sympasoap.socket -M 0600 -U www-data' +if [ -e /etc/sysconfig/sympa ]; then + . /etc/sysconfig/sympa +fi + +# Current state of SympaSoap +sympasoap_status() { + if [ ${use_functions} ]; then + status sympasoap + else + if [ -f ${FCGI_PID_DIR}/sympasoap.pid ]; then + pid=`cat ${FCGI_PID_DIR}/sympasoap.pid` # | perl -pe0777 'chomp $_; s/\s+/|/g'` + if [ "$pid" != "" ]; then + running=`ps -A | egrep "$pid"` + if [ "$running" != "" ]; then + echo "$1 (pid(s) $pid) is active..." + return 0 + else + echo "$1 died, pid file remains." + return 1 + fi + fi + fi + echo "$1 is stopped." + return 3 + fi +} + +# Start SympaSoap +sympasoap_start() { + sympasoap_status > /dev/null + rc=$? + case "$rc" in + 3) + echo -n "Starting sympasoap: " + ;; + 1) + echo -n "Starting sympasoap, overwriting old pid file." + ;; + 0) + echo "SympaSoap seems active. No action will be taken." + echo "Try \"sympasoap status\" or \"sympasoap restart"\". + return + esac + + /usr/bin/spawn-fcgi -F ${FCGI_CHILDREN} -P ${FCGI_PID_DIR}/sympasoap.pid \ + -u ${FCGI_USER} -g ${FCGI_GROUP} ${FCGI_OPTS} -- \ + ${sympafcgidir}/sympa_soap_server.fcgi +} + +# Stop SympaSoap +sympasoap_stop() { + if [ -f ${FCGI_PID_DIR}/sympasoap.pid ]; then + runcount=0 + pids=`cat ${FCGI_PID_DIR}/sympasoap.pid` + if [ "$pids" != "" ]; then + for pid in "$pids"; do + killcount=0 + running=`ps -A | grep "$pid ..* sympasoap"` + while [ "$running" != "" ]; do + if [ $killcount -gt 10 ]; then + if [ ${use_functions} ]; then + failure + else + echo 'failure' + fi + return 3 + fi + + kill -TERM $pid >/dev/null 2>&1 + running=`ps -A | grep "$pid ..* $1\\.pl"` + if [ "$running" = "" ]; then + runcount=`expr $runcount + 1` + break + fi + sleep 2 + running=`ps -A | grep "$pid ..* $1\\.pl"` + if [ "$running" = "" ]; then + runcount=`expr $runcount + 1` + break + fi + killcount=`expr $killcount + 1` + done + done + fi + if [ $runcount -gt 0 ]; then + if [ ${use_functions} ]; then + success + else + echo 'success' + fi + else + echo 'died' + fi + echo + else + echo "Module $1.pl not running" + fi + return 0 +} + +# Check config files +[ -d $sympafcgidir ] || exit 0 +[ -f $sympaconf ] || exit 0 + +# See how we were called. +case "$1" in +start) + if [ ! -f /var/lock/sympasoap ]; then + echo "Starting SympaSoap: " + sympasoap_start + touch /var/lock/sympasoap + echo + else + echo "SympaSoap seems active. No action will be taken." + echo "Try \"sympasoap status\" or \"sympasoap restart"\". + fi + ;; +stop) + echo "Stopping SympaSoap: " + sympasoap_stop + if [ -f /var/lock/sympasoap ]; then + rm -f /var/lock/sympasoap + fi + ;; +status) + echo "Status of SympaSoap: " + sympasoap_status + ;; +restart) + echo "Restarting SympaSoap: " + $0 stop && $0 start + echo + ;; +*) + echo "Usage: $0 {start|stop|status|restart}" + exit 1 + ;; +esac + +exit 0 + diff --git a/trusted_applications.conf.template b/trusted_applications.conf.template new file mode 100644 index 0000000..a7ab8f3 --- /dev/null +++ b/trusted_applications.conf.template @@ -0,0 +1,4 @@ +## trusted_application +## name example +## md5password f80904e6cc6e2a51480c74ad44d37ec9 # sympasoap +## proxy_for_variables user_email,remote_host