Annotate

mod_dwd/mod_dwd.lua @ 928:4584c3303bb4

mod_dwd: Initial commit.
author Kim Alvefur <zash@zash.se>
date Tue, 12 Mar 2013 13:49:36 +0100
child 932:4e235e565693
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
928
4584c3303bb4 mod_dwd: Initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
1 local hosts = _G.hosts;
4584c3303bb4 mod_dwd: Initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
2 local st = require "util.stanza";
4584c3303bb4 mod_dwd: Initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
3 local s2s_make_authenticated = require "core.s2smanager".make_authenticated;
4584c3303bb4 mod_dwd: Initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
4 local nameprep = require "util.encodings".stringprep.nameprep;
4584c3303bb4 mod_dwd: Initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
5 local cert_verify_identity = require "util.x509".verify_identity;
4584c3303bb4 mod_dwd: Initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
6
4584c3303bb4 mod_dwd: Initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
7 module:hook("stanza/jabber:server:dialback:result", function(event)
4584c3303bb4 mod_dwd: Initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
8 local origin, stanza = event.origin, event.stanza;
4584c3303bb4 mod_dwd: Initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
9
4584c3303bb4 mod_dwd: Initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
10 if origin.cert_chain_status == "valid" and origin.type == "s2sin_unauthed" or origin.type == "s2sin" then
4584c3303bb4 mod_dwd: Initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
11 local attr = stanza.attr;
4584c3303bb4 mod_dwd: Initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
12 local to, from = nameprep(attr.to), nameprep(attr.from);
4584c3303bb4 mod_dwd: Initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
13
4584c3303bb4 mod_dwd: Initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
14 local conn = origin.conn:socket()
4584c3303bb4 mod_dwd: Initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
15 local cert;
4584c3303bb4 mod_dwd: Initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
16 if conn.getpeercertificate then
4584c3303bb4 mod_dwd: Initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
17 cert = conn:getpeercertificate()
4584c3303bb4 mod_dwd: Initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
18 end
4584c3303bb4 mod_dwd: Initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
19
4584c3303bb4 mod_dwd: Initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
20 if cert and hosts[to] and cert_verify_identity(from, "xmpp-server", cert) then
4584c3303bb4 mod_dwd: Initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
21
4584c3303bb4 mod_dwd: Initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
22 -- COMPAT: ejabberd, gmail and perhaps others do not always set 'to' and 'from'
4584c3303bb4 mod_dwd: Initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
23 -- on streams. We fill in the session's to/from here instead.
4584c3303bb4 mod_dwd: Initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
24 if not origin.from_host then
4584c3303bb4 mod_dwd: Initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
25 origin.from_host = from;
4584c3303bb4 mod_dwd: Initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
26 end
4584c3303bb4 mod_dwd: Initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
27 if not origin.to_host then
4584c3303bb4 mod_dwd: Initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
28 origin.to_host = to;
4584c3303bb4 mod_dwd: Initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
29 end
4584c3303bb4 mod_dwd: Initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
30
4584c3303bb4 mod_dwd: Initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
31 module:log("info", "Accepting Dialback without Dialback for %s", from);
4584c3303bb4 mod_dwd: Initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
32 s2s_make_authenticated(origin, from);
4584c3303bb4 mod_dwd: Initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
33 origin.sends2s(
4584c3303bb4 mod_dwd: Initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
34 st.stanza("db:result", { from = attr.to, to = attr.from, id = attr.id, type = "valid" }));
4584c3303bb4 mod_dwd: Initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
35
4584c3303bb4 mod_dwd: Initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
36 return true;
4584c3303bb4 mod_dwd: Initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
37 end
4584c3303bb4 mod_dwd: Initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
38 end
4584c3303bb4 mod_dwd: Initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
39 end, 100);
4584c3303bb4 mod_dwd: Initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
40
4584c3303bb4 mod_dwd: Initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
41