Hello community, here is the log from the commit of package llmnrd for openSUSE:Factory checked in at 2017-10-23 16:52:29 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/llmnrd (Old) and /work/SRC/openSUSE:Factory/.llmnrd.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "llmnrd" Mon Oct 23 16:52:29 2017 rev:3 rq:535803 version:0.5 Changes: -------- --- /work/SRC/openSUSE:Factory/llmnrd/llmnrd.changes 2017-06-20 09:39:43.609723523 +0200 +++ /work/SRC/openSUSE:Factory/.llmnrd.new/llmnrd.changes 2017-10-23 16:53:08.457108443 +0200 @@ -1,0 +2,9 @@ +Sun Oct 22 14:30:08 UTC 2017 - [email protected] + +- Update to version 0.5 + * Poll for hostname changes + * Fix missing terminating NULL byte in llmnr-query + * Manpages for llmnrd and llmnr-query + * Additional compiler warnings enabled + +------------------------------------------------------------------- Old: ---- llmnrd-0.4.tar.gz New: ---- llmnrd-0.5.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ llmnrd.spec ++++++ --- /var/tmp/diff_new_pack.p2oJgw/_old 2017-10-23 16:53:08.933086166 +0200 +++ /var/tmp/diff_new_pack.p2oJgw/_new 2017-10-23 16:53:08.933086166 +0200 @@ -1,6 +1,7 @@ # # spec file for package llmnrd # +# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany. # Copyright (c) 2017, Martin Hauke <[email protected]> # # All modifications and additions to the file contributed by third parties @@ -17,7 +18,7 @@ Name: llmnrd -Version: 0.4 +Version: 0.5 Release: 0 Summary: Link-Local Multicast Resolution (LLMNR) Daemon License: GPL-2.0 @@ -56,7 +57,8 @@ install -Dpm0644 %{SOURCE2} "%{buildroot}%{_localstatedir}/adm/fillup-templates/sysconfig.llmnrd" ln -s %{_sbindir}/service %{buildroot}%{_sbindir}/rcllmnrd install -Dpm0644 %{SOURCE3} %{buildroot}%{_sysconfdir}/apparmor.d/usr.sbin.llmnrd - +install -Dpm0644 doc/llmnr-query.1 %{buildroot}%{_mandir}/man1/ +install -Dpm0644 doc/llmnrd.8 %{buildroot}%{_mandir}/man8/ %pre %service_add_pre llmnrd.service @@ -80,5 +82,7 @@ %{_unitdir}/llmnrd.service %{_localstatedir}/adm/fillup-templates/sysconfig.llmnrd %config(noreplace) %{_sysconfdir}/apparmor.d/usr.sbin.llmnrd +%{_mandir}/man1/llmnr-query.1%{ext_man} +%{_mandir}/man8/llmnrd.8%{ext_man} %changelog ++++++ llmnrd-0.4.tar.gz -> llmnrd-0.5.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/llmnrd-0.4/Makefile new/llmnrd-0.5/Makefile --- old/llmnrd-0.4/Makefile 2017-02-10 09:33:42.000000000 +0100 +++ new/llmnrd-0.5/Makefile 2017-10-18 09:25:44.000000000 +0200 @@ -2,20 +2,23 @@ # # Copyright (C) 2014-2017 Tobias Klauser <[email protected]> -VERSION = 0.4 +VERSION = 0.5 # llmnrd binary D_P = llmnrd D_OBJS = llmnr.o iface.o socket.o util.o llmnrd.o D_LIBS = +D_MAN = $(D_P).8 # llmnr-query binary Q_P = llmnr-query Q_OBJS = util.o llmnr-query.o Q_LIBS = +Q_MAN = $(Q_P).1 CC = $(CROSS_COMPILE)gcc INSTALL = install +GZIP = gzip -9 -c CPPFLAGS ?= LDFLAGS ?= @@ -31,10 +34,20 @@ CFLAGS_MIN += -g -DDEBUG endif -CFLAGS_WARN := -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations \ - -Wdeclaration-after-statement -Wsign-compare -Winit-self \ - -Wformat-nonliteral -Wformat-security -Wmissing-format-attribute \ - -Wundef -Wbad-function-cast -Waggregate-return -Wunused -Wwrite-strings +CFLAGS_WARN := -Wextra \ + -Waggregate-return \ + -Wbad-function-cast \ + -Wdeclaration-after-statement \ + -Wformat-nonliteral \ + -Wformat-security \ + -Wmissing-declarations \ + -Wmissing-format-attribute \ + -Wmissing-prototypes \ + -Wsign-compare \ + -Wstrict-prototypes \ + -Wundef \ + -Wunused \ + -Wwrite-strings CFLAGS ?= -O2 $(CFLAGS_WARN) override CFLAGS := $(CFLAGS_MIN) $(CFLAGS) @@ -52,6 +65,8 @@ BINDIR = $(prefix)/bin SBINDIR = $(prefix)/sbin +MAN1DIR = $(prefix)/share/man/man1 +MAN8DIR = $(prefix)/share/man/man8 DESTDIR = all: $(D_P) $(Q_P) @@ -72,11 +87,17 @@ @echo " INSTALL $(D_P)" $(Q)$(INSTALL) -d -m 755 $(DESTDIR)$(SBINDIR) $(Q)$(INSTALL) -m 755 $(D_P) $(DESTDIR)$(SBINDIR)/$(D_P) + $(Q)$(GZIP) doc/$(D_MAN) > $(D_MAN).gz + $(Q)$(INSTALL) -d -m 755 $(DESTDIR)$(MAN8DIR) + $(Q)$(INSTALL) -m 644 $(D_MAN).gz $(DESTDIR)$(MAN8DIR)/$(D_MAN).gz install_$(Q_P): $(Q_P) @echo " INSTALL $(Q_P)" $(Q)$(INSTALL) -d -m 755 $(DESTDIR)$(BINDIR) $(Q)$(INSTALL) -m 755 $(Q_P) $(DESTDIR)$(BINDIR)/$(Q_P) + $(Q)$(GZIP) doc/$(Q_MAN) > $(Q_MAN).gz + $(Q)$(INSTALL) -d -m 755 $(DESTDIR)$(MAN1DIR) + $(Q)$(INSTALL) -m 644 $(Q_MAN).gz $(DESTDIR)$(MAN1DIR)/$(Q_MAN).gz install: install_$(D_P) install_$(Q_P) @@ -84,6 +105,8 @@ @echo " CLEAN" $(Q)rm -f $(D_OBJS) $(D_P) $(Q)rm -f $(Q_OBJS) $(Q_P) + $(Q)rm -f $(D_P).8.gz + $(Q)rm -f $(Q_P).1.gz # Maintainer targets diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/llmnrd-0.4/README.md new/llmnrd-0.5/README.md --- old/llmnrd-0.4/README.md 2017-02-10 09:33:42.000000000 +0100 +++ new/llmnrd-0.5/README.md 2017-10-18 09:25:44.000000000 +0200 @@ -100,8 +100,9 @@ * Martin Hauke * Michael Evertz (@dvl-mevertz) * Pali Rohár -* Schimmelreiter (@Schimmelreiter) -* SviMik (@svimik) +* @Schimmelreiter +* @svimik +* @tbetker Thanks a lot! diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/llmnrd-0.4/doc/llmnr-query.1 new/llmnrd-0.5/doc/llmnr-query.1 --- old/llmnrd-0.4/doc/llmnr-query.1 1970-01-01 01:00:00.000000000 +0100 +++ new/llmnrd-0.5/doc/llmnr-query.1 2017-10-18 09:25:44.000000000 +0200 @@ -0,0 +1,40 @@ +.TH LLMNR-QUERY 1 "07 March 2017" llmnrd llmnrd +.SH NAME +llmnr-query \- LLMNR (RFC 4795) query tool +.SH SYNOPSIS +\fBllmnr-query\fR [\fIoptions\fR] \fIname\fR +.SH DESCRIPTION +Send LLMNR queries to the LLMNR multicast address (224.0.0.252 for IPv4, +ff02:0:0:0:0:0:1:3 for IPv6). \fIname\fR specifies the hostname to query. +.SH OPTIONS +.TP +.B -c <num>, --count <num> +Number of queries to send (default: 1). +.TP +.B -d <num>, --id <num> +Set LLMNR transaction id (default: 0). +.TP +.B -i <num>, --interval <num> +Set interval between queries in milliseconds (default: 500). +.TP +.B -I <dev>, --interface <dev> +Send multicast query over specified interface, e.g. eth0, wlan0. +.TP +.B -t <num>, --timeout <num> +Set time to wait for reply in milliseconds (default: 1000). +.TP +.B -T <type>, --type <type> +Set query type. Must be one of A, AAAA, ANY (default: ANY). +.TP +.B -6, --ipv6 +End queries over IPv6. +.TP +.B -h, --help +Show usage information. +.TP +.B -V, --version +Show llmnr-query version. +.SH SEE ALSO +.BR llmnrd(8) +.SH AUTHOR +Tobias Klauser <[email protected]> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/llmnrd-0.4/doc/llmnrd.8 new/llmnrd-0.5/doc/llmnrd.8 --- old/llmnrd-0.4/doc/llmnrd.8 1970-01-01 01:00:00.000000000 +0100 +++ new/llmnrd-0.5/doc/llmnrd.8 2017-10-18 09:25:44.000000000 +0200 @@ -0,0 +1,38 @@ +.TH LLMNRD 8 "07 March 2017" llmnrd llmnrd +.SH NAME +llmnrd \- LLMNR (RFC 4795) responder daemon +.SH SYNOPSIS +\fBllmnrd\fR [\fIoptions\fR] +.SH DESCRIPTION +.B llmnrd +is a user space daemon implementing the Link-Local Multicast Name Resolution +(LLMNR) protocol according to RFC 4795. It will respond to name resolution +queries sent by Windows clients in networks where no DNS server is available. +Both IPv4 and IPv6 are supported. +.SH OPTIONS +.TP +.B -H <name>, --hostname <name> +Manually set hostname to respond with. By default the system hostname is used. +.TP +.B -i <dev>, --interface <dev> +Bind socket to a specific interface, e.g. eth0, wlan0. +.TP +.B -p <num>, --port <num> +Set port number to listen on. By default the port 5355 as specified in RFC 4795 is +used. +.TP +.B -6, --ipv6 +Enable LLMNR name resolution over IPv6. +.TP +.B -d, --daemonize +Run llmnrd as daemon in the background. +.TP +.B -h, --help +Show usage information. +.TP +.B -V, --version +Show llmnrd version. +.SH SEE ALSO +.BR llmnr-query(1) +.SH AUTHOR +Tobias Klauser <[email protected]> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/llmnrd-0.4/llmnr-query.c new/llmnrd-0.5/llmnr-query.c --- old/llmnrd-0.4/llmnr-query.c 2017-02-10 09:33:42.000000000 +0100 +++ new/llmnrd-0.5/llmnr-query.c 2017-10-18 09:25:44.000000000 +0200 @@ -344,12 +344,13 @@ if (ptr < p->size - 1) { uint8_t nnl = p->data[ptr]; strncpy(name, (char *)&p->data[ptr + 1], nnl); + name[nnl] = '\0'; } else strncpy(name, "<invalid>", LLMNR_LABEL_MAX_SIZE); - } else + } else { strncpy(name, (char *)pkt_put(p, nl + 1), nl); - - name[LLMNR_LABEL_MAX_SIZE] = '\0'; + name[nl] = '\0'; + } type = htons(pkt_put_extract_u16(p)); clss = htons(pkt_put_extract_u16(p)); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/llmnrd-0.4/llmnr.c new/llmnrd-0.5/llmnr.c --- old/llmnrd-0.4/llmnr.c 2017-02-10 09:33:42.000000000 +0100 +++ new/llmnrd-0.5/llmnr.c 2017-10-18 09:25:44.000000000 +0200 @@ -42,12 +42,16 @@ /* Host name in DNS name format (length octet + name + 0 byte) */ static char llmnr_hostname[LLMNR_LABEL_MAX_SIZE + 2]; -void llmnr_init(const char *hostname, bool ipv6) +void llmnr_set_hostname(const char *hostname) { llmnr_hostname[0] = strlen(hostname); strncpy(&llmnr_hostname[1], hostname, LLMNR_LABEL_MAX_SIZE); llmnr_hostname[LLMNR_LABEL_MAX_SIZE + 1] = '\0'; +} +void llmnr_init(const char *hostname, bool ipv6) +{ + llmnr_set_hostname(hostname); llmnr_ipv6 = ipv6; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/llmnrd-0.4/llmnr.h new/llmnrd-0.5/llmnr.h --- old/llmnrd-0.4/llmnr.h 2017-02-10 09:33:42.000000000 +0100 +++ new/llmnrd-0.5/llmnr.h 2017-10-18 09:25:44.000000000 +0200 @@ -21,6 +21,7 @@ #include <stdbool.h> +void llmnr_set_hostname(const char *hostname); void llmnr_init(const char *hostname, bool ipv6); void llmnr_recv(int sock); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/llmnrd-0.4/llmnrd.c new/llmnrd-0.5/llmnrd.c --- old/llmnrd-0.4/llmnrd.c 2017-02-10 09:33:42.000000000 +0100 +++ new/llmnrd-0.5/llmnrd.c 2017-10-18 09:25:44.000000000 +0200 @@ -28,6 +28,10 @@ #include <string.h> #include <unistd.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <fcntl.h> + #include <sys/ioctl.h> #include <sys/param.h> @@ -43,6 +47,7 @@ static bool llmnrd_running = true; static int llmnrd_sock_ipv4 = -1; static int llmnrd_sock_ipv6 = -1; +static int llmnrd_fd_hostname = -1; static const char *short_opts = "H:i:p:6dhV"; static const struct option long_opts[] = { @@ -74,7 +79,7 @@ static void __noreturn version_and_exit(void) { fprintf(stdout, "llmnrd %s %s\n" - "Copyright (C) 2014-2016 Tobias Klauser <[email protected]>\n" + "Copyright (C) 2014-2017 Tobias Klauser <[email protected]>\n" "Licensed under the GNU General Public License, version 2\n", VERSION_STRING, GIT_VERSION); exit(EXIT_SUCCESS); @@ -129,6 +134,22 @@ } } +static void hostname_change_handle(char *hostname, size_t maxlen) +{ + char *newname; + + newname = xzalloc(maxlen); + if (gethostname(newname, maxlen) == 0) { + newname[maxlen - 1] = '\0'; + if (strncmp(hostname, newname, maxlen) != 0) { + log_info("Hostname changed to %s\n", newname); + strncpy(hostname, newname, maxlen); + llmnr_set_hostname(hostname); + } + } + free(newname); +} + int main(int argc, char **argv) { int c, ret = -1; @@ -183,6 +204,8 @@ return EXIT_FAILURE; } hostname[MAXHOSTNAMELEN - 1] = '\0'; + + llmnrd_fd_hostname = open("/proc/sys/kernel/hostname", O_RDONLY|O_CLOEXEC|O_NDELAY); } if (daemonize) { @@ -216,10 +239,12 @@ nfds = max(llmnrd_sock_ipv4, llmnrd_sock_rtnl); if (llmnrd_sock_ipv6 >= 0) nfds = max(nfds, llmnrd_sock_ipv6); + if (llmnrd_fd_hostname >= 0) + nfds = max(nfds, llmnrd_fd_hostname); nfds += 1; while (llmnrd_running) { - fd_set rfds; + fd_set rfds, efds; FD_ZERO(&rfds); FD_SET(llmnrd_sock_ipv4, &rfds); @@ -227,7 +252,11 @@ if (llmnrd_sock_ipv6 >= 0) FD_SET(llmnrd_sock_ipv6, &rfds); - ret = select(nfds, &rfds, NULL, NULL, NULL); + FD_ZERO(&efds); + if (llmnrd_fd_hostname >= 0) + FD_SET(llmnrd_fd_hostname, &efds); + + ret = select(nfds, &rfds, NULL, &efds, NULL); if (ret < 0) { if (errno != EINTR) log_err("Failed to select() on socket: %s\n", strerror(errno)); @@ -242,6 +271,8 @@ llmnr_recv(llmnrd_sock_ipv4); if (llmnrd_sock_ipv6 >= 0 && FD_ISSET(llmnrd_sock_ipv6, &rfds)) llmnr_recv(llmnrd_sock_ipv6); + if (llmnrd_fd_hostname >= 0 && FD_ISSET(llmnrd_fd_hostname, &efds)) + hostname_change_handle(hostname, MAXHOSTNAMELEN); } }
