Software / code / prosody
Comparison
plugins/mod_saslauth.lua @ 3188:c690e3c5105c
mod_saslauth: Updated to use usermanager.get_sasl_handler.
| author | Waqas Hussain <waqas20@gmail.com> |
|---|---|
| date | Mon, 07 Jun 2010 02:40:14 +0500 |
| parent | 3178:46f5ed897beb |
| child | 3240:9782a222e941 |
comparison
equal
deleted
inserted
replaced
| 3187:a475fbce1990 | 3188:c690e3c5105c |
|---|---|
| 14 local base64 = require "util.encodings".base64; | 14 local base64 = require "util.encodings".base64; |
| 15 | 15 |
| 16 local nodeprep = require "util.encodings".stringprep.nodeprep; | 16 local nodeprep = require "util.encodings".stringprep.nodeprep; |
| 17 local datamanager_load = require "util.datamanager".load; | 17 local datamanager_load = require "util.datamanager".load; |
| 18 local usermanager_get_provider = require "core.usermanager".get_provider; | 18 local usermanager_get_provider = require "core.usermanager".get_provider; |
| 19 local usermanager_get_supported_methods = require "core.usermanager".get_supported_methods; | 19 local usermanager_get_sasl_handler = require "core.usermanager".get_sasl_handler; |
| 20 local usermanager_user_exists = require "core.usermanager".user_exists; | 20 local usermanager_user_exists = require "core.usermanager".user_exists; |
| 21 local usermanager_get_password = require "core.usermanager".get_password; | 21 local usermanager_get_password = require "core.usermanager".get_password; |
| 22 local usermanager_test_password = require "core.usermanager".test_password; | 22 local usermanager_test_password = require "core.usermanager".test_password; |
| 23 local t_concat, t_insert = table.concat, table.insert; | 23 local t_concat, t_insert = table.concat, table.insert; |
| 24 local tostring = tostring; | 24 local tostring = tostring; |
| 65 else | 65 else |
| 66 module:log("error", "Unknown SASL backend: %s", sasl_backend); | 66 module:log("error", "Unknown SASL backend: %s", sasl_backend); |
| 67 error("Unknown SASL backend"); | 67 error("Unknown SASL backend"); |
| 68 end | 68 end |
| 69 | 69 |
| 70 local getpass_authentication_profile = { | |
| 71 plain = function(username, realm) | |
| 72 local prepped_username = nodeprep(username); | |
| 73 if not prepped_username then | |
| 74 log("debug", "NODEprep failed on username: %s", username); | |
| 75 return "", nil; | |
| 76 end | |
| 77 local password = usermanager_get_password(prepped_username, realm); | |
| 78 if not password then | |
| 79 return "", nil; | |
| 80 end | |
| 81 return password, true; | |
| 82 end | |
| 83 }; | |
| 84 | |
| 85 local testpass_authentication_profile = { | |
| 86 plain_test = function(username, password, realm) | |
| 87 local prepped_username = nodeprep(username); | |
| 88 if not prepped_username then | |
| 89 log("debug", "NODEprep failed on username: %s", username); | |
| 90 return "", nil; | |
| 91 end | |
| 92 return usermanager_test_password(prepped_username, password, realm), true; | |
| 93 end | |
| 94 }; | |
| 95 | |
| 96 local anonymous_authentication_profile = { | 70 local anonymous_authentication_profile = { |
| 97 anonymous = function(username, realm) | 71 anonymous = function(username, realm) |
| 98 return true; -- for normal usage you should always return true here | 72 return true; -- for normal usage you should always return true here |
| 99 end | 73 end |
| 100 }; | 74 }; |
| 193 end | 167 end |
| 194 local realm = module:get_option("sasl_realm") or origin.host; | 168 local realm = module:get_option("sasl_realm") or origin.host; |
| 195 if module:get_option("anonymous_login") then | 169 if module:get_option("anonymous_login") then |
| 196 origin.sasl_handler = new_sasl(realm, anonymous_authentication_profile); | 170 origin.sasl_handler = new_sasl(realm, anonymous_authentication_profile); |
| 197 else | 171 else |
| 198 if usermanager_get_provider(realm).get_password then | 172 origin.sasl_handler = usermanager_get_sasl_handler(module.host); |
| 199 origin.sasl_handler = new_sasl(realm, getpass_authentication_profile); | |
| 200 elseif usermanager_get_provider(realm).test_password then | |
| 201 origin.sasl_handler = new_sasl(realm, testpass_authentication_profile); | |
| 202 else | |
| 203 log("warn", "AUTH: Could not load an authentication profile for the given provider."); | |
| 204 end | |
| 205 if not (module:get_option("allow_unencrypted_plain_auth")) and not origin.secure then | 173 if not (module:get_option("allow_unencrypted_plain_auth")) and not origin.secure then |
| 206 origin.sasl_handler:forbidden({"PLAIN"}); | 174 origin.sasl_handler:forbidden({"PLAIN"}); |
| 207 end | 175 end |
| 208 end | 176 end |
| 209 features:tag("mechanisms", mechanisms_attr); | 177 features:tag("mechanisms", mechanisms_attr); |