Commit graph

55 commits

Author SHA1 Message Date
Dan Winship
282a9720ab dns-manager: add dns=none
Add a new dns mode "none", meaning that NM should not modify
resolv.conf at all.

https://bugzilla.gnome.org/show_bug.cgi?id=690404
2013-04-03 10:23:49 -04:00
Dan Winship
df1f4bee0e dns-manager, config: make the dns config key single-valued
Make the main/dns config key be a single value rather than a list of
plugins. Since there is currently only one valid value for it
("dnsmasq"), this is backward-compatible.

In the future, it will be possible to specify custom DNS-configuring
scripts here, which is a more flexible way of handling complicated
behavior than trying to create chainable internal plugins.
2013-04-03 10:23:49 -04:00
Dan Winship
a15558daed dns-manager: minor cleanups
Remove the unused NMDnsPlugin::init method, some unused #includes, and
an out-of-date comment.

Use the correct macro for the default "/etc/resolv.conf" path.

Simplify NMDnsManager::dispose() a bit.

Make nm_dns_dnsmasq_new() return an NMDnsPlugin* rather than
NMDnsDnsmasq*.
2013-04-03 10:23:49 -04:00
Dan Winship
213a3a4d2e core: don't pass config data to NMDHCPManager and NMDnsManager
Rather than passing specific bits of data to NMDHCPManager and
NMDnsManager, just let them call nm_config_get() and then get the data
themselves.

Also, remove the GError argument from nm_dhcp_manager_new(), since the
function never returned NULL. This in turn means there is no longer
any need for a distinction between nm_dhcp_manager_new() and
nm_dhcp_manager_get(), so remove the former.
2013-04-03 10:23:48 -04:00
Dan Winship
228f6459e1 dns-manager: remove an incorrect and unnecessary line
gcc 4.8.0 has a new warning that triggers on

    static void
    compute_hash (NMDnsManager *self, guint8 buffer[HASH_LEN])
    {
        ...
        memset (buffer, 0, sizeof (buffer));
        ...
    }

because "sizeof (buffer)" is *not* HASH_LEN, it's sizeof(guint8*). The
memset() was not necessary anyway since the g_checksum_get_digest()
after it will always end up filling in buffer, so just remove it.

https://bugzilla.gnome.org/show_bug.cgi?id=697041
2013-04-02 16:15:06 -04:00
Jiří Klimeš
07c5651a36 policy,dns: fix a race in looking up hostname and updating DNS (rh #877084)
"config-changed" signal is added to dns-manager and emited when resolv.conf is
changed. Policy listens for the signal and restarts reverse-lookup in order to
get correct results.
2013-02-12 15:40:08 +01:00
Dan Williams
778d1cf2e8 core: track which interface an IP config came from
Various bits of code want the network interface which an IP config
came from, for example when distinguishing which interface to
send DNS requests to when the DNS servers are link-local.  DNS
plugins may also want this data for various reasons.

So it makes sense to attach the interface name to the IP config
object when the DNS manager gets it, so that later DNS updates
that don't have any interface information (hostname changes, etc)
can still generate correct DNS information.

This also eliminates the "last_iface" hack, which was often
inaccurate.

It also now sends "NetworkManager" to SUSE netconfig as the
interface name, because the DNS information being sent is already
merged/prioritized and not specific to a network interface, so
it's time to stop lying about where it came from.
2013-02-07 15:31:00 -06:00
Dan Williams
a455d42de2 dnsmasq: only pass confdir if it exists (rh #873621)
dnsmasq exits if the --conf-dir does not exist.  Which isn't
very useful.

Inspired by Federico Simoncelli <fsimonce@redhat.com>:
https://mail.gnome.org/archives/networkmanager-list/2012-June/msg00011.html
2012-12-06 15:18:28 -06:00
Dan Williams
fcdbf17f35 dnsmasq: trivial cleanup
Use an index variable so we dont' have to keep track of indexes
manually.
2012-12-06 15:18:24 -06:00
Pavel Šimerda
d82669d3fd build: unify NetworkManager path handling (some paths are changed)
Use autoconf/automake variables for NetworkManager paths. Use
NetworkManager subdirectory where appropriate.

Files in /var/run (or /run on some distros) are moved into a separate
directory as is usual with other daemons. It makes the filesystem
more readable and file prefixing unnecessary.

/var/run/NetworkManager.pid -> /var/run/NetworkManager/NetworkManager.pid
/var/run/nm-dns-dnsmasq.pid -> /var/run/NetworkManager/dnsmasq.pid
/var/run/nm-dns-dnsmasq.conf -> /var/run/NetworkManager/dnsmasq.conf

The /var/run/NetworkManager directory is created at runtime, if it doesn't
exist.

Note: Path-based security policies like SELinux and AppArmor may need to
be adapted.
2012-11-05 14:01:47 +01:00
Pavel Šimerda
00f1d251b4 trivial: remove obsolete HAVE_SELINUX conditional sections
This macro is not defined by the build system.
2012-11-02 01:27:34 +01:00
Pavel Šimerda
71e5437f18 distro: add --with-netconfig option for SUSE
NetworkManager can use resolvconf and netconfig as alternatives
to direct modifications to /etc/resolv.conf. You can now choose
whether to build with netconfig or not.

The default is --with-netconfig=yes on SUSE and --with-netconfig=no
on other distributions. Default --with-resolvconf=no still applies
on any distribution.
2012-10-30 00:35:57 +01:00
Pavel Šimerda
97745c7498 distro: remove nm_backend_update_dns()
This function was basically the same for all distributions and
was used only in one place. It tried to restart nscd or ask it
to reload configuration. This is not necessary as nscd uses
inotify to watch /etc/resolv.conf.
2012-09-25 16:44:11 -05:00
Jiří Klimeš
585564b9f5 dnsmasq: don't crash when there are no nameservers in IP config (rh #768531) 2012-09-06 11:40:52 +02:00
Pavel Šimerda
3e0f1d9129 dns: remove broken bind plugin 2012-08-15 12:24:20 -05:00
Jiří Klimeš
edb85e9720 core: fix NM_IS_*_CLASS(klass) macros
The argument is 'klass' not 'obj'.
2012-07-27 13:15:54 +02:00
Jakub Dorňák
ac152ece02 dnsmasq: allow custom configuration via files in /etc/NetworkManager/dnsmasq.d (bgo #679628)
We don't use the default dnsmasq directory because packages often drop files
there that don't take account of NM's specific use-case and end up conflicting
with the specific local caching nameserver functionality that NM uses dnsmasq
for.  NM's private dnsmasq is orthogonal to whatever global dnsmasq
daemon may be running, and with that daemons configuration.

(dcbw: change directory to private one)
2012-07-25 13:18:14 -05:00
Dan Williams
f76aa4f77c dns: fix change hashing and add batch update functions
The previous code did a cheap hash based on pointers, under the
assumption that the IP configs don't get recreated.  But with IPv6
the IP6 config that's eventually applied is a composite of the
DHCPv6 and the RA information, and is thus recreated each time
something in the DHCPv6 or RA changes. Switch to actually hashing
the IP config data and its order to prevent this problem.

Next, add functions to signal that a batch of updates will be
started, and to only commit those updates when all of them
have landed, and if they have actually changed anything.  We'll
use these functions later to reduce the number of changes
that get made to /etc/resolv.conf.
2012-06-12 09:58:05 -05:00
Dan Winship
960c1ae8ff vpn: support IPv6 over VPNs
Add new API to allow passing both IPv4 and IPv6 configuration
information from VPN plugins to the backend.

Now instead of a single Ip4Config, a plugin has Config, Ip4Config, and
Ip6Config. "Config" contains information which is neither IPv4 nor
IPv6 specific, and also indicates which of Ip4Config and Ip6Config are
present. Ip4Config now only contains the IPv4-specific bits of
configuration.

There is backward compatibility in both directions: if the daemon is
new and the VPN plugin is old, then NM will notice that the plugin
emitted the Ip4Config signal without having emitted the Config signal
first, and so will assume that it is IPv4-only, and that the generic
bits of configuration have been included with the Ip4Config. If the
daemon is old and the plugin is new, then NMVPNPlugin will copy the
values from the generic config into the IPv4 config as well. (In fact,
NMVPNPlugin *always* does this, because it's harmless, and it's easier
than actually checking the daemon version.)

Currently the VPN is still configured all-at-once, after both IPv4 and
IPv6 information has been received, but the APIs allow for the
possibility of configuring them one at a time in the future.
2012-05-30 14:24:46 -04:00
Jiří Klimeš
78dda3b093 core: unblock signals for child processes we spawn out of NM (rh #739836)
Commit 217c5bf6ac fixed processing of unix
signals: signals are blocked in all threads and a dedicated thread handles the
signals using sigwait().
However, the commit forgot that child processes inherit signal mask as well.
That is why we have to unblock signals for child processes we spawn from NM, so
that they can receive signals.
2012-05-21 15:00:51 +02:00
Mathieu Trudel-Lapierre
956e63a673 dnsmasq: allow proxying dnssec data (lp:946093)
This will allow DNSSEC data to be visible in browsers, which would otherwise
not be the case by default because of dnsmasq acting as a middle-man for
resolution.

Otherwise, we have a regression from the libc resolver behavior.
2012-03-15 16:58:19 -05:00
Mathieu Trudel-Lapierre
86a8fa4a79 dns: dnsmasq plugin: update command-line parameters for starting dnsmasq
Drop --strict-order; dnsmasq is intelligent enough to ask nameservers in
an order that makes the best of possibly slow nameservers (or broken ones),
and interrogating them in strict order breaks this.

Add --no-hosts: by default dnsmasq will read /etc/hosts as a list of things
to resolve statically; this is something we want to avoid as nsswitch.conf
already lists files as the first data store to look at; where the entries
in /etc/hosts will already have been returned if that's what the user wants
to see. If the /etc/hosts file then changes, dnsmasq would have to be restarted
before the user would get the new value resolved externally. Avoid this, let
/etc/hosts override DNS entries normally through the resolver and show
changes as soon as the file is updated.
2012-03-01 18:00:03 -06:00
Colin Walters
74ec56d956 build: fix srcdir != builddir for new generated headers 2012-02-22 16:27:28 -06:00
Evan Broder
8b107e9ee8 dns: make caching DNS server config files readable by everyone
All of the information in the configuration files for local caching
dnsmasq or BIND servers are accessible already over the D-Bus
interface, so there's no sensitive information here.
2012-02-02 12:02:11 -06:00
Colin Walters
dab7dfaf35 build: fix srcdir != builddir
nm-version.h is in ${top_builddir}/include.
2012-01-09 14:20:36 -06:00
Dan Williams
2ea0f3e9c2 backends: clean them up somewhat
Put the two functions they provide into their own header so
places that need them don't have to include nm-system.h.
2011-11-17 18:55:07 -06:00
Mathieu Trudel-Lapierre
fc0739a5d4 dns: don't update routing and DNS if no devices were ever managed (lp:862134)
Avoids blowing away existing routes and resolv.conf if NM never
managed any devices.
2011-11-02 15:28:43 -05:00
Dan Williams
bc8d07a733 Revert "dns: don't update routing and DNS if no devices were ever managed"
This reverts commit 0051b44a09.

While fixing up the patch I (dcbw) forgot to include the lp# in
the commit message.
2011-11-02 15:27:24 -05:00
Mathieu Trudel-Lapierre
0051b44a09 dns: don't update routing and DNS if no devices were ever managed
Avoids blowing away existing routes and resolv.conf if NM never
managed any devices.
2011-11-02 15:05:43 -05:00
Dan Williams
3f08004aa1 dnsmasq: bump DNS cache size to 400
150 seems a bit low these days.
2011-10-05 17:28:22 -05:00
Michael Stapelberg
de38843828 dnsmasq: use '@interface' for link-local DNS servers in the dnsmasq config
inet_ntop() either returns 'address%interface' or just 'address'. In the first
case, we replace '%' with '@' since dnsmasq supports '%' only since version
2.58. In the second case, we append '@interface' to make it work.

(small fixes by dcbw)
2011-08-25 15:49:41 -05:00
Jiří Klimeš
c3893b5325 dns: append %interface to link-local IPv6 addresses in resolv.conf (rh #720001) 2011-07-12 16:09:01 +02:00
Philip Balister
0e45771126 core: yet more consistent usage of libnl CFLAGS and LIBS
This patch has been used in OpenEmbedded [1] since commit b167a9a9 [2][3].

[1] http://www.openembedded.org/
[2] http://cgit.openembedded.org/cgit.cgi/openembedded/commit/recipes/networkmanager/networkmanager/0002-respect-libnl-flags-also-in-dns-manager-vpn-manager-.patch?id=b167a9a9e55a7a493a7ee565cec9c7dd463362ff
[3] http://cgit.openembedded.org/cgit.cgi/openembedded/commit/?id=b167a9a9e55a7a493a7ee565cec9c7dd463362ff

Signed-off-by: Philip Balister <philip@balister.org>
2011-05-19 15:40:07 -05:00
Dan Williams
834315eb95 dns: write usable resolv.conf on shutdown if DNS plugins are used
If any ethernet devices were left up (because we can assume control
over them seamlessly when NM starts up again) make sure we write
out a usable resolv.conf for the device on shutdown, otherwise the
users networking is broken with an empty resolv.conf.  This only
happened when DNS plugins were active, in which case the user
would be left with a localhost-pointing resolv.conf but no
local caching nameserver running since NM shut it down when NM
terminated.
2011-04-18 12:41:16 -05:00
Dan Williams
d815cb9f33 logging: fix format string/argument disagreement
Now that the logging fixes make format checking actually work, fix
the issues it brings up.
2011-03-19 12:44:14 -05:00
Kjartan Maraas
c2b4b9c1d7 build: fix return types (bgo #644665)
Some functions were returning FALSE or 0 instead of NULL.
2011-03-14 01:05:51 -05:00
Kjartan Maraas
6d0d302916 build: do the right thing with config.h (bgo #644664)
1) it shouldn't be included in headers
2) it should be the first thing included in source files
3) it's needed for getting translation right
2011-03-14 01:01:22 -05:00
Jiří Klimeš
5444a35693 dns: fix up updating resolv.conf (rh #672282) 2011-02-22 18:30:29 +01:00
Dan Williams
6f37a967eb dns: direct IPv4 reverse DNS queries to split DNS servers
When split DNS is used for a local caching nameserver, make sure
that reverse DNS queries for hosts within the VPN tunnel are directed
to the VPN's nameservers, not to the public upstream nameservers.
2010-12-16 17:49:22 -06:00
Jiří Klimeš
f6f8ef2f8a dns: fix a crash due to uninitialized nis_domain (novell #655685)
Reported and tested by Raymond Wooninck. Thanks!
2010-11-24 12:51:08 +01:00
Dan Williams
be97e7f104 build: include <config.h> for kill(2), isblank(3), and isascii(3)
config.h defines _GNU_SOURCE, which in turn defines the bits necessary
for kill, isblank, and isascii.  So wherever we use those, we need
to make sure config.h is included.
2010-10-08 22:46:55 -05:00
Dan Williams
35b1ed9082 dns: actually kill stale dnsmasq process
Interpret the return value of kill(2) correctly...
2010-10-07 14:07:52 -05:00
Dan Williams
aeeac548a8 dns: fix use-after-free in plugin error path 2010-10-07 12:04:41 -05:00
Dan Williams
8199c7275b dns: warn that the BIND plugin is experimental
It's still got a bunch of issues that need debugging, like when VPN
nameservers exist but no domain and thus not doing split DNS, sometimes
hosts outside the VPN don't resolve correctly, which was previously
masked by having the non-VPN nameservers in /etc/resolv.conf where
glibc would erroneously use them instead of asking BIND.  To be fixed
in a subsequent patch.

The dnsmasq plugin seems to work great though.
2010-09-22 16:32:00 -05:00
Dan Williams
06bd99f617 dns: write only 127.0.0.1 to resolv.conf when caching
If all nameservers are listed in resolv.conf, glibc apparently
tries them all (even if 'options rotate' isn't specified??).  Leading
to queries for internet hosts being directed to VPN-specific DNS
servers in split-DNS situations.  I've verified this with wireshark;
I see queries going out over the tunnel to VPN nameservers for
non-internal addresses, while BIND itself never logs anything about
queries to VPN nameservers for that same address.  Thus the only
thing left is to blame glibc...
2010-09-21 00:18:15 -05:00
Dan Williams
20acb482c5 dns: allow random source ports for BIND caching DNS
Despite most guides saying that without restricting to port 53 queries
won't get through a firewall, I cannot make it work with this option.
DNS queries through a WRT54G just time out even when the WRT54G isn't
caching anything itself (ie, explicit upstream nameservers are the
forwarders in the bind config).
2010-09-21 00:08:01 -05:00
Dan Williams
e0a2aeaa7c dns: add BIND9 local caching nameserver support
For some reason split DNS doesn't work yet (all queries are directed
to the VPN nameserver if a VPN is active) but it otherwise works.
2010-09-16 15:31:47 -05:00
Dan Williams
1e33d1e906 dns: remove unused Chromium bits
This was supposed to hook up to the bits Adam Langley did last year
for his local-dns-cache DBus service, but I misunderstood the
architecture.  It was a separate service, not Chromium itself.  But
it's unclear what happened to his local-dns-cache since the project
doesn't seem to have any commits in a year and I'm unsure if it's
actually being used.  So remove this stuff for now.
2010-09-15 10:25:11 -05:00
Dan Williams
1da4a11ce5 dns: (dnsmasq) fix handling of multiple DNS servers in non-split configs 2010-09-14 23:55:41 -05:00
Dan Williams
57f6feb102 dns: only write out new DNS config if it really changed
Use a pseudo-hash to quickly check whether the DNS config has really
changed or not.  This is certainly better than the 500 line patch I
did then scrapped in favor of this approach... yay.  This helps ensure
that we don't kill then respawn caching DNS servers more often than
we have to.
2010-09-14 23:41:33 -05:00