diff options
author | Lennart Poettering <lennart@poettering.net> | 2021-03-25 11:43:52 +0100 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2021-03-25 13:12:19 +0100 |
commit | 1db8e6d1db0880de240e5598e28d24d708479434 (patch) | |
tree | e25b4f31bbb7c1f50de54ac3b87b7126655a0160 /src/resolve/resolved-dns-stub.c | |
parent | d451f0e84b1909ca0d24a1e3c135d5ffa2d8613c (diff) | |
download | systemd-1db8e6d1db0880de240e5598e28d24d708479434.tar.gz |
resolved: split dns_query_process_cname() into two separate functions
This does some refactoring: the dns_query_process_cname() function
becomes two: dns_query_process_cname_one() and
dns_query_process_cname_many(). The former will process exactly one
CNAME chain element, the latter will follow a chain for as long as
possible within the current packet.
dns_query_process_cname_many() is mostly identical to the old
dns_query_process_cname(), and all existing code is moved over to using
that.
This is mostly preparation for the next commit, where we make direct use
of dns_query_process_cname_one().
This also renames the DNS_QUERY_RESTARTED return value to
DNS_QUERY_CNAME. That's because in the dns_query_process_cname_many()
case as before if we return this we restarted the query in case we
reached the end of the chain without a conclusive answer, as before. But
in dns_query_process_cname_one() we'll only go one step anyway, and
leave restarting if needed to the caller. Hence DNS_QUERY_RESTARTED is a
bit of a misnomer in that case.
This also gets rid of the weird tail recursion in
dns_query_process_cname() and replaces it with an explicit loop in
dns_query_process_cname_many(). The old recursion wasn't a security
issue since we put a limit on the number of CNAMEs we follow anyway, but
it's still icky to scale stack use by that.
Diffstat (limited to 'src/resolve/resolved-dns-stub.c')
-rw-r--r-- | src/resolve/resolved-dns-stub.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/src/resolve/resolved-dns-stub.c b/src/resolve/resolved-dns-stub.c index 7cbbdc725c..cb5d075849 100644 --- a/src/resolve/resolved-dns-stub.c +++ b/src/resolve/resolved-dns-stub.c @@ -772,7 +772,7 @@ static void dns_stub_query_complete(DnsQuery *q) { switch (q->state) { case DNS_TRANSACTION_SUCCESS: - r = dns_query_process_cname(q); + r = dns_query_process_cname_many(q); if (r == -ELOOP) { /* CNAME loop, let's send what we already have */ log_debug_errno(r, "Detected CNAME loop, returning what we already have."); (void) dns_stub_send_reply(q, q->answer_rcode); @@ -782,7 +782,7 @@ static void dns_stub_query_complete(DnsQuery *q) { log_debug_errno(r, "Failed to process CNAME: %m"); break; } - if (r == DNS_QUERY_RESTARTED) + if (r == DNS_QUERY_CNAME) return; _fallthrough_; |