From f675da905378fee408ef277bf838cfb4d45aa532 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("