2017-10-06 06:30:40 +03:00
#!/bin/sh
if [ $# -lt 1 ] ; then
2022-04-22 16:46:04 +03:00
cat <<EOF
2017-10-06 06:30:40 +03:00
Usage: $0 PREFIX
EOF
2022-04-22 16:46:04 +03:00
exit 1
2017-10-06 06:30:40 +03:00
fi
PREFIX_ABS = " $1 "
shift 1
2022-04-22 16:46:04 +03:00
. $( dirname $0 ) /subunit.sh
2017-10-06 06:30:40 +03:00
cleanup_output_directories( )
{
2022-04-22 16:46:04 +03:00
if [ -d $PREFIX_ABS /2012R2_schema ] ; then
rm -fr $PREFIX_ABS /2012R2_schema
fi
2017-10-06 06:30:40 +03:00
2022-04-22 16:46:04 +03:00
if [ -d $PREFIX_ABS /2008R2_schema ] ; then
rm -fr $PREFIX_ABS /2008R2_schema
fi
2017-10-06 06:30:40 +03:00
}
PROVISION_OPTS = "--use-ntvfs --host-ip6=::1 --host-ip=127.0.0.1"
2022-04-22 16:46:04 +03:00
provision_2012r2( )
{
2023-03-17 18:48:26 +03:00
$PYTHON $BINDIR /samba-tool domain provision $PROVISION_OPTS --domain= SAMBA --realm= w2012r2.samba.corp --targetdir= $PREFIX_ABS /2012R2_schema --base-schema= 2012_R2 --adprep-level= SKIP
2017-10-06 06:30:40 +03:00
}
2022-04-22 16:46:04 +03:00
provision_2008r2( )
{
$PYTHON $BINDIR /samba-tool domain provision $PROVISION_OPTS --domain= SAMBA --realm= w2008r2.samba.corp --targetdir= $PREFIX_ABS /2008R2_schema --base-schema= 2008_R2
2017-10-06 06:30:40 +03:00
}
2022-04-22 16:46:04 +03:00
provision_2008r2_old( )
{
$PYTHON $BINDIR /samba-tool domain provision $PROVISION_OPTS --domain= SAMBA --realm= w2008r2.samba.corp --targetdir= $PREFIX_ABS /2008R2_old_schema --base-schema= 2008_R2_old
2017-11-20 07:10:25 +03:00
}
2017-10-06 06:30:40 +03:00
2022-04-22 16:46:04 +03:00
ldapcmp_ignore( )
{
2017-10-06 06:30:40 +03:00
2022-04-22 16:46:04 +03:00
IGNORE_ATTRS = $1
2017-10-06 06:30:40 +03:00
2022-04-22 16:46:04 +03:00
# there's discrepancies between the SDDL strings in the adprep LDIF files
# vs the 2012 schema, where one source will have ACE rights repeated, e.g.
# "LOLO" in adprep vs "LO" in the schema
IGNORE_ATTRS = " $IGNORE_ATTRS ,defaultSecurityDescriptor "
2017-10-06 06:30:40 +03:00
2022-04-22 16:46:04 +03:00
# the adprep LDIF files updates these attributes for the DisplaySpecifiers
# objects, but we don't have the 2012 DisplaySpecifiers documentation...
IGNORE_ATTRS = " $IGNORE_ATTRS ,adminContextMenu,adminPropertyPages "
2017-10-06 06:30:40 +03:00
2022-04-22 16:46:04 +03:00
$PYTHON $BINDIR /samba-tool ldapcmp tdb://$PREFIX_ABS /$2 _schema/private/sam.ldb tdb://$PREFIX_ABS /$3 _schema/private/sam.ldb --two --filter= $IGNORE_ATTRS --skip-missing-dn
2017-11-20 07:10:25 +03:00
}
2022-04-22 16:46:04 +03:00
ldapcmp_old( )
{
# the original 2008 schema we received from Microsoft was missing
# descriptions and display names. This has been fixed up in the current
# Microsoft schemas
IGNORE_ATTRS = "adminDescription,description,adminDisplayName,displayName"
2017-11-20 07:10:25 +03:00
2022-04-22 16:46:04 +03:00
# we didn't get showInAdvancedViewOnly right on Samba
IGNORE_ATTRS = " $IGNORE_ATTRS ,showInAdvancedViewOnly "
2017-11-20 07:10:25 +03:00
2022-04-22 16:46:04 +03:00
ldapcmp_ignore " $IGNORE_ATTRS " "2008R2_old" "2012R2"
2017-11-20 07:10:25 +03:00
}
2022-04-22 16:46:04 +03:00
ldapcmp( )
{
# The adminDescription and adminDisplayName have been editorially
# corrected in the 2012R2 schema but not in the adprep files.
ldapcmp_ignore "adminDescription,adminDisplayName" "2008R2" "2012R2"
2017-11-20 07:10:25 +03:00
}
2022-04-22 16:46:04 +03:00
ldapcmp_2008R2_2008R2_old( )
{
# the original 2008 schema we received from Microsoft was missing
# descriptions and display names. This has been fixed up in the current
# Microsoft schemas
IGNORE_ATTRS = "adminDescription,description,adminDisplayName,displayName"
2017-11-20 07:10:25 +03:00
2022-04-22 16:46:04 +03:00
# we didn't get showInAdvancedViewOnly right on Samba
IGNORE_ATTRS = " $IGNORE_ATTRS ,showInAdvancedViewOnly "
2017-11-20 07:10:25 +03:00
2022-04-22 16:46:04 +03:00
ldapcmp_ignore $IGNORE_ATTRS "2008R2" "2008R2_old"
2017-10-06 06:30:40 +03:00
}
2022-04-22 16:46:04 +03:00
schema_upgrade( )
{
2018-08-27 19:06:37 +03:00
$PYTHON $BINDIR /samba-tool domain schemaupgrade -H tdb://$PREFIX_ABS /2008R2_schema/private/sam.ldb --schema= 2012_R2
2017-10-06 06:30:40 +03:00
}
2022-04-22 16:46:04 +03:00
schema_upgrade_old( )
{
2018-08-27 19:06:37 +03:00
$PYTHON $BINDIR /samba-tool domain schemaupgrade -H tdb://$PREFIX_ABS /2008R2_old_schema/private/sam.ldb --schema= 2012_R2
2017-11-20 07:10:25 +03:00
}
2017-10-06 06:30:40 +03:00
# double-check we cleaned up from the last test run
cleanup_output_directories
# Provision 2 DCs, one based on the 2008R2 schema and one using 2012R2
testit "provision_2008R2_schema" provision_2008r2
2017-11-20 07:10:25 +03:00
testit "provision_2008R2_old_schema" provision_2008r2_old
2017-10-06 06:30:40 +03:00
testit "provision_2012R2_schema" provision_2012r2
# we expect the 2 schemas to be different
testit_expect_failure "expect_schema_differences" ldapcmp
2017-11-20 07:10:25 +03:00
# check that the 2 schemas are now the same, ignoring Samba bugs
testit "check_2008R2_2008R2_schemas_same" ldapcmp_2008R2_2008R2_old
2017-10-06 06:30:40 +03:00
# upgrade the 2008 schema to 2012
testit "schema_upgrade" schema_upgrade
# check that the 2 schemas are now the same
testit "check_schemas_same" ldapcmp
2017-11-20 07:10:25 +03:00
# upgrade the 2008 schema to 2012
testit "schema_upgrade_old" schema_upgrade_old
# check that the 2 schemas are now the same, ignoring Samba bugs
testit "check_schemas_same_old" ldapcmp_old
2017-10-06 06:30:40 +03:00
cleanup_output_directories
exit $failed