Annotate

plugins/mod_auth_cyrus.lua @ 5056:a125daa42ad4

mod_storage_sql: Return connection from connect even if already connected (thanks IRON)
author Matthew Wild <mwild1@gmail.com>
date Mon, 30 Jul 2012 18:50:46 +0100
parent 5000:58c9519dc461
child 5115:3939960b3c07
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3192
8ad50989d79e mod_auth_cyrus: Auth provider with support for Cyrus SASL.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
1 -- Prosody IM
8ad50989d79e mod_auth_cyrus: Auth provider with support for Cyrus SASL.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
2 -- Copyright (C) 2008-2010 Matthew Wild
8ad50989d79e mod_auth_cyrus: Auth provider with support for Cyrus SASL.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
3 -- Copyright (C) 2008-2010 Waqas Hussain
8ad50989d79e mod_auth_cyrus: Auth provider with support for Cyrus SASL.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
4 --
8ad50989d79e mod_auth_cyrus: Auth provider with support for Cyrus SASL.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
5 -- This project is MIT/X11 licensed. Please see the
8ad50989d79e mod_auth_cyrus: Auth provider with support for Cyrus SASL.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
6 -- COPYING file in the source package for more information.
8ad50989d79e mod_auth_cyrus: Auth provider with support for Cyrus SASL.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
7 --
8ad50989d79e mod_auth_cyrus: Auth provider with support for Cyrus SASL.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
8
3271
1b6c2984c1f4 mod_auth_cyrus: Log as "auth_cyrus", not as "usermanager".
Waqas Hussain <waqas20@gmail.com>
parents: 3192
diff changeset
9 local log = require "util.logger".init("auth_cyrus");
3192
8ad50989d79e mod_auth_cyrus: Auth provider with support for Cyrus SASL.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
10
3468
d50e2c937717 mod_saslauth, mod_auth_cyrus, util.sasl_cyrus: Moved cyrus account provisioning check out of mod_saslauth.
Waqas Hussain <waqas20@gmail.com>
parents: 3425
diff changeset
11 local usermanager_user_exists = require "core.usermanager".user_exists;
d50e2c937717 mod_saslauth, mod_auth_cyrus, util.sasl_cyrus: Moved cyrus account provisioning check out of mod_saslauth.
Waqas Hussain <waqas20@gmail.com>
parents: 3425
diff changeset
12
3192
8ad50989d79e mod_auth_cyrus: Auth provider with support for Cyrus SASL.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
13 local cyrus_service_realm = module:get_option("cyrus_service_realm");
8ad50989d79e mod_auth_cyrus: Auth provider with support for Cyrus SASL.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
14 local cyrus_service_name = module:get_option("cyrus_service_name");
8ad50989d79e mod_auth_cyrus: Auth provider with support for Cyrus SASL.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
15 local cyrus_application_name = module:get_option("cyrus_application_name");
3468
d50e2c937717 mod_saslauth, mod_auth_cyrus, util.sasl_cyrus: Moved cyrus account provisioning check out of mod_saslauth.
Waqas Hussain <waqas20@gmail.com>
parents: 3425
diff changeset
16 local require_provisioning = module:get_option("cyrus_require_provisioning") or false;
5000
58c9519dc461 mod_auth_cyrus, util.sasl_cyrus: Add new option 'cyrus_server_fqdn' to override the hostname passed to Cyrus (and used in e.g. GSSAPI/Kerberos) - fixes #295
Matthew Wild <mwild1@gmail.com>
parents: 4160
diff changeset
17 local host_fqdn = module:get_option("cyrus_server_fqdn");
3192
8ad50989d79e mod_auth_cyrus: Auth provider with support for Cyrus SASL.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
18
8ad50989d79e mod_auth_cyrus: Auth provider with support for Cyrus SASL.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
19 prosody.unlock_globals(); --FIXME: Figure out why this is needed and
8ad50989d79e mod_auth_cyrus: Auth provider with support for Cyrus SASL.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
20 -- why cyrussasl isn't caught by the sandbox
8ad50989d79e mod_auth_cyrus: Auth provider with support for Cyrus SASL.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
21 local cyrus_new = require "util.sasl_cyrus".new;
8ad50989d79e mod_auth_cyrus: Auth provider with support for Cyrus SASL.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
22 prosody.lock_globals();
8ad50989d79e mod_auth_cyrus: Auth provider with support for Cyrus SASL.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
23 local new_sasl = function(realm)
8ad50989d79e mod_auth_cyrus: Auth provider with support for Cyrus SASL.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
24 return cyrus_new(
8ad50989d79e mod_auth_cyrus: Auth provider with support for Cyrus SASL.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
25 cyrus_service_realm or realm,
8ad50989d79e mod_auth_cyrus: Auth provider with support for Cyrus SASL.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
26 cyrus_service_name or "xmpp",
5000
58c9519dc461 mod_auth_cyrus, util.sasl_cyrus: Add new option 'cyrus_server_fqdn' to override the hostname passed to Cyrus (and used in e.g. GSSAPI/Kerberos) - fixes #295
Matthew Wild <mwild1@gmail.com>
parents: 4160
diff changeset
27 cyrus_application_name or "prosody",
58c9519dc461 mod_auth_cyrus, util.sasl_cyrus: Add new option 'cyrus_server_fqdn' to override the hostname passed to Cyrus (and used in e.g. GSSAPI/Kerberos) - fixes #295
Matthew Wild <mwild1@gmail.com>
parents: 4160
diff changeset
28 host_fqdn
3192
8ad50989d79e mod_auth_cyrus: Auth provider with support for Cyrus SASL.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
29 );
8ad50989d79e mod_auth_cyrus: Auth provider with support for Cyrus SASL.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
30 end
8ad50989d79e mod_auth_cyrus: Auth provider with support for Cyrus SASL.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
31
4159
52eaa2590bfb mod_auth_cyrus: Print some diagnostic log messages about the available mechanisms.
Waqas Hussain <waqas20@gmail.com>
parents: 3468
diff changeset
32 do -- diagnostic
52eaa2590bfb mod_auth_cyrus: Print some diagnostic log messages about the available mechanisms.
Waqas Hussain <waqas20@gmail.com>
parents: 3468
diff changeset
33 local list;
4160
f08f649b898b mod_auth_*: Get rid of undocumented and broken 'sasl_realm' config option.
Waqas Hussain <waqas20@gmail.com>
parents: 4159
diff changeset
34 for mechanism in pairs(new_sasl(module.host):mechanisms()) do
4159
52eaa2590bfb mod_auth_cyrus: Print some diagnostic log messages about the available mechanisms.
Waqas Hussain <waqas20@gmail.com>
parents: 3468
diff changeset
35 list = (not(list) and mechanism) or (list..", "..mechanism);
52eaa2590bfb mod_auth_cyrus: Print some diagnostic log messages about the available mechanisms.
Waqas Hussain <waqas20@gmail.com>
parents: 3468
diff changeset
36 end
52eaa2590bfb mod_auth_cyrus: Print some diagnostic log messages about the available mechanisms.
Waqas Hussain <waqas20@gmail.com>
parents: 3468
diff changeset
37 if not list then
52eaa2590bfb mod_auth_cyrus: Print some diagnostic log messages about the available mechanisms.
Waqas Hussain <waqas20@gmail.com>
parents: 3468
diff changeset
38 module:log("error", "No Cyrus SASL mechanisms available");
52eaa2590bfb mod_auth_cyrus: Print some diagnostic log messages about the available mechanisms.
Waqas Hussain <waqas20@gmail.com>
parents: 3468
diff changeset
39 else
52eaa2590bfb mod_auth_cyrus: Print some diagnostic log messages about the available mechanisms.
Waqas Hussain <waqas20@gmail.com>
parents: 3468
diff changeset
40 module:log("debug", "Available Cyrus SASL mechanisms: %s", list);
52eaa2590bfb mod_auth_cyrus: Print some diagnostic log messages about the available mechanisms.
Waqas Hussain <waqas20@gmail.com>
parents: 3468
diff changeset
41 end
52eaa2590bfb mod_auth_cyrus: Print some diagnostic log messages about the available mechanisms.
Waqas Hussain <waqas20@gmail.com>
parents: 3468
diff changeset
42 end
52eaa2590bfb mod_auth_cyrus: Print some diagnostic log messages about the available mechanisms.
Waqas Hussain <waqas20@gmail.com>
parents: 3468
diff changeset
43
3192
8ad50989d79e mod_auth_cyrus: Auth provider with support for Cyrus SASL.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
44 function new_default_provider(host)
8ad50989d79e mod_auth_cyrus: Auth provider with support for Cyrus SASL.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
45 local provider = { name = "cyrus" };
8ad50989d79e mod_auth_cyrus: Auth provider with support for Cyrus SASL.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
46 log("debug", "initializing default authentication provider for host '%s'", host);
8ad50989d79e mod_auth_cyrus: Auth provider with support for Cyrus SASL.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
47
8ad50989d79e mod_auth_cyrus: Auth provider with support for Cyrus SASL.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
48 function provider.test_password(username, password)
8ad50989d79e mod_auth_cyrus: Auth provider with support for Cyrus SASL.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
49 return nil, "Legacy auth not supported with Cyrus SASL.";
8ad50989d79e mod_auth_cyrus: Auth provider with support for Cyrus SASL.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
50 end
8ad50989d79e mod_auth_cyrus: Auth provider with support for Cyrus SASL.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
51
8ad50989d79e mod_auth_cyrus: Auth provider with support for Cyrus SASL.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
52 function provider.get_password(username)
8ad50989d79e mod_auth_cyrus: Auth provider with support for Cyrus SASL.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
53 return nil, "Passwords unavailable for Cyrus SASL.";
8ad50989d79e mod_auth_cyrus: Auth provider with support for Cyrus SASL.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
54 end
8ad50989d79e mod_auth_cyrus: Auth provider with support for Cyrus SASL.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
55
8ad50989d79e mod_auth_cyrus: Auth provider with support for Cyrus SASL.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
56 function provider.set_password(username, password)
8ad50989d79e mod_auth_cyrus: Auth provider with support for Cyrus SASL.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
57 return nil, "Passwords unavailable for Cyrus SASL.";
8ad50989d79e mod_auth_cyrus: Auth provider with support for Cyrus SASL.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
58 end
8ad50989d79e mod_auth_cyrus: Auth provider with support for Cyrus SASL.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
59
8ad50989d79e mod_auth_cyrus: Auth provider with support for Cyrus SASL.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
60 function provider.user_exists(username)
3468
d50e2c937717 mod_saslauth, mod_auth_cyrus, util.sasl_cyrus: Moved cyrus account provisioning check out of mod_saslauth.
Waqas Hussain <waqas20@gmail.com>
parents: 3425
diff changeset
61 if require_provisioning then
d50e2c937717 mod_saslauth, mod_auth_cyrus, util.sasl_cyrus: Moved cyrus account provisioning check out of mod_saslauth.
Waqas Hussain <waqas20@gmail.com>
parents: 3425
diff changeset
62 return usermanager_user_exists(username, module.host);
d50e2c937717 mod_saslauth, mod_auth_cyrus, util.sasl_cyrus: Moved cyrus account provisioning check out of mod_saslauth.
Waqas Hussain <waqas20@gmail.com>
parents: 3425
diff changeset
63 end
3192
8ad50989d79e mod_auth_cyrus: Auth provider with support for Cyrus SASL.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
64 return true;
8ad50989d79e mod_auth_cyrus: Auth provider with support for Cyrus SASL.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
65 end
8ad50989d79e mod_auth_cyrus: Auth provider with support for Cyrus SASL.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
66
8ad50989d79e mod_auth_cyrus: Auth provider with support for Cyrus SASL.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
67 function provider.create_user(username, password)
8ad50989d79e mod_auth_cyrus: Auth provider with support for Cyrus SASL.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
68 return nil, "Account creation/modification not available with Cyrus SASL.";
8ad50989d79e mod_auth_cyrus: Auth provider with support for Cyrus SASL.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
69 end
8ad50989d79e mod_auth_cyrus: Auth provider with support for Cyrus SASL.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
70
8ad50989d79e mod_auth_cyrus: Auth provider with support for Cyrus SASL.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
71 function provider.get_sasl_handler()
4160
f08f649b898b mod_auth_*: Get rid of undocumented and broken 'sasl_realm' config option.
Waqas Hussain <waqas20@gmail.com>
parents: 4159
diff changeset
72 local handler = new_sasl(module.host);
3468
d50e2c937717 mod_saslauth, mod_auth_cyrus, util.sasl_cyrus: Moved cyrus account provisioning check out of mod_saslauth.
Waqas Hussain <waqas20@gmail.com>
parents: 3425
diff changeset
73 if require_provisioning then
d50e2c937717 mod_saslauth, mod_auth_cyrus, util.sasl_cyrus: Moved cyrus account provisioning check out of mod_saslauth.
Waqas Hussain <waqas20@gmail.com>
parents: 3425
diff changeset
74 function handler.require_provisioning(username)
d50e2c937717 mod_saslauth, mod_auth_cyrus, util.sasl_cyrus: Moved cyrus account provisioning check out of mod_saslauth.
Waqas Hussain <waqas20@gmail.com>
parents: 3425
diff changeset
75 return usermanager_user_exists(username, module.host);
d50e2c937717 mod_saslauth, mod_auth_cyrus, util.sasl_cyrus: Moved cyrus account provisioning check out of mod_saslauth.
Waqas Hussain <waqas20@gmail.com>
parents: 3425
diff changeset
76 end
d50e2c937717 mod_saslauth, mod_auth_cyrus, util.sasl_cyrus: Moved cyrus account provisioning check out of mod_saslauth.
Waqas Hussain <waqas20@gmail.com>
parents: 3425
diff changeset
77 end
d50e2c937717 mod_saslauth, mod_auth_cyrus, util.sasl_cyrus: Moved cyrus account provisioning check out of mod_saslauth.
Waqas Hussain <waqas20@gmail.com>
parents: 3425
diff changeset
78 return handler;
3192
8ad50989d79e mod_auth_cyrus: Auth provider with support for Cyrus SASL.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
79 end
8ad50989d79e mod_auth_cyrus: Auth provider with support for Cyrus SASL.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
80
8ad50989d79e mod_auth_cyrus: Auth provider with support for Cyrus SASL.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
81 return provider;
8ad50989d79e mod_auth_cyrus: Auth provider with support for Cyrus SASL.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
82 end
8ad50989d79e mod_auth_cyrus: Auth provider with support for Cyrus SASL.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
83
8ad50989d79e mod_auth_cyrus: Auth provider with support for Cyrus SASL.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
84 module:add_item("auth-provider", new_default_provider(module.host));
8ad50989d79e mod_auth_cyrus: Auth provider with support for Cyrus SASL.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
85