X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fresolve%2Fresolved-manager.c;h=2edfb9f7fdee20b50f071e94d9bc19d85e7f53cb;hb=36a03ca2a8952ca1acb29fbe796210c27ff71aff;hp=9f61c9d9a294a3e03a03eb3d1153d527f7be5de8;hpb=da927ba997d68401563b927f92e6e40e021a8e5c;p=elogind.git diff --git a/src/resolve/resolved-manager.c b/src/resolve/resolved-manager.c index 9f61c9d9a..2edfb9f7f 100644 --- a/src/resolve/resolved-manager.c +++ b/src/resolve/resolved-manager.c @@ -370,7 +370,7 @@ static int manager_watch_hostname(Manager *m) { m->hostname_fd = open("/proc/sys/kernel/hostname", O_RDONLY|O_CLOEXEC|O_NDELAY|O_NOCTTY); if (m->hostname_fd < 0) { - log_warning("Failed to watch hostname: %m"); + log_warning_errno(errno, "Failed to watch hostname: %m"); return 0; } @@ -379,10 +379,8 @@ static int manager_watch_hostname(Manager *m) { if (r == -EPERM) /* kernels prior to 3.2 don't support polling this file. Ignore the failure. */ m->hostname_fd = safe_close(m->hostname_fd); - else { - log_error_errno(r, "Failed to add hostname event source: %m"); - return r; - } + else + return log_error_errno(r, "Failed to add hostname event source: %m"); } r = determine_hostname(&m->hostname); @@ -593,7 +591,7 @@ int manager_read_resolv_conf(Manager *m) { r = stat("/etc/resolv.conf", &st); if (r < 0) { if (errno != ENOENT) - log_warning("Failed to open /etc/resolv.conf: %m"); + log_warning_errno(errno, "Failed to open /etc/resolv.conf: %m"); r = -errno; goto clear; } @@ -616,13 +614,13 @@ int manager_read_resolv_conf(Manager *m) { f = fopen("/etc/resolv.conf", "re"); if (!f) { if (errno != ENOENT) - log_warning("Failed to open /etc/resolv.conf: %m"); + log_warning_errno(errno, "Failed to open /etc/resolv.conf: %m"); r = -errno; goto clear; } if (fstat(fileno(f), &st) < 0) { - log_error("Failed to stat open file: %m"); + log_error_errno(errno, "Failed to stat open file: %m"); r = -errno; goto clear; } @@ -669,6 +667,16 @@ int manager_read_resolv_conf(Manager *m) { if (s->marked) dns_server_free(s); + /* Whenever /etc/resolv.conf changes, start using the first + * DNS server of it. This is useful to deal with broken + * network managing implementations (like NetworkManager), + * that when connecting to a VPN place both the VPN DNS + * servers and the local ones in /etc/resolv.conf. Without + * resetting the DNS server to use back to the first entry we + * will continue to use the local one thus being unable to + * resolve VPN domains. */ + manager_set_dns_server(m, m->dns_servers); + return 0; clear: