#1083025 RFP: lldap -- Light LDAP implementation for authentication

#1083025#5
Date:
2024-09-30 08:23:12 UTC
From:
To:
* Package name    : lldap
  Version         : 0.5.0
  Upstream Contact: Valentin Tolmer <nitnelave1@gmail.com>
* URL             : https://github.com/lldap/lldap
* License         : GPL-3.0
  Programming Lang: Rust
  Description     : Light LDAP implementation for authentication

This project is a lightweight authentication server that provides an
opinionated, simplified LDAP interface for authentication. It integrates
with many backends, from KeyCloak to Authelia to Nextcloud and more!

It comes with a frontend that makes user management easy, and allows
users to edit their own details or reset their password by email.

The goal is not to provide a full LDAP server; if you're interested in
that, check out OpenLDAP. This server is a user management system that is:

  - simple to setup (no messing around with slapd),
  - simple to manage (friendly web UI),
  - low resources,
  - opinionated with basic defaults so you don't have to understand the
    subtleties of LDAP.

It mostly targets self-hosting servers, with open-source components
like Nextcloud, Airsonic and so on that only support LDAP as a source
of external authentication.

For more features (OAuth/OpenID support, reverse proxy, ...) you can
install other components (KeyCloak, Authelia, ...) using this server as
the source of truth for users, via LDAP.

By default, the data is stored in SQLite, but you can swap the backend
with MySQL/MariaDB or PostgreSQL.

This should probably be maintained within the Debian Rust Packaging team.

#1083025#10
Date:
2025-09-10 14:32:14 UTC
From:
To:
On 2024-09-30 10:23:12, Alexandre Rossi wrote:

[...]

So I'm not on the rust team, but I'm interested in using this, so I took
a look.

First off, cargo debstatus doesn't work from the top-level (at least in
trixie), you need to be in the server directory. And then, oooh boy, is
that a ride. I think it's the longest output *i* have ever seen (but I
haven't seen much).

It starts like this:

 🔴 lldap v0.6.2 (/home/anarcat/dist/lldap/server)
 🔴 ├── lldap_access_control v0.1.0 (/home/anarcat/dist/lldap/crates/access-control)
 🔴 │   ├── lldap_auth v0.6.0 (/home/anarcat/dist/lldap/crates/auth)
    │   │   ├── chrono v0.4.38 (in debian)
 ⌛ │   │   ├── curve25519-dalek v3.2.0 (outdated, 4.2.0+dfsg in debian)
    │   │   │   ├── byteorder v1.5.0 (in debian)
 ⌛ │   │   │   ├── digest v0.9.0 (outdated, 0.10.7 in debian)
    │   │   │   │   └── generic-array v0.14.7 (in debian)
 ⌛ │   │   │   ├── rand_core v0.5.1 (outdated, 0.6.4 in debian)
 ⌛ │   │   │   │   └── getrandom v0.1.16 (outdated, 0.2.15 in debian)
    │   │   │   │       ├── cfg-if v1.0.0 (in debian)
    │   │   │   │       └── libc v0.2.161 (in debian)
[...]

and goes on, and on, and deeper too.

There's 61667 lines of output there, that's sixty *thousand* transitive
dependencies. Of course, there's lots of duplicates in there, and lots
of it is already in Debian, but still, that's quite the tree. If we trim
out dev deps, it's a little better:

anarcat@angela:~/d/l/server> cargo debstatus --no-dev-dependencies | wc -l
25365

and, of course, if we just remove the tree altogether, we get something
a little saner:
242

that is, 242 direct deps. Out of that, about 50 are missing entirely
from Debian:
48

... and 13 from lldap itself:

anarcat@angela:~/d/l/server> cargo debstatus --no-indent | grep 🔴 | sed 's/ v.*//' | sort -u| grep lldap | wc -l
13

So in any case, this is going to be a challenge, to say the least.

Some things, like graphql_client, jwt, email-encoding, ldap3 and so on
will likely be useful for other packages as well, of course, but it's
still a lot of stuff to package.

a.