mirror of
https://github.com/systemd/systemd-stable.git
synced 2025-02-15 05:57:26 +03:00
Merge pull request #147 from poettering/cmsg
util: introduce CMSG_FOREACH() macro and make use of it everywhere
This commit is contained in:
commit
a8467435a0
@ -1546,7 +1546,7 @@ static int manager_dispatch_notify_fd(sd_event_source *source, int fd, uint32_t
|
||||
return -errno;
|
||||
}
|
||||
|
||||
for (cmsg = CMSG_FIRSTHDR(&msghdr); cmsg; cmsg = CMSG_NXTHDR(&msghdr, cmsg)) {
|
||||
CMSG_FOREACH(cmsg, &msghdr) {
|
||||
if (cmsg->cmsg_level == SOL_SOCKET && cmsg->cmsg_type == SCM_RIGHTS) {
|
||||
|
||||
fd_array = (int*) CMSG_DATA(cmsg);
|
||||
|
@ -696,12 +696,11 @@ int setup_netns(int netns_storage_socket[2]) {
|
||||
} else {
|
||||
/* Yay, found something, so let's join the namespace */
|
||||
|
||||
for (cmsg = CMSG_FIRSTHDR(&mh); cmsg; cmsg = CMSG_NXTHDR(&mh, cmsg)) {
|
||||
CMSG_FOREACH(cmsg, &mh)
|
||||
if (cmsg->cmsg_level == SOL_SOCKET && cmsg->cmsg_type == SCM_RIGHTS) {
|
||||
assert(cmsg->cmsg_len == CMSG_LEN(sizeof(int)));
|
||||
netns = *(int*) CMSG_DATA(cmsg);
|
||||
}
|
||||
}
|
||||
|
||||
if (setns(netns, CLONE_NEWNET) < 0) {
|
||||
r = -errno;
|
||||
|
@ -599,7 +599,7 @@ static int manager_on_notify(sd_event_source *s, int fd, uint32_t revents, void
|
||||
|
||||
cmsg_close_all(&msghdr);
|
||||
|
||||
for (cmsg = CMSG_FIRSTHDR(&msghdr); cmsg; cmsg = CMSG_NXTHDR(&msghdr, cmsg)) {
|
||||
CMSG_FOREACH(cmsg, &msghdr) {
|
||||
if (cmsg->cmsg_level == SOL_SOCKET &&
|
||||
cmsg->cmsg_type == SCM_CREDENTIALS &&
|
||||
cmsg->cmsg_len == CMSG_LEN(sizeof(struct ucred))) {
|
||||
|
@ -1177,7 +1177,7 @@ int server_process_datagram(sd_event_source *es, int fd, uint32_t revents, void
|
||||
return -errno;
|
||||
}
|
||||
|
||||
for (cmsg = CMSG_FIRSTHDR(&msghdr); cmsg; cmsg = CMSG_NXTHDR(&msghdr, cmsg)) {
|
||||
CMSG_FOREACH(cmsg, &msghdr) {
|
||||
|
||||
if (cmsg->cmsg_level == SOL_SOCKET &&
|
||||
cmsg->cmsg_type == SCM_CREDENTIALS &&
|
||||
|
@ -1588,7 +1588,7 @@ static int client_receive_message_raw(sd_event_source *s, int fd,
|
||||
} else if ((size_t)len < sizeof(DHCPPacket))
|
||||
return 0;
|
||||
|
||||
for (cmsg = CMSG_FIRSTHDR(&msg); cmsg; cmsg = CMSG_NXTHDR(&msg, cmsg)) {
|
||||
CMSG_FOREACH(cmsg, &msg) {
|
||||
if (cmsg->cmsg_level == SOL_PACKET &&
|
||||
cmsg->cmsg_type == PACKET_AUXDATA &&
|
||||
cmsg->cmsg_len == CMSG_LEN(sizeof(struct tpacket_auxdata))) {
|
||||
|
@ -902,7 +902,7 @@ static int server_receive_message(sd_event_source *s, int fd,
|
||||
else if ((size_t)len < sizeof(DHCPMessage))
|
||||
return 0;
|
||||
|
||||
for (cmsg = CMSG_FIRSTHDR(&msg); cmsg; cmsg = CMSG_NXTHDR(&msg, cmsg)) {
|
||||
CMSG_FOREACH(cmsg, &msg) {
|
||||
if (cmsg->cmsg_level == IPPROTO_IP &&
|
||||
cmsg->cmsg_type == IP_PKTINFO &&
|
||||
cmsg->cmsg_len == CMSG_LEN(sizeof(struct in_pktinfo))) {
|
||||
|
@ -222,7 +222,7 @@ int bus_container_connect_kernel(sd_bus *b) {
|
||||
if (recvmsg(pair[0], &mh, MSG_NOSIGNAL|MSG_CMSG_CLOEXEC) < 0)
|
||||
return -errno;
|
||||
|
||||
for (cmsg = CMSG_FIRSTHDR(&mh); cmsg; cmsg = CMSG_NXTHDR(&mh, cmsg))
|
||||
CMSG_FOREACH(cmsg, &mh)
|
||||
if (cmsg->cmsg_level == SOL_SOCKET && cmsg->cmsg_type == SCM_RIGHTS) {
|
||||
int *fds;
|
||||
unsigned n_fds;
|
||||
|
@ -502,7 +502,6 @@ static int bus_socket_read_auth(sd_bus *b) {
|
||||
struct cmsghdr cmsghdr;
|
||||
uint8_t buf[CMSG_SPACE(sizeof(int) * BUS_FDS_MAX)];
|
||||
} control;
|
||||
struct cmsghdr *cmsg;
|
||||
bool handle_cmsg = false;
|
||||
|
||||
assert(b);
|
||||
@ -552,8 +551,10 @@ static int bus_socket_read_auth(sd_bus *b) {
|
||||
|
||||
b->rbuffer_size += k;
|
||||
|
||||
if (handle_cmsg)
|
||||
for (cmsg = CMSG_FIRSTHDR(&mh); cmsg; cmsg = CMSG_NXTHDR(&mh, cmsg))
|
||||
if (handle_cmsg) {
|
||||
struct cmsghdr *cmsg;
|
||||
|
||||
CMSG_FOREACH(cmsg, &mh)
|
||||
if (cmsg->cmsg_level == SOL_SOCKET &&
|
||||
cmsg->cmsg_type == SCM_RIGHTS) {
|
||||
int j;
|
||||
@ -567,6 +568,7 @@ static int bus_socket_read_auth(sd_bus *b) {
|
||||
} else
|
||||
log_debug("Got unexpected auxiliary data with level=%d and type=%d",
|
||||
cmsg->cmsg_level, cmsg->cmsg_type);
|
||||
}
|
||||
|
||||
r = bus_socket_auth_verify(b);
|
||||
if (r != 0)
|
||||
@ -916,7 +918,6 @@ int bus_socket_read_message(sd_bus *bus) {
|
||||
struct cmsghdr cmsghdr;
|
||||
uint8_t buf[CMSG_SPACE(sizeof(int) * BUS_FDS_MAX)];
|
||||
} control;
|
||||
struct cmsghdr *cmsg;
|
||||
bool handle_cmsg = false;
|
||||
|
||||
assert(bus);
|
||||
@ -961,8 +962,10 @@ int bus_socket_read_message(sd_bus *bus) {
|
||||
|
||||
bus->rbuffer_size += k;
|
||||
|
||||
if (handle_cmsg)
|
||||
for (cmsg = CMSG_FIRSTHDR(&mh); cmsg; cmsg = CMSG_NXTHDR(&mh, cmsg))
|
||||
if (handle_cmsg) {
|
||||
struct cmsghdr *cmsg;
|
||||
|
||||
CMSG_FOREACH(cmsg, &mh)
|
||||
if (cmsg->cmsg_level == SOL_SOCKET &&
|
||||
cmsg->cmsg_type == SCM_RIGHTS) {
|
||||
int n, *f;
|
||||
@ -990,6 +993,7 @@ int bus_socket_read_message(sd_bus *bus) {
|
||||
} else
|
||||
log_debug("Got unexpected auxiliary data with level=%d and type=%d",
|
||||
cmsg->cmsg_level, cmsg->cmsg_type);
|
||||
}
|
||||
|
||||
r = bus_socket_read_message_need(bus, &need);
|
||||
if (r < 0)
|
||||
|
@ -1442,7 +1442,7 @@ static int socket_recv_message(int fd, struct iovec *iov, uint32_t *_group, bool
|
||||
return (errno == EAGAIN || errno == EINTR) ? 0 : -errno;
|
||||
}
|
||||
|
||||
for (cmsg = CMSG_FIRSTHDR(&msg); cmsg; cmsg = CMSG_NXTHDR(&msg, cmsg)) {
|
||||
CMSG_FOREACH(cmsg, &msg) {
|
||||
if (cmsg->cmsg_level == SOL_SOCKET &&
|
||||
cmsg->cmsg_type == SCM_CREDENTIALS &&
|
||||
cmsg->cmsg_len == CMSG_LEN(sizeof(struct ucred))) {
|
||||
|
@ -113,7 +113,8 @@ static int dns_stream_identify(DnsStream *s) {
|
||||
|
||||
mh.msg_control = &control;
|
||||
mh.msg_controllen = sl;
|
||||
for (cmsg = CMSG_FIRSTHDR(&mh); cmsg; cmsg = CMSG_NXTHDR(&mh, cmsg)) {
|
||||
|
||||
CMSG_FOREACH(cmsg, &mh) {
|
||||
|
||||
if (cmsg->cmsg_level == IPPROTO_IPV6) {
|
||||
assert(s->peer.sa.sa_family == AF_INET6);
|
||||
|
@ -920,7 +920,7 @@ int manager_recv(Manager *m, int fd, DnsProtocol protocol, DnsPacket **ret) {
|
||||
} else
|
||||
return -EAFNOSUPPORT;
|
||||
|
||||
for (cmsg = CMSG_FIRSTHDR(&mh); cmsg; cmsg = CMSG_NXTHDR(&mh, cmsg)) {
|
||||
CMSG_FOREACH(cmsg, &mh) {
|
||||
|
||||
if (cmsg->cmsg_level == IPPROTO_IPV6) {
|
||||
assert(p->family == AF_INET6);
|
||||
|
@ -467,4 +467,7 @@ do { \
|
||||
} \
|
||||
struct __useless_struct_to_allow_trailing_semicolon__
|
||||
|
||||
#define CMSG_FOREACH(cmsg, mh) \
|
||||
for ((cmsg) = CMSG_FIRSTHDR(mh); (cmsg); (cmsg) = CMSG_NXTHDR((mh), (cmsg)))
|
||||
|
||||
#include "log.h"
|
||||
|
@ -5520,7 +5520,7 @@ int openpt_in_namespace(pid_t pid, int flags) {
|
||||
if (recvmsg(pair[0], &mh, MSG_NOSIGNAL|MSG_CMSG_CLOEXEC) < 0)
|
||||
return -errno;
|
||||
|
||||
for (cmsg = CMSG_FIRSTHDR(&mh); cmsg; cmsg = CMSG_NXTHDR(&mh, cmsg))
|
||||
CMSG_FOREACH(cmsg, &mh)
|
||||
if (cmsg->cmsg_level == SOL_SOCKET && cmsg->cmsg_type == SCM_RIGHTS) {
|
||||
int *fds;
|
||||
unsigned n_fds;
|
||||
@ -5908,7 +5908,7 @@ void cmsg_close_all(struct msghdr *mh) {
|
||||
|
||||
assert(mh);
|
||||
|
||||
for (cmsg = CMSG_FIRSTHDR(mh); cmsg; cmsg = CMSG_NXTHDR(mh, cmsg))
|
||||
CMSG_FOREACH(cmsg, mh)
|
||||
if (cmsg->cmsg_level == SOL_SOCKET && cmsg->cmsg_type == SCM_RIGHTS)
|
||||
close_many((int*) CMSG_DATA(cmsg), (cmsg->cmsg_len - CMSG_LEN(0)) / sizeof(int));
|
||||
}
|
||||
|
@ -528,7 +528,7 @@ static int manager_receive_response(sd_event_source *source, int fd, uint32_t re
|
||||
}
|
||||
|
||||
recv_time = NULL;
|
||||
for (cmsg = CMSG_FIRSTHDR(&msghdr); cmsg; cmsg = CMSG_NXTHDR(&msghdr, cmsg)) {
|
||||
CMSG_FOREACH(cmsg, &msghdr) {
|
||||
if (cmsg->cmsg_level != SOL_SOCKET)
|
||||
continue;
|
||||
|
||||
|
@ -875,7 +875,7 @@ static int on_worker(sd_event_source *s, int fd, uint32_t revents, void *userdat
|
||||
continue;
|
||||
}
|
||||
|
||||
for (cmsg = CMSG_FIRSTHDR(&msghdr); cmsg; cmsg = CMSG_NXTHDR(&msghdr, cmsg)) {
|
||||
CMSG_FOREACH(cmsg, &msghdr) {
|
||||
if (cmsg->cmsg_level == SOL_SOCKET &&
|
||||
cmsg->cmsg_type == SCM_CREDENTIALS &&
|
||||
cmsg->cmsg_len == CMSG_LEN(sizeof(struct ucred)))
|
||||
|
Loading…
x
Reference in New Issue
Block a user