(define-module (glicid services openldap) #:use-module (glicid packages openldap) #:use-module (gnu services) #:use-module (gnu services shepherd) #:use-module (guix) #:use-module (guix records) #:use-module (ice-9 match) #: export ( openldap-configuration openldap-configuration? %default-slapd.conf openldap-shepherd-service openldap-service-type ) ) (define-record-type* openldap-configuration make-openldap-configuration openldap-configuration? (openldap openldap-configuration-openldap ; (default openldap) ) (arguments openldap-configuration-arguments ;list of strings (default '()) ) (log-flags openldap-configuration-logflags ;number (default "0") ) (logfile openldap-configuration-log-file ; string (default "/var/log/slapd.log") ) (pid-file openldap-configuration-pid-file ; string (default "/var/run/openldap/slapd.pid") ) (config-file openldap-configuration-config-file ; string (default %default-slapd.conf) ) ) (define %default-slapd.conf (plain-file "slapd.conf" " # Empty file for test ")) (define openldap-shepherd-service (match-lambda (($ openldap arguments log-flags logfile pid-file config-file) (list (shepherd-service (provision '(slapd) ) (documentation "Run openldap.") (requirement '(user-processes)) (respawn? #f) (start #~(make-forkexec-constructor (list ; We do not set the uri in the service definition because if we do, we need a way to ; escape double quotes. You should use slapd.conf to set the uri #$(file-append openldap "/libexec/slapd") "-d" #$log-flags "-f" #$config-file #$arguments ) #:pid-file #$pid-file #:log-file #$logfile )) (stop #~(make-kill-destructor)) ) ) ) ) ) (define openldap-service-type (service-type (name 'slapd) (extensions (list ( service-extension shepherd-root-service-type openldap-shepherd-service )) ) (description "Run @uref{https://www.openldap.org, Openldap} community developped LDAP software.") ) )