]> git.ipfire.org Git - thirdparty/systemd.git/commit - src/resolve/resolved-manager.c
resolved: rework what ResolveHostname() with family == AF_UNSPEC means
authorLennart Poettering <lennart@poettering.net>
Sun, 31 Jan 2016 23:00:01 +0000 (00:00 +0100)
committerLennart Poettering <lennart@poettering.net>
Mon, 1 Feb 2016 21:18:15 +0000 (22:18 +0100)
commit011696f76233486bc56c266b18a328924f70269c
tree967c13ba4d041fa0f95a2dd56ba2dda5fbf56f50
parent2afcd6902b5c04e8b05c9d1ffd8bc6175fac6efb
resolved: rework what ResolveHostname() with family == AF_UNSPEC means

Previously, if a hostanem is resolved with AF_UNSPEC specified, this would be used as indication to resolve both an
AF_INET and an AF_INET6 address. With this change this logic is altered: an AF_INET address is only resolved if there's
actually a routable IPv4 address on the specific interface, and similar an AF_INET6 address is only resolved if there's
a routable IPv6 address. With this in place, it's ensured that the returned data is actually connectable by
applications. This logic mimics glibc's resolver behaviour.

Note that if the client asks explicitly for AF_INET or AF_INET6 it will get what it asked for.

This also simplifies the logic how it is determined whether a specific lookup shall take place on a scope.
Specifically, the checks with dns_scope_good_key() are now moved out of the transaction code and into the query code,
so that we don't even create a transaction object on a specific scope if we cannot execute the resolution on it anyway.
src/resolve/resolved-bus.c
src/resolve/resolved-dns-query.c
src/resolve/resolved-dns-query.h
src/resolve/resolved-dns-scope.c
src/resolve/resolved-dns-scope.h
src/resolve/resolved-dns-transaction.c
src/resolve/resolved-link.c
src/resolve/resolved-link.h
src/resolve/resolved-manager.c
src/resolve/resolved-manager.h