Comparison

util/sasl/scram.lua @ 12945:d2c1c327a4d1

util.sasl.{scram,plain}: Pass authzid to SASL profile callback For potential future use. Used for logging into a different account than the one used for authentication.
author Kim Alvefur <zash@zash.se>
date Thu, 16 Mar 2023 13:57:30 +0100
parent 12941:e77c607e8da8
child 12975:d10957394a3c
comparison
equal deleted inserted replaced
12944:05ec70a9f755 12945:d2c1c327a4d1
99 if not state then 99 if not state then
100 -- we are processing client_first_message 100 -- we are processing client_first_message
101 local client_first_message = message; 101 local client_first_message = message;
102 102
103 -- TODO: fail if authzid is provided, since we don't support them yet 103 -- TODO: fail if authzid is provided, since we don't support them yet
104 -- luacheck: ignore 211/authzid
105 local gs2_header, gs2_cbind_flag, gs2_cbind_name, authzid, client_first_message_bare, username, clientnonce 104 local gs2_header, gs2_cbind_flag, gs2_cbind_name, authzid, client_first_message_bare, username, clientnonce
106 = s_match(client_first_message, "^(([pny])=?([^,]*),([^,]*),)(m?=?[^,]*,?n=([^,]*),r=([^,]*),?.*)$"); 105 = s_match(client_first_message, "^(([pny])=?([^,]*),([^,]*),)(m?=?[^,]*,?n=([^,]*),r=([^,]*),?.*)$");
107 106
108 if not gs2_cbind_flag then 107 if not gs2_cbind_flag then
109 return "failure", "malformed-request"; 108 return "failure", "malformed-request";
142 self.username = username; 141 self.username = username;
143 142
144 -- retrieve credentials 143 -- retrieve credentials
145 local stored_key, server_key, salt, iteration_count; 144 local stored_key, server_key, salt, iteration_count;
146 if self.profile.plain then 145 if self.profile.plain then
147 local password, status = self.profile.plain(self, username, self.realm) 146 local password, status = self.profile.plain(self, username, self.realm, authzid)
148 if status == nil then return "failure", "not-authorized" 147 if status == nil then return "failure", "not-authorized"
149 elseif status == false then return "failure", "account-disabled" end 148 elseif status == false then return "failure", "account-disabled" end
150 149
151 password = saslprep(password); 150 password = saslprep(password);
152 if not password then 151 if not password then
163 log("error", "Generating authentication database failed. Reason: %s", stored_key); 162 log("error", "Generating authentication database failed. Reason: %s", stored_key);
164 return "failure", "temporary-auth-failure"; 163 return "failure", "temporary-auth-failure";
165 end 164 end
166 elseif self.profile[profile_name] then 165 elseif self.profile[profile_name] then
167 local status; 166 local status;
168 stored_key, server_key, iteration_count, salt, status = self.profile[profile_name](self, username, self.realm); 167 stored_key, server_key, iteration_count, salt, status = self.profile[profile_name](self, username, self.realm, authzid);
169 if status == nil then return "failure", "not-authorized" 168 if status == nil then return "failure", "not-authorized"
170 elseif status == false then return "failure", "account-disabled" end 169 elseif status == false then return "failure", "account-disabled" end
171 end 170 end
172 171
173 local nonce = clientnonce .. generate_uuid(); 172 local nonce = clientnonce .. generate_uuid();