]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
nss-resolve: varlink_call() set error_id only when r >= 0
authorYu Watanabe <watanabe.yu+github@gmail.com>
Sun, 6 Dec 2020 13:41:35 +0000 (22:41 +0900)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Mon, 7 Dec 2020 08:25:39 +0000 (09:25 +0100)
Fixes #17870.

src/nss-resolve/nss-resolve.c

index 566b3194840a1eafcc6ea4ad3f94b53fd1bafcaa..3fee4f5813a59036f603285a7d8847924742b084 100644 (file)
@@ -200,16 +200,17 @@ enum nss_status _nss_resolve_gethostbyname4_r(
         if (r < 0)
                 goto fail;
 
+        /* Return NSS_STATUS_UNAVAIL when communication with systemd-resolved fails, allowing falling
+         * back to other nss modules. Treat all other error conditions as NOTFOUND. This includes
+         * DNSSEC errors and suchlike. (We don't use UNAVAIL in this case so that the nsswitch.conf
+         * configuration can distinguish such executed but negative replies from complete failure to
+         * talk to resolved). */
         r = varlink_call(link, "io.systemd.Resolve.ResolveHostname", cparams, &rparams, &error_id, NULL);
-        if (r < 0) {
+        if (r < 0)
+                goto fail;
+        if (!isempty(error_id)) {
                 if (!error_shall_fallback(error_id))
                         goto not_found;
-
-                /* Return NSS_STATUS_UNAVAIL when communication with systemd-resolved fails, allowing falling
-                   back to other nss modules. Treat all other error conditions as NOTFOUND. This includes
-                   DNSSEC errors and suchlike. (We don't use UNAVAIL in this case so that the nsswitch.conf
-                   configuration can distinguish such executed but negative replies from complete failure to
-                   talk to resolved). */
                 goto fail;
         }
 
@@ -352,10 +353,11 @@ enum nss_status _nss_resolve_gethostbyname3_r(
                 goto fail;
 
         r = varlink_call(link, "io.systemd.Resolve.ResolveHostname", cparams, &rparams, &error_id, NULL);
-        if (r < 0) {
+        if (r < 0)
+                goto fail;
+        if (!isempty(error_id)) {
                 if (!error_shall_fallback(error_id))
                         goto not_found;
-
                 goto fail;
         }
 
@@ -555,10 +557,11 @@ enum nss_status _nss_resolve_gethostbyaddr2_r(
                 goto fail;
 
         r = varlink_call(link, "io.systemd.Resolve.ResolveAddress", cparams, &rparams, &error_id, NULL);
-        if (r < 0) {
+        if (r < 0)
+                goto fail;
+        if (!isempty(error_id)) {
                 if (!error_shall_fallback(error_id))
                         goto not_found;
-
                 goto fail;
         }