From 5a6d233924abd3796ec3d9d7fe3c4993fcc708a3 Mon Sep 17 00:00:00 2001 From: Joram Schrijver Date: Sat, 6 Aug 2022 02:59:00 +0200 Subject: [PATCH] dlna: fix SOAP action header parsing - fixes #6354 Changes in github.com/anacrolix/dms changed upnp.ServiceURN to include a namespace identifier. This identifier was previously hardcoded, but is now parsed out of the URN. The old SOAP action header parsing logic was duplicated in rclone and did not handle this field. Resulting responses included a URN with an empty namespace identifier, breaking clients. --- cmd/serve/dlna/dlna.go | 2 +- cmd/serve/dlna/dlna_test.go | 2 ++ cmd/serve/dlna/dlna_util.go | 34 ---------------------------------- 3 files changed, 3 insertions(+), 35 deletions(-) diff --git a/cmd/serve/dlna/dlna.go b/cmd/serve/dlna/dlna.go index 0c9d2fbca..fc802226c 100644 --- a/cmd/serve/dlna/dlna.go +++ b/cmd/serve/dlna/dlna.go @@ -186,7 +186,7 @@ func (s *server) rootDescHandler(w http.ResponseWriter, r *http.Request) { // Handle a service control HTTP request. func (s *server) serviceControlHandler(w http.ResponseWriter, r *http.Request) { soapActionString := r.Header.Get("SOAPACTION") - soapAction, err := parseActionHTTPHeader(soapActionString) + soapAction, err := upnp.ParseActionHTTPHeader(soapActionString) if err != nil { serveError(s, w, "Could not parse SOAPACTION header", err) return diff --git a/cmd/serve/dlna/dlna_test.go b/cmd/serve/dlna/dlna_test.go index acc1d0ffe..8327ee054 100644 --- a/cmd/serve/dlna/dlna_test.go +++ b/cmd/serve/dlna/dlna_test.go @@ -119,6 +119,8 @@ func TestContentDirectoryBrowseMetadata(t *testing.T) { assert.Equal(t, http.StatusOK, resp.StatusCode) body, err := ioutil.ReadAll(resp.Body) require.NoError(t, err) + // should contain an appropriate URN + require.Contains(t, string(body), "urn:schemas-upnp-org:service:ContentDirectory:1") // expect a element require.Contains(t, string(body), html.EscapeString("