https://bugs.openldap.org/show_bug.cgi?id=10502
Issue ID: 10502
Summary: feature proxyauthz should become default
Product: OpenLDAP
Version: unspecified
Hardware: All
OS: All
Status: UNCONFIRMED
Keywords: needs_review
Severity: normal
Priority: ---
Component: lloadd
Assignee: bugs(a)openldap.org
Reporter: ondra(a)mistotebe.net
Target Milestone: ---
Most stock lloadd deployments are against OpenLDAP, but since "feature" keyword
doesn't allow "off-switches", proxyauthz has had to have been an "off by
default" thing. This is insecure and probably a footgun for many.
We'll have to introduce a new configuration option to do this, one that allows
for gentler evolution.
This also allows us to reject a bindconf+no_proxyauthz combinations if we force
the rare admins who genuinely need it (no proxyauthz support in upstreams) to
opt in explicitly.
--
You are receiving this mail because:
You are on the CC list for the issue.
https://bugs.openldap.org/show_bug.cgi?id=10546
Issue ID: 10546
Summary: ldap_explode_dn result is not released in the
interactive test client
Product: OpenLDAP
Version: unspecified
Hardware: All
OS: All
Status: UNCONFIRMED
Keywords: needs_review
Severity: normal
Priority: ---
Component: libraries
Assignee: bugs(a)openldap.org
Reporter: 1489378385(a)qq.com
Target Milestone: ---
URL:
https://github.com/openldap/openldap/blob/8afcbe9e04f1a40f03cea51c57418b05f…
Description:
Source revision:
8afcbe9e04f1a40f03cea51c57418b05f86e8f44
Affected file:
libraries/libldap/test.c
Affected lines:
472-478
Source-level observation:
The interactive test client's E command calls ldap_explode_dn() and stores
the returned NULL-terminated array in exdn. It prints the array elements and
then leaves the switch case without releasing exdn.
According to ldap_get_dn(3), the result returned by ldap_explode_dn() should
be released with ldap_value_free().
The only reference to the allocated array is overwritten the next time the E
command is executed.
Steps to verify:
1. Build the libraries/libldap interactive test client with AddressSanitizer
or LeakSanitizer enabled.
2. Start the test client.
3. Execute the E command and enter a valid DN, for example:
cn=test,dc=example,dc=com
4. Repeat the E command several times.
5. Exit the client and inspect the sanitizer report or monitor its memory use.
Actual result:
Each E command allocates an exploded DN array that remains allocated until
the process terminates.
Expected result:
The exploded DN array should be released after all of its elements have been
printed.
Impact:
Repeated use of the E command increases the test client's memory consumption.
Validation status:
Confirmed by source review at the revision above. Runtime sanitizer validation
is pending.
--
You are receiving this mail because:
You are on the CC list for the issue.
https://bugs.openldap.org/show_bug.cgi?id=10517
Issue ID: 10517
Summary: mbedTLS doesn't verify certificate in reqcert try mode
Product: OpenLDAP
Version: unspecified
Hardware: All
OS: All
Status: UNCONFIRMED
Keywords: needs_review
Severity: normal
Priority: ---
Component: libraries
Assignee: bugs(a)openldap.org
Reporter: ondra(a)mistotebe.net
Target Milestone: ---
When setting the authmode to OPTIONAL, mbedTLS documentation[0] says that it's
the user's responsibility to check the verification result if they care.
`reqcert try` does care, but mbedtls_ssl_get_verify_result is never called in
that case and so an invalid cert is not detected (easy to test by changing line
204 in test067).
[0].
https://os.mbed.com/teams/sandbox/code/mbedtls/docs/tip/ssl_8h.html#a569528…
--
You are receiving this mail because:
You are on the CC list for the issue.
https://bugs.openldap.org/show_bug.cgi?id=9640
Issue ID: 9640
Summary: ACL privilege for MOD_INCREMENT
Product: OpenLDAP
Version: unspecified
Hardware: All
OS: All
Status: UNCONFIRMED
Severity: normal
Priority: ---
Component: slapd
Assignee: bugs(a)openldap.org
Reporter: michael(a)stroeder.com
Target Milestone: ---
I'm using LDAP write operations with MOD_INCREMENT with pre-read-control for
uidNumber/gidNumber generation.
I'd like to limit write access to an Integer attribute "nextID" to
MOD_INCREMENT, ideally even restricting the de-/increment value.
(Uniqueness is achieved with slapo-unique anyway but still I'd like to avoid
users messing with this attribute).
IMHO the ideal solution would be a new privilege "i".
Example for limiting write access to increment by one and grant read access for
using read control:
access to
attrs=nextID
val=1
by group=... =ri
Example for decrementing by two without read:
access to
attrs=nextID
val=-2
by group=... =i
--
You are receiving this mail because:
You are on the CC list for the issue.
https://bugs.openldap.org/show_bug.cgi?id=7441
Quanah Gibson-Mount <quanah(a)openldap.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|RESOLVED |VERIFIED
Resolution|TEST |FIXED
--
You are receiving this mail because:
You are on the CC list for the issue.
https://bugs.openldap.org/show_bug.cgi?id=10437
Issue ID: 10437
Summary: Let service manager know when we're about to pause
Product: OpenLDAP
Version: unspecified
Hardware: All
OS: All
Status: UNCONFIRMED
Keywords: needs_review
Severity: normal
Priority: ---
Component: slapd
Assignee: bugs(a)openldap.org
Reporter: ondra(a)mistotebe.net
Target Milestone: ---
Entering a pause and waiting for a task (back-ldap result, ...) to finish looks
exactly the same as slapd hanging, even cn=monitor will stop responding.
If the sysadmin has systemd or another manager that we can tell this is about
to happen, we might as well try.
--
You are receiving this mail because:
You are on the CC list for the issue.
https://bugs.openldap.org/show_bug.cgi?id=10436
Issue ID: 10436
Summary: Assorted fixes for 2.7
Product: OpenLDAP
Version: unspecified
Hardware: All
OS: All
Status: UNCONFIRMED
Keywords: needs_review
Severity: normal
Priority: ---
Component: slapd
Assignee: bugs(a)openldap.org
Reporter: ondra(a)mistotebe.net
Target Milestone: ---
Minor cleanups for unitialised variables, typos and annoying compiler warnings.
--
You are receiving this mail because:
You are on the CC list for the issue.
https://bugs.openldap.org/show_bug.cgi?id=10500
Issue ID: 10500
Summary: back-ldif/ldif.c crc32() should be static — collides
with zlib's crc32 at link time
Product: OpenLDAP
Version: 2.6.13
Hardware: All
OS: Linux
Status: UNCONFIRMED
Keywords: needs_review
Severity: normal
Priority: ---
Component: build
Assignee: bugs(a)openldap.org
Reporter: ionutn(a)gmail.com
Target Milestone: ---
In servers/slapd/back-ldif/ldif.c, the helper crc32() (defined at line 393 in
2.6.13) is declared with external linkage:
unsigned int
crc32(const void *vbuf, int len)
{
...
}
It is only used inside that file (lines 470 and 511). It has the same name as
zlib's public crc32() but a completely different signature and semantics — it's
an internal helper for hashing LDIF entry filenames, unrelated to zlib's
CRC-32-IEEE-802.3.
This is a latent symbol collision that has been present for many years. Until
recently, ld silently resolved zlib's crc32 references (from inflate.c.o /
deflate.c.o, transitively pulled in by libcrypto) against back-ldif's crc32 —
because back-ldif is linked first — and libz.a's crc32.c.o was never pulled in.
NEWLY EXPOSED BY zlib 1.3.2: zlib 1.3.2's deflate.c added an internal call to
crc32_z, a symbol defined only in libz.a(crc32.c.o). When slapd is linked
against libssl/libcrypto + libz.a, ld now has to pull in crc32.c.o to satisfy
crc32_z, which brings the public crc32 along — colliding with back-ldif's:
libz.a(crc32.c.o): In function `crc32':
zlib-1.3.2/crc32.c:950: multiple definition of `crc32'
libbackends.a(ldifldif.o):.../back-ldif/ldif.c:399: first defined here
collect2: error: ld returned 1 exit status
Reproduction: any build that links slapd (or anything pulling in libbackends.a)
together with libssl + libcrypto + zlib 1.3.2's libz.a. Hit on Linux/aarch64
and Linux/x86_64 with GCC 8.5 + ld from binutils.
Suggested fix (one keyword)
---------------------------
Mark the function static:
-unsigned int
+static unsigned int
crc32(const void *vbuf, int len)
Tested locally on 2.6.13: slapd builds cleanly against zlib 1.3.2 with this
change. No behaviour change since the function is only ever called from
within ldif.c.
Versions
--------
- Confirmed: 2.6.13 (latest) and 2.6.10. The code path appears identical going
back many releases.
- ld behaviour change is triggered specifically by zlib 1.3.2 (released
Feb 2026).
--
You are receiving this mail because:
You are on the CC list for the issue.
https://bugs.openldap.org/show_bug.cgi?id=10508
Issue ID: 10508
Summary: syncrepl: be_modrdn / message_to_op called without
orm_no_opattrs=1, modifiersName clobbered by consumer
rootdn
Product: OpenLDAP
Version: 2.6.13
Hardware: i386
OS: Linux
Status: UNCONFIRMED
Keywords: needs_review
Severity: normal
Priority: ---
Component: slapd
Assignee: bugs(a)openldap.org
Reporter: apostnikov(a)gmail.com
Target Milestone: ---
Created attachment 1150
--> https://bugs.openldap.org/attachment.cgi?id=1150&action=edit
0001-syncrepl-set-orm_no_opattrs-for-backend-ops.patch
When syncrepl applies provider changes locally it invokes the backend
through be_add / be_modify / be_modrdn / be_delete, carrying the
provider's operational attributes in the modlist. Without
`op->orm_no_opattrs = 1` the backend (verified on back-mdb;
servers/slapd/back-mdb/modrdn.c:76 and modify.c:619) calls
slap_mods_opattrs(), which auto-injects a
`replace modifiersName=<op->o_dn>` mod whenever modifiersName is not
already present in the modlist. For syncrepl, `op->o_dn` is the
consumer's local rootdn (set at syncrepl.c:2165 — `op->o_dn =
op->o_bd->be_rootdn`), so the consumer ends up with
`modifiersName=cn=<consumer-rootdn>` instead of the provider's value.
ITS#4820 originally papered over this in syncrepl_diff_entry() with a
kludge that always forced modifiersName/modifyTimestamp into the diff
(`if (*mods && (modifiersName||modifyTimestamp)) attr_cmp(NULL,new)`).
ITS#10250 commit 87933f3e removed that kludge with the rationale "the
mod is being passed to the backend with orm_no_opattrs these days".
But two code paths in syncrepl.c never actually set orm_no_opattrs:
1. syncrepl_entry() refresh-mode rename-with-content path
(around line 4788 on master): the parallel be_modify branch sets
`orm_no_opattrs = 1/0` around its call; the be_modrdn branch
does not.
2. syncrepl_message_to_op() (delta-sync log replay; whole function
from line 3180 on master): none of the four backend dispatches
(be_add, be_modify, be_modrdn, be_delete) set the flag.
Once 87933f3e removed the kludge, the auto-inject surfaced whenever
provider and consumer happened to already agree on modifiersName so
syncrepl_diff_entry produced no mod for it. Whether that happens for a
given entry depends on attribute iteration order in the diff
(attribute hash bucket order), which is why x86_64/aarch64 mostly
mask the bug while x86/armv7/armhf/s390x (QEMU builders) trigger it
deterministically and ppc64le sees it as flake in test063.
Worst case the consumer ends up with the provider's entryCSN (the
modrdn bumped it) but the wrong modifiersName, and ITS#10358's
assert-retry then sees identical entryCSN, takes no further action,
and the corruption is permanent until something else updates the
entry.
Reproducer
----------------------------------------------------------------
Native: 32-bit or big-endian build of HEAD; run
cd tests
make BACKEND=mdb mdb-mod TESTS=test017-syncreplication-refresh
Cross-arch via Alpine's CI image (any host):
docker run --rm --platform linux/386 -v $PWD:/mnt \
registry.alpinelinux.org/alpine/infra/docker/alpine-gitlab-ci:latest-x86 \
sh -c 'cd /mnt && ./configure --enable-modules --enable-mdb=mod \
--enable-syncprov=mod && make && cd tests && make mdb-mod'
Expected on affected builders:
>>>>> Starting test017-syncreplication-refresh for mdb...
...
test failed - provider and consumer databases differ
>>>>> Failed test017-syncreplication-refresh for mdb
Capturing the diff (modify defines.sh's CMPOUT temporarily) shows:
348c348
< description: Example, Inc. ITS test domain
---
> description: Example, Inc. modify+modrdn test domain
350c350
< modifiersName: cn=Manager,dc=example,dc=com
---
> modifiersName: cn=consumer,dc=example,dc=com
(Both entries carry the SAME final entryCSN — that's the smoking gun:
the consumer adopted the provider's CSN via the modrdn, but the
follow-up modify hit `err=122 LDAP_ASSERTION_FAILED` because of the
CSN bump, and ITS#10358's retry then short-circuited.)
Proposed fix
----------------------------------------------------------------
Six added lines in servers/slapd/syncrepl.c — see attached patch
0001-syncrepl-set-orm_no_opattrs-for-backend-ops.patch. Tested
against OPENLDAP_REL_ENG_2_6_13: full make test suite passes on
x86 (linux/386 QEMU) including all six tests that ITS#10250 patched
plus test043-delta-syncrepl and test063-delta-multiprovider.
References / related ITS
----------------------------------------------------------------
ITS#4820 — the original modifiersName/modifyTimestamp kludge added in 2007
ITS#10250 — kludge removed (MR#817, commit 87933f3e), exposing this bug
ITS#10358 — assert-control retry (MR#781) — masks the divergence as silent
data loss
ITS#8852 — sorted_attr_cmp() prerequisite for ITS#10250 (commit 8986f99d)
--
You are receiving this mail because:
You are on the CC list for the issue.
https://bugs.openldap.org/show_bug.cgi?id=10554
Issue ID: 10554
Summary: More bugs in deprecated functions in getdn.c
Product: OpenLDAP
Version: unspecified
Hardware: All
OS: All
Status: UNCONFIRMED
Keywords: needs_review
Severity: trivial
Priority: ---
Component: libraries
Assignee: bugs(a)openldap.org
Reporter: hyc(a)openldap.org
Target Milestone: ---
Filing these for completeness, and to avoid repeated reports of them in the
future. The relevant functions have been deprecated since 2006 and nothing
currently uses them.
Reported by Yeo Jooho (여주호) <jh.yeo(a)piolink.com>
1. ldap_explode_rdn() allocates its values[] array without zeroing it. On
error,
freeing it can free garbage pointers left over from previous heap allocs.
2. strval2ADstrlen() terminates its loop on NUL but advances by UTF-8 char
length, so a truncated lead byte at the end of a value steps the pointer
past the terminator and reads out of bounds. Heap-buffer-overflow read,
confirmed it does not disclose adjacent memory into output. Trigger:
ldap_str2dn() on a value like "cn=ab\c9,dc=x" followed by ldap_dn2str()
with LDAP_DN_FORMAT_AD_CANONICAL. Will trigger an error in ASAN but is
benign in normal builds.
3. ldap_explode_dn() doesn't check ldap_rdn2str()'s return value. On failure
that leaves a NULL embedded mid-array, which stops the caller's
ldap_memvfree() walk early and leaks everything after it. Trigger: a DN
with a bad RDN anywhere but the last position.
--
You are receiving this mail because:
You are on the CC list for the issue.