Skip to content

Commit b38a3a1

Browse files
committed
daemon: SdNotify: add support for abstract unix sockets
As per https://www.freedesktop.org/software/systemd/man/latest/sd_notify.html#
1 parent 7d375ec commit b38a3a1

File tree

1 file changed

+18
-5
lines changed

1 file changed

+18
-5
lines changed

daemon/sdnotify.go

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -54,16 +54,29 @@ const (
5454
// (false, err) - notification supported, but failure happened (e.g. error connecting to NOTIFY_SOCKET or while sending data)
5555
// (true, nil) - notification supported, data has been sent
5656
func SdNotify(unsetEnvironment bool, state string) (bool, error) {
57-
socketAddr := &net.UnixAddr{
58-
Name: os.Getenv("NOTIFY_SOCKET"),
59-
Net: "unixgram",
60-
}
57+
notifySocket := os.Getenv("NOTIFY_SOCKET")
6158

6259
// NOTIFY_SOCKET not set
63-
if socketAddr.Name == "" {
60+
if notifySocket == "" {
61+
return false, nil
62+
}
63+
64+
// socket type not supported. We only support unix domain sockets
65+
// but NOTIFY_SOCKET can also use vsock
66+
if notifySocket[0] != '@' || notifySocket[0] != '/' {
6467
return false, nil
6568
}
6669

70+
// abstract unix socket. Start with a 0-byte
71+
if notifySocket[0] == '@' {
72+
notifySocket = "\x00" + notifySocket[1:]
73+
}
74+
75+
socketAddr := &net.UnixAddr{
76+
Name: notifySocket,
77+
Net: "unixgram",
78+
}
79+
6780
if unsetEnvironment {
6881
if err := os.Unsetenv("NOTIFY_SOCKET"); err != nil {
6982
return false, err

0 commit comments

Comments
 (0)