util.sasl.oauthbearer: Tighter parsing of SASL message

Previously the kvsep before and after the kvpairs would have been
included in kvpairs, which is incorrect but should be harmless.
This commit is contained in:
Kim Alvefur 2023-05-26 17:39:53 +02:00
parent dd2e84271f
commit 8f7b31f616

View file

@ -11,12 +11,14 @@ local function oauthbearer(self, message)
return "failure", "not-authorized";
end
local gs2_header, kvpairs = message:match("^(n,[^,]*,)(.+)$");
-- gs2-header kvsep *kvpair kvsep
local gs2_header, kvpairs = message:match("^(n,[^,]*,)\001(.+)\001$");
if not gs2_header then
return "failure", "malformed-request";
end
local gs2_authzid = gs2_header:match("^[^,]*,a=([^,]*),$");
-- key "=" value kvsep
local auth_header;
for k, v in kvpairs:gmatch("([a-zA-Z]+)=([\033-\126 \009\r\n]*)\001") do
if k == "auth" then