From: Sven Eden Date: Tue, 3 Jan 2017 08:48:33 +0000 (+0100) Subject: Prep v223: Remove superfluous src/resolve/resolved-llmnr.[hc] X-Git-Tag: v226.4~1^2~145 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=254f5caac8fcb65e63ad2e738e2b44ad9f68964f Prep v223: Remove superfluous src/resolve/resolved-llmnr.[hc] --- diff --git a/Makefile-man.am b/Makefile-man.am index f807483b0..35eec7798 100644 --- a/Makefile-man.am +++ b/Makefile-man.am @@ -8,6 +8,8 @@ # attribute conditional="ENABLE_WHAT" or conditional="WITH_WHAT" # to element. MANPAGES += \ + man/sd-bus-errors.3 \ + man/sd_bus_error_add_map.3 \ man/sd_id128_get_machine.3 \ man/sd_id128_randomize.3 \ man/sd_id128_to_string.3 \ @@ -16,6 +18,39 @@ MANPAGES += \ man/sd_notify.3 \ man/sd_watchdog_enabled.3 MANPAGES_ALIAS += \ + man/SD_BUS_ERROR_ACCESS_DENIED.3 \ + man/SD_BUS_ERROR_ADDRESS_IN_USE.3 \ + man/SD_BUS_ERROR_AUTH_FAILED.3 \ + man/SD_BUS_ERROR_BAD_ADDRESS.3 \ + man/SD_BUS_ERROR_DISCONNECTED.3 \ + man/SD_BUS_ERROR_END.3 \ + man/SD_BUS_ERROR_FAILED.3 \ + man/SD_BUS_ERROR_FILE_EXISTS.3 \ + man/SD_BUS_ERROR_FILE_NOT_FOUND.3 \ + man/SD_BUS_ERROR_INCONSISTENT_MESSAGE.3 \ + man/SD_BUS_ERROR_INTERACTIVE_AUTHORIZATION_REQUIRED.3 \ + man/SD_BUS_ERROR_INVALID_ARGS.3 \ + man/SD_BUS_ERROR_INVALID_SIGNATURE.3 \ + man/SD_BUS_ERROR_IO_ERROR.3 \ + man/SD_BUS_ERROR_LIMITS_EXCEEDED.3 \ + man/SD_BUS_ERROR_MAP.3 \ + man/SD_BUS_ERROR_MATCH_RULE_INVALID.3 \ + man/SD_BUS_ERROR_MATCH_RULE_NOT_FOUND.3 \ + man/SD_BUS_ERROR_NAME_HAS_NO_OWNER.3 \ + man/SD_BUS_ERROR_NOT_SUPPORTED.3 \ + man/SD_BUS_ERROR_NO_MEMORY.3 \ + man/SD_BUS_ERROR_NO_NETWORK.3 \ + man/SD_BUS_ERROR_NO_REPLY.3 \ + man/SD_BUS_ERROR_NO_SERVER.3 \ + man/SD_BUS_ERROR_PROPERTY_READ_ONLY.3 \ + man/SD_BUS_ERROR_SERVICE_UNKNOWN.3 \ + man/SD_BUS_ERROR_TIMEOUT.3 \ + man/SD_BUS_ERROR_UNIX_PROCESS_ID_UNKNOWN.3 \ + man/SD_BUS_ERROR_UNKNOWN_INTERFACE.3 \ + man/SD_BUS_ERROR_UNKNOWN_METHOD.3 \ + man/SD_BUS_ERROR_UNKNOWN_OBJECT.3 \ + man/SD_BUS_ERROR_UNKNOWN_PROPERTY.3 \ + man/sd_bus_error_map.3 \ man/sd_id128_from_string.3 \ man/sd_id128_get_boot.3 \ man/sd_is_mq.3 \ @@ -28,6 +63,39 @@ MANPAGES_ALIAS += \ man/sd_pid_notify.3 \ man/sd_pid_notify_with_fds.3 \ man/sd_pid_notifyf.3 +man/SD_BUS_ERROR_ACCESS_DENIED.3: man/sd-bus-errors.3 +man/SD_BUS_ERROR_ADDRESS_IN_USE.3: man/sd-bus-errors.3 +man/SD_BUS_ERROR_AUTH_FAILED.3: man/sd-bus-errors.3 +man/SD_BUS_ERROR_BAD_ADDRESS.3: man/sd-bus-errors.3 +man/SD_BUS_ERROR_DISCONNECTED.3: man/sd-bus-errors.3 +man/SD_BUS_ERROR_END.3: man/sd_bus_error_add_map.3 +man/SD_BUS_ERROR_FAILED.3: man/sd-bus-errors.3 +man/SD_BUS_ERROR_FILE_EXISTS.3: man/sd-bus-errors.3 +man/SD_BUS_ERROR_FILE_NOT_FOUND.3: man/sd-bus-errors.3 +man/SD_BUS_ERROR_INCONSISTENT_MESSAGE.3: man/sd-bus-errors.3 +man/SD_BUS_ERROR_INTERACTIVE_AUTHORIZATION_REQUIRED.3: man/sd-bus-errors.3 +man/SD_BUS_ERROR_INVALID_ARGS.3: man/sd-bus-errors.3 +man/SD_BUS_ERROR_INVALID_SIGNATURE.3: man/sd-bus-errors.3 +man/SD_BUS_ERROR_IO_ERROR.3: man/sd-bus-errors.3 +man/SD_BUS_ERROR_LIMITS_EXCEEDED.3: man/sd-bus-errors.3 +man/SD_BUS_ERROR_MAP.3: man/sd_bus_error_add_map.3 +man/SD_BUS_ERROR_MATCH_RULE_INVALID.3: man/sd-bus-errors.3 +man/SD_BUS_ERROR_MATCH_RULE_NOT_FOUND.3: man/sd-bus-errors.3 +man/SD_BUS_ERROR_NAME_HAS_NO_OWNER.3: man/sd-bus-errors.3 +man/SD_BUS_ERROR_NOT_SUPPORTED.3: man/sd-bus-errors.3 +man/SD_BUS_ERROR_NO_MEMORY.3: man/sd-bus-errors.3 +man/SD_BUS_ERROR_NO_NETWORK.3: man/sd-bus-errors.3 +man/SD_BUS_ERROR_NO_REPLY.3: man/sd-bus-errors.3 +man/SD_BUS_ERROR_NO_SERVER.3: man/sd-bus-errors.3 +man/SD_BUS_ERROR_PROPERTY_READ_ONLY.3: man/sd-bus-errors.3 +man/SD_BUS_ERROR_SERVICE_UNKNOWN.3: man/sd-bus-errors.3 +man/SD_BUS_ERROR_TIMEOUT.3: man/sd-bus-errors.3 +man/SD_BUS_ERROR_UNIX_PROCESS_ID_UNKNOWN.3: man/sd-bus-errors.3 +man/SD_BUS_ERROR_UNKNOWN_INTERFACE.3: man/sd-bus-errors.3 +man/SD_BUS_ERROR_UNKNOWN_METHOD.3: man/sd-bus-errors.3 +man/SD_BUS_ERROR_UNKNOWN_OBJECT.3: man/sd-bus-errors.3 +man/SD_BUS_ERROR_UNKNOWN_PROPERTY.3: man/sd-bus-errors.3 +man/sd_bus_error_map.3: man/sd_bus_error_add_map.3 man/sd_id128_from_string.3: man/sd_id128_to_string.3 man/sd_id128_get_boot.3: man/sd_id128_get_machine.3 man/sd_is_mq.3: man/sd_is_fifo.3 @@ -40,6 +108,105 @@ man/sd_notifyf.3: man/sd_notify.3 man/sd_pid_notify.3: man/sd_notify.3 man/sd_pid_notify_with_fds.3: man/sd_notify.3 man/sd_pid_notifyf.3: man/sd_notify.3 +man/SD_BUS_ERROR_ACCESS_DENIED.html: man/sd-bus-errors.html + $(html-alias) + +man/SD_BUS_ERROR_ADDRESS_IN_USE.html: man/sd-bus-errors.html + $(html-alias) + +man/SD_BUS_ERROR_AUTH_FAILED.html: man/sd-bus-errors.html + $(html-alias) + +man/SD_BUS_ERROR_BAD_ADDRESS.html: man/sd-bus-errors.html + $(html-alias) + +man/SD_BUS_ERROR_DISCONNECTED.html: man/sd-bus-errors.html + $(html-alias) + +man/SD_BUS_ERROR_END.html: man/sd_bus_error_add_map.html + $(html-alias) + +man/SD_BUS_ERROR_FAILED.html: man/sd-bus-errors.html + $(html-alias) + +man/SD_BUS_ERROR_FILE_EXISTS.html: man/sd-bus-errors.html + $(html-alias) + +man/SD_BUS_ERROR_FILE_NOT_FOUND.html: man/sd-bus-errors.html + $(html-alias) + +man/SD_BUS_ERROR_INCONSISTENT_MESSAGE.html: man/sd-bus-errors.html + $(html-alias) + +man/SD_BUS_ERROR_INTERACTIVE_AUTHORIZATION_REQUIRED.html: man/sd-bus-errors.html + $(html-alias) + +man/SD_BUS_ERROR_INVALID_ARGS.html: man/sd-bus-errors.html + $(html-alias) + +man/SD_BUS_ERROR_INVALID_SIGNATURE.html: man/sd-bus-errors.html + $(html-alias) + +man/SD_BUS_ERROR_IO_ERROR.html: man/sd-bus-errors.html + $(html-alias) + +man/SD_BUS_ERROR_LIMITS_EXCEEDED.html: man/sd-bus-errors.html + $(html-alias) + +man/SD_BUS_ERROR_MAP.html: man/sd_bus_error_add_map.html + $(html-alias) + +man/SD_BUS_ERROR_MATCH_RULE_INVALID.html: man/sd-bus-errors.html + $(html-alias) + +man/SD_BUS_ERROR_MATCH_RULE_NOT_FOUND.html: man/sd-bus-errors.html + $(html-alias) + +man/SD_BUS_ERROR_NAME_HAS_NO_OWNER.html: man/sd-bus-errors.html + $(html-alias) + +man/SD_BUS_ERROR_NOT_SUPPORTED.html: man/sd-bus-errors.html + $(html-alias) + +man/SD_BUS_ERROR_NO_MEMORY.html: man/sd-bus-errors.html + $(html-alias) + +man/SD_BUS_ERROR_NO_NETWORK.html: man/sd-bus-errors.html + $(html-alias) + +man/SD_BUS_ERROR_NO_REPLY.html: man/sd-bus-errors.html + $(html-alias) + +man/SD_BUS_ERROR_NO_SERVER.html: man/sd-bus-errors.html + $(html-alias) + +man/SD_BUS_ERROR_PROPERTY_READ_ONLY.html: man/sd-bus-errors.html + $(html-alias) + +man/SD_BUS_ERROR_SERVICE_UNKNOWN.html: man/sd-bus-errors.html + $(html-alias) + +man/SD_BUS_ERROR_TIMEOUT.html: man/sd-bus-errors.html + $(html-alias) + +man/SD_BUS_ERROR_UNIX_PROCESS_ID_UNKNOWN.html: man/sd-bus-errors.html + $(html-alias) + +man/SD_BUS_ERROR_UNKNOWN_INTERFACE.html: man/sd-bus-errors.html + $(html-alias) + +man/SD_BUS_ERROR_UNKNOWN_METHOD.html: man/sd-bus-errors.html + $(html-alias) + +man/SD_BUS_ERROR_UNKNOWN_OBJECT.html: man/sd-bus-errors.html + $(html-alias) + +man/SD_BUS_ERROR_UNKNOWN_PROPERTY.html: man/sd-bus-errors.html + $(html-alias) + +man/sd_bus_error_map.html: man/sd_bus_error_add_map.html + $(html-alias) + man/sd_id128_from_string.html: man/sd_id128_to_string.html $(html-alias) @@ -196,6 +363,15 @@ man/sd_session_is_remote.html: man/sd_session_is_active.html endif +if HAVE_PYTHON +MANPAGES += \ + man/systemd.index.7 +MANPAGES_ALIAS += \ + # + + +endif + # Really, do not edit this file. EXTRA_DIST += \ @@ -204,6 +380,8 @@ EXTRA_DIST += \ man/libelogind-pkgconfig.xml \ man/loginctl.xml \ man/pam_elogind.xml \ + man/sd-bus-errors.xml \ + man/sd_bus_error_add_map.xml \ man/sd_get_seats.xml \ man/sd_id128_get_machine.xml \ man/sd_id128_randomize.xml \ diff --git a/src/resolve/resolved-llmnr.c b/src/resolve/resolved-llmnr.c deleted file mode 100644 index 8afaf8db6..000000000 --- a/src/resolve/resolved-llmnr.c +++ /dev/null @@ -1,473 +0,0 @@ -/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/ - -/*** - This file is part of systemd. - - Copyright 2014 Tom Gundersen - - systemd is free software; you can redistribute it and/or modify it - under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1 of the License, or - (at your option) any later version. - - systemd is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with systemd; If not, see . - ***/ - -#include -#include - -#include "resolved-manager.h" -#include "resolved-llmnr.h" - -void manager_llmnr_stop(Manager *m) { - assert(m); - - m->llmnr_ipv4_udp_event_source = sd_event_source_unref(m->llmnr_ipv4_udp_event_source); - m->llmnr_ipv4_udp_fd = safe_close(m->llmnr_ipv4_udp_fd); - - m->llmnr_ipv6_udp_event_source = sd_event_source_unref(m->llmnr_ipv6_udp_event_source); - m->llmnr_ipv6_udp_fd = safe_close(m->llmnr_ipv6_udp_fd); - - m->llmnr_ipv4_tcp_event_source = sd_event_source_unref(m->llmnr_ipv4_tcp_event_source); - m->llmnr_ipv4_tcp_fd = safe_close(m->llmnr_ipv4_tcp_fd); - - m->llmnr_ipv6_tcp_event_source = sd_event_source_unref(m->llmnr_ipv6_tcp_event_source); - m->llmnr_ipv6_tcp_fd = safe_close(m->llmnr_ipv6_tcp_fd); -} - -int manager_llmnr_start(Manager *m) { - int r; - - assert(m); - - if (m->llmnr_support == SUPPORT_NO) - return 0; - - r = manager_llmnr_ipv4_udp_fd(m); - if (r == -EADDRINUSE) - goto eaddrinuse; - if (r < 0) - return r; - - r = manager_llmnr_ipv4_tcp_fd(m); - if (r == -EADDRINUSE) - goto eaddrinuse; - if (r < 0) - return r; - - if (socket_ipv6_is_supported()) { - r = manager_llmnr_ipv6_udp_fd(m); - if (r == -EADDRINUSE) - goto eaddrinuse; - if (r < 0) - return r; - - r = manager_llmnr_ipv6_tcp_fd(m); - if (r == -EADDRINUSE) - goto eaddrinuse; - if (r < 0) - return r; - } - - return 0; - -eaddrinuse: - log_warning("There appears to be another LLMNR responder running. Turning off LLMNR support."); - m->llmnr_support = SUPPORT_NO; - manager_llmnr_stop(m); - - return 0; -} - -static int on_llmnr_packet(sd_event_source *s, int fd, uint32_t revents, void *userdata) { - _cleanup_(dns_packet_unrefp) DnsPacket *p = NULL; - DnsTransaction *t = NULL; - Manager *m = userdata; - DnsScope *scope; - int r; - - r = manager_recv(m, fd, DNS_PROTOCOL_LLMNR, &p); - if (r <= 0) - return r; - - scope = manager_find_scope(m, p); - if (!scope) { - log_warning("Got LLMNR UDP packet on unknown scope. Ignoring."); - return 0; - } - - if (dns_packet_validate_reply(p) > 0) { - log_debug("Got LLMNR reply packet for id %u", DNS_PACKET_ID(p)); - - dns_scope_check_conflicts(scope, p); - - t = hashmap_get(m->dns_transactions, UINT_TO_PTR(DNS_PACKET_ID(p))); - if (t) - dns_transaction_process_reply(t, p); - - } else if (dns_packet_validate_query(p) > 0) { - log_debug("Got LLMNR query packet for id %u", DNS_PACKET_ID(p)); - - dns_scope_process_query(scope, NULL, p); - } else - log_debug("Invalid LLMNR UDP packet."); - - return 0; -} - -int manager_llmnr_ipv4_udp_fd(Manager *m) { - union sockaddr_union sa = { - .in.sin_family = AF_INET, - .in.sin_port = htobe16(LLMNR_PORT), - }; - static const int one = 1, pmtu = IP_PMTUDISC_DONT, ttl = 255; - int r; - - assert(m); - - if (m->llmnr_ipv4_udp_fd >= 0) - return m->llmnr_ipv4_udp_fd; - - m->llmnr_ipv4_udp_fd = socket(AF_INET, SOCK_DGRAM|SOCK_CLOEXEC|SOCK_NONBLOCK, 0); - if (m->llmnr_ipv4_udp_fd < 0) - return -errno; - - /* RFC 4795, section 2.5 recommends setting the TTL of UDP packets to 255. */ - r = setsockopt(m->llmnr_ipv4_udp_fd, IPPROTO_IP, IP_TTL, &ttl, sizeof(ttl)); - if (r < 0) { - r = -errno; - goto fail; - } - - r = setsockopt(m->llmnr_ipv4_udp_fd, IPPROTO_IP, IP_MULTICAST_TTL, &ttl, sizeof(ttl)); - if (r < 0) { - r = -errno; - goto fail; - } - - r = setsockopt(m->llmnr_ipv4_udp_fd, IPPROTO_IP, IP_MULTICAST_LOOP, &one, sizeof(one)); - if (r < 0) { - r = -errno; - goto fail; - } - - r = setsockopt(m->llmnr_ipv4_udp_fd, SOL_SOCKET, SO_REUSEADDR, &one, sizeof(one)); - if (r < 0) { - r = -errno; - goto fail; - } - - r = setsockopt(m->llmnr_ipv4_udp_fd, IPPROTO_IP, IP_PKTINFO, &one, sizeof(one)); - if (r < 0) { - r = -errno; - goto fail; - } - - r = setsockopt(m->llmnr_ipv4_udp_fd, IPPROTO_IP, IP_RECVTTL, &one, sizeof(one)); - if (r < 0) { - r = -errno; - goto fail; - } - - /* Disable Don't-Fragment bit in the IP header */ - r = setsockopt(m->llmnr_ipv4_udp_fd, IPPROTO_IP, IP_MTU_DISCOVER, &pmtu, sizeof(pmtu)); - if (r < 0) { - r = -errno; - goto fail; - } - - r = bind(m->llmnr_ipv4_udp_fd, &sa.sa, sizeof(sa.in)); - if (r < 0) { - r = -errno; - goto fail; - } - - r = sd_event_add_io(m->event, &m->llmnr_ipv4_udp_event_source, m->llmnr_ipv4_udp_fd, EPOLLIN, on_llmnr_packet, m); - if (r < 0) - goto fail; - - return m->llmnr_ipv4_udp_fd; - -fail: - m->llmnr_ipv4_udp_fd = safe_close(m->llmnr_ipv4_udp_fd); - return r; -} - -int manager_llmnr_ipv6_udp_fd(Manager *m) { - union sockaddr_union sa = { - .in6.sin6_family = AF_INET6, - .in6.sin6_port = htobe16(LLMNR_PORT), - }; - static const int one = 1, ttl = 255; - int r; - - assert(m); - - if (m->llmnr_ipv6_udp_fd >= 0) - return m->llmnr_ipv6_udp_fd; - - m->llmnr_ipv6_udp_fd = socket(AF_INET6, SOCK_DGRAM|SOCK_CLOEXEC|SOCK_NONBLOCK, 0); - if (m->llmnr_ipv6_udp_fd < 0) - return -errno; - - r = setsockopt(m->llmnr_ipv6_udp_fd, IPPROTO_IPV6, IPV6_UNICAST_HOPS, &ttl, sizeof(ttl)); - if (r < 0) { - r = -errno; - goto fail; - } - - /* RFC 4795, section 2.5 recommends setting the TTL of UDP packets to 255. */ - r = setsockopt(m->llmnr_ipv6_udp_fd, IPPROTO_IPV6, IPV6_MULTICAST_HOPS, &ttl, sizeof(ttl)); - if (r < 0) { - r = -errno; - goto fail; - } - - r = setsockopt(m->llmnr_ipv6_udp_fd, IPPROTO_IPV6, IPV6_MULTICAST_LOOP, &one, sizeof(one)); - if (r < 0) { - r = -errno; - goto fail; - } - - r = setsockopt(m->llmnr_ipv6_udp_fd, IPPROTO_IPV6, IPV6_V6ONLY, &one, sizeof(one)); - if (r < 0) { - r = -errno; - goto fail; - } - - r = setsockopt(m->llmnr_ipv6_udp_fd, SOL_SOCKET, SO_REUSEADDR, &one, sizeof(one)); - if (r < 0) { - r = -errno; - goto fail; - } - - r = setsockopt(m->llmnr_ipv6_udp_fd, IPPROTO_IPV6, IPV6_RECVPKTINFO, &one, sizeof(one)); - if (r < 0) { - r = -errno; - goto fail; - } - - r = setsockopt(m->llmnr_ipv6_udp_fd, IPPROTO_IPV6, IPV6_RECVHOPLIMIT, &one, sizeof(one)); - if (r < 0) { - r = -errno; - goto fail; - } - - r = bind(m->llmnr_ipv6_udp_fd, &sa.sa, sizeof(sa.in6)); - if (r < 0) { - r = -errno; - goto fail; - } - - r = sd_event_add_io(m->event, &m->llmnr_ipv6_udp_event_source, m->llmnr_ipv6_udp_fd, EPOLLIN, on_llmnr_packet, m); - if (r < 0) { - r = -errno; - goto fail; - } - - return m->llmnr_ipv6_udp_fd; - -fail: - m->llmnr_ipv6_udp_fd = safe_close(m->llmnr_ipv6_udp_fd); - return r; -} - -static int on_llmnr_stream_packet(DnsStream *s) { - DnsScope *scope; - - assert(s); - - scope = manager_find_scope(s->manager, s->read_packet); - if (!scope) { - log_warning("Got LLMNR TCP packet on unknown scope. Ignroing."); - return 0; - } - - if (dns_packet_validate_query(s->read_packet) > 0) { - log_debug("Got query packet for id %u", DNS_PACKET_ID(s->read_packet)); - - dns_scope_process_query(scope, s, s->read_packet); - - /* If no reply packet was set, we free the stream */ - if (s->write_packet) - return 0; - } else - log_debug("Invalid LLMNR TCP packet."); - - dns_stream_free(s); - return 0; -} - -static int on_llmnr_stream(sd_event_source *s, int fd, uint32_t revents, void *userdata) { - DnsStream *stream; - Manager *m = userdata; - int cfd, r; - - cfd = accept4(fd, NULL, NULL, SOCK_NONBLOCK|SOCK_CLOEXEC); - if (cfd < 0) { - if (errno == EAGAIN || errno == EINTR) - return 0; - - return -errno; - } - - r = dns_stream_new(m, &stream, DNS_PROTOCOL_LLMNR, cfd); - if (r < 0) { - safe_close(cfd); - return r; - } - - stream->on_packet = on_llmnr_stream_packet; - return 0; -} - -int manager_llmnr_ipv4_tcp_fd(Manager *m) { - union sockaddr_union sa = { - .in.sin_family = AF_INET, - .in.sin_port = htobe16(LLMNR_PORT), - }; - static const int one = 1, pmtu = IP_PMTUDISC_DONT; - int r; - - assert(m); - - if (m->llmnr_ipv4_tcp_fd >= 0) - return m->llmnr_ipv4_tcp_fd; - - m->llmnr_ipv4_tcp_fd = socket(AF_INET, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, 0); - if (m->llmnr_ipv4_tcp_fd < 0) - return -errno; - - /* RFC 4795, section 2.5. requires setting the TTL of TCP streams to 1 */ - r = setsockopt(m->llmnr_ipv4_tcp_fd, IPPROTO_IP, IP_TTL, &one, sizeof(one)); - if (r < 0) { - r = -errno; - goto fail; - } - - r = setsockopt(m->llmnr_ipv4_tcp_fd, SOL_SOCKET, SO_REUSEADDR, &one, sizeof(one)); - if (r < 0) { - r = -errno; - goto fail; - } - - r = setsockopt(m->llmnr_ipv4_tcp_fd, IPPROTO_IP, IP_PKTINFO, &one, sizeof(one)); - if (r < 0) { - r = -errno; - goto fail; - } - - r = setsockopt(m->llmnr_ipv4_tcp_fd, IPPROTO_IP, IP_RECVTTL, &one, sizeof(one)); - if (r < 0) { - r = -errno; - goto fail; - } - - /* Disable Don't-Fragment bit in the IP header */ - r = setsockopt(m->llmnr_ipv4_tcp_fd, IPPROTO_IP, IP_MTU_DISCOVER, &pmtu, sizeof(pmtu)); - if (r < 0) { - r = -errno; - goto fail; - } - - r = bind(m->llmnr_ipv4_tcp_fd, &sa.sa, sizeof(sa.in)); - if (r < 0) { - r = -errno; - goto fail; - } - - r = listen(m->llmnr_ipv4_tcp_fd, SOMAXCONN); - if (r < 0) { - r = -errno; - goto fail; - } - - r = sd_event_add_io(m->event, &m->llmnr_ipv4_tcp_event_source, m->llmnr_ipv4_tcp_fd, EPOLLIN, on_llmnr_stream, m); - if (r < 0) - goto fail; - - return m->llmnr_ipv4_tcp_fd; - -fail: - m->llmnr_ipv4_tcp_fd = safe_close(m->llmnr_ipv4_tcp_fd); - return r; -} - -int manager_llmnr_ipv6_tcp_fd(Manager *m) { - union sockaddr_union sa = { - .in6.sin6_family = AF_INET6, - .in6.sin6_port = htobe16(LLMNR_PORT), - }; - static const int one = 1; - int r; - - assert(m); - - if (m->llmnr_ipv6_tcp_fd >= 0) - return m->llmnr_ipv6_tcp_fd; - - m->llmnr_ipv6_tcp_fd = socket(AF_INET6, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, 0); - if (m->llmnr_ipv6_tcp_fd < 0) - return -errno; - - /* RFC 4795, section 2.5. requires setting the TTL of TCP streams to 1 */ - r = setsockopt(m->llmnr_ipv6_tcp_fd, IPPROTO_IPV6, IPV6_UNICAST_HOPS, &one, sizeof(one)); - if (r < 0) { - r = -errno; - goto fail; - } - - r = setsockopt(m->llmnr_ipv6_tcp_fd, IPPROTO_IPV6, IPV6_V6ONLY, &one, sizeof(one)); - if (r < 0) { - r = -errno; - goto fail; - } - - r = setsockopt(m->llmnr_ipv6_tcp_fd, SOL_SOCKET, SO_REUSEADDR, &one, sizeof(one)); - if (r < 0) { - r = -errno; - goto fail; - } - - r = setsockopt(m->llmnr_ipv6_tcp_fd, IPPROTO_IPV6, IPV6_RECVPKTINFO, &one, sizeof(one)); - if (r < 0) { - r = -errno; - goto fail; - } - - r = setsockopt(m->llmnr_ipv6_tcp_fd, IPPROTO_IPV6, IPV6_RECVHOPLIMIT, &one, sizeof(one)); - if (r < 0) { - r = -errno; - goto fail; - } - - r = bind(m->llmnr_ipv6_tcp_fd, &sa.sa, sizeof(sa.in6)); - if (r < 0) { - r = -errno; - goto fail; - } - - r = listen(m->llmnr_ipv6_tcp_fd, SOMAXCONN); - if (r < 0) { - r = -errno; - goto fail; - } - - r = sd_event_add_io(m->event, &m->llmnr_ipv6_tcp_event_source, m->llmnr_ipv6_tcp_fd, EPOLLIN, on_llmnr_stream, m); - if (r < 0) { - r = -errno; - goto fail; - } - - return m->llmnr_ipv6_tcp_fd; - -fail: - m->llmnr_ipv6_tcp_fd = safe_close(m->llmnr_ipv6_tcp_fd); - return r; -} diff --git a/src/resolve/resolved-llmnr.h b/src/resolve/resolved-llmnr.h deleted file mode 100644 index d489d481e..000000000 --- a/src/resolve/resolved-llmnr.h +++ /dev/null @@ -1,34 +0,0 @@ -/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/ - -#pragma once - -/*** - This file is part of systemd. - - Copyright 2014 Lennart Poettering - - systemd is free software; you can redistribute it and/or modify it - under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1 of the License, or - (at your option) any later version. - - systemd is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with systemd; If not, see . -***/ - -#include "resolved-manager.h" - -#define LLMNR_PORT 5355 - -int manager_llmnr_ipv4_udp_fd(Manager *m); -int manager_llmnr_ipv6_udp_fd(Manager *m); -int manager_llmnr_ipv4_tcp_fd(Manager *m); -int manager_llmnr_ipv6_tcp_fd(Manager *m); - -void manager_llmnr_stop(Manager *m); -int manager_llmnr_start(Manager *m);