From f1eaccedfa08455d699d00dcda63b95aeb34833e Mon Sep 17 00:00:00 2001 From: Brent Baude Date: Thu, 30 Jan 2020 12:40:19 -0600 Subject: fix longname handling for bindings the api needs to account for image input where the image is encoded as a fqd image name. Signed-off-by: Brent Baude --- pkg/api/handlers/utils/containers.go | 7 +++---- pkg/api/handlers/utils/handler.go | 18 ++++++++++++++++++ 2 files changed, 21 insertions(+), 4 deletions(-) (limited to 'pkg/api/handlers/utils') diff --git a/pkg/api/handlers/utils/containers.go b/pkg/api/handlers/utils/containers.go index 2c986db3a..74485edf2 100644 --- a/pkg/api/handlers/utils/containers.go +++ b/pkg/api/handlers/utils/containers.go @@ -9,7 +9,6 @@ import ( "github.com/containers/libpod/cmd/podman/shared" "github.com/containers/libpod/libpod" "github.com/containers/libpod/libpod/define" - "github.com/gorilla/mux" "github.com/gorilla/schema" "github.com/pkg/errors" ) @@ -26,7 +25,7 @@ func KillContainer(w http.ResponseWriter, r *http.Request) (*libpod.Container, e Error(w, "Something went wrong.", http.StatusBadRequest, errors.Wrapf(err, "Failed to parse parameters for %s", r.URL.String())) return nil, err } - name := mux.Vars(r)["name"] + name := GetName(r) con, err := runtime.LookupContainer(name) if err != nil { ContainerNotFound(w, name, err) @@ -54,7 +53,7 @@ func KillContainer(w http.ResponseWriter, r *http.Request) (*libpod.Container, e func RemoveContainer(w http.ResponseWriter, r *http.Request, force, vols bool) { runtime := r.Context().Value("runtime").(*libpod.Runtime) - name := mux.Vars(r)["name"] + name := GetName(r) con, err := runtime.LookupContainer(name) if err != nil { ContainerNotFound(w, name, err) @@ -87,7 +86,7 @@ func WaitContainer(w http.ResponseWriter, r *http.Request) (int32, error) { UnSupportedParameter("condition") } - name := mux.Vars(r)["name"] + name := GetName(r) con, err := runtime.LookupContainer(name) if err != nil { ContainerNotFound(w, name, err) diff --git a/pkg/api/handlers/utils/handler.go b/pkg/api/handlers/utils/handler.go index f2ce26f1a..970f93791 100644 --- a/pkg/api/handlers/utils/handler.go +++ b/pkg/api/handlers/utils/handler.go @@ -3,11 +3,14 @@ package utils import ( "encoding/json" "fmt" + "github.com/pkg/errors" "io" "net/http" + "net/url" "os" "strings" + "github.com/gorilla/mux" "github.com/sirupsen/logrus" ) @@ -59,3 +62,18 @@ func FilterMapToString(filters map[string][]string) (string, error) { } return string(f), nil } + +func getVar(r *http.Request, k string) string { + val := mux.Vars(r)[k] + safeVal, err := url.PathUnescape(val) + if err != nil { + logrus.Error(errors.Wrapf(err, "failed to unescape mux key %s, value %s", k, val)) + return val + } + return safeVal +} + +// GetName extracts the name from the mux +func GetName(r *http.Request) string { + return getVar(r, "name") +} -- cgit v1.2.3-54-g00ecf