cockpit-project / cockpit

Cockpit is a web-based graphical interface for servers.
http://www.cockpit-project.org/
GNU Lesser General Public License v2.1
10.99k stars 1.1k forks source link

[Tests] test-webserver fails #11616

Closed stanislavlevin closed 5 years ago

stanislavlevin commented 5 years ago

Cockpit version: 191 OS: ALTLinux

I'm running Cockpit testsuite inside Hasher (https://en.altlinux.org/Hasher). There are only loopback ifaces ( usually only IPv4).

I have 7 FAILs:

PASS: test-webserver 1 /web-server/table
**
cockpit-protocol:ERROR:src/common/test-webserver.c:357:perform_http_request: assertion failed (error == NULL): Error resolving ?localhost?: Name or service not known (g-resolver-error-quark, 0)
FAIL: test-webserver 2 /web-server/query-string
**
cockpit-protocol:ERROR:src/common/test-webserver.c:357:perform_http_request: assertion failed (error == NULL): Error resolving ?localhost?: Name or service not known (g-resolver-error-quark, 0)
FAIL: test-webserver 3 /web-server/host-header
**
cockpit-protocol:ERROR:src/common/test-webserver.c:357:perform_http_request: assertion failed (error == NULL): Error resolving ?localhost?: Name or service not known (g-resolver-error-quark, 0)
FAIL: test-webserver 4 /web-server/not-found
SKIP: test-webserver 5 # skip -- No non-loopback network interface available
**
cockpit-protocol:ERROR:src/common/test-webserver.c:357:perform_http_request: assertion failed (error == NULL): Error resolving ?localhost?: Name or service not known (g-resolver-error-quark, 0)
FAIL: test-webserver 6 /web-server/no-redirect-localhost
SKIP: test-webserver 7 # skip -- No non-loopback network interface available
SKIP: test-webserver 8 # skip -- No non-loopback network interface available
**
cockpit-protocol:ERROR:src/common/test-webserver.c:357:perform_http_request: assertion failed (error == NULL): Error resolving ?localhost?: Name or service not known (g-resolver-error-quark, 0)
FAIL: test-webserver 9 /web-server/handle-resource
PASS: test-webserver 10 /web-server/url-root
**
cockpit-protocol:ERROR:src/common/test-webserver.c:357:perform_http_request: assertion failed (error == NULL): Error resolving ?localhost?: Name or service not known (g-resolver-error-quark, 0)
FAIL: test-webserver 11 /web-server/url-root-handlers
**
cockpit-protocol:ERROR:src/common/test-webserver.c:357:perform_http_request: assertion failed (error == NULL): Error resolving ?localhost?: Name or service not known (g-resolver-error-quark, 0)
FAIL: test-webserver 12 /web-server/local-address-only

As it was found out an actual host resolving happens in gio/gthreadedresolver.c:do_lookup_by_name by calling the getaddrinfo function with ai_flags=AI_ADDRCONFIG.

According to getaddrinfo(3):

    If hints.ai_flags includes the AI_ADDRCONFIG flag, then IPv4
    addresses are returned in the list pointed to by res only if the
    local system has at least one IPv4 address configured, and IPv6
    addresses are returned only if the local system has at least one IPv6
    address configured.  The loopback address is not considered for this
    case as valid as a configured address.

Steps to reproduce

  1. Disable all non-loopback ifaces
  2. Compile an attached reproducer and run ( gcc resolv.c -o resolv_localhost && ./resolv_localhost)
  3. The error message getaddrinfo: Name or service not known should appear

The same reproducer behavior I see on Fedora29 right now.

stanislavlevin commented 5 years ago

resolv.txt