Skip to content
A library simplifying LDAP usage in Elixir projects
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.
.travis/ldap Fix encoding issues (fix #18) + add tests for unicode LDAP data Jan 7, 2018
config [Travis] unset Ipv6 Dec 11, 2017
lib Don't exit when a connection fails and adds Paddle.reconnect/1 (#21) Aug 12, 2018
test Don't exit when a connection fails and adds Paddle.reconnect/1 (#21) Aug 12, 2018
.travis.yml [Travis] Upgrade elixir (because child_spec) / OTP Nov 14, 2017
LICENSE Better authenticate error handling (fixes #10) Nov 4, 2017
mix.exs Bump version to 0.1.4 Oct 25, 2018
mix.lock Bump version to 0.1.4 Oct 25, 2018

Paddle version Build Status Deps Status Prod Deps Status Inline docs

A library simplifying LDAP usage in Elixir projects.


Why another LDAP library?

If you want to communicate with an LDAP server in Elixir, you probably know that there are other libraries out there. However, I didn't find one that suited me:

  • The :eldap library is great, but very low-level, with no high-level features.

  • EctoLdap is very interesting, but I needed the add / modify / delete operations (in fact, I even wanted to do an Ecto adapter at first).

  • Exldap and LDAPEx are both a translation of the LDAP :eldap in Elixir, which is nice, but are still missing some higher-level features.


Once installed and configured, it allows you to quickly authenticate users:

iex> Paddle.authenticate("myUser", "password")

Get meaningful informations using paddle class objects:

iex> Paddle.get %MyApp.PosixAccount{uid: "myUser"}
 [%MyApp.PosixAccount{cn: ["My User"], description: nil,
   gecos: ["My User,,,,"], gidNumber: ["120"],
   homeDirectory: ["/home/myuser"], host: nil, l: nil,
   loginShell: ["/bin/bash"], o: nil, ou: nil, seeAlso: nil, uid: ["myUser"],
   uidNumber: ["500"],
   userPassword: ["{SSHA}AIzygLSXlArhAMzddUriXQxf7UlkqopP"]}]}

Or just get informations about anything:

iex> Paddle.get base: [ou: "People"], filter: [objectClass: "organizationalUnit"]
 [%{"dn" => "ou=People,dc=test,dc=com",
    "objectClass" => ["top", "organizationalUnit"], "ou" => ["People"]}]}

Add, delete, modify operations are supported. If you want to know more, just go to the documentation.


The package can be installed as:

  1. Add paddle to your list of dependencies in mix.exs:
def deps do
  [{:paddle, "~> 0.1.0"}]
  1. Ensure paddle is started before your application:
def application do
  [applications: [:paddle]]
  1. Add your configuration in your config files:
config :paddle, Paddle,
  host: "",
  base: "dc=myorganisation,dc=org",
  ssl: true,
  port: 636

For more configurations, see the Paddle module docmumentation.


If you want to test this application, you can use the linux commands described in the .travis.yml file in the before_script block to start a local test LDAP server.

Keep in mind that you may need to change the .travis/ldap/slapd.conf for your system by changing some configuration paths.

If you want to add some more data to the test server, please feel free to issue a pull request.

You can’t perform that action at this time.