diff --git a/header-auth.go b/header-auth.go index 5ead0a62..e030af2a 100644 --- a/header-auth.go +++ b/header-auth.go @@ -13,7 +13,7 @@ type HeaderAuth struct { Values map[string]string } -var regHeaderAuthKeyValue = regexp.MustCompile("^([a-z]+)=(\"(.+?)\"|([a-zA-Z0-9]+))(, *|$)") +var regHeaderAuthKeyValue = regexp.MustCompile("^([a-z]+)=(\"(.*?)\"|([a-zA-Z0-9]+))(, *|$)") // ReadHeaderAuth parses an Authenticate or a WWW-Authenticate header. func ReadHeaderAuth(in string) (*HeaderAuth, error) { diff --git a/header-auth_test.go b/header-auth_test.go index 483a910b..3b525a57 100644 --- a/header-auth_test.go +++ b/header-auth_test.go @@ -63,7 +63,7 @@ var casesHeaderAuth = []struct { }, }, { - "digest response", + "digest response 1", `Digest username="aa", realm="bb", nonce="cc", uri="dd", response="ee"`, `Digest realm="bb", nonce="cc", response="ee", uri="dd", username="aa"`, &HeaderAuth{ @@ -77,6 +77,21 @@ var casesHeaderAuth = []struct { }, }, }, + { + "digest response with empty field", + `Digest username="", realm="IPCAM", nonce="5d17cd12b9fa8a85ac5ceef0926ea5a6", uri="rtsp://localhost:8554/mystream", response="c072ae90eb4a27f4cdcb90d62266b2a1"`, + `Digest realm="IPCAM", nonce="5d17cd12b9fa8a85ac5ceef0926ea5a6", response="c072ae90eb4a27f4cdcb90d62266b2a1", uri="rtsp://localhost:8554/mystream", username=""`, + &HeaderAuth{ + Prefix: "Digest", + Values: map[string]string{ + "username": "", + "realm": "IPCAM", + "nonce": "5d17cd12b9fa8a85ac5ceef0926ea5a6", + "uri": "rtsp://localhost:8554/mystream", + "response": "c072ae90eb4a27f4cdcb90d62266b2a1", + }, + }, + }, } func TestHeaderAuthRead(t *testing.T) {