LDCLT(1)
β¨ LDCLT β the load test program for LDAP β¨
okay bestie, buckle up π this is ldclt, a whole General Commands Manual situation, and it is the LDAP load-testing queen. she stresses your LDAP server on purpose. for science. π
πΈ SYNOPSIS πΈ
ldclt [-qQvV] [-E <max errors>] [-b <base DN>] [-h <host>] [-p <port>]
[-t <timeout>] [-D <bind DN>] [-w <passwd>] [-o <SASL option>] [-e
<execParams>] [-a <max pending>] [-n <nb threads>] [-i <nb times>] [-N
<nb samples>] [-I <err number>] [-T <total>] [-r <low> -R <high>] [-f
<filter>] [-s <scope>] [-S <consumer>] [-P<supplier port>] [-W
<waitsec>] [-Z <certfile>]
π¦ DESCRIPTION π¦
So basically: this tool is a LDAP client, and her entire personality is validating how reliable the product is under a huge variety of stress conditions. like she will throw hands at your directory server until something cracks, and that's the point. no cap. π₯
π OPTIONS π
these are the valid options, and yes we're going through every single one, don't even try to skip:
-aβ asynchronous mode, with max pending operations. it's giving multitasking main character energy.-bβ give the base DN to use. default is"dc=example,dc=com".-Dβ bind DN. go peek at-wfor the other half of this duo π«Ά-Eβ max errors allowed. default1000.-fβ filter for searches.-hβ host to connect to. default"localhost".-Hβ LDAP URL to connect to. example:ldap://localhost:389. heads up, this one takes precedence over-hand-p. she's the boss here π-iβ number of times inactivity is allowed. default3(that's 30 seconds).-Iβ ignore errors (cf.-E). default none.-nβ number of threads. default10.-Nβ number of samples (10 seconds each). default infinite.-oβ SASL option.-pβ server port. default389.-Pβ supplier port (to check replication). default16000.-qβ quiet mode. see option-I.-Qβ super quiet mode. π€«-rβ range's low value.-Rβ range's high value.-sβ scope. may bebase,subtreeorone. defaultsubtree.-Sβ consumer to check.-tβ LDAP operations timeout. default 30 seconds.-Tβ total number of operations per thread. default infinite.-vβ verbose.-Vβ very verbose. π£οΈ-wβ bind passwd. see-D.-Wβ wait between two operations. default 0 seconds.-Zβ certfile. turn on SSL and use certfile as the certificate DB π-eβ execution parameters, and bestie there are a LOT of them:addβldap_add()entries.appendβ entries to the genldif file.asciiβ use ascii 7-bits strings.attreplace=name:maskβ replace attribute of existing entry.attrlist=name:name:nameβ specify list of attribs to retrieveattrsonly=0|1βldap_search()parameter. set 0 to read values.bindeachβldap_bind()for each operation.bindonlyβ only bind/unbind, no other operation is performed.closeβ willclose()the fd, rather thanldap_unbind().cltcertname=nameβ name of the SSL client certificatecommoncounterβ all threads share the same counter.counteachβ count each operation not only successful ones.deleteβldap_delete()entries.dontsleeponserverdownβ will loop very fast if server down.emailPersonβobjectclass=emailPerson(-e addonly).esearchβ exact search.genldif=filenameβ generates a ldif fileimagesdir=pathβ specify where are the images.incrβ incremental values.inetOrgPersonβobjectclass=inetOrgPerson(-e addonly).keydbfile=fileβ filename of the key databasekeydbpin=passwordβ password for accessing the key databasenoglobalstatsβ don't print periodical global statisticsnoloopβ does not loop the incremental numbers.object=filenameβ build object from input filepersonβobjectclass=person(-e addonly).randomβ random filters, etc...randomattrlist=name:name:nameβ random select attrib in the listrandombaseβ random base DN.randombaselow=valueβ low value for random generator.randombasehigh=valueβ high value for random generator.randombinddnβ random bind DN.randombinddnfromfile=fineβ retrieve bind DN & passwd from filerandombinddnlow=valueβ low value for random generator.randombinddnhigh=valueβ high value for random generator.rdn=attrname:valueβ alternate for-f.referral=on|off|rebindβ change referral behaviour.scalab01β activates scalab01 scenario.scalab01_cnxdurationβ maximum connection duration.scalab01_maxcnxnbβ modem pool size.scalab01_waitβsleep()between 2 attempts to connect.smoothshutdownβ main thread waits till the worker threads exit.stringβ create random strings rather than random numbers.v2β ldap v2.withnewparentβ rename with newparent specified as argument.randomauthidβ random SASL Authid.randomauthidlow=valueβ low value for random SASL Authid.randomauthidhigh=valueβ high value for random SASL Authid.
π EXAMPLES π
okay so say you wanna populate a database with 1000 user objects. first, create a file called template.ldif that contains:
objectClass: top
objectclass: person
objectClass: organizationalPerson
objectClass: inetorgperson
objectClass: posixAccount
objectClass: shadowAccount
sn: user[A]
cn: user[A]
givenName: user[A]
description: description[A]
userPassword: password[A]
mail: user[A]@example.com
uidNumber: 1[A]
gidNumber: 1[A]
shadowMin: 0
shadowMax: 99999
shadowInactive: 30
shadowWarning: 7
homeDirectory: /home/uid[A]
now you can load it into the database using:
ldclt -h localhost -p 389 -D "cn=Directory Manager" -w password -b "ou=people,dc=example,dc=com" -I 68 -e add,commoncounter -e "object=/tmp/template.ldif,rdn=uid:user[A=INCRNNOLOOP(0;999;4)]"
and then, using these created users, you can test binding to the accounts with:
ldclt -h localhost -p 389 -e bindeach,bindonly -D uid=user0XXX,dc=example,dc=com -w password0XXX -e randombinddn,randombinddnlow=0,randombinddnhigh=0999 -e esearch -f "(&(objectClass=posixAccount)(uid=user*)(uidNumber=*)(gidNumber=*))"
like. look at her go. she ate. π β¨
π«Ά AUTHOR π«Ά
ldclt was written by the 389 Project. iconic behavior honestly.
π REPORTING BUGS π
found a bug? report it to https://github.com/389ds/389-ds-base/issues/new β they wanna hear it fr fr.
π COPYRIGHT π
Copyright Β© 2001 Sun Microsystems, Inc. Used by permission. Copyright Β© 2018 Red Hat, Inc.
This manual page was written by Michele Baldessari <michele@pupazzo.org>, for the Debian project (but may be used by others).
This is free software. You may redistribute copies of it under the terms of the Directory Server license found in the LICENSE file of this software distribution. This license is essentially the GNU General Public License version 2 with an exception for plug-in distribution.
lowkey important bestie: it's free software, go read the LICENSE file before you redistribute, okay? π§
and that's the whole vibe check π this page lives in the General Commands Manual section, it's from the 389-ds-base world, and it's dated March 31, 2017. periodt. ππ
π¦ where this page comes from
- arch rolling: 389-ds-base 3.3.1-1 Β· GPL-3.0-only
- centos-stream 10: 389-ds-base 3.3.0-4.el10 Β· GPL-3.0-or-later WITH GPL-3.0-389-ds-base-exception AND (Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR MIT) AND (Apache-2.0 OR LGPL-2.1-or-later OR MIT) AND (Apache-2.0 OR MIT) AND (MIT OR Apache-2.0) AND Unicode-3.0 AND (MIT OR Unlicense) AND Apache-2.0 AND MIT AND MPL-2.0 AND Zlib
- centos-stream 9: 389-ds-base 2.9.0-5.el9 Β· GPL-3.0-or-later WITH GPL-3.0-389-ds-base-exception AND (Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR MIT) AND (Apache-2.0 OR LGPL-2.1-or-later OR MIT) AND (Apache-2.0 OR MIT) AND (MIT OR Apache-2.0) AND Unicode-3.0 AND (MIT OR Unlicense) AND Apache-2.0 AND MIT AND MPL-2.0 AND Zlib
- debian trixie: 389-ds-base 3.1.2+dfsg1-1+deb13u1 Β· GPL-3.0-or-later AND Other
- fedora 43: 389-ds-base 3.1.3-10.fc43 Β· GPL-3.0-or-later WITH GPL-3.0-389-ds-base-exception AND (0BSD OR Apache-2.0 OR MIT) AND (Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR MIT) AND (Apache-2.0 OR BSL-1.0) AND (Apache-2.0 OR LGPL-2.1-or-later OR MIT) AND (Apache-2.0 OR MIT OR Zlib) AND (Apache-2.0 OR MIT) AND (CC-BY-4.0 AND MIT) AND (MIT OR Apache-2.0) AND Unicode-3.0 AND (MIT OR CC0-1.0) AND (MIT OR Unlicense) AND 0BSD AND Apache-2.0 AND BSD-2-Clause AND BSD-3-Clause AND ISC AND MIT AND MIT AND ISC AND MPL-2.0 AND PSF-2.0 AND Zlib
- fedora 43: 389-ds-base 3.1.5-4.fc43 Β· GPL-3.0-or-later WITH GPL-3.0-389-ds-base-exception AND (Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR MIT) AND (Apache-2.0 OR LGPL-2.1-or-later OR MIT) AND (Apache-2.0 OR MIT) AND (Apache-2.0 OR MIT) AND Unicode-3.0 AND (CC-BY-4.0 AND MIT) AND (MIT OR Unlicense) AND 0BSD AND Apache-2.0 AND BSD-3-Clause AND ISC AND MIT AND MIT AND ISC AND MPL-2.0 AND Zlib
- fedora 44: 389-ds-base 3.2.0-15.fc44 Β· GPL-3.0-or-later WITH GPL-3.0-389-ds-base-exception AND (Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR MIT) AND (Apache-2.0 OR LGPL-2.1-or-later OR MIT) AND (Apache-2.0 OR MIT) AND (CC-BY-4.0 AND MIT) AND (MIT OR Apache-2.0) AND Unicode-3.0 AND (MIT OR CC0-1.0) AND (MIT OR Unlicense) AND 0BSD AND Apache-2.0 AND BSD-2-Clause AND BSD-3-Clause AND ISC AND MIT AND MIT AND ISC AND MPL-2.0 AND PSF-2.0 AND Zlib
- fedora 44: 389-ds-base 3.2.3-5.fc44 Β· GPL-3.0-or-later WITH GPL-3.0-389-ds-base-exception AND (Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR MIT) AND (Apache-2.0 OR LGPL-2.1-or-later OR MIT) AND (Apache-2.0 OR MIT) AND (Apache-2.0 OR MIT) AND Unicode-3.0 AND (CC-BY-4.0 AND MIT) AND (MIT OR Unlicense) AND 0BSD AND Apache-2.0 AND BSD-3-Clause AND ISC AND MIT AND MIT AND ISC AND MPL-2.0 AND Zlib
- nixos 26.05: 389-ds-base 3.1.3
- nixpkgs unstable: 389-ds-base 3.3.0
- opensuse-leap 16.0: 389-ds 3.0.7~git2.2846d5288-160000.1.1 Β· GPL-3.0-or-later AND MPL-2.0
- opensuse-leap 16.0: 389-ds 3.0.7~git2.2846d5288-160000.1.1 Β· GPL-3.0-or-later AND MPL-2.0
- opensuse-leap 16.0: 389-ds 3.0.7~git2.2846d5288-160000.1.1 Β· GPL-3.0-or-later AND MPL-2.0
- opensuse-leap 16.0: 389-ds 3.0.7~git2.2846d5288-160000.1.1 Β· GPL-3.0-or-later AND MPL-2.0
- ubuntu noble: 389-ds-base 2.4.5+dfsg1-1 Β· GPL-3.0-or-later AND Other
- ubuntu questing: 389-ds-base 3.1.2+dfsg1-1
- ubuntu resolute: 389-ds-base 3.1.2+vendor1-2 Β· GPL-3.0-or-later AND Other
- ubuntu stonking: 389-ds-base 3.3.1-3 Β· GPL-3.0-or-later AND Other
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms