| rev | 
   line source | 
| 
bsw@1656
 | 
     1 local function str2hex(s)
 | 
| 
bsw@1656
 | 
     2   local t = {string.byte(s, 1, #s)}
 | 
| 
bsw@1656
 | 
     3   local f = string.format
 | 
| 
bsw@1656
 | 
     4   for i = 1, #t do t[i] = f("\\%02x", t[i]) end
 | 
| 
bsw@1656
 | 
     5   return table.concat(t)
 | 
| 
bsw@1656
 | 
     6 end
 | 
| 
bsw@1656
 | 
     7 
 | 
| 
bsw@1656
 | 
     8 config.ldap = {
 | 
| 
bsw@1656
 | 
     9   hosts = { 
 | 
| 
bsw@1656
 | 
    10     { uri = "ldap://192.168.1.1", tls = true, timeout = 5 },
 | 
| 
bsw@1656
 | 
    11     { uri = "ldap://192.168.1.2", tls = true, timeout = 5 }
 | 
| 
bsw@1656
 | 
    12   },
 | 
| 
bsw@1656
 | 
    13   base = "CN=Users,DC=example,DC=org",
 | 
| 
bsw@1656
 | 
    14   bind_as = { dn = "CN=LiquidFeedback Service,CN=Users,DC=example,DC=org", password = "secure" },
 | 
| 
bsw@1656
 | 
    15   member = {
 | 
| 
bsw@1656
 | 
    16     registration = "auto",
 | 
| 
bsw@1656
 | 
    17     scope = "subtree",
 | 
| 
bsw@1656
 | 
    18     login_normalizer = function (login)
 | 
| 
bsw@1656
 | 
    19       return login:lower()
 | 
| 
bsw@1656
 | 
    20     end,
 | 
| 
bsw@1656
 | 
    21     login_filter_map = function (login)
 | 
| 
bsw@1656
 | 
    22       return "(sAMAccountName=" .. ldap.escape_filter(login) .. ")"
 | 
| 
bsw@1656
 | 
    23     end,
 | 
| 
bsw@1656
 | 
    24     login_map = function (ldap_entry)
 | 
| 
bsw@1656
 | 
    25       return ldap_entry.sAMAccountName[1]
 | 
| 
bsw@1656
 | 
    26     end,
 | 
| 
bsw@1656
 | 
    27     uid_filter_map = function (uid)
 | 
| 
bsw@1656
 | 
    28       return "(objectGUID=" .. uid .. ")"
 | 
| 
bsw@1656
 | 
    29     end,
 | 
| 
bsw@1656
 | 
    30     uid_map = function (ldap_entry)
 | 
| 
bsw@1656
 | 
    31       return str2hex(ldap_entry.objectGUID[1])
 | 
| 
bsw@1656
 | 
    32     end,
 | 
| 
bsw@1656
 | 
    33     allowed_map = function (ldap_entry)
 | 
| 
bsw@1656
 | 
    34       local allowed = false
 | 
| 
bsw@1656
 | 
    35       if ldap_entry.memberOf then
 | 
| 
bsw@1656
 | 
    36         for i, group in ipairs(ldap_entry.memberOf) do
 | 
| 
bsw@1656
 | 
    37           if group == "CN=LiquidFeedback User,CN=Users,DC=example,DC=org" then
 | 
| 
bsw@1656
 | 
    38             allowed = true
 | 
| 
bsw@1656
 | 
    39           end
 | 
| 
bsw@1656
 | 
    40         end
 | 
| 
bsw@1656
 | 
    41       end
 | 
| 
bsw@1656
 | 
    42       return allowed
 | 
| 
bsw@1656
 | 
    43     end,
 | 
| 
bsw@1656
 | 
    44     fetch_attr = { "sAMAccountName", "objectGUID", "givenName", "name", "displayName", "memberOf" },
 | 
| 
bsw@1656
 | 
    45     attr_map = function (ldap_entry, member)
 | 
| 
bsw@1656
 | 
    46       member.identification = ldap_entry.givenName[1] .. " " .. ldap_entry.name[1]
 | 
| 
bsw@1656
 | 
    47       member.name = ldap_entry.displayName[1]
 | 
| 
bsw@1656
 | 
    48     end,
 | 
| 
bsw@1656
 | 
    49     privilege_map = function (ldap_entry, member)
 | 
| 
bsw@1656
 | 
    50       local privileges = {}
 | 
| 
bsw@1656
 | 
    51       if ldap_entry.memberOf then
 | 
| 
bsw@1656
 | 
    52         for i, group in ipairs(ldap_entry.memberOf) do
 | 
| 
bsw@1656
 | 
    53           if group == "CN=LiquidFeedback User,CN=Users,DC=example,DC=org" then
 | 
| 
bsw@1656
 | 
    54             table.insert(privileges,
 | 
| 
bsw@1656
 | 
    55               { unit_id = 1, voting_right = true, polling_right = true }
 | 
| 
bsw@1656
 | 
    56             )
 | 
| 
bsw@1656
 | 
    57           end
 | 
| 
bsw@1656
 | 
    58         end
 | 
| 
bsw@1656
 | 
    59       end
 | 
| 
bsw@1656
 | 
    60       return privileges
 | 
| 
bsw@1656
 | 
    61     end,
 | 
| 
bsw@1656
 | 
    62     cache_passwords = true,
 | 
| 
bsw@1656
 | 
    63     locked_profile_fields = { name = true }
 | 
| 
bsw@1656
 | 
    64   }
 | 
| 
bsw@1656
 | 
    65 }
 | 
| 
bsw@1656
 | 
    66 
 |