• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

systemd / systemd / 15232239991

24 May 2025 08:01PM UTC coverage: 72.053% (-0.02%) from 72.07%
15232239991

push

github

web-flow
docs: add man pages for sd_device_enumerator_[new,ref,unref,unrefp] (#37586)

For #20929.

299160 of 415197 relevant lines covered (72.05%)

703671.29 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

69.23
/src/shared/socket-label.c
1
/* SPDX-License-Identifier: LGPL-2.1-or-later */
2

3
#include <netinet/in.h>
4
#include <unistd.h>
5

6
#include "errno-util.h"
7
#include "fd-util.h"
8
#include "fs-util.h"
9
#include "log.h"
10
#include "mkdir-label.h"
11
#include "selinux-util.h"
12
#include "socket-util.h"
13
#include "umask-util.h"
14

15
int socket_address_listen(
2,384✔
16
                const SocketAddress *a,
17
                int flags,
18
                int backlog,
19
                SocketAddressBindIPv6Only only,
20
                const char *bind_to_device,
21
                bool reuse_port,
22
                bool free_bind,
23
                bool transparent,
24
                mode_t directory_mode,
25
                mode_t socket_mode,
26
                const char *label) {
27

28
        _cleanup_close_ int fd = -EBADF;
2,384✔
29
        const char *p;
2,384✔
30
        int r;
2,384✔
31

32
        assert(a);
2,384✔
33

34
        r = socket_address_verify(a, true);
2,384✔
35
        if (r < 0)
2,384✔
36
                return r;
37

38
        if (socket_address_family(a) == AF_INET6 && !socket_ipv6_is_supported())
2,384✔
39
                return -EAFNOSUPPORT;
40

41
        if (label) {
2,384✔
42
                r = mac_selinux_create_socket_prepare(label);
×
43
                if (r < 0)
×
44
                        return r;
45
        }
46

47
        fd = RET_NERRNO(socket(socket_address_family(a), a->type | flags, a->protocol));
2,384✔
48

49
        if (label)
2,384✔
50
                mac_selinux_create_socket_clear();
×
51

52
        if (fd < 0)
2,384✔
53
                return fd;
54

55
        if (socket_address_family(a) == AF_INET6 && only != SOCKET_ADDRESS_DEFAULT) {
2,384✔
56
                r = setsockopt_int(fd, IPPROTO_IPV6, IPV6_V6ONLY, only == SOCKET_ADDRESS_IPV6_ONLY);
×
57
                if (r < 0)
×
58
                        return r;
59
        }
60

61
        if (IN_SET(socket_address_family(a), AF_INET, AF_INET6)) {
2,384✔
62
                if (bind_to_device) {
3✔
63
                        r = socket_bind_to_ifname(fd, bind_to_device);
1✔
64
                        if (r < 0)
1✔
65
                                return r;
66
                }
67

68
                if (reuse_port) {
3✔
69
                        r = setsockopt_int(fd, SOL_SOCKET, SO_REUSEPORT, true);
×
70
                        if (r < 0)
×
71
                                log_warning_errno(r, "SO_REUSEPORT failed: %m");
×
72
                }
73

74
                if (free_bind) {
3✔
75
                        r = socket_set_freebind(fd, socket_address_family(a), true);
×
76
                        if (r < 0)
×
77
                                log_warning_errno(r, "IP_FREEBIND/IPV6_FREEBIND failed: %m");
×
78
                }
79

80
                if (transparent) {
3✔
81
                        r = socket_set_transparent(fd, socket_address_family(a), true);
×
82
                        if (r < 0)
×
83
                                log_warning_errno(r, "IP_TRANSPARENT/IPV6_TRANSPARENT failed: %m");
×
84
                }
85
        }
86

87
        r = setsockopt_int(fd, SOL_SOCKET, SO_REUSEADDR, true);
2,384✔
88
        if (r < 0)
2,384✔
89
                return r;
90

91
        p = socket_address_get_path(a);
2,384✔
92
        if (p) {
2,384✔
93
                /* Create parents */
94
                (void) mkdir_parents_label(p, directory_mode);
2,318✔
95

96
                /* Enforce the right access mode for the socket */
97
                WITH_UMASK(~socket_mode) {
4,636✔
98
                        r = mac_selinux_bind(fd, &a->sockaddr.sa, a->size);
2,318✔
99
                        if (r == -EADDRINUSE) {
2,318✔
100
                                /* Unlink and try again */
101

102
                                if (unlink(p) < 0)
67✔
103
                                        return r; /* didn't work, return original error */
104

105
                                r = mac_selinux_bind(fd, &a->sockaddr.sa, a->size);
67✔
106
                        }
107
                        if (r < 0)
2,318✔
108
                                return r;
109
                }
110
        } else {
111
                if (bind(fd, &a->sockaddr.sa, a->size) < 0)
66✔
112
                        return -errno;
×
113
        }
114

115
        if (socket_address_can_accept(a))
2,384✔
116
                if (listen(fd, backlog) < 0)
2,266✔
117
                        return -errno;
×
118

119
        /* Let's trigger an inotify event on the socket node, so that anyone waiting for this socket to be connectable
120
         * gets notified */
121
        if (p)
2,384✔
122
                (void) touch(p);
2,318✔
123

124
        return TAKE_FD(fd);
125
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc