along with systemd; If not, see <http://www.gnu.org/licenses/>.
***/
-#include <arpa/inet.h>
#include <resolv.h>
-#include <net/if.h>
#include <sys/ioctl.h>
-#include <sys/poll.h>
+#include <poll.h>
#include <netinet/in.h>
#include "rtnl-util.h"
-#include "event-util.h"
-#include "network-util.h"
#include "network-internal.h"
-#include "conf-parser.h"
#include "socket-util.h"
#include "af-list.h"
#include "utf8.h"
assert(m);
- /* First, subscibe to interfaces coming and going */
+ /* First, subscribe to interfaces coming and going */
r = sd_rtnl_open(&m->rtnl, 3, RTNLGRP_LINK, RTNLGRP_IPV4_IFADDR, RTNLGRP_IPV6_IFADDR);
if (r < 0)
return r;
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;
}
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;
}
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;
}
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: