From 3fa3e6ac17cbab8003ce3b3ae87928de5f5eaaf4 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Mon, 3 Jun 2024 07:34:56 +0200 Subject: Adding upstream version 2.6.8+dfsg. Signed-off-by: Daniel Baumann --- contrib/slapd-modules/README | 2 +- contrib/slapd-modules/acl/README.posixgroup | 2 +- contrib/slapd-modules/acl/now.c | 2 +- contrib/slapd-modules/acl/posixgroup.c | 2 +- contrib/slapd-modules/addpartial/README | 2 +- .../slapd-modules/addpartial/addpartial-overlay.c | 2 +- contrib/slapd-modules/alias/Makefile | 82 +++ contrib/slapd-modules/alias/alias.c | 673 +++++++++++++++++++++ contrib/slapd-modules/alias/slapo-alias.5 | 121 ++++ contrib/slapd-modules/alias/tests/Rules.mk | 23 + contrib/slapd-modules/alias/tests/data/alias.conf | 4 + contrib/slapd-modules/alias/tests/data/config.ldif | 5 + .../alias/tests/data/test001-00a-invalid.ldif | 4 + .../alias/tests/data/test001-00b-invalid.ldif | 4 + .../alias/tests/data/test001-01a-same-alias.ldif | 4 + .../alias/tests/data/test001-01b-same-attr.ldif | 4 + .../alias/tests/data/test001-01c-chained.ldif | 4 + .../alias/tests/data/test001-01d-chained.ldif | 4 + .../alias/tests/data/test001-02a-operational.ldif | 4 + .../alias/tests/data/test001-02b-single.ldif | 4 + .../alias/tests/data/test001-02c-syntax.ldif | 4 + .../alias/tests/data/test001-02d-matching.ldif | 4 + .../alias/tests/data/test001-02e-no-ordering.ldif | 4 + .../alias/tests/data/test002-add-rdn.ldif | 5 + .../alias/tests/data/test002-add.ldif | 18 + .../alias/tests/data/test002-delete.ldif | 3 + .../alias/tests/data/test002-modify.ldif | 4 + .../alias/tests/data/test002-modrdn.ldif | 5 + .../alias/tests/data/test003-config.ldif | 4 + .../alias/tests/data/test003-out.ldif | 66 ++ contrib/slapd-modules/alias/tests/run | 17 + contrib/slapd-modules/alias/tests/scripts/all | 93 +++ .../slapd-modules/alias/tests/scripts/common.sh | 105 ++++ .../alias/tests/scripts/test001-config | 248 ++++++++ .../alias/tests/scripts/test002-add-delete | 76 +++ .../alias/tests/scripts/test003-search | 151 +++++ contrib/slapd-modules/allop/README | 2 +- contrib/slapd-modules/allop/allop.c | 2 +- contrib/slapd-modules/allop/slapo-allop.5 | 2 +- contrib/slapd-modules/allowed/Makefile | 2 +- contrib/slapd-modules/allowed/README | 2 +- contrib/slapd-modules/allowed/allowed.c | 2 +- contrib/slapd-modules/authzid/Makefile | 2 +- contrib/slapd-modules/authzid/authzid.c | 2 +- contrib/slapd-modules/autogroup/Makefile | 24 +- contrib/slapd-modules/autogroup/README | 2 +- contrib/slapd-modules/autogroup/autogroup.c | 260 +++++--- contrib/slapd-modules/autogroup/slapo-autogroup.5 | 7 +- contrib/slapd-modules/ciboolean/Makefile | 2 +- contrib/slapd-modules/ciboolean/ciboolean.c | 2 +- contrib/slapd-modules/ciboolean/slapo-ciboolean.5 | 2 +- contrib/slapd-modules/ciboolean/tests/run | 2 +- .../ciboolean/tests/scripts/test001-ciboolean | 2 +- contrib/slapd-modules/cloak/cloak.c | 2 +- contrib/slapd-modules/cloak/slapo-cloak.5 | 2 +- contrib/slapd-modules/comp_match/Makefile | 2 +- contrib/slapd-modules/datamorph/Makefile | 2 +- contrib/slapd-modules/datamorph/datamorph.c | 26 +- contrib/slapd-modules/datamorph/tests/run | 2 +- contrib/slapd-modules/datamorph/tests/scripts/all | 2 +- .../datamorph/tests/scripts/common.sh | 2 +- .../datamorph/tests/scripts/test001-config | 2 +- .../datamorph/tests/scripts/test002-add-delete | 2 +- .../datamorph/tests/scripts/test003-search | 2 +- .../datamorph/tests/scripts/test004-compare | 2 +- .../datamorph/tests/scripts/test005-modify | 2 +- .../datamorph/tests/scripts/test006-modrdn | 2 +- .../tests/scripts/test007-transformed-replication | 2 +- .../tests/scripts/test008-ignored-replication | 2 +- contrib/slapd-modules/denyop/denyop.c | 2 +- contrib/slapd-modules/dsaschema/README | 2 +- contrib/slapd-modules/dsaschema/dsaschema.c | 2 +- contrib/slapd-modules/dupent/Makefile | 2 +- contrib/slapd-modules/dupent/dupent.c | 2 +- contrib/slapd-modules/emptyds/Makefile | 2 +- contrib/slapd-modules/emptyds/README | 2 +- contrib/slapd-modules/emptyds/emptyds.c | 2 +- contrib/slapd-modules/emptyds/slapo-emptyds.5 | 2 +- .../slapd-modules/emptyds/tests/data/emptyds.conf | 2 +- contrib/slapd-modules/emptyds/tests/run | 2 +- contrib/slapd-modules/emptyds/tests/scripts/all | 2 +- .../emptyds/tests/scripts/test001-emptyds | 2 +- contrib/slapd-modules/kinit/README | 2 +- contrib/slapd-modules/kinit/kinit.c | 2 +- contrib/slapd-modules/lastmod/lastmod.c | 2 +- contrib/slapd-modules/lastmod/slapo-lastmod.5 | 2 +- contrib/slapd-modules/noopsrch/Makefile | 2 +- contrib/slapd-modules/noopsrch/noopsrch.c | 2 +- contrib/slapd-modules/nops/nops.c | 2 +- contrib/slapd-modules/nssov/Makefile | 2 +- contrib/slapd-modules/nssov/README | 2 +- contrib/slapd-modules/nssov/alias.c | 2 +- contrib/slapd-modules/nssov/ether.c | 2 +- contrib/slapd-modules/nssov/group.c | 2 +- contrib/slapd-modules/nssov/host.c | 2 +- contrib/slapd-modules/nssov/netgroup.c | 2 +- contrib/slapd-modules/nssov/network.c | 2 +- contrib/slapd-modules/nssov/nssov.c | 2 +- contrib/slapd-modules/nssov/nssov.h | 2 +- contrib/slapd-modules/nssov/pam.c | 2 +- contrib/slapd-modules/nssov/passwd.c | 2 +- contrib/slapd-modules/nssov/protocol.c | 2 +- contrib/slapd-modules/nssov/rpc.c | 2 +- contrib/slapd-modules/nssov/service.c | 2 +- contrib/slapd-modules/nssov/shadow.c | 2 +- contrib/slapd-modules/nssov/slapo-nssov.5 | 2 +- contrib/slapd-modules/passwd/README | 2 +- contrib/slapd-modules/passwd/kerberos.c | 2 +- contrib/slapd-modules/passwd/netscape.c | 2 +- contrib/slapd-modules/passwd/pbkdf2/README | 2 +- contrib/slapd-modules/passwd/pbkdf2/pw-pbkdf2.c | 2 +- .../slapd-modules/passwd/pbkdf2/slapd-pw-pbkdf2.5 | 2 +- contrib/slapd-modules/passwd/radius.c | 2 +- contrib/slapd-modules/passwd/sha2/README | 2 +- contrib/slapd-modules/passwd/sha2/slapd-pw-sha2.5 | 2 +- contrib/slapd-modules/passwd/sha2/slapd-sha2.c | 2 +- contrib/slapd-modules/passwd/slapd-pw-radius.5 | 2 +- contrib/slapd-modules/passwd/totp/README | 2 +- contrib/slapd-modules/passwd/totp/slapd-totp.c | 2 +- contrib/slapd-modules/passwd/totp/slapo-totp.5 | 2 +- contrib/slapd-modules/proxyOld/Makefile | 2 +- contrib/slapd-modules/proxyOld/README | 2 +- contrib/slapd-modules/proxyOld/proxyOld.c | 2 +- contrib/slapd-modules/rbac/rbac.c | 2 +- contrib/slapd-modules/rbac/rbac.h | 2 +- contrib/slapd-modules/samba4/Makefile | 2 +- contrib/slapd-modules/samba4/README | 2 +- contrib/slapd-modules/samba4/pguid.c | 2 +- contrib/slapd-modules/samba4/rdnval.c | 2 +- contrib/slapd-modules/samba4/vernum.c | 2 +- contrib/slapd-modules/smbk5pwd/Makefile | 2 +- contrib/slapd-modules/smbk5pwd/README | 2 +- contrib/slapd-modules/smbk5pwd/slapo-smbk5pwd.5 | 2 +- contrib/slapd-modules/smbk5pwd/smbk5pwd.c | 3 +- contrib/slapd-modules/trace/trace.c | 2 +- contrib/slapd-modules/usn/README | 2 +- contrib/slapd-modules/usn/usn.c | 2 +- contrib/slapd-modules/variant/Makefile | 2 +- contrib/slapd-modules/variant/tests/run | 2 +- contrib/slapd-modules/variant/tests/scripts/all | 2 +- .../slapd-modules/variant/tests/scripts/common.sh | 2 +- .../variant/tests/scripts/test001-config | 2 +- .../variant/tests/scripts/test002-add-delete | 2 +- .../variant/tests/scripts/test003-search | 2 +- .../variant/tests/scripts/test004-compare | 2 +- .../variant/tests/scripts/test005-modify | 2 +- .../variant/tests/scripts/test006-acl | 2 +- .../variant/tests/scripts/test007-subtypes | 2 +- .../tests/scripts/test008-variant-replication | 2 +- .../tests/scripts/test009-ignored-replication | 2 +- .../variant/tests/scripts/test010-limits | 2 +- .../variant/tests/scripts/test011-referral | 2 +- .../variant/tests/scripts/test012-crossdb | 2 +- contrib/slapd-modules/variant/variant.c | 24 +- contrib/slapd-modules/vc/Makefile | 2 +- contrib/slapd-modules/vc/vc.c | 2 +- 156 files changed, 2084 insertions(+), 247 deletions(-) create mode 100644 contrib/slapd-modules/alias/Makefile create mode 100644 contrib/slapd-modules/alias/alias.c create mode 100644 contrib/slapd-modules/alias/slapo-alias.5 create mode 100644 contrib/slapd-modules/alias/tests/Rules.mk create mode 100644 contrib/slapd-modules/alias/tests/data/alias.conf create mode 100644 contrib/slapd-modules/alias/tests/data/config.ldif create mode 100644 contrib/slapd-modules/alias/tests/data/test001-00a-invalid.ldif create mode 100644 contrib/slapd-modules/alias/tests/data/test001-00b-invalid.ldif create mode 100644 contrib/slapd-modules/alias/tests/data/test001-01a-same-alias.ldif create mode 100644 contrib/slapd-modules/alias/tests/data/test001-01b-same-attr.ldif create mode 100644 contrib/slapd-modules/alias/tests/data/test001-01c-chained.ldif create mode 100644 contrib/slapd-modules/alias/tests/data/test001-01d-chained.ldif create mode 100644 contrib/slapd-modules/alias/tests/data/test001-02a-operational.ldif create mode 100644 contrib/slapd-modules/alias/tests/data/test001-02b-single.ldif create mode 100644 contrib/slapd-modules/alias/tests/data/test001-02c-syntax.ldif create mode 100644 contrib/slapd-modules/alias/tests/data/test001-02d-matching.ldif create mode 100644 contrib/slapd-modules/alias/tests/data/test001-02e-no-ordering.ldif create mode 100644 contrib/slapd-modules/alias/tests/data/test002-add-rdn.ldif create mode 100644 contrib/slapd-modules/alias/tests/data/test002-add.ldif create mode 100644 contrib/slapd-modules/alias/tests/data/test002-delete.ldif create mode 100644 contrib/slapd-modules/alias/tests/data/test002-modify.ldif create mode 100644 contrib/slapd-modules/alias/tests/data/test002-modrdn.ldif create mode 100644 contrib/slapd-modules/alias/tests/data/test003-config.ldif create mode 100644 contrib/slapd-modules/alias/tests/data/test003-out.ldif create mode 100755 contrib/slapd-modules/alias/tests/run create mode 100755 contrib/slapd-modules/alias/tests/scripts/all create mode 100755 contrib/slapd-modules/alias/tests/scripts/common.sh create mode 100755 contrib/slapd-modules/alias/tests/scripts/test001-config create mode 100755 contrib/slapd-modules/alias/tests/scripts/test002-add-delete create mode 100755 contrib/slapd-modules/alias/tests/scripts/test003-search (limited to 'contrib/slapd-modules') 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 . * - * 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 . * - * 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 . +# +# 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 +# . + +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 . + * + * 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 + * . + */ +/* ACKNOWLEDGEMENTS: + * This work was developed in 2023 by Ondřej Kuzník for Symas Corp. + */ + +#include "portable.h" + +#ifdef SLAPD_OVER_ALIAS + +#include +#include + +#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> 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: +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 . +## +## 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 +## . + +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 . +## +## 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 +## . + +. $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 . +## +## 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 +## . +## +## 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 <> $TESTOUT 2>&1 < $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 . +## +## 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 +## . +## +## 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 . +## +## 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 +## . +## +## 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 . +## +## 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 +## . +## +## 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 . * - * 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 . # -# 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 . -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 . * - * 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 . # -# 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 . * - * 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 +# 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 +# . 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 . * - * 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 ); @@ -955,6 +964,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) { @@ -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 \": " - "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 . # -# 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 . * - * 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 . ## -## 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 . ## -## 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 . * - * 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 . # -# 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 . # -# 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 . * - * 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 . ## -## 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 . ## -## 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 . ## -## 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 . ## -## 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 . ## -## 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 . ## -## 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 . ## -## 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 . ## -## 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 . ## -## 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 . ## -## 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 . ## -## 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 . * - * 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 . * - * 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 . # -# 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 . * - * 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 . # -# 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 . * - * 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 . ## -## 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 . ## -## 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 . ## -## 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 . ## -## 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 . -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 . * - * 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 . * - * 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 . # -# 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 . * - * 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 . * - * 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 . # -# 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 . -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 . * - * 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 . * - * 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 . * - * 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 . * - * 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 . * - * 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 . * - * 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 . * - * 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 . * - * 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 . * - * 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 . * - * 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 . * - * 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 . * - * 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 . * - * 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 . * - * 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 . -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 . * - * 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 . * - * 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 . -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 . * - * 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 . * - * 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 . -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 . * - * 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 . -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 . * - * 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 . # -# 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 . -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 . * - * 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 . * - * 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 . * - * 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 . # -# 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 . -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 . * - * 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 . * - * 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 . * - * 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 . # -# 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 . -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 . * - * 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 #include #include +#include #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 . * - * 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 . -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 . * - * 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 . # -# 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 . ## -## 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 . ## -## 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 . ## -## 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 . ## -## 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 . ## -## 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 . ## -## 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 . ## -## 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 . ## -## 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 . ## -## 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 . ## -## 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 . ## -## 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 . ## -## 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 . ## -## 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 . ## -## 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 . ## -## 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 . # -# 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 . * - * 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 -- cgit v1.2.3