mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-12-24 00:29:35 -05:00
ITS#9473 Add variant overlay
This commit is contained in:
parent
588fcf2b04
commit
fc4f8b2527
43 changed files with 5083 additions and 0 deletions
3
contrib/slapd-modules/variant/.gitignore
vendored
Normal file
3
contrib/slapd-modules/variant/.gitignore
vendored
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
# test suite
|
||||
clients
|
||||
servers
|
||||
75
contrib/slapd-modules/variant/Makefile
Normal file
75
contrib/slapd-modules/variant/Makefile
Normal file
|
|
@ -0,0 +1,75 @@
|
|||
# $OpenLDAP$
|
||||
# This work is part of OpenLDAP Software <http://www.openldap.org/>.
|
||||
#
|
||||
# Copyright 1998-2021 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
|
||||
# modification, are permitted only as authorized by the OpenLDAP
|
||||
# Public License.
|
||||
#
|
||||
# A copy of this license is available in the file LICENSE in the
|
||||
# top-level directory of the distribution or, alternatively, at
|
||||
# <http://www.OpenLDAP.org/license.html>.
|
||||
|
||||
LDAP_SRC = ../../..
|
||||
LDAP_BUILD = $(LDAP_SRC)
|
||||
SRCDIR = ./
|
||||
LDAP_INC = -I$(LDAP_BUILD)/include -I$(LDAP_SRC)/include -I$(LDAP_SRC)/servers/slapd
|
||||
LDAP_LIB = $(LDAP_BUILD)/libraries/libldap/libldap.la \
|
||||
$(LDAP_BUILD)/libraries/liblber/liblber.la
|
||||
|
||||
LIBTOOL = $(LDAP_BUILD)/libtool
|
||||
INSTALL = /usr/bin/install
|
||||
CC = gcc
|
||||
OPT = -g -O2 -Wall
|
||||
DEFS = -DSLAPD_OVER_VARIANT=SLAPD_MOD_DYNAMIC
|
||||
INCS = $(LDAP_INC)
|
||||
LIBS = $(LDAP_LIB)
|
||||
|
||||
PROGRAMS = variant.la
|
||||
MANPAGES = slapo-variant.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
|
||||
|
||||
%.lo: %.c
|
||||
$(LIBTOOL) --mode=compile $(CC) $(OPT) $(DEFS) $(INCS) -c $<
|
||||
|
||||
%.la: %.lo
|
||||
$(LIBTOOL) --mode=link $(CC) $(OPT) -version-info $(LTVER) \
|
||||
-rpath $(moduledir) -module -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:
|
||||
|
||||
472
contrib/slapd-modules/variant/slapo-variant.5
Normal file
472
contrib/slapd-modules/variant/slapo-variant.5
Normal file
|
|
@ -0,0 +1,472 @@
|
|||
.TH SLAPO-VARIANT 5 "RELEASEDATE" "OpenLDAP"
|
||||
.\" Copyright 2016-2017 Symas Corp. All Rights Reserved.
|
||||
.\" Copying restrictions apply. See LICENSE.
|
||||
.SH NAME
|
||||
slapo\-variant \- share values between entries
|
||||
.SH SYNOPSIS
|
||||
olcOverlay=variant
|
||||
.SH DESCRIPTION
|
||||
The
|
||||
.B variant
|
||||
overlay to
|
||||
.BR slapd (8)
|
||||
allows attributes/values to be shared between several entries. In some ways
|
||||
this is similar to
|
||||
.BR slapo-collect (5)
|
||||
with the exception that the source and target attributes can be different.
|
||||
.LP
|
||||
The overlay operates on configured
|
||||
.B variant
|
||||
entries which can have several
|
||||
.B attributes
|
||||
each configured to borrow values from an attribute in the
|
||||
.B alternate
|
||||
entry.
|
||||
.LP
|
||||
Two types of
|
||||
.B variant
|
||||
entries can be configured,
|
||||
.B regular
|
||||
and
|
||||
.BR regex ,
|
||||
where the latter are configured with a regular expression and patterns to
|
||||
locate each alternate entry, with access to the variant DN and first nine
|
||||
submatches captured by the regular expression.
|
||||
.LP
|
||||
For most purposes (see
|
||||
.BR LIMITATIONS ,
|
||||
especially for
|
||||
.B regex
|
||||
variants), the resulting entry is completely transparent to the operations
|
||||
performed on it, e.g. a modify operation on the
|
||||
.B variant
|
||||
attribute gets transformed
|
||||
into an operation on the
|
||||
.B alternate
|
||||
entry+attribute. As such, the usual ACL rules apply, appropriate
|
||||
access to both the
|
||||
.B variant
|
||||
and
|
||||
.B alternate
|
||||
entry is checked.
|
||||
.LP
|
||||
As a special case,
|
||||
.B Add
|
||||
and
|
||||
.B Delete
|
||||
operations will not affect the
|
||||
.B alternate
|
||||
entries. Should an attempt be made to add a configured
|
||||
.B variant
|
||||
entry with the
|
||||
.B variant
|
||||
attributes already populated, the operation will be rejected with a
|
||||
.B Constraint
|
||||
.BR Violation .
|
||||
|
||||
.SH CONFIGURATION LAYOUT
|
||||
|
||||
The overlay has to be instantiated under a database adding an entry of
|
||||
.B olcOverlay=variant
|
||||
with objectClass of
|
||||
.BR olcVariantConfig .
|
||||
|
||||
The overlay configuration subtree consists of the following levels:
|
||||
.RS
|
||||
.TP
|
||||
.B objectClass=olcVariantConfig
|
||||
Main overlay configuration. Created directly under the database
|
||||
configuration entry.
|
||||
.TP
|
||||
.B objectClass=olcVariantVariant
|
||||
Specifies a
|
||||
.B regular variant
|
||||
entry and must be a child of an entry with
|
||||
.BR objectClass=olcVariantConfig .
|
||||
There may be as many such entries as necessary provided they all specify a
|
||||
different DN in the
|
||||
.BR olcVariantEntry
|
||||
attribute.
|
||||
.TP
|
||||
.B objectClass=olcVariantAttribute
|
||||
Specifies a
|
||||
.B regular variant
|
||||
attribute together with information where the
|
||||
.B alternate
|
||||
attribute is stored. Must be a child of an entry with
|
||||
.BR objectClass=olcVariantVariant .
|
||||
There may be as many such entries as necessary provided they all specify a
|
||||
different attribute in
|
||||
.BR olcVariantVariantAttribute .
|
||||
.TP
|
||||
.B objectClass=olcVariantRegex
|
||||
Specifies a
|
||||
.B regex variant
|
||||
entry and must be a child of an entry with
|
||||
.BR objectClass=olcVariantConfig .
|
||||
There may be as many such entries as necessary provided they all specify a
|
||||
different DN in the
|
||||
.BR olcVariantEntryRegex
|
||||
attribute.
|
||||
.TP
|
||||
.B objectClass=olcVariantAttributePattern
|
||||
Specifies a
|
||||
.B regex variant
|
||||
attribute together with information where the
|
||||
.B alternate
|
||||
attribute is stored. Must be a child of an entry with
|
||||
.BR objectClass=olcVariantRegex .
|
||||
There may be as many such entries as necessary provided they all specify a
|
||||
different attribute in
|
||||
.BR olcVariantVariantAttribute .
|
||||
.RE
|
||||
|
||||
In the case of
|
||||
.BR slapd.conf (5),
|
||||
the variant definition is delimited by the keyword
|
||||
.B variantDN
|
||||
followed by an arbitrary number of
|
||||
.B variantSpec
|
||||
providing the attribute definitions following it. Each new
|
||||
.B variantDN
|
||||
line starts configuring a new variant.
|
||||
|
||||
.SH OVERLAY CONFIGURATION ENTRY
|
||||
|
||||
The top entry
|
||||
.RB ( olcVariantConfig )
|
||||
has the following options available:
|
||||
|
||||
.RS
|
||||
.TP
|
||||
.B olcVariantPassReplication: TRUE | FALSE
|
||||
If set to
|
||||
.BR TRUE ,
|
||||
.B search
|
||||
operations with the
|
||||
.B SyncReplication
|
||||
control will be passed unchanged so that replication can be unaffected.
|
||||
Defaults to
|
||||
.B FALSE
|
||||
while unset. The
|
||||
.BR slapd.conf (5)
|
||||
equivalent is
|
||||
.BR passReplication .
|
||||
.RE
|
||||
|
||||
.SH VARIANT CONFIGURATION ENTRY
|
||||
|
||||
The
|
||||
.B regular variant entry
|
||||
configuration
|
||||
.RB ( olcVariantVariant )
|
||||
has the following options available:
|
||||
|
||||
.RS
|
||||
.TP
|
||||
.B olcVariantEntry: <dn>
|
||||
Mandatory attribute, indicates that the named entry is to be treated as a
|
||||
.B variant
|
||||
entry. The
|
||||
.BR slapd.conf (5)
|
||||
equivalent is
|
||||
.BR variantDN .
|
||||
.TP
|
||||
.B name: <reference>
|
||||
Name of the entry for reference, usually the attribute present in the
|
||||
configuration entry's RDN. There is no
|
||||
.BR slapd.conf (5)
|
||||
equivalent as this has no effect on the overlay operation.
|
||||
.RE
|
||||
|
||||
Similarly, the
|
||||
.B regex variant entry
|
||||
configuration
|
||||
.RB ( olcVariantRegex )
|
||||
has these options available:
|
||||
|
||||
.RS
|
||||
.TP
|
||||
.B olcVariantRegex: <regex>
|
||||
Mandatory attribute, indicates that the entries whose normalised DN matches is
|
||||
to be treated as a
|
||||
.B regex variant
|
||||
entry. The (POSIX.2) regex can use submatches to capture parts of the DN for
|
||||
later use in locating the
|
||||
.B alternative
|
||||
.BR entry .
|
||||
The
|
||||
.BR slapd.conf (5)
|
||||
equivalent is
|
||||
.BR variantRegex .
|
||||
.TP
|
||||
.B name: <reference>
|
||||
Name of the entry for reference, usually the attribute present in the
|
||||
configuration entry's RDN. There is no
|
||||
.BR slapd.conf (5)
|
||||
equivalent as this has no effect on the overlay operation.
|
||||
.RE
|
||||
|
||||
.SH CONFIGURATION PRECEDENCE
|
||||
|
||||
While several
|
||||
.B regex variants
|
||||
can match the same entry, only one can apply at a time. The list of the
|
||||
.B regular variants
|
||||
is checked first. Should none match, the list of
|
||||
.B regex variants
|
||||
is checked in the order they have been configured using only the first one that
|
||||
matches.
|
||||
|
||||
.SH VARIANT ATTRIBUTE CONFIGURATION ENTRY
|
||||
|
||||
The
|
||||
.B regular variant
|
||||
attribute configuration
|
||||
.RB ( olcVariantAttribute )
|
||||
and
|
||||
.B regex variant
|
||||
attribute configuration
|
||||
.RB ( olcVariantAttributePattern )
|
||||
have the following options available:
|
||||
|
||||
.RS
|
||||
.TP
|
||||
.B name: <reference>
|
||||
Name of the attribute configuration for reference and/or documentation, if
|
||||
present, usually found in the configuration entry's RDN. There is no
|
||||
.BR slapd.conf (5)
|
||||
equivalent as this has no effect on the overlay operation.
|
||||
.TP
|
||||
.B olcVariantVariantAttribute: <attr>
|
||||
Mandatory attribute, indicates that the named attribute is not present in
|
||||
the
|
||||
.B variant
|
||||
entry but is to be retrieved from the
|
||||
.B alternate
|
||||
entry.
|
||||
.TP
|
||||
.B olcVariantAlternativeAttribute: <attr>
|
||||
Mandatory attribute, indicates that the values of the named attribute is to
|
||||
be retrieved from the
|
||||
.B alternate
|
||||
entry for use as the values of the
|
||||
.B variant
|
||||
attribute. The syntaxes of the corresponding
|
||||
.B variant
|
||||
and
|
||||
.B alternate
|
||||
attributes have to match or the configuration will be rejected.
|
||||
.TP
|
||||
.B olcVariantAlternativeEntry: <dn>
|
||||
Attribute mandatory for
|
||||
.B regular
|
||||
.BR variants ,
|
||||
indicates the
|
||||
.B alternate
|
||||
entry to use when retrieving the attribute from.
|
||||
.TP
|
||||
.B olcVariantAlternativeEntryPattern: <pattern>
|
||||
Attribute mandatory for
|
||||
.B regex
|
||||
.BR variants ,
|
||||
indicates the
|
||||
.B alternate
|
||||
entry to use when retrieving the attribute from. Substitution patterns
|
||||
.RB ( $n )
|
||||
can be used to insert parts of the variant entry's DN.
|
||||
.B $0
|
||||
will place the entire variant DN,
|
||||
.B $1
|
||||
to
|
||||
.B $9
|
||||
can be used to place respective capture patterns from the
|
||||
.B variant
|
||||
entry.
|
||||
.TP
|
||||
.B variantSpec <attr> <attr2> <dn>
|
||||
.BR slapd.conf (5)
|
||||
only. The equivalent to options above, where
|
||||
.B <attr>
|
||||
represents the
|
||||
.BR olcVariantVariantAttribute ,
|
||||
.B <attr2>
|
||||
represents the
|
||||
.B olcVariantAlternativeAttribute
|
||||
and
|
||||
.B <dn>
|
||||
has the same meaning as the content of
|
||||
.BR olcVariantAlternativeEntry .
|
||||
Has to follow a
|
||||
.B variantDN
|
||||
line in the overlay's configuration.
|
||||
.TP
|
||||
.B variantRegexSpec <attr> <attr2> <pattern>
|
||||
.BR slapd.conf (5)
|
||||
only. The equivalent to options above, where
|
||||
.B <attr>
|
||||
represents the
|
||||
.BR olcVariantVariantAttribute ,
|
||||
.B <attr2>
|
||||
represents the
|
||||
.B olcVariantAlternativeAttribute
|
||||
and
|
||||
.B <pattern>
|
||||
has the same meaning as the content of
|
||||
.BR olcVariantAlternativeEntryPattern .
|
||||
Has to follow a
|
||||
.B variantRegex
|
||||
line in the overlay's configuration.
|
||||
.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}variant,$DATABASE
|
||||
objectClass: olcVariantConfig
|
||||
olcOverlay: variant
|
||||
# Let replication requests pass through unmodified
|
||||
olcVariantPassReplication: TRUE
|
||||
|
||||
# when an operation considers dc=example,dc=com
|
||||
dn: name=example,olcOverlay={x}variant,$DATABASE
|
||||
objectClass: olcVariantVariant
|
||||
olcVariantEntry: dc=example,dc=com
|
||||
|
||||
# share the Headquarters' address as the company address
|
||||
dn: olcVariantVariantAttribute=postaladdress,name={0}example,olcOverlay={x}variant,$DATABASE
|
||||
objectClass: olcVariantVariantAttribute
|
||||
olcVariantVariantAttribute: postaladdress
|
||||
olcVariantAlternativeAttribute: postaladdress
|
||||
olcVariantAlternativeEntry: ou=Headquarters,dc=example,dc=com
|
||||
|
||||
# populate telephonenumber from CEO's home phone
|
||||
dn: name=Take phone from CEO entry,name={0}example,olcOverlay={x}variant,$DATABASE
|
||||
objectClass: olcVariantVariantAttribute
|
||||
olcVariantVariantAttribute: telephonenumber
|
||||
olcVariantAlternativeAttribute: homephone
|
||||
olcVariantAlternativeEntry: cn=John Doe,ou=People,dc=example,dc=com
|
||||
|
||||
# Match all entries with example in the DN
|
||||
#
|
||||
# It will not match dc=example,dc=com as that's already configured as a regular
|
||||
# variant
|
||||
dn: name=example 2,olcOverlay={x}variant,$DATABASE
|
||||
objectClass: olcVariantRegex
|
||||
olcVariantEntryRegex: .*example[^,]*,(.*)
|
||||
|
||||
dn: olcVariantVariantAttribute=location,name={1}example 2,olcOverlay={x}variant,$DATABASE
|
||||
objectClass: olcVariantAttributePattern
|
||||
olcVariantVariantAttribute: location
|
||||
olcVariantAlternativeAttribute: location
|
||||
olcVariantAlternativeEntryPattern: ou=object with location,$1
|
||||
.fi
|
||||
|
||||
The
|
||||
.BR slapd.conf (5)
|
||||
equivalent of the above follows (note that the converted
|
||||
.B cn=config
|
||||
will differ in the first variant attribute configuration entry):
|
||||
|
||||
.nf
|
||||
overlay variant
|
||||
passReplication TRUE
|
||||
|
||||
variantDN dc=example,dc=com
|
||||
variantSpec telephonenumber homephone "cn=John Doe,ou=People,dc=example,dc=com"
|
||||
variantSpec postaladdress postaladdress ou=Headquarters,dc=example,dc=com
|
||||
|
||||
variantRegex .*example[^,]*,(.*)
|
||||
variantRegexSpec location location "ou=object with location,$1"
|
||||
.fi
|
||||
|
||||
.SH REPLICATION
|
||||
|
||||
There are two ways that a database with
|
||||
.BR slapo-variant (5)
|
||||
might be replicated, either replicating the data as stored in the database,
|
||||
or as seen by the clients interacting with the server.
|
||||
|
||||
The former can be achieved by setting the overlay option
|
||||
.B olcVariantPassReplication
|
||||
on the provider and configuring
|
||||
.BR slapo-syncprov (5)
|
||||
to appear before (with a lower index than)
|
||||
.BR slapo-variant (5).
|
||||
This is the preferred way and the only to work with
|
||||
.B regex variants
|
||||
or support multi-provider replication,
|
||||
but care must be taken to configure
|
||||
.BR slapo-variant (5)
|
||||
correctly on each replica.
|
||||
|
||||
The latter is mostly possible by keeping the option
|
||||
.B olcVariantPassReplication
|
||||
set to
|
||||
.B FALSE
|
||||
on the provider and configuring
|
||||
.BR slapo-syncprov (5)
|
||||
to appear after (with a higher index than)
|
||||
.BR slapo-variant (5).
|
||||
However, it will only really work for replication set-ups that do not
|
||||
utilise
|
||||
.B regex
|
||||
.BR variants ,
|
||||
delta-replication nor the refresh and persist mode and is therefore
|
||||
discouraged.
|
||||
|
||||
.SH LIMITATIONS
|
||||
For
|
||||
.B regex
|
||||
.BR variants ,
|
||||
the
|
||||
.B Search
|
||||
operation will only apply if the search scope is set to
|
||||
.BR base .
|
||||
|
||||
The
|
||||
.B ModRDN
|
||||
operation is not currently handled and will always modify only the entry in
|
||||
question, not the configured
|
||||
.B alternate
|
||||
entry.
|
||||
|
||||
The
|
||||
.B Modify
|
||||
operation is not atomic with respect to the alternate entries. Currently,
|
||||
the overlay processes the operations on the entry, sends the result message
|
||||
and, if successful, starts modifying the
|
||||
.B alternate
|
||||
entries accordingly.
|
||||
There is currently no support to indicate whether modifications to the
|
||||
.B alternate
|
||||
entries have been successful or whether they have finished.
|
||||
|
||||
The only control explicitly handled is the
|
||||
.B SyncReplication
|
||||
control if enabled through the
|
||||
.B olcVariantPassReplication
|
||||
setting, adding any controls to an operation that is handled by the overlay
|
||||
might lead to unexpected behaviour and is therefore discouraged.
|
||||
|
||||
.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 regex (7),
|
||||
.BR slapd (8)
|
||||
.SH ACKNOWLEDGEMENTS
|
||||
This module was developed in 2016-2017 by Ondřej Kuzník for Symas Corp.
|
||||
4
contrib/slapd-modules/variant/tests/.gitignore
vendored
Normal file
4
contrib/slapd-modules/variant/tests/.gitignore
vendored
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
progs
|
||||
schema
|
||||
testdata
|
||||
testrun
|
||||
23
contrib/slapd-modules/variant/tests/Rules.mk
Normal file
23
contrib/slapd-modules/variant/tests/Rules.mk
Normal file
|
|
@ -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))
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
dn: name={4}test002,olcOverlay={0}variant,olcDatabase={1}@BACKEND@,cn=config
|
||||
changetype: add
|
||||
objectclass: olcVariantVariant
|
||||
olcVariantEntry: cn=Gern Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com
|
||||
|
||||
dn: name=attribute 1,name={4}test002,olcOverlay={0}variant,olcDatabase={1}@BACKEND@,cn=config
|
||||
changetype: add
|
||||
objectclass: olcVariantAttribute
|
||||
olcVariantVariantAttribute: cn
|
||||
olcVariantAlternativeAttribute: description
|
||||
olcVariantAlternativeEntry: dc=example,dc=com
|
||||
|
||||
dn: name=attribute 2,name={4}test002,olcOverlay={0}variant,olcDatabase={1}@BACKEND@,cn=config
|
||||
changetype: add
|
||||
objectclass: olcVariantAttribute
|
||||
olcVariantVariantAttribute: pager
|
||||
olcVariantAlternativeAttribute: telephonenumber
|
||||
olcVariantAlternativeEntry: dc=example,dc=com
|
||||
|
||||
dn: name={0}attribute 1,name={4}test002,olcOverlay={0}variant,olcDatabase={1}@BACKEND@,cn=config
|
||||
changetype: modify
|
||||
replace: olcVariantVariantAttribute
|
||||
olcVariantVariantAttribute: description
|
||||
89
contrib/slapd-modules/variant/tests/data/config.ldif
Normal file
89
contrib/slapd-modules/variant/tests/data/config.ldif
Normal file
|
|
@ -0,0 +1,89 @@
|
|||
dn: olcOverlay={0}variant,olcDatabase={1}@BACKEND@,cn=config
|
||||
changetype: add
|
||||
objectClass: olcOverlayConfig
|
||||
objectclass: olcVariantConfig
|
||||
|
||||
dn: olcOverlay={0}variant,olcDatabase={1}@BACKEND@,cn=config
|
||||
changetype: modify
|
||||
replace: olcVariantPassReplication
|
||||
olcVariantPassReplication: TRUE
|
||||
|
||||
dn: name={0}variant,olcOverlay={0}variant,olcDatabase={1}@BACKEND@,cn=config
|
||||
changetype: add
|
||||
objectclass: olcVariantVariant
|
||||
olcVariantEntry: ou=People,dc=example,dc=com
|
||||
|
||||
# a basic variant
|
||||
dn: olcVariantVariantAttribute=description,name={0}variant,olcOverlay={0}variant,olcDatabase={1}@BACKEND@,cn=config
|
||||
changetype: add
|
||||
objectclass: olcVariantAttribute
|
||||
olcVariantAlternativeAttribute: description
|
||||
olcVariantAlternativeEntry: dc=example,dc=com
|
||||
|
||||
# a nonexistent alternate
|
||||
dn: olcVariantVariantAttribute=seealso,name={0}variant,olcOverlay={0}variant,olcDatabase={1}@BACKEND@,cn=config
|
||||
changetype: add
|
||||
objectclass: olcVariantAttribute
|
||||
olcVariantAlternativeAttribute: seealso
|
||||
olcVariantAlternativeEntry: ou=Societies,dc=example,dc=com
|
||||
|
||||
dn: name={1}variant,olcOverlay={0}variant,olcDatabase={1}@BACKEND@,cn=config
|
||||
changetype: add
|
||||
objectclass: olcVariantVariant
|
||||
olcVariantEntry: ou=Groups,dc=example,dc=com
|
||||
|
||||
# recursive retrieval is not done
|
||||
dn: olcVariantVariantAttribute=description,name={1}variant,olcOverlay={0}variant,olcDatabase={1}@BACKEND@,cn=config
|
||||
changetype: add
|
||||
objectclass: olcVariantAttribute
|
||||
olcVariantAlternativeAttribute: description
|
||||
olcVariantAlternativeEntry: ou=People,dc=example,dc=com
|
||||
|
||||
# a variant taking data from a different attribute (after the changes below)
|
||||
dn: olcVariantVariantAttribute=st,name={1}variant,olcOverlay={0}variant,olcDatabase={1}@BACKEND@,cn=config
|
||||
changetype: add
|
||||
objectclass: olcVariantAttribute
|
||||
olcVariantAlternativeAttribute: st
|
||||
olcVariantAlternativeEntry: cn=Manager,dc=example,dc=com
|
||||
|
||||
# configuration changes
|
||||
dn: olcVariantVariantAttribute={1}st,name={1}variant,olcOverlay={0}variant,olcDatabase={1}@BACKEND@,cn=config
|
||||
changetype: modify
|
||||
replace: olcVariantAlternativeAttribute
|
||||
olcVariantAlternativeAttribute: ou
|
||||
-
|
||||
replace: olcVariantAlternativeEntry
|
||||
olcVariantAlternativeEntry: ou=Alumni Association,ou=People,dc=example,dc=com
|
||||
-
|
||||
|
||||
# a regex variant
|
||||
dn: name={2}regex,olcOverlay={0}variant,olcDatabase={1}@BACKEND@,cn=config
|
||||
changetype: add
|
||||
objectclass: olcVariantRegex
|
||||
olcVariantEntryRegex: (.*),(ou=.*technology.*)(,)dc=example,dc=com
|
||||
|
||||
dn: olcVariantVariantAttribute=ou,name={2}regex,olcOverlay={0}variant,olcDatabase={1}@BACKEND@,cn=config
|
||||
changetype: add
|
||||
objectclass: olcVariantAttributePattern
|
||||
olcVariantAlternativeAttribute: ou
|
||||
olcVariantAlternativeEntryPattern: $2$3dc=example$3dc=com
|
||||
|
||||
# Duplicate description into title
|
||||
dn: olcVariantVariantAttribute=title,name={2}regex,olcOverlay={0}variant,olcDatabase={1}@BACKEND@,cn=config
|
||||
changetype: add
|
||||
objectclass: olcVariantAttributePattern
|
||||
olcVariantAlternativeAttribute: description
|
||||
olcVariantAlternativeEntryPattern: $0
|
||||
|
||||
# everything
|
||||
dn: name={3}regex,olcOverlay={0}variant,olcDatabase={1}@BACKEND@,cn=config
|
||||
changetype: add
|
||||
objectclass: olcVariantRegex
|
||||
olcVariantEntryRegex: .*
|
||||
|
||||
dn: olcVariantVariantAttribute=l,name={3}regex,olcOverlay={0}variant,olcDatabase={1}@BACKEND@,cn=config
|
||||
changetype: add
|
||||
objectclass: olcVariantAttributePattern
|
||||
olcVariantAlternativeAttribute: l
|
||||
olcVariantAlternativeEntryPattern: dc=example,dc=com
|
||||
|
||||
4
contrib/slapd-modules/variant/tests/data/hidden.ldif
Normal file
4
contrib/slapd-modules/variant/tests/data/hidden.ldif
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
dn: ou=Groups,dc=example,dc=com
|
||||
changetype: modify
|
||||
add: description
|
||||
description: This is hidden by the overlay config
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
dn: name=variant,olcOverlay={0}variant,olcDatabase={1}@BACKEND@,cn=config
|
||||
changetype: add
|
||||
objectclass: olcVariantVariant
|
||||
olcVariantEntry: ou=Groups,dc=example,dc=com
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
dn: name={0}variant,olcOverlay={0}variant,olcDatabase={1}@BACKEND@,cn=config
|
||||
changetype: modify
|
||||
replace: olcVariantEntry
|
||||
olcVariantEntry: ou=Groups,dc=example,dc=com
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
dn: olcVariantAlternativeAttribute=description,name={1}variant,olcOverlay={0}variant,olcDatabase={1}@BACKEND@,cn=config
|
||||
changetype: add
|
||||
objectclass: olcVariantAttribute
|
||||
olcVariantVariantAttribute: description
|
||||
olcVariantAlternativeAttribute: description
|
||||
olcVariantAlternativeEntry: ou=People,dc=example,dc=com
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
dn: olcVariantVariantAttribute={1}st,name={1}variant,olcOverlay={0}variant,olcDatabase={1}@BACKEND@,cn=config
|
||||
changetype: modify
|
||||
replace: olcVariantAlternativeAttribute
|
||||
olcVariantAlternativeAttribute: userPassword
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
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
|
||||
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
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
dn: cn=Rosco P. Coltrane, ou=Information Technology Division, ou=People, dc=example,dc=com
|
||||
changetype: add
|
||||
objectclass: OpenLDAPperson
|
||||
cn: Rosco P. Coltrane
|
||||
sn: Coltrane
|
||||
uid: rosco
|
||||
title: Chief Investigator, ITD
|
||||
124
contrib/slapd-modules/variant/tests/data/test003-out.ldif
Normal file
124
contrib/slapd-modules/variant/tests/data/test003-out.ldif
Normal file
|
|
@ -0,0 +1,124 @@
|
|||
# Test 1, list two unrelated entries
|
||||
dn: cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com
|
||||
objectClass: OpenLDAPperson
|
||||
cn: Mark Elliot
|
||||
cn: Mark A Elliot
|
||||
sn: Elliot
|
||||
uid: melliot
|
||||
postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109
|
||||
seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com
|
||||
homePostalAddress: 199 Outer Drive $ Ypsilanti, MI 48198
|
||||
homePhone: +1 313 555 0388
|
||||
drink: Gasoline
|
||||
title: Director, UM Alumni Association
|
||||
mail: melliot@mail.alumni.example.com
|
||||
pager: +1 313 555 7671
|
||||
facsimileTelephoneNumber: +1 313 555 7762
|
||||
telephoneNumber: +1 313 555 4177
|
||||
|
||||
dn: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc
|
||||
=com
|
||||
objectClass: OpenLDAPperson
|
||||
cn: Bjorn Jensen
|
||||
cn: Biiff Jensen
|
||||
sn: Jensen
|
||||
uid: bjorn
|
||||
seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com
|
||||
userPassword:: Ympvcm4=
|
||||
homePostalAddress: 19923 Seven Mile Rd. $ South Lyon, MI 49999
|
||||
drink: Iced Tea
|
||||
description: Hiker, biker
|
||||
title: Director, Embedded Systems
|
||||
postalAddress: Info Tech Division $ 535 W. William St. $ Anytown, MI 48103
|
||||
mail: bjorn@mailgw.example.com
|
||||
homePhone: +1 313 555 5444
|
||||
pager: +1 313 555 4474
|
||||
facsimileTelephoneNumber: +1 313 555 2177
|
||||
telephoneNumber: +1 313 555 0355
|
||||
|
||||
|
||||
# Test 2, list some of the variant entries, checking that attributes have been populated
|
||||
dn: ou=Groups,dc=example,dc=com
|
||||
objectClass: organizationalUnit
|
||||
ou: Groups
|
||||
st: Alumni Association
|
||||
|
||||
dn: ou=People,dc=example,dc=com
|
||||
objectClass: organizationalUnit
|
||||
objectClass: extensibleObject
|
||||
ou: People
|
||||
uidNumber: 0
|
||||
gidNumber: 0
|
||||
description: The Example, Inc. at Anytown
|
||||
|
||||
dn: cn=Manager,dc=example,dc=com
|
||||
objectClass: person
|
||||
cn: Manager
|
||||
cn: Directory Manager
|
||||
cn: Dir Man
|
||||
sn: Manager
|
||||
description: Manager of the directory
|
||||
userPassword:: c2VjcmV0
|
||||
|
||||
|
||||
# Return $BASEDN, location is rewritten to end
|
||||
dn: dc=example,dc=com
|
||||
objectClass: top
|
||||
objectClass: organization
|
||||
objectClass: domainRelatedObject
|
||||
objectClass: dcObject
|
||||
dc: example
|
||||
st: Michigan
|
||||
o: Example, Inc.
|
||||
o: EX
|
||||
o: Ex.
|
||||
description: The Example, Inc. at Anytown
|
||||
postalAddress: Example, Inc. $ 535 W. William St. $ Anytown, MI 48109 $ US
|
||||
telephoneNumber: +1 313 555 1817
|
||||
associatedDomain: example.com
|
||||
l: Anytown, Michigan
|
||||
|
||||
|
||||
# Make sure only the first regex applies
|
||||
dn: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc
|
||||
=com
|
||||
objectClass: OpenLDAPperson
|
||||
cn: Bjorn Jensen
|
||||
cn: Biiff Jensen
|
||||
sn: Jensen
|
||||
uid: bjorn
|
||||
seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com
|
||||
userPassword:: Ympvcm4=
|
||||
homePostalAddress: 19923 Seven Mile Rd. $ South Lyon, MI 49999
|
||||
drink: Iced Tea
|
||||
description: Hiker, biker
|
||||
postalAddress: Info Tech Division $ 535 W. William St. $ Anytown, MI 48103
|
||||
mail: bjorn@mailgw.example.com
|
||||
homePhone: +1 313 555 5444
|
||||
pager: +1 313 555 4474
|
||||
facsimileTelephoneNumber: +1 313 555 2177
|
||||
telephoneNumber: +1 313 555 0355
|
||||
title: Hiker, biker
|
||||
ou: Information Technology Division
|
||||
|
||||
|
||||
# Exercise the last regex
|
||||
dn: cn=ITD Staff,ou=Groups,dc=example,dc=com
|
||||
owner: cn=Manager,dc=example,dc=com
|
||||
description: All ITD Staff
|
||||
cn: ITD Staff
|
||||
objectClass: groupOfUniqueNames
|
||||
uniqueMember: cn=Manager,dc=example,dc=com
|
||||
uniqueMember: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=
|
||||
example,dc=com
|
||||
uniqueMember: cn=James A Jones 2,ou=Information Technology Division,ou=People,
|
||||
dc=example,dc=com
|
||||
uniqueMember: cn=John Doe,ou=Information Technology Division,ou=People,dc=exam
|
||||
ple,dc=com
|
||||
l: Anytown, Michigan
|
||||
|
||||
|
||||
# Test 3, check filters pick up the new data
|
||||
dn: ou=Groups,dc=example,dc=com
|
||||
st: Alumni Association
|
||||
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
dn: ou=People,dc=example,dc=com
|
||||
changetype: modify
|
||||
add: description
|
||||
description: Everyone's heard of them
|
||||
-
|
||||
increment: uidNumber
|
||||
uidNumber: 1
|
||||
-
|
||||
|
||||
dn: ou=Groups,dc=example,dc=com
|
||||
changetype: modify
|
||||
add: st
|
||||
st: Alabama
|
||||
-
|
||||
|
||||
# check regex
|
||||
dn: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc
|
||||
=com
|
||||
changetype: modify
|
||||
replace: description
|
||||
description: A mouthful
|
||||
-
|
||||
add: ou
|
||||
ou: The IT Crowd
|
||||
-
|
||||
|
||||
# have the two mods merge
|
||||
dn: dc=example,dc=com
|
||||
changetype: modify
|
||||
add: l
|
||||
l: Locally
|
||||
-
|
||||
replace: st
|
||||
st: Antarctica
|
||||
-
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
dn: cn=Gern Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com
|
||||
changetype: modify
|
||||
replace: description
|
||||
description: Ghost
|
||||
206
contrib/slapd-modules/variant/tests/data/test005-out.ldif
Normal file
206
contrib/slapd-modules/variant/tests/data/test005-out.ldif
Normal file
|
|
@ -0,0 +1,206 @@
|
|||
# Test1: list entries that should have been changed by ldapmodify
|
||||
dn: dc=example,dc=com
|
||||
objectclass: top
|
||||
objectclass: organization
|
||||
objectclass: domainRelatedObject
|
||||
objectclass: dcobject
|
||||
dc: example
|
||||
l: Anytown, Michigan
|
||||
l: Locally
|
||||
o: Example, Inc.
|
||||
o: EX
|
||||
o: Ex.
|
||||
description: The Example, Inc. at Anytown
|
||||
description: Everyone's heard of them
|
||||
postaladdress: Example, Inc. $ 535 W. William St. $ Anytown, MI 48109 $ US
|
||||
telephonenumber: +1 313 555 1817
|
||||
associateddomain: example.com
|
||||
st: Antarctica
|
||||
|
||||
dn: ou=People,dc=example,dc=com
|
||||
objectclass: organizationalUnit
|
||||
objectclass: extensibleObject
|
||||
ou: People
|
||||
uidNumber: 1
|
||||
gidNumber: 0
|
||||
description: The Example, Inc. at Anytown
|
||||
description: Everyone's heard of them
|
||||
|
||||
dn: ou=Alumni Association,ou=People,dc=example,dc=com
|
||||
objectClass: organizationalUnit
|
||||
ou: Alumni Association
|
||||
ou: Alabama
|
||||
|
||||
dn: ou=Groups,dc=example,dc=com
|
||||
objectClass: organizationalUnit
|
||||
ou: Groups
|
||||
st: alumni association
|
||||
st: alabama
|
||||
|
||||
dn: ou=Information Technology Division,ou=People,dc=example,dc=com
|
||||
objectClass: organizationalUnit
|
||||
ou: Information Technology Division
|
||||
ou: The IT Crowd
|
||||
description:: aMODwoPDgsKCw4PCgsOCwotFVlZQw4PCg8OCwoPDg8KCw4LCv0zDg8KDw4LCgsOD
|
||||
woLDgsKKT8ODwoPDgsKDw4PCgsOCwqs6w4PCg8OCwoLDg8KCw4LCjUQkw4PCg8OCwoLDg8KCw4LCi
|
||||
01QUcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoLDg8KCw4LCik/Dg8KDw4
|
||||
LCgsODwoLDgsKLRCQoZitEJMODwoPDgsKCw4PCgsOCwrfDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoP
|
||||
Dg8KCw4LCgcODwoPDgsKDw4PCgsOCwqHDg8KDw4LCgsODwoLDgsKLRCQkZitEJMODwoPDgsKCw4PC
|
||||
gsOCwrfDg8KDw4LCg8ODwoLDgsKQw4PCg8OCwoPDg8KCw4LCisODwoPDgsKCw4PCgsOCwotFUVZqU
|
||||
MODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKAw4PCg8OCwoLDg8KCw4LCik85dCTDg8KDw4
|
||||
LCgsODwoLDgsKFQ8ODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4L
|
||||
Cvzl0JMODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoPD
|
||||
gsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKLRCTDg8KDw4LCgsODwoLDgsKDw4PCg8OCwoLDg8KCw
|
||||
4LCuMODwoPDgsKDw4PCgsOCwoR0Q8ODwoPDgsKCw4PCgsOCwoM9w4PCg8OCwoPDg8KCw4LChMODwo
|
||||
PDgsKDw4PCgsOCwoFOdTrDg8KDw4LCg8ODwoLDgsKHw4PCg8OCwoPDg8KCw4LChMODwoPDgsKDw4P
|
||||
CgsOCwoFOw4PCg8OCwoPDg8KCw4LCqMODwoPDgsKDw4PCgsOCwrtHw4PCg8OCwoLDg8KCw4LChcOD
|
||||
woPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsK4dMODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODw
|
||||
oLDgsKtR8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCiMODwo
|
||||
PDgsKDw4PCgsOCwr9SfGrDg8KDw4LCgsODwoLDgsKLQGgxw4PCg8OCwoPDg8KCw4LCoWhQw4PCg8O
|
||||
CwoPDg8KCw4LCv8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKKT8ODwoPDgsKCw4PCgsOC
|
||||
wotEJDDDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHTDg8KDw4LCgsODwoLDgsKDw4PCg
|
||||
8OCwoPDg8KCw4LCuHXDg8KDw4LCgsODwoLDgsKLRCRqw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4
|
||||
PCgsOCwojDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpPDg8K
|
||||
Dw4LCg8ODwoLDgsKQXV9eW8ODwoPDgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsKEw4PCg8OCwoPD
|
||||
g8KCw4LCgsODwoPDgsKDw4PCgsOCwozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODw
|
||||
oPDgsKDw4PCgsOCwozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgs
|
||||
OCwoxWV8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKxw4PCg8OCwoLDg8KCw4LCi3wkw4P
|
||||
Cg8OCwoLDg8KCw4LCjcODwoPDgsKCw4PCgsOCwofDg8KDw4LCg8ODwoLDgsKof8ODwoPDgsKDw4PC
|
||||
gsOCwr/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoLDg8KCw4LCg8ODwoPDgsKDw4PCgsOCwrh5w4PCg
|
||||
8OCwoLDg8KCw4LChzQzw4PCg8OCwoPDg8KCw4LCicODwoPDgsKCw4PCgsOCworDg8KDw4LCgsODwo
|
||||
LDgsKIw4PCg8OCwoLDg8KCw4LCuDFBw4PCg8OCwoPDg8KCw4LCvyTDg8KDw4LCgsODwoLDgsKNdDF
|
||||
Bw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODwoPD
|
||||
gsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwoLDg8KCw
|
||||
4LCi8ODwoPDgsKDw4PCgsOCwo7Dg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw4LCv8ODwoPDgs
|
||||
KCw4PCgsOCwoTDg8KDw4LCgsODwoLDgsKAdcODwoPDgsKDw4PCgsOCwqhtw4PCg8OCwoLDg8KCw4L
|
||||
ChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKEw4PCg8OCwoPDg8KCw4LCsMODwoPDgsKC
|
||||
w4PCgsOCwrhfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCg8ODwoLDgsKow4PCg8OCwoLDg8KCw4LCt
|
||||
sODwoPDgsKDw4PCgsOCwq7Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4
|
||||
PCgsOCwoPDg8KDw4LCg8ODwoLDgsKoZsODwoPDgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsK4w4P
|
||||
Cg8OCwoLDg8KCw4LCh8ODwoPDgsKDw4PCgsOCwpUzw4PCg8OCwoPDg8KCw4LCicODwoPDgsKCw4PC
|
||||
gsOCworDg8KDw4LCgsODwoLDgsKISDJBw4PCg8OCwoPDg8KCw4LCvyTDg8KDw4LCgsODwoLDgsKNN
|
||||
DJBw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKOw4PCg8OCwo
|
||||
PDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpDDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8O
|
||||
DwoPDgsKDw4PCgsOCwojDg8KDw4LCg8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCnEzDg8KDw4LCgsOD
|
||||
woLDgsKLSEBmw4PCg8OCwoLDg8KCw4LCg3lwdSTDg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw
|
||||
4LCv8ODwoPDgsKCw4PCgsOCwobDg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODwoPDgs
|
||||
KCw4PCgsOCwp/Dg8KDw4LCgsODwoLDgsKBw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwoj
|
||||
Dg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODwoPDgsKCw4PCgsOCwpPDg8KDw4LCgsOD
|
||||
woLDgsKBw4PCg8OCwoPDg8KCw4LCv1rDg8KDw4LCgsODwoLDgsKAw4PCg8OCwoLDg8KCw4LChMODw
|
||||
oPDgsKCw4PCgsOCwodqw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwoBqaMODwoPDgsKCw4
|
||||
PCgsOCwpBQw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKDIMODwoPDgsKCw4PCgsOCwopPw4PCg8OCwoL
|
||||
Dg8KCw4LChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKOacODwoPDgsKCw4PCgsOCwrhf
|
||||
XsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCw
|
||||
oLDg8KCw4LCgcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKGw4PCg8OCwoLDg8KCw4LCgM
|
||||
ODwoPDgsKCw4PCgsOCwoRJw4PCg8OCwoLDg8KCw4LCgcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsO
|
||||
DwoLDgsKIw4PCg8OCwoLDg8KCw4LCgMODwoPDgsKCw4PCgsOCwoQ9w4PCg8OCwoLDg8KCw4LCgcOD
|
||||
woPDgsKDw4PCgsOCwr9aw4PCg8OCwoLDg8KCw4LCgMODwoPDgsKCw4PCgsOCwoQxw4PCg8OCwoLDg
|
||||
8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwoM9w4PCg8OCwoPDg8KCw4LCm0
|
||||
7Dg8KDw4LCgsODwoLDgsKEw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsK
|
||||
Cw4PCgsOCwrhfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLD
|
||||
gsKCw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODw
|
||||
oPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgs
|
||||
OCwo7Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoLDg8KCw4LCkMODwoPDgsKDw4PCgsOCwojDg8KDw4L
|
||||
CgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCiMODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODwoLDgsK+
|
||||
S8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKww4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKDw
|
||||
4PCgsOCwoTDg8KDw4LCgsODwoLDgsKKT1DDg8KDw4LCg8ODwoLDgsKoRsODwoPDgsKCw4PCgsOCwo
|
||||
vDg8KDw4LCg8ODwoLDgsK4w4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwrZ0Y8ODwoPDgsK
|
||||
Cw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK/dF/Dg8KDw4LCgsODwoLDgsKhdHpPw4PCg8OCwoLDg8KC
|
||||
w4LCi8ODwoPDgsKDw4PCgsOCwo5Qw4PCg8OCwoPDg8KCw4LCqC1Jw4PCg8OCwoLDg8KCw4LChcODw
|
||||
oPDgsKDw4PCgsOCwoB1RMODwoPDgsKCw4PCgsOCwqFwek/Dg8KDw4LCgsODwoLDgsKLw4PCg8OCwo
|
||||
PDg8KCw4LCj1DDg8KDw4LCg8ODwoLDgsKoScODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsK
|
||||
AdTPDg8KDw4LCgsODwoLDgsKhbHpPw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo5Qw4PC
|
||||
g8OCwoPDg8KCw4LCqEnDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHXDg8KDw4LCgsODw
|
||||
oLDgsKhaHpPw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo9Qw4PCg8OCwoPDg8KCw4LCqM
|
||||
ODwoPDgsKDw4PCgsOCwrpIw4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwoB1M8ODwoPDgsK
|
||||
Dw4PCgsOCwoBfXsODwoPDgsKDw4PCgsOCwoLDg8KDw4LCgsODwoLDgsK4X17Dg8KDw4LCg8ODwoLD
|
||||
gsKCw4PCg8OCwoLDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgjPDg8KDw4LCg8ODwoLDgsKAX17Dg
|
||||
8KDw4LCg8ODwoLDgsKCw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo7Dg8KDw4LCg8ODwo
|
||||
LDgsKoJ8ODwoPDgsKDw4PCgsOCwq3Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODwoP
|
||||
DgsKCw4PCgsOCwoPDg8KDw4LCg8ODwoLDgsK4aHU5w4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PC
|
||||
gsOCwovDg8KDw4LCg8ODwoLDgsKOw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpDDg8KDw
|
||||
4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgs
|
||||
KIw4PCg8OCwoPDg8KCw4LCv8ODwoPDgsKCw4PCgsOCwpLDg8KDw4LCg8ODwoLDgsKEw4PCg8OCwoL
|
||||
Dg8KCw4LChcODwoPDgsKDw4PCgsOCwoB0IcODwoPDgsKCw4PCgsOCwovDg8KDw4LCgsODwoLDgsKA
|
||||
w4PCg8OCwoPDg8KCw4LCtMODwoPDgsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsKAdGbDg8KDw4LCg
|
||||
sODwoLDgsKLQGY9dGY9dTPDg8KDw4LCg8ODwoLDgsKAX17Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwo
|
||||
LDg8KCw4LCuF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwrhfXsODwoPDgsKDw4PCgsO
|
||||
CwoIzw4PCg8OCwoPDg8KCw4LCgF9ew4PCg8OCwoPDg8KCw4LCgsODwoPDgsKCw4PCgsOCwovDg8KD
|
||||
w4LCg8ODwoLDgsK/Ri9BUC9BRi9BWi9BZC9BWzBBZC9BZTBBZC9BZC9BbzBBZC9BeTBBw4PCg8OCw
|
||||
oLDg8KCw4LCgzBBMUFhMUFrMUE=
|
||||
description:: UF7Dg8KDw4LCg8ODwoLDgsKCw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOC
|
||||
wozDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOCwozDg8KDw4LCg
|
||||
8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCqFDDg8KDw4LCg8ODwoLDgsKpRsODwoPDgsKDw4PCgsOCwo
|
||||
zDg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKDw4PCgsOCwozDg8KDw4LCg8O
|
||||
DwoLDgsKMw4PCg8OCwoPDg8KCw4LCjMODwoPDgsKCw4PCgsOCwotEJCDDg8KDw4LCgsODwoLDgsKD
|
||||
w4PCg8OCwoPDg8KCw4LCrMODwoPDgsKCw4PCgsOCwotUJCRTw4PCg8OCwoLDg8KCw4LCi1wkJFbDg
|
||||
8KDw4LCgsODwoLDgsKJTCRXVVBSU8ODwoPDgsKDw4PCgsOCwqjDg8KDw4LCg8ODwoLDgsKdT8ODwo
|
||||
PDgsKCw4PCgsOCwoN8JDB1w4PCg8OCwoPDg8KCw4LCh8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCg8O
|
||||
DwoLDgsKBTsODwoPDgsKDw4PCgsOCwqktw4PCg8OCwoLDg8KCw4LCg3wkMHTDg8KDw4LCgsODwoLD
|
||||
gsKDfCQww4PCg8OCwoLDg8KCw4LChTPDg8KDw4LCg8ODwoLDgsK2OTXDg8KDw4LCg8ODwoLDgsKAw
|
||||
4PCg8OCwoPDg8KCw4LCgU7Dg8KDw4LCgsODwoLDgsKEIMODwoPDgsKCw4PCgsOCwqFIw4PCg8OCwo
|
||||
PDg8KCw4LChU7Dg8KDw4LCgsODwoLDgsKJNcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCg8ODwoLDgsK
|
||||
BTsODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsKIw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKD
|
||||
w4PCgsOCwr9TXMODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGw4PCg8OCwoLDg8KCw
|
||||
4LChMODwoPDgsKCw4PCgsOCwpHDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLIEjDg8
|
||||
KDw4LCg8ODwoLDgsKFTlDDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv1Ngw4PCg8OCwoL
|
||||
Dg8KCw4LCi8ODwoPDgsKDw4PCgsOCwpjDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCm3Rx
|
||||
w4PCg8OCwoLDg8KCw4LCizvDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCi8ODwoPDgsKDw
|
||||
4PCgsOCwr9XaMODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGdGLDg8KDw4LCgsODwo
|
||||
LDgsKLf2zDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCi1D
|
||||
Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCl8ODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8OD
|
||||
woLDgsKow4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwq10SmgoT03Dg8KDw4LCgsODwoLDg
|
||||
sKLw4PCg8OCwoPDg8KCw4LCjcODwoPDgsKDw4PCgsOCwqggTMODwoPDgsKCw4PCgsOCwoXDg8KDw4
|
||||
LCg8ODwoLDgsKAdDrDg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLTSBQUcODwoPDgsK
|
||||
Dw4PCgsOCwr/Dg8KDw4LCg8ODwoLDgsKMw4PCg8OCwoLDg8KCw4LCik/Dg8KDw4LCgsODwoLDgsKL
|
||||
RCQoZitEJCDDg8KDw4LCgsODwoLDgsK3w4PCg8OCwoPDg8KCw4LCiMODwoPDgsKDw4PCgsOCwoHDg
|
||||
8KDw4LCg8ODwoLDgsKhw4PCg8OCwoLDg8KCw4LCi0QkJGYrRCTDg8KDw4LCgsODwoLDgsK3w4PCg8
|
||||
OCwoPDg8KCw4LCkMODwoPDgsKDw4PCgsOCworDg8KDw4LCgsODwoLDgsKLRSBRVmpQw4PCg8OCwoP
|
||||
Dg8KCw4LCv8ODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsODwoLDgsKKTzl0JHXDg8KDw4LCgsODwoLD
|
||||
gsKhOXQkw4PCg8OCwoLDg8KCw4LChW/Dg8KDw4LCg8ODwoLDgsK/w4PCg8OCwoPDg8KCw4LCv8ODw
|
||||
oPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKhRMODwoPDgsKDw4PCgsOCwoVOw4PCg8OCwoLDg8
|
||||
KCw4LCi8ODwoPDgsKDw4PCgsOCwojDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCv1Ncw4P
|
||||
Cg8OCwoLDg8KCw4LCiUQkw4PCg8OCwoLDg8KCw4LChcODwoPDgsKDw4PCgsOCwoDDg8KDw4LCgsOD
|
||||
woLDgsKEw4PCg8OCwoPDg8KCw4LCtjPDg8KDw4LCg8ODwoLDgsK2w4PCg8OCwoLDg8KCw4LCjUQkw
|
||||
4PCg8OCwoLDg8KCw4LCiyBEw4PCg8OCwoPDg8KCw4LChU5Qw4PCg8OCwoLDg8KCw4LCi8ODwoPDgs
|
||||
KDw4PCgsOCwr9TYMODwoPDgsKCw4PCgsOCwovDg8KDw4LCg8ODwoLDgsK4w4PCg8OCwoLDg8KCw4L
|
||||
ChcODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKEw4PCg8OCwoPDg8KCw4LCkMODwoPDgsKC
|
||||
w4PCgsOCwovDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCj8ODwoPDgsKDw4PCgsOCwr9Ta
|
||||
MODwoPDgsKCw4PCgsOCwolEJDvDg8KDw4LCg8ODwoLDgsKGw4PCg8OCwoLDg8KCw4LChMODwoPDgs
|
||||
KCw4PCgsOCwr3Dg8KDw4LCgsODwoLDgsKNRCTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4L
|
||||
Cj1DDg8KDw4LCg8ODwoLDgsK/U2zDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoPDg8KCw4LCqMODwoPD
|
||||
gsKCw4PCgsOCwoXDg8KDw4LCg8ODwoLDgsKtw4PCg8OCwoLDg8KCw4LChMODwoPDgsKCw4PCgsOCw
|
||||
p9oMMODwoPDgsKDw4PCgsOCwolMw4PCg8OCwoLDg8KCw4LCi8ODwoPDgsKDw4PCgsOCwo3Dg8KDw4
|
||||
LCg8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCq0vDg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4L
|
||||
CgMODwoPDgsKCw4PCgsOCwoTDg8KDw4LCgsODwoLDgsKLw4PCg8OCwoLDg8KCw4LCi0QkOcODwoPD
|
||||
gsKCw4PCgsOCwrDDg8KDw4LCg8ODwoLDgsKEdEU5w4PCg8OCwoLDg8KCw4LCtTR0PcODwoPDgsKCw
|
||||
4PCgsOCwovDg8KDw4LCg8ODwoLDgsKNw4PCg8OCwoPDg8KCw4LCqMODwoPDgsKDw4PCgsOCwo5Lw4
|
||||
PCg8OCwoLDg8KCw4LCi0AgUMODwoPDgsKDw4PCgsOCwr/Dg8KDw4LCgsODwoLDgsKsw4PCg8OCwoL
|
||||
Dg8KCw4LCik/Dg8KDw4LCgsODwoLDgsKFw4PCg8OCwoPDg8KCw4LCgHUow4PCg8OCwoLDg8KCw4LC
|
||||
i8ODwoPDgsKDw4PCgsOCwo3Dg8KDw4LCgsODwoLDgsKJw4PCg8OCwoLDg8KCw4LCtTTDg8KDw4LCg
|
||||
8ODwoLDgsKow4PCg8OCwoPDg8KCw4LCl8ODwoPDgsKDw4PCgsOCwrtWw4PCg8OCwoLDg8KCw4LCi8
|
||||
ODwoPDgsKDw4PCgsOCwo3Dg8KDw4LCg8ODwoLDgsKow4PCg8OCwoLDg8KCw4LCnw==
|
||||
|
||||
|
||||
dn: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc
|
||||
=com
|
||||
objectClass: OpenLDAPperson
|
||||
cn: Bjorn Jensen
|
||||
cn: Biiff Jensen
|
||||
sn: Jensen
|
||||
uid: bjorn
|
||||
seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com
|
||||
userPassword:: Ympvcm4=
|
||||
homePostalAddress: 19923 Seven Mile Rd. $ South Lyon, MI 49999
|
||||
drink: Iced Tea
|
||||
description: Hiker, biker
|
||||
postalAddress: Info Tech Division $ 535 W. William St. $ Anytown, MI 48103
|
||||
mail: bjorn@mailgw.example.com
|
||||
homePhone: +1 313 555 5444
|
||||
pager: +1 313 555 4474
|
||||
facsimileTelephoneNumber: +1 313 555 2177
|
||||
telephoneNumber: +1 313 555 0355
|
||||
title: Hiker, biker
|
||||
ou: Information Technology Division
|
||||
ou: The IT Crowd
|
||||
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
dn: ou=People,dc=example,dc=com
|
||||
changetype: modify
|
||||
replace: seealso
|
||||
seealso: dc=example,dc=com
|
||||
61
contrib/slapd-modules/variant/tests/data/test006-config.ldif
Normal file
61
contrib/slapd-modules/variant/tests/data/test006-config.ldif
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
dn: name={4}Mark,olcOverlay={0}variant,olcDatabase={1}@BACKEND@,cn=config
|
||||
changetype: add
|
||||
objectclass: olcVariantVariant
|
||||
olcVariantEntry: cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com
|
||||
|
||||
dn: olcVariantVariantAttribute=description,name={4}Mark,olcOverlay={0}variant,olcDatabase={1}@BACKEND@,cn=config
|
||||
changetype: add
|
||||
objectclass: olcVariantAttribute
|
||||
olcVariantAlternativeAttribute: cn
|
||||
olcVariantAlternativeEntry: cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com
|
||||
|
||||
dn: name={5}Elliot,olcOverlay={0}variant,olcDatabase={1}@BACKEND@,cn=config
|
||||
changetype: add
|
||||
objectclass: olcVariantVariant
|
||||
olcVariantEntry: sn=Elliot,ou=Add & Delete,dc=example,dc=com
|
||||
|
||||
dn: olcVariantVariantAttribute=title,name={5}Elliot,olcOverlay={0}variant,olcDatabase={1}@BACKEND@,cn=config
|
||||
changetype: add
|
||||
objectclass: olcVariantAttribute
|
||||
olcVariantAlternativeAttribute: cn
|
||||
olcVariantAlternativeEntry: cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com
|
||||
|
||||
dn: olcVariantVariantAttribute=description,name={5}Elliot,olcOverlay={0}variant,olcDatabase={1}@BACKEND@,cn=config
|
||||
changetype: add
|
||||
objectclass: olcVariantAttribute
|
||||
olcVariantAlternativeAttribute: description
|
||||
olcVariantAlternativeEntry: cn=Added by Bjorn,ou=Add & Delete,dc=example,dc=com
|
||||
|
||||
dn: name={6}Doe,olcOverlay={0}variant,olcDatabase={1}@BACKEND@,cn=config
|
||||
changetype: add
|
||||
objectclass: olcVariantVariant
|
||||
olcVariantEntry: sn=Doe,ou=Add & Delete,dc=example,dc=com
|
||||
|
||||
dn: olcVariantVariantAttribute=title,name={6}Doe,olcOverlay={0}variant,olcDatabase={1}@BACKEND@,cn=config
|
||||
changetype: add
|
||||
objectclass: olcVariantAttribute
|
||||
olcVariantAlternativeAttribute: cn
|
||||
olcVariantAlternativeEntry: cn=John Doe,ou=Information Technology Division,ou=People,dc=example,dc=com
|
||||
|
||||
dn: olcVariantVariantAttribute=description,name={6}Doe,olcOverlay={0}variant,olcDatabase={1}@BACKEND@,cn=config
|
||||
changetype: add
|
||||
objectclass: olcVariantAttribute
|
||||
olcVariantAlternativeAttribute: description
|
||||
olcVariantAlternativeEntry: cn=Added by Bjorn,ou=Add & Delete,dc=example,dc=com
|
||||
|
||||
dn: name={7}Group,olcOverlay={0}variant,olcDatabase={1}@BACKEND@,cn=config
|
||||
changetype: add
|
||||
objectclass: olcVariantVariant
|
||||
olcVariantEntry: cn=Group,ou=Add & Delete,dc=example,dc=com
|
||||
|
||||
dn: olcVariantVariantAttribute=seeAlso,name={7}Group,olcOverlay={0}variant,olcDatabase={1}@BACKEND@,cn=config
|
||||
changetype: add
|
||||
objectclass: olcVariantAttribute
|
||||
olcVariantAlternativeAttribute: member
|
||||
olcVariantAlternativeEntry: cn=Alumni Assoc Staff,ou=Groups,dc=example,dc=com
|
||||
|
||||
dn: olcVariantVariantAttribute=description,name={7}Group,olcOverlay={0}variant,olcDatabase={1}@BACKEND@,cn=config
|
||||
changetype: add
|
||||
objectclass: olcVariantAttribute
|
||||
olcVariantAlternativeAttribute: description
|
||||
olcVariantAlternativeEntry: cn=Alumni Assoc Staff,ou=Groups,dc=example,dc=com
|
||||
151
contrib/slapd-modules/variant/tests/data/test006-out.ldif
Normal file
151
contrib/slapd-modules/variant/tests/data/test006-out.ldif
Normal file
|
|
@ -0,0 +1,151 @@
|
|||
# reading Mark Elliot as anonymous
|
||||
|
||||
# reading the same as various users
|
||||
dn: cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com
|
||||
objectClass: OpenLDAPperson
|
||||
cn: Mark A Elliot
|
||||
sn: Elliot
|
||||
uid: melliot
|
||||
postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109
|
||||
seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com
|
||||
homePostalAddress: 199 Outer Drive $ Ypsilanti, MI 48198
|
||||
homePhone: +1 313 555 0388
|
||||
drink: Gasoline
|
||||
title: Director, UM Alumni Association
|
||||
mail: melliot@mail.alumni.example.com
|
||||
pager: +1 313 555 7671
|
||||
facsimileTelephoneNumber: +1 313 555 7762
|
||||
telephoneNumber: +1 313 555 4177
|
||||
description: Mark A Elliot
|
||||
|
||||
dn: cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com
|
||||
objectClass: OpenLDAPperson
|
||||
cn: Mark Elliot
|
||||
sn: Elliot
|
||||
uid: melliot
|
||||
postalAddress: Alumni Association $ 111 Maple St $ Anytown, MI 48109
|
||||
seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com
|
||||
homePostalAddress: 199 Outer Drive $ Ypsilanti, MI 48198
|
||||
homePhone: +1 313 555 0388
|
||||
drink: Gasoline
|
||||
title: Director, UM Alumni Association
|
||||
mail: melliot@mail.alumni.example.com
|
||||
pager: +1 313 555 7671
|
||||
facsimileTelephoneNumber: +1 313 555 7762
|
||||
telephoneNumber: +1 313 555 4177
|
||||
description: Mark Elliot
|
||||
|
||||
|
||||
# Add & Delete subtree contents as seen by Babs
|
||||
dn: ou=Add & Delete,dc=example,dc=com
|
||||
objectClass: organizationalUnit
|
||||
ou: Add & Delete
|
||||
|
||||
dn: sn=Doe,ou=Add & Delete,dc=example,dc=com
|
||||
objectClass: OpenLDAPperson
|
||||
cn: John
|
||||
uid: jd
|
||||
sn: Doe
|
||||
title: John Doe
|
||||
|
||||
dn: sn=Elliot,ou=Add & Delete,dc=example,dc=com
|
||||
objectClass: OpenLDAPperson
|
||||
cn: Mark
|
||||
uid: me
|
||||
sn: Elliot
|
||||
title: Mark A Elliot
|
||||
|
||||
dn: cn=group,ou=Add & Delete,dc=example,dc=com
|
||||
objectClass: groupOfNames
|
||||
member: dc=example,dc=com
|
||||
cn: group
|
||||
description: All Alumni Assoc Staff
|
||||
seeAlso: cn=Manager,dc=example,dc=com
|
||||
seeAlso: cn=Dorothy Stevens,ou=Alumni Association,ou=People,dc=example,dc=com
|
||||
seeAlso: cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com
|
||||
seeAlso: cn=Jane Doe,ou=Alumni Association,ou=People,dc=example,dc=com
|
||||
seeAlso: cn=Jennifer Smith,ou=Alumni Association,ou=People,dc=example,dc=com
|
||||
seeAlso: cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com
|
||||
seeAlso: cn=Ursula Hampster,ou=Alumni Association,ou=People,dc=example,dc=com
|
||||
|
||||
|
||||
# Add & Delete subtree contents as seen by Bjorn
|
||||
dn: ou=Add & Delete,dc=example,dc=com
|
||||
objectClass: organizationalUnit
|
||||
ou: Add & Delete
|
||||
|
||||
dn: sn=Doe,ou=Add & Delete,dc=example,dc=com
|
||||
objectClass: OpenLDAPperson
|
||||
cn: John
|
||||
uid: jd
|
||||
sn: Doe
|
||||
title: Jonathon Doe
|
||||
|
||||
dn: sn=Elliot,ou=Add & Delete,dc=example,dc=com
|
||||
objectClass: OpenLDAPperson
|
||||
cn: Mark
|
||||
uid: me
|
||||
sn: Elliot
|
||||
title: Mark Elliot
|
||||
|
||||
dn: cn=group,ou=Add & Delete,dc=example,dc=com
|
||||
objectClass: groupOfNames
|
||||
member: dc=example,dc=com
|
||||
cn: group
|
||||
description: All Alumni Assoc Staff
|
||||
seeAlso: cn=Manager,dc=example,dc=com
|
||||
seeAlso: cn=Dorothy Stevens,ou=Alumni Association,ou=People,dc=example,dc=com
|
||||
seeAlso: cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com
|
||||
seeAlso: cn=Jane Doe,ou=Alumni Association,ou=People,dc=example,dc=com
|
||||
seeAlso: cn=Jennifer Smith,ou=Alumni Association,ou=People,dc=example,dc=com
|
||||
seeAlso: cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com
|
||||
seeAlso: cn=Ursula Hampster,ou=Alumni Association,ou=People,dc=example,dc=com
|
||||
|
||||
|
||||
# Final state of ou=Add & Delete,dc=example,dc=com as seen by the Manager
|
||||
dn: ou=Add & Delete,dc=example,dc=com
|
||||
objectClass: organizationalUnit
|
||||
ou: Add & Delete
|
||||
|
||||
dn: cn=Added by Bjorn,ou=Add & Delete,dc=example,dc=com
|
||||
objectClass: inetOrgPerson
|
||||
sn: Jensen
|
||||
cn: Added by Bjorn
|
||||
description: added by jaj (should succeed)
|
||||
|
||||
dn: sn=Doe,ou=Add & Delete,dc=example,dc=com
|
||||
objectClass: OpenLDAPperson
|
||||
cn: John
|
||||
uid: jd
|
||||
sn: Doe
|
||||
description: added by jaj (should succeed)
|
||||
title: John Doe
|
||||
title: Jonathon Doe
|
||||
|
||||
dn: sn=Elliot,ou=Add & Delete,dc=example,dc=com
|
||||
objectClass: OpenLDAPperson
|
||||
cn: Mark
|
||||
uid: me
|
||||
sn: Elliot
|
||||
description: added by jaj (should succeed)
|
||||
title: Mark Elliot
|
||||
title: Mark A Elliot
|
||||
|
||||
dn: cn=group,ou=Add & Delete,dc=example,dc=com
|
||||
objectClass: groupOfNames
|
||||
member: dc=example,dc=com
|
||||
cn: group
|
||||
description: All Alumni Assoc Staff
|
||||
description: another one added by bjorn (should succeed)
|
||||
seeAlso: cn=Manager,dc=example,dc=com
|
||||
seeAlso: cn=Dorothy Stevens,ou=Alumni Association,ou=People,dc=example,dc=com
|
||||
seeAlso: cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com
|
||||
seeAlso: cn=Jane Doe,ou=Alumni Association,ou=People,dc=example,dc=com
|
||||
seeAlso: cn=Jennifer Smith,ou=Alumni Association,ou=People,dc=example,dc=com
|
||||
seeAlso: cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com
|
||||
seeAlso: cn=Ursula Hampster,ou=Alumni Association,ou=People,dc=example,dc=com
|
||||
seeAlso: cn=Bjorn Jensen,ou=Information Technology DivisioN,ou=People,dc=examp
|
||||
le,dc=com
|
||||
seeAlso: cn=Barbara Jensen,ou=Information Technology DivisioN,ou=People,dc=exa
|
||||
mple,dc=com
|
||||
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
# Testing searches against attribute supertypes...
|
||||
dn: ou=Groups,dc=example,dc=com
|
||||
objectClass: organizationalUnit
|
||||
ou: Groups
|
||||
st: Alumni Association
|
||||
|
||||
52
contrib/slapd-modules/variant/tests/data/test010-out.ldif
Normal file
52
contrib/slapd-modules/variant/tests/data/test010-out.ldif
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
# Test 1, trigger sizelimit without overlay interference
|
||||
dn: cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc
|
||||
=com
|
||||
objectClass: OpenLDAPperson
|
||||
cn: Bjorn Jensen
|
||||
cn: Biiff Jensen
|
||||
sn: Jensen
|
||||
uid: bjorn
|
||||
seeAlso: cn=All Staff,ou=Groups,dc=example,dc=com
|
||||
userPassword:: Ympvcm4=
|
||||
homePostalAddress: 19923 Seven Mile Rd. $ South Lyon, MI 49999
|
||||
drink: Iced Tea
|
||||
description: Hiker, biker
|
||||
title: Director, Embedded Systems
|
||||
postalAddress: Info Tech Division $ 535 W. William St. $ Anytown, MI 48103
|
||||
mail: bjorn@mailgw.example.com
|
||||
homePhone: +1 313 555 5444
|
||||
pager: +1 313 555 4474
|
||||
facsimileTelephoneNumber: +1 313 555 2177
|
||||
telephoneNumber: +1 313 555 0355
|
||||
Size limit exceeded (4)
|
||||
|
||||
# Test 2, check sizelimit is not triggered when it matches the number of entries returned
|
||||
dn: ou=Groups,dc=example,dc=com
|
||||
objectClass: organizationalUnit
|
||||
ou: Groups
|
||||
st: Alumni Association
|
||||
|
||||
dn: ou=People,dc=example,dc=com
|
||||
objectClass: organizationalUnit
|
||||
objectClass: extensibleObject
|
||||
ou: People
|
||||
uidNumber: 0
|
||||
gidNumber: 0
|
||||
description: The Example, Inc. at Anytown
|
||||
|
||||
dn: cn=Manager,dc=example,dc=com
|
||||
objectClass: person
|
||||
cn: Manager
|
||||
cn: Directory Manager
|
||||
cn: Dir Man
|
||||
sn: Manager
|
||||
description: Manager of the directory
|
||||
userPassword:: c2VjcmV0
|
||||
|
||||
# Test 3, check sizelimit will stop at the right time
|
||||
dn: ou=Groups,dc=example,dc=com
|
||||
objectClass: organizationalUnit
|
||||
ou: Groups
|
||||
st: Alumni Association
|
||||
Size limit exceeded (4)
|
||||
|
||||
10
contrib/slapd-modules/variant/tests/data/test011-out.ldif
Normal file
10
contrib/slapd-modules/variant/tests/data/test011-out.ldif
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
# ldapsearch does not return anything tangible in the output if it enounters a referral
|
||||
|
||||
# Asking for the referral will return LDAP_REFERRAL
|
||||
Referral (10)
|
||||
Matched DN: cn=Gern Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com
|
||||
Referral: ldap://hostB/cn=Gern%20Jensen,ou=Information%20Technology%20Division,ou=People,dc=example,dc=com??sub
|
||||
# Asking for anything under a referral will do the same
|
||||
Referral (10)
|
||||
Matched DN: cn=Gern Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com
|
||||
Referral: ldap://hostB/cn=child,cn=Gern%20Jensen,ou=Information%20Technology%20Division,ou=People,dc=example,dc=com??sub
|
||||
13
contrib/slapd-modules/variant/tests/data/test012-data.ldif
Normal file
13
contrib/slapd-modules/variant/tests/data/test012-data.ldif
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
dn: dc=demonstration,dc=com
|
||||
changetype: add
|
||||
objectclass: organization
|
||||
objectclass: domainRelatedObject
|
||||
objectclass: dcobject
|
||||
o: demo
|
||||
associateddomain: demonstration.com
|
||||
|
||||
dn: ou=Societies,dc=demonstration,dc=com
|
||||
changetype: add
|
||||
objectclass: organizationalUnit
|
||||
ou: Societies
|
||||
seealso: dc=example,dc=com
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
dn: ou=People,dc=example,dc=com
|
||||
objectClass: organizationalUnit
|
||||
objectClass: extensibleObject
|
||||
ou: People
|
||||
uidNumber: 0
|
||||
gidNumber: 0
|
||||
seealso: dc=example,dc=com
|
||||
description: The Example, Inc. at Anytown
|
||||
|
||||
17
contrib/slapd-modules/variant/tests/data/variant.conf
Normal file
17
contrib/slapd-modules/variant/tests/data/variant.conf
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
overlay variant
|
||||
passReplication TRUE
|
||||
|
||||
variantDN ou=People,dc=example,dc=com
|
||||
variantSpec seealso seealso ou=Societies,dc=example,dc=com
|
||||
variantSpec description description dc=example,dc=com
|
||||
|
||||
variantRegex "(.*),(ou=.*technology.*)(,)dc=example,dc=com"
|
||||
variantRegexSpec title description $0
|
||||
variantRegexSpec ou ou "$2$3dc=example$3dc=com"
|
||||
|
||||
variantDN ou=Groups,dc=example,dc=com
|
||||
variantSpec st ou "ou=Alumni Association,ou=People,dc=example,dc=com"
|
||||
variantSpec description description ou=People,dc=example,dc=com
|
||||
|
||||
variantRegex .*
|
||||
variantRegexSpec l l dc=example,dc=com
|
||||
229
contrib/slapd-modules/variant/tests/run
Executable file
229
contrib/slapd-modules/variant/tests/run
Executable file
|
|
@ -0,0 +1,229 @@
|
|||
#!/bin/sh
|
||||
## $OpenLDAP$
|
||||
## This work is part of OpenLDAP Software <http://www.openldap.org/>.
|
||||
##
|
||||
## Copyright 1998-2021 The OpenLDAP Foundation.
|
||||
## All rights reserved.
|
||||
##
|
||||
## Redistribution and use in source and binary forms, with or without
|
||||
## modification, are permitted only as authorized by the OpenLDAP
|
||||
## Public License.
|
||||
##
|
||||
## A copy of this license is available in the file LICENSE in the
|
||||
## top-level directory of the distribution or, alternatively, at
|
||||
## <http://www.OpenLDAP.org/license.html>.
|
||||
##
|
||||
## ACKNOWLEDGEMENTS:
|
||||
## This module was written in 2016 by Ondřej Kuzník for Symas Corp.
|
||||
|
||||
USAGE="$0 [-b <backend>] [-c] [-k] [-l #] [-p] [-s {ro|rp}] [-u] [-w] <script>"
|
||||
|
||||
TOPSRCDIR="${SRCDIR-$LDAP_SRC}"
|
||||
SRCDIR="${TOPSRCDIR}/tests"
|
||||
eval `grep EGREP_CMD= ${LDAP_BUILD}/tests/run`
|
||||
eval `$EGREP_CMD -e '^LN_S=' ${LDAP_BUILD}/tests/run`
|
||||
|
||||
export SRCDIR TOPSRCDIR LN_S EGREP_CMD
|
||||
|
||||
. "${SRCDIR}/scripts/defines.sh"
|
||||
|
||||
BACKEND=
|
||||
CLEAN=no
|
||||
WAIT=0
|
||||
KILLSERVERS=yes
|
||||
PRESERVE=${PRESERVE-no}
|
||||
SYNCMODE=${SYNCMODE-rp}
|
||||
USERDATA=no
|
||||
LOOP=1
|
||||
COUNTER=1
|
||||
|
||||
while test $# -gt 0 ; do
|
||||
case "$1" in
|
||||
-b | -backend)
|
||||
BACKEND="$2"
|
||||
shift; shift ;;
|
||||
|
||||
-c | -clean)
|
||||
CLEAN=yes
|
||||
shift ;;
|
||||
|
||||
-k | -kill)
|
||||
KILLSERVERS=no
|
||||
shift ;;
|
||||
-l | -loop)
|
||||
NUM="`echo $2 | sed 's/[0-9]//g'`"
|
||||
if [ -z "$NUM" ]; then
|
||||
LOOP=$2
|
||||
else
|
||||
echo "Loop variable not an int: $2"
|
||||
echo "$USAGE"; exit 1
|
||||
fi
|
||||
shift ;
|
||||
shift ;;
|
||||
|
||||
-p | -preserve)
|
||||
PRESERVE=yes
|
||||
shift ;;
|
||||
|
||||
-s | -syncmode)
|
||||
case "$2" in
|
||||
ro | rp)
|
||||
SYNCMODE="$2"
|
||||
;;
|
||||
*)
|
||||
echo "unknown sync mode $2"
|
||||
echo "$USAGE"; exit 1
|
||||
;;
|
||||
esac
|
||||
shift; shift ;;
|
||||
|
||||
-u | -userdata)
|
||||
USERDATA=yes
|
||||
shift ;;
|
||||
|
||||
-w | -wait)
|
||||
WAIT=1
|
||||
shift ;;
|
||||
|
||||
-)
|
||||
shift
|
||||
break ;;
|
||||
|
||||
-*)
|
||||
echo "$USAGE"; exit 1
|
||||
;;
|
||||
|
||||
*)
|
||||
break ;;
|
||||
esac
|
||||
done
|
||||
|
||||
eval `$EGREP_CMD -e '^AC' ${LDAP_BUILD}/tests/run`
|
||||
export `$EGREP_CMD -e '^AC' ${LDAP_BUILD}/tests/run | sed 's/=.*//'`
|
||||
|
||||
if test -z "$BACKEND" ; then
|
||||
for b in mdb ; do
|
||||
if eval "test \"\$AC_$b\" != no" ; then
|
||||
BACKEND=$b
|
||||
break
|
||||
fi
|
||||
done
|
||||
if test -z "$BACKEND" ; then
|
||||
echo "No suitable default database backend configured" >&2
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
BACKENDTYPE=`eval 'echo $AC_'$BACKEND`
|
||||
if test "x$BACKENDTYPE" = "x" ; then
|
||||
BACKENDTYPE="unknown"
|
||||
fi
|
||||
|
||||
# Backend features. indexdb: indexing and unchecked limit.
|
||||
# maindb: main storage backend. Currently index,limits,mode,paged results.
|
||||
INDEXDB=noindexdb MAINDB=nomaindb
|
||||
case $BACKEND in
|
||||
mdb) INDEXDB=indexdb MAINDB=maindb ;;
|
||||
ndb) INDEXDB=indexdb ;;
|
||||
esac
|
||||
|
||||
export BACKEND BACKENDTYPE INDEXDB MAINDB \
|
||||
WAIT KILLSERVERS PRESERVE SYNCMODE USERDATA \
|
||||
SRCDIR
|
||||
|
||||
if test $# = 0 ; then
|
||||
echo "$USAGE"; exit 1
|
||||
fi
|
||||
|
||||
# need defines.sh for the definitions of the directories
|
||||
. $SRCDIR/scripts/defines.sh
|
||||
|
||||
SCRIPTDIR="${TOPDIR}/tests/scripts"
|
||||
|
||||
export SCRIPTDIR
|
||||
|
||||
SCRIPTNAME="$1"
|
||||
shift
|
||||
|
||||
if test -x "${SCRIPTDIR}/${SCRIPTNAME}" ; then
|
||||
SCRIPT="${SCRIPTDIR}/${SCRIPTNAME}"
|
||||
elif test -x "`echo ${SCRIPTDIR}/test*-${SCRIPTNAME}`"; then
|
||||
SCRIPT="`echo ${SCRIPTDIR}/test*-${SCRIPTNAME}`"
|
||||
elif test -x "`echo ${SCRIPTDIR}/${SCRIPTNAME}-*`"; then
|
||||
SCRIPT="`echo ${SCRIPTDIR}/${SCRIPTNAME}-*`"
|
||||
else
|
||||
echo "run: ${SCRIPTNAME} not found (or not executable)"
|
||||
exit 1;
|
||||
fi
|
||||
|
||||
if test ! -r ${DATADIR}/test.ldif ; then
|
||||
${LN_S} ${SRCDIR}/data ${DATADIR}
|
||||
fi
|
||||
if test ! -r ${SCHEMADIR}/core.schema ; then
|
||||
${LN_S} ${TOPSRCDIR}/servers/slapd/schema ${SCHEMADIR}
|
||||
fi
|
||||
if test ! -r ./data; then
|
||||
${LN_S} ${TOPDIR}/tests/data ./
|
||||
fi
|
||||
|
||||
if test -d ${TESTDIR} ; then
|
||||
if test $PRESERVE = no ; then
|
||||
echo "Cleaning up test run directory leftover from previous run."
|
||||
/bin/rm -rf ${TESTDIR}
|
||||
elif test $PRESERVE = yes ; then
|
||||
echo "Cleaning up only database directories leftover from previous run."
|
||||
/bin/rm -rf ${TESTDIR}/db.*
|
||||
fi
|
||||
fi
|
||||
if test $BACKEND = ndb ; then
|
||||
mysql --user root <<EOF
|
||||
drop database if exists db_1;
|
||||
drop database if exists db_2;
|
||||
drop database if exists db_3;
|
||||
drop database if exists db_4;
|
||||
drop database if exists db_5;
|
||||
drop database if exists db_6;
|
||||
EOF
|
||||
fi
|
||||
mkdir -p ${TESTDIR}
|
||||
|
||||
if test $USERDATA = yes ; then
|
||||
if test ! -d userdata ; then
|
||||
echo "User data directory (userdata) does not exist."
|
||||
exit 1
|
||||
fi
|
||||
cp -R userdata/* ${TESTDIR}
|
||||
fi
|
||||
|
||||
# disable LDAP initialization
|
||||
LDAPNOINIT=true; export LDAPNOINIT
|
||||
|
||||
echo "Running ${SCRIPT} for ${BACKEND}..."
|
||||
while [ $COUNTER -le $LOOP ]; do
|
||||
if [ $LOOP -gt 1 ]; then
|
||||
echo "Running $COUNTER of $LOOP iterations"
|
||||
fi
|
||||
$SCRIPT $*
|
||||
RC=$?
|
||||
|
||||
if test $CLEAN = yes ; then
|
||||
echo "Cleaning up test run directory from this run."
|
||||
/bin/rm -rf ${TESTDIR}
|
||||
echo "Cleaning up symlinks."
|
||||
/bin/rm -f ${DATADIR} ${SCHEMADIR}
|
||||
fi
|
||||
|
||||
if [ $RC -ne 0 ]; then
|
||||
if [ $LOOP -gt 1 ]; then
|
||||
echo "Failed after $COUNTER of $LOOP iterations"
|
||||
fi
|
||||
exit $RC
|
||||
else
|
||||
COUNTER=`expr $COUNTER + 1`
|
||||
if [ $COUNTER -le $LOOP ]; then
|
||||
echo "Cleaning up test run directory from this run."
|
||||
/bin/rm -rf ${TESTDIR}
|
||||
fi
|
||||
fi
|
||||
done
|
||||
exit $RC
|
||||
102
contrib/slapd-modules/variant/tests/scripts/all
Executable file
102
contrib/slapd-modules/variant/tests/scripts/all
Executable file
|
|
@ -0,0 +1,102 @@
|
|||
#! /bin/sh
|
||||
# $OpenLDAP$
|
||||
## This work is part of OpenLDAP Software <http://www.openldap.org/>.
|
||||
##
|
||||
## Copyright 1998-2016 The OpenLDAP Foundation.
|
||||
## All rights reserved.
|
||||
##
|
||||
## Redistribution and use in source and binary forms, with or without
|
||||
## modification, are permitted only as authorized by the OpenLDAP
|
||||
## Public License.
|
||||
##
|
||||
## A copy of this license is available in the file LICENSE in the
|
||||
## top-level directory of the distribution or, alternatively, at
|
||||
## <http://www.OpenLDAP.org/license.html>.
|
||||
|
||||
. $SRCDIR/scripts/defines.sh
|
||||
|
||||
TB="" TN=""
|
||||
if test -t 1 ; then
|
||||
TB=`$SHTOOL echo -e "%B" 2>/dev/null`
|
||||
TN=`$SHTOOL echo -e "%b" 2>/dev/null`
|
||||
fi
|
||||
|
||||
FAILCOUNT=0
|
||||
SKIPCOUNT=0
|
||||
SLEEPTIME=10
|
||||
|
||||
echo ">>>>> Executing all LDAP tests for $BACKEND"
|
||||
|
||||
if [ -n "$NOEXIT" ]; then
|
||||
echo "Result Test" > $TESTWD/results
|
||||
fi
|
||||
|
||||
for CMD in ${SCRIPTDIR}/test*; do
|
||||
case "$CMD" in
|
||||
*~) continue;;
|
||||
*.bak) continue;;
|
||||
*.orig) continue;;
|
||||
*.sav) continue;;
|
||||
*) 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
|
||||
if test $BACKEND = ndb ; then
|
||||
mysql --user root <<EOF
|
||||
drop database if exists db_1;
|
||||
drop database if exists db_2;
|
||||
drop database if exists db_3;
|
||||
drop database if exists db_4;
|
||||
drop database if exists db_5;
|
||||
drop database if exists db_6;
|
||||
EOF
|
||||
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}."
|
||||
115
contrib/slapd-modules/variant/tests/scripts/common.sh
Executable file
115
contrib/slapd-modules/variant/tests/scripts/common.sh
Executable file
|
|
@ -0,0 +1,115 @@
|
|||
#! /bin/sh
|
||||
## $OpenLDAP$
|
||||
## This work is part of OpenLDAP Software <http://www.openldap.org/>.
|
||||
##
|
||||
## Copyright 2016-2021 The OpenLDAP Foundation.
|
||||
## All rights reserved.
|
||||
##
|
||||
## Redistribution and use in source and binary forms, with or without
|
||||
## modification, are permitted only as authorized by the OpenLDAP
|
||||
## Public License.
|
||||
##
|
||||
## A copy of this license is available in the file LICENSE in the
|
||||
## top-level directory of the distribution or, alternatively, at
|
||||
## <http://www.OpenLDAP.org/license.html>.
|
||||
##
|
||||
## ACKNOWLEDGEMENTS:
|
||||
## This module was written in 2016-2017 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 $LDIFORDERED
|
||||
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
|
||||
|
||||
echo "Making a modification that will be hidden by the test config..."
|
||||
$LDAPMODIFY -D $MANAGERDN -H $URI1 -w $PASSWD \
|
||||
-f data/hidden.ldif >> $TESTOUT 2>&1
|
||||
RC=$?
|
||||
if test $RC != 0 ; then
|
||||
echo "ldapmodify failed ($RC)!"
|
||||
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
||||
exit $RC
|
||||
fi
|
||||
|
||||
$LDAPSEARCH -D cn=config -H $URI1 -y $CONFIGPWF \
|
||||
-s base -b 'cn=module{0},cn=config' 1.1 >$TESTOUT 2>&1
|
||||
RC=$?
|
||||
case $RC in
|
||||
0)
|
||||
$LDAPMODIFY -v -D cn=config -H $URI1 -y $CONFIGPWF \
|
||||
>> $TESTOUT 2>&1 <<EOMOD
|
||||
dn: cn=module{0},cn=config
|
||||
changetype: modify
|
||||
add: olcModuleLoad
|
||||
olcModuleLoad: `pwd`/../variant.la
|
||||
EOMOD
|
||||
;;
|
||||
32)
|
||||
$LDAPMODIFY -v -D cn=config -H $URI1 -y $CONFIGPWF \
|
||||
>> $TESTOUT 2>&1 <<EOMOD
|
||||
dn: cn=module,cn=config
|
||||
changetype: add
|
||||
objectClass: olcModuleList
|
||||
olcModuleLoad: `pwd`/../variant.la
|
||||
EOMOD
|
||||
;;
|
||||
*)
|
||||
echo "Failed testing for module load entry"
|
||||
exit $RC;
|
||||
;;
|
||||
esac
|
||||
|
||||
RC=$?
|
||||
if test $RC != 0 ; then
|
||||
echo "ldapmodify failed ($RC)!"
|
||||
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
||||
exit $RC
|
||||
fi
|
||||
|
||||
echo "Loading test variant configuration..."
|
||||
. $CONFFILTER $BACKEND $MONITORDB < $OVERLAY_CONFIG | \
|
||||
$LDAPMODIFY -v -D cn=config -H $URI1 -y $CONFIGPWF \
|
||||
> $TESTOUT 2>&1
|
||||
RC=$?
|
||||
if test $RC != 0 ; then
|
||||
echo "ldapmodify failed ($RC)!"
|
||||
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
||||
exit $RC
|
||||
fi
|
||||
209
contrib/slapd-modules/variant/tests/scripts/test001-config
Executable file
209
contrib/slapd-modules/variant/tests/scripts/test001-config
Executable file
|
|
@ -0,0 +1,209 @@
|
|||
#! /bin/sh
|
||||
## $OpenLDAP$
|
||||
## This work is part of OpenLDAP Software <http://www.openldap.org/>.
|
||||
##
|
||||
## Copyright 2016-2021 The OpenLDAP Foundation.
|
||||
## All rights reserved.
|
||||
##
|
||||
## Redistribution and use in source and binary forms, with or without
|
||||
## modification, are permitted only as authorized by the OpenLDAP
|
||||
## Public License.
|
||||
##
|
||||
## A copy of this license is available in the file LICENSE in the
|
||||
## top-level directory of the distribution or, alternatively, at
|
||||
## <http://www.OpenLDAP.org/license.html>.
|
||||
##
|
||||
## ACKNOWLEDGEMENTS:
|
||||
## This module was written in 2016 by Ondřej Kuzník for Symas Corp.
|
||||
|
||||
echo "running defines.sh"
|
||||
. $SRCDIR/scripts/defines.sh
|
||||
|
||||
. ${SCRIPTDIR}/common.sh
|
||||
|
||||
echo "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
|
||||
;;
|
||||
80)
|
||||
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..." >> $SERVER3OUT
|
||||
$LDAPSEARCH -b "$BASEDN" -H $URI1 \
|
||||
>> $SERVER3OUT 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 suppport..."
|
||||
mkdir $TESTDIR/conftest $DBDIR2
|
||||
. $CONFFILTER $BACKEND $MONITORDB < $CONFTWO \
|
||||
| sed -e '/^argsfile.*/a\
|
||||
moduleload ../variant.la' \
|
||||
-e '/database.*monitor/i\
|
||||
include data/variant.conf' \
|
||||
> $CONF2
|
||||
echo "database config" >>$CONF2
|
||||
echo "rootpw `$SLAPPASSWD -T $CONFIGPWF`" >>$CONF2
|
||||
|
||||
$SLAPADD -f $CONF2 -l $LDIFORDERED
|
||||
$SLAPD -Tt -f $CONF2 -F $TESTDIR/conftest -d $LVL >> $LOG2 2>&1
|
||||
RC=$?
|
||||
if test $RC != 0 ; then
|
||||
echo "slaptest failed ($RC)!"
|
||||
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
||||
exit $RC
|
||||
fi
|
||||
|
||||
echo "Starting slapd on TCP/IP port $PORT2..."
|
||||
$SLAPD -F $TESTDIR/conftest -h $URI2 -d $LVL >> $LOG2 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}variant,olcDatabase={1}$BACKEND,cn=config" \
|
||||
>> $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..." >> $SERVER2OUT
|
||||
$LDAPSEARCH -D cn=config -H $URI2 -y $CONFIGPWF \
|
||||
-b "olcOverlay={0}variant,olcDatabase={1}$BACKEND,cn=config" \
|
||||
>> $SERVER2OUT 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 a < $SERVER2OUT > $SERVER2FLT
|
||||
echo "Filtering expected entries..."
|
||||
$LDIFFILTER -s a < $SERVER1OUT > $SERVER1FLT
|
||||
echo "Comparing filter output..."
|
||||
$CMP $SERVER2FLT $SERVER1FLT > $CMPOUT
|
||||
|
||||
if test $? != 0 ; then
|
||||
echo "Comparison failed"
|
||||
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
||||
exit 1
|
||||
fi
|
||||
|
||||
rm $SERVER1OUT $SERVER2OUT
|
||||
|
||||
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..." >> $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
|
||||
|
||||
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
||||
|
||||
echo "Filtering ldapsearch results..."
|
||||
$LDIFFILTER -s e < $SERVER1OUT > $SERVER1FLT
|
||||
$LDIFFILTER -s e < $SERVER2OUT > $SERVER2FLT
|
||||
echo "Filtering expected entries..."
|
||||
$LDIFFILTER -s e < $SERVER3OUT > $SERVER3FLT
|
||||
echo "Comparing filter output..."
|
||||
$CMP $SERVER3FLT $SERVER1FLT > $CMPOUT && \
|
||||
$CMP $SERVER3FLT $SERVER2FLT > $CMPOUT
|
||||
|
||||
if test $? != 0 ; then
|
||||
echo "Comparison failed"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo ">>>>> Test succeeded"
|
||||
|
||||
test $KILLSERVERS != no && wait
|
||||
|
||||
exit 0
|
||||
113
contrib/slapd-modules/variant/tests/scripts/test002-add-delete
Executable file
113
contrib/slapd-modules/variant/tests/scripts/test002-add-delete
Executable file
|
|
@ -0,0 +1,113 @@
|
|||
#! /bin/sh
|
||||
## $OpenLDAP$
|
||||
## This work is part of OpenLDAP Software <http://www.openldap.org/>.
|
||||
##
|
||||
## Copyright 2016-2021 The OpenLDAP Foundation.
|
||||
## All rights reserved.
|
||||
##
|
||||
## Redistribution and use in source and binary forms, with or without
|
||||
## modification, are permitted only as authorized by the OpenLDAP
|
||||
## Public License.
|
||||
##
|
||||
## A copy of this license is available in the file LICENSE in the
|
||||
## top-level directory of the distribution or, alternatively, at
|
||||
## <http://www.OpenLDAP.org/license.html>.
|
||||
##
|
||||
## ACKNOWLEDGEMENTS:
|
||||
## This module was written in 2016 by Ondřej Kuzník for Symas Corp.
|
||||
|
||||
echo "running defines.sh"
|
||||
. $SRCDIR/scripts/defines.sh
|
||||
|
||||
. ${SCRIPTDIR}/common.sh
|
||||
|
||||
echo "Adding entry..."
|
||||
$LDAPMODIFY -D $MANAGERDN -H $URI1 -w $PASSWD \
|
||||
-f data/test002-01-entry.ldif >> $TESTOUT 2>&1
|
||||
RC=$?
|
||||
if test $RC != 0 ; then
|
||||
echo "ldapmodify failed ($RC)!"
|
||||
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
||||
exit $RC
|
||||
fi
|
||||
|
||||
echo "Configuring entry as variant..."
|
||||
. $CONFFILTER $BACKEND $MONITORDB < data/additional-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 "Removing entry..."
|
||||
$LDAPDELETE -D $MANAGERDN -H $URI1 -w $PASSWD \
|
||||
"cn=Gern Jensen,ou=Information Technology Division,ou=People,$BASEDN" \
|
||||
>> $TESTOUT 2>&1
|
||||
RC=$?
|
||||
if test $RC != 0 ; then
|
||||
echo "ldapdelete failed ($RC)!"
|
||||
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
||||
exit $RC
|
||||
fi
|
||||
|
||||
echo "Adding entry again (should fail)..."
|
||||
$LDAPMODIFY -D $MANAGERDN -H $URI1 -w $PASSWD \
|
||||
-f data/test002-01-entry.ldif >> $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
|
||||
|
||||
echo "Adding a regex entry (should fail)..."
|
||||
$LDAPMODIFY -D $MANAGERDN -H $URI1 -w $PASSWD \
|
||||
-f data/test002-02-regex.ldif >> $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
|
||||
|
||||
echo "Adding entry with offending attributes removed..."
|
||||
grep -v '^description:' data/test002-01-entry.ldif | \
|
||||
$LDAPMODIFY -D $MANAGERDN -H $URI1 -w $PASSWD \
|
||||
>> $TESTOUT 2>&1
|
||||
RC=$?
|
||||
if test $RC != 0 ; then
|
||||
echo "ldapmodify failed ($RC)!"
|
||||
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
||||
exit $RC
|
||||
fi
|
||||
|
||||
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
||||
|
||||
echo ">>>>> Test succeeded"
|
||||
|
||||
test $KILLSERVERS != no && wait
|
||||
|
||||
exit 0
|
||||
113
contrib/slapd-modules/variant/tests/scripts/test003-search
Executable file
113
contrib/slapd-modules/variant/tests/scripts/test003-search
Executable file
|
|
@ -0,0 +1,113 @@
|
|||
#! /bin/sh
|
||||
## $OpenLDAP$
|
||||
## This work is part of OpenLDAP Software <http://www.openldap.org/>.
|
||||
##
|
||||
## Copyright 2016-2021 The OpenLDAP Foundation.
|
||||
## All rights reserved.
|
||||
##
|
||||
## Redistribution and use in source and binary forms, with or without
|
||||
## modification, are permitted only as authorized by the OpenLDAP
|
||||
## Public License.
|
||||
##
|
||||
## A copy of this license is available in the file LICENSE in the
|
||||
## top-level directory of the distribution or, alternatively, at
|
||||
## <http://www.OpenLDAP.org/license.html>.
|
||||
##
|
||||
## ACKNOWLEDGEMENTS:
|
||||
## This module was written in 2016 by Ondřej Kuzník for Symas Corp.
|
||||
|
||||
echo "running defines.sh"
|
||||
. $SRCDIR/scripts/defines.sh
|
||||
|
||||
. ${SCRIPTDIR}/common.sh
|
||||
|
||||
echo "Testing searches against regular entries..."
|
||||
echo "# Testing searches against regular entries..." >> $SEARCHOUT
|
||||
$LDAPSEARCH -b "$BASEDN" -H $URI1 \
|
||||
"(|(name=Elliot)(description=*hiker*))" \
|
||||
>> $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 listing variants..."
|
||||
echo >> $SEARCHOUT
|
||||
echo "# Testing searches listing variants..." >> $SEARCHOUT
|
||||
$LDAPSEARCH -b "$BASEDN" -s one -H $URI1 \
|
||||
>> $SEARCHOUT 2>&1
|
||||
RC=$?
|
||||
if test $RC != 0 ; then
|
||||
echo "ldapsearch failed ($RC)!"
|
||||
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
||||
exit $RC
|
||||
fi
|
||||
|
||||
echo >> $SEARCHOUT
|
||||
$LDAPSEARCH -b "$BASEDN" -s base -H $URI1 \
|
||||
>> $SEARCHOUT 2>&1
|
||||
RC=$?
|
||||
if test $RC != 0 ; then
|
||||
echo "ldapsearch failed ($RC)!"
|
||||
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
||||
exit $RC
|
||||
fi
|
||||
|
||||
echo >> $SEARCHOUT
|
||||
$LDAPSEARCH -s base -H $URI1 \
|
||||
-b "cn=Bjorn Jensen,ou=Information Technology Division,ou=People,$BASEDN" \
|
||||
'(ou=Information Technology Division)' \
|
||||
>> $SEARCHOUT 2>&1
|
||||
RC=$?
|
||||
if test $RC != 0 ; then
|
||||
echo "ldapsearch failed ($RC)!"
|
||||
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
||||
exit $RC
|
||||
fi
|
||||
|
||||
echo >> $SEARCHOUT
|
||||
$LDAPSEARCH -b "cn=ITD Staff,ou=Groups,$BASEDN" -s base -H $URI1 \
|
||||
>> $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 variants..."
|
||||
echo >> $SEARCHOUT
|
||||
echo "# Testing searches filtering on variants..." >> $SEARCHOUT
|
||||
$LDAPSEARCH -b "$BASEDN" -H $URI1 \
|
||||
"(st=Alumni Association)" st \
|
||||
>> $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
|
||||
63
contrib/slapd-modules/variant/tests/scripts/test004-compare
Executable file
63
contrib/slapd-modules/variant/tests/scripts/test004-compare
Executable file
|
|
@ -0,0 +1,63 @@
|
|||
#! /bin/sh
|
||||
## $OpenLDAP$
|
||||
## This work is part of OpenLDAP Software <http://www.openldap.org/>.
|
||||
##
|
||||
## Copyright 2016-2021 The OpenLDAP Foundation.
|
||||
## All rights reserved.
|
||||
##
|
||||
## Redistribution and use in source and binary forms, with or without
|
||||
## modification, are permitted only as authorized by the OpenLDAP
|
||||
## Public License.
|
||||
##
|
||||
## A copy of this license is available in the file LICENSE in the
|
||||
## top-level directory of the distribution or, alternatively, at
|
||||
## <http://www.OpenLDAP.org/license.html>.
|
||||
##
|
||||
## ACKNOWLEDGEMENTS:
|
||||
## This module was written in 2016 by Ondřej Kuzník for Symas Corp.
|
||||
|
||||
echo "running defines.sh"
|
||||
. $SRCDIR/scripts/defines.sh
|
||||
|
||||
. ${SCRIPTDIR}/common.sh
|
||||
|
||||
echo "Comparing a regular entry..."
|
||||
$LDAPCOMPARE -H $URI1 \
|
||||
"cn=Mark Elliot,ou=Alumni Association,ou=People,$BASEDN" \
|
||||
"cn:Mark Elliot" >> $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
|
||||
|
||||
echo "Comparing a variant entry..."
|
||||
$LDAPCOMPARE -H $URI1 \
|
||||
"ou=People,$BASEDN" \
|
||||
"description:The Example, Inc. at Anytown" >> $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
|
||||
|
||||
echo "Comparing a regex entry..."
|
||||
$LDAPCOMPARE -H $URI1 \
|
||||
"cn=Barbara Jensen,ou=Information Technology Division,ou=People,$BASEDN" \
|
||||
"ou:Information Technology Division" >> $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
|
||||
|
||||
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
||||
|
||||
echo ">>>>> Test succeeded"
|
||||
|
||||
test $KILLSERVERS != no && wait
|
||||
|
||||
exit 0
|
||||
120
contrib/slapd-modules/variant/tests/scripts/test005-modify
Executable file
120
contrib/slapd-modules/variant/tests/scripts/test005-modify
Executable file
|
|
@ -0,0 +1,120 @@
|
|||
#! /bin/sh
|
||||
## $OpenLDAP$
|
||||
## This work is part of OpenLDAP Software <http://www.openldap.org/>.
|
||||
##
|
||||
## Copyright 2016-2021 The OpenLDAP Foundation.
|
||||
## All rights reserved.
|
||||
##
|
||||
## Redistribution and use in source and binary forms, with or without
|
||||
## modification, are permitted only as authorized by the OpenLDAP
|
||||
## Public License.
|
||||
##
|
||||
## A copy of this license is available in the file LICENSE in the
|
||||
## top-level directory of the distribution or, alternatively, at
|
||||
## <http://www.OpenLDAP.org/license.html>.
|
||||
##
|
||||
## ACKNOWLEDGEMENTS:
|
||||
## This module was written in 2016 by Ondřej Kuzník for Symas Corp.
|
||||
|
||||
echo "running defines.sh"
|
||||
. $SRCDIR/scripts/defines.sh
|
||||
|
||||
. ${SCRIPTDIR}/common.sh
|
||||
|
||||
echo "Modifying entry..."
|
||||
$LDAPMODIFY -D $MANAGERDN -H $URI1 -w $PASSWD \
|
||||
-f data/test005-changes.ldif >> $TESTOUT 2>&1
|
||||
RC=$?
|
||||
if test $RC != 0 ; then
|
||||
echo "ldapmodify failed ($RC)!"
|
||||
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
||||
exit $RC
|
||||
fi
|
||||
|
||||
# for now, overlay returns success just after the modifications to the main
|
||||
# entry succeed, ignoring the rest should they fail
|
||||
echo "Modifying a nonexistent variant of an existing entry..."
|
||||
$LDAPMODIFY -D $MANAGERDN -H $URI1 -w $PASSWD \
|
||||
-f data/test005-variant-missing.ldif >> $TESTOUT 2>&1
|
||||
RC=$?
|
||||
if test $RC != 0 ; then
|
||||
echo "ldapmodify failed ($RC)!"
|
||||
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
||||
exit $RC
|
||||
fi
|
||||
|
||||
echo "Configuring nonexistent entry as variant..."
|
||||
. $CONFFILTER $BACKEND $MONITORDB < data/additional-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 "Modifying an existing variant of above missing entry..."
|
||||
$LDAPMODIFY -D $MANAGERDN -H $URI1 -w $PASSWD \
|
||||
-f data/test005-modify-missing.ldif >> $TESTOUT 2>&1
|
||||
RC=$?
|
||||
case $RC in
|
||||
0)
|
||||
echo "ldapmodify should have failed ($RC)!"
|
||||
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
||||
exit 1
|
||||
;;
|
||||
32)
|
||||
echo "ldapmodify failed ($RC)"
|
||||
;;
|
||||
*)
|
||||
echo "ldapmodify failed ($RC)!"
|
||||
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
||||
exit $RC
|
||||
;;
|
||||
esac
|
||||
|
||||
echo "Reading affected entries back..."
|
||||
echo "# Reading affected entries back..." >> $SEARCHOUT
|
||||
$LDAPSEARCH -b "$BASEDN" -H $URI1 \
|
||||
'(|(description=*heard*)(st=*)(ou=alabama)(ou=*IT*))' \
|
||||
>> $SEARCHOUT 2>&1
|
||||
RC=$?
|
||||
if test $RC != 0 ; then
|
||||
echo "ldapsearch failed ($RC)!"
|
||||
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
||||
exit $RC
|
||||
fi
|
||||
|
||||
echo >>$SEARCHOUT
|
||||
$LDAPSEARCH -H $URI1 -s base \
|
||||
-b "cn=Bjorn Jensen,ou=Information Technology Division,ou=People,$BASEDN" \
|
||||
>> $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/test005-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
|
||||
323
contrib/slapd-modules/variant/tests/scripts/test006-acl
Executable file
323
contrib/slapd-modules/variant/tests/scripts/test006-acl
Executable file
|
|
@ -0,0 +1,323 @@
|
|||
#! /bin/sh
|
||||
## $OpenLDAP$
|
||||
## This work is part of OpenLDAP Software <http://www.openldap.org/>.
|
||||
##
|
||||
## Copyright 2016-2021 The OpenLDAP Foundation.
|
||||
## All rights reserved.
|
||||
##
|
||||
## Redistribution and use in source and binary forms, with or without
|
||||
## modification, are permitted only as authorized by the OpenLDAP
|
||||
## Public License.
|
||||
##
|
||||
## A copy of this license is available in the file LICENSE in the
|
||||
## top-level directory of the distribution or, alternatively, at
|
||||
## <http://www.OpenLDAP.org/license.html>.
|
||||
##
|
||||
## ACKNOWLEDGEMENTS:
|
||||
## This module was written in 2016 by Ondřej Kuzník for Symas Corp.
|
||||
|
||||
case "$BACKEND" in ldif | null)
|
||||
echo "$BACKEND backend does not support access controls, test skipped"
|
||||
exit 0
|
||||
esac
|
||||
|
||||
echo "running defines.sh"
|
||||
. $SRCDIR/scripts/defines.sh
|
||||
|
||||
CONF=$ACLCONF
|
||||
. ${SCRIPTDIR}/common.sh
|
||||
|
||||
echo "Applying test-specific configuration..."
|
||||
. $CONFFILTER $BACKEND $MONITORDB < data/test006-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
|
||||
|
||||
$LDAPMODIFY -D "$MANAGERDN" -H $URI1 -w $PASSWD >> \
|
||||
$TESTOUT 2>&1 << EOMODS
|
||||
dn: ou=Add & Delete,dc=example,dc=com
|
||||
changetype: add
|
||||
objectClass: organizationalUnit
|
||||
ou: Add & Delete
|
||||
|
||||
dn: cn=group,ou=Add & Delete,dc=example,dc=com
|
||||
changetype: add
|
||||
objectclass: groupOfNames
|
||||
member: dc=example,dc=com
|
||||
|
||||
dn: sn=Doe,ou=Add & Delete,dc=example,dc=com
|
||||
changetype: add
|
||||
objectclass: OpenLDAPperson
|
||||
cn: John
|
||||
uid: jd
|
||||
|
||||
dn: sn=Elliot,ou=Add & Delete,dc=example,dc=com
|
||||
changetype: add
|
||||
objectclass: OpenLDAPperson
|
||||
cn: Mark
|
||||
uid: me
|
||||
EOMODS
|
||||
RC=$?
|
||||
if test $RC != 0 ; then
|
||||
echo "ldapmodify failed ($RC)!"
|
||||
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
||||
exit $RC
|
||||
fi
|
||||
|
||||
echo "Testing search ACL processing..."
|
||||
|
||||
echo "# Try to read an entry inside the Alumni Association container.
|
||||
# It should give us noSuchObject if we're not bound..." \
|
||||
>> $SEARCHOUT
|
||||
# FIXME: temporarily remove the "No such object" message to make
|
||||
# the test succeed even if SLAP_ACL_HONOR_DISCLOSE is not #define'd
|
||||
$LDAPSEARCH -b "$MELLIOTDN" -H $URI1 "(objectclass=*)" \
|
||||
2>&1 | grep -v "No such object" >> $SEARCHOUT
|
||||
|
||||
echo >>$SEARCHOUT
|
||||
echo "# ... and should return appropriate attributes if we're bound as anyone
|
||||
# under Example." \
|
||||
>> $SEARCHOUT
|
||||
$LDAPSEARCH -b "$MELLIOTDN" -H $URI1 \
|
||||
-D "$BABSDN" -w bjensen "(objectclass=*)" >> $SEARCHOUT 2>&1
|
||||
|
||||
$LDAPSEARCH -b "$MELLIOTDN" -H $URI1 \
|
||||
-D "$BJORNSDN" -w bjorn "(objectclass=*)" >> $SEARCHOUT 2>&1
|
||||
|
||||
echo >>$SEARCHOUT
|
||||
echo "# Add & Delete subtree contents as seen by Babs" >> $SEARCHOUT
|
||||
$LDAPSEARCH -b "ou=Add & Delete,dc=example,dc=com" -H $URI1 \
|
||||
-D "$BABSDN" -w bjensen "(objectclass=*)" >> $SEARCHOUT 2>&1
|
||||
|
||||
echo >>$SEARCHOUT
|
||||
echo "# Add & Delete subtree contents as seen by Bjorn" >> $SEARCHOUT
|
||||
$LDAPSEARCH -b "ou=Add & Delete,dc=example,dc=com" -H $URI1 \
|
||||
-D "$BJORNSDN" -w bjorn "(objectclass=*)" >> $SEARCHOUT 2>&1
|
||||
|
||||
echo "Testing modifications..."
|
||||
echo "... ACL on the alternative entry"
|
||||
$LDAPMODIFY -D "$BJORNSDN" -H $URI1 -w bjorn >> \
|
||||
$TESTOUT 2>&1 << EOMODS
|
||||
dn: cn=group,ou=Add & Delete,dc=example,dc=com
|
||||
changetype: modify
|
||||
add: seealso
|
||||
seealso: $BJORNSDN
|
||||
EOMODS
|
||||
RC=$?
|
||||
if test $RC != 0 ; then
|
||||
echo "ldapmodify failed ($RC)!"
|
||||
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
||||
exit $RC
|
||||
fi
|
||||
|
||||
$LDAPMODIFY -D "$BABSDN" -H $URI1 -w bjensen >> \
|
||||
$TESTOUT 2>&1 << EOMODS
|
||||
dn: cn=Alumni Assoc Staff, ou=Groups, dc=example, dc=com
|
||||
changetype: modify
|
||||
add: description
|
||||
description: added by bjensen (should fail)
|
||||
EOMODS
|
||||
RC=$?
|
||||
case $RC in
|
||||
50)
|
||||
;;
|
||||
0)
|
||||
echo "ldapmodify should have failed ($RC)!"
|
||||
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
||||
exit -1
|
||||
;;
|
||||
*)
|
||||
echo "ldapmodify failed ($RC)!"
|
||||
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
||||
exit $RC
|
||||
;;
|
||||
esac
|
||||
|
||||
$LDAPMODIFY -D "$MANAGERDN" -H $URI1 -w $PASSWD >> \
|
||||
$TESTOUT 2>&1 << EOMODS
|
||||
dn: cn=group,ou=Add & Delete,dc=example,dc=com
|
||||
changetype: modify
|
||||
add: seealso
|
||||
seealso: $BABSDN
|
||||
EOMODS
|
||||
RC=$?
|
||||
if test $RC != 0 ; then
|
||||
echo "ldapmodify failed ($RC)!"
|
||||
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
||||
exit $RC
|
||||
fi
|
||||
|
||||
$LDAPMODIFY -D "$BJORNSDN" -H $URI1 -w bjorn >> \
|
||||
$TESTOUT 2>&1 << EOMODS
|
||||
dn: cn=Alumni Assoc Staff, ou=Groups, dc=example, dc=com
|
||||
changetype: modify
|
||||
add: description
|
||||
description: added by bjorn (removed later)
|
||||
EOMODS
|
||||
RC=$?
|
||||
if test $RC != 0 ; then
|
||||
echo "ldapmodify failed ($RC)!"
|
||||
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
||||
exit $RC
|
||||
fi
|
||||
|
||||
$LDAPMODIFY -D "$BABSDN" -H $URI1 -w bjensen >> \
|
||||
$TESTOUT 2>&1 << EOMODS
|
||||
dn: cn=Group,ou=Add & Delete,dc=example,dc=com
|
||||
changetype: modify
|
||||
delete: description
|
||||
description: added by bjorn (removed later)
|
||||
EOMODS
|
||||
RC=$?
|
||||
if test $RC != 0 ; then
|
||||
echo "ldapmodify failed ($RC)!"
|
||||
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
||||
exit $RC
|
||||
fi
|
||||
|
||||
$LDAPMODIFY -D "$BJORNSDN" -H $URI1 -w bjorn >> \
|
||||
$TESTOUT 2>&1 << EOMODS
|
||||
dn: cn=Added by Bjorn,ou=Add & Delete,dc=example,dc=com
|
||||
changetype: add
|
||||
objectClass: inetOrgPerson
|
||||
sn: Jensen
|
||||
EOMODS
|
||||
RC=$?
|
||||
if test $RC != 0 ; then
|
||||
echo "ldapmodify failed ($RC)!"
|
||||
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
||||
exit $RC
|
||||
fi
|
||||
|
||||
$LDAPMODIFY -D "$BJORNSDN" -H $URI1 -w bjorn >> \
|
||||
$TESTOUT 2>&1 << EOMODS
|
||||
dn: cn=Group,ou=Add & Delete,dc=example,dc=com
|
||||
changetype: modify
|
||||
add: description
|
||||
description: another one added by bjorn (should succeed)
|
||||
EOMODS
|
||||
RC=$?
|
||||
if test $RC != 0 ; then
|
||||
echo "ldapmodify failed ($RC)!"
|
||||
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
||||
exit $RC
|
||||
fi
|
||||
|
||||
echo "... ACL on the variant entry"
|
||||
$LDAPMODIFY -D "$BABSDN" -H $URI1 -w bjensen >> \
|
||||
$TESTOUT 2>&1 << EOMODS
|
||||
dn: cn=Group,ou=Add & Delete,dc=example,dc=com
|
||||
changetype: modify
|
||||
add: description
|
||||
description: added by bjensen (should fail)
|
||||
EOMODS
|
||||
RC=$?
|
||||
case $RC in
|
||||
50)
|
||||
;;
|
||||
0)
|
||||
echo "ldapmodify should have failed ($RC)!"
|
||||
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
||||
exit -1
|
||||
;;
|
||||
*)
|
||||
echo "ldapmodify failed ($RC)!"
|
||||
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
||||
exit $RC
|
||||
;;
|
||||
esac
|
||||
|
||||
$LDAPMODIFY -D "$BJORNSDN" -H $URI1 -w bjorn >> \
|
||||
$TESTOUT 2>&1 << EOMODS
|
||||
dn: sn=Doe,ou=Add & Delete,dc=example,dc=com
|
||||
changetype: modify
|
||||
add: description
|
||||
description: added by bjorn (will be removed)
|
||||
EOMODS
|
||||
RC=$?
|
||||
if test $RC != 0 ; then
|
||||
echo "ldapmodify failed ($RC)!"
|
||||
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
||||
exit $RC
|
||||
fi
|
||||
|
||||
$LDAPMODIFY -D "$BABSDN" -H $URI1 -w bjensen >> \
|
||||
$TESTOUT 2>&1 << EOMODS
|
||||
dn: cn=Added by Bjorn,ou=Add & Delete,dc=example,dc=com
|
||||
changetype: modify
|
||||
replace: description
|
||||
description: added by bjensen (should fail)
|
||||
EOMODS
|
||||
RC=$?
|
||||
case $RC in
|
||||
50)
|
||||
;;
|
||||
0)
|
||||
echo "ldapmodify should have failed ($RC)!"
|
||||
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
||||
exit -1
|
||||
;;
|
||||
*)
|
||||
echo "ldapmodify failed ($RC)!"
|
||||
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
||||
exit $RC
|
||||
;;
|
||||
esac
|
||||
|
||||
$LDAPMODIFY -D "$JAJDN" -H $URI1 -w jaj >> \
|
||||
$TESTOUT 2>&1 << EOMODS
|
||||
dn: sn=Elliot,ou=Add & Delete,dc=example,dc=com
|
||||
changetype: modify
|
||||
delete: description
|
||||
description: added by bjorn (will be removed)
|
||||
-
|
||||
add: description
|
||||
description: added by jaj (should succeed)
|
||||
EOMODS
|
||||
RC=$?
|
||||
if test $RC != 0 ; then
|
||||
echo "ldapmodify failed ($RC)!"
|
||||
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
||||
exit $RC
|
||||
fi
|
||||
|
||||
sleep $SLEEP0
|
||||
|
||||
echo >>$SEARCHOUT
|
||||
echo "Using ldapsearch to retrieve all the entries..."
|
||||
echo "# Using ldapsearch to retrieve all the entries..." >> $SEARCHOUT
|
||||
$LDAPSEARCH -S "" -b "ou=Add & Delete,dc=example,dc=com" \
|
||||
-D "$MANAGERDN" -H $URI1 -w $PASSWD \
|
||||
'objectClass=*' >> $SEARCHOUT 2>&1
|
||||
RC=$?
|
||||
if test $RC != 0 ; then
|
||||
echo "ldapsearch failed ($RC)!"
|
||||
exit $RC
|
||||
fi
|
||||
|
||||
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
||||
|
||||
LDIF=data/test006-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 - operations did not complete correctly"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo ">>>>> Test succeeded"
|
||||
|
||||
test $KILLSERVERS != no && wait
|
||||
|
||||
exit 0
|
||||
67
contrib/slapd-modules/variant/tests/scripts/test007-subtypes
Executable file
67
contrib/slapd-modules/variant/tests/scripts/test007-subtypes
Executable file
|
|
@ -0,0 +1,67 @@
|
|||
#! /bin/sh
|
||||
## $OpenLDAP$
|
||||
## This work is part of OpenLDAP Software <http://www.openldap.org/>.
|
||||
##
|
||||
## Copyright 2016-2021 The OpenLDAP Foundation.
|
||||
## All rights reserved.
|
||||
##
|
||||
## Redistribution and use in source and binary forms, with or without
|
||||
## modification, are permitted only as authorized by the OpenLDAP
|
||||
## Public License.
|
||||
##
|
||||
## A copy of this license is available in the file LICENSE in the
|
||||
## top-level directory of the distribution or, alternatively, at
|
||||
## <http://www.OpenLDAP.org/license.html>.
|
||||
##
|
||||
## ACKNOWLEDGEMENTS:
|
||||
## This module was written in 2016 by Ondřej Kuzník for Symas Corp.
|
||||
|
||||
echo "running defines.sh"
|
||||
. $SRCDIR/scripts/defines.sh
|
||||
|
||||
. ${SCRIPTDIR}/common.sh
|
||||
|
||||
echo "Comparing supertype of a variant attribute..."
|
||||
$LDAPCOMPARE -H $URI1 \
|
||||
"ou=Groups,$BASEDN" \
|
||||
"name:Alumni Association" >> $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
|
||||
|
||||
echo "Testing searches against attribute supertypes..."
|
||||
echo "# Testing searches against attribute supertypes..." >> $SEARCHOUT
|
||||
$LDAPSEARCH -b "$BASEDN" -H $URI1 \
|
||||
"(&(name=groups)(name=Alumni Association))" \
|
||||
>> $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/test007-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
|
||||
194
contrib/slapd-modules/variant/tests/scripts/test008-variant-replication
Executable file
194
contrib/slapd-modules/variant/tests/scripts/test008-variant-replication
Executable file
|
|
@ -0,0 +1,194 @@
|
|||
#! /bin/sh
|
||||
## $OpenLDAP$
|
||||
## This work is part of OpenLDAP Software <http://www.openldap.org/>.
|
||||
##
|
||||
## Copyright 2016-2021 The OpenLDAP Foundation.
|
||||
## All rights reserved.
|
||||
##
|
||||
## Redistribution and use in source and binary forms, with or without
|
||||
## modification, are permitted only as authorized by the OpenLDAP
|
||||
## Public License.
|
||||
##
|
||||
## A copy of this license is available in the file LICENSE in the
|
||||
## top-level directory of the distribution or, alternatively, at
|
||||
## <http://www.OpenLDAP.org/license.html>.
|
||||
##
|
||||
## ACKNOWLEDGEMENTS:
|
||||
## This module was written in 2016 by Ondřej Kuzník for Symas Corp.
|
||||
|
||||
echo "running defines.sh"
|
||||
. $SRCDIR/scripts/defines.sh
|
||||
|
||||
if test "$SYNCPROV" = syncprovno; then
|
||||
echo "Syncrepl provider overlay not available, test skipped"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
. ${SCRIPTDIR}/common.sh
|
||||
|
||||
$LDAPMODIFY -v -D cn=config -H $URI1 -y $CONFIGPWF \
|
||||
> $TESTOUT 2>&1 <<EOMOD
|
||||
dn: olcOverlay={0}variant,olcDatabase={1}$BACKEND,cn=config
|
||||
changetype: modify
|
||||
replace: olcVariantPassReplication
|
||||
olcVariantPassReplication: FALSE
|
||||
EOMOD
|
||||
RC=$?
|
||||
if test $RC != 0 ; then
|
||||
echo "ldapmodify failed ($RC)!"
|
||||
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
||||
exit $RC
|
||||
fi
|
||||
|
||||
if test "$SYNCPROV" = syncprovmod; then
|
||||
$LDAPMODIFY -v -D cn=config -H $URI1 -y $CONFIGPWF \
|
||||
> $TESTOUT 2>&1 <<EOMOD
|
||||
dn: cn=module{0},cn=config
|
||||
changetype: modify
|
||||
add: olcModuleLoad
|
||||
olcModuleLoad: $LDAP_BUILD/servers/slapd/overlays/syncprov.la
|
||||
EOMOD
|
||||
|
||||
RC=$?
|
||||
if test $RC != 0 ; then
|
||||
echo "ldapmodify failed ($RC)!"
|
||||
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
||||
exit $RC
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "Configuring syncprov on the provider..."
|
||||
$LDAPMODIFY -v -D cn=config -H $URI1 -y $CONFIGPWF \
|
||||
> $TESTOUT 2>&1 <<EOMOD
|
||||
dn: olcOverlay=syncprov,olcDatabase={1}$BACKEND,cn=config
|
||||
changetype: add
|
||||
objectclass: olcSyncProvConfig
|
||||
EOMOD
|
||||
RC=$?
|
||||
if test $RC != 0 ; then
|
||||
echo "ldapmodify failed ($RC)!"
|
||||
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
||||
exit $RC
|
||||
fi
|
||||
|
||||
mkdir $DBDIR4
|
||||
|
||||
echo "Starting consumer slapd on TCP/IP port $PORT4..."
|
||||
. $CONFFILTER $BACKEND $MONITORDB < $P1SRCONSUMERCONF > $CONF4
|
||||
$SLAPD -f $CONF4 -h $URI4 -d $LVL > $LOG4 2>&1 &
|
||||
CONSUMERPID=$!
|
||||
if test $WAIT != 0 ; then
|
||||
echo CONSUMERPID $CONSUMERPID
|
||||
read foo
|
||||
fi
|
||||
KILLPIDS="$KILLPIDS $CONSUMERPID"
|
||||
|
||||
sleep $SLEEP0
|
||||
|
||||
for i in 0 1 2 3 4 5; do
|
||||
$LDAPSEARCH -s base -b "$BASEDN" -H $URI4 \
|
||||
'objectclass=*' > /dev/null 2>&1
|
||||
RC=$?
|
||||
if test $RC = 0 ; then
|
||||
break
|
||||
fi
|
||||
echo "Waiting ${SLEEP1} seconds for consumer to start replication..."
|
||||
sleep ${SLEEP1}
|
||||
done
|
||||
|
||||
echo "Waiting ${SLEEP1} seconds for consumer to finish replicating..."
|
||||
sleep ${SLEEP1}
|
||||
|
||||
echo "Testing searches against regular entries..."
|
||||
echo "# Testing searches against regular entries..." >> $SEARCHOUT
|
||||
$LDAPSEARCH -b "$BASEDN" -H $URI4 \
|
||||
"(|(name=Elliot)(description=*hiker*))" \
|
||||
>> $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 listing replicated variants..."
|
||||
echo >> $SEARCHOUT
|
||||
echo "# Testing searches listing replicated variants..." >> $SEARCHOUT
|
||||
$LDAPSEARCH -b "$BASEDN" -s one -H $URI4 \
|
||||
>> $SEARCHOUT 2>&1
|
||||
RC=$?
|
||||
if test $RC != 0 ; then
|
||||
echo "ldapsearch failed ($RC)!"
|
||||
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
||||
exit $RC
|
||||
fi
|
||||
|
||||
# regex variants do not replicate correctly and this is documented
|
||||
echo >> $SEARCHOUT
|
||||
$LDAPSEARCH -b "$BASEDN" -s base -H $URI1 \
|
||||
>> $SEARCHOUT 2>&1
|
||||
RC=$?
|
||||
if test $RC != 0 ; then
|
||||
echo "ldapsearch failed ($RC)!"
|
||||
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
||||
exit $RC
|
||||
fi
|
||||
|
||||
# regex variants do not replicate correctly and this is documented
|
||||
echo >> $SEARCHOUT
|
||||
$LDAPSEARCH -s base -H $URI1 \
|
||||
-b "cn=Bjorn Jensen,ou=Information Technology Division,ou=People,$BASEDN" \
|
||||
'(ou=Information Technology Division)' \
|
||||
>> $SEARCHOUT 2>&1
|
||||
RC=$?
|
||||
if test $RC != 0 ; then
|
||||
echo "ldapsearch failed ($RC)!"
|
||||
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
||||
exit $RC
|
||||
fi
|
||||
|
||||
# regex variants do not replicate correctly and this is documented
|
||||
echo >> $SEARCHOUT
|
||||
$LDAPSEARCH -b "cn=ITD Staff,ou=Groups,$BASEDN" -s base -H $URI1 \
|
||||
>> $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 replicated variants..."
|
||||
echo >> $SEARCHOUT
|
||||
echo "# Testing searches filtering on replicated variants..." >> $SEARCHOUT
|
||||
$LDAPSEARCH -b "$BASEDN" -H $URI4 \
|
||||
"(st=Alumni Association)" st \
|
||||
>> $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
|
||||
227
contrib/slapd-modules/variant/tests/scripts/test009-ignored-replication
Executable file
227
contrib/slapd-modules/variant/tests/scripts/test009-ignored-replication
Executable file
|
|
@ -0,0 +1,227 @@
|
|||
#! /bin/sh
|
||||
## $OpenLDAP$
|
||||
## This work is part of OpenLDAP Software <http://www.openldap.org/>.
|
||||
##
|
||||
## Copyright 2016-2021 The OpenLDAP Foundation.
|
||||
## All rights reserved.
|
||||
##
|
||||
## Redistribution and use in source and binary forms, with or without
|
||||
## modification, are permitted only as authorized by the OpenLDAP
|
||||
## Public License.
|
||||
##
|
||||
## A copy of this license is available in the file LICENSE in the
|
||||
## top-level directory of the distribution or, alternatively, at
|
||||
## <http://www.OpenLDAP.org/license.html>.
|
||||
##
|
||||
## ACKNOWLEDGEMENTS:
|
||||
## This module was written in 2016 by Ondřej Kuzník for Symas Corp.
|
||||
|
||||
echo "running defines.sh"
|
||||
. $SRCDIR/scripts/defines.sh
|
||||
|
||||
if test "$SYNCPROV" = syncprovno; then
|
||||
echo "Syncrepl provider overlay not available, test skipped"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
. ${SCRIPTDIR}/common.sh
|
||||
|
||||
if test "$SYNCPROV" = syncprovmod; then
|
||||
$LDAPMODIFY -v -D cn=config -H $URI1 -y $CONFIGPWF \
|
||||
> $TESTOUT 2>&1 <<EOMOD
|
||||
dn: cn=module{0},cn=config
|
||||
changetype: modify
|
||||
add: olcModuleLoad
|
||||
olcModuleLoad: $LDAP_BUILD/servers/slapd/overlays/syncprov.la
|
||||
EOMOD
|
||||
|
||||
RC=$?
|
||||
if test $RC != 0 ; then
|
||||
echo "ldapmodify failed ($RC)!"
|
||||
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
||||
exit $RC
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "Configuring syncprov on the provider..."
|
||||
$LDAPMODIFY -v -D cn=config -H $URI1 -y $CONFIGPWF \
|
||||
> $TESTOUT 2>&1 <<EOMOD
|
||||
dn: olcOverlay={0}syncprov,olcDatabase={1}$BACKEND,cn=config
|
||||
changetype: add
|
||||
objectclass: olcSyncProvConfig
|
||||
EOMOD
|
||||
RC=$?
|
||||
if test $RC != 0 ; then
|
||||
echo "ldapmodify failed ($RC)!"
|
||||
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
||||
exit $RC
|
||||
fi
|
||||
|
||||
mkdir $DBDIR4 $TESTDIR/confdir-consumer
|
||||
|
||||
echo "Starting consumer slapd on TCP/IP port $PORT4..."
|
||||
. $CONFFILTER $BACKEND $MONITORDB < $P1SRCONSUMERCONF > $CONF4
|
||||
|
||||
echo "database config" >>$CONF4
|
||||
echo "rootpw `$SLAPPASSWD -T $CONFIGPWF`" >>$CONF4
|
||||
|
||||
$SLAPD -f $CONF4 -F $TESTDIR/confdir-consumer -h $URI4 -d $LVL > $LOG4 2>&1 &
|
||||
CONSUMERPID=$!
|
||||
if test $WAIT != 0 ; then
|
||||
echo CONSUMERPID $CONSUMERPID
|
||||
read foo
|
||||
fi
|
||||
KILLPIDS="$KILLPIDS $CONSUMERPID"
|
||||
|
||||
sleep $SLEEP0
|
||||
|
||||
echo "Setting up variant overlay on consumer..."
|
||||
$LDAPSEARCH -D cn=config -H $URI4 -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 $URI4 -y $CONFIGPWF \
|
||||
>> $TESTOUT 2>&1 <<EOMOD
|
||||
dn: cn=module{0},cn=config
|
||||
changetype: modify
|
||||
add: olcModuleLoad
|
||||
olcModuleLoad: `pwd`/../variant.la
|
||||
EOMOD
|
||||
;;
|
||||
32)
|
||||
$LDAPMODIFY -v -D cn=config -H $URI4 -y $CONFIGPWF \
|
||||
>> $TESTOUT 2>&1 <<EOMOD
|
||||
dn: cn=module,cn=config
|
||||
changetype: add
|
||||
objectClass: olcModuleList
|
||||
olcModuleLoad: `pwd`/../variant.la
|
||||
EOMOD
|
||||
;;
|
||||
*)
|
||||
echo "Failed testing for module load entry"
|
||||
exit $RC;
|
||||
;;
|
||||
esac
|
||||
|
||||
RC=$?
|
||||
if test $RC != 0 ; then
|
||||
echo "ldapmodify failed ($RC)!"
|
||||
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
||||
exit $RC
|
||||
fi
|
||||
|
||||
. $CONFFILTER $BACKEND $MONITORDB < $OVERLAY_CONFIG | \
|
||||
$LDAPMODIFY -v -D cn=config -H $URI4 -y $CONFIGPWF \
|
||||
> $TESTOUT 2>&1
|
||||
RC=$?
|
||||
if test $RC != 0 ; then
|
||||
echo "ldapmodify failed ($RC)!"
|
||||
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
||||
exit $RC
|
||||
fi
|
||||
|
||||
for i in 0 1 2 3 4 5; do
|
||||
$LDAPSEARCH -s base -b "$BASEDN" -H $URI4 \
|
||||
'objectclass=*' > /dev/null 2>&1
|
||||
RC=$?
|
||||
if test $RC = 0 ; then
|
||||
break
|
||||
fi
|
||||
echo "Waiting ${SLEEP1} seconds for consumer to start replication..."
|
||||
sleep ${SLEEP1}
|
||||
done
|
||||
|
||||
echo "Waiting ${SLEEP1} seconds for consumer to finish replicating..."
|
||||
sleep ${SLEEP1}
|
||||
|
||||
echo "Testing searches against regular entries..."
|
||||
echo "# Testing searches against regular entries..." >> $SEARCHOUT
|
||||
$LDAPSEARCH -b "$BASEDN" -H $URI4 \
|
||||
"(|(name=Elliot)(description=*hiker*))" \
|
||||
>> $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 listing replicated variants..."
|
||||
echo >> $SEARCHOUT
|
||||
echo "# Testing searches listing replicated variants..." >> $SEARCHOUT
|
||||
$LDAPSEARCH -b "$BASEDN" -s one -H $URI4 \
|
||||
>> $SEARCHOUT 2>&1
|
||||
RC=$?
|
||||
if test $RC != 0 ; then
|
||||
echo "ldapsearch failed ($RC)!"
|
||||
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
||||
exit $RC
|
||||
fi
|
||||
|
||||
echo >> $SEARCHOUT
|
||||
$LDAPSEARCH -b "$BASEDN" -s base -H $URI4 \
|
||||
>> $SEARCHOUT 2>&1
|
||||
RC=$?
|
||||
if test $RC != 0 ; then
|
||||
echo "ldapsearch failed ($RC)!"
|
||||
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
||||
exit $RC
|
||||
fi
|
||||
|
||||
echo >> $SEARCHOUT
|
||||
$LDAPSEARCH -s base -H $URI4 \
|
||||
-b "cn=Bjorn Jensen,ou=Information Technology Division,ou=People,$BASEDN" \
|
||||
'(ou=Information Technology Division)' \
|
||||
>> $SEARCHOUT 2>&1
|
||||
RC=$?
|
||||
if test $RC != 0 ; then
|
||||
echo "ldapsearch failed ($RC)!"
|
||||
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
||||
exit $RC
|
||||
fi
|
||||
|
||||
echo >> $SEARCHOUT
|
||||
$LDAPSEARCH -b "cn=ITD Staff,ou=Groups,$BASEDN" -s base -H $URI4 \
|
||||
>> $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 replicated variants..."
|
||||
echo >> $SEARCHOUT
|
||||
echo "# Testing searches filtering on replicated variants..." >> $SEARCHOUT
|
||||
$LDAPSEARCH -b "$BASEDN" -H $URI4 \
|
||||
"(st=Alumni Association)" st \
|
||||
>> $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
|
||||
99
contrib/slapd-modules/variant/tests/scripts/test010-limits
Executable file
99
contrib/slapd-modules/variant/tests/scripts/test010-limits
Executable file
|
|
@ -0,0 +1,99 @@
|
|||
#! /bin/sh
|
||||
## $OpenLDAP$
|
||||
## This work is part of OpenLDAP Software <http://www.openldap.org/>.
|
||||
##
|
||||
## Copyright 2016-2021 The OpenLDAP Foundation.
|
||||
## All rights reserved.
|
||||
##
|
||||
## Redistribution and use in source and binary forms, with or without
|
||||
## modification, are permitted only as authorized by the OpenLDAP
|
||||
## Public License.
|
||||
##
|
||||
## A copy of this license is available in the file LICENSE in the
|
||||
## top-level directory of the distribution or, alternatively, at
|
||||
## <http://www.OpenLDAP.org/license.html>.
|
||||
##
|
||||
## ACKNOWLEDGEMENTS:
|
||||
## This module was written in 2016 by Ondřej Kuzník for Symas Corp.
|
||||
|
||||
echo "running defines.sh"
|
||||
. $SRCDIR/scripts/defines.sh
|
||||
|
||||
. ${SCRIPTDIR}/common.sh
|
||||
|
||||
echo "Testing searches against regular entries..."
|
||||
echo "# Testing searches against regular entries..." >> $SEARCHOUT
|
||||
$LDAPSEARCH -b "$BASEDN" -H $URI1 \
|
||||
-z 1 "(|(name=Elliot)(description=*hiker*))" \
|
||||
>> $SEARCHOUT 2>&1
|
||||
RC=$?
|
||||
case $RC in
|
||||
0)
|
||||
echo "ldapsearch should have failed ($RC)!"
|
||||
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
||||
exit 1
|
||||
;;
|
||||
4)
|
||||
echo "sizelimit reached ($RC)"
|
||||
;;
|
||||
*)
|
||||
echo "ldapsearch failed ($RC)!"
|
||||
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
||||
exit $RC
|
||||
;;
|
||||
esac
|
||||
|
||||
echo "Testing searches listing variants where limits just fit..."
|
||||
echo "# Testing searches listing variants where limits just fit..." >> $SEARCHOUT
|
||||
$LDAPSEARCH -b "$BASEDN" -s one -H $URI1 \
|
||||
-z 3 >> $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 variants going over the specified limit..."
|
||||
echo "# Testing searches filtering on variants going over the specified limit..." >> $SEARCHOUT
|
||||
$LDAPSEARCH -b "$BASEDN" -H $URI1 \
|
||||
-z 1 "(name=Alumni Association)" \
|
||||
>> $SEARCHOUT 2>&1
|
||||
RC=$?
|
||||
case $RC in
|
||||
0)
|
||||
echo "ldapsearch should have failed ($RC)!"
|
||||
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
||||
exit 1
|
||||
;;
|
||||
4)
|
||||
echo "sizelimit reached ($RC)"
|
||||
;;
|
||||
*)
|
||||
echo "ldapsearch failed ($RC)!"
|
||||
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
||||
exit $RC
|
||||
;;
|
||||
esac
|
||||
|
||||
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
||||
|
||||
LDIF=data/test010-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
|
||||
169
contrib/slapd-modules/variant/tests/scripts/test011-referral
Executable file
169
contrib/slapd-modules/variant/tests/scripts/test011-referral
Executable file
|
|
@ -0,0 +1,169 @@
|
|||
#! /bin/sh
|
||||
## $OpenLDAP$
|
||||
## This work is part of OpenLDAP Software <http://www.openldap.org/>.
|
||||
##
|
||||
## Copyright 2016-2021 The OpenLDAP Foundation.
|
||||
## All rights reserved.
|
||||
##
|
||||
## Redistribution and use in source and binary forms, with or without
|
||||
## modification, are permitted only as authorized by the OpenLDAP
|
||||
## Public License.
|
||||
##
|
||||
## A copy of this license is available in the file LICENSE in the
|
||||
## top-level directory of the distribution or, alternatively, at
|
||||
## <http://www.OpenLDAP.org/license.html>.
|
||||
##
|
||||
## ACKNOWLEDGEMENTS:
|
||||
## This module was written in 2016 by Ondřej Kuzník for Symas Corp.
|
||||
|
||||
echo "running defines.sh"
|
||||
. $SRCDIR/scripts/defines.sh
|
||||
|
||||
. ${SCRIPTDIR}/common.sh
|
||||
|
||||
TESTDN="cn=Gern Jensen,ou=Information Technology Division,ou=People,$BASEDN"
|
||||
|
||||
echo "Adding referral..."
|
||||
$LDAPMODIFY -D $MANAGERDN -H $URI1 -w $PASSWD \
|
||||
>> $TESTOUT 2>&1 <<EOMOD
|
||||
dn: $TESTDN
|
||||
changetype: add
|
||||
objectclass: referral
|
||||
objectclass: extensibleObject
|
||||
ref: ldap://hostB HostB
|
||||
EOMOD
|
||||
RC=$?
|
||||
if test $RC != 0 ; then
|
||||
echo "ldapmodify failed ($RC)!"
|
||||
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
||||
exit $RC
|
||||
fi
|
||||
|
||||
echo "Configuring referral as variant..."
|
||||
. $CONFFILTER $BACKEND $MONITORDB < data/additional-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 "Retrieving a referral variant..."
|
||||
echo "# Retrieving a referral variant..." >> $SEARCHOUT
|
||||
$LDAPSEARCH -LLL -b "$BASEDN" -H $URI1 \
|
||||
'(cn=Gern Jensen)' >> $SEARCHOUT 2>&1
|
||||
RC=$?
|
||||
if test $RC != 0 ; then
|
||||
echo "ldapsearch: unexpected result ($RC)!"
|
||||
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
||||
exit $RC
|
||||
fi
|
||||
|
||||
echo "Retrieving a referral variant (returns a referral)..."
|
||||
echo "# Retrieving a referral variant (returns a referral)..." >> $SEARCHOUT
|
||||
$LDAPSEARCH -b "$TESTDN" -H $URI1 \
|
||||
>> $SEARCHOUT 2>&1
|
||||
RC=$?
|
||||
if test $RC != 10 ; then
|
||||
echo "ldapsearch: unexpected result ($RC)! (referral expected)"
|
||||
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
||||
exit $RC
|
||||
fi
|
||||
|
||||
echo "Modifying a referral variant (returns a referral)..."
|
||||
$LDAPMODIFY -D $MANAGERDN -H $URI1 -w $PASSWD \
|
||||
>> $TESTOUT 2>&1 <<EOMOD
|
||||
dn: $TESTDN
|
||||
changetype: modify
|
||||
delete: description
|
||||
EOMOD
|
||||
RC=$?
|
||||
if test $RC != 10 ; then
|
||||
echo "ldapmodify: unexpected result ($RC)! (referral expected)"
|
||||
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
||||
exit $RC
|
||||
fi
|
||||
|
||||
echo "Comparing a referral variant (returns a referral)..."
|
||||
$LDAPCOMPARE -H $URI1 "$TESTDN" \
|
||||
"description:The Example, Inc. at Anytown" >> $TESTOUT 2>&1
|
||||
RC=$?
|
||||
if test $RC != 10; then
|
||||
echo "ldapcompare: unexpected result ($RC)! (referral expected)"
|
||||
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Reconfiguring variant underneath a referral..."
|
||||
$LDAPMODIFY -v -D cn=config -H $URI1 -y $CONFIGPWF \
|
||||
>> $TESTOUT 2>&1 <<EOMOD
|
||||
dn: name={4}test002,olcOverlay={0}variant,olcDatabase={1}$BACKEND,cn=config
|
||||
changetype: modify
|
||||
replace: olcVariantEntry
|
||||
olcVariantEntry: cn=child,$TESTDN
|
||||
EOMOD
|
||||
RC=$?
|
||||
if test $RC != 0 ; then
|
||||
echo "ldapmodify failed ($RC)!"
|
||||
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
||||
exit $RC
|
||||
fi
|
||||
|
||||
echo "Retrieving a variant under a referral (returns a referral)..."
|
||||
echo "# Retrieving a variant under a referral (returns a referral)..." >> $SEARCHOUT
|
||||
$LDAPSEARCH -b "cn=child,$TESTDN" -H $URI1 \
|
||||
>> $SEARCHOUT 2>&1
|
||||
RC=$?
|
||||
if test $RC != 10 ; then
|
||||
echo "ldapsearch: unexpected result ($RC)! (referral expected)"
|
||||
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
||||
exit $RC
|
||||
fi
|
||||
|
||||
echo "Modifying a variant under a referral (returns a referral)..."
|
||||
$LDAPMODIFY -D $MANAGERDN -H $URI1 -w $PASSWD \
|
||||
>> $TESTOUT 2>&1 <<EOMOD
|
||||
dn: cn=child,$TESTDN
|
||||
changetype: modify
|
||||
delete: description
|
||||
EOMOD
|
||||
RC=$?
|
||||
if test $RC != 10 ; then
|
||||
echo "ldapmodify: unexpected result ($RC)! (referral expected)"
|
||||
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
||||
exit $RC
|
||||
fi
|
||||
|
||||
echo "Comparing a variant under a referral (returns a referral)..."
|
||||
$LDAPCOMPARE -H $URI1 "cn=child,$TESTDN" \
|
||||
"description:The Example, Inc. at Anytown" >> $TESTOUT 2>&1
|
||||
RC=$?
|
||||
if test $RC != 10; then
|
||||
echo "ldapcompare: unexpected result ($RC)! (referral expected)"
|
||||
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
||||
exit 1
|
||||
fi
|
||||
|
||||
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
||||
|
||||
LDIF=data/test011-out.ldif
|
||||
|
||||
echo "Filtering ldapsearch results..."
|
||||
$LDIFFILTER < $SEARCHOUT > $SEARCHFLT
|
||||
echo "Filtering expected entries..."
|
||||
$LDIFFILTER < $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
|
||||
90
contrib/slapd-modules/variant/tests/scripts/test012-crossdb
Executable file
90
contrib/slapd-modules/variant/tests/scripts/test012-crossdb
Executable file
|
|
@ -0,0 +1,90 @@
|
|||
#! /bin/sh
|
||||
## $OpenLDAP$
|
||||
## This work is part of OpenLDAP Software <http://www.openldap.org/>.
|
||||
##
|
||||
## Copyright 2016-2021 The OpenLDAP Foundation.
|
||||
## All rights reserved.
|
||||
##
|
||||
## Redistribution and use in source and binary forms, with or without
|
||||
## modification, are permitted only as authorized by the OpenLDAP
|
||||
## Public License.
|
||||
##
|
||||
## A copy of this license is available in the file LICENSE in the
|
||||
## top-level directory of the distribution or, alternatively, at
|
||||
## <http://www.OpenLDAP.org/license.html>.
|
||||
##
|
||||
## ACKNOWLEDGEMENTS:
|
||||
## This module was written in 2016 by Ondřej Kuzník for Symas Corp.
|
||||
|
||||
echo "running defines.sh"
|
||||
. $SRCDIR/scripts/defines.sh
|
||||
|
||||
. ${SCRIPTDIR}/common.sh
|
||||
|
||||
echo "Setting up another database and variant using an alternate there..."
|
||||
mkdir $DBDIR2
|
||||
$LDAPMODIFY -v -D cn=config -H $URI1 -y $CONFIGPWF \
|
||||
<<EOMOD >> $TESTOUT 2>&1
|
||||
dn: olcDatabase=ldif,cn=config
|
||||
changetype: add
|
||||
objectclass: olcLdifConfig
|
||||
olcSuffix: dc=demonstration,dc=com
|
||||
olcDbDirectory: $DBDIR2
|
||||
olcRootDn: $MANAGERDN
|
||||
|
||||
dn: olcVariantVariantAttribute={1}seealso,name={0}variant,olcOverlay={0}variant,olcDatabase={1}$BACKEND,cn=config
|
||||
changetype: modify
|
||||
replace: olcVariantAlternativeEntry
|
||||
olcVariantAlternativeEntry: ou=Societies,dc=demonstration,dc=com
|
||||
EOMOD
|
||||
RC=$?
|
||||
if test $RC != 0 ; then
|
||||
echo "ldapmodify failed ($RC)!"
|
||||
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
||||
exit $RC
|
||||
fi
|
||||
|
||||
echo "Adding alternate entry..."
|
||||
$LDAPMODIFY -D $MANAGERDN -H $URI1 -w $PASSWD \
|
||||
-f data/test012-data.ldif >> $TESTOUT 2>&1
|
||||
RC=$?
|
||||
if test $RC != 0 ; then
|
||||
echo "ldapmodify failed ($RC)!"
|
||||
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
||||
exit $RC
|
||||
fi
|
||||
|
||||
echo "Checking the variant gets resolved correctly..."
|
||||
echo "# Testing a search against a variant using another DB..." >> $SEARCHOUT
|
||||
#$LDAPSEARCH -b "$BASEDN" -H $URI1 \
|
||||
# "seealso=dc=example,dc=com" \
|
||||
$LDAPSEARCH -b "ou=People,$BASEDN" -s base -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
|
||||
|
||||
LDIF=data/test012-out.ldif
|
||||
|
||||
echo "Filtering ldapsearch results..."
|
||||
$LDIFFILTER < $SEARCHOUT > $SEARCHFLT
|
||||
echo "Filtering expected entries..."
|
||||
$LDIFFILTER < $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
|
||||
1424
contrib/slapd-modules/variant/variant.c
Normal file
1424
contrib/slapd-modules/variant/variant.c
Normal file
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue