diff options
author | Paul Holzinger <pholzing@redhat.com> | 2021-06-08 11:28:46 +0200 |
---|---|---|
committer | Paul Holzinger <pholzing@redhat.com> | 2021-06-08 18:14:00 +0200 |
commit | 18fa124dfc5c04cd985446e2e12acc4d1832a45c (patch) | |
tree | 29ba521c35a9c28f55363795f7e0ead5704ae7aa | |
parent | 9a3a7327fdafaac66c99130a6729e4bcde8df0b0 (diff) | |
download | podman-18fa124dfc5c04cd985446e2e12acc4d1832a45c.tar.gz podman-18fa124dfc5c04cd985446e2e12acc4d1832a45c.tar.bz2 podman-18fa124dfc5c04cd985446e2e12acc4d1832a45c.zip |
Improve systemd-resolved detection
When 127.0.0.53 is the only nameserver in /etc/resolv.conf assume
systemd-resolved is used. This is better because /etc/resolv.conf does
not have to be symlinked to /run/systemd/resolve/stub-resolv.conf in
order to use systemd-resolved.
[NO TESTS NEEDED]
Fixes: #10570
Signed-off-by: Paul Holzinger <pholzing@redhat.com>
-rw-r--r-- | libpod/container_internal_linux.go | 20 |
1 files changed, 9 insertions, 11 deletions
diff --git a/libpod/container_internal_linux.go b/libpod/container_internal_linux.go index a3acc3198..94bf7855b 100644 --- a/libpod/container_internal_linux.go +++ b/libpod/container_internal_linux.go @@ -1650,22 +1650,20 @@ func (c *Container) generateResolvConf() (string, error) { } } - // Determine the endpoint for resolv.conf in case it is a symlink - resolvPath, err := filepath.EvalSymlinks(resolvConf) + contents, err := ioutil.ReadFile(resolvConf) // resolv.conf doesn't have to exists if err != nil && !os.IsNotExist(err) { return "", err } - // Determine if symlink points to any of the systemd-resolved files - if strings.HasPrefix(resolvPath, "/run/systemd/resolve/") { - resolvPath = "/run/systemd/resolve/resolv.conf" - } - - contents, err := ioutil.ReadFile(resolvPath) - // resolv.conf doesn't have to exists - if err != nil && !os.IsNotExist(err) { - return "", err + ns := resolvconf.GetNameservers(contents) + // check if systemd-resolved is used, assume it is used when 127.0.0.53 is the only nameserver + if len(ns) == 1 && ns[0] == "127.0.0.53" { + // read the actual resolv.conf file for systemd-resolved + contents, err = ioutil.ReadFile("/run/systemd/resolve/resolv.conf") + if err != nil { + return "", errors.Wrapf(err, "detected that systemd-resolved is in use, but could not locate real resolv.conf") + } } ipv6 := false |