Mercurial > prosody-hg
comparison plugins/mod_auth_internal_plain.lua @ 10914:0d7d71dee0a0 0.11
mod_auth_internal_*: Apply saslprep to passwords
Related to #1560
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Sat, 23 May 2020 14:17:04 +0200 |
| parents | 4a9275594981 |
| children | c98aebe601f9 |
comparison
equal
deleted
inserted
replaced
| 10913:54953b5a214b | 10914:0d7d71dee0a0 |
|---|---|
| 6 -- COPYING file in the source package for more information. | 6 -- COPYING file in the source package for more information. |
| 7 -- | 7 -- |
| 8 | 8 |
| 9 local usermanager = require "core.usermanager"; | 9 local usermanager = require "core.usermanager"; |
| 10 local new_sasl = require "util.sasl".new; | 10 local new_sasl = require "util.sasl".new; |
| 11 local saslprep = require "util.encodings".stringprep.saslprep; | |
| 11 | 12 |
| 12 local log = module._log; | 13 local log = module._log; |
| 13 local host = module.host; | 14 local host = module.host; |
| 14 | 15 |
| 15 local accounts = module:open_store("accounts"); | 16 local accounts = module:open_store("accounts"); |
| 18 local provider = {}; | 19 local provider = {}; |
| 19 | 20 |
| 20 function provider.test_password(username, password) | 21 function provider.test_password(username, password) |
| 21 log("debug", "test password for user '%s'", username); | 22 log("debug", "test password for user '%s'", username); |
| 22 local credentials = accounts:get(username) or {}; | 23 local credentials = accounts:get(username) or {}; |
| 24 password = saslprep(password); | |
| 25 if not password then | |
| 26 return nil, "Password fails SASLprep."; | |
| 27 end | |
| 23 | 28 |
| 24 if password == credentials.password then | 29 if password == saslprep(credentials.password) then |
| 25 return true; | 30 return true; |
| 26 else | 31 else |
| 27 return nil, "Auth failed. Invalid username or password."; | 32 return nil, "Auth failed. Invalid username or password."; |
| 28 end | 33 end |
| 29 end | 34 end |
| 33 return (accounts:get(username) or {}).password; | 38 return (accounts:get(username) or {}).password; |
| 34 end | 39 end |
| 35 | 40 |
| 36 function provider.set_password(username, password) | 41 function provider.set_password(username, password) |
| 37 log("debug", "set_password for username '%s'", username); | 42 log("debug", "set_password for username '%s'", username); |
| 43 password = saslprep(password); | |
| 44 if not password then | |
| 45 return nil, "Password fails SASLprep."; | |
| 46 end | |
| 38 local account = accounts:get(username); | 47 local account = accounts:get(username); |
| 39 if account then | 48 if account then |
| 40 account.password = password; | 49 account.password = password; |
| 41 return accounts:set(username, account); | 50 return accounts:set(username, account); |
| 42 end | 51 end |
| 55 function provider.users() | 64 function provider.users() |
| 56 return accounts:users(); | 65 return accounts:users(); |
| 57 end | 66 end |
| 58 | 67 |
| 59 function provider.create_user(username, password) | 68 function provider.create_user(username, password) |
| 69 password = saslprep(password); | |
| 70 if not password then | |
| 71 return nil, "Password fails SASLprep."; | |
| 72 end | |
| 60 return accounts:set(username, {password = password}); | 73 return accounts:set(username, {password = password}); |
| 61 end | 74 end |
| 62 | 75 |
| 63 function provider.delete_user(username) | 76 function provider.delete_user(username) |
| 64 return accounts:set(username, nil); | 77 return accounts:set(username, nil); |
