summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVivien Kraus <vivien@planete-kraus.eu>2020-12-27 15:47:38 +0100
committerVivien Kraus <vivien@planete-kraus.eu>2020-12-27 15:47:38 +0100
commitfa44d7a92c1753ddddf51e29525e12ca6d057155 (patch)
treec1ba4b2da9d3f2c8850d44555331b70ad4b761ee
Add the dkim out proxy service
This service signs all inbound emails and relays them without question.
-rw-r--r--.guix-channel6
-rw-r--r--guix/vkraus/services/dkim-out-proxy.scm57
2 files changed, 63 insertions, 0 deletions
diff --git a/.guix-channel b/.guix-channel
new file mode 100644
index 0000000..8e7197b
--- /dev/null
+++ b/.guix-channel
@@ -0,0 +1,6 @@
+(channel
+ (version 0)
+ (directory "guix"))
+;; Local Variables:
+;; mode: scheme
+;; End:
diff --git a/guix/vkraus/services/dkim-out-proxy.scm b/guix/vkraus/services/dkim-out-proxy.scm
new file mode 100644
index 0000000..999d65d
--- /dev/null
+++ b/guix/vkraus/services/dkim-out-proxy.scm
@@ -0,0 +1,57 @@
+(define-module (vkraus services dkim-out-proxy)
+ #:use-module (gnu services)
+ #:use-module (gnu services shepherd)
+ #:use-module (guix gexp)
+ #:use-module (guix modules)
+ #:use-module (guix records)
+ #:use-module (gnu packages mail)
+ #:use-module (ice-9 match)
+ #:use-module (ice-9 optargs))
+
+(define-record-type* <dkim-out-proxy-configuration>
+ dkim-out-proxy-configuration
+ make-dkim-out-proxy-configuration
+ dkim-out-proxy-configuration?
+ (dkimproxy dkim-out-proxy-configuration-dkimproxy (default dkimproxy))
+ (input-port dkim-out-proxy-configuration-input-port)
+ (output-port dkim-out-proxy-configuration-output-port)
+ (domain dkim-out-proxy-configuration-domain)
+ (keyfile dkim-out-proxy-configuration-keyfile))
+
+(export <dkim-out-proxy-configuration>
+ dkim-out-proxy-configuration
+ make-dkim-out-proxy-configuration
+ dkim-out-proxy-configuration?
+ dkim-out-proxy-configuration-dkimproxy
+ dkim-out-proxy-configuration-input-port
+ dkim-out-proxy-configuration-output-port
+ dkim-out-proxy-configuration-domain
+ dkim-out-proxy-configuration-keyfile)
+
+(define dkim-out-proxy-shepherd-service
+ (match-lambda
+ (($ <dkim-out-proxy-configuration>
+ dkimproxy input-port output-port domain keyfile)
+ (list
+ (shepherd-service
+ (provision '(dkim-out))
+ (documentation "Run the dkim out proxy")
+ (requirement '(user-processes loopback syslogd))
+ (start
+ #~(make-forkexec-constructor
+ (list
+ (string-append #$dkimproxy "/bin/dkimproxy.out")
+ (string-append "--listen=localhost:" #$input-port)
+ (string-append "--relay=localhost:" #$output-port)
+ (string-append "--domain=" #$domain)
+ (string-append "--keyfile=" #$keyfile)
+ "--selector=*")))
+ (stop #~(make-kill-destructor)))))))
+
+(define-public dkim-out-proxy-service-type
+ (service-type (name 'dkim-out-proxy)
+ (extensions
+ (list
+ (service-extension
+ shepherd-root-service-type
+ dkim-out-proxy-shepherd-service)))))