#!/bin/sh

mkdir /var/tmp/slapd-bug
cd /var/tmp/slapd-bug
mkdir openldap-data

/usr/local/libexec/slapd -V

cat > slapd.conf << EOF
include		/usr/local/etc/openldap/schema/core.schema
include		/usr/local/etc/openldap/schema/cosine.schema

modulepath	/usr/local/libexec/openldap
moduleload	back_hdb

database	hdb
suffix		"dc=qwest,dc=net"
rootdn		"uid=root,dc=qwest,dc=net"
rootpw		secret
directory	/var/tmp/slapd-bug/openldap-data
index	objectClass	eq
index	entryCSN	eq
index	entryUUID	eq

overlay syncprov
syncprov-sessionlog  1000
syncprov-checkpoint  100 10
EOF

cat > data.ldif <<EOF
dn: dc=qwest,dc=net
structuralObjectClass: organizationalUnit
objectClass: organizationalUnit
objectClass: dcObject
ou: qwest
creatorsName: uid=root,dc=qwest,dc=net
createTimestamp: 20100826221320Z
entryUUID: e168975e-45aa-102f-8022-dfa3c12cada7
entryCSN: 20100929182347.872723Z#000000#000#000000
modifiersName: uid=root,dc=qwest,dc=net
modifyTimestamp: 20100929182347Z
contextCSN: 20110318170006.909329Z#000000#000#000000
contextCSN: 20101101193623.329525Z#000000#001#000000
entryDN: dc=qwest,dc=net
subschemaSubentry: cn=Subschema
hasSubordinates: TRUE

dn: ou=accounts,dc=qwest,dc=net
ou: accounts
structuralObjectClass: organizationalUnit
objectClass: organizationalUnit
creatorsName: uid=root,dc=qwest,dc=net
createTimestamp: 20100826221320Z
entryUUID: e16a657a-45aa-102f-8023-dfa3c12cada7
entryCSN: 20100929220727.624741Z#000000#001#000000
modifiersName: uid=root,dc=qwest,dc=net
modifyTimestamp: 20100929220727Z
entryDN: ou=accounts,dc=qwest,dc=net
subschemaSubentry: cn=Subschema
hasSubordinates: TRUE

dn: uid=cmikk,ou=accounts,dc=qwest,dc=net
structuralObjectClass: account
objectClass: account
uid: cmikk
entryUUID: 20054874-86d6-102f-8389-d3c9692e3306
creatorsName: uid=root,ou=provisioning,dc=qwest,dc=net
createTimestamp: 20101117203639Z
entryCSN: 20110318170006.909329Z#000000#000#000000
modifiersName: uid=root,dc=qwest,dc=net
modifyTimestamp: 20110318170006Z
entryDN: uid=cmikk,ou=accounts,dc=qwest,dc=net
subschemaSubentry: cn=Subschema
hasSubordinates: FALSE

dn: uid=somedude,ou=accounts,dc=qwest,dc=net
structuralObjectClass: account
objectClass: account
uid: somedude
entryUUID: 34e1f2f6-4fa4-102f-9f88-bb1a78078e8c
creatorsName: uid=root,dc=qwest,dc=net
createTimestamp: 20100908145046Z
entryCSN: 20100910215831.220447Z#000000#000#000000
modifiersName: uid=root,dc=qwest,dc=net
modifyTimestamp: 20100910215831Z
entryDN: uid=somedude,ou=accounts,dc=qwest,dc=net
subschemaSubentry: cn=Subschema
hasSubordinates: FALSE

EOF

slapadd -l data.ldif -f slapd.conf

echo
echo ++++++ starting slapd on port 1389
echo

/usr/local/libexec/slapd -f slapd.conf -h ldap://localhost:1389/

sleep 3

AUTH="-H ldap://localhost:1389/ -x -w secret -D uid=root,dc=qwest,dc=net"
COOKIE="!sync=ro/rid=000,csn=20110318170006.909329Z#000000#000#000000;20101101193623.329525Z#000000#001#000000"

echo Modifying uid=somedude,ou=accounts,dc=qwest,dc=net

ldapmodify $AUTH <<EOF
dn: uid=somedude,ou=accounts,dc=qwest,dc=net
add: description
description: some dude
EOF

echo
echo ++++++ searching with sync control, base dc=qwest,dc=net
echo
echo ldapsearch $AUTH -E $COOKIE -b dc=qwest,dc=net
echo

ldapsearch $AUTH -E $COOKIE -b dc=qwest,dc=net

echo
echo ++++++ searching with sync control, base ou=accounts,dc=qwest,dc=net
echo
echo ldapsearch $AUTH -E $COOKIE -b ou=accounts,dc=qwest,dc=net
echo

ldapsearch $AUTH -E $COOKIE -b ou=accounts,dc=qwest,dc=net
