X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Flibelogind%2Fsd-daemon%2Fsd-daemon.c;h=766d9ef6ed1b0d944d10b67467a2035f5831b9b1;hb=9facc64034a98d593cf5b577e979aa78e3b184bf;hp=3ea9764c45bd383ec24d9272ed9e3b8b61b5db4f;hpb=5e42721bc2e1734adbd966b0e0d89ce80834ca97;p=elogind.git diff --git a/src/libelogind/sd-daemon/sd-daemon.c b/src/libelogind/sd-daemon/sd-daemon.c index 3ea9764c4..766d9ef6e 100644 --- a/src/libelogind/sd-daemon/sd-daemon.c +++ b/src/libelogind/sd-daemon/sd-daemon.c @@ -1,5 +1,3 @@ -/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/ - /*** This file is part of systemd. @@ -21,7 +19,7 @@ #include #include -//#include +#include #include #include #include @@ -33,15 +31,20 @@ #include #include +#include "sd-daemon.h" + +#include "alloc-util.h" +#include "fd-util.h" +//#include "fs-util.h" +#include "parse-util.h" #include "path-util.h" #include "socket-util.h" -//#include "strv.h" +#include "strv.h" #include "util.h" -#include "sd-daemon.h" +#define SNDBUF_SIZE (8*1024*1024) -/// UNNEEDED by elogind -#if 0 +#if 0 /// UNNEEDED by elogind static void unsetenv_all(bool unset_environment) { if (!unset_environment) @@ -100,7 +103,7 @@ _public_ int sd_listen_fds(int unset_environment) { finish: unsetenv_all(unset_environment); return r; - } +} _public_ int sd_listen_fds_with_names(int unset_environment, char ***names) { _cleanup_strv_free_ char **l = NULL; @@ -134,8 +137,8 @@ _public_ int sd_listen_fds_with_names(int unset_environment, char ***names) { } else { r = strv_extend_n(&l, "unknown", n_fds); if (r < 0) - return r; -} + return r; + } *names = l; l = NULL; @@ -278,8 +281,7 @@ _public_ int sd_is_socket(int fd, int family, int type, int listening) { return 1; } -/// UNNEEDED by elogind -#if 0 +#if 0 /// UNNEEDED by elogind _public_ int sd_is_socket_inet(int fd, int family, int type, int listening, uint16_t port) { union sockaddr_union sockaddr = {}; socklen_t l = sizeof(sockaddr); @@ -311,12 +313,12 @@ _public_ int sd_is_socket_inet(int fd, int family, int type, int listening, uint if (l < sizeof(struct sockaddr_in)) return -EINVAL; - return htons(port) == sockaddr.in.sin_port; + return htobe16(port) == sockaddr.in.sin_port; } else { if (l < sizeof(struct sockaddr_in6)) return -EINVAL; - return htons(port) == sockaddr.in6.sin6_port; + return htobe16(port) == sockaddr.in6.sin6_port; } } @@ -452,20 +454,20 @@ _public_ int sd_pid_notify_with_fds(pid_t pid, int unset_environment, const char goto finish; } + fd_inc_sndbuf(fd, SNDBUF_SIZE); + iovec.iov_len = strlen(state); strncpy(sockaddr.un.sun_path, e, sizeof(sockaddr.un.sun_path)); if (sockaddr.un.sun_path[0] == '@') sockaddr.un.sun_path[0] = 0; - msghdr.msg_namelen = offsetof(struct sockaddr_un, sun_path) + strlen(e); - if (msghdr.msg_namelen > sizeof(struct sockaddr_un)) - msghdr.msg_namelen = sizeof(struct sockaddr_un); + msghdr.msg_namelen = SOCKADDR_UN_LEN(sockaddr.un); have_pid = pid != 0 && pid != getpid(); if (n_fds > 0 || have_pid) { - /* CMSG_SPACE(0) may return value different then zero, which results in miscalculated controllen. */ + /* CMSG_SPACE(0) may return value different than zero, which results in miscalculated controllen. */ msghdr.msg_controllen = (n_fds > 0 ? CMSG_SPACE(sizeof(int) * n_fds) : 0) + (have_pid ? CMSG_SPACE(sizeof(struct ucred)) : 0); @@ -525,8 +527,7 @@ finish: return r; } -/// UNNEEDED by elogind -#if 0 +#if 0 /// UNNEEDED by elogind _public_ int sd_pid_notify(pid_t pid, int unset_environment, const char *state) { return sd_pid_notify_with_fds(pid, unset_environment, state, NULL, 0); } @@ -536,8 +537,7 @@ _public_ int sd_notify(int unset_environment, const char *state) { return sd_pid_notify_with_fds(0, unset_environment, state, NULL, 0); } -/// UNNEEDED by elogind -#if 0 +#if 0 /// UNNEEDED by elogind _public_ int sd_pid_notifyf(pid_t pid, int unset_environment, const char *format, ...) { _cleanup_free_ char *p = NULL; int r; @@ -595,7 +595,7 @@ _public_ int sd_watchdog_enabled(int unset_environment, uint64_t *usec) { r = safe_atou64(s, &u); if (r < 0) goto finish; - if (u <= 0) { + if (u <= 0 || u >= USEC_INFINITY) { r = -EINVAL; goto finish; }