summaryrefslogtreecommitdiff
path: root/mod_auth_custom/mod_auth_custom.lua
blob: 9b4872e2d53a4b0895feec8a4080d531d325d3d9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
local posix = require "posix.grp";  
local pam = require "pam";  
local new_sasl = require "util.sasl".new;

function is_real_user(username)
        for i,v in ipairs(posix.getgrnam("xmpp").gr_mem) do
          if username == v then
            return true;
          end
        end
        return false;
end
  
function user_exists(username)
        return is_real_user(username);
end  
  
function test_password(username, password)  
        local h, err = pam.start("xmpp", username, {  
                function (t)  
                        if #t == 1 and t[1][1] == pam.PAM_PROMPT_ECHO_OFF then  
                                return { { password, 0} };  
                        end  
                end  
        });  
        if h and h:authenticate() and h:endx(pam.PAM_SUCCESS) then  
                return true, true;  
        end  
        return nil, true;  
end  
  
function get_sasl_handler()  
        return new_sasl(module.host, {  
                plain_test = function(sasl, ...)  
                        return test_password(...)  
                end  
        });  
end  
  
module:provides"auth";