summaryrefslogtreecommitdiffstats
path: root/contrib/slapd-modules
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-06-03 05:34:59 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-06-03 05:34:59 +0000
commit36a5f1403a91d93db689e989ead3d9cf140c3cde (patch)
tree278cc6e7860205b0d40a895b977a46ea09018eb2 /contrib/slapd-modules
parentReleasing progress-linux version 2.6.7+dfsg-1~exp1~progress7.99u1. (diff)
downloadopenldap-36a5f1403a91d93db689e989ead3d9cf140c3cde.tar.xz
openldap-36a5f1403a91d93db689e989ead3d9cf140c3cde.zip
Merging upstream version 2.6.8+dfsg.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r--contrib/slapd-modules/README2
-rw-r--r--contrib/slapd-modules/acl/README.posixgroup2
-rw-r--r--contrib/slapd-modules/acl/now.c2
-rw-r--r--contrib/slapd-modules/acl/posixgroup.c2
-rw-r--r--contrib/slapd-modules/addpartial/README2
-rw-r--r--contrib/slapd-modules/addpartial/addpartial-overlay.c2
-rw-r--r--contrib/slapd-modules/alias/Makefile82
-rw-r--r--contrib/slapd-modules/alias/alias.c673
-rw-r--r--contrib/slapd-modules/alias/slapo-alias.5121
-rw-r--r--contrib/slapd-modules/alias/tests/Rules.mk23
-rw-r--r--contrib/slapd-modules/alias/tests/data/alias.conf4
-rw-r--r--contrib/slapd-modules/alias/tests/data/config.ldif5
-rw-r--r--contrib/slapd-modules/alias/tests/data/test001-00a-invalid.ldif4
-rw-r--r--contrib/slapd-modules/alias/tests/data/test001-00b-invalid.ldif4
-rw-r--r--contrib/slapd-modules/alias/tests/data/test001-01a-same-alias.ldif4
-rw-r--r--contrib/slapd-modules/alias/tests/data/test001-01b-same-attr.ldif4
-rw-r--r--contrib/slapd-modules/alias/tests/data/test001-01c-chained.ldif4
-rw-r--r--contrib/slapd-modules/alias/tests/data/test001-01d-chained.ldif4
-rw-r--r--contrib/slapd-modules/alias/tests/data/test001-02a-operational.ldif4
-rw-r--r--contrib/slapd-modules/alias/tests/data/test001-02b-single.ldif4
-rw-r--r--contrib/slapd-modules/alias/tests/data/test001-02c-syntax.ldif4
-rw-r--r--contrib/slapd-modules/alias/tests/data/test001-02d-matching.ldif4
-rw-r--r--contrib/slapd-modules/alias/tests/data/test001-02e-no-ordering.ldif4
-rw-r--r--contrib/slapd-modules/alias/tests/data/test002-add-rdn.ldif5
-rw-r--r--contrib/slapd-modules/alias/tests/data/test002-add.ldif18
-rw-r--r--contrib/slapd-modules/alias/tests/data/test002-delete.ldif3
-rw-r--r--contrib/slapd-modules/alias/tests/data/test002-modify.ldif4
-rw-r--r--contrib/slapd-modules/alias/tests/data/test002-modrdn.ldif5
-rw-r--r--contrib/slapd-modules/alias/tests/data/test003-config.ldif4
-rw-r--r--contrib/slapd-modules/alias/tests/data/test003-out.ldif66
-rwxr-xr-xcontrib/slapd-modules/alias/tests/run17
-rwxr-xr-xcontrib/slapd-modules/alias/tests/scripts/all93
-rwxr-xr-xcontrib/slapd-modules/alias/tests/scripts/common.sh105
-rwxr-xr-xcontrib/slapd-modules/alias/tests/scripts/test001-config248
-rwxr-xr-xcontrib/slapd-modules/alias/tests/scripts/test002-add-delete76
-rwxr-xr-xcontrib/slapd-modules/alias/tests/scripts/test003-search151
-rw-r--r--contrib/slapd-modules/allop/README2
-rw-r--r--contrib/slapd-modules/allop/allop.c2
-rw-r--r--contrib/slapd-modules/allop/slapo-allop.52
-rw-r--r--contrib/slapd-modules/allowed/Makefile2
-rw-r--r--contrib/slapd-modules/allowed/README2
-rw-r--r--contrib/slapd-modules/allowed/allowed.c2
-rw-r--r--contrib/slapd-modules/authzid/Makefile2
-rw-r--r--contrib/slapd-modules/authzid/authzid.c2
-rw-r--r--contrib/slapd-modules/autogroup/Makefile24
-rw-r--r--contrib/slapd-modules/autogroup/README2
-rw-r--r--contrib/slapd-modules/autogroup/autogroup.c260
-rw-r--r--contrib/slapd-modules/autogroup/slapo-autogroup.57
-rw-r--r--contrib/slapd-modules/ciboolean/Makefile2
-rw-r--r--contrib/slapd-modules/ciboolean/ciboolean.c2
-rw-r--r--contrib/slapd-modules/ciboolean/slapo-ciboolean.52
-rwxr-xr-xcontrib/slapd-modules/ciboolean/tests/run2
-rwxr-xr-xcontrib/slapd-modules/ciboolean/tests/scripts/test001-ciboolean2
-rw-r--r--contrib/slapd-modules/cloak/cloak.c2
-rw-r--r--contrib/slapd-modules/cloak/slapo-cloak.52
-rw-r--r--contrib/slapd-modules/comp_match/Makefile2
-rw-r--r--contrib/slapd-modules/datamorph/Makefile2
-rw-r--r--contrib/slapd-modules/datamorph/datamorph.c26
-rwxr-xr-xcontrib/slapd-modules/datamorph/tests/run2
-rwxr-xr-xcontrib/slapd-modules/datamorph/tests/scripts/all2
-rwxr-xr-xcontrib/slapd-modules/datamorph/tests/scripts/common.sh2
-rwxr-xr-xcontrib/slapd-modules/datamorph/tests/scripts/test001-config2
-rwxr-xr-xcontrib/slapd-modules/datamorph/tests/scripts/test002-add-delete2
-rwxr-xr-xcontrib/slapd-modules/datamorph/tests/scripts/test003-search2
-rwxr-xr-xcontrib/slapd-modules/datamorph/tests/scripts/test004-compare2
-rwxr-xr-xcontrib/slapd-modules/datamorph/tests/scripts/test005-modify2
-rwxr-xr-xcontrib/slapd-modules/datamorph/tests/scripts/test006-modrdn2
-rwxr-xr-xcontrib/slapd-modules/datamorph/tests/scripts/test007-transformed-replication2
-rwxr-xr-xcontrib/slapd-modules/datamorph/tests/scripts/test008-ignored-replication2
-rw-r--r--contrib/slapd-modules/denyop/denyop.c2
-rw-r--r--contrib/slapd-modules/dsaschema/README2
-rw-r--r--contrib/slapd-modules/dsaschema/dsaschema.c2
-rw-r--r--contrib/slapd-modules/dupent/Makefile2
-rw-r--r--contrib/slapd-modules/dupent/dupent.c2
-rw-r--r--contrib/slapd-modules/emptyds/Makefile2
-rw-r--r--contrib/slapd-modules/emptyds/README2
-rw-r--r--contrib/slapd-modules/emptyds/emptyds.c2
-rw-r--r--contrib/slapd-modules/emptyds/slapo-emptyds.52
-rw-r--r--contrib/slapd-modules/emptyds/tests/data/emptyds.conf2
-rwxr-xr-xcontrib/slapd-modules/emptyds/tests/run2
-rwxr-xr-xcontrib/slapd-modules/emptyds/tests/scripts/all2
-rwxr-xr-xcontrib/slapd-modules/emptyds/tests/scripts/test001-emptyds2
-rw-r--r--contrib/slapd-modules/kinit/README2
-rw-r--r--contrib/slapd-modules/kinit/kinit.c2
-rw-r--r--contrib/slapd-modules/lastmod/lastmod.c2
-rw-r--r--contrib/slapd-modules/lastmod/slapo-lastmod.52
-rw-r--r--contrib/slapd-modules/noopsrch/Makefile2
-rw-r--r--contrib/slapd-modules/noopsrch/noopsrch.c2
-rw-r--r--contrib/slapd-modules/nops/nops.c2
-rw-r--r--contrib/slapd-modules/nssov/Makefile2
-rw-r--r--contrib/slapd-modules/nssov/README2
-rw-r--r--contrib/slapd-modules/nssov/alias.c2
-rw-r--r--contrib/slapd-modules/nssov/ether.c2
-rw-r--r--contrib/slapd-modules/nssov/group.c2
-rw-r--r--contrib/slapd-modules/nssov/host.c2
-rw-r--r--contrib/slapd-modules/nssov/netgroup.c2
-rw-r--r--contrib/slapd-modules/nssov/network.c2
-rw-r--r--contrib/slapd-modules/nssov/nssov.c2
-rw-r--r--contrib/slapd-modules/nssov/nssov.h2
-rw-r--r--contrib/slapd-modules/nssov/pam.c2
-rw-r--r--contrib/slapd-modules/nssov/passwd.c2
-rw-r--r--contrib/slapd-modules/nssov/protocol.c2
-rw-r--r--contrib/slapd-modules/nssov/rpc.c2
-rw-r--r--contrib/slapd-modules/nssov/service.c2
-rw-r--r--contrib/slapd-modules/nssov/shadow.c2
-rw-r--r--contrib/slapd-modules/nssov/slapo-nssov.52
-rw-r--r--contrib/slapd-modules/passwd/README2
-rw-r--r--contrib/slapd-modules/passwd/kerberos.c2
-rw-r--r--contrib/slapd-modules/passwd/netscape.c2
-rw-r--r--contrib/slapd-modules/passwd/pbkdf2/README2
-rw-r--r--contrib/slapd-modules/passwd/pbkdf2/pw-pbkdf2.c2
-rw-r--r--contrib/slapd-modules/passwd/pbkdf2/slapd-pw-pbkdf2.52
-rw-r--r--contrib/slapd-modules/passwd/radius.c2
-rw-r--r--contrib/slapd-modules/passwd/sha2/README2
-rw-r--r--contrib/slapd-modules/passwd/sha2/slapd-pw-sha2.52
-rw-r--r--contrib/slapd-modules/passwd/sha2/slapd-sha2.c2
-rw-r--r--contrib/slapd-modules/passwd/slapd-pw-radius.52
-rw-r--r--contrib/slapd-modules/passwd/totp/README2
-rw-r--r--contrib/slapd-modules/passwd/totp/slapd-totp.c2
-rw-r--r--contrib/slapd-modules/passwd/totp/slapo-totp.52
-rw-r--r--contrib/slapd-modules/proxyOld/Makefile2
-rw-r--r--contrib/slapd-modules/proxyOld/README2
-rw-r--r--contrib/slapd-modules/proxyOld/proxyOld.c2
-rw-r--r--contrib/slapd-modules/rbac/rbac.c2
-rw-r--r--contrib/slapd-modules/rbac/rbac.h2
-rw-r--r--contrib/slapd-modules/samba4/Makefile2
-rw-r--r--contrib/slapd-modules/samba4/README2
-rw-r--r--contrib/slapd-modules/samba4/pguid.c2
-rw-r--r--contrib/slapd-modules/samba4/rdnval.c2
-rw-r--r--contrib/slapd-modules/samba4/vernum.c2
-rw-r--r--contrib/slapd-modules/smbk5pwd/Makefile2
-rw-r--r--contrib/slapd-modules/smbk5pwd/README2
-rw-r--r--contrib/slapd-modules/smbk5pwd/slapo-smbk5pwd.52
-rw-r--r--contrib/slapd-modules/smbk5pwd/smbk5pwd.c3
-rw-r--r--contrib/slapd-modules/trace/trace.c2
-rw-r--r--contrib/slapd-modules/usn/README2
-rw-r--r--contrib/slapd-modules/usn/usn.c2
-rw-r--r--contrib/slapd-modules/variant/Makefile2
-rwxr-xr-xcontrib/slapd-modules/variant/tests/run2
-rwxr-xr-xcontrib/slapd-modules/variant/tests/scripts/all2
-rwxr-xr-xcontrib/slapd-modules/variant/tests/scripts/common.sh2
-rwxr-xr-xcontrib/slapd-modules/variant/tests/scripts/test001-config2
-rwxr-xr-xcontrib/slapd-modules/variant/tests/scripts/test002-add-delete2
-rwxr-xr-xcontrib/slapd-modules/variant/tests/scripts/test003-search2
-rwxr-xr-xcontrib/slapd-modules/variant/tests/scripts/test004-compare2
-rwxr-xr-xcontrib/slapd-modules/variant/tests/scripts/test005-modify2
-rwxr-xr-xcontrib/slapd-modules/variant/tests/scripts/test006-acl2
-rwxr-xr-xcontrib/slapd-modules/variant/tests/scripts/test007-subtypes2
-rwxr-xr-xcontrib/slapd-modules/variant/tests/scripts/test008-variant-replication2
-rwxr-xr-xcontrib/slapd-modules/variant/tests/scripts/test009-ignored-replication2
-rwxr-xr-xcontrib/slapd-modules/variant/tests/scripts/test010-limits2
-rwxr-xr-xcontrib/slapd-modules/variant/tests/scripts/test011-referral2
-rwxr-xr-xcontrib/slapd-modules/variant/tests/scripts/test012-crossdb2
-rw-r--r--contrib/slapd-modules/variant/variant.c24
-rw-r--r--contrib/slapd-modules/vc/Makefile2
-rw-r--r--contrib/slapd-modules/vc/vc.c2
156 files changed, 2084 insertions, 247 deletions
diff --git a/contrib/slapd-modules/README b/contrib/slapd-modules/README
index 136f720..80823c5 100644
--- a/contrib/slapd-modules/README
+++ b/contrib/slapd-modules/README
@@ -1,4 +1,4 @@
-Copyright 2008-2022 The OpenLDAP Foundation. All rights reserved.
+Copyright 2008-2024 The OpenLDAP Foundation. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted only as authorized by the OpenLDAP
diff --git a/contrib/slapd-modules/acl/README.posixgroup b/contrib/slapd-modules/acl/README.posixgroup
index 5e0460d..10e91ff 100644
--- a/contrib/slapd-modules/acl/README.posixgroup
+++ b/contrib/slapd-modules/acl/README.posixgroup
@@ -27,7 +27,7 @@ gcc -shared -I../../../include -I../../../servers/slapd -Wall -g \
-o acl-posixgroup.so posixgroup.c
---
-Copyright 2005-2022 The OpenLDAP Foundation. All rights reserved.
+Copyright 2005-2024 The OpenLDAP Foundation. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted only as authorized by the OpenLDAP
diff --git a/contrib/slapd-modules/acl/now.c b/contrib/slapd-modules/acl/now.c
index 582c01f..bfc74f5 100644
--- a/contrib/slapd-modules/acl/now.c
+++ b/contrib/slapd-modules/acl/now.c
@@ -1,6 +1,6 @@
/* $OpenLDAP$ */
/*
- * Copyright 1998-2022 The OpenLDAP Foundation.
+ * Copyright 1998-2024 The OpenLDAP Foundation.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/contrib/slapd-modules/acl/posixgroup.c b/contrib/slapd-modules/acl/posixgroup.c
index 9a9a5a8..06f011d 100644
--- a/contrib/slapd-modules/acl/posixgroup.c
+++ b/contrib/slapd-modules/acl/posixgroup.c
@@ -2,7 +2,7 @@
/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
- * Copyright 1998-2022 The OpenLDAP Foundation.
+ * Copyright 1998-2024 The OpenLDAP Foundation.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/contrib/slapd-modules/addpartial/README b/contrib/slapd-modules/addpartial/README
index 968cdd8..dcd7529 100644
--- a/contrib/slapd-modules/addpartial/README
+++ b/contrib/slapd-modules/addpartial/README
@@ -59,7 +59,7 @@ CAVEATS
syncprov overlay.
---
-Copyright 2004-2022 The OpenLDAP Foundation.
+Copyright 2004-2024 The OpenLDAP Foundation.
Portions Copyright (C) Virginia Tech, David Hawes.
All rights reserved.
diff --git a/contrib/slapd-modules/addpartial/addpartial-overlay.c b/contrib/slapd-modules/addpartial/addpartial-overlay.c
index b1d637b..df2b203 100644
--- a/contrib/slapd-modules/addpartial/addpartial-overlay.c
+++ b/contrib/slapd-modules/addpartial/addpartial-overlay.c
@@ -2,7 +2,7 @@
/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
- * Copyright 2004-2022 The OpenLDAP Foundation.
+ * Copyright 2004-2024 The OpenLDAP Foundation.
* Portions Copyright (C) 2004 Virginia Tech, David Hawes.
* All rights reserved.
*
diff --git a/contrib/slapd-modules/alias/Makefile b/contrib/slapd-modules/alias/Makefile
new file mode 100644
index 0000000..c1be15b
--- /dev/null
+++ b/contrib/slapd-modules/alias/Makefile
@@ -0,0 +1,82 @@
+# $OpenLDAP$
+# This work is part of OpenLDAP Software <http://www.openldap.org/>.
+#
+# Copyright 1998-2023 The OpenLDAP Foundation.
+# Copyright 2023 Ondřej Kuzník, Symas Corp. All Rights Reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted only as authorized by the OpenLDAP
+# Public License.
+#
+# A copy of this license is available in the file LICENSE in the
+# top-level directory of the distribution or, alternatively, at
+# <http://www.OpenLDAP.org/license.html>.
+
+LDAP_SRC = ../../..
+LDAP_BUILD = $(LDAP_SRC)
+SRCDIR = ./
+LDAP_INC = -I$(LDAP_BUILD)/include -I$(LDAP_SRC)/include -I$(LDAP_SRC)/servers/slapd
+LDAP_LIB = $(LDAP_BUILD)/libraries/libldap/libldap.la \
+ $(LDAP_BUILD)/libraries/liblber/liblber.la
+
+PLAT = UNIX
+NT_LIB = -L$(LDAP_BUILD)/servers/slapd -lslapd
+NT_LDFLAGS = -no-undefined -avoid-version
+UNIX_LDFLAGS = -version-info $(LTVER)
+
+LIBTOOL = $(LDAP_BUILD)/libtool
+INSTALL = /usr/bin/install
+CC = gcc
+OPT = -g -O2
+DEFS = -DSLAPD_OVER_ALIAS=SLAPD_MOD_DYNAMIC
+INCS = $(LDAP_INC)
+LIBS = $($(PLAT)_LIB) $(LDAP_LIB)
+LD_FLAGS = $(LDFLAGS) $($(PLAT)_LDFLAGS) -rpath $(moduledir) -module
+
+PROGRAMS = alias.la
+MANPAGES = slapo-alias.5
+CLEAN = *.o *.lo *.la .libs
+LTVER = 0:0:0
+
+prefix=/usr/local
+exec_prefix=$(prefix)
+ldap_subdir=/openldap
+
+libdir=$(exec_prefix)/lib
+libexecdir=$(exec_prefix)/libexec
+moduledir = $(libexecdir)$(ldap_subdir)
+mandir = $(exec_prefix)/share/man
+man5dir = $(mandir)/man5
+
+all: $(PROGRAMS)
+
+d :=
+sp :=
+dir := tests
+include $(dir)/Rules.mk
+
+.SUFFIXES: .c .o .lo
+
+.c.lo:
+ $(LIBTOOL) --mode=compile $(CC) $(CFLAGS) $(OPT) $(CPPFLAGS) $(DEFS) $(INCS) -c $<
+
+alias.la: alias.lo
+ $(LIBTOOL) --mode=link $(CC) $(LD_FLAGS) -o $@ $? $(LIBS)
+
+clean:
+ rm -rf $(CLEAN)
+
+install: install-lib install-man FORCE
+
+install-lib: $(PROGRAMS)
+ mkdir -p $(DESTDIR)$(moduledir)
+ for p in $(PROGRAMS) ; do \
+ $(LIBTOOL) --mode=install cp $$p $(DESTDIR)$(moduledir) ; \
+ done
+
+install-man: $(MANPAGES)
+ mkdir -p $(DESTDIR)$(man5dir)
+ $(INSTALL) -m 644 $(MANPAGES) $(DESTDIR)$(man5dir)
+
+FORCE:
+
diff --git a/contrib/slapd-modules/alias/alias.c b/contrib/slapd-modules/alias/alias.c
new file mode 100644
index 0000000..c5707ff
--- /dev/null
+++ b/contrib/slapd-modules/alias/alias.c
@@ -0,0 +1,673 @@
+/* alias.c - expose an attribute under a different name */
+/* $OpenLDAP$ */
+/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
+ *
+ * Copyright 2016-2023 The OpenLDAP Foundation.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted only as authorized by the OpenLDAP
+ * Public License.
+ *
+ * A copy of this license is available in the file LICENSE in the
+ * top-level directory of the distribution or, alternatively, at
+ * <http://www.OpenLDAP.org/license.html>.
+ */
+/* ACKNOWLEDGEMENTS:
+ * This work was developed in 2023 by Ondřej Kuzník for Symas Corp.
+ */
+
+#include "portable.h"
+
+#ifdef SLAPD_OVER_ALIAS
+
+#include <inttypes.h>
+#include <ac/stdlib.h>
+
+#include "slap.h"
+#include "slap-config.h"
+#include "lutil.h"
+#include "ldap_queue.h"
+
+typedef struct alias_mapping_t {
+ AttributeDescription *source;
+ AttributeDescription *alias;
+} alias_mapping;
+
+typedef struct alias_info_t {
+ alias_mapping *mappings;
+} alias_info;
+
+typedef struct alias_sc_private_t {
+ slap_overinst *on;
+ AttributeName *attrs_orig, *attrs_new;
+} alias_sc_private;
+
+static alias_mapping *
+attribute_mapped( alias_info *ov, AttributeDescription *ad )
+{
+ alias_mapping *m;
+
+ for ( m = ov->mappings; m && m->source; m++ ) {
+ if ( ad == m->alias ) return m;
+ }
+
+ return NULL;
+}
+
+static int
+alias_op_add( Operation *op, SlapReply *rs )
+{
+ slap_overinst *on = (slap_overinst *)op->o_bd->bd_info;
+ alias_info *ov = on->on_bi.bi_private;
+ Entry *e = op->ora_e;
+ Attribute *a;
+ int rc = LDAP_SUCCESS;
+
+ if ( !BER_BVISEMPTY( &e->e_nname ) ) {
+ LDAPRDN rDN;
+ const char *p;
+ int i;
+
+ rc = ldap_bv2rdn_x( &e->e_nname, &rDN, (char **)&p, LDAP_DN_FORMAT_LDAP,
+ op->o_tmpmemctx );
+ if ( rc != LDAP_SUCCESS ) {
+ Debug( LDAP_DEBUG_ANY, "alias_op_add: "
+ "can't parse rdn: dn=%s\n",
+ op->o_req_ndn.bv_val );
+ return SLAP_CB_CONTINUE;
+ }
+
+ for ( i = 0; rDN[i]; i++ ) {
+ AttributeDescription *ad = NULL;
+
+ /* If we can't resolve the attribute, ignore it */
+ if ( slap_bv2ad( &rDN[i]->la_attr, &ad, &p ) ) {
+ continue;
+ }
+
+ if ( attribute_mapped( ov, ad ) ) {
+ rc = LDAP_CONSTRAINT_VIOLATION;
+ break;
+ }
+ }
+
+ ldap_rdnfree_x( rDN, op->o_tmpmemctx );
+ if ( rc != LDAP_SUCCESS ) {
+ send_ldap_error( op, rs, rc,
+ "trying to add a virtual attribute in RDN" );
+ return rc;
+ }
+ }
+
+ for ( a = e->e_attrs; a; a = a->a_next ) {
+ if ( attribute_mapped( ov, a->a_desc ) ) {
+ rc = LDAP_CONSTRAINT_VIOLATION;
+ send_ldap_error( op, rs, rc,
+ "trying to add a virtual attribute" );
+ return LDAP_CONSTRAINT_VIOLATION;
+ }
+ }
+
+ return SLAP_CB_CONTINUE;
+}
+
+static int
+alias_op_compare( Operation *op, SlapReply *rs )
+{
+ slap_overinst *on = (slap_overinst *)op->o_bd->bd_info;
+ alias_info *ov = on->on_bi.bi_private;
+ alias_mapping *alias = attribute_mapped( ov, op->orc_ava->aa_desc );
+
+ if ( alias )
+ op->orc_ava->aa_desc = alias->source;
+
+ return SLAP_CB_CONTINUE;
+}
+
+static int
+alias_op_mod( Operation *op, SlapReply *rs )
+{
+ slap_overinst *on = (slap_overinst *)op->o_bd->bd_info;
+ alias_info *ov = on->on_bi.bi_private;
+ Modifications *mod;
+ int rc = LDAP_CONSTRAINT_VIOLATION;
+
+ for ( mod = op->orm_modlist; mod; mod = mod->sml_next ) {
+ if ( attribute_mapped( ov, mod->sml_desc ) ) {
+ send_ldap_error( op, rs, rc,
+ "trying to modify a virtual attribute" );
+ return LDAP_CONSTRAINT_VIOLATION;
+ }
+ }
+
+ return SLAP_CB_CONTINUE;
+}
+
+static int
+alias_op_modrdn( Operation *op, SlapReply *rs )
+{
+ slap_overinst *on = (slap_overinst *)op->o_bd->bd_info;
+ alias_info *ov = on->on_bi.bi_private;
+ LDAPRDN rDN;
+ const char *p;
+ int i, rc = SLAP_CB_CONTINUE;
+
+ rc = ldap_bv2rdn_x( &op->orr_nnewrdn, &rDN, (char **)&p,
+ LDAP_DN_FORMAT_LDAP, op->o_tmpmemctx );
+ if ( rc != LDAP_SUCCESS ) {
+ Debug( LDAP_DEBUG_ANY, "alias_op_modrdn: "
+ "can't parse rdn for dn=%s\n",
+ op->o_req_ndn.bv_val );
+ return SLAP_CB_CONTINUE;
+ }
+
+ for ( i = 0; rDN[i]; i++ ) {
+ AttributeDescription *ad = NULL;
+
+ /* If we can't resolve the attribute, ignore it */
+ if ( slap_bv2ad( &rDN[i]->la_attr, &ad, &p ) ) {
+ continue;
+ }
+
+ if ( attribute_mapped( ov, ad ) ) {
+ rc = LDAP_CONSTRAINT_VIOLATION;
+ break;
+ }
+ }
+
+ ldap_rdnfree_x( rDN, op->o_tmpmemctx );
+ if ( rc != LDAP_SUCCESS ) {
+ send_ldap_error( op, rs, rc,
+ "trying to add a virtual attribute in RDN" );
+ return rc;
+ }
+
+ return SLAP_CB_CONTINUE;
+}
+
+static int
+alias_response_cleanup( Operation *op, SlapReply *rs )
+{
+ alias_sc_private *data = op->o_callback->sc_private;
+
+ if ( rs->sr_type == REP_RESULT || op->o_abandon ||
+ rs->sr_err == SLAPD_ABANDON )
+ {
+ if ( op->ors_attrs == data->attrs_new )
+ op->ors_attrs = data->attrs_orig;
+
+ ch_free( data->attrs_new );
+ ch_free( op->o_callback );
+ op->o_callback = NULL;
+ }
+
+ return SLAP_CB_CONTINUE;
+}
+
+static int
+alias_response( Operation *op, SlapReply *rs )
+{
+ alias_sc_private *data = op->o_callback->sc_private;
+ slap_overinst *on = data->on;
+ alias_info *ov = on->on_bi.bi_private;
+ Entry *e = NULL, *e_orig = rs->sr_entry;
+ alias_mapping *mapping;
+ int rc = SLAP_CB_CONTINUE;
+
+ if ( rs->sr_type != REP_SEARCH || !e_orig ) {
+ return rc;
+ }
+
+ for ( mapping = ov->mappings; mapping && mapping->source; mapping++ ) {
+ Attribute *source, *a;
+ int operational = is_at_operational( mapping->source->ad_type ),
+ keep_source = 0;
+ slap_mask_t requested = operational ?
+ SLAP_OPATTRS_YES : SLAP_USERATTRS_YES;
+
+ if ( !(requested & rs->sr_attr_flags) &&
+ !ad_inlist( mapping->alias, rs->sr_attrs ) )
+ continue;
+
+ /* TODO: deal with multiple aliases from the same source */
+ if ( (requested & rs->sr_attr_flags) ||
+ ad_inlist( mapping->source, data->attrs_orig ) ) {
+ keep_source = 1;
+ }
+
+ if ( operational ) {
+ source = attr_find( rs->sr_operational_attrs, mapping->source );
+ }
+ if ( !source ) {
+ operational = 0;
+ source = attr_find( e_orig->e_attrs, mapping->source );
+ }
+ if ( !source )
+ continue;
+
+ if ( operational ) {
+ if ( !keep_source ) {
+ source->a_desc = mapping->alias;
+ } else {
+ Attribute **ap;
+
+ a = attr_dup( source );
+ a->a_desc = mapping->alias;
+
+ for ( ap = &rs->sr_operational_attrs; *ap; ap=&(*ap)->a_next );
+ *ap = a;
+ }
+ continue;
+ }
+
+ if ( !e ) {
+ if ( rs->sr_flags & REP_ENTRY_MODIFIABLE ) {
+ e = e_orig;
+ } else {
+ e = entry_dup( e_orig );
+ }
+ }
+
+ a = attr_find( e->e_attrs, mapping->source );
+ if ( !keep_source ) {
+ a->a_desc = mapping->alias;
+ } else {
+ attr_merge( e, mapping->alias, a->a_vals, a->a_nvals );
+ }
+ }
+
+ if ( e && e != e_orig ) {
+ rs_replace_entry( op, rs, on, e );
+ rs->sr_flags &= ~REP_ENTRY_MASK;
+ rs->sr_flags |= REP_ENTRY_MODIFIABLE | REP_ENTRY_MUSTBEFREED;
+ }
+
+ return rc;
+}
+
+static int
+alias_filter( alias_info *ov, Filter *f )
+{
+ int changed = 0;
+
+ switch ( f->f_choice ) {
+ case LDAP_FILTER_AND:
+ case LDAP_FILTER_OR: {
+ for ( f = f->f_and; f; f = f->f_next ) {
+ int result = alias_filter( ov, f );
+ if ( result < 0 ) {
+ return result;
+ }
+ changed += result;
+ }
+ } break;
+
+ case LDAP_FILTER_NOT:
+ return alias_filter( ov, f->f_not );
+
+ case LDAP_FILTER_PRESENT: {
+ alias_mapping *alias = attribute_mapped( ov, f->f_desc );
+ if ( alias ) {
+ f->f_desc = alias->source;
+ changed = 1;
+ }
+ } break;
+
+ case LDAP_FILTER_APPROX:
+ case LDAP_FILTER_EQUALITY:
+ case LDAP_FILTER_GE:
+ case LDAP_FILTER_LE: {
+ alias_mapping *alias = attribute_mapped( ov, f->f_av_desc );
+ if ( alias ) {
+ f->f_av_desc = alias->source;
+ changed = 1;
+ }
+ } break;
+
+ case LDAP_FILTER_SUBSTRINGS: {
+ alias_mapping *alias = attribute_mapped( ov, f->f_sub_desc );
+ if ( alias ) {
+ f->f_sub_desc = alias->source;
+ changed = 1;
+ }
+ } break;
+
+ case LDAP_FILTER_EXT: {
+ alias_mapping *alias = attribute_mapped( ov, f->f_mr_desc );
+ if ( alias ) {
+ f->f_mr_desc = alias->source;
+ changed = 1;
+ }
+ } break;
+
+ default:
+ return -1;
+ }
+ return changed;
+}
+
+static int
+alias_op_search( Operation *op, SlapReply *rs )
+{
+ slap_overinst *on = (slap_overinst *)op->o_bd->bd_info;
+ alias_info *ov = on->on_bi.bi_private;
+ alias_mapping *mapping;
+ AttributeName *an_orig = NULL, *an_new = NULL;
+ int mapped, an_length = 0;
+
+ if ( get_manageDSAit( op ) )
+ return SLAP_CB_CONTINUE;
+
+ /*
+ * 1. check filter: traverse, map aliased attributes
+ * 2. unparse filter
+ * 3. check all requested attributes -> register callback if one matches
+ */
+ if ( (mapped = alias_filter( ov, op->ors_filter )) < 0 ) {
+ send_ldap_error( op, rs, LDAP_OTHER,
+ "alias_op_search: failed to process filter" );
+ return LDAP_OTHER;
+ }
+
+ if ( mapped ) {
+ op->o_tmpfree( op->ors_filterstr.bv_val, op->o_tmpmemctx );
+ filter2bv_x( op, op->ors_filter, &op->ors_filterstr );
+ }
+
+ mapped = 0;
+ for ( mapping = ov->mappings; mapping && mapping->source; mapping++ ) {
+ int operational = is_at_operational( mapping->source->ad_type );
+ slap_mask_t requested = operational ?
+ SLAP_OPATTRS_YES : SLAP_USERATTRS_YES;
+
+ if ( requested & slap_attr_flags( op->ors_attrs ) ) {
+ mapped = 1;
+ } else if ( ad_inlist( mapping->alias, op->ors_attrs ) ) {
+ mapped = 1;
+ if ( !an_length ) {
+ for ( ; !BER_BVISNULL( &op->ors_attrs[an_length].an_name ); an_length++ )
+ /* Count */;
+ }
+
+ an_new = ch_realloc( an_new, (an_length+2)*sizeof(AttributeName) );
+ if ( !an_orig ) {
+ int i;
+ an_orig = op->ors_attrs;
+ for ( i=0; i < an_length; i++ ) {
+ an_new[i] = an_orig[i];
+ }
+ }
+
+ an_new[an_length].an_name = mapping->source->ad_cname;
+ an_new[an_length].an_desc = mapping->source;
+ an_length++;
+
+ BER_BVZERO( &an_new[an_length].an_name );
+ }
+ }
+
+ if ( mapped ) {
+ /* We have something to map back */
+ slap_callback *cb = op->o_tmpcalloc( 1,
+ sizeof(slap_callback)+sizeof(alias_sc_private),
+ op->o_tmpmemctx );
+ alias_sc_private *data = (alias_sc_private *)(cb+1);
+
+ data->on = on;
+
+ cb->sc_response = alias_response;
+ cb->sc_private = data;
+ cb->sc_next = op->o_callback;
+ cb->sc_cleanup = alias_response_cleanup;
+
+ if ( an_new ) {
+ data->attrs_orig = an_orig;
+ data->attrs_new = an_new;
+ op->ors_attrs = an_new;
+ }
+
+ op->o_callback = cb;
+ }
+
+ return SLAP_CB_CONTINUE;
+}
+
+/* Configuration */
+
+static ConfigDriver alias_config_mapping;
+
+static ConfigTable alias_cfg[] = {
+ { "alias_attribute", "attr> <attr", 3, 3, 0,
+ ARG_MAGIC,
+ alias_config_mapping,
+ "( OLcfgCtAt:10.1 NAME 'olcAliasMapping' "
+ "DESC 'Alias definition' "
+ "EQUALITY caseIgnoreMatch "
+ "SYNTAX OMsDirectoryString )",
+ NULL, NULL
+ },
+
+ { NULL, NULL, 0, 0, 0, ARG_IGNORED }
+};
+
+/*
+ * FIXME: There is no reason to keep olcAliasMapping MAY (making this overlay
+ * a noop) except we can't enforce a MUST with slaptest+slapd.conf.
+ */
+static ConfigOCs alias_ocs[] = {
+ { "( OLcfgCtOc:10.1 "
+ "NAME 'olcAliasConfig' "
+ "DESC 'Alias overlay configuration' "
+ "MAY ( olcAliasMapping ) "
+ "SUP olcOverlayConfig )",
+ Cft_Overlay, alias_cfg },
+
+ { NULL, 0, NULL }
+};
+
+static int
+alias_config_mapping( ConfigArgs *ca )
+{
+ slap_overinst *on = (slap_overinst *)ca->bi;
+ alias_info *ov = on->on_bi.bi_private;
+ AttributeDescription *source = NULL, *alias = NULL;
+ AttributeType *sat, *aat;
+ const char *text;
+ int i, rc = LDAP_CONSTRAINT_VIOLATION;
+
+ if ( ca->op == SLAP_CONFIG_EMIT ) {
+ alias_mapping *mapping;
+
+ for ( mapping = ov->mappings; mapping && mapping->source; mapping++ ) {
+ char buf[SLAP_TEXT_BUFLEN];
+ struct berval bv = { .bv_val = buf, .bv_len = SLAP_TEXT_BUFLEN };
+ bv.bv_len = snprintf( buf, bv.bv_len, "%s %s",
+ mapping->source->ad_cname.bv_val,
+ mapping->alias->ad_cname.bv_val );
+ value_add_one( &ca->rvalue_vals, &bv );
+ }
+ return LDAP_SUCCESS;
+ } else if ( ca->op == LDAP_MOD_DELETE ) {
+ if ( ca->valx < 0 ) {
+ ch_free( ov->mappings );
+ ov->mappings = NULL;
+ } else {
+ i = ca->valx;
+ do {
+ ov->mappings[i] = ov->mappings[i+1];
+ i++;
+ } while ( ov->mappings[i].source );
+ }
+ return LDAP_SUCCESS;
+ }
+
+ rc = slap_str2ad( ca->argv[1], &source, &text );
+ if ( rc ) {
+ snprintf( ca->cr_msg, sizeof(ca->cr_msg),
+ "cannot resolve attribute '%s': \"%s\"",
+ ca->argv[1], text );
+ Debug( LDAP_DEBUG_ANY, "%s: %s\n", ca->log, ca->cr_msg );
+ goto done;
+ }
+
+ rc = slap_str2ad( ca->argv[2], &alias, &text );
+ if ( rc ) {
+ snprintf( ca->cr_msg, sizeof(ca->cr_msg),
+ "cannot resolve attribute '%s': \"%s\"",
+ ca->argv[2], text );
+ Debug( LDAP_DEBUG_ANY, "%s: %s\n", ca->log, ca->cr_msg );
+ goto done;
+ }
+
+ sat = source->ad_type;
+ aat = alias->ad_type;
+ if ( sat == aat ) {
+ snprintf( ca->cr_msg, sizeof(ca->cr_msg),
+ "cannot map attribute %s to itself",
+ source->ad_cname.bv_val );
+ Debug( LDAP_DEBUG_ANY, "%s: %s\n", ca->log, ca->cr_msg );
+ rc = LDAP_CONSTRAINT_VIOLATION;
+ goto done;
+ }
+
+ /* The types have to match */
+ if ( is_at_operational( sat ) != is_at_operational( aat ) ||
+ is_at_single_value( sat ) != is_at_single_value( aat ) ||
+ sat->sat_syntax != aat->sat_syntax ||
+ sat->sat_equality != aat->sat_equality ||
+ sat->sat_approx != aat->sat_approx ||
+ sat->sat_ordering != aat->sat_ordering ||
+ sat->sat_substr != aat->sat_substr ) {
+ snprintf( ca->cr_msg, sizeof(ca->cr_msg),
+ "attributes %s and %s syntax and/or "
+ "default matching rules don't match",
+ source->ad_cname.bv_val,
+ alias->ad_cname.bv_val );
+ Debug( LDAP_DEBUG_ANY, "%s: %s\n", ca->log, ca->cr_msg );
+ rc = LDAP_CONSTRAINT_VIOLATION;
+ goto done;
+ }
+
+ if ( !ov->mappings ) {
+ ov->mappings = ch_calloc( 2, sizeof(alias_mapping) );
+ ov->mappings[0].source = source;
+ ov->mappings[0].alias = alias;
+ } else {
+ int i;
+
+ for ( i = 0; ov->mappings[i].source; i++ ) {
+ if ( alias == ov->mappings[i].alias ) {
+ snprintf( ca->cr_msg, sizeof(ca->cr_msg),
+ "attribute %s already mapped from %s",
+ alias->ad_cname.bv_val,
+ ov->mappings[i].source->ad_cname.bv_val );
+ Debug( LDAP_DEBUG_ANY, "%s: %s\n", ca->log, ca->cr_msg );
+ rc = LDAP_CONSTRAINT_VIOLATION;
+ goto done;
+ }
+ if ( alias == ov->mappings[i].source ) {
+ snprintf( ca->cr_msg, sizeof(ca->cr_msg),
+ "cannot use %s as alias source, already mapped from %s",
+ source->ad_cname.bv_val,
+ ov->mappings[i].source->ad_cname.bv_val );
+ Debug( LDAP_DEBUG_ANY, "%s: %s\n", ca->log, ca->cr_msg );
+ rc = LDAP_CONSTRAINT_VIOLATION;
+ goto done;
+ }
+ if ( source == ov->mappings[i].alias ) {
+ snprintf( ca->cr_msg, sizeof(ca->cr_msg),
+ "cannot use %s as alias, it is aliased to %s",
+ alias->ad_cname.bv_val,
+ ov->mappings[i].alias->ad_cname.bv_val );
+ Debug( LDAP_DEBUG_ANY, "%s: %s\n", ca->log, ca->cr_msg );
+ rc = LDAP_CONSTRAINT_VIOLATION;
+ goto done;
+ }
+ }
+
+ if ( ca->valx < 0 || ca->valx > i )
+ ca->valx = i;
+
+ i++;
+ ov->mappings = ch_realloc( ov->mappings, (i + 1) * sizeof(alias_mapping) );
+ do {
+ ov->mappings[i] = ov->mappings[i-1];
+ } while ( --i > ca->valx );
+ ov->mappings[i].source = source;
+ ov->mappings[i].alias = alias;
+ }
+
+ rc = LDAP_SUCCESS;
+done:
+ ca->reply.err = rc;
+ return rc;
+}
+
+static slap_overinst alias;
+
+static int
+alias_db_init( BackendDB *be, ConfigReply *cr )
+{
+ slap_overinst *on = (slap_overinst *)be->bd_info;
+ alias_info *ov;
+
+ /* TODO: can this be global? */
+ if ( SLAP_ISGLOBALOVERLAY(be) ) {
+ Debug( LDAP_DEBUG_ANY, "alias overlay must be instantiated "
+ "within a database.\n" );
+ return 1;
+ }
+
+ ov = ch_calloc( 1, sizeof(alias_info) );
+ on->on_bi.bi_private = ov;
+
+ return LDAP_SUCCESS;
+}
+
+static int
+alias_db_destroy( BackendDB *be, ConfigReply *cr )
+{
+ slap_overinst *on = (slap_overinst *)be->bd_info;
+ alias_info *ov = on->on_bi.bi_private;
+
+ if ( ov && ov->mappings ) {
+ ch_free( ov->mappings );
+ }
+ ch_free( ov );
+
+ return LDAP_SUCCESS;
+}
+
+int
+alias_initialize()
+{
+ int rc;
+
+ alias.on_bi.bi_type = "alias";
+ alias.on_bi.bi_db_init = alias_db_init;
+ alias.on_bi.bi_db_destroy = alias_db_destroy;
+
+ alias.on_bi.bi_op_add = alias_op_add;
+ alias.on_bi.bi_op_compare = alias_op_compare;
+ alias.on_bi.bi_op_modify = alias_op_mod;
+ alias.on_bi.bi_op_modrdn = alias_op_modrdn;
+ alias.on_bi.bi_op_search = alias_op_search;
+
+ alias.on_bi.bi_cf_ocs = alias_ocs;
+
+ rc = config_register_schema( alias_cfg, alias_ocs );
+ if ( rc ) return rc;
+
+ return overlay_register( &alias );
+}
+
+#if SLAPD_OVER_ALIAS == SLAPD_MOD_DYNAMIC
+int
+init_module( int argc, char *argv[] )
+{
+ return alias_initialize();
+}
+#endif
+
+#endif /* SLAPD_OVER_ALIAS */
diff --git a/contrib/slapd-modules/alias/slapo-alias.5 b/contrib/slapd-modules/alias/slapo-alias.5
new file mode 100644
index 0000000..4f5fb29
--- /dev/null
+++ b/contrib/slapd-modules/alias/slapo-alias.5
@@ -0,0 +1,121 @@
+.TH SLAPO-ALIAS 5 "RELEASEDATE" "OpenLDAP"
+.\" Copyright 2023 Symas Corp. All Rights Reserved.
+.\" Copying restrictions apply. See LICENSE.
+.SH NAME
+slapo\-alias \- expose an attribute under a different name
+.SH SYNOPSIS
+olcOverlay=alias
+.SH DESCRIPTION
+The
+.B alias
+overlay to
+.BR slapd (8)
+allows migrations for existing attributes exposed through a name that is
+now deprecated where using
+.BR slapo-rwm (5)
+is not applicable. For this reason, the aliased attributes are not writable
+in any way. In particular:
+
+.RS
+.TP
+.B Search
+
+Instances of the aliased attribute in the
+.B Search
+request filter are replaced by the source attribute.
+
+If the attribute is requested, the values are copied from the source
+attribute, however unlike with
+.BR slapo-rwm (5),
+if the source attribute is also requested, both will be returned.
+.TP
+.B Compare
+The request is mapped to the source attribute before processing.
+.TP
+.B Add, Modify, ModRDN
+Requests affecting aliased attributes are rejected with a
+.B Constraint
+.BR Violation .
+.RE
+
+
+.SH CONFIGURATION LAYOUT
+
+The overlay has to be instantiated under a database adding an entry of
+.B olcOverlay=alias
+with objectClass of
+.BR olcAliasConfig.
+
+These are the available options:
+
+.RS
+.TP
+.B olcAliasMapping: <source-attribute> <aliased-attribute>
+Any time
+.B aliased-attribute
+is requested (explicitly or through
+.B * +
+shorthands), the values of
+.B source-attribute
+are returned. The attributes need to be compatible i.e. both have to be
+operational or neither should, same with the
+.B SINGLE-VALUE
+option, syntax or matching rules. The
+.BR slapd.conf (5)
+equivalent is
+.BR alias_attribute .
+It can be provided multiple times.
+.RE
+
+.SH EXAMPLE
+
+The following is an example of a configured overlay, substitute
+.B $DATABASE
+for the DN of the database it is attached to and
+.B {x}
+with the desired position of the overlay in the overlay stack.
+
+.nf
+dn: olcOverlay={x}alias,$DATABASE
+objectClass: olcAliasConfig
+olcOverlay: alias
+olcAliasMapping: source-attribute aliased-attribute
+.fi
+
+The
+.BR slapd.conf (5)
+equivalent of the above follows:
+
+.nf
+overlay alias
+
+alias_attribute source-attribute aliased-attribute
+.fi
+
+.SH NOTES
+When mapping an operational attribute, you might need to use
+.BR slapo-dsaschema (5)
+contrib module to provide its definition into the schema.
+
+.SH BUGS AND LIMITATIONS
+Setting ACLs that differ between the aliased and its source attribute is not
+supported, they have to match or risk information disclosure.
+
+It is also expected that the aliased attributes are never physically present in
+the database.
+
+.SH FILES
+.TP
+ETCDIR/slapd.conf
+default slapd configuration file
+.TP
+ETCDIR/slapd.d
+default slapd configuration directory
+.SH SEE ALSO
+.BR slapd-config (5),
+.BR slapd.conf (5),
+.BR slapd.overlays (5),
+.BR slapo-dsaschema (5),
+.BR slapd (8)
+.SH ACKNOWLEDGEMENTS
+This module was developed in 2023 by Ondřej Kuzník for Symas Corp.
diff --git a/contrib/slapd-modules/alias/tests/Rules.mk b/contrib/slapd-modules/alias/tests/Rules.mk
new file mode 100644
index 0000000..c25c1d2
--- /dev/null
+++ b/contrib/slapd-modules/alias/tests/Rules.mk
@@ -0,0 +1,23 @@
+sp := $(sp).x
+dirstack_$(sp) := $(d)
+d := $(dir)
+
+.PHONY: test
+
+CLEAN += clients servers tests/progs tests/schema tests/testdata tests/testrun
+
+test: all clients servers tests/progs
+
+test:
+ cd tests; \
+ SRCDIR=$(abspath $(LDAP_SRC)) \
+ LDAP_BUILD=$(abspath $(LDAP_BUILD)) \
+ TOPDIR=$(abspath $(SRCDIR)) \
+ LIBTOOL=$(abspath $(LIBTOOL)) \
+ $(abspath $(SRCDIR))/tests/run all
+
+servers clients tests/progs:
+ ln -s $(abspath $(LDAP_BUILD))/$@ $@
+
+d := $(dirstack_$(sp))
+sp := $(basename $(sp))
diff --git a/contrib/slapd-modules/alias/tests/data/alias.conf b/contrib/slapd-modules/alias/tests/data/alias.conf
new file mode 100644
index 0000000..5997666
--- /dev/null
+++ b/contrib/slapd-modules/alias/tests/data/alias.conf
@@ -0,0 +1,4 @@
+overlay alias
+
+alias_attribute pager mobile
+
diff --git a/contrib/slapd-modules/alias/tests/data/config.ldif b/contrib/slapd-modules/alias/tests/data/config.ldif
new file mode 100644
index 0000000..9c676a9
--- /dev/null
+++ b/contrib/slapd-modules/alias/tests/data/config.ldif
@@ -0,0 +1,5 @@
+dn: olcOverlay={0}alias,olcDatabase={1}@BACKEND@,cn=config
+changetype: add
+objectClass: olcOverlayConfig
+objectclass: olcAliasConfig
+olcAliasMapping: pager mobile
diff --git a/contrib/slapd-modules/alias/tests/data/test001-00a-invalid.ldif b/contrib/slapd-modules/alias/tests/data/test001-00a-invalid.ldif
new file mode 100644
index 0000000..f0eff6b
--- /dev/null
+++ b/contrib/slapd-modules/alias/tests/data/test001-00a-invalid.ldif
@@ -0,0 +1,4 @@
+dn: olcOverlay={0}alias,olcDatabase={1}@BACKEND@,cn=config
+changetype: modify
+add: olcAliasMapping
+olcAliasMapping: description invalidAttr
diff --git a/contrib/slapd-modules/alias/tests/data/test001-00b-invalid.ldif b/contrib/slapd-modules/alias/tests/data/test001-00b-invalid.ldif
new file mode 100644
index 0000000..f351ced
--- /dev/null
+++ b/contrib/slapd-modules/alias/tests/data/test001-00b-invalid.ldif
@@ -0,0 +1,4 @@
+dn: olcOverlay={0}alias,olcDatabase={1}@BACKEND@,cn=config
+changetype: modify
+add: olcAliasMapping
+olcAliasMapping: invalidAttr description
diff --git a/contrib/slapd-modules/alias/tests/data/test001-01a-same-alias.ldif b/contrib/slapd-modules/alias/tests/data/test001-01a-same-alias.ldif
new file mode 100644
index 0000000..db851ff
--- /dev/null
+++ b/contrib/slapd-modules/alias/tests/data/test001-01a-same-alias.ldif
@@ -0,0 +1,4 @@
+dn: olcOverlay={0}alias,olcDatabase={1}@BACKEND@,cn=config
+changetype: modify
+add: olcAliasMapping
+olcAliasMapping: fax mobile
diff --git a/contrib/slapd-modules/alias/tests/data/test001-01b-same-attr.ldif b/contrib/slapd-modules/alias/tests/data/test001-01b-same-attr.ldif
new file mode 100644
index 0000000..07275be
--- /dev/null
+++ b/contrib/slapd-modules/alias/tests/data/test001-01b-same-attr.ldif
@@ -0,0 +1,4 @@
+dn: olcOverlay={0}alias,olcDatabase={1}@BACKEND@,cn=config
+changetype: modify
+add: olcAliasMapping
+olcAliasMapping: c countryname
diff --git a/contrib/slapd-modules/alias/tests/data/test001-01c-chained.ldif b/contrib/slapd-modules/alias/tests/data/test001-01c-chained.ldif
new file mode 100644
index 0000000..92d466d
--- /dev/null
+++ b/contrib/slapd-modules/alias/tests/data/test001-01c-chained.ldif
@@ -0,0 +1,4 @@
+dn: olcOverlay={0}alias,olcDatabase={1}@BACKEND@,cn=config
+changetype: modify
+add: olcAliasMapping
+olcAliasMapping: mobile fax
diff --git a/contrib/slapd-modules/alias/tests/data/test001-01d-chained.ldif b/contrib/slapd-modules/alias/tests/data/test001-01d-chained.ldif
new file mode 100644
index 0000000..efeaac0
--- /dev/null
+++ b/contrib/slapd-modules/alias/tests/data/test001-01d-chained.ldif
@@ -0,0 +1,4 @@
+dn: olcOverlay={0}alias,olcDatabase={1}@BACKEND@,cn=config
+changetype: modify
+add: olcAliasMapping
+olcAliasMapping: fax pager
diff --git a/contrib/slapd-modules/alias/tests/data/test001-02a-operational.ldif b/contrib/slapd-modules/alias/tests/data/test001-02a-operational.ldif
new file mode 100644
index 0000000..1c10aa6
--- /dev/null
+++ b/contrib/slapd-modules/alias/tests/data/test001-02a-operational.ldif
@@ -0,0 +1,4 @@
+dn: olcOverlay={0}alias,olcDatabase={1}@BACKEND@,cn=config
+changetype: modify
+add: olcAliasMapping
+olcAliasMapping: seeAlso entryDN
diff --git a/contrib/slapd-modules/alias/tests/data/test001-02b-single.ldif b/contrib/slapd-modules/alias/tests/data/test001-02b-single.ldif
new file mode 100644
index 0000000..fe464e7
--- /dev/null
+++ b/contrib/slapd-modules/alias/tests/data/test001-02b-single.ldif
@@ -0,0 +1,4 @@
+dn: olcOverlay={0}alias,olcDatabase={1}@BACKEND@,cn=config
+changetype: modify
+add: olcAliasMapping
+olcAliasMapping: displayName employeeType
diff --git a/contrib/slapd-modules/alias/tests/data/test001-02c-syntax.ldif b/contrib/slapd-modules/alias/tests/data/test001-02c-syntax.ldif
new file mode 100644
index 0000000..8c24f5d
--- /dev/null
+++ b/contrib/slapd-modules/alias/tests/data/test001-02c-syntax.ldif
@@ -0,0 +1,4 @@
+dn: olcOverlay={0}alias,olcDatabase={1}@BACKEND@,cn=config
+changetype: modify
+add: olcAliasMapping
+olcAliasMapping: dc description
diff --git a/contrib/slapd-modules/alias/tests/data/test001-02d-matching.ldif b/contrib/slapd-modules/alias/tests/data/test001-02d-matching.ldif
new file mode 100644
index 0000000..7f80402
--- /dev/null
+++ b/contrib/slapd-modules/alias/tests/data/test001-02d-matching.ldif
@@ -0,0 +1,4 @@
+dn: olcOverlay={0}alias,olcDatabase={1}@BACKEND@,cn=config
+changetype: modify
+add: olcAliasMapping
+olcAliasMapping: memberUid mail
diff --git a/contrib/slapd-modules/alias/tests/data/test001-02e-no-ordering.ldif b/contrib/slapd-modules/alias/tests/data/test001-02e-no-ordering.ldif
new file mode 100644
index 0000000..ce2a7ae
--- /dev/null
+++ b/contrib/slapd-modules/alias/tests/data/test001-02e-no-ordering.ldif
@@ -0,0 +1,4 @@
+dn: olcOverlay={0}alias,olcDatabase={1}@BACKEND@,cn=config
+changetype: modify
+add: olcAliasMapping
+olcAliasMapping: gidNumber ipServicePort
diff --git a/contrib/slapd-modules/alias/tests/data/test002-add-rdn.ldif b/contrib/slapd-modules/alias/tests/data/test002-add-rdn.ldif
new file mode 100644
index 0000000..23e17c0
--- /dev/null
+++ b/contrib/slapd-modules/alias/tests/data/test002-add-rdn.ldif
@@ -0,0 +1,5 @@
+dn: mobile=\+1 313 555 4474,dc=example,dc=com
+changetype: add
+objectClass: OpenLDAPperson
+cn: Just a phone
+sn: Mobile
diff --git a/contrib/slapd-modules/alias/tests/data/test002-add.ldif b/contrib/slapd-modules/alias/tests/data/test002-add.ldif
new file mode 100644
index 0000000..330bd9a
--- /dev/null
+++ b/contrib/slapd-modules/alias/tests/data/test002-add.ldif
@@ -0,0 +1,18 @@
+dn: cn=Gern Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com
+changetype: add
+objectclass: testPerson
+cn: Gern Jensen
+sn: Jensen
+uid: gjensen
+title: Chief Investigator, ITD
+postaladdress: ITD $ 535 W. William St $ Anytown, MI 48103
+seealso: cn=All Staff,ou=Groups,dc=example,dc=com
+drink: Coffee
+homepostaladdress: 844 Brown St. Apt. 4 $ Anytown, MI 48104
+description: Very odd
+facsimiletelephonenumber: +1 313 555 7557
+telephonenumber: +1 313 555 8343
+mail: gjensen@mailgw.example.com
+homephone: +1 313 555 8844
+testTime: 20050304001801.234Z
+mobile: +1 313 555 8866
diff --git a/contrib/slapd-modules/alias/tests/data/test002-delete.ldif b/contrib/slapd-modules/alias/tests/data/test002-delete.ldif
new file mode 100644
index 0000000..e6932e4
--- /dev/null
+++ b/contrib/slapd-modules/alias/tests/data/test002-delete.ldif
@@ -0,0 +1,3 @@
+dn: cn=Jane Doe,ou=Alumni Association,ou=People,dc=example,dc=com
+changetype: modify
+delete: mobile
diff --git a/contrib/slapd-modules/alias/tests/data/test002-modify.ldif b/contrib/slapd-modules/alias/tests/data/test002-modify.ldif
new file mode 100644
index 0000000..730dcbb
--- /dev/null
+++ b/contrib/slapd-modules/alias/tests/data/test002-modify.ldif
@@ -0,0 +1,4 @@
+dn: cn=Dorothy Stevens,ou=Alumni Association,ou=People,dc=example,dc=com
+changetype: modify
+add: mobile
+mobile: +1 313 555 3665
diff --git a/contrib/slapd-modules/alias/tests/data/test002-modrdn.ldif b/contrib/slapd-modules/alias/tests/data/test002-modrdn.ldif
new file mode 100644
index 0000000..1ad729b
--- /dev/null
+++ b/contrib/slapd-modules/alias/tests/data/test002-modrdn.ldif
@@ -0,0 +1,5 @@
+dn: cn=James A Jones 2,ou=Information Technology Division,ou=People,dc=example
+ ,dc=com
+changetype: modrdn
+newrdn: mobile=\+1 313 555 4474
+deleteoldrdn: 0
diff --git a/contrib/slapd-modules/alias/tests/data/test003-config.ldif b/contrib/slapd-modules/alias/tests/data/test003-config.ldif
new file mode 100644
index 0000000..322fcd5
--- /dev/null
+++ b/contrib/slapd-modules/alias/tests/data/test003-config.ldif
@@ -0,0 +1,4 @@
+dn: olcOverlay={0}alias,olcDatabase={1}@BACKEND@,cn=config
+changetype: modify
+add: olcAliasMapping
+olcAliasMapping: title employeeType
diff --git a/contrib/slapd-modules/alias/tests/data/test003-out.ldif b/contrib/slapd-modules/alias/tests/data/test003-out.ldif
new file mode 100644
index 0000000..0aa02e6
--- /dev/null
+++ b/contrib/slapd-modules/alias/tests/data/test003-out.ldif
@@ -0,0 +1,66 @@
+# Listing aliased attribute...
+dn: cn=Barbara Jensen,ou=Information Technology Division,ou=People,dc=example,
+ dc=com
+mobile: +1 313 555 3233
+
+
+# A search when aliased attribute is not requested...
+dn: cn=Barbara Jensen,ou=Information Technology Division,ou=People,dc=example,
+ dc=com
+pager: +1 313 555 3233
+
+
+# A search when both are requested (explicitly)...
+dn: cn=Barbara Jensen,ou=Information Technology Division,ou=People,dc=example,
+ dc=com
+pager: +1 313 555 3233
+mobile: +1 313 555 3233
+
+
+# A search when both are requested (implicitly)...
+dn: cn=Barbara Jensen,ou=Information Technology Division,ou=People,dc=example,
+ dc=com
+objectClass: OpenLDAPperson
+cn: Barbara Jensen
+cn: Babs Jensen
+sn:: IEplbnNlbiA=
+uid: bjensen
+title: Mythical Manager, Research Systems
+postalAddress: ITD Prod Dev & Deployment $ 535 W. William St. Room 4212 $ Anyt
+ own, MI 48103-4943
+seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com
+userPassword:: YmplbnNlbg==
+mail: bjensen@mailgw.example.com
+homePostalAddress: 123 Wesley $ Anytown, MI 48103
+description: Mythical manager of the rsdd unix project
+drink: water
+homePhone: +1 313 555 2333
+pager: +1 313 555 3233
+facsimileTelephoneNumber: +1 313 555 2274
+telephoneNumber: +1 313 555 9022
+mobile: +1 313 555 3233
+
+
+# Testing searches filtering on aliased attributes...
+dn: cn=Barbara Jensen,ou=Information Technology Division,ou=People,dc=example,
+ dc=com
+mobile: +1 313 555 3233
+
+dn: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc
+ =com
+mobile: +1 313 555 4474
+
+dn: cn=Jane Doe,ou=Alumni Association,ou=People,dc=example,dc=com
+mobile: +1 313 555 1220
+
+
+# Testing search with new attributes...
+dn: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc
+ =com
+employeeType: Director, Embedded Systems
+mobile: +1 313 555 4474
+
+dn: cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com
+employeeType: Director, UM Alumni Association
+mobile: +1 313 555 7671
+
diff --git a/contrib/slapd-modules/alias/tests/run b/contrib/slapd-modules/alias/tests/run
new file mode 100755
index 0000000..239bff7
--- /dev/null
+++ b/contrib/slapd-modules/alias/tests/run
@@ -0,0 +1,17 @@
+#!/bin/sh
+## $OpenLDAP$
+## This work is part of OpenLDAP Software <http://www.openldap.org/>.
+##
+## Copyright 1998-2022 The OpenLDAP Foundation.
+## All rights reserved.
+##
+## Redistribution and use in source and binary forms, with or without
+## modification, are permitted only as authorized by the OpenLDAP
+## Public License.
+##
+## A copy of this license is available in the file LICENSE in the
+## top-level directory of the distribution or, alternatively, at
+## <http://www.OpenLDAP.org/license.html>.
+
+TOPSRCDIR="$SRCDIR" OBJDIR="${LDAP_BUILD}" SRCDIR="${SRCDIR}/tests" DEFSDIR="${SRCDIR}/scripts" SCRIPTDIR="${TOPDIR}/tests/scripts" "${LDAP_BUILD}/tests/run" $*
+
diff --git a/contrib/slapd-modules/alias/tests/scripts/all b/contrib/slapd-modules/alias/tests/scripts/all
new file mode 100755
index 0000000..5af7083
--- /dev/null
+++ b/contrib/slapd-modules/alias/tests/scripts/all
@@ -0,0 +1,93 @@
+#! /bin/sh
+# $OpenLDAP$
+## This work is part of OpenLDAP Software <http://www.openldap.org/>.
+##
+## Copyright 1998-2022 The OpenLDAP Foundation.
+## All rights reserved.
+##
+## Redistribution and use in source and binary forms, with or without
+## modification, are permitted only as authorized by the OpenLDAP
+## Public License.
+##
+## A copy of this license is available in the file LICENSE in the
+## top-level directory of the distribution or, alternatively, at
+## <http://www.OpenLDAP.org/license.html>.
+
+. $SRCDIR/scripts/defines.sh
+
+TB="" TN=""
+if test -t 1 ; then
+ TB=`$SHTOOL echo -e "%B" 2>/dev/null`
+ TN=`$SHTOOL echo -e "%b" 2>/dev/null`
+fi
+
+FAILCOUNT=0
+SKIPCOUNT=0
+SLEEPTIME=10
+
+echo ">>>>> Executing all LDAP tests for $BACKEND"
+
+if [ -n "$NOEXIT" ]; then
+ echo "Result Test" > $TESTWD/results
+fi
+
+for CMD in ${SCRIPTDIR}/test*; do
+ case "$CMD" in
+ *~) continue;;
+ *.bak) continue;;
+ *.orig) continue;;
+ *.sav) continue;;
+ *.py) continue;;
+ *) test -f "$CMD" || continue;;
+ esac
+
+ # remove cruft from prior test
+ if test $PRESERVE = yes ; then
+ /bin/rm -rf $TESTDIR/db.*
+ else
+ /bin/rm -rf $TESTDIR
+ fi
+
+ BCMD=`basename $CMD`
+ if [ -x "$CMD" ]; then
+ echo ">>>>> Starting ${TB}$BCMD${TN} for $BACKEND..."
+ $CMD
+ RC=$?
+ if test $RC -eq 0 ; then
+ echo ">>>>> $BCMD completed ${TB}OK${TN} for $BACKEND."
+ else
+ echo ">>>>> $BCMD ${TB}failed${TN} for $BACKEND"
+ FAILCOUNT=`expr $FAILCOUNT + 1`
+
+ if [ -n "$NOEXIT" ]; then
+ echo "Continuing."
+ else
+ echo "(exit $RC)"
+ exit $RC
+ fi
+ fi
+ else
+ echo ">>>>> Skipping ${TB}$BCMD${TN} for $BACKEND."
+ SKIPCOUNT=`expr $SKIPCOUNT + 1`
+ RC="-"
+ fi
+
+ if [ -n "$NOEXIT" ]; then
+ echo "$RC $BCMD" >> $TESTWD/results
+ fi
+
+# echo ">>>>> waiting $SLEEPTIME seconds for things to exit"
+# sleep $SLEEPTIME
+ echo ""
+done
+
+if [ -n "$NOEXIT" ]; then
+ if [ "$FAILCOUNT" -gt 0 ]; then
+ cat $TESTWD/results
+ echo "$FAILCOUNT tests for $BACKEND ${TB}failed${TN}. Please review the test log."
+ else
+ echo "All executed tests for $BACKEND ${TB}succeeded${TN}."
+ fi
+fi
+
+echo "$SKIPCOUNT tests for $BACKEND were ${TB}skipped${TN}."
diff --git a/contrib/slapd-modules/alias/tests/scripts/common.sh b/contrib/slapd-modules/alias/tests/scripts/common.sh
new file mode 100755
index 0000000..a2e2922
--- /dev/null
+++ b/contrib/slapd-modules/alias/tests/scripts/common.sh
@@ -0,0 +1,105 @@
+#! /bin/sh
+## $OpenLDAP$
+## This work is part of OpenLDAP Software <http://www.openldap.org/>.
+##
+## Copyright 2016-2023 The OpenLDAP Foundation.
+## All rights reserved.
+##
+## Redistribution and use in source and binary forms, with or without
+## modification, are permitted only as authorized by the OpenLDAP
+## Public License.
+##
+## A copy of this license is available in the file LICENSE in the
+## top-level directory of the distribution or, alternatively, at
+## <http://www.OpenLDAP.org/license.html>.
+##
+## ACKNOWLEDGEMENTS:
+## This module was written in 2022 by Ondřej Kuzník for Symas Corp.
+
+OVERLAY_CONFIG=${OVERLAY_CONFIG-data/config.ldif}
+
+mkdir -p $TESTDIR $DBDIR1
+
+echo "Running slapadd to build slapd database..."
+. $CONFFILTER $BACKEND $MONITORDB < $CONF > $ADDCONF
+$SLAPADD -f $ADDCONF -l $LDIF
+RC=$?
+if test $RC != 0 ; then
+ echo "slapadd failed ($RC)!"
+ exit $RC
+fi
+
+mkdir $TESTDIR/confdir
+. $CONFFILTER $BACKEND $MONITORDB < $CONF > $CONF1
+
+$SLAPPASSWD -g -n >$CONFIGPWF
+echo "database config" >>$CONF1
+echo "rootpw `$SLAPPASSWD -T $CONFIGPWF`" >>$CONF1
+
+echo "Starting slapd on TCP/IP port $PORT1 for configuration..."
+$SLAPD -f $CONF1 -F $TESTDIR/confdir -h $URI1 -d $LVL > $LOG1 2>&1 &
+PID=$!
+if test $WAIT != 0 ; then
+ echo PID $PID
+ read foo
+fi
+KILLPIDS="$PID"
+
+sleep $SLEEP0
+
+for i in 0 1 2 3 4 5; do
+ $LDAPSEARCH -s base -b "$MONITOR" -H $URI1 \
+ 'objectclass=*' > /dev/null 2>&1
+ RC=$?
+ if test $RC = 0 ; then
+ break
+ fi
+ echo "Waiting ${SLEEP1} seconds for slapd to start..."
+ sleep ${SLEEP1}
+done
+
+$LDAPSEARCH -D cn=config -H $URI1 -y $CONFIGPWF \
+ -s base -b 'cn=module{0},cn=config' 1.1 >$TESTOUT 2>&1
+RC=$?
+case $RC in
+0)
+ $LDAPMODIFY -v -D cn=config -H $URI1 -y $CONFIGPWF \
+ >> $TESTOUT 2>&1 <<EOMOD
+dn: cn=module{0},cn=config
+changetype: modify
+add: olcModuleLoad
+olcModuleLoad: `pwd`/../alias.la
+EOMOD
+ ;;
+32)
+ $LDAPMODIFY -v -D cn=config -H $URI1 -y $CONFIGPWF \
+ >> $TESTOUT 2>&1 <<EOMOD
+dn: cn=module,cn=config
+changetype: add
+objectClass: olcModuleList
+olcModuleLoad: `pwd`/../alias.la
+EOMOD
+ ;;
+*)
+ echo "Failed testing for module load entry"
+ exit $RC;
+ ;;
+esac
+
+RC=$?
+if test $RC != 0 ; then
+ echo "ldapmodify failed ($RC)!"
+ test $KILLSERVERS != no && kill -HUP $KILLPIDS
+ exit $RC
+fi
+
+echo "Loading test alias configuration..."
+. $CONFFILTER $BACKEND $MONITORDB < $OVERLAY_CONFIG | \
+$LDAPMODIFY -v -D cn=config -H $URI1 -y $CONFIGPWF \
+ > $TESTOUT 2>&1
+RC=$?
+if test $RC != 0 ; then
+ echo "ldapmodify failed ($RC)!"
+ test $KILLSERVERS != no && kill -HUP $KILLPIDS
+ exit $RC
+fi
diff --git a/contrib/slapd-modules/alias/tests/scripts/test001-config b/contrib/slapd-modules/alias/tests/scripts/test001-config
new file mode 100755
index 0000000..fa68e67
--- /dev/null
+++ b/contrib/slapd-modules/alias/tests/scripts/test001-config
@@ -0,0 +1,248 @@
+#! /bin/sh
+## $OpenLDAP$
+## This work is part of OpenLDAP Software <http://www.openldap.org/>.
+##
+## Copyright 2016-2023 The OpenLDAP Foundation.
+## All rights reserved.
+##
+## Redistribution and use in source and binary forms, with or without
+## modification, are permitted only as authorized by the OpenLDAP
+## Public License.
+##
+## A copy of this license is available in the file LICENSE in the
+## top-level directory of the distribution or, alternatively, at
+## <http://www.OpenLDAP.org/license.html>.
+##
+## ACKNOWLEDGEMENTS:
+## This module was written in 2023 by Ondřej Kuzník for Symas Corp.
+
+echo "running defines.sh"
+. $SRCDIR/scripts/defines.sh
+
+. ${SCRIPTDIR}/common.sh
+
+echo "Applying invalid changes to config (should fail)..."
+for CHANGE in data/test001-*.ldif; do
+ echo "... $CHANGE"
+ . $CONFFILTER $BACKEND $MONITORDB < $CHANGE | \
+ $LDAPMODIFY -D cn=config -H $URI1 -y $CONFIGPWF \
+ >> $TESTOUT 2>&1
+ RC=$?
+ case $RC in
+ 0)
+ echo "ldapmodify should have failed ($RC)!"
+ test $KILLSERVERS != no && kill -HUP $KILLPIDS
+ exit 1
+ ;;
+ 17|19)
+ echo "ldapmodify failed ($RC)"
+ ;;
+ *)
+ echo "ldapmodify failed ($RC)!"
+ test $KILLSERVERS != no && kill -HUP $KILLPIDS
+ exit $RC
+ ;;
+ esac
+done
+
+# We run this search after the changes above and before restart so we can also
+# check the reconfiguration attempts actually had no side effects
+echo "Saving search output before server restart..."
+echo "# search output from dynamically configured server..." >> $SERVER6OUT
+$LDAPSEARCH -b "$BASEDN" -H $URI1 \
+ >> $SERVER6OUT 2>&1
+RC=$?
+if test $RC != 0 ; then
+ echo "ldapsearch failed ($RC)!"
+ test $KILLSERVERS != no && kill -HUP $KILLPIDS
+ exit $RC
+fi
+
+echo "Stopping slapd on TCP/IP port $PORT1..."
+kill -HUP $KILLPIDS
+KILLPIDS=""
+sleep $SLEEP0
+echo "Starting slapd on TCP/IP port $PORT1..."
+$SLAPD -F $TESTDIR/confdir -h $URI1 -d $LVL >> $LOG1 2>&1 &
+PID=$!
+if test $WAIT != 0 ; then
+ echo PID $PID
+ read foo
+fi
+KILLPIDS="$PID"
+
+sleep $SLEEP0
+
+for i in 0 1 2 3 4 5; do
+ $LDAPSEARCH -s base -b "$MONITOR" -H $URI1 \
+ 'objectclass=*' > /dev/null 2>&1
+ RC=$?
+ if test $RC = 0 ; then
+ break
+ fi
+ echo "Waiting ${SLEEP1} seconds for slapd to start..."
+ sleep ${SLEEP1}
+done
+
+echo "Testing slapd.conf support..."
+mkdir $TESTDIR/conftest $DBDIR2
+. $CONFFILTER $BACKEND $MONITORDB < $CONFTWO \
+ | sed -e '/^argsfile.*/a\
+moduleload ../alias.la' \
+ -e '/database.*monitor/i\
+include data/alias.conf' \
+ > $CONF2
+echo "database config" >>$CONF2
+echo "rootpw `$SLAPPASSWD -T $CONFIGPWF`" >>$CONF2
+
+$SLAPADD -f $CONF2 -l $LDIFORDERED
+RC=$?
+if test $RC != 0 ; then
+ echo "slapadd failed ($RC)!"
+ test $KILLSERVERS != no && kill -HUP $KILLPIDS
+ exit $RC
+fi
+
+echo "Starting slapd on TCP/IP port $PORT2..."
+$SLAPD -f $CONF2 -h $URI2 -d $LVL >> $LOG2 2>&1 &
+PID=$!
+if test $WAIT != 0 ; then
+ echo PID $PID
+ read foo
+fi
+
+sleep $SLEEP0
+
+for i in 0 1 2 3 4 5; do
+ $LDAPSEARCH -s base -b "$MONITOR" -H $URI2 \
+ 'objectclass=*' > /dev/null 2>&1
+ RC=$?
+ if test $RC = 0 ; then
+ break
+ fi
+ echo "Waiting ${SLEEP1} seconds for slapd to start..."
+ sleep ${SLEEP1}
+done
+
+echo "# search output from server running from slapd.conf..." >> $SERVER2OUT
+$LDAPSEARCH -b "$BASEDN" -H $URI2 \
+ >> $SERVER2OUT 2>&1
+RC=$?
+if test $RC != 0 ; then
+ echo "ldapsearch failed ($RC)!"
+ test $KILLSERVERS != no && kill -HUP $KILLPIDS
+ exit $RC
+fi
+
+echo "Stopping slapd on TCP/IP port $PORT2..."
+kill -HUP $PID
+
+$SLAPD -Tt -f $CONF2 -F $TESTDIR/conftest -d $LVL >> $LOG3 2>&1
+
+echo "Starting slapd on TCP/IP port $PORT2..."
+$SLAPD -F $TESTDIR/conftest -h $URI2 -d $LVL >> $LOG3 2>&1 &
+PID=$!
+if test $WAIT != 0 ; then
+ echo PID $PID
+ read foo
+fi
+KILLPIDS="$KILLPIDS $PID"
+
+sleep $SLEEP0
+
+for i in 0 1 2 3 4 5; do
+ $LDAPSEARCH -s base -b "$MONITOR" -H $URI2 \
+ 'objectclass=*' > /dev/null 2>&1
+ RC=$?
+ if test $RC = 0 ; then
+ break
+ fi
+ echo "Waiting ${SLEEP1} seconds for slapd to start..."
+ sleep ${SLEEP1}
+done
+
+echo "Gathering overlay configuration from both servers..."
+echo "# overlay configuration from dynamically configured server..." >> $SERVER1OUT
+$LDAPSEARCH -D cn=config -H $URI1 -y $CONFIGPWF \
+ -b "olcOverlay={0}alias,olcDatabase={1}$BACKEND,cn=config" \
+ | sed -e "s/ {[0-9]*}/ /" -e "s/={[0-9]*}/=/g" \
+ >> $SERVER1OUT 2>&1
+RC=$?
+if test $RC != 0 ; then
+ echo "ldapsearch failed ($RC)!"
+ test $KILLSERVERS != no && kill -HUP $KILLPIDS
+ exit $RC
+fi
+
+echo "# overlay configuration from server configured from slapd.conf..." >> $SERVER3OUT
+$LDAPSEARCH -D cn=config -H $URI2 -y $CONFIGPWF \
+ -b "olcOverlay={0}alias,olcDatabase={1}$BACKEND,cn=config" \
+ | sed -e "s/ {[0-9]*}/ /" -e "s/={[0-9]*}/=/g" \
+ >> $SERVER3OUT 2>&1
+RC=$?
+if test $RC != 0 ; then
+ echo "ldapsearch failed ($RC)!"
+ test $KILLSERVERS != no && kill -HUP $KILLPIDS
+ exit $RC
+fi
+
+# We've already filtered out the ordering markers, now sort the entries
+echo "Filtering ldapsearch results..."
+$LDIFFILTER -s e < $SERVER3OUT > $SERVER3FLT
+echo "Filtering expected entries..."
+$LDIFFILTER -s e < $SERVER1OUT > $SERVER1FLT
+echo "Comparing filter output..."
+$CMP $SERVER3FLT $SERVER1FLT > $CMPOUT
+
+if test $? != 0 ; then
+ echo "Comparison failed"
+ test $KILLSERVERS != no && kill -HUP $KILLPIDS
+ exit 1
+fi
+
+rm $SERVER1OUT $SERVER3OUT
+
+echo "Comparing search output on both servers..."
+echo "# search output from dynamically configured server..." >> $SERVER1OUT
+$LDAPSEARCH -b "$BASEDN" -H $URI1 \
+ >> $SERVER1OUT 2>&1
+RC=$?
+if test $RC != 0 ; then
+ echo "ldapsearch failed ($RC)!"
+ test $KILLSERVERS != no && kill -HUP $KILLPIDS
+ exit $RC
+fi
+
+echo "# search output from server configured from slapd.conf..." >> $SERVER3OUT
+$LDAPSEARCH -b "$BASEDN" -H $URI2 \
+ >> $SERVER3OUT 2>&1
+RC=$?
+if test $RC != 0 ; then
+ echo "ldapsearch failed ($RC)!"
+ test $KILLSERVERS != no && kill -HUP $KILLPIDS
+ exit $RC
+fi
+
+test $KILLSERVERS != no && kill -HUP $KILLPIDS
+
+echo "Filtering ldapsearch results..."
+$LDIFFILTER -s e < $SERVER1OUT > $SERVER1FLT
+$LDIFFILTER -s e < $SERVER2OUT > $SERVER2FLT
+$LDIFFILTER -s e < $SERVER3OUT > $SERVER3FLT
+echo "Filtering expected entries..."
+$LDIFFILTER -s e < $SERVER6OUT > $SERVER6FLT
+echo "Comparing filter output..."
+$CMP $SERVER6FLT $SERVER1FLT > $CMPOUT && \
+$CMP $SERVER6FLT $SERVER2FLT > $CMPOUT && \
+$CMP $SERVER6FLT $SERVER3FLT > $CMPOUT
+
+if test $? != 0 ; then
+ echo "Comparison failed"
+ exit 1
+fi
+
+echo ">>>>> Test succeeded"
+
+test $KILLSERVERS != no && wait
+
+exit 0
diff --git a/contrib/slapd-modules/alias/tests/scripts/test002-add-delete b/contrib/slapd-modules/alias/tests/scripts/test002-add-delete
new file mode 100755
index 0000000..c080859
--- /dev/null
+++ b/contrib/slapd-modules/alias/tests/scripts/test002-add-delete
@@ -0,0 +1,76 @@
+#! /bin/sh
+## $OpenLDAP$
+## This work is part of OpenLDAP Software <http://www.openldap.org/>.
+##
+## Copyright 2016-2023 The OpenLDAP Foundation.
+## All rights reserved.
+##
+## Redistribution and use in source and binary forms, with or without
+## modification, are permitted only as authorized by the OpenLDAP
+## Public License.
+##
+## A copy of this license is available in the file LICENSE in the
+## top-level directory of the distribution or, alternatively, at
+## <http://www.OpenLDAP.org/license.html>.
+##
+## ACKNOWLEDGEMENTS:
+## This module was written in 2023 by Ondřej Kuzník for Symas Corp.
+
+echo "running defines.sh"
+. $SRCDIR/scripts/defines.sh
+
+. ${SCRIPTDIR}/common.sh
+
+echo "Applying changes affecting aliased attribute (should fail)..."
+for CHANGE in data/test002-*.ldif; do
+ echo "... $CHANGE"
+ $LDAPMODIFY -D $MANAGERDN -H $URI1 -w $PASSWD \
+ -f $CHANGE >> $TESTOUT 2>&1
+ RC=$?
+ case $RC in
+ 0)
+ echo "ldapmodify should have failed ($RC)!"
+ test $KILLSERVERS != no && kill -HUP $KILLPIDS
+ exit 1
+ ;;
+ 19)
+ echo "ldapmodify failed ($RC)"
+ ;;
+ *)
+ echo "ldapmodify failed ($RC)!"
+ test $KILLSERVERS != no && kill -HUP $KILLPIDS
+ exit $RC
+ ;;
+ esac
+done
+
+echo "Saving search output..."
+# We're just making sure no modifications made it to the DB, bypass
+# the overlay to be able to compare with ldif used to populate it.
+$LDAPSEARCH -M -b "$BASEDN" -H $URI1 >> $SEARCHOUT 2>&1
+RC=$?
+if test $RC != 0 ; then
+ echo "ldapsearch failed ($RC)!"
+ test $KILLSERVERS != no && kill -HUP $KILLPIDS
+ exit $RC
+fi
+
+test $KILLSERVERS != no && kill -HUP $KILLPIDS
+
+echo "Filtering ldapsearch results..."
+$LDIFFILTER -s e < $SEARCHOUT > $SEARCHFLT
+echo "Filtering expected entries..."
+$LDIFFILTER -s e < $LDIF > $LDIFFLT
+echo "Comparing filter output..."
+$CMP $SEARCHFLT $LDIFFLT > $CMPOUT
+
+if test $? != 0 ; then
+ echo "Comparison failed"
+ exit 1
+fi
+
+echo ">>>>> Test succeeded"
+
+test $KILLSERVERS != no && wait
+
+exit 0
diff --git a/contrib/slapd-modules/alias/tests/scripts/test003-search b/contrib/slapd-modules/alias/tests/scripts/test003-search
new file mode 100755
index 0000000..467ec9f
--- /dev/null
+++ b/contrib/slapd-modules/alias/tests/scripts/test003-search
@@ -0,0 +1,151 @@
+#! /bin/sh
+## $OpenLDAP$
+## This work is part of OpenLDAP Software <http://www.openldap.org/>.
+##
+## Copyright 2016-2022 The OpenLDAP Foundation.
+## All rights reserved.
+##
+## Redistribution and use in source and binary forms, with or without
+## modification, are permitted only as authorized by the OpenLDAP
+## Public License.
+##
+## A copy of this license is available in the file LICENSE in the
+## top-level directory of the distribution or, alternatively, at
+## <http://www.OpenLDAP.org/license.html>.
+##
+## ACKNOWLEDGEMENTS:
+## This module was written in 2016 by Ondřej Kuzník for Symas Corp.
+
+echo "running defines.sh"
+. $SRCDIR/scripts/defines.sh
+
+. ${SCRIPTDIR}/common.sh
+
+echo "Comparing aliased attribute..."
+$LDAPCOMPARE -H $URI1 \
+ "cn=Mark Elliot,ou=Alumni Association,ou=People,$BASEDN" \
+ "mobile:+1 313 555 7671" >> $TESTOUT 2>&1
+RC=$?
+if test $RC != 6 && test $RC,$BACKEND != 5,null ; then
+ echo "ldapcompare failed ($RC)!"
+ test $KILLSERVERS != no && kill -HUP $KILLPIDS
+ exit 1
+fi
+
+$LDAPCOMPARE -H $URI1 \
+ "cn=Mark Elliot,ou=Alumni Association,ou=People,$BASEDN" \
+ "mobile:+1 313 555 4177" >> $TESTOUT 2>&1
+RC=$?
+if test $RC != 5 ; then
+ echo "ldapcompare should have failed ($RC)!"
+ test $KILLSERVERS != no && kill -HUP $KILLPIDS
+ exit 1
+fi
+
+echo "Listing alias attribute specifically..."
+echo "# Listing aliased attribute..." >> $SEARCHOUT
+$LDAPSEARCH -b "$BASEDN" -H $URI1 "uid=bjensen" mobile \
+ >> $SEARCHOUT 2>&1
+RC=$?
+if test $RC != 0 ; then
+ echo "ldapsearch failed ($RC)!"
+ test $KILLSERVERS != no && kill -HUP $KILLPIDS
+ exit $RC
+fi
+
+echo "Not asking for alias attribute..."
+echo >> $SEARCHOUT
+echo "# A search when aliased attribute is not requested..." >> $SEARCHOUT
+$LDAPSEARCH -b "$BASEDN" -H $URI1 "uid=bjensen" pager \
+ >> $SEARCHOUT 2>&1
+RC=$?
+if test $RC != 0 ; then
+ echo "ldapsearch failed ($RC)!"
+ test $KILLSERVERS != no && kill -HUP $KILLPIDS
+ exit $RC
+fi
+
+echo "Retrieving both the aliased attribute and the source..."
+echo >> $SEARCHOUT
+echo "# A search when both are requested (explicitly)..." >> $SEARCHOUT
+$LDAPSEARCH -b "$BASEDN" -H $URI1 "uid=bjensen" mobile pager \
+ >> $SEARCHOUT 2>&1
+RC=$?
+if test $RC != 0 ; then
+ echo "ldapsearch failed ($RC)!"
+ test $KILLSERVERS != no && kill -HUP $KILLPIDS
+ exit $RC
+fi
+
+echo "Retrieving both the aliased attribute and the source..."
+echo >> $SEARCHOUT
+echo "# A search when both are requested (implicitly)..." >> $SEARCHOUT
+$LDAPSEARCH -b "$BASEDN" -H $URI1 "uid=bjensen" \
+ >> $SEARCHOUT 2>&1
+RC=$?
+if test $RC != 0 ; then
+ echo "ldapsearch failed ($RC)!"
+ test $KILLSERVERS != no && kill -HUP $KILLPIDS
+ exit $RC
+fi
+
+echo "Testing searches filtering on aliased attributes..."
+echo >> $SEARCHOUT
+echo "# Testing searches filtering on aliased attributes..." >> $SEARCHOUT
+$LDAPSEARCH -b "$BASEDN" -H $URI1 \
+ "(|(mobile=+1 313 555 3233)(mobile=*4474)(&(mobile=*)(uid=jdoe)))" \
+ mobile \
+ >> $SEARCHOUT 2>&1
+RC=$?
+if test $RC != 0 ; then
+ echo "ldapsearch failed ($RC)!"
+ test $KILLSERVERS != no && kill -HUP $KILLPIDS
+ exit $RC
+fi
+
+echo "Reconfiguring alias definition..."
+. $CONFFILTER $BACKEND $MONITORDB < data/test003-config.ldif | \
+$LDAPMODIFY -v -D cn=config -H $URI1 -y $CONFIGPWF \
+ >> $TESTOUT 2>&1
+RC=$?
+if test $RC != 0 ; then
+ echo "ldapmodify failed ($RC)!"
+ test $KILLSERVERS != no && kill -HUP $KILLPIDS
+ exit $RC
+fi
+
+echo "Testing searches with new attributes..."
+echo >> $SEARCHOUT
+echo "# Testing search with new attributes..." >> $SEARCHOUT
+$LDAPSEARCH -b "$BASEDN" -H $URI1 \
+ "employeetype=*director*" \
+ employeetype mobile \
+ >> $SEARCHOUT 2>&1
+RC=$?
+if test $RC != 0 ; then
+ echo "ldapsearch failed ($RC)!"
+ test $KILLSERVERS != no && kill -HUP $KILLPIDS
+ exit $RC
+fi
+
+test $KILLSERVERS != no && kill -HUP $KILLPIDS
+
+LDIF=data/test003-out.ldif
+
+echo "Filtering ldapsearch results..."
+$LDIFFILTER -s e < $SEARCHOUT > $SEARCHFLT
+echo "Filtering expected entries..."
+$LDIFFILTER -s e < $LDIF > $LDIFFLT
+echo "Comparing filter output..."
+$CMP $SEARCHFLT $LDIFFLT > $CMPOUT
+
+if test $? != 0 ; then
+ echo "Comparison failed"
+ exit 1
+fi
+
+echo ">>>>> Test succeeded"
+
+test $KILLSERVERS != no && wait
+
+exit 0
diff --git a/contrib/slapd-modules/allop/README b/contrib/slapd-modules/allop/README
index 3768e6a..ac83fb4 100644
--- a/contrib/slapd-modules/allop/README
+++ b/contrib/slapd-modules/allop/README
@@ -18,7 +18,7 @@ gcc -shared -I../../../include -I../../../servers/slapd -Wall -g \
-o allop.so allop.c
---
-Copyright 2004-2022 The OpenLDAP Foundation. All rights reserved.
+Copyright 2004-2024 The OpenLDAP Foundation. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted only as authorized by the OpenLDAP
diff --git a/contrib/slapd-modules/allop/allop.c b/contrib/slapd-modules/allop/allop.c
index 52fab3a..701959c 100644
--- a/contrib/slapd-modules/allop/allop.c
+++ b/contrib/slapd-modules/allop/allop.c
@@ -2,7 +2,7 @@
/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
- * Copyright 2005-2022 The OpenLDAP Foundation.
+ * Copyright 2005-2024 The OpenLDAP Foundation.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/contrib/slapd-modules/allop/slapo-allop.5 b/contrib/slapd-modules/allop/slapo-allop.5
index 9e7fdc9..967aa69 100644
--- a/contrib/slapd-modules/allop/slapo-allop.5
+++ b/contrib/slapd-modules/allop/slapo-allop.5
@@ -1,5 +1,5 @@
.TH SLAPO-ALLOP 5 "RELEASEDATE" "OpenLDAP LDVERSION"
-.\" Copyright 2005-2022 The OpenLDAP Foundation All Rights Reserved.
+.\" Copyright 2005-2024 The OpenLDAP Foundation All Rights Reserved.
.\" Copying restrictions apply. See COPYRIGHT/LICENSE.
.\" $OpenLDAP$
.SH NAME
diff --git a/contrib/slapd-modules/allowed/Makefile b/contrib/slapd-modules/allowed/Makefile
index b9e3073..db1d285 100644
--- a/contrib/slapd-modules/allowed/Makefile
+++ b/contrib/slapd-modules/allowed/Makefile
@@ -1,7 +1,7 @@
# $OpenLDAP$
# This work is part of OpenLDAP Software <http://www.openldap.org/>.
#
-# Copyright 1998-2022 The OpenLDAP Foundation.
+# Copyright 1998-2024 The OpenLDAP Foundation.
# Copyright 2004 Howard Chu, Symas Corp. All Rights Reserved.
#
# Redistribution and use in source and binary forms, with or without
diff --git a/contrib/slapd-modules/allowed/README b/contrib/slapd-modules/allowed/README
index a1267cf..7391ebf 100644
--- a/contrib/slapd-modules/allowed/README
+++ b/contrib/slapd-modules/allowed/README
@@ -53,7 +53,7 @@ gcc -shared -I../../../include -I../../../servers/slapd -Wall -g \
---
This work is part of OpenLDAP Software <http://www.openldap.org/>.
-Copyright 2006-2022 The OpenLDAP Foundation. All rights reserved.
+Copyright 2006-2024 The OpenLDAP Foundation. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted only as authorized by the OpenLDAP
diff --git a/contrib/slapd-modules/allowed/allowed.c b/contrib/slapd-modules/allowed/allowed.c
index 26e3106..a01cf83 100644
--- a/contrib/slapd-modules/allowed/allowed.c
+++ b/contrib/slapd-modules/allowed/allowed.c
@@ -2,7 +2,7 @@
/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
- * Copyright 2006-2022 The OpenLDAP Foundation.
+ * Copyright 2006-2024 The OpenLDAP Foundation.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/contrib/slapd-modules/authzid/Makefile b/contrib/slapd-modules/authzid/Makefile
index b547216..10e892b 100644
--- a/contrib/slapd-modules/authzid/Makefile
+++ b/contrib/slapd-modules/authzid/Makefile
@@ -1,7 +1,7 @@
# $OpenLDAP$
# This work is part of OpenLDAP Software <http://www.openldap.org/>.
#
-# Copyright 1998-2022 The OpenLDAP Foundation.
+# Copyright 1998-2024 The OpenLDAP Foundation.
# Copyright 2004 Howard Chu, Symas Corp. All Rights Reserved.
#
# Redistribution and use in source and binary forms, with or without
diff --git a/contrib/slapd-modules/authzid/authzid.c b/contrib/slapd-modules/authzid/authzid.c
index 37264bf..f6a95ff 100644
--- a/contrib/slapd-modules/authzid/authzid.c
+++ b/contrib/slapd-modules/authzid/authzid.c
@@ -2,7 +2,7 @@
/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
- * Copyright 2010-2022 The OpenLDAP Foundation.
+ * Copyright 2010-2024 The OpenLDAP Foundation.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/contrib/slapd-modules/autogroup/Makefile b/contrib/slapd-modules/autogroup/Makefile
index 2446657..a888c23 100644
--- a/contrib/slapd-modules/autogroup/Makefile
+++ b/contrib/slapd-modules/autogroup/Makefile
@@ -1,4 +1,14 @@
# $OpenLDAP$
+# Copyright 2007 Howard Chu <hyc@symas.com>
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted only as authorized by the OpenLDAP
+# Public License.
+#
+# A copy of this license is available in the file LICENSE in the
+# top-level directory of the distribution or, alternatively, at
+# <http://www.OpenLDAP.org/license.html>.
LDAP_SRC = ../../..
LDAP_BUILD = $(LDAP_SRC)
@@ -12,6 +22,7 @@ NT_LDFLAGS = -no-undefined -avoid-version
UNIX_LDFLAGS = -version-info $(LTVER)
LIBTOOL = $(LDAP_BUILD)/libtool
+INSTALL = /usr/bin/install
CC = gcc
OPT = -g -O2
DEFS =
@@ -20,6 +31,7 @@ LIBS = $($(PLAT)_LIB) $(LDAP_LIB)
LD_FLAGS = $(LDFLAGS) $($(PLAT)_LDFLAGS) -rpath $(moduledir) -module
PROGRAMS = autogroup.la
+MANPAGES = slapo-autogroup.5
LTVER = 0:0:0
prefix=/usr/local
@@ -29,6 +41,8 @@ ldap_subdir=/openldap
libdir=$(exec_prefix)/lib
libexecdir=$(exec_prefix)/libexec
moduledir = $(libexecdir)$(ldap_subdir)
+mandir = $(exec_prefix)/share/man
+man5dir = $(mandir)/man5
.SUFFIXES: .c .o .lo
@@ -43,9 +57,17 @@ autogroup.la: autogroup.lo
clean:
rm -rf *.o *.lo *.la .libs
-install: $(PROGRAMS)
+install: install-lib install-man FORCE
+
+install-lib: $(PROGRAMS)
mkdir -p $(DESTDIR)$(moduledir)
for p in $(PROGRAMS) ; do \
$(LIBTOOL) --mode=install cp $$p $(DESTDIR)$(moduledir) ; \
done
+install-man:
+ mkdir -p $(DESTDIR)$(man5dir)
+ $(INSTALL) -m 644 $(MANPAGES) $(DESTDIR)$(man5dir)
+
+FORCE:
+
diff --git a/contrib/slapd-modules/autogroup/README b/contrib/slapd-modules/autogroup/README
index b68dd75..4f11cf5 100644
--- a/contrib/slapd-modules/autogroup/README
+++ b/contrib/slapd-modules/autogroup/README
@@ -107,7 +107,7 @@ ACKNOWLEDGEMENTS
Norbert Pueschel, and Christian Manal.
---
-Copyright 1998-2022 The OpenLDAP Foundation.
+Copyright 1998-2024 The OpenLDAP Foundation.
Portions Copyright (C) 2007 Michał Szulczyński.
All rights reserved.
diff --git a/contrib/slapd-modules/autogroup/autogroup.c b/contrib/slapd-modules/autogroup/autogroup.c
index cba9b2a..beec3c3 100644
--- a/contrib/slapd-modules/autogroup/autogroup.c
+++ b/contrib/slapd-modules/autogroup/autogroup.c
@@ -2,7 +2,7 @@
/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
- * Copyright 2007-2022 The OpenLDAP Foundation.
+ * Copyright 2007-2024 The OpenLDAP Foundation.
* Portions Copyright 2007 Michał Szulczyński.
* Portions Copyright 2009 Howard Chu.
* All rights reserved.
@@ -150,6 +150,7 @@ autogroup_add_member_to_group( Operation *op, BerValue *dn, BerValue *ndn, autog
o.orm_no_opattrs = 1;
o.o_managedsait = SLAP_CONTROL_CRITICAL;
o.o_relax = SLAP_CONTROL_CRITICAL;
+ o.o_abandon = 0;
oex.oe_key = (void *)&autogroup;
LDAP_SLIST_INSERT_HEAD( &o.o_extra, &oex, oe_next );
@@ -206,6 +207,7 @@ autogroup_add_member_values_to_group( Operation *op, struct berval *dn, autogrou
o.orm_no_opattrs = 1;
o.o_managedsait = SLAP_CONTROL_CRITICAL;
o.o_relax = SLAP_CONTROL_CRITICAL;
+ o.o_abandon = 0;
oex.oe_key = (void *)&autogroup;
LDAP_SLIST_INSERT_HEAD( &o.o_extra, &oex, oe_next );
@@ -279,6 +281,7 @@ autogroup_delete_member_from_group( Operation *op, BerValue *dn, BerValue *ndn,
o.o_permissive_modify = 1;
o.o_dont_replicate = 1;
o.orm_no_opattrs = 1;
+ o.o_abandon = 0;
oex.oe_key = (void *)&autogroup;
LDAP_SLIST_INSERT_HEAD( &o.o_extra, &oex, oe_next );
@@ -335,6 +338,7 @@ autogroup_delete_member_values_from_group( Operation *op, struct berval *dn, aut
o.orm_no_opattrs = 1;
o.o_managedsait = SLAP_CONTROL_CRITICAL;
o.o_relax = SLAP_CONTROL_CRITICAL;
+ o.o_abandon = 0;
oex.oe_key = (void *)&autogroup;
LDAP_SLIST_INSERT_HEAD( &o.o_extra, &oex, oe_next );
@@ -502,6 +506,10 @@ autogroup_add_members_from_filter( Operation *op, Entry *e, autogroup_entry_t *a
Debug(LDAP_DEBUG_TRACE, "==> autogroup_add_members_from_filter <%s>\n",
age->age_dn.bv_val );
+ /* if modify isn't set, we're pre-op and should honor abandon flag */
+ if ( op->o_abandon && !modify )
+ return 0;
+
o.ors_attrsonly = 0;
o.o_tag = LDAP_REQ_SEARCH;
@@ -520,6 +528,7 @@ autogroup_add_members_from_filter( Operation *op, Entry *e, autogroup_entry_t *a
o.ors_slimit = SLAP_NO_LIMIT;
o.ors_attrs = agf->agf_anlist ? agf->agf_anlist : slap_anlist_no_attrs;
o.o_do_not_cache = 1;
+ o.o_abandon = 0;
agg.agg_group = age;
agg.agg_filter = agf;
@@ -562,6 +571,7 @@ autogroup_add_members_from_filter( Operation *op, Entry *e, autogroup_entry_t *a
o.o_permissive_modify = 1;
o.o_dont_replicate = 1;
o.orm_no_opattrs = 1;
+ o.o_abandon = 0;
oex.oe_key = (void *)&autogroup;
LDAP_SLIST_INSERT_HEAD( &o.o_extra, &oex, oe_next );
@@ -598,7 +608,7 @@ autogroup_add_group( Operation *op, autogroup_info_t *agi, autogroup_def_t *agd,
LDAPURLDesc *lud = NULL;
Attribute *a;
BerValue *bv, dn;
- int rc = 0, match = 1, null_entry = 0;
+ int rc = 0, null_entry = 0;
if ( e == NULL ) {
if ( overlay_entry_get_ov( op, ndn, NULL, NULL, 0, &e, on ) !=
@@ -615,8 +625,7 @@ autogroup_add_group( Operation *op, autogroup_info_t *agi, autogroup_def_t *agd,
if ( agi->agi_entry != NULL ) {
for ( ; *agep ; agep = &(*agep)->age_next ) {
- dnMatch( &match, 0, NULL, NULL, &e->e_nname, &(*agep)->age_ndn );
- if ( match == 0 ) {
+ if ( dn_match( &e->e_nname, &(*agep)->age_ndn )) {
Debug( LDAP_DEBUG_TRACE, "autogroup_add_group: group already exists: <%s>\n", e->e_name.bv_val );
return 1;
}
@@ -672,8 +681,12 @@ autogroup_add_group( Operation *op, autogroup_info_t *agi, autogroup_def_t *agd,
}
if ( lud->lud_filter != NULL ) {
- ber_str2bv( lud->lud_filter, 0, 1, &agf->agf_filterstr);
agf->agf_filter = str2filter( lud->lud_filter );
+ if ( !agf->agf_filter ) {
+ Debug( LDAP_DEBUG_TRACE, "autogroup_add_group: URL filter is invalid <%s>\n", bv->bv_val );
+ goto cleanup;
+ }
+ ber_str2bv( lud->lud_filter, 0, 1, &agf->agf_filterstr);
} else {
Debug( LDAP_DEBUG_TRACE, "autogroup_add_group: URL filter is missing <%s>\n", bv->bv_val );
/* FIXME: error? */
@@ -681,13 +694,7 @@ autogroup_add_group( Operation *op, autogroup_info_t *agi, autogroup_def_t *agd,
}
if ( lud->lud_attrs != NULL ) {
- int i;
-
- for ( i=0 ; lud->lud_attrs[i]!=NULL ; i++) {
- /* Just counting */;
- }
-
- if ( i > 1 ) {
+ if ( lud->lud_attrs[1] != NULL ) {
Debug( LDAP_DEBUG_ANY, "autogroup_add_group: too many attributes specified in url <%s>\n",
bv->bv_val );
/* FIXME: error? */
@@ -795,10 +802,7 @@ autogroup_add_entry_cb( Operation *op, SlapReply *rs )
goto done;
op->o_bd->bd_info = (BackendInfo *)on;
- ldap_pvt_thread_mutex_lock( &agi->agi_mutex );
- if ( aa->agd ) {
- autogroup_add_group( op, agi, aa->agd, aa->e, NULL, 1 , 0);
- } else {
+ {
autogroup_entry_t *age;
autogroup_filter_t *agf;
struct berval odn, ondn;
@@ -810,6 +814,7 @@ autogroup_add_entry_cb( Operation *op, SlapReply *rs )
op->o_dn = op->o_bd->be_rootdn;
op->o_ndn = op->o_bd->be_rootndn;
+ ldap_pvt_thread_mutex_lock( &agi->agi_mutex );
for ( age = agi->agi_entry; age ; age = age->age_next ) {
ldap_pvt_thread_mutex_lock( &age->age_mutex );
@@ -817,7 +822,7 @@ autogroup_add_entry_cb( Operation *op, SlapReply *rs )
If yes, we can test that filter against the entry. */
for ( agf = age->age_filter; agf ; agf = agf->agf_next ) {
- if ( dnIsSuffix( &op->o_req_ndn, &agf->agf_ndn ) ) {
+ if ( dnIsSuffixScope( &op->o_req_ndn, &agf->agf_ndn, agf->agf_scope ) ) {
rc = test_filter( op, aa->e, agf->agf_filter );
if ( rc == LDAP_COMPARE_TRUE ) {
if ( agf->agf_anlist ) {
@@ -833,10 +838,10 @@ autogroup_add_entry_cb( Operation *op, SlapReply *rs )
}
ldap_pvt_thread_mutex_unlock( &age->age_mutex );
}
+ ldap_pvt_thread_mutex_unlock( &agi->agi_mutex );
op->o_dn = odn;
op->o_ndn = ondn;
}
- ldap_pvt_thread_mutex_unlock( &agi->agi_mutex );
op->o_bd->bd_info = bi;
@@ -873,6 +878,7 @@ autogroup_add_entry( Operation *op, SlapReply *rs)
op->o_callback = sc;
/* Check if it's a group. */
+ ldap_pvt_thread_mutex_lock( &agi->agi_mutex );
for ( ; agd ; agd = agd->agd_next ) {
if ( is_entry_objectclass_or_sub( op->ora_e, agd->agd_oc ) ) {
Modification mod;
@@ -889,10 +895,13 @@ autogroup_add_entry( Operation *op, SlapReply *rs)
modify_delete_values( op->ora_e, &mod, /* permissive */ 1, &text, textbuf, sizeof( textbuf ) );
aa->agd = agd;
+ /* But we should populate the dynamic values immediately. */
+ autogroup_add_group( op, agi, agd, op->ora_e, NULL, 1 , 0);
break;
}
}
+ ldap_pvt_thread_mutex_unlock( &agi->agi_mutex );
return SLAP_CB_CONTINUE;
}
@@ -922,7 +931,7 @@ autogroup_delete_group( autogroup_info_t *agi, autogroup_entry_t *e )
if ( age_prev != NULL ) {
age_prev->age_next = age_next;
} else {
- agi->agi_entry = NULL;
+ agi->agi_entry = age_next;
}
ch_free( age->age_dn.bv_val );
@@ -956,6 +965,85 @@ autogroup_delete_group( autogroup_info_t *agi, autogroup_entry_t *e )
}
static int
+autogroup_del_entry_cb( Operation *op, SlapReply *rs )
+{
+ slap_callback *sc = op->o_callback;
+ ag_addinfo *aa = sc->sc_private;
+ slap_overinst *on = aa->on;
+ autogroup_info_t *agi = (autogroup_info_t *)on->on_bi.bi_private;
+ BackendInfo *bi = op->o_bd->bd_info;
+ struct berval odn, ondn;
+ autogroup_entry_t *age, *age_prev, *age_next;
+ autogroup_filter_t *agf;
+
+ if ( rs->sr_err != LDAP_SUCCESS )
+ goto done;
+
+ ldap_pvt_thread_mutex_lock( &agi->agi_mutex );
+
+ /* Check if the entry to be deleted is one of our groups. */
+ for ( age = agi->agi_entry ; age ; age=age->age_next ) {
+ ldap_pvt_thread_mutex_lock( &age->age_mutex );
+ if ( dn_match( &op->o_req_ndn, &age->age_ndn )) {
+ autogroup_delete_group( agi, age );
+ break;
+ }
+ ldap_pvt_thread_mutex_unlock( &age->age_mutex );
+ }
+
+ if ( !aa->e ) {
+ ldap_pvt_thread_mutex_unlock( &agi->agi_mutex );
+ goto done;
+ }
+
+ /* Check if the entry matches any of the groups.
+ If yes, we can delete the entry from that group. */
+
+ odn = op->o_dn;
+ ondn = op->o_ndn;
+ op->o_dn = op->o_bd->be_rootdn;
+ op->o_ndn = op->o_bd->be_rootndn;
+ op->o_bd->bd_info = (BackendInfo *)on;
+
+ for ( age = agi->agi_entry ; age ; age = age->age_next ) {
+ ldap_pvt_thread_mutex_lock( &age->age_mutex );
+
+ for ( agf = age->age_filter; agf ; agf = agf->agf_next ) {
+ if ( dnIsSuffixScope( &op->o_req_ndn, &agf->agf_ndn, agf->agf_scope ) ) {
+ int rc = test_filter( op, aa->e, agf->agf_filter );
+ if ( rc == LDAP_COMPARE_TRUE ) {
+ /* If the attribute is retrieved from the entry, we don't know what to delete
+ ** So the group must be entirely refreshed
+ ** But the refresh can't be done now because the entry is not deleted
+ ** So the group is marked as mustrefresh
+ */
+ if ( agf->agf_anlist ) {
+ age->age_mustrefresh = 1;
+ } else {
+ autogroup_delete_member_from_group( op, &aa->e->e_name, &aa->e->e_nname, age );
+ }
+ break;
+ }
+ }
+ }
+ ldap_pvt_thread_mutex_unlock( &age->age_mutex );
+ }
+
+ ldap_pvt_thread_mutex_unlock( &agi->agi_mutex );
+ op->o_dn = odn;
+ op->o_ndn = ondn;
+ op->o_bd->bd_info = bi;
+
+done:
+ if ( aa->e )
+ entry_free( aa->e );
+ op->o_callback = sc->sc_next;
+ op->o_tmpfree( sc, op->o_tmpmemctx );
+
+ return SLAP_CB_CONTINUE;
+}
+
+static int
autogroup_delete_entry( Operation *op, SlapReply *rs)
{
slap_overinst *on = (slap_overinst *)op->o_bd->bd_info;
@@ -963,7 +1051,7 @@ autogroup_delete_entry( Operation *op, SlapReply *rs)
autogroup_entry_t *age, *age_prev, *age_next;
autogroup_filter_t *agf;
Entry *e;
- int matched_group = 0, rc = 0;
+ int matched_group = 0, rc = 0, matched_entry = 0;
struct berval odn, ondn;
OpExtra *oex;
@@ -976,38 +1064,21 @@ autogroup_delete_entry( Operation *op, SlapReply *rs)
ldap_pvt_thread_mutex_lock( &agi->agi_mutex );
- if ( overlay_entry_get_ov( op, &op->o_req_ndn, NULL, NULL, 0, &e, on ) !=
- LDAP_SUCCESS || e == NULL ) {
- Debug( LDAP_DEBUG_TRACE, "autogroup_delete_entry: cannot get entry for <%s>\n", op->o_req_dn.bv_val );
- ldap_pvt_thread_mutex_unlock( &agi->agi_mutex );
- return SLAP_CB_CONTINUE;
- }
-
/* Check if the entry to be deleted is one of our groups. */
- for ( age_next = agi->agi_entry ; age_next ; age_prev = age ) {
- age = age_next;
- ldap_pvt_thread_mutex_lock( &age->age_mutex );
- age_next = age->age_next;
-
- if ( is_entry_objectclass_or_sub( e, age->age_def->agd_oc ) ) {
- int match = 1;
-
+ for ( age = agi->agi_entry ; age ; age=age->age_next ) {
+ if ( dn_match( &op->o_req_ndn, &age->age_ndn )) {
matched_group = 1;
-
- dnMatch( &match, 0, NULL, NULL, &e->e_nname, &age->age_ndn );
-
- if ( match == 0 ) {
- autogroup_delete_group( agi, age );
- break;
- }
+ break;
}
-
- ldap_pvt_thread_mutex_unlock( &age->age_mutex );
}
- if ( matched_group == 1 ) {
- overlay_entry_release_ov( op, e, 0, on );
- ldap_pvt_thread_mutex_unlock( &agi->agi_mutex );
+ /* if matched_group, we wouldn't need to go further, but continuing
+ * this check allows for groups that are members of other groups
+ */
+ if ( overlay_entry_get_ov( op, &op->o_req_ndn, NULL, NULL, 0, &e, on ) !=
+ LDAP_SUCCESS || e == NULL ) {
+ Debug( LDAP_DEBUG_TRACE, "autogroup_delete_entry: cannot get entry for <%s>\n", op->o_req_dn.bv_val );
+ ldap_pvt_thread_mutex_unlock( &agi->agi_mutex );
return SLAP_CB_CONTINUE;
}
@@ -1023,28 +1094,36 @@ autogroup_delete_entry( Operation *op, SlapReply *rs)
ldap_pvt_thread_mutex_lock( &age->age_mutex );
for ( agf = age->age_filter; agf ; agf = agf->agf_next ) {
- if ( dnIsSuffix( &op->o_req_ndn, &agf->agf_ndn ) ) {
+ if ( dnIsSuffixScope( &op->o_req_ndn, &agf->agf_ndn, agf->agf_scope ) ) {
rc = test_filter( op, e, agf->agf_filter );
if ( rc == LDAP_COMPARE_TRUE ) {
- /* If the attribute is retrieved from the entry, we don't know what to delete
- ** So the group must be entirely refreshed
- ** But the refresh can't be done now because the entry is not deleted
- ** So the group is marked as mustrefresh
- */
- if ( agf->agf_anlist ) {
- age->age_mustrefresh = 1;
- } else {
- autogroup_delete_member_from_group( op, &e->e_name, &e->e_nname, age );
- }
+ matched_entry = 1;
break;
}
}
}
ldap_pvt_thread_mutex_unlock( &age->age_mutex );
+ if ( matched_entry )
+ break;
}
+
op->o_dn = odn;
op->o_ndn = ondn;
+ if ( matched_group || matched_entry ) {
+ slap_callback *sc = op->o_tmpcalloc( sizeof(slap_callback) + sizeof(ag_addinfo), 1, op->o_tmpmemctx );
+ ag_addinfo *aa;
+
+ sc->sc_private = (sc+1);
+ sc->sc_response = autogroup_del_entry_cb;
+ aa = sc->sc_private;
+ aa->on = on;
+ if ( matched_entry )
+ aa->e = entry_dup( e );
+ sc->sc_next = op->o_callback;
+ op->o_callback = sc;
+ }
+
overlay_entry_release_ov( op, e, 0, on );
ldap_pvt_thread_mutex_unlock( &agi->agi_mutex );
@@ -1064,15 +1143,16 @@ autogroup_response( Operation *op, SlapReply *rs )
int is_olddn, is_newdn, is_value_refresh, dn_equal;
OpExtra *oex;
+ if ( rs->sr_type != REP_RESULT || rs->sr_err != LDAP_SUCCESS )
+ return SLAP_CB_CONTINUE;
+
LDAP_SLIST_FOREACH( oex, &op->o_extra, oe_next ) {
if ( oex->oe_key == (void *)&autogroup )
- break;
+ return SLAP_CB_CONTINUE;
}
/* Handle all cases where a refresh of the group is needed */
if ( op->o_tag == LDAP_REQ_DELETE || op->o_tag == LDAP_REQ_MODIFY ) {
- if ( rs->sr_type == REP_RESULT && rs->sr_err == LDAP_SUCCESS && !oex ) {
-
ldap_pvt_thread_mutex_lock( &agi->agi_mutex );
for ( age = agi->agi_entry ; age ; age = age->age_next ) {
@@ -1092,16 +1172,14 @@ autogroup_response( Operation *op, SlapReply *rs )
}
ldap_pvt_thread_mutex_unlock( &agi->agi_mutex );
- }
} else if ( op->o_tag == LDAP_REQ_MODRDN ) {
- if ( rs->sr_type == REP_RESULT && rs->sr_err == LDAP_SUCCESS && !oex ) {
Debug( LDAP_DEBUG_TRACE, "==> autogroup_response MODRDN from <%s>\n", op->o_req_dn.bv_val );
- Debug( LDAP_DEBUG_TRACE, "autogroup_response MODRDN to <%s>\n", op->orr_newDN );
+ Debug( LDAP_DEBUG_TRACE, "autogroup_response MODRDN to <%s>\n", op->orr_newDN.bv_val );
ldap_pvt_thread_mutex_lock( &agi->agi_mutex );
- dnMatch( &dn_equal, 0, NULL, NULL, &op->o_req_ndn, &op->orr_nnewDN );
+ dn_equal = dn_match( &op->o_req_ndn, &op->orr_nnewDN );
if ( overlay_entry_get_ov( op, &op->orr_nnewDN, NULL, NULL, 0, &e, on ) !=
LDAP_SUCCESS || e == NULL ) {
@@ -1131,22 +1209,17 @@ autogroup_response( Operation *op, SlapReply *rs )
op->o_tmpmemctx ) == 0 )
{
for ( age = agi->agi_entry ; age ; age = age->age_next ) {
- int match = 1;
-
- dnMatch( &match, 0, NULL, NULL, &age->age_ndn, &op->o_req_ndn );
- if ( match == 0 ) {
+ if ( dn_match( &age->age_ndn, &op->o_req_ndn )) {
Debug( LDAP_DEBUG_TRACE, "autogroup_response MODRDN updating group's DN to <%s>\n", op->orr_newDN.bv_val );
- ber_dupbv( &age->age_dn, &op->orr_newDN );
- ber_dupbv( &age->age_ndn, &op->orr_nnewDN );
-
- overlay_entry_release_ov( op, e, 0, on );
- ldap_pvt_thread_mutex_unlock( &agi->agi_mutex );
- return SLAP_CB_CONTINUE;
+ ber_bvreplace( &age->age_dn, &op->orr_newDN );
+ ber_bvreplace( &age->age_ndn, &op->orr_nnewDN );
+ goto break1;
}
}
}
}
+break1:
/* For each group:
1. check if the original entry's DN is in the group.
@@ -1209,7 +1282,7 @@ autogroup_response( Operation *op, SlapReply *rs )
}
for ( agf = age->age_filter ; agf ; agf = agf->agf_next ) {
- if ( dnIsSuffix( &op->orr_nnewDN, &agf->agf_ndn ) ) {
+ if ( dnIsSuffixScope( &op->orr_nnewDN, &agf->agf_ndn, agf->agf_scope ) ) {
/* TODO: should retest filter as it could imply conditions on the dn */
is_newdn = 1;
break;
@@ -1279,11 +1352,9 @@ autogroup_response( Operation *op, SlapReply *rs )
attrs_free( attrs );
ldap_pvt_thread_mutex_unlock( &agi->agi_mutex );
- }
}
if ( op->o_tag == LDAP_REQ_MODIFY ) {
- if ( rs->sr_type == REP_RESULT && rs->sr_err == LDAP_SUCCESS && !oex ) {
Entry etmp;
struct berval odn, ondn;
Debug( LDAP_DEBUG_TRACE, "==> autogroup_response MODIFY <%s>\n", op->o_req_dn.bv_val );
@@ -1317,17 +1388,12 @@ autogroup_response( Operation *op, SlapReply *rs )
a->a_nvals, &agd->agd_oc->soc_cname,
op->o_tmpmemctx ) == 0 )
{
- Modifications *m;
- int match = 1;
-
- m = op->orm_modlist;
+ Modifications *m = op->orm_modlist;
for ( age = agi->agi_entry ; age ; age = age->age_next ) {
ldap_pvt_thread_mutex_lock( &age->age_mutex );
- dnMatch( &match, 0, NULL, NULL, &op->o_req_ndn, &age->age_ndn );
-
- if ( match == 0 ) {
+ if ( dn_match( &op->o_req_ndn, &age->age_ndn )) {
for ( ; m ; m = m->sml_next ) {
if ( m->sml_desc == age->age_def->agd_member_url_ad ) {
autogroup_def_t *group_agd = age->age_def;
@@ -1420,7 +1486,7 @@ autogroup_response( Operation *op, SlapReply *rs )
overlay_entry_release_ov( op, group, 0, on );
for ( agf = age->age_filter ; agf ; agf = agf->agf_next ) {
- if ( dnIsSuffix( &op->o_req_ndn, &agf->agf_ndn ) ) {
+ if ( dnIsSuffixScope( &op->o_req_ndn, &agf->agf_ndn, agf->agf_scope ) ) {
if ( test_filter( op, &etmp, agf->agf_filter ) == LDAP_COMPARE_TRUE ) {
is_newdn = 1;
break;
@@ -1449,7 +1515,6 @@ autogroup_response( Operation *op, SlapReply *rs )
attrs_free( attrs );
ldap_pvt_thread_mutex_unlock( &agi->agi_mutex );
- }
}
return SLAP_CB_CONTINUE;
@@ -1527,10 +1592,11 @@ autogroup_modify_entry( Operation *op, SlapReply *rs)
Modifications *m;
for ( m = op->orm_modlist ; m ; m = m->sml_next ) {
if ( m->sml_desc == agf->agf_anlist[0].an_desc ) {
- if ( dnIsSuffix( &op->o_req_ndn, &agf->agf_ndn ) ) {
+ if ( dnIsSuffixScope( &op->o_req_ndn, &agf->agf_ndn, agf->agf_scope ) ) {
int rc = test_filter( op, e, agf->agf_filter );
if ( rc == LDAP_COMPARE_TRUE ) {
age->age_mustrefresh = 1;
+ goto breakout;
}
}
}
@@ -1539,6 +1605,8 @@ autogroup_modify_entry( Operation *op, SlapReply *rs)
if ( autogroup_memberOf_filter( agf->agf_filter, &op->o_req_ndn, agi->agi_memberof_ad ) ) {
age->age_mustrefresh = 1;
+breakout:
+ break;
}
}
}
@@ -1562,15 +1630,10 @@ autogroup_modify_entry( Operation *op, SlapReply *rs)
a->a_nvals, &agd->agd_oc->soc_cname,
op->o_tmpmemctx ) == 0 )
{
- Modifications *m;
- int match = 1;
-
- m = op->orm_modlist;
+ Modifications *m = op->orm_modlist;
for ( age = agi->agi_entry ; age ; age = age->age_next ) {
- dnMatch( &match, 0, NULL, NULL, &op->o_req_ndn, &age->age_ndn );
-
- if ( match == 0 ) {
+ if ( dn_match( &op->o_req_ndn, &age->age_ndn )) {
for ( ; m ; m = m->sml_next ) {
if ( m->sml_desc == age->age_def->agd_member_ad ) {
overlay_entry_release_ov( op, e, 0, on );
@@ -1632,10 +1695,11 @@ autogroup_modrdn_entry( Operation *op, SlapReply *rs)
autogroup_filter_t *agf;
for ( agf = age->age_filter ; agf ; agf = agf->agf_next ) {
if ( agf->agf_anlist ) {
- if ( dnIsSuffix( &op->o_req_ndn, &agf->agf_ndn ) ) {
+ if ( dnIsSuffixScope( &op->o_req_ndn, &agf->agf_ndn, agf->agf_scope ) ) {
int rc = test_filter( op, e, agf->agf_filter );
if ( rc == LDAP_COMPARE_TRUE ) {
age->age_modrdn_olddnmodified = 1;
+ break;
}
}
}
@@ -1813,7 +1877,7 @@ ag_cfgen( ConfigArgs *c )
ch_free( agf );
}
- ldap_pvt_thread_mutex_init( &age->age_mutex );
+ ldap_pvt_thread_mutex_destroy( &age->age_mutex );
ch_free( age );
}
@@ -1912,7 +1976,7 @@ ag_cfgen( ConfigArgs *c )
if( !is_at_subtype( member_url_ad->ad_type, slap_schema.si_ad_labeledURI->ad_type ) ) {
snprintf( c->cr_msg, sizeof( c->cr_msg ),
"\"autogroup-attrset <oc> <URL-ad> <member-ad>\": "
- "AttributeDescription \"%s\" ",
+ "AttributeDescription \"%s\" "
"must be of a subtype \"labeledURI\"",
c->argv[ 2 ] );
Debug( LDAP_DEBUG_ANY, "%s: %s.\n",
diff --git a/contrib/slapd-modules/autogroup/slapo-autogroup.5 b/contrib/slapd-modules/autogroup/slapo-autogroup.5
index 4c6414d..eb16d88 100644
--- a/contrib/slapd-modules/autogroup/slapo-autogroup.5
+++ b/contrib/slapd-modules/autogroup/slapo-autogroup.5
@@ -1,5 +1,5 @@
.TH SLAPO-AUTOGROUP 5 "RELEASEDATE" "OpenLDAP LDVERSION"
-.\" Copyright 1998-2022 The OpenLDAP Foundation All Rights Reserved.
+.\" Copyright 1998-2024 The OpenLDAP Foundation All Rights Reserved.
.\" Portions Copyright \[u00A9] 2007 Michał Szulczyński.
.\" Copying restrictions apply. See the COPYRIGHT file.
.\" $OpenLDAP$
@@ -29,6 +29,9 @@ tested for compliance with the filters, and its membership is accordingly
updated. For searches and compares, it behaves like a static group.
If the attribute part of the URI is filled, the group entry is populated by
the values of this attribute in the entries resulting from the search.
+
+Note that filters that use attributes that are themselves dynamically
+computed may not work consistently, and should be avoided.
.SH CONFIGURATION
Either
.BR \FCslapd.conf\FT (5)
@@ -111,6 +114,6 @@ updates provided by Emily Backes.
.BR slapd.conf (5),
.BR slapd (8).
.SH Copyrights
-Copyright 1998-2022 The OpenLDAP Foundation.
+Copyright 1998-2024 The OpenLDAP Foundation.
Portions Copyright \[u00A9] 2007 Michał Szulczyński.
All rights reserved.
diff --git a/contrib/slapd-modules/ciboolean/Makefile b/contrib/slapd-modules/ciboolean/Makefile
index 86fbf06..308f4df 100644
--- a/contrib/slapd-modules/ciboolean/Makefile
+++ b/contrib/slapd-modules/ciboolean/Makefile
@@ -1,7 +1,7 @@
# $OpenLDAP$
# This work is part of OpenLDAP Software <http://www.openldap.org/>.
#
-# Copyright 1998-2022 The OpenLDAP Foundation.
+# Copyright 1998-2024 The OpenLDAP Foundation.
# Copyright 2022 Symas Corp. All Rights Reserved.
#
# Redistribution and use in source and binary forms, with or without
diff --git a/contrib/slapd-modules/ciboolean/ciboolean.c b/contrib/slapd-modules/ciboolean/ciboolean.c
index 21e0f1a..eaa2ba2 100644
--- a/contrib/slapd-modules/ciboolean/ciboolean.c
+++ b/contrib/slapd-modules/ciboolean/ciboolean.c
@@ -2,7 +2,7 @@
/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
- * Copyright 1998-2022 The OpenLDAP Foundation.
+ * Copyright 1998-2024 The OpenLDAP Foundation.
* Copyright 2022 Symas Corp. All Rights Reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/contrib/slapd-modules/ciboolean/slapo-ciboolean.5 b/contrib/slapd-modules/ciboolean/slapo-ciboolean.5
index 134b8a8..a8203bc 100644
--- a/contrib/slapd-modules/ciboolean/slapo-ciboolean.5
+++ b/contrib/slapd-modules/ciboolean/slapo-ciboolean.5
@@ -1,5 +1,5 @@
.TH SLAPO-CIBOOLEAN 5 "RELEASEDATE" "OpenLDAP"
-.\" Copyright 1998-2022 The OpenLDAP Foundation.
+.\" Copyright 1998-2024 The OpenLDAP Foundation.
.\" Copyright 2022 Symas Corp. All Rights Reserved.
.\" Copying restrictions apply. See LICENSE.
.SH NAME
diff --git a/contrib/slapd-modules/ciboolean/tests/run b/contrib/slapd-modules/ciboolean/tests/run
index 239bff7..9f24063 100755
--- a/contrib/slapd-modules/ciboolean/tests/run
+++ b/contrib/slapd-modules/ciboolean/tests/run
@@ -2,7 +2,7 @@
## $OpenLDAP$
## This work is part of OpenLDAP Software <http://www.openldap.org/>.
##
-## Copyright 1998-2022 The OpenLDAP Foundation.
+## Copyright 1998-2024 The OpenLDAP Foundation.
## All rights reserved.
##
## Redistribution and use in source and binary forms, with or without
diff --git a/contrib/slapd-modules/ciboolean/tests/scripts/test001-ciboolean b/contrib/slapd-modules/ciboolean/tests/scripts/test001-ciboolean
index bc6f229..7f7c4cc 100755
--- a/contrib/slapd-modules/ciboolean/tests/scripts/test001-ciboolean
+++ b/contrib/slapd-modules/ciboolean/tests/scripts/test001-ciboolean
@@ -2,7 +2,7 @@
# $OpenLDAP$
## This work is part of OpenLDAP Software <http://www.openldap.org/>.
##
-## Copyright 1998-2022 The OpenLDAP Foundation.
+## Copyright 1998-2024 The OpenLDAP Foundation.
## Copyright 2022 Symas Corp.
##
## All rights reserved.
diff --git a/contrib/slapd-modules/cloak/cloak.c b/contrib/slapd-modules/cloak/cloak.c
index ced7a80..613d2de 100644
--- a/contrib/slapd-modules/cloak/cloak.c
+++ b/contrib/slapd-modules/cloak/cloak.c
@@ -2,7 +2,7 @@
/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
- * Copyright 2008-2022 The OpenLDAP Foundation.
+ * Copyright 2008-2024 The OpenLDAP Foundation.
* Portions Copyright 2008 Emmanuel Dreyfus
* All rights reserved.
*
diff --git a/contrib/slapd-modules/cloak/slapo-cloak.5 b/contrib/slapd-modules/cloak/slapo-cloak.5
index 2655d2e..41b84aa 100644
--- a/contrib/slapd-modules/cloak/slapo-cloak.5
+++ b/contrib/slapd-modules/cloak/slapo-cloak.5
@@ -1,5 +1,5 @@
.TH SLAPO-CLOAK 5 "RELEASEDATE" "OpenLDAP LDVERSION"
-.\" Copyright 1998-2022 The OpenLDAP Foundation, All Rights Reserved.
+.\" Copyright 1998-2024 The OpenLDAP Foundation, All Rights Reserved.
.\" Copying restrictions apply. See the COPYRIGHT file.
.\" $OpenLDAP$
.SH NAME
diff --git a/contrib/slapd-modules/comp_match/Makefile b/contrib/slapd-modules/comp_match/Makefile
index e7527bd..8a954be 100644
--- a/contrib/slapd-modules/comp_match/Makefile
+++ b/contrib/slapd-modules/comp_match/Makefile
@@ -1,7 +1,7 @@
# $OpenLDAP$
# This work is part of OpenLDAP Software <http://www.openldap.org/>.
#
-# Copyright 2003-2022 The OpenLDAP Foundation.
+# Copyright 2003-2024 The OpenLDAP Foundation.
# Portions Copyright 2004 by IBM Corporation.
# All rights reserved.
diff --git a/contrib/slapd-modules/datamorph/Makefile b/contrib/slapd-modules/datamorph/Makefile
index 61c6fa2..88ec64b 100644
--- a/contrib/slapd-modules/datamorph/Makefile
+++ b/contrib/slapd-modules/datamorph/Makefile
@@ -1,7 +1,7 @@
# $OpenLDAP$
# This work is part of OpenLDAP Software <http://www.openldap.org/>.
#
-# Copyright 1998-2022 The OpenLDAP Foundation.
+# Copyright 1998-2024 The OpenLDAP Foundation.
# Copyright 2017 Ondřej Kuzník, Symas Corp. All Rights Reserved.
#
# Redistribution and use in source and binary forms, with or without
diff --git a/contrib/slapd-modules/datamorph/datamorph.c b/contrib/slapd-modules/datamorph/datamorph.c
index c0a5f80..1d9fc1b 100644
--- a/contrib/slapd-modules/datamorph/datamorph.c
+++ b/contrib/slapd-modules/datamorph/datamorph.c
@@ -2,7 +2,7 @@
/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
- * Copyright 2016-2022 The OpenLDAP Foundation.
+ * Copyright 2016-2024 The OpenLDAP Foundation.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -1194,7 +1194,7 @@ static ConfigTable datamorph_cfg[] = {
{ "datamorph_attribute", "attr", 2, 2, 0,
ARG_STRING|ARG_QUOTE|ARG_MAGIC,
datamorph_set_attribute,
- "( OLcfgCtAt:7.1 NAME 'olcDatamorphAttribute' "
+ "( OLcfgCtAt:8.1 NAME 'olcDatamorphAttribute' "
"DESC 'Attribute to transform' "
"EQUALITY caseIgnoreMatch "
"SYNTAX OMsDirectoryString "
@@ -1204,7 +1204,7 @@ static ConfigTable datamorph_cfg[] = {
{ "datamorph_size", "<1|2|4|8>", 2, 2, 0,
ARG_INT|ARG_MAGIC|DATAMORPH_INT_SIZE,
datamorph_set_size,
- "( OLcfgCtAt:7.2 NAME 'olcDatamorphIntegerBytes' "
+ "( OLcfgCtAt:8.2 NAME 'olcDatamorphIntegerBytes' "
"DESC 'Integer size in bytes' "
"EQUALITY integerMatch "
"SYNTAX OMsInteger "
@@ -1214,7 +1214,7 @@ static ConfigTable datamorph_cfg[] = {
{ "datamorph_signed", "TRUE|FALSE", 2, 2, 0,
ARG_ON_OFF|ARG_MAGIC|DATAMORPH_INT_SIGNED,
datamorph_set_signed,
- "( OLcfgCtAt:7.3 NAME 'olcDatamorphIntegerSigned' "
+ "( OLcfgCtAt:8.3 NAME 'olcDatamorphIntegerSigned' "
"DESC 'Whether integers maintain sign' "
"EQUALITY booleanMatch "
"SYNTAX OMsBoolean "
@@ -1224,7 +1224,7 @@ static ConfigTable datamorph_cfg[] = {
{ "datamorph_lower_bound", "int", 2, 2, 0,
ARG_BERVAL|ARG_MAGIC|DATAMORPH_INT_LOWER,
datamorph_set_bounds,
- "( OLcfgCtAt:7.4 NAME 'olcDatamorphIntegerLowerBound' "
+ "( OLcfgCtAt:8.4 NAME 'olcDatamorphIntegerLowerBound' "
"DESC 'Lowest valid value for the attribute' "
"EQUALITY integerMatch "
"SYNTAX OMsInteger "
@@ -1234,7 +1234,7 @@ static ConfigTable datamorph_cfg[] = {
{ "datamorph_upper_bound", "int", 2, 2, 0,
ARG_BERVAL|ARG_MAGIC|DATAMORPH_INT_UPPER,
datamorph_set_bounds,
- "( OLcfgCtAt:7.5 NAME 'olcDatamorphIntegerUpperBound' "
+ "( OLcfgCtAt:8.5 NAME 'olcDatamorphIntegerUpperBound' "
"DESC 'Highest valid value for the attribute' "
"EQUALITY integerMatch "
"SYNTAX OMsInteger "
@@ -1246,7 +1246,7 @@ static ConfigTable datamorph_cfg[] = {
{ "", NULL, 2, 2, 0,
ARG_INT|ARG_MAGIC,
datamorph_set_index,
- "( OLcfgCtAt:7.6 NAME 'olcDatamorphIndex' "
+ "( OLcfgCtAt:8.6 NAME 'olcDatamorphIndex' "
"DESC 'Internal DB value' "
"EQUALITY integerMatch "
"SYNTAX OMsInteger "
@@ -1256,7 +1256,7 @@ static ConfigTable datamorph_cfg[] = {
{ "", NULL, 2, 2, 0,
ARG_BERVAL|ARG_QUOTE|ARG_MAGIC,
datamorph_set_value,
- "( OLcfgCtAt:7.7 NAME 'olcDatamorphValue' "
+ "( OLcfgCtAt:8.7 NAME 'olcDatamorphValue' "
"DESC 'Wire value' "
"EQUALITY caseExactMatch "
"SYNTAX OMsDirectoryString "
@@ -1282,25 +1282,25 @@ static ConfigTable datamorph_cfg[] = {
};
static ConfigOCs datamorph_ocs[] = {
- { "( OLcfgCtOc:7.1 "
+ { "( OLcfgCtOc:8.1 "
"NAME 'olcDatamorphConfig' "
"DESC 'Datamorph overlay configuration' "
"SUP olcOverlayConfig )",
Cft_Overlay, datamorph_cfg, NULL, datamorph_cfadd },
- { "( OLcfgCtOc:7.2 "
+ { "( OLcfgCtOc:8.2 "
"NAME 'olcTransformation' "
"DESC 'Transformation configuration' "
"MUST ( olcDatamorphAttribute ) "
"SUP top "
"ABSTRACT )",
Cft_Misc, datamorph_cfg, NULL },
- { "( OLcfgCtOc:7.3 "
+ { "( OLcfgCtOc:8.3 "
"NAME 'olcDatamorphEnum' "
"DESC 'Configuration for an enumerated attribute' "
"SUP olcTransformation "
"STRUCTURAL )",
Cft_Misc, datamorph_cfg, datamorph_ldadd_enum },
- { "( OLcfgCtOc:7.4 "
+ { "( OLcfgCtOc:8.4 "
"NAME 'olcDatamorphInteger' "
"DESC 'Configuration for a compact integer attribute' "
"MUST ( olcDatamorphIntegerBytes ) "
@@ -1311,7 +1311,7 @@ static ConfigOCs datamorph_ocs[] = {
"SUP olcTransformation "
"STRUCTURAL )",
Cft_Misc, datamorph_cfg, datamorph_ldadd_interval },
- { "( OLcfgCtOc:7.5 "
+ { "( OLcfgCtOc:8.5 "
"NAME 'olcDatamorphEnumValue' "
"DESC 'Configuration for an enumerated attribute' "
"MUST ( olcDatamorphIndex $ "
diff --git a/contrib/slapd-modules/datamorph/tests/run b/contrib/slapd-modules/datamorph/tests/run
index 239bff7..9f24063 100755
--- a/contrib/slapd-modules/datamorph/tests/run
+++ b/contrib/slapd-modules/datamorph/tests/run
@@ -2,7 +2,7 @@
## $OpenLDAP$
## This work is part of OpenLDAP Software <http://www.openldap.org/>.
##
-## Copyright 1998-2022 The OpenLDAP Foundation.
+## Copyright 1998-2024 The OpenLDAP Foundation.
## All rights reserved.
##
## Redistribution and use in source and binary forms, with or without
diff --git a/contrib/slapd-modules/datamorph/tests/scripts/all b/contrib/slapd-modules/datamorph/tests/scripts/all
index a5c1774..7d9c8e3 100755
--- a/contrib/slapd-modules/datamorph/tests/scripts/all
+++ b/contrib/slapd-modules/datamorph/tests/scripts/all
@@ -2,7 +2,7 @@
# $OpenLDAP$
## This work is part of OpenLDAP Software <http://www.openldap.org/>.
##
-## Copyright 1998-2022 The OpenLDAP Foundation.
+## Copyright 1998-2024 The OpenLDAP Foundation.
## All rights reserved.
##
## Redistribution and use in source and binary forms, with or without
diff --git a/contrib/slapd-modules/datamorph/tests/scripts/common.sh b/contrib/slapd-modules/datamorph/tests/scripts/common.sh
index a468732..7d8f930 100755
--- a/contrib/slapd-modules/datamorph/tests/scripts/common.sh
+++ b/contrib/slapd-modules/datamorph/tests/scripts/common.sh
@@ -2,7 +2,7 @@
## $OpenLDAP$
## This work is part of OpenLDAP Software <http://www.openldap.org/>.
##
-## Copyright 2016-2022 The OpenLDAP Foundation.
+## Copyright 2016-2024 The OpenLDAP Foundation.
## All rights reserved.
##
## Redistribution and use in source and binary forms, with or without
diff --git a/contrib/slapd-modules/datamorph/tests/scripts/test001-config b/contrib/slapd-modules/datamorph/tests/scripts/test001-config
index c4bfdf0..1c73e09 100755
--- a/contrib/slapd-modules/datamorph/tests/scripts/test001-config
+++ b/contrib/slapd-modules/datamorph/tests/scripts/test001-config
@@ -2,7 +2,7 @@
## $OpenLDAP$
## This work is part of OpenLDAP Software <http://www.openldap.org/>.
##
-## Copyright 2016-2022 The OpenLDAP Foundation.
+## Copyright 2016-2024 The OpenLDAP Foundation.
## All rights reserved.
##
## Redistribution and use in source and binary forms, with or without
diff --git a/contrib/slapd-modules/datamorph/tests/scripts/test002-add-delete b/contrib/slapd-modules/datamorph/tests/scripts/test002-add-delete
index f947d09..c742611 100755
--- a/contrib/slapd-modules/datamorph/tests/scripts/test002-add-delete
+++ b/contrib/slapd-modules/datamorph/tests/scripts/test002-add-delete
@@ -2,7 +2,7 @@
## $OpenLDAP$
## This work is part of OpenLDAP Software <http://www.openldap.org/>.
##
-## Copyright 2016-2022 The OpenLDAP Foundation.
+## Copyright 2016-2024 The OpenLDAP Foundation.
## All rights reserved.
##
## Redistribution and use in source and binary forms, with or without
diff --git a/contrib/slapd-modules/datamorph/tests/scripts/test003-search b/contrib/slapd-modules/datamorph/tests/scripts/test003-search
index 9afe677..8a77666 100755
--- a/contrib/slapd-modules/datamorph/tests/scripts/test003-search
+++ b/contrib/slapd-modules/datamorph/tests/scripts/test003-search
@@ -2,7 +2,7 @@
## $OpenLDAP$
## This work is part of OpenLDAP Software <http://www.openldap.org/>.
##
-## Copyright 2016-2022 The OpenLDAP Foundation.
+## Copyright 2016-2024 The OpenLDAP Foundation.
## All rights reserved.
##
## Redistribution and use in source and binary forms, with or without
diff --git a/contrib/slapd-modules/datamorph/tests/scripts/test004-compare b/contrib/slapd-modules/datamorph/tests/scripts/test004-compare
index d4b535b..2300121 100755
--- a/contrib/slapd-modules/datamorph/tests/scripts/test004-compare
+++ b/contrib/slapd-modules/datamorph/tests/scripts/test004-compare
@@ -2,7 +2,7 @@
## $OpenLDAP$
## This work is part of OpenLDAP Software <http://www.openldap.org/>.
##
-## Copyright 2016-2022 The OpenLDAP Foundation.
+## Copyright 2016-2024 The OpenLDAP Foundation.
## All rights reserved.
##
## Redistribution and use in source and binary forms, with or without
diff --git a/contrib/slapd-modules/datamorph/tests/scripts/test005-modify b/contrib/slapd-modules/datamorph/tests/scripts/test005-modify
index 94cf1c0..e911ddb 100755
--- a/contrib/slapd-modules/datamorph/tests/scripts/test005-modify
+++ b/contrib/slapd-modules/datamorph/tests/scripts/test005-modify
@@ -2,7 +2,7 @@
## $OpenLDAP$
## This work is part of OpenLDAP Software <http://www.openldap.org/>.
##
-## Copyright 2016-2022 The OpenLDAP Foundation.
+## Copyright 2016-2024 The OpenLDAP Foundation.
## All rights reserved.
##
## Redistribution and use in source and binary forms, with or without
diff --git a/contrib/slapd-modules/datamorph/tests/scripts/test006-modrdn b/contrib/slapd-modules/datamorph/tests/scripts/test006-modrdn
index 56e2f2a..1134e74 100755
--- a/contrib/slapd-modules/datamorph/tests/scripts/test006-modrdn
+++ b/contrib/slapd-modules/datamorph/tests/scripts/test006-modrdn
@@ -2,7 +2,7 @@
## $OpenLDAP$
## This work is part of OpenLDAP Software <http://www.openldap.org/>.
##
-## Copyright 2016-2022 The OpenLDAP Foundation.
+## Copyright 2016-2024 The OpenLDAP Foundation.
## All rights reserved.
##
## Redistribution and use in source and binary forms, with or without
diff --git a/contrib/slapd-modules/datamorph/tests/scripts/test007-transformed-replication b/contrib/slapd-modules/datamorph/tests/scripts/test007-transformed-replication
index 5b2ea4d..dba9d02 100755
--- a/contrib/slapd-modules/datamorph/tests/scripts/test007-transformed-replication
+++ b/contrib/slapd-modules/datamorph/tests/scripts/test007-transformed-replication
@@ -2,7 +2,7 @@
## $OpenLDAP$
## This work is part of OpenLDAP Software <http://www.openldap.org/>.
##
-## Copyright 2016-2022 The OpenLDAP Foundation.
+## Copyright 2016-2024 The OpenLDAP Foundation.
## All rights reserved.
##
## Redistribution and use in source and binary forms, with or without
diff --git a/contrib/slapd-modules/datamorph/tests/scripts/test008-ignored-replication b/contrib/slapd-modules/datamorph/tests/scripts/test008-ignored-replication
index a1fcb71..57472ac 100755
--- a/contrib/slapd-modules/datamorph/tests/scripts/test008-ignored-replication
+++ b/contrib/slapd-modules/datamorph/tests/scripts/test008-ignored-replication
@@ -2,7 +2,7 @@
## $OpenLDAP$
## This work is part of OpenLDAP Software <http://www.openldap.org/>.
##
-## Copyright 2016-2022 The OpenLDAP Foundation.
+## Copyright 2016-2024 The OpenLDAP Foundation.
## All rights reserved.
##
## Redistribution and use in source and binary forms, with or without
diff --git a/contrib/slapd-modules/denyop/denyop.c b/contrib/slapd-modules/denyop/denyop.c
index dd3e13c..1578b82 100644
--- a/contrib/slapd-modules/denyop/denyop.c
+++ b/contrib/slapd-modules/denyop/denyop.c
@@ -2,7 +2,7 @@
/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
- * Copyright 2004-2022 The OpenLDAP Foundation.
+ * Copyright 2004-2024 The OpenLDAP Foundation.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/contrib/slapd-modules/dsaschema/README b/contrib/slapd-modules/dsaschema/README
index fdf932e..e2cc984 100644
--- a/contrib/slapd-modules/dsaschema/README
+++ b/contrib/slapd-modules/dsaschema/README
@@ -1,4 +1,4 @@
-Copyright 2004-2022 The OpenLDAP Foundation. All rights reserved.
+Copyright 2004-2024 The OpenLDAP Foundation. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted only as authorized by the OpenLDAP
diff --git a/contrib/slapd-modules/dsaschema/dsaschema.c b/contrib/slapd-modules/dsaschema/dsaschema.c
index 31defae..be7a7cb 100644
--- a/contrib/slapd-modules/dsaschema/dsaschema.c
+++ b/contrib/slapd-modules/dsaschema/dsaschema.c
@@ -2,7 +2,7 @@
/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
- * Copyright 2004-2022 The OpenLDAP Foundation.
+ * Copyright 2004-2024 The OpenLDAP Foundation.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/contrib/slapd-modules/dupent/Makefile b/contrib/slapd-modules/dupent/Makefile
index 5ce776d..0590674 100644
--- a/contrib/slapd-modules/dupent/Makefile
+++ b/contrib/slapd-modules/dupent/Makefile
@@ -1,7 +1,7 @@
# $OpenLDAP$
# This work is part of OpenLDAP Software <http://www.openldap.org/>.
#
-# Copyright 1998-2022 The OpenLDAP Foundation.
+# Copyright 1998-2024 The OpenLDAP Foundation.
# Copyright 2004 Howard Chu, Symas Corp. All Rights Reserved.
#
# Redistribution and use in source and binary forms, with or without
diff --git a/contrib/slapd-modules/dupent/dupent.c b/contrib/slapd-modules/dupent/dupent.c
index 89ad622..e4122c2 100644
--- a/contrib/slapd-modules/dupent/dupent.c
+++ b/contrib/slapd-modules/dupent/dupent.c
@@ -2,7 +2,7 @@
/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
- * Copyright 2006-2022 The OpenLDAP Foundation.
+ * Copyright 2006-2024 The OpenLDAP Foundation.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/contrib/slapd-modules/emptyds/Makefile b/contrib/slapd-modules/emptyds/Makefile
index d6e69cd..5fa1fc6 100644
--- a/contrib/slapd-modules/emptyds/Makefile
+++ b/contrib/slapd-modules/emptyds/Makefile
@@ -1,7 +1,7 @@
# $OpenLDAP$
# This work is part of OpenLDAP Software <http://www.openldap.org/>.
#
-# Copyright 1998-2022 The OpenLDAP Foundation.
+# Copyright 1998-2024 The OpenLDAP Foundation.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted only as authorized by the OpenLDAP
diff --git a/contrib/slapd-modules/emptyds/README b/contrib/slapd-modules/emptyds/README
index 914d4e7..9789a2a 100644
--- a/contrib/slapd-modules/emptyds/README
+++ b/contrib/slapd-modules/emptyds/README
@@ -53,7 +53,7 @@ CAVEATS
the last overlay configured so it will run before the other overlays.
---
-Copyright 2014-2022 The OpenLDAP Foundation.
+Copyright 2014-2024 The OpenLDAP Foundation.
Portions Copyright (C) DAASI International GmbH, Tamim Ziai.
All rights reserved.
diff --git a/contrib/slapd-modules/emptyds/emptyds.c b/contrib/slapd-modules/emptyds/emptyds.c
index bb3202e..d26c730 100644
--- a/contrib/slapd-modules/emptyds/emptyds.c
+++ b/contrib/slapd-modules/emptyds/emptyds.c
@@ -2,7 +2,7 @@
/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
- * Copyright 2014-2022 The OpenLDAP Foundation.
+ * Copyright 2014-2024 The OpenLDAP Foundation.
* Portions Copyright (C) 2014 DAASI International GmbH, Tamim Ziai.
* Portions Copyright (C) 2022 Ondřej Kuzník, Symas Corporation.
* All rights reserved.
diff --git a/contrib/slapd-modules/emptyds/slapo-emptyds.5 b/contrib/slapd-modules/emptyds/slapo-emptyds.5
index 75b1059..53a2b0e 100644
--- a/contrib/slapd-modules/emptyds/slapo-emptyds.5
+++ b/contrib/slapd-modules/emptyds/slapo-emptyds.5
@@ -1,5 +1,5 @@
.TH SLAPO-EDS 5 "RELEASEDATE" "OpenLDAP LDVERSION"
-.\" Copyright 2022 The OpenLDAP Foundation, All Rights Reserved.
+.\" Copyright 2022-2024 The OpenLDAP Foundation, All Rights Reserved.
.\" Copyright 2018 Tamim Ziai
.\" Copying restrictions apply. See COPYRIGHT/LICENSE.
.\" $OpenLDAP$
diff --git a/contrib/slapd-modules/emptyds/tests/data/emptyds.conf b/contrib/slapd-modules/emptyds/tests/data/emptyds.conf
index 221fe81..4b7c87b 100644
--- a/contrib/slapd-modules/emptyds/tests/data/emptyds.conf
+++ b/contrib/slapd-modules/emptyds/tests/data/emptyds.conf
@@ -2,7 +2,7 @@
# $OpenLDAP$
## This work is part of OpenLDAP Software <http://www.openldap.org/>.
##
-## Copyright 1998-2022 The OpenLDAP Foundation.
+## Copyright 1998-2024 The OpenLDAP Foundation.
## All rights reserved.
##
## Redistribution and use in source and binary forms, with or without
diff --git a/contrib/slapd-modules/emptyds/tests/run b/contrib/slapd-modules/emptyds/tests/run
index 239bff7..9f24063 100755
--- a/contrib/slapd-modules/emptyds/tests/run
+++ b/contrib/slapd-modules/emptyds/tests/run
@@ -2,7 +2,7 @@
## $OpenLDAP$
## This work is part of OpenLDAP Software <http://www.openldap.org/>.
##
-## Copyright 1998-2022 The OpenLDAP Foundation.
+## Copyright 1998-2024 The OpenLDAP Foundation.
## All rights reserved.
##
## Redistribution and use in source and binary forms, with or without
diff --git a/contrib/slapd-modules/emptyds/tests/scripts/all b/contrib/slapd-modules/emptyds/tests/scripts/all
index a5c1774..7d9c8e3 100755
--- a/contrib/slapd-modules/emptyds/tests/scripts/all
+++ b/contrib/slapd-modules/emptyds/tests/scripts/all
@@ -2,7 +2,7 @@
# $OpenLDAP$
## This work is part of OpenLDAP Software <http://www.openldap.org/>.
##
-## Copyright 1998-2022 The OpenLDAP Foundation.
+## Copyright 1998-2024 The OpenLDAP Foundation.
## All rights reserved.
##
## Redistribution and use in source and binary forms, with or without
diff --git a/contrib/slapd-modules/emptyds/tests/scripts/test001-emptyds b/contrib/slapd-modules/emptyds/tests/scripts/test001-emptyds
index b8d715a..09d2c20 100755
--- a/contrib/slapd-modules/emptyds/tests/scripts/test001-emptyds
+++ b/contrib/slapd-modules/emptyds/tests/scripts/test001-emptyds
@@ -2,7 +2,7 @@
# $OpenLDAP$
## This work is part of OpenLDAP Software <http://www.openldap.org/>.
##
-## Copyright 2022 The OpenLDAP Foundation.
+## Copyright 2022-2024 The OpenLDAP Foundation.
## All rights reserved.
##
## Redistribution and use in source and binary forms, with or without
diff --git a/contrib/slapd-modules/kinit/README b/contrib/slapd-modules/kinit/README
index 7e3ebe8..4fd16ec 100644
--- a/contrib/slapd-modules/kinit/README
+++ b/contrib/slapd-modules/kinit/README
@@ -25,7 +25,7 @@ header files and libraries are installed on your system:
---
This work is part of OpenLDAP Software <http://www.openldap.org/>.
-Copyright 2010-2022 The OpenLDAP Foundation.
+Copyright 2010-2024 The OpenLDAP Foundation.
Redistribution and use in source and binary forms, with or without
modification, are permitted only as authorized by the OpenLDAP
diff --git a/contrib/slapd-modules/kinit/kinit.c b/contrib/slapd-modules/kinit/kinit.c
index 630b6bf..1fdb8b9 100644
--- a/contrib/slapd-modules/kinit/kinit.c
+++ b/contrib/slapd-modules/kinit/kinit.c
@@ -1,7 +1,7 @@
/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
- * Copyright 2010-2022 The OpenLDAP Foundation.
+ * Copyright 2010-2024 The OpenLDAP Foundation.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/contrib/slapd-modules/lastmod/lastmod.c b/contrib/slapd-modules/lastmod/lastmod.c
index 0d2956a..0f19755 100644
--- a/contrib/slapd-modules/lastmod/lastmod.c
+++ b/contrib/slapd-modules/lastmod/lastmod.c
@@ -2,7 +2,7 @@
/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
- * Copyright 2004-2022 The OpenLDAP Foundation.
+ * Copyright 2004-2024 The OpenLDAP Foundation.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/contrib/slapd-modules/lastmod/slapo-lastmod.5 b/contrib/slapd-modules/lastmod/slapo-lastmod.5
index ea0ca23..7b161dc 100644
--- a/contrib/slapd-modules/lastmod/slapo-lastmod.5
+++ b/contrib/slapd-modules/lastmod/slapo-lastmod.5
@@ -1,4 +1,4 @@
-.\" Copyright 2004-2022 The OpenLDAP Foundation All Rights Reserved.
+.\" Copyright 2004-2024 The OpenLDAP Foundation All Rights Reserved.
.\" Copying restrictions apply. See COPYRIGHT/LICENSE.
.TH SLAPO_LASTMOD 5 "RELEASEDATE" "OpenLDAP LDVERSION"
.SH NAME
diff --git a/contrib/slapd-modules/noopsrch/Makefile b/contrib/slapd-modules/noopsrch/Makefile
index 3d6e150..26f40f0 100644
--- a/contrib/slapd-modules/noopsrch/Makefile
+++ b/contrib/slapd-modules/noopsrch/Makefile
@@ -1,7 +1,7 @@
# $OpenLDAP$
# This work is part of OpenLDAP Software <http://www.openldap.org/>.
#
-# Copyright 1998-2022 The OpenLDAP Foundation.
+# Copyright 1998-2024 The OpenLDAP Foundation.
# Copyright 2004 Howard Chu, Symas Corp. All Rights Reserved.
#
# Redistribution and use in source and binary forms, with or without
diff --git a/contrib/slapd-modules/noopsrch/noopsrch.c b/contrib/slapd-modules/noopsrch/noopsrch.c
index 24f0f53..53b929b 100644
--- a/contrib/slapd-modules/noopsrch/noopsrch.c
+++ b/contrib/slapd-modules/noopsrch/noopsrch.c
@@ -2,7 +2,7 @@
/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
- * Copyright 2010-2022 The OpenLDAP Foundation.
+ * Copyright 2010-2024 The OpenLDAP Foundation.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/contrib/slapd-modules/nops/nops.c b/contrib/slapd-modules/nops/nops.c
index 6dffb6b..37d96d0 100644
--- a/contrib/slapd-modules/nops/nops.c
+++ b/contrib/slapd-modules/nops/nops.c
@@ -2,7 +2,7 @@
/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
- * Copyright 2008-2022 The OpenLDAP Foundation.
+ * Copyright 2008-2024 The OpenLDAP Foundation.
* Copyright 2008 Emmanuel Dreyfus.
* All rights reserved.
*
diff --git a/contrib/slapd-modules/nssov/Makefile b/contrib/slapd-modules/nssov/Makefile
index 13987c2..1f47d1a 100644
--- a/contrib/slapd-modules/nssov/Makefile
+++ b/contrib/slapd-modules/nssov/Makefile
@@ -1,7 +1,7 @@
# $OpenLDAP$
# This work is part of OpenLDAP Software <http://www.openldap.org/>.
#
-# Copyright 2008-2022 The OpenLDAP Foundation.
+# Copyright 2008-2024 The OpenLDAP Foundation.
# Portions Copyright 2008 Howard Chu, Symas Corp. All Rights Reserved.
#
# Redistribution and use in source and binary forms, with or without
diff --git a/contrib/slapd-modules/nssov/README b/contrib/slapd-modules/nssov/README
index af8631e..c768a10 100644
--- a/contrib/slapd-modules/nssov/README
+++ b/contrib/slapd-modules/nssov/README
@@ -121,7 +121,7 @@ in the server for the given user.
---
This work is part of OpenLDAP Software <http://www.openldap.org/>.
-Copyright 1998-2022 The OpenLDAP Foundation.
+Copyright 1998-2024 The OpenLDAP Foundation.
Portions Copyright 2008-2009 Howard Chu, Symas Corp. All rights reserved.
Redistribution and use in source and binary forms, with or without
diff --git a/contrib/slapd-modules/nssov/alias.c b/contrib/slapd-modules/nssov/alias.c
index ae131db..7544a20 100644
--- a/contrib/slapd-modules/nssov/alias.c
+++ b/contrib/slapd-modules/nssov/alias.c
@@ -2,7 +2,7 @@
/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
- * Copyright 2008-2022 The OpenLDAP Foundation.
+ * Copyright 2008-2024 The OpenLDAP Foundation.
* Portions Copyright 2008 by Howard Chu, Symas Corp.
* All rights reserved.
*
diff --git a/contrib/slapd-modules/nssov/ether.c b/contrib/slapd-modules/nssov/ether.c
index cb18f1b..df8ca07 100644
--- a/contrib/slapd-modules/nssov/ether.c
+++ b/contrib/slapd-modules/nssov/ether.c
@@ -2,7 +2,7 @@
/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
- * Copyright 2008-2022 The OpenLDAP Foundation.
+ * Copyright 2008-2024 The OpenLDAP Foundation.
* Copyright 2008 by Howard Chu, Symas Corp.
* All rights reserved.
*
diff --git a/contrib/slapd-modules/nssov/group.c b/contrib/slapd-modules/nssov/group.c
index 1d93451..f8e4c65 100644
--- a/contrib/slapd-modules/nssov/group.c
+++ b/contrib/slapd-modules/nssov/group.c
@@ -2,7 +2,7 @@
/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
- * Copyright 2008-2022 The OpenLDAP Foundation.
+ * Copyright 2008-2024 The OpenLDAP Foundation.
* Portions Copyright 2008-2009 by Howard Chu, Symas Corp.
* All rights reserved.
*
diff --git a/contrib/slapd-modules/nssov/host.c b/contrib/slapd-modules/nssov/host.c
index 008b454..2118acb 100644
--- a/contrib/slapd-modules/nssov/host.c
+++ b/contrib/slapd-modules/nssov/host.c
@@ -2,7 +2,7 @@
/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
- * Copyright 2008-2022 The OpenLDAP Foundation.
+ * Copyright 2008-2024 The OpenLDAP Foundation.
* Portions Copyright 2008 by Howard Chu, Symas Corp.
* All rights reserved.
*
diff --git a/contrib/slapd-modules/nssov/netgroup.c b/contrib/slapd-modules/nssov/netgroup.c
index 7211a9a..214058d 100644
--- a/contrib/slapd-modules/nssov/netgroup.c
+++ b/contrib/slapd-modules/nssov/netgroup.c
@@ -2,7 +2,7 @@
/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
- * Copyright 2008-2022 The OpenLDAP Foundation.
+ * Copyright 2008-2024 The OpenLDAP Foundation.
* Portions Copyright 2008 by Howard Chu, Symas Corp.
* All rights reserved.
*
diff --git a/contrib/slapd-modules/nssov/network.c b/contrib/slapd-modules/nssov/network.c
index 0f67fa8..8a4797b 100644
--- a/contrib/slapd-modules/nssov/network.c
+++ b/contrib/slapd-modules/nssov/network.c
@@ -2,7 +2,7 @@
/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
- * Copyright 2008-2022 The OpenLDAP Foundation.
+ * Copyright 2008-2024 The OpenLDAP Foundation.
* Portions Copyright 2008 by Howard Chu, Symas Corp.
* All rights reserved.
*
diff --git a/contrib/slapd-modules/nssov/nssov.c b/contrib/slapd-modules/nssov/nssov.c
index c8e4187..09adf80 100644
--- a/contrib/slapd-modules/nssov/nssov.c
+++ b/contrib/slapd-modules/nssov/nssov.c
@@ -2,7 +2,7 @@
/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
- * Copyright 2008-2022 The OpenLDAP Foundation.
+ * Copyright 2008-2024 The OpenLDAP Foundation.
* Portions Copyright 2008 by Howard Chu, Symas Corp.
* Portions Copyright 2013 by Ted C. Cheng, Symas Corp.
* All rights reserved.
diff --git a/contrib/slapd-modules/nssov/nssov.h b/contrib/slapd-modules/nssov/nssov.h
index ce1ecd7..acbaa55 100644
--- a/contrib/slapd-modules/nssov/nssov.h
+++ b/contrib/slapd-modules/nssov/nssov.h
@@ -2,7 +2,7 @@
/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
- * Copyright 2008-2022 The OpenLDAP Foundation.
+ * Copyright 2008-2024 The OpenLDAP Foundation.
* Portions Copyright 2008 Howard Chu.
* Portions Copyright 2013 Ted C. Cheng, Symas Corp.
* All rights reserved.
diff --git a/contrib/slapd-modules/nssov/pam.c b/contrib/slapd-modules/nssov/pam.c
index 1d416c7..304053d 100644
--- a/contrib/slapd-modules/nssov/pam.c
+++ b/contrib/slapd-modules/nssov/pam.c
@@ -2,7 +2,7 @@
/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
- * Copyright 2008-2022 The OpenLDAP Foundation.
+ * Copyright 2008-2024 The OpenLDAP Foundation.
* Portions Copyright 2008 by Howard Chu, Symas Corp.
* Portions Copyright 2013 by Ted C. Cheng, Symas Corp.
* All rights reserved.
diff --git a/contrib/slapd-modules/nssov/passwd.c b/contrib/slapd-modules/nssov/passwd.c
index 137106d..dd9d9b0 100644
--- a/contrib/slapd-modules/nssov/passwd.c
+++ b/contrib/slapd-modules/nssov/passwd.c
@@ -2,7 +2,7 @@
/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
- * Copyright 2008-2022 The OpenLDAP Foundation.
+ * Copyright 2008-2024 The OpenLDAP Foundation.
* Portions Copyright 2008 by Howard Chu, Symas Corp.
* All rights reserved.
*
diff --git a/contrib/slapd-modules/nssov/protocol.c b/contrib/slapd-modules/nssov/protocol.c
index 1d131ca..4202046 100644
--- a/contrib/slapd-modules/nssov/protocol.c
+++ b/contrib/slapd-modules/nssov/protocol.c
@@ -2,7 +2,7 @@
/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
- * Copyright 2008-2022 The OpenLDAP Foundation.
+ * Copyright 2008-2024 The OpenLDAP Foundation.
* Portions Copyright 2008 by Howard Chu, Symas Corp.
* All rights reserved.
*
diff --git a/contrib/slapd-modules/nssov/rpc.c b/contrib/slapd-modules/nssov/rpc.c
index 7d2045f..79821bb 100644
--- a/contrib/slapd-modules/nssov/rpc.c
+++ b/contrib/slapd-modules/nssov/rpc.c
@@ -2,7 +2,7 @@
/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
- * Copyright 2008-2022 The OpenLDAP Foundation.
+ * Copyright 2008-2024 The OpenLDAP Foundation.
* Portions Copyright 2008 by Howard Chu, Symas Corp.
* All rights reserved.
*
diff --git a/contrib/slapd-modules/nssov/service.c b/contrib/slapd-modules/nssov/service.c
index d3704e4..d7c8051 100644
--- a/contrib/slapd-modules/nssov/service.c
+++ b/contrib/slapd-modules/nssov/service.c
@@ -2,7 +2,7 @@
/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
- * Copyright 2008-2022 The OpenLDAP Foundation.
+ * Copyright 2008-2024 The OpenLDAP Foundation.
* Portions Copyright 2008 by Howard Chu, Symas Corp.
* All rights reserved.
*
diff --git a/contrib/slapd-modules/nssov/shadow.c b/contrib/slapd-modules/nssov/shadow.c
index 477ce50..e69f22b 100644
--- a/contrib/slapd-modules/nssov/shadow.c
+++ b/contrib/slapd-modules/nssov/shadow.c
@@ -2,7 +2,7 @@
/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
- * Copyright 2008-2022 The OpenLDAP Foundation.
+ * Copyright 2008-2024 The OpenLDAP Foundation.
* Portions Copyright 2008 by Howard Chu, Symas Corp.
* All rights reserved.
*
diff --git a/contrib/slapd-modules/nssov/slapo-nssov.5 b/contrib/slapd-modules/nssov/slapo-nssov.5
index 6128de9..43ff078 100644
--- a/contrib/slapd-modules/nssov/slapo-nssov.5
+++ b/contrib/slapd-modules/nssov/slapo-nssov.5
@@ -1,5 +1,5 @@
.TH SLAPO-NSSOV 5 "RELEASEDATE" "OpenLDAP LDVERSION"
-.\" Copyright 1998-2022 The OpenLDAP Foundation, All Rights Reserved.
+.\" Copyright 1998-2024 The OpenLDAP Foundation, All Rights Reserved.
.\" Copying restrictions apply. See the COPYRIGHT file.
.\" $OpenLDAP$
.SH NAME
diff --git a/contrib/slapd-modules/passwd/README b/contrib/slapd-modules/passwd/README
index 069555f..2aa029e 100644
--- a/contrib/slapd-modules/passwd/README
+++ b/contrib/slapd-modules/passwd/README
@@ -56,7 +56,7 @@ gcc -shared -I../../../include -Wall -g -o pw-apr1.so apr1.c
---
This work is part of OpenLDAP Software <http://www.openldap.org/>.
-Copyright 2004-2022 The OpenLDAP Foundation.
+Copyright 2004-2024 The OpenLDAP Foundation.
All rights reserved.
Redistribution and use in source and binary forms, with or without
diff --git a/contrib/slapd-modules/passwd/kerberos.c b/contrib/slapd-modules/passwd/kerberos.c
index bebcbd0..6471bb5 100644
--- a/contrib/slapd-modules/passwd/kerberos.c
+++ b/contrib/slapd-modules/passwd/kerberos.c
@@ -1,7 +1,7 @@
/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
- * Copyright 1998-2022 The OpenLDAP Foundation.
+ * Copyright 1998-2024 The OpenLDAP Foundation.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/contrib/slapd-modules/passwd/netscape.c b/contrib/slapd-modules/passwd/netscape.c
index 8e2de7b..eb902a8 100644
--- a/contrib/slapd-modules/passwd/netscape.c
+++ b/contrib/slapd-modules/passwd/netscape.c
@@ -1,7 +1,7 @@
/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
- * Copyright 1998-2022 The OpenLDAP Foundation.
+ * Copyright 1998-2024 The OpenLDAP Foundation.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/contrib/slapd-modules/passwd/pbkdf2/README b/contrib/slapd-modules/passwd/pbkdf2/README
index d4d99d2..df27fae 100644
--- a/contrib/slapd-modules/passwd/pbkdf2/README
+++ b/contrib/slapd-modules/passwd/pbkdf2/README
@@ -84,7 +84,7 @@ You can specify -DSLAPD_PBKDF2_DEBUG flag for debugging.
# License
This work is part of OpenLDAP Software <http://www.openldap.org/>.
-Copyright 2009-2022 The OpenLDAP Foundation.
+Copyright 2009-2024 The OpenLDAP Foundation.
All rights reserved.
Redistribution and use in source and binary forms, with or without
diff --git a/contrib/slapd-modules/passwd/pbkdf2/pw-pbkdf2.c b/contrib/slapd-modules/passwd/pbkdf2/pw-pbkdf2.c
index 1cc2770..696a6cb 100644
--- a/contrib/slapd-modules/passwd/pbkdf2/pw-pbkdf2.c
+++ b/contrib/slapd-modules/passwd/pbkdf2/pw-pbkdf2.c
@@ -1,7 +1,7 @@
/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
- * Copyright 2009-2022 The OpenLDAP Foundation.
+ * Copyright 2009-2024 The OpenLDAP Foundation.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/contrib/slapd-modules/passwd/pbkdf2/slapd-pw-pbkdf2.5 b/contrib/slapd-modules/passwd/pbkdf2/slapd-pw-pbkdf2.5
index 3bacf62..12c1914 100644
--- a/contrib/slapd-modules/passwd/pbkdf2/slapd-pw-pbkdf2.5
+++ b/contrib/slapd-modules/passwd/pbkdf2/slapd-pw-pbkdf2.5
@@ -1,5 +1,5 @@
.TH SLAPD-PW-PBKDF2 5 "RELEASEDATE" "OpenLDAP LDVERSION"
-.\" Copyright 2015-2022 The OpenLDAP Foundation All Rights Reserved.
+.\" Copyright 2015-2024 The OpenLDAP Foundation All Rights Reserved.
.\" Copying restrictions apply. See COPYRIGHT/LICENSE.
.\" $OpenLDAP$
.SH NAME
diff --git a/contrib/slapd-modules/passwd/radius.c b/contrib/slapd-modules/passwd/radius.c
index 8474bf5..d6c6d0a 100644
--- a/contrib/slapd-modules/passwd/radius.c
+++ b/contrib/slapd-modules/passwd/radius.c
@@ -1,7 +1,7 @@
/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
- * Copyright 1998-2022 The OpenLDAP Foundation.
+ * Copyright 1998-2024 The OpenLDAP Foundation.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/contrib/slapd-modules/passwd/sha2/README b/contrib/slapd-modules/passwd/sha2/README
index bab1dcd..cf8d5ee 100644
--- a/contrib/slapd-modules/passwd/sha2/README
+++ b/contrib/slapd-modules/passwd/sha2/README
@@ -124,7 +124,7 @@ conn=0 fd=12 closed (connection lost)
This work is part of OpenLDAP Software <http://www.openldap.org/>.
-Copyright 2009-2022 The OpenLDAP Foundation.
+Copyright 2009-2024 The OpenLDAP Foundation.
All rights reserved.
Redistribution and use in source and binary forms, with or without
diff --git a/contrib/slapd-modules/passwd/sha2/slapd-pw-sha2.5 b/contrib/slapd-modules/passwd/sha2/slapd-pw-sha2.5
index f700b52..d5ef2cc 100644
--- a/contrib/slapd-modules/passwd/sha2/slapd-pw-sha2.5
+++ b/contrib/slapd-modules/passwd/sha2/slapd-pw-sha2.5
@@ -1,5 +1,5 @@
.TH SLAPD-PW-SHA2 5 "RELEASEDATE" "OpenLDAP LDVERSION"
-.\" Copyright 2015-2022 The OpenLDAP Foundation All Rights Reserved.
+.\" Copyright 2015-2024 The OpenLDAP Foundation All Rights Reserved.
.\" Copying restrictions apply. See COPYRIGHT/LICENSE.
.\" $OpenLDAP$
.SH NAME
diff --git a/contrib/slapd-modules/passwd/sha2/slapd-sha2.c b/contrib/slapd-modules/passwd/sha2/slapd-sha2.c
index d67afda..dfa0278 100644
--- a/contrib/slapd-modules/passwd/sha2/slapd-sha2.c
+++ b/contrib/slapd-modules/passwd/sha2/slapd-sha2.c
@@ -1,7 +1,7 @@
/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
- * Copyright 2009-2022 The OpenLDAP Foundation.
+ * Copyright 2009-2024 The OpenLDAP Foundation.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/contrib/slapd-modules/passwd/slapd-pw-radius.5 b/contrib/slapd-modules/passwd/slapd-pw-radius.5
index 9a74847..aee6768 100644
--- a/contrib/slapd-modules/passwd/slapd-pw-radius.5
+++ b/contrib/slapd-modules/passwd/slapd-pw-radius.5
@@ -1,5 +1,5 @@
.TH SLAPD-PW-RADIUS 5 "RELEASEDATE" "OpenLDAP LDVERSION"
-.\" Copyright 2015-2022 The OpenLDAP Foundation All Rights Reserved.
+.\" Copyright 2015-2024 The OpenLDAP Foundation All Rights Reserved.
.\" Copying restrictions apply. See COPYRIGHT/LICENSE.
.\" $OpenLDAP$
.SH NAME
diff --git a/contrib/slapd-modules/passwd/totp/README b/contrib/slapd-modules/passwd/totp/README
index 95d9c8b..7578d16 100644
--- a/contrib/slapd-modules/passwd/totp/README
+++ b/contrib/slapd-modules/passwd/totp/README
@@ -73,7 +73,7 @@ The TOTP1 algorithm is compatible with Google Authenticator.
This work is part of OpenLDAP Software <http://www.openldap.org/>.
-Copyright 2015-2022 The OpenLDAP Foundation.
+Copyright 2015-2024 The OpenLDAP Foundation.
Portions Copyright 2015 by Howard Chu, Symas Corp.
All rights reserved.
diff --git a/contrib/slapd-modules/passwd/totp/slapd-totp.c b/contrib/slapd-modules/passwd/totp/slapd-totp.c
index 08bd4eb..ba7bcf0 100644
--- a/contrib/slapd-modules/passwd/totp/slapd-totp.c
+++ b/contrib/slapd-modules/passwd/totp/slapd-totp.c
@@ -2,7 +2,7 @@
/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
- * Copyright 2015-2022 The OpenLDAP Foundation.
+ * Copyright 2015-2024 The OpenLDAP Foundation.
* Portions Copyright 2015 by Howard Chu, Symas Corp.
* All rights reserved.
*
diff --git a/contrib/slapd-modules/passwd/totp/slapo-totp.5 b/contrib/slapd-modules/passwd/totp/slapo-totp.5
index 7c99bf1..3ef20d8 100644
--- a/contrib/slapd-modules/passwd/totp/slapo-totp.5
+++ b/contrib/slapd-modules/passwd/totp/slapo-totp.5
@@ -1,5 +1,5 @@
.TH PW-TOTP 5 "2015/7/2" "PW-TOTP"
-.\" Copyright 2015-2022 The OpenLDAP Foundation.
+.\" Copyright 2015-2024 The OpenLDAP Foundation.
.\" Portions Copyright 2015 by Howard Chu, Symas Corp. All rights reserved.
.\" Copying restrictions apply. See COPYRIGHT/LICENSE.
.SH NAME
diff --git a/contrib/slapd-modules/proxyOld/Makefile b/contrib/slapd-modules/proxyOld/Makefile
index 14545f2..abc4e87 100644
--- a/contrib/slapd-modules/proxyOld/Makefile
+++ b/contrib/slapd-modules/proxyOld/Makefile
@@ -1,7 +1,7 @@
# $OpenLDAP$
# This work is part of OpenLDAP Software <http://www.openldap.org/>.
#
-# Copyright 2005-2022 The OpenLDAP Foundation.
+# Copyright 2005-2024 The OpenLDAP Foundation.
# Portions Copyright 2005 Howard Chu, Symas Corp. All Rights Reserved.
#
# Redistribution and use in source and binary forms, with or without
diff --git a/contrib/slapd-modules/proxyOld/README b/contrib/slapd-modules/proxyOld/README
index bc5e4ab..a094e75 100644
--- a/contrib/slapd-modules/proxyOld/README
+++ b/contrib/slapd-modules/proxyOld/README
@@ -18,7 +18,7 @@ This code only works as a dynamically loaded module.
---
This work is part of OpenLDAP Software <http://www.openldap.org/>.
-Copyright 1998-2022 The OpenLDAP Foundation.
+Copyright 1998-2024 The OpenLDAP Foundation.
Portions Copyright 2005 Howard Chu, Symas Corp. All rights reserved.
Redistribution and use in source and binary forms, with or without
diff --git a/contrib/slapd-modules/proxyOld/proxyOld.c b/contrib/slapd-modules/proxyOld/proxyOld.c
index 2da6888..7baad31 100644
--- a/contrib/slapd-modules/proxyOld/proxyOld.c
+++ b/contrib/slapd-modules/proxyOld/proxyOld.c
@@ -2,7 +2,7 @@
/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
- * Copyright 2005-2022 The OpenLDAP Foundation.
+ * Copyright 2005-2024 The OpenLDAP Foundation.
* Portions Copyright 2005 by Howard Chu, Symas Corp.
* All rights reserved.
*
diff --git a/contrib/slapd-modules/rbac/rbac.c b/contrib/slapd-modules/rbac/rbac.c
index 5de641e..bc76dfc 100644
--- a/contrib/slapd-modules/rbac/rbac.c
+++ b/contrib/slapd-modules/rbac/rbac.c
@@ -2,7 +2,7 @@
/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
- * Copyright 2013-2022 The OpenLDAP Foundation.
+ * Copyright 2013-2024 The OpenLDAP Foundation.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/contrib/slapd-modules/rbac/rbac.h b/contrib/slapd-modules/rbac/rbac.h
index 4461236..7b929dc 100644
--- a/contrib/slapd-modules/rbac/rbac.h
+++ b/contrib/slapd-modules/rbac/rbac.h
@@ -2,7 +2,7 @@
/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
- * Copyright 1999-2022 The OpenLDAP Foundation.
+ * Copyright 1999-2024 The OpenLDAP Foundation.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/contrib/slapd-modules/samba4/Makefile b/contrib/slapd-modules/samba4/Makefile
index 634c061..5638316 100644
--- a/contrib/slapd-modules/samba4/Makefile
+++ b/contrib/slapd-modules/samba4/Makefile
@@ -1,7 +1,7 @@
# $OpenLDAP$
# This work is part of OpenLDAP Software <http://www.openldap.org/>.
#
-# Copyright 1998-2022 The OpenLDAP Foundation.
+# Copyright 1998-2024 The OpenLDAP Foundation.
# Copyright 2004 Howard Chu, Symas Corp. All Rights Reserved.
#
# Redistribution and use in source and binary forms, with or without
diff --git a/contrib/slapd-modules/samba4/README b/contrib/slapd-modules/samba4/README
index 65745b1..ab24a6b 100644
--- a/contrib/slapd-modules/samba4/README
+++ b/contrib/slapd-modules/samba4/README
@@ -60,7 +60,7 @@ to reference them.
---
This work is part of OpenLDAP Software <http://www.openldap.org/>.
-Copyright 2009-2022 The OpenLDAP Foundation.
+Copyright 2009-2024 The OpenLDAP Foundation.
Redistribution and use in source and binary forms, with or without
modification, are permitted only as authorized by the OpenLDAP
diff --git a/contrib/slapd-modules/samba4/pguid.c b/contrib/slapd-modules/samba4/pguid.c
index 4b0b066..a0deed8 100644
--- a/contrib/slapd-modules/samba4/pguid.c
+++ b/contrib/slapd-modules/samba4/pguid.c
@@ -2,7 +2,7 @@
/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
- * Copyright 1998-2022 The OpenLDAP Foundation.
+ * Copyright 1998-2024 The OpenLDAP Foundation.
* Portions Copyright 2008 Pierangelo Masarati.
* All rights reserved.
*
diff --git a/contrib/slapd-modules/samba4/rdnval.c b/contrib/slapd-modules/samba4/rdnval.c
index dfe0e47..dde491c 100644
--- a/contrib/slapd-modules/samba4/rdnval.c
+++ b/contrib/slapd-modules/samba4/rdnval.c
@@ -2,7 +2,7 @@
/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
- * Copyright 1998-2022 The OpenLDAP Foundation.
+ * Copyright 1998-2024 The OpenLDAP Foundation.
* Portions Copyright 2008 Pierangelo Masarati.
* All rights reserved.
*
diff --git a/contrib/slapd-modules/samba4/vernum.c b/contrib/slapd-modules/samba4/vernum.c
index d70dc92..52bb86c 100644
--- a/contrib/slapd-modules/samba4/vernum.c
+++ b/contrib/slapd-modules/samba4/vernum.c
@@ -2,7 +2,7 @@
/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
- * Copyright 1998-2022 The OpenLDAP Foundation.
+ * Copyright 1998-2024 The OpenLDAP Foundation.
* Portions Copyright 2008 Pierangelo Masarati.
* All rights reserved.
*
diff --git a/contrib/slapd-modules/smbk5pwd/Makefile b/contrib/slapd-modules/smbk5pwd/Makefile
index 76c8080..d21b738 100644
--- a/contrib/slapd-modules/smbk5pwd/Makefile
+++ b/contrib/slapd-modules/smbk5pwd/Makefile
@@ -1,7 +1,7 @@
# $OpenLDAP$
# This work is part of OpenLDAP Software <http://www.openldap.org/>.
#
-# Copyright 1998-2022 The OpenLDAP Foundation.
+# Copyright 1998-2024 The OpenLDAP Foundation.
# Copyright 2004 Howard Chu, Symas Corp. All Rights Reserved.
#
# Redistribution and use in source and binary forms, with or without
diff --git a/contrib/slapd-modules/smbk5pwd/README b/contrib/slapd-modules/smbk5pwd/README
index 2f02195..350086c 100644
--- a/contrib/slapd-modules/smbk5pwd/README
+++ b/contrib/slapd-modules/smbk5pwd/README
@@ -81,7 +81,7 @@ and add the relevant libraries to the main slapd link command.
---
This work is part of OpenLDAP Software <http://www.openldap.org/>.
-Copyright 2004-2022 The OpenLDAP Foundation.
+Copyright 2004-2024 The OpenLDAP Foundation.
Portions Copyright 2004-2005 Howard Chu, Symas Corp. All rights reserved.
Redistribution and use in source and binary forms, with or without
diff --git a/contrib/slapd-modules/smbk5pwd/slapo-smbk5pwd.5 b/contrib/slapd-modules/smbk5pwd/slapo-smbk5pwd.5
index c9a0162..631cde1 100644
--- a/contrib/slapd-modules/smbk5pwd/slapo-smbk5pwd.5
+++ b/contrib/slapd-modules/smbk5pwd/slapo-smbk5pwd.5
@@ -1,5 +1,5 @@
.TH SLAPO-SMBK5PWD 5 "RELEASEDATE" "OpenLDAP LDVERSION"
-.\" Copyright 2015-2022 The OpenLDAP Foundation All Rights Reserved.
+.\" Copyright 2015-2024 The OpenLDAP Foundation All Rights Reserved.
.\" Copying restrictions apply. See COPYRIGHT/LICENSE.
.\" $OpenLDAP$
.SH NAME
diff --git a/contrib/slapd-modules/smbk5pwd/smbk5pwd.c b/contrib/slapd-modules/smbk5pwd/smbk5pwd.c
index 642140d..a6dc933 100644
--- a/contrib/slapd-modules/smbk5pwd/smbk5pwd.c
+++ b/contrib/slapd-modules/smbk5pwd/smbk5pwd.c
@@ -2,7 +2,7 @@
/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
- * Copyright 2004-2022 The OpenLDAP Foundation.
+ * Copyright 2004-2024 The OpenLDAP Foundation.
* Portions Copyright 2004-2005 by Howard Chu, Symas Corp.
* All rights reserved.
*
@@ -45,6 +45,7 @@
#include <krb5.h>
#include <kadm5/admin.h>
#include <hdb.h>
+#include <kadm5/private.h>
#ifndef HDB_INTERFACE_VERSION
#define HDB_MASTER_KEY_SET master_key_set
diff --git a/contrib/slapd-modules/trace/trace.c b/contrib/slapd-modules/trace/trace.c
index 1e61025..6e3d219 100644
--- a/contrib/slapd-modules/trace/trace.c
+++ b/contrib/slapd-modules/trace/trace.c
@@ -2,7 +2,7 @@
/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
- * Copyright 2006-2022 The OpenLDAP Foundation.
+ * Copyright 2006-2024 The OpenLDAP Foundation.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/contrib/slapd-modules/usn/README b/contrib/slapd-modules/usn/README
index 3bfb096..16372f0 100644
--- a/contrib/slapd-modules/usn/README
+++ b/contrib/slapd-modules/usn/README
@@ -31,7 +31,7 @@ and add the relevant libraries to the main slapd link command.
---
This work is part of OpenLDAP Software <http://www.openldap.org/>.
-Copyright 2007-2022 The OpenLDAP Foundation.
+Copyright 2007-2024 The OpenLDAP Foundation.
Portions Copyright 2007 Howard Chu, Symas Corp. All rights reserved.
Redistribution and use in source and binary forms, with or without
diff --git a/contrib/slapd-modules/usn/usn.c b/contrib/slapd-modules/usn/usn.c
index abd6d13..8972e03 100644
--- a/contrib/slapd-modules/usn/usn.c
+++ b/contrib/slapd-modules/usn/usn.c
@@ -2,7 +2,7 @@
/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
- * Copyright 2007-2022 The OpenLDAP Foundation.
+ * Copyright 2007-2024 The OpenLDAP Foundation.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/contrib/slapd-modules/variant/Makefile b/contrib/slapd-modules/variant/Makefile
index 1be3f3e..9b9a93b 100644
--- a/contrib/slapd-modules/variant/Makefile
+++ b/contrib/slapd-modules/variant/Makefile
@@ -1,7 +1,7 @@
# $OpenLDAP$
# This work is part of OpenLDAP Software <http://www.openldap.org/>.
#
-# Copyright 1998-2022 The OpenLDAP Foundation.
+# Copyright 1998-2024 The OpenLDAP Foundation.
# Copyright 2017 Ondřej Kuzník, Symas Corp. All Rights Reserved.
#
# Redistribution and use in source and binary forms, with or without
diff --git a/contrib/slapd-modules/variant/tests/run b/contrib/slapd-modules/variant/tests/run
index 239bff7..9f24063 100755
--- a/contrib/slapd-modules/variant/tests/run
+++ b/contrib/slapd-modules/variant/tests/run
@@ -2,7 +2,7 @@
## $OpenLDAP$
## This work is part of OpenLDAP Software <http://www.openldap.org/>.
##
-## Copyright 1998-2022 The OpenLDAP Foundation.
+## Copyright 1998-2024 The OpenLDAP Foundation.
## All rights reserved.
##
## Redistribution and use in source and binary forms, with or without
diff --git a/contrib/slapd-modules/variant/tests/scripts/all b/contrib/slapd-modules/variant/tests/scripts/all
index a5c1774..7d9c8e3 100755
--- a/contrib/slapd-modules/variant/tests/scripts/all
+++ b/contrib/slapd-modules/variant/tests/scripts/all
@@ -2,7 +2,7 @@
# $OpenLDAP$
## This work is part of OpenLDAP Software <http://www.openldap.org/>.
##
-## Copyright 1998-2022 The OpenLDAP Foundation.
+## Copyright 1998-2024 The OpenLDAP Foundation.
## All rights reserved.
##
## Redistribution and use in source and binary forms, with or without
diff --git a/contrib/slapd-modules/variant/tests/scripts/common.sh b/contrib/slapd-modules/variant/tests/scripts/common.sh
index 3b155ad..789171d 100755
--- a/contrib/slapd-modules/variant/tests/scripts/common.sh
+++ b/contrib/slapd-modules/variant/tests/scripts/common.sh
@@ -2,7 +2,7 @@
## $OpenLDAP$
## This work is part of OpenLDAP Software <http://www.openldap.org/>.
##
-## Copyright 2016-2022 The OpenLDAP Foundation.
+## Copyright 2016-2024 The OpenLDAP Foundation.
## All rights reserved.
##
## Redistribution and use in source and binary forms, with or without
diff --git a/contrib/slapd-modules/variant/tests/scripts/test001-config b/contrib/slapd-modules/variant/tests/scripts/test001-config
index 7a5559f..1f9d984 100755
--- a/contrib/slapd-modules/variant/tests/scripts/test001-config
+++ b/contrib/slapd-modules/variant/tests/scripts/test001-config
@@ -2,7 +2,7 @@
## $OpenLDAP$
## This work is part of OpenLDAP Software <http://www.openldap.org/>.
##
-## Copyright 2016-2022 The OpenLDAP Foundation.
+## Copyright 2016-2024 The OpenLDAP Foundation.
## All rights reserved.
##
## Redistribution and use in source and binary forms, with or without
diff --git a/contrib/slapd-modules/variant/tests/scripts/test002-add-delete b/contrib/slapd-modules/variant/tests/scripts/test002-add-delete
index bd316b2..fc0903b 100755
--- a/contrib/slapd-modules/variant/tests/scripts/test002-add-delete
+++ b/contrib/slapd-modules/variant/tests/scripts/test002-add-delete
@@ -2,7 +2,7 @@
## $OpenLDAP$
## This work is part of OpenLDAP Software <http://www.openldap.org/>.
##
-## Copyright 2016-2022 The OpenLDAP Foundation.
+## Copyright 2016-2024 The OpenLDAP Foundation.
## All rights reserved.
##
## Redistribution and use in source and binary forms, with or without
diff --git a/contrib/slapd-modules/variant/tests/scripts/test003-search b/contrib/slapd-modules/variant/tests/scripts/test003-search
index 2284ab7..c213b4b 100755
--- a/contrib/slapd-modules/variant/tests/scripts/test003-search
+++ b/contrib/slapd-modules/variant/tests/scripts/test003-search
@@ -2,7 +2,7 @@
## $OpenLDAP$
## This work is part of OpenLDAP Software <http://www.openldap.org/>.
##
-## Copyright 2016-2022 The OpenLDAP Foundation.
+## Copyright 2016-2024 The OpenLDAP Foundation.
## All rights reserved.
##
## Redistribution and use in source and binary forms, with or without
diff --git a/contrib/slapd-modules/variant/tests/scripts/test004-compare b/contrib/slapd-modules/variant/tests/scripts/test004-compare
index c87d347..5bc9edb 100755
--- a/contrib/slapd-modules/variant/tests/scripts/test004-compare
+++ b/contrib/slapd-modules/variant/tests/scripts/test004-compare
@@ -2,7 +2,7 @@
## $OpenLDAP$
## This work is part of OpenLDAP Software <http://www.openldap.org/>.
##
-## Copyright 2016-2022 The OpenLDAP Foundation.
+## Copyright 2016-2024 The OpenLDAP Foundation.
## All rights reserved.
##
## Redistribution and use in source and binary forms, with or without
diff --git a/contrib/slapd-modules/variant/tests/scripts/test005-modify b/contrib/slapd-modules/variant/tests/scripts/test005-modify
index 4cbf289..f874fde 100755
--- a/contrib/slapd-modules/variant/tests/scripts/test005-modify
+++ b/contrib/slapd-modules/variant/tests/scripts/test005-modify
@@ -2,7 +2,7 @@
## $OpenLDAP$
## This work is part of OpenLDAP Software <http://www.openldap.org/>.
##
-## Copyright 2016-2022 The OpenLDAP Foundation.
+## Copyright 2016-2024 The OpenLDAP Foundation.
## All rights reserved.
##
## Redistribution and use in source and binary forms, with or without
diff --git a/contrib/slapd-modules/variant/tests/scripts/test006-acl b/contrib/slapd-modules/variant/tests/scripts/test006-acl
index 6b34fb8..d1a4f7c 100755
--- a/contrib/slapd-modules/variant/tests/scripts/test006-acl
+++ b/contrib/slapd-modules/variant/tests/scripts/test006-acl
@@ -2,7 +2,7 @@
## $OpenLDAP$
## This work is part of OpenLDAP Software <http://www.openldap.org/>.
##
-## Copyright 2016-2022 The OpenLDAP Foundation.
+## Copyright 2016-2024 The OpenLDAP Foundation.
## All rights reserved.
##
## Redistribution and use in source and binary forms, with or without
diff --git a/contrib/slapd-modules/variant/tests/scripts/test007-subtypes b/contrib/slapd-modules/variant/tests/scripts/test007-subtypes
index 177fc33..fc2377a 100755
--- a/contrib/slapd-modules/variant/tests/scripts/test007-subtypes
+++ b/contrib/slapd-modules/variant/tests/scripts/test007-subtypes
@@ -2,7 +2,7 @@
## $OpenLDAP$
## This work is part of OpenLDAP Software <http://www.openldap.org/>.
##
-## Copyright 2016-2022 The OpenLDAP Foundation.
+## Copyright 2016-2024 The OpenLDAP Foundation.
## All rights reserved.
##
## Redistribution and use in source and binary forms, with or without
diff --git a/contrib/slapd-modules/variant/tests/scripts/test008-variant-replication b/contrib/slapd-modules/variant/tests/scripts/test008-variant-replication
index 63e2d7e..06ca8dc 100755
--- a/contrib/slapd-modules/variant/tests/scripts/test008-variant-replication
+++ b/contrib/slapd-modules/variant/tests/scripts/test008-variant-replication
@@ -2,7 +2,7 @@
## $OpenLDAP$
## This work is part of OpenLDAP Software <http://www.openldap.org/>.
##
-## Copyright 2016-2022 The OpenLDAP Foundation.
+## Copyright 2016-2024 The OpenLDAP Foundation.
## All rights reserved.
##
## Redistribution and use in source and binary forms, with or without
diff --git a/contrib/slapd-modules/variant/tests/scripts/test009-ignored-replication b/contrib/slapd-modules/variant/tests/scripts/test009-ignored-replication
index aefbfa9..6a2a304 100755
--- a/contrib/slapd-modules/variant/tests/scripts/test009-ignored-replication
+++ b/contrib/slapd-modules/variant/tests/scripts/test009-ignored-replication
@@ -2,7 +2,7 @@
## $OpenLDAP$
## This work is part of OpenLDAP Software <http://www.openldap.org/>.
##
-## Copyright 2016-2022 The OpenLDAP Foundation.
+## Copyright 2016-2024 The OpenLDAP Foundation.
## All rights reserved.
##
## Redistribution and use in source and binary forms, with or without
diff --git a/contrib/slapd-modules/variant/tests/scripts/test010-limits b/contrib/slapd-modules/variant/tests/scripts/test010-limits
index 5828922..3db3a6d 100755
--- a/contrib/slapd-modules/variant/tests/scripts/test010-limits
+++ b/contrib/slapd-modules/variant/tests/scripts/test010-limits
@@ -2,7 +2,7 @@
## $OpenLDAP$
## This work is part of OpenLDAP Software <http://www.openldap.org/>.
##
-## Copyright 2016-2022 The OpenLDAP Foundation.
+## Copyright 2016-2024 The OpenLDAP Foundation.
## All rights reserved.
##
## Redistribution and use in source and binary forms, with or without
diff --git a/contrib/slapd-modules/variant/tests/scripts/test011-referral b/contrib/slapd-modules/variant/tests/scripts/test011-referral
index 37d6d8c..0b308a9 100755
--- a/contrib/slapd-modules/variant/tests/scripts/test011-referral
+++ b/contrib/slapd-modules/variant/tests/scripts/test011-referral
@@ -2,7 +2,7 @@
## $OpenLDAP$
## This work is part of OpenLDAP Software <http://www.openldap.org/>.
##
-## Copyright 2016-2022 The OpenLDAP Foundation.
+## Copyright 2016-2024 The OpenLDAP Foundation.
## All rights reserved.
##
## Redistribution and use in source and binary forms, with or without
diff --git a/contrib/slapd-modules/variant/tests/scripts/test012-crossdb b/contrib/slapd-modules/variant/tests/scripts/test012-crossdb
index 8854a1b..18f84b6 100755
--- a/contrib/slapd-modules/variant/tests/scripts/test012-crossdb
+++ b/contrib/slapd-modules/variant/tests/scripts/test012-crossdb
@@ -2,7 +2,7 @@
## $OpenLDAP$
## This work is part of OpenLDAP Software <http://www.openldap.org/>.
##
-## Copyright 2016-2022 The OpenLDAP Foundation.
+## Copyright 2016-2024 The OpenLDAP Foundation.
## All rights reserved.
##
## Redistribution and use in source and binary forms, with or without
diff --git a/contrib/slapd-modules/variant/variant.c b/contrib/slapd-modules/variant/variant.c
index cbc2ce2..037c719 100644
--- a/contrib/slapd-modules/variant/variant.c
+++ b/contrib/slapd-modules/variant/variant.c
@@ -696,7 +696,7 @@ static ConfigTable variant_cfg[] = {
{ "passReplication", "on|off", 2, 2, 0,
ARG_ON_OFF|ARG_OFFSET,
(void *)offsetof( variant_info_t, passReplication ),
- "( OLcfgOvAt:FIXME.1 NAME 'olcVariantPassReplication' "
+ "( OLcfgOvAt:9.1 NAME 'olcVariantPassReplication' "
"DESC 'Whether to let searches with replication control "
"pass unmodified' "
"SYNTAX OMsBoolean "
@@ -706,7 +706,7 @@ static ConfigTable variant_cfg[] = {
{ "variantDN", "dn", 2, 2, 0,
ARG_DN|ARG_QUOTE|ARG_MAGIC,
variant_set_dn,
- "( OLcfgOvAt:FIXME.2 NAME 'olcVariantEntry' "
+ "( OLcfgOvAt:9.2 NAME 'olcVariantEntry' "
"DESC 'DN of the variant entry' "
"EQUALITY distinguishedNameMatch "
"SYNTAX OMsDN "
@@ -716,7 +716,7 @@ static ConfigTable variant_cfg[] = {
{ "variantRegex", "regex", 2, 2, 0,
ARG_BERVAL|ARG_QUOTE|ARG_MAGIC,
variant_set_regex,
- "( OLcfgOvAt:FIXME.6 NAME 'olcVariantEntryRegex' "
+ "( OLcfgOvAt:9.6 NAME 'olcVariantEntryRegex' "
"DESC 'Pattern for the variant entry' "
"EQUALITY caseExactMatch "
"SYNTAX OMsDirectoryString "
@@ -727,7 +727,7 @@ static ConfigTable variant_cfg[] = {
{ "", NULL, 2, 2, 0,
ARG_STRING|ARG_MAGIC|VARIANT_ATTR,
variant_set_attribute,
- "( OLcfgOvAt:FIXME.3 NAME 'olcVariantVariantAttribute' "
+ "( OLcfgOvAt:9.3 NAME 'olcVariantVariantAttribute' "
"DESC 'Attribute to fill in the entry' "
"EQUALITY caseIgnoreMatch "
"SYNTAX OMsDirectoryString "
@@ -737,7 +737,7 @@ static ConfigTable variant_cfg[] = {
{ "", NULL, 2, 2, 0,
ARG_STRING|ARG_MAGIC|VARIANT_ATTR_ALT,
variant_set_attribute,
- "( OLcfgOvAt:FIXME.4 NAME 'olcVariantAlternativeAttribute' "
+ "( OLcfgOvAt:9.4 NAME 'olcVariantAlternativeAttribute' "
"DESC 'Attribute to take from the alternative entry' "
"EQUALITY caseIgnoreMatch "
"SYNTAX OMsDirectoryString "
@@ -747,7 +747,7 @@ static ConfigTable variant_cfg[] = {
{ "", NULL, 2, 2, 0,
ARG_DN|ARG_QUOTE|ARG_MAGIC,
variant_set_alt_dn,
- "( OLcfgOvAt:FIXME.5 NAME 'olcVariantAlternativeEntry' "
+ "( OLcfgOvAt:9.5 NAME 'olcVariantAlternativeEntry' "
"DESC 'DN of the alternative entry' "
"EQUALITY distinguishedNameMatch "
"SYNTAX OMsDN "
@@ -757,7 +757,7 @@ static ConfigTable variant_cfg[] = {
{ "", NULL, 2, 2, 0,
ARG_BERVAL|ARG_QUOTE|ARG_MAGIC,
variant_set_alt_pattern,
- "( OLcfgOvAt:FIXME.7 NAME 'olcVariantAlternativeEntryPattern' "
+ "( OLcfgOvAt:9.7 NAME 'olcVariantAlternativeEntryPattern' "
"DESC 'Replacement pattern to locate the alternative entry' "
"EQUALITY caseExactMatch "
"SYNTAX OMsDirectoryString "
@@ -780,13 +780,13 @@ static ConfigTable variant_cfg[] = {
};
static ConfigOCs variant_ocs[] = {
- { "( OLcfgOvOc:FIXME.1 "
+ { "( OLcfgOvOc:9.1 "
"NAME 'olcVariantConfig' "
"DESC 'Variant overlay configuration' "
"SUP olcOverlayConfig "
"MAY ( olcVariantPassReplication ) )",
Cft_Overlay, variant_cfg, NULL, variant_cfadd },
- { "( OLcfgOvOc:FIXME.2 "
+ { "( OLcfgOvOc:9.2 "
"NAME 'olcVariantVariant' "
"DESC 'Variant configuration' "
"MUST ( olcVariantEntry ) "
@@ -794,7 +794,7 @@ static ConfigOCs variant_ocs[] = {
"SUP top "
"STRUCTURAL )",
Cft_Misc, variant_cfg, variant_ldadd },
- { "( OLcfgOvOc:FIXME.3 "
+ { "( OLcfgOvOc:9.3 "
"NAME 'olcVariantAttribute' "
"DESC 'Variant attribute description' "
"MUST ( olcVariantVariantAttribute $ "
@@ -805,7 +805,7 @@ static ConfigOCs variant_ocs[] = {
"SUP top "
"STRUCTURAL )",
Cft_Misc, variant_cfg, variant_attr_ldadd },
- { "( OLcfgOvOc:FIXME.4 "
+ { "( OLcfgOvOc:9.4 "
"NAME 'olcVariantRegex' "
"DESC 'Variant configuration' "
"MUST ( olcVariantEntryRegex ) "
@@ -813,7 +813,7 @@ static ConfigOCs variant_ocs[] = {
"SUP top "
"STRUCTURAL )",
Cft_Misc, variant_cfg, variant_regex_ldadd },
- { "( OLcfgOvOc:FIXME.5 "
+ { "( OLcfgOvOc:9.5 "
"NAME 'olcVariantAttributePattern' "
"DESC 'Variant attribute description' "
"MUST ( olcVariantVariantAttribute $ "
diff --git a/contrib/slapd-modules/vc/Makefile b/contrib/slapd-modules/vc/Makefile
index 3ab76bc..c92265b 100644
--- a/contrib/slapd-modules/vc/Makefile
+++ b/contrib/slapd-modules/vc/Makefile
@@ -1,7 +1,7 @@
# $OpenLDAP$
# This work is part of OpenLDAP Software <http://www.openldap.org/>.
#
-# Copyright 1998-2022 The OpenLDAP Foundation.
+# Copyright 1998-2024 The OpenLDAP Foundation.
# Copyright 2004 Howard Chu, Symas Corp. All Rights Reserved.
#
# Redistribution and use in source and binary forms, with or without
diff --git a/contrib/slapd-modules/vc/vc.c b/contrib/slapd-modules/vc/vc.c
index 0760af2..e87b8e1 100644
--- a/contrib/slapd-modules/vc/vc.c
+++ b/contrib/slapd-modules/vc/vc.c
@@ -2,7 +2,7 @@
/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
- * Copyright 2010-2022 The OpenLDAP Foundation.
+ * Copyright 2010-2024 The OpenLDAP Foundation.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without