Skip to content

Commit

Permalink
server: fix url parsing in info
Browse files Browse the repository at this point in the history
When we are activated by systemd the code assumed that we had a valid
URL which was not the case so it failed to parse the URL which causes
the info call to fail all the time.
This fixes two problems first add the schema to the systemd activated
listener URL so it can be parsed correctly but second simply do not
parse it as url as all we care about in the info call is if it is unix
and the file path exists.

Fixes #24152

Signed-off-by: Paul Holzinger <[email protected]>
  • Loading branch information
Luap99 committed Oct 7, 2024
1 parent e2e1996 commit 45df394
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 9 deletions.
2 changes: 1 addition & 1 deletion cmd/podman/system/service_abi.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ func restService(flags *pflag.FlagSet, cfg *entities.PodmanConfig, opts entities
if listener == nil {
return errors.New("unexpected fd received from systemd: cannot listen on it")
}
libpodRuntime.SetRemoteURI(listeners[0].Addr().String())
libpodRuntime.SetRemoteURI(listeners[0].Addr().Network() + "://" + listeners[0].Addr().String())
} else {
uri, err := url.Parse(opts.URI)
if err != nil {
Expand Down
14 changes: 6 additions & 8 deletions pkg/domain/infra/abi/system.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import (
"os"
"os/exec"
"path/filepath"
"strings"

"github.com/containers/podman/v5/libpod/define"
"github.com/containers/podman/v5/pkg/domain/entities"
Expand Down Expand Up @@ -48,19 +49,16 @@ func (ic *ContainerEngine) Info(ctx context.Context) (*define.Info, error) {
info.Host.RemoteSocket.Path = uri.Path
}

uri, err := url.Parse(ic.Libpod.RemoteURI())
if err != nil {
return nil, err
}

if uri.Scheme == "unix" {
err := fileutils.Exists(uri.Path)
// check if the unix path exits, if not unix socket we always we assume it exists, i.e. tcp socket
path, found := strings.CutPrefix(info.Host.RemoteSocket.Path, "unix://")
if found {
err := fileutils.Exists(path)
info.Host.RemoteSocket.Exists = err == nil
} else {
info.Host.RemoteSocket.Exists = true
}

return info, err
return info, nil
}

// SystemPrune removes unused data from the system. Pruning pods, containers, networks, volumes and images.
Expand Down
5 changes: 5 additions & 0 deletions test/e2e/systemd_activate_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,11 @@ var _ = Describe("Systemd activate", func() {
return testUtils.SystemExec(podmanTest.PodmanBinary, args)
}

// regression check for https://github.com/containers/podman/issues/24152
session := podmanRemote("info", "--format", "{{.Host.RemoteSocket.Path}}--{{.Host.RemoteSocket.Exists}}")
Expect(session).Should(testUtils.ExitCleanly())
Expect(session.OutputToString()).To(Equal("tcp://" + addr + "--true"))

containerName := "top_" + testUtils.RandomString(8)
apiSession := podmanRemote(
"create", "--tty", "--name", containerName, "--entrypoint", "top",
Expand Down

0 comments on commit 45df394

Please sign in to comment.