Mercurial > prosody-modules
annotate misc/sasl/example.lua @ 6319:04c3273cb81f
mod_auth_cyrus: Add empty 'profile' table to SASL handler objects
This is for compatibility with Prosody's built-in util.sasl objects.
A SASL profile table usually includes methods supported by the backend, which
can be used by SASL mechanism handlers to perform operations (such as testing
the password). It also optionally contains a 'cb' field with channel binding
method handlers.
The Cyrus backend doesn't support channel binding, and doesn't have the same
concept of auth backend methods (it handles all that internally, and Prosody
has no insight or control over it).
Thus, we create an empty profile which informs Prosody that the SASL handler
does not support any of the auth or channel binding methods. Some features
will not work, but they didn't work anyway. This just makes it explicit.
This fixes a traceback in mod_sasl2_fast, which expected SASL handlers to
always contain a 'profile' field.
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Thu, 04 Sep 2025 10:14:46 +0100 |
| parents | 7d2fcc7a15f7 |
| children |
| rev | line source |
|---|---|
|
2354
7d2fcc7a15f7
Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
1 local method = {} |
|
7d2fcc7a15f7
Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
2 local method_mt = { __index = method } |
|
7d2fcc7a15f7
Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
3 |
|
7d2fcc7a15f7
Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
4 -- This should return a set of supported mechanisms |
|
7d2fcc7a15f7
Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
5 function method:mechanisms() |
|
7d2fcc7a15f7
Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
6 return { |
|
7d2fcc7a15f7
Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
7 ["OAUTH-SOMETHING"] = true; |
|
7d2fcc7a15f7
Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
8 } |
|
7d2fcc7a15f7
Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
9 end |
|
7d2fcc7a15f7
Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
10 |
|
7d2fcc7a15f7
Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
11 -- Called when a mechanism is selecetd |
|
7d2fcc7a15f7
Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
12 function method:select(mechanism) |
|
7d2fcc7a15f7
Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
13 return mechanism == "OAUTH-SOMETHING"; |
|
7d2fcc7a15f7
Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
14 end |
|
7d2fcc7a15f7
Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
15 |
|
7d2fcc7a15f7
Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
16 -- Called for each message received |
|
7d2fcc7a15f7
Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
17 function method:process(message) |
|
7d2fcc7a15f7
Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
18 -- parse the message |
|
7d2fcc7a15f7
Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
19 if false then |
|
7d2fcc7a15f7
Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
20 -- To send a SASL challenge: |
|
7d2fcc7a15f7
Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
21 return "challenge", "respond-to-this"; |
|
7d2fcc7a15f7
Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
22 end |
|
7d2fcc7a15f7
Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
23 |
|
7d2fcc7a15f7
Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
24 if false then |
|
7d2fcc7a15f7
Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
25 -- To fail, send: |
|
7d2fcc7a15f7
Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
26 return "failure", "not-authorized", "Helpful error message here"; |
|
7d2fcc7a15f7
Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
27 end |
|
7d2fcc7a15f7
Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
28 |
|
7d2fcc7a15f7
Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
29 self.username = "someone"; |
|
7d2fcc7a15f7
Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
30 return "success"; |
|
7d2fcc7a15f7
Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
31 end |
|
7d2fcc7a15f7
Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
32 |
|
7d2fcc7a15f7
Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
33 local function new_sasl() |
|
7d2fcc7a15f7
Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
34 return setmetatable({}, method_mt); |
|
7d2fcc7a15f7
Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
35 end |
|
7d2fcc7a15f7
Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
36 |
|
7d2fcc7a15f7
Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
37 function method:clean_clone() |
|
7d2fcc7a15f7
Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
38 return setmetatable({}, method_mt); |
|
7d2fcc7a15f7
Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
39 end |
|
7d2fcc7a15f7
Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
40 |
|
7d2fcc7a15f7
Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
41 local provider = {} |
|
7d2fcc7a15f7
Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
42 |
|
7d2fcc7a15f7
Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
43 function provider.get_sasl_handler() |
|
7d2fcc7a15f7
Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
44 return new_sasl(); |
|
7d2fcc7a15f7
Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
45 end |
|
7d2fcc7a15f7
Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
46 |
|
7d2fcc7a15f7
Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
47 module:provides("auth", provider); |
