civodul pushed a commit to branch wip-syslogd
in repository shepherd.
commit c53ca02f66938d3d1718c87158f77b4821991883
Author: Ludovic Courtès <[email protected]>
AuthorDate: Tue Jul 30 19:00:13 2024 +0200
squash! Use <endpoint> rather than Unix-domain file names.
---
modules/shepherd/service/system-log.scm | 32 ++++++++++++--------------------
tests/services/system-log.sh | 9 +++++++--
2 files changed, 19 insertions(+), 22 deletions(-)
diff --git a/modules/shepherd/service/system-log.scm
b/modules/shepherd/service/system-log.scm
index 7311784..3e601ec 100644
--- a/modules/shepherd/service/system-log.scm
+++ b/modules/shepherd/service/system-log.scm
@@ -18,6 +18,7 @@
(define-module (shepherd service system-log)
#:use-module (fibers)
+ #:use-module (shepherd endpoints)
#:use-module (shepherd service)
#:use-module (shepherd support)
#:autoload (shepherd config) (%localstatedir)
@@ -141,22 +142,6 @@ or a <system-log-message> object."
((? eof-object? eof) eof)
(line (parse-system-log-message line))))
-(define* (open-socket file #:key (backlog 512))
- "Open a datagram socket listening on @var{file} and return it."
- (let ((socket (socket AF_UNIX
- (logior SOCK_DGRAM SOCK_NONBLOCK SOCK_CLOEXEC)
- 0)))
- (catch 'system-error
- (lambda ()
- (bind socket AF_UNIX file))
- (lambda args
- (if (= (system-error-errno args) EADDRINUSE)
- (begin
- (false-if-exception (delete-file file))
- (bind socket AF_UNIX file))
- (apply throw args))))
- socket))
-
(define (wait-for-input-or-message ports channel)
"Wait for input on @var{ports}, a list of input ports, or for messages on
@var{channel}. Return one of the elements of @var{ports} when input is
@@ -358,8 +343,15 @@ the file(s) returned by @var{log-files} for each message."
(set-record-type-printer! <system-log> print-system-log)
+(define (file->endpoint file)
+ "Return a endpoint for Unix-domain socket @var{file}."
+ (endpoint (make-socket-address AF_UNIX file)
+ #:name "Unix-domain endpoint"
+ #:style SOCK_DGRAM))
+
(define* (system-log-service #:optional
- (sources (list (system-log-file)))
+ (sources
+ (list (file->endpoint (system-log-file))))
#:key
(provision '(system-log syslogd))
(requirement '())
@@ -369,8 +361,8 @@ the file(s) returned by @var{log-files} for each message."
(max-silent-time (* 20 60)))
"Return the system log service (@dfn{syslogd}) with the given
@var{provision} and @var{requirement} (lists of symbols). The service accepts
-connections on @var{sources}, a list of Unix-domain sockets; optionally it
-also reads messages from @code{#:kernel-log-file}, which defaults to
+connections on @var{sources}, a list of @code{<endpoint>} objects; optionally
+it also reads messages from @code{#:kernel-log-file}, which defaults to
@file{/proc/kmsg} when running as root.
Log messages are passed to @var{log-files}, a one-argument procedure that must
@@ -380,7 +372,7 @@ message has been logged for more than @var{max-silent-time}
seconds."
#:requirement requirement
#:start (lambda ()
(let ((channel (make-channel))
- (ports (append (map open-socket sources)
+ (ports (append (open-sockets sources)
(if kernel-log-file
(list (open kernel-log-file
(logior O_RDONLY
diff --git a/tests/services/system-log.sh b/tests/services/system-log.sh
index f357c51..0b10d8f 100644
--- a/tests/services/system-log.sh
+++ b/tests/services/system-log.sh
@@ -38,7 +38,8 @@ trap "cat $log || true;
test -f $pid && kill \`cat $pid\` || true; rm -f $pid" EXIT
cat > "$conf" <<EOF
-(use-modules (shepherd service system-log))
+(use-modules (shepherd service system-log)
+ (shepherd endpoints))
(define (log-files message)
(pk 'log-files->
@@ -54,8 +55,12 @@ cat > "$conf" <<EOF
(else
(list "$syslog_file")))))
+(define %endpoint
+ (endpoint (make-socket-address AF_UNIX "$syslog_socket")
+ #:style SOCK_DGRAM))
+
(register-services
- (list (system-log-service (list "$syslog_socket")
+ (list (system-log-service (list %endpoint)
#:log-files log-files
#:kernel-log-file "$kmsg")
(service