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

Reply via email to