mod_auth_ldap2/mod_auth_ldap.lua
author Waqas Hussain <waqas20@gmail.com>
Thu, 13 Sep 2012 00:08:29 +0500
changeset 814 881ec9919144
parent 809 1d51c5e38faa
permissions -rw-r--r--
mod_auth_*: Use module:provides(), and don't explicitly specify provider.name.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
809
1d51c5e38faa Add LDAP plugin suite
rob@hoelz.ro
parents:
diff changeset
     1
-- vim:sts=4 sw=4
1d51c5e38faa Add LDAP plugin suite
rob@hoelz.ro
parents:
diff changeset
     2
1d51c5e38faa Add LDAP plugin suite
rob@hoelz.ro
parents:
diff changeset
     3
-- Prosody IM
1d51c5e38faa Add LDAP plugin suite
rob@hoelz.ro
parents:
diff changeset
     4
-- Copyright (C) 2008-2010 Matthew Wild
1d51c5e38faa Add LDAP plugin suite
rob@hoelz.ro
parents:
diff changeset
     5
-- Copyright (C) 2008-2010 Waqas Hussain
1d51c5e38faa Add LDAP plugin suite
rob@hoelz.ro
parents:
diff changeset
     6
-- Copyright (C) 2012 Rob Hoelz
1d51c5e38faa Add LDAP plugin suite
rob@hoelz.ro
parents:
diff changeset
     7
--
1d51c5e38faa Add LDAP plugin suite
rob@hoelz.ro
parents:
diff changeset
     8
-- This project is MIT/X11 licensed. Please see the
1d51c5e38faa Add LDAP plugin suite
rob@hoelz.ro
parents:
diff changeset
     9
-- COPYING file in the source package for more information.
1d51c5e38faa Add LDAP plugin suite
rob@hoelz.ro
parents:
diff changeset
    10
--
1d51c5e38faa Add LDAP plugin suite
rob@hoelz.ro
parents:
diff changeset
    11
-- http://code.google.com/p/prosody-modules/source/browse/mod_auth_ldap/mod_auth_ldap.lua
1d51c5e38faa Add LDAP plugin suite
rob@hoelz.ro
parents:
diff changeset
    12
-- adapted to use common LDAP store
1d51c5e38faa Add LDAP plugin suite
rob@hoelz.ro
parents:
diff changeset
    13
1d51c5e38faa Add LDAP plugin suite
rob@hoelz.ro
parents:
diff changeset
    14
local ldap     = module:require 'ldap';
1d51c5e38faa Add LDAP plugin suite
rob@hoelz.ro
parents:
diff changeset
    15
local new_sasl = require 'util.sasl'.new;
1d51c5e38faa Add LDAP plugin suite
rob@hoelz.ro
parents:
diff changeset
    16
local nodeprep = require 'util.encodings'.stringprep.nodeprep;
1d51c5e38faa Add LDAP plugin suite
rob@hoelz.ro
parents:
diff changeset
    17
local jsplit   = require 'util.jid'.split;
1d51c5e38faa Add LDAP plugin suite
rob@hoelz.ro
parents:
diff changeset
    18
1d51c5e38faa Add LDAP plugin suite
rob@hoelz.ro
parents:
diff changeset
    19
if not ldap then
1d51c5e38faa Add LDAP plugin suite
rob@hoelz.ro
parents:
diff changeset
    20
    return;
1d51c5e38faa Add LDAP plugin suite
rob@hoelz.ro
parents:
diff changeset
    21
end
1d51c5e38faa Add LDAP plugin suite
rob@hoelz.ro
parents:
diff changeset
    22
814
881ec9919144 mod_auth_*: Use module:provides(), and don't explicitly specify provider.name.
Waqas Hussain <waqas20@gmail.com>
parents: 809
diff changeset
    23
local provider = {}
809
1d51c5e38faa Add LDAP plugin suite
rob@hoelz.ro
parents:
diff changeset
    24
1d51c5e38faa Add LDAP plugin suite
rob@hoelz.ro
parents:
diff changeset
    25
function provider.test_password(username, password)
1d51c5e38faa Add LDAP plugin suite
rob@hoelz.ro
parents:
diff changeset
    26
    return ldap.bind(username, password);
1d51c5e38faa Add LDAP plugin suite
rob@hoelz.ro
parents:
diff changeset
    27
end
1d51c5e38faa Add LDAP plugin suite
rob@hoelz.ro
parents:
diff changeset
    28
1d51c5e38faa Add LDAP plugin suite
rob@hoelz.ro
parents:
diff changeset
    29
function provider.user_exists(username)
1d51c5e38faa Add LDAP plugin suite
rob@hoelz.ro
parents:
diff changeset
    30
    local params = ldap.getparams()
1d51c5e38faa Add LDAP plugin suite
rob@hoelz.ro
parents:
diff changeset
    31
1d51c5e38faa Add LDAP plugin suite
rob@hoelz.ro
parents:
diff changeset
    32
    local filter = ldap.filter.combine_and(params.user.filter, params.user.usernamefield .. '=' .. username);
1d51c5e38faa Add LDAP plugin suite
rob@hoelz.ro
parents:
diff changeset
    33
1d51c5e38faa Add LDAP plugin suite
rob@hoelz.ro
parents:
diff changeset
    34
    return ldap.singlematch {
1d51c5e38faa Add LDAP plugin suite
rob@hoelz.ro
parents:
diff changeset
    35
        base   = params.user.basedn,
1d51c5e38faa Add LDAP plugin suite
rob@hoelz.ro
parents:
diff changeset
    36
        filter = filter,
1d51c5e38faa Add LDAP plugin suite
rob@hoelz.ro
parents:
diff changeset
    37
    };
1d51c5e38faa Add LDAP plugin suite
rob@hoelz.ro
parents:
diff changeset
    38
end
1d51c5e38faa Add LDAP plugin suite
rob@hoelz.ro
parents:
diff changeset
    39
1d51c5e38faa Add LDAP plugin suite
rob@hoelz.ro
parents:
diff changeset
    40
function provider.get_password(username)
1d51c5e38faa Add LDAP plugin suite
rob@hoelz.ro
parents:
diff changeset
    41
    return nil, "Passwords unavailable for LDAP.";
1d51c5e38faa Add LDAP plugin suite
rob@hoelz.ro
parents:
diff changeset
    42
end
1d51c5e38faa Add LDAP plugin suite
rob@hoelz.ro
parents:
diff changeset
    43
1d51c5e38faa Add LDAP plugin suite
rob@hoelz.ro
parents:
diff changeset
    44
function provider.set_password(username, password)
1d51c5e38faa Add LDAP plugin suite
rob@hoelz.ro
parents:
diff changeset
    45
    return nil, "Passwords unavailable for LDAP.";
1d51c5e38faa Add LDAP plugin suite
rob@hoelz.ro
parents:
diff changeset
    46
end
1d51c5e38faa Add LDAP plugin suite
rob@hoelz.ro
parents:
diff changeset
    47
1d51c5e38faa Add LDAP plugin suite
rob@hoelz.ro
parents:
diff changeset
    48
function provider.create_user(username, password)
1d51c5e38faa Add LDAP plugin suite
rob@hoelz.ro
parents:
diff changeset
    49
    return nil, "Account creation/modification not available with LDAP.";
1d51c5e38faa Add LDAP plugin suite
rob@hoelz.ro
parents:
diff changeset
    50
end
1d51c5e38faa Add LDAP plugin suite
rob@hoelz.ro
parents:
diff changeset
    51
1d51c5e38faa Add LDAP plugin suite
rob@hoelz.ro
parents:
diff changeset
    52
function provider.get_sasl_handler()
1d51c5e38faa Add LDAP plugin suite
rob@hoelz.ro
parents:
diff changeset
    53
    local testpass_authentication_profile = {
1d51c5e38faa Add LDAP plugin suite
rob@hoelz.ro
parents:
diff changeset
    54
        plain_test = function(sasl, username, password, realm)
1d51c5e38faa Add LDAP plugin suite
rob@hoelz.ro
parents:
diff changeset
    55
            local prepped_username = nodeprep(username);
1d51c5e38faa Add LDAP plugin suite
rob@hoelz.ro
parents:
diff changeset
    56
            if not prepped_username then
1d51c5e38faa Add LDAP plugin suite
rob@hoelz.ro
parents:
diff changeset
    57
                module:log("debug", "NODEprep failed on username: %s", username);
1d51c5e38faa Add LDAP plugin suite
rob@hoelz.ro
parents:
diff changeset
    58
                return "", nil;
1d51c5e38faa Add LDAP plugin suite
rob@hoelz.ro
parents:
diff changeset
    59
            end
1d51c5e38faa Add LDAP plugin suite
rob@hoelz.ro
parents:
diff changeset
    60
            return provider.test_password(prepped_username, password), true;
1d51c5e38faa Add LDAP plugin suite
rob@hoelz.ro
parents:
diff changeset
    61
        end,
1d51c5e38faa Add LDAP plugin suite
rob@hoelz.ro
parents:
diff changeset
    62
        mechanisms = { PLAIN = true },
1d51c5e38faa Add LDAP plugin suite
rob@hoelz.ro
parents:
diff changeset
    63
    };
1d51c5e38faa Add LDAP plugin suite
rob@hoelz.ro
parents:
diff changeset
    64
    return new_sasl(module.host, testpass_authentication_profile);
1d51c5e38faa Add LDAP plugin suite
rob@hoelz.ro
parents:
diff changeset
    65
end
1d51c5e38faa Add LDAP plugin suite
rob@hoelz.ro
parents:
diff changeset
    66
1d51c5e38faa Add LDAP plugin suite
rob@hoelz.ro
parents:
diff changeset
    67
function provider.is_admin(jid)
1d51c5e38faa Add LDAP plugin suite
rob@hoelz.ro
parents:
diff changeset
    68
    local admin_config = ldap.getparams().admin;
1d51c5e38faa Add LDAP plugin suite
rob@hoelz.ro
parents:
diff changeset
    69
1d51c5e38faa Add LDAP plugin suite
rob@hoelz.ro
parents:
diff changeset
    70
    if not admin_config then
1d51c5e38faa Add LDAP plugin suite
rob@hoelz.ro
parents:
diff changeset
    71
        return;
1d51c5e38faa Add LDAP plugin suite
rob@hoelz.ro
parents:
diff changeset
    72
    end
1d51c5e38faa Add LDAP plugin suite
rob@hoelz.ro
parents:
diff changeset
    73
1d51c5e38faa Add LDAP plugin suite
rob@hoelz.ro
parents:
diff changeset
    74
    local ld       = ldap:getconnection();
1d51c5e38faa Add LDAP plugin suite
rob@hoelz.ro
parents:
diff changeset
    75
    local username = jsplit(jid);
1d51c5e38faa Add LDAP plugin suite
rob@hoelz.ro
parents:
diff changeset
    76
    local filter   = ldap.filter.combine_and(admin_config.filter, admin_config.namefield .. '=' .. username);
1d51c5e38faa Add LDAP plugin suite
rob@hoelz.ro
parents:
diff changeset
    77
1d51c5e38faa Add LDAP plugin suite
rob@hoelz.ro
parents:
diff changeset
    78
    return ldap.singlematch {
1d51c5e38faa Add LDAP plugin suite
rob@hoelz.ro
parents:
diff changeset
    79
        base   = admin_config.basedn,
1d51c5e38faa Add LDAP plugin suite
rob@hoelz.ro
parents:
diff changeset
    80
        filter = filter,
1d51c5e38faa Add LDAP plugin suite
rob@hoelz.ro
parents:
diff changeset
    81
    };
1d51c5e38faa Add LDAP plugin suite
rob@hoelz.ro
parents:
diff changeset
    82
end
1d51c5e38faa Add LDAP plugin suite
rob@hoelz.ro
parents:
diff changeset
    83
814
881ec9919144 mod_auth_*: Use module:provides(), and don't explicitly specify provider.name.
Waqas Hussain <waqas20@gmail.com>
parents: 809
diff changeset
    84
module:provides("auth", provider);