Branch '389-ds-base-1.2.11' - config.h.in configure configure.ac ldap/admin ldap/ldif ldap/servers Makefile.am Makefile.in
by Richard Allen Megginson
Makefile.am | 24
Makefile.in | 105 -
config.h.in | 3
configure | 83
configure.ac | 15
ldap/admin/src/scripts/DSCreate.pm.in | 3
ldap/ldif/50posix-winsync-plugin.ldif | 15
ldap/servers/plugins/posix-winsync/README | 50
ldap/servers/plugins/posix-winsync/posix-group-func.c | 490 ++++
ldap/servers/plugins/posix-winsync/posix-group-func.h | 21
ldap/servers/plugins/posix-winsync/posix-group-task.c | 303 ++
ldap/servers/plugins/posix-winsync/posix-winsync-config.c | 284 ++
ldap/servers/plugins/posix-winsync/posix-winsync.c | 1459 ++++++++++++++
ldap/servers/plugins/posix-winsync/posix-wsp-ident.h | 51
14 files changed, 2880 insertions(+), 26 deletions(-)
New commits:
commit 433559271e5ab0ed0ad3a4e09806cf0074a3cff4
Author: Rich Megginson <rmeggins(a)redhat.com>
Date: Thu Aug 16 17:34:05 2012 -0600
Ticket #426 - support posix schema for user and group sync
https://fedorahosted.org/389/ticket/426
Resolves: Ticket #426
Bug Description: support posix schema for user and group sync
Reviewed by: nhosoi, mreynolds (Thanks!)
Branch: 389-ds-base-1.2.11
Fix Description: This is a new winsync plugin. By default it works with the
posixaccount and posixgroup schema included with user and group entries in
Windows 2003 R2 and later Active Directory. There is a switch that can be
set to use the older MSSFU schema.
This is not entirely bi-directional - when you add new entries to DS, the
posix attributes in those new user/group entries are not synced to AD -
this is due to a limitation in the old winsync api v1. Future work is
planned to add that capability.
This was copied from the upstream at
https://github.com/cgrzemba/Posix-Winsync-Plugin-for-389-directory-server
with permission from the author.
Platforms tested: RHEL6 x86_64, Windows 2008 R2
Flag Day: no
Doc impact: no
diff --git a/Makefile.am b/Makefile.am
index 000fef0..c5c4080 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -80,6 +80,11 @@ LIBCRYPT=@LIBCRYPT@
BUILT_SOURCES = dberrstrs.h \
$(POLICY_FC)
+if enable_posix_winsync
+LIBPOSIX_WINSYNC_PLUGIN = libposix-winsync-plugin.la
+POSIX_WINSYNC_PLUGIN_LDIF = ldap/ldif/50posix-winsync-plugin.ldif
+endif
+
CLEANFILES = dberrstrs.h ns-slapd.properties \
ldap/admin/src/scripts/template-dbverify ldap/admin/src/template-initconfig \
ldap/admin/src/scripts/dscreate.map ldap/admin/src/scripts/remove-ds.pl \
@@ -112,7 +117,8 @@ CLEANFILES = dberrstrs.h ns-slapd.properties \
ldap/ldif/template-ldapi-autobind.ldif ldap/ldif/template-ldapi-default.ldif \
ldap/ldif/template-ldapi.ldif ldap/ldif/template-locality.ldif ldap/ldif/template-org.ldif \
ldap/ldif/template-orgunit.ldif ldap/ldif/template-pampta.ldif ldap/ldif/template-sasl.ldif \
- ldap/ldif/template-state.ldif ldap/ldif/template-suffix-db.ldif
+ ldap/ldif/template-state.ldif ldap/ldif/template-suffix-db.ldif \
+ $(POSIX_WINSYNC_PLUGIN_LDIF)
clean-local:
-rm -rf selinux-built
@@ -207,7 +213,7 @@ serverplugin_LTLIBRARIES = libacl-plugin.la libattr-unique-plugin.la \
libviews-plugin.la libschemareload-plugin.la libusn-plugin.la \
libacctusability-plugin.la librootdn-access-plugin.la $(LIBACCTPOLICY_PLUGIN) \
$(LIBPAM_PASSTHRU_PLUGIN) $(LIBDNA_PLUGIN) \
- $(LIBBITWISE_PLUGIN) $(LIBPRESENCE_PLUGIN)
+ $(LIBBITWISE_PLUGIN) $(LIBPRESENCE_PLUGIN) $(LIBPOSIX_WINSYNC_PLUGIN)
nodist_property_DATA = ns-slapd.properties
@@ -485,6 +491,7 @@ update_DATA = ldap/admin/src/scripts/exampleupdate.pl \
ldap/admin/src/scripts/50guidesyntaxplugin.ldif \
ldap/ldif/50replication-plugins.ldif \
ldap/admin/src/scripts/50linkedattrsplugin.ldif \
+ $(POSIX_WINSYNC_PLUGIN_LDIF) \
ldap/admin/src/scripts/50usnplugin.ldif \
ldap/admin/src/scripts/50smd5pwdstorageplugin.ldif \
ldap/admin/src/scripts/50refintprecedence.ldif \
@@ -1020,6 +1027,19 @@ libpassthru_plugin_la_LIBADD = libslapd.la $(LDAPSDK_LINK) $(NSPR_LINK)
libpassthru_plugin_la_LDFLAGS = -avoid-version
#------------------------
+# libposix-winsync-plugin
+#------------------------
+libposix_winsync_plugin_la_SOURCES = ldap/servers/plugins/posix-winsync/posix-winsync.c \
+ ldap/servers/plugins/posix-winsync/posix-group-func.c \
+ ldap/servers/plugins/posix-winsync/posix-group-task.c \
+ ldap/servers/plugins/posix-winsync/posix-winsync-config.c
+
+libposix_winsync_plugin_la_CPPFLAGS = $(PLUGIN_CPPFLAGS) -DWINSYNC_TEST_POSIX \
+ -I$(srcdir)/ldap/servers/plugins/replication
+libposix_winsync_plugin_la_LIBADD = libslapd.la $(LDAPSDK_LINK) $(NSPR_LINK)
+libposix_winsync_plugin_la_LDFLAGS = -avoid-version
+
+#------------------------
# libpresence-plugin
#------------------------
libpresence_plugin_la_SOURCES = ldap/servers/plugins/presence/presence.c
diff --git a/Makefile.in b/Makefile.in
index 3b16974..3777829 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -462,6 +462,20 @@ libpassthru_plugin_la_OBJECTS = $(am_libpassthru_plugin_la_OBJECTS)
libpassthru_plugin_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(libpassthru_plugin_la_LDFLAGS) $(LDFLAGS) -o $@
+libposix_winsync_plugin_la_DEPENDENCIES = libslapd.la \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+am_libposix_winsync_plugin_la_OBJECTS = ldap/servers/plugins/posix-winsync/libposix_winsync_plugin_la-posix-winsync.lo \
+ ldap/servers/plugins/posix-winsync/libposix_winsync_plugin_la-posix-group-func.lo \
+ ldap/servers/plugins/posix-winsync/libposix_winsync_plugin_la-posix-group-task.lo \
+ ldap/servers/plugins/posix-winsync/libposix_winsync_plugin_la-posix-winsync-config.lo
+libposix_winsync_plugin_la_OBJECTS = \
+ $(am_libposix_winsync_plugin_la_OBJECTS)
+libposix_winsync_plugin_la_LINK = $(LIBTOOL) --tag=CC \
+ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+ $(AM_CFLAGS) $(CFLAGS) $(libposix_winsync_plugin_la_LDFLAGS) \
+ $(LDFLAGS) -o $@
+@enable_posix_winsync_TRUE@am_libposix_winsync_plugin_la_rpath = \
+@enable_posix_winsync_TRUE@ -rpath $(serverplugindir)
libpresence_plugin_la_DEPENDENCIES = libslapd.la
am_libpresence_plugin_la_OBJECTS = ldap/servers/plugins/presence/libpresence_plugin_la-presence.lo
libpresence_plugin_la_OBJECTS = $(am_libpresence_plugin_la_OBJECTS)
@@ -1005,6 +1019,7 @@ SOURCES = $(libavl_a_SOURCES) $(libldaputil_a_SOURCES) \
$(libmemberof_plugin_la_SOURCES) $(libns_dshttpd_la_SOURCES) \
$(libpam_passthru_plugin_la_SOURCES) \
$(libpassthru_plugin_la_SOURCES) \
+ $(libposix_winsync_plugin_la_SOURCES) \
$(libpresence_plugin_la_SOURCES) \
$(libpwdstorage_plugin_la_SOURCES) \
$(libreferint_plugin_la_SOURCES) \
@@ -1038,6 +1053,7 @@ DIST_SOURCES = $(libavl_a_SOURCES) $(libldaputil_a_SOURCES) \
$(libmemberof_plugin_la_SOURCES) $(libns_dshttpd_la_SOURCES) \
$(libpam_passthru_plugin_la_SOURCES) \
$(libpassthru_plugin_la_SOURCES) \
+ $(libposix_winsync_plugin_la_SOURCES) \
$(libpresence_plugin_la_SOURCES) \
$(libpwdstorage_plugin_la_SOURCES) \
$(libreferint_plugin_la_SOURCES) \
@@ -1357,6 +1373,8 @@ KERBEROS_LINK = $(kerberos_lib)
BUILT_SOURCES = dberrstrs.h \
$(POLICY_FC)
+@enable_posix_winsync_TRUE@LIBPOSIX_WINSYNC_PLUGIN = libposix-winsync-plugin.la
+@enable_posix_winsync_TRUE@POSIX_WINSYNC_PLUGIN_LDIF = ldap/ldif/50posix-winsync-plugin.ldif
CLEANFILES = dberrstrs.h ns-slapd.properties \
ldap/admin/src/scripts/template-dbverify ldap/admin/src/template-initconfig \
ldap/admin/src/scripts/dscreate.map ldap/admin/src/scripts/remove-ds.pl \
@@ -1389,7 +1407,8 @@ CLEANFILES = dberrstrs.h ns-slapd.properties \
ldap/ldif/template-ldapi-autobind.ldif ldap/ldif/template-ldapi-default.ldif \
ldap/ldif/template-ldapi.ldif ldap/ldif/template-locality.ldif ldap/ldif/template-org.ldif \
ldap/ldif/template-orgunit.ldif ldap/ldif/template-pampta.ldif ldap/ldif/template-sasl.ldif \
- ldap/ldif/template-state.ldif ldap/ldif/template-suffix-db.ldif
+ ldap/ldif/template-state.ldif ldap/ldif/template-suffix-db.ldif \
+ $(POSIX_WINSYNC_PLUGIN_LDIF)
taskdir = $(datadir)@scripttemplatedir@
systemdsystemunitdir = @with_systemdsystemunitdir@
@@ -1424,7 +1443,7 @@ serverplugin_LTLIBRARIES = libacl-plugin.la libattr-unique-plugin.la \
libviews-plugin.la libschemareload-plugin.la libusn-plugin.la \
libacctusability-plugin.la librootdn-access-plugin.la $(LIBACCTPOLICY_PLUGIN) \
$(LIBPAM_PASSTHRU_PLUGIN) $(LIBDNA_PLUGIN) \
- $(LIBBITWISE_PLUGIN) $(LIBPRESENCE_PLUGIN)
+ $(LIBBITWISE_PLUGIN) $(LIBPRESENCE_PLUGIN) $(LIBPOSIX_WINSYNC_PLUGIN)
nodist_property_DATA = ns-slapd.properties
noinst_LIBRARIES = libavl.a libldaputil.a
@@ -1698,6 +1717,7 @@ update_DATA = ldap/admin/src/scripts/exampleupdate.pl \
ldap/admin/src/scripts/50guidesyntaxplugin.ldif \
ldap/ldif/50replication-plugins.ldif \
ldap/admin/src/scripts/50linkedattrsplugin.ldif \
+ $(POSIX_WINSYNC_PLUGIN_LDIF) \
ldap/admin/src/scripts/50usnplugin.ldif \
ldap/admin/src/scripts/50smd5pwdstorageplugin.ldif \
ldap/admin/src/scripts/50refintprecedence.ldif \
@@ -2169,6 +2189,20 @@ libpassthru_plugin_la_LIBADD = libslapd.la $(LDAPSDK_LINK) $(NSPR_LINK)
libpassthru_plugin_la_LDFLAGS = -avoid-version
#------------------------
+# libposix-winsync-plugin
+#------------------------
+libposix_winsync_plugin_la_SOURCES = ldap/servers/plugins/posix-winsync/posix-winsync.c \
+ ldap/servers/plugins/posix-winsync/posix-group-func.c \
+ ldap/servers/plugins/posix-winsync/posix-group-task.c \
+ ldap/servers/plugins/posix-winsync/posix-winsync-config.c
+
+libposix_winsync_plugin_la_CPPFLAGS = $(PLUGIN_CPPFLAGS) -DWINSYNC_TEST_POSIX \
+ -I$(srcdir)/ldap/servers/plugins/replication
+
+libposix_winsync_plugin_la_LIBADD = libslapd.la $(LDAPSDK_LINK) $(NSPR_LINK)
+libposix_winsync_plugin_la_LDFLAGS = -avoid-version
+
+#------------------------
# libpresence-plugin
#------------------------
libpresence_plugin_la_SOURCES = ldap/servers/plugins/presence/presence.c
@@ -3529,6 +3563,26 @@ ldap/servers/plugins/passthru/libpassthru_plugin_la-ptutil.lo: \
ldap/servers/plugins/passthru/$(DEPDIR)/$(am__dirstamp)
libpassthru-plugin.la: $(libpassthru_plugin_la_OBJECTS) $(libpassthru_plugin_la_DEPENDENCIES)
$(libpassthru_plugin_la_LINK) -rpath $(serverplugindir) $(libpassthru_plugin_la_OBJECTS) $(libpassthru_plugin_la_LIBADD) $(LIBS)
+ldap/servers/plugins/posix-winsync/$(am__dirstamp):
+ @$(MKDIR_P) ldap/servers/plugins/posix-winsync
+ @: > ldap/servers/plugins/posix-winsync/$(am__dirstamp)
+ldap/servers/plugins/posix-winsync/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) ldap/servers/plugins/posix-winsync/$(DEPDIR)
+ @: > ldap/servers/plugins/posix-winsync/$(DEPDIR)/$(am__dirstamp)
+ldap/servers/plugins/posix-winsync/libposix_winsync_plugin_la-posix-winsync.lo: \
+ ldap/servers/plugins/posix-winsync/$(am__dirstamp) \
+ ldap/servers/plugins/posix-winsync/$(DEPDIR)/$(am__dirstamp)
+ldap/servers/plugins/posix-winsync/libposix_winsync_plugin_la-posix-group-func.lo: \
+ ldap/servers/plugins/posix-winsync/$(am__dirstamp) \
+ ldap/servers/plugins/posix-winsync/$(DEPDIR)/$(am__dirstamp)
+ldap/servers/plugins/posix-winsync/libposix_winsync_plugin_la-posix-group-task.lo: \
+ ldap/servers/plugins/posix-winsync/$(am__dirstamp) \
+ ldap/servers/plugins/posix-winsync/$(DEPDIR)/$(am__dirstamp)
+ldap/servers/plugins/posix-winsync/libposix_winsync_plugin_la-posix-winsync-config.lo: \
+ ldap/servers/plugins/posix-winsync/$(am__dirstamp) \
+ ldap/servers/plugins/posix-winsync/$(DEPDIR)/$(am__dirstamp)
+libposix-winsync-plugin.la: $(libposix_winsync_plugin_la_OBJECTS) $(libposix_winsync_plugin_la_DEPENDENCIES)
+ $(libposix_winsync_plugin_la_LINK) $(am_libposix_winsync_plugin_la_rpath) $(libposix_winsync_plugin_la_OBJECTS) $(libposix_winsync_plugin_la_LIBADD) $(LIBS)
ldap/servers/plugins/presence/$(am__dirstamp):
@$(MKDIR_P) ldap/servers/plugins/presence
@: > ldap/servers/plugins/presence/$(am__dirstamp)
@@ -4893,6 +4947,14 @@ mostlyclean-compile:
-rm -f ldap/servers/plugins/passthru/libpassthru_plugin_la-ptpreop.lo
-rm -f ldap/servers/plugins/passthru/libpassthru_plugin_la-ptutil.$(OBJEXT)
-rm -f ldap/servers/plugins/passthru/libpassthru_plugin_la-ptutil.lo
+ -rm -f ldap/servers/plugins/posix-winsync/libposix_winsync_plugin_la-posix-group-func.$(OBJEXT)
+ -rm -f ldap/servers/plugins/posix-winsync/libposix_winsync_plugin_la-posix-group-func.lo
+ -rm -f ldap/servers/plugins/posix-winsync/libposix_winsync_plugin_la-posix-group-task.$(OBJEXT)
+ -rm -f ldap/servers/plugins/posix-winsync/libposix_winsync_plugin_la-posix-group-task.lo
+ -rm -f ldap/servers/plugins/posix-winsync/libposix_winsync_plugin_la-posix-winsync-config.$(OBJEXT)
+ -rm -f ldap/servers/plugins/posix-winsync/libposix_winsync_plugin_la-posix-winsync-config.lo
+ -rm -f ldap/servers/plugins/posix-winsync/libposix_winsync_plugin_la-posix-winsync.$(OBJEXT)
+ -rm -f ldap/servers/plugins/posix-winsync/libposix_winsync_plugin_la-posix-winsync.lo
-rm -f ldap/servers/plugins/presence/libpresence_plugin_la-presence.$(OBJEXT)
-rm -f ldap/servers/plugins/presence/libpresence_plugin_la-presence.lo
-rm -f ldap/servers/plugins/pwdstorage/libpwdstorage_plugin_la-clear_pwd.$(OBJEXT)
@@ -5670,6 +5732,10 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/passthru/$(DEPDIR)/libpassthru_plugin_la-ptdebug.Plo(a)am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/passthru/$(DEPDIR)/libpassthru_plugin_la-ptpreop.Plo(a)am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/passthru/$(DEPDIR)/libpassthru_plugin_la-ptutil.Plo(a)am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/posix-winsync/$(DEPDIR)/libposix_winsync_plugin_la-posix-group-func.Plo(a)am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/posix-winsync/$(DEPDIR)/libposix_winsync_plugin_la-posix-group-task.Plo(a)am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/posix-winsync/$(DEPDIR)/libposix_winsync_plugin_la-posix-winsync-config.Plo(a)am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/posix-winsync/$(DEPDIR)/libposix_winsync_plugin_la-posix-winsync.Plo(a)am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/presence/$(DEPDIR)/libpresence_plugin_la-presence.Plo(a)am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/pwdstorage/$(DEPDIR)/libpwdstorage_plugin_la-clear_pwd.Plo(a)am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@ldap/servers/plugins/pwdstorage/$(DEPDIR)/libpwdstorage_plugin_la-crypt_pwd.Plo(a)am__quote@
@@ -7261,6 +7327,34 @@ ldap/servers/plugins/passthru/libpassthru_plugin_la-ptutil.lo: ldap/servers/plug
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpassthru_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/passthru/libpassthru_plugin_la-ptutil.lo `test -f 'ldap/servers/plugins/passthru/ptutil.c' || echo '$(srcdir)/'`ldap/servers/plugins/passthru/ptutil.c
+ldap/servers/plugins/posix-winsync/libposix_winsync_plugin_la-posix-winsync.lo: ldap/servers/plugins/posix-winsync/posix-winsync.c
+@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libposix_winsync_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/posix-winsync/libposix_winsync_plugin_la-posix-winsync.lo -MD -MP -MF ldap/servers/plugins/posix-winsync/$(DEPDIR)/libposix_winsync_plugin_la-posix-winsync.Tpo -c -o ldap/servers/plugins/posix-winsync/libposix_winsync_plugin_la-posix-winsync.lo `test -f 'ldap/servers/plugins/posix-winsync/posix-winsync.c' || echo '$(srcdir)/'`ldap/servers/plugins/posix-winsync/posix-winsync.c
+@am__fastdepCC_TRUE@ $(am__mv) ldap/servers/plugins/posix-winsync/$(DEPDIR)/libposix_winsync_plugin_la-posix-winsync.Tpo ldap/servers/plugins/posix-winsync/$(DEPDIR)/libposix_winsync_plugin_la-posix-winsync.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ldap/servers/plugins/posix-winsync/posix-winsync.c' object='ldap/servers/plugins/posix-winsync/libposix_winsync_plugin_la-posix-winsync.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libposix_winsync_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/posix-winsync/libposix_winsync_plugin_la-posix-winsync.lo `test -f 'ldap/servers/plugins/posix-winsync/posix-winsync.c' || echo '$(srcdir)/'`ldap/servers/plugins/posix-winsync/posix-winsync.c
+
+ldap/servers/plugins/posix-winsync/libposix_winsync_plugin_la-posix-group-func.lo: ldap/servers/plugins/posix-winsync/posix-group-func.c
+@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libposix_winsync_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/posix-winsync/libposix_winsync_plugin_la-posix-group-func.lo -MD -MP -MF ldap/servers/plugins/posix-winsync/$(DEPDIR)/libposix_winsync_plugin_la-posix-group-func.Tpo -c -o ldap/servers/plugins/posix-winsync/libposix_winsync_plugin_la-posix-group-func.lo `test -f 'ldap/servers/plugins/posix-winsync/posix-group-func.c' || echo '$(srcdir)/'`ldap/servers/plugins/posix-winsync/posix-group-func.c
+@am__fastdepCC_TRUE@ $(am__mv) ldap/servers/plugins/posix-winsync/$(DEPDIR)/libposix_winsync_plugin_la-posix-group-func.Tpo ldap/servers/plugins/posix-winsync/$(DEPDIR)/libposix_winsync_plugin_la-posix-group-func.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ldap/servers/plugins/posix-winsync/posix-group-func.c' object='ldap/servers/plugins/posix-winsync/libposix_winsync_plugin_la-posix-group-func.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libposix_winsync_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/posix-winsync/libposix_winsync_plugin_la-posix-group-func.lo `test -f 'ldap/servers/plugins/posix-winsync/posix-group-func.c' || echo '$(srcdir)/'`ldap/servers/plugins/posix-winsync/posix-group-func.c
+
+ldap/servers/plugins/posix-winsync/libposix_winsync_plugin_la-posix-group-task.lo: ldap/servers/plugins/posix-winsync/posix-group-task.c
+@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libposix_winsync_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/posix-winsync/libposix_winsync_plugin_la-posix-group-task.lo -MD -MP -MF ldap/servers/plugins/posix-winsync/$(DEPDIR)/libposix_winsync_plugin_la-posix-group-task.Tpo -c -o ldap/servers/plugins/posix-winsync/libposix_winsync_plugin_la-posix-group-task.lo `test -f 'ldap/servers/plugins/posix-winsync/posix-group-task.c' || echo '$(srcdir)/'`ldap/servers/plugins/posix-winsync/posix-group-task.c
+@am__fastdepCC_TRUE@ $(am__mv) ldap/servers/plugins/posix-winsync/$(DEPDIR)/libposix_winsync_plugin_la-posix-group-task.Tpo ldap/servers/plugins/posix-winsync/$(DEPDIR)/libposix_winsync_plugin_la-posix-group-task.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ldap/servers/plugins/posix-winsync/posix-group-task.c' object='ldap/servers/plugins/posix-winsync/libposix_winsync_plugin_la-posix-group-task.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libposix_winsync_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/posix-winsync/libposix_winsync_plugin_la-posix-group-task.lo `test -f 'ldap/servers/plugins/posix-winsync/posix-group-task.c' || echo '$(srcdir)/'`ldap/servers/plugins/posix-winsync/posix-group-task.c
+
+ldap/servers/plugins/posix-winsync/libposix_winsync_plugin_la-posix-winsync-config.lo: ldap/servers/plugins/posix-winsync/posix-winsync-config.c
+@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libposix_winsync_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/posix-winsync/libposix_winsync_plugin_la-posix-winsync-config.lo -MD -MP -MF ldap/servers/plugins/posix-winsync/$(DEPDIR)/libposix_winsync_plugin_la-posix-winsync-config.Tpo -c -o ldap/servers/plugins/posix-winsync/libposix_winsync_plugin_la-posix-winsync-config.lo `test -f 'ldap/servers/plugins/posix-winsync/posix-winsync-config.c' || echo '$(srcdir)/'`ldap/servers/plugins/posix-winsync/posix-winsync-config.c
+@am__fastdepCC_TRUE@ $(am__mv) ldap/servers/plugins/posix-winsync/$(DEPDIR)/libposix_winsync_plugin_la-posix-winsync-config.Tpo ldap/servers/plugins/posix-winsync/$(DEPDIR)/libposix_winsync_plugin_la-posix-winsync-config.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ldap/servers/plugins/posix-winsync/posix-winsync-config.c' object='ldap/servers/plugins/posix-winsync/libposix_winsync_plugin_la-posix-winsync-config.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libposix_winsync_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ldap/servers/plugins/posix-winsync/libposix_winsync_plugin_la-posix-winsync-config.lo `test -f 'ldap/servers/plugins/posix-winsync/posix-winsync-config.c' || echo '$(srcdir)/'`ldap/servers/plugins/posix-winsync/posix-winsync-config.c
+
ldap/servers/plugins/presence/libpresence_plugin_la-presence.lo: ldap/servers/plugins/presence/presence.c
@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpresence_plugin_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ldap/servers/plugins/presence/libpresence_plugin_la-presence.lo -MD -MP -MF ldap/servers/plugins/presence/$(DEPDIR)/libpresence_plugin_la-presence.Tpo -c -o ldap/servers/plugins/presence/libpresence_plugin_la-presence.lo `test -f 'ldap/servers/plugins/presence/presence.c' || echo '$(srcdir)/'`ldap/servers/plugins/presence/presence.c
@am__fastdepCC_TRUE@ $(am__mv) ldap/servers/plugins/presence/$(DEPDIR)/libpresence_plugin_la-presence.Tpo ldap/servers/plugins/presence/$(DEPDIR)/libpresence_plugin_la-presence.Plo
@@ -9814,6 +9908,7 @@ clean-libtool:
-rm -rf ldap/servers/plugins/mep/.libs ldap/servers/plugins/mep/_libs
-rm -rf ldap/servers/plugins/pam_passthru/.libs ldap/servers/plugins/pam_passthru/_libs
-rm -rf ldap/servers/plugins/passthru/.libs ldap/servers/plugins/passthru/_libs
+ -rm -rf ldap/servers/plugins/posix-winsync/.libs ldap/servers/plugins/posix-winsync/_libs
-rm -rf ldap/servers/plugins/presence/.libs ldap/servers/plugins/presence/_libs
-rm -rf ldap/servers/plugins/pwdstorage/.libs ldap/servers/plugins/pwdstorage/_libs
-rm -rf ldap/servers/plugins/referint/.libs ldap/servers/plugins/referint/_libs
@@ -10454,6 +10549,8 @@ distclean-generic:
-rm -f ldap/servers/plugins/pam_passthru/$(am__dirstamp)
-rm -f ldap/servers/plugins/passthru/$(DEPDIR)/$(am__dirstamp)
-rm -f ldap/servers/plugins/passthru/$(am__dirstamp)
+ -rm -f ldap/servers/plugins/posix-winsync/$(DEPDIR)/$(am__dirstamp)
+ -rm -f ldap/servers/plugins/posix-winsync/$(am__dirstamp)
-rm -f ldap/servers/plugins/presence/$(DEPDIR)/$(am__dirstamp)
-rm -f ldap/servers/plugins/presence/$(am__dirstamp)
-rm -f ldap/servers/plugins/pwdstorage/$(DEPDIR)/$(am__dirstamp)
@@ -10520,7 +10617,7 @@ clean-am: clean-binPROGRAMS clean-generic clean-libtool clean-local \
distclean: distclean-am
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
- -rm -rf ldap/libraries/libavl/$(DEPDIR) ldap/servers/plugins/acct_usability/$(DEPDIR) ldap/servers/plugins/acctpolicy/$(DEPDIR) ldap/servers/plugins/acl/$(DEPDIR) ldap/servers/plugins/automember/$(DEPDIR) ldap/servers/plugins/bitwise/$(DEPDIR) ldap/servers/plugins/chainingdb/$(DEPDIR) ldap/servers/plugins/collation/$(DEPDIR) ldap/servers/plugins/cos/$(DEPDIR) ldap/servers/plugins/deref/$(DEPDIR) ldap/servers/plugins/distrib/$(DEPDIR) ldap/servers/plugins/dna/$(DEPDIR) ldap/servers/plugins/http/$(DEPDIR) ldap/servers/plugins/linkedattrs/$(DEPDIR) ldap/servers/plugins/memberof/$(DEPDIR) ldap/servers/plugins/mep/$(DEPDIR) ldap/servers/plugins/pam_passthru/$(DEPDIR) ldap/servers/plugins/passthru/$(DEPDIR) ldap/servers/plugins/presence/$(DEPDIR) ldap/servers/plugins/pwdstorage/$(DEPDIR) ldap/servers/plugins/referint/$(DEPDIR) ldap/servers/plugins/replication/$(DEPDIR) ldap/servers/plugins/retrocl/$(DEPDIR) ldap/servers/plugins/rever/$(DEPDIR) ldap/servers/plugins/roles/$(DEPDIR)
ldap/servers/plugins/rootdn_access/$(DEPDIR) ldap/servers/plugins/schema_reload/$(DEPDIR) ldap/servers/plugins/statechange/$(DEPDIR) ldap/servers/plugins/syntaxes/$(DEPDIR) ldap/servers/plugins/uiduniq/$(DEPDIR) ldap/servers/plugins/usn/$(DEPDIR) ldap/servers/plugins/views/$(DEPDIR) ldap/servers/slapd/$(DEPDIR) ldap/servers/slapd/back-ldbm/$(DEPDIR) ldap/servers/slapd/tools/$(DEPDIR) ldap/servers/slapd/tools/ldclt/$(DEPDIR) ldap/servers/slapd/tools/rsearch/$(DEPDIR) ldap/servers/snmp/$(DEPDIR) ldap/systools/$(DEPDIR) lib/base/$(DEPDIR) lib/ldaputil/$(DEPDIR) lib/libaccess/$(DEPDIR) lib/libadmin/$(DEPDIR) lib/libsi18n/$(DEPDIR)
+ -rm -rf ldap/libraries/libavl/$(DEPDIR) ldap/servers/plugins/acct_usability/$(DEPDIR) ldap/servers/plugins/acctpolicy/$(DEPDIR) ldap/servers/plugins/acl/$(DEPDIR) ldap/servers/plugins/automember/$(DEPDIR) ldap/servers/plugins/bitwise/$(DEPDIR) ldap/servers/plugins/chainingdb/$(DEPDIR) ldap/servers/plugins/collation/$(DEPDIR) ldap/servers/plugins/cos/$(DEPDIR) ldap/servers/plugins/deref/$(DEPDIR) ldap/servers/plugins/distrib/$(DEPDIR) ldap/servers/plugins/dna/$(DEPDIR) ldap/servers/plugins/http/$(DEPDIR) ldap/servers/plugins/linkedattrs/$(DEPDIR) ldap/servers/plugins/memberof/$(DEPDIR) ldap/servers/plugins/mep/$(DEPDIR) ldap/servers/plugins/pam_passthru/$(DEPDIR) ldap/servers/plugins/passthru/$(DEPDIR) ldap/servers/plugins/posix-winsync/$(DEPDIR) ldap/servers/plugins/presence/$(DEPDIR) ldap/servers/plugins/pwdstorage/$(DEPDIR) ldap/servers/plugins/referint/$(DEPDIR) ldap/servers/plugins/replication/$(DEPDIR) ldap/servers/plugins/retrocl/$(DEPDIR) ldap/servers/plugins/rever/$
(DEPDIR) ldap/servers/plugins/roles/$(DEPDIR) ldap/servers/plugins/rootdn_access/$(DEPDIR) ldap/servers/plugins/schema_reload/$(DEPDIR) ldap/servers/plugins/statechange/$(DEPDIR) ldap/servers/plugins/syntaxes/$(DEPDIR) ldap/servers/plugins/uiduniq/$(DEPDIR) ldap/servers/plugins/usn/$(DEPDIR) ldap/servers/plugins/views/$(DEPDIR) ldap/servers/slapd/$(DEPDIR) ldap/servers/slapd/back-ldbm/$(DEPDIR) ldap/servers/slapd/tools/$(DEPDIR) ldap/servers/slapd/tools/ldclt/$(DEPDIR) ldap/servers/slapd/tools/rsearch/$(DEPDIR) ldap/servers/snmp/$(DEPDIR) ldap/systools/$(DEPDIR) lib/base/$(DEPDIR) lib/ldaputil/$(DEPDIR) lib/libaccess/$(DEPDIR) lib/libadmin/$(DEPDIR) lib/libsi18n/$(DEPDIR)
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-hdr distclean-libtool distclean-tags
@@ -10576,7 +10673,7 @@ installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
-rm -rf $(top_srcdir)/autom4te.cache
- -rm -rf ldap/libraries/libavl/$(DEPDIR) ldap/servers/plugins/acct_usability/$(DEPDIR) ldap/servers/plugins/acctpolicy/$(DEPDIR) ldap/servers/plugins/acl/$(DEPDIR) ldap/servers/plugins/automember/$(DEPDIR) ldap/servers/plugins/bitwise/$(DEPDIR) ldap/servers/plugins/chainingdb/$(DEPDIR) ldap/servers/plugins/collation/$(DEPDIR) ldap/servers/plugins/cos/$(DEPDIR) ldap/servers/plugins/deref/$(DEPDIR) ldap/servers/plugins/distrib/$(DEPDIR) ldap/servers/plugins/dna/$(DEPDIR) ldap/servers/plugins/http/$(DEPDIR) ldap/servers/plugins/linkedattrs/$(DEPDIR) ldap/servers/plugins/memberof/$(DEPDIR) ldap/servers/plugins/mep/$(DEPDIR) ldap/servers/plugins/pam_passthru/$(DEPDIR) ldap/servers/plugins/passthru/$(DEPDIR) ldap/servers/plugins/presence/$(DEPDIR) ldap/servers/plugins/pwdstorage/$(DEPDIR) ldap/servers/plugins/referint/$(DEPDIR) ldap/servers/plugins/replication/$(DEPDIR) ldap/servers/plugins/retrocl/$(DEPDIR) ldap/servers/plugins/rever/$(DEPDIR) ldap/servers/plugins/roles/$(DEPDIR)
ldap/servers/plugins/rootdn_access/$(DEPDIR) ldap/servers/plugins/schema_reload/$(DEPDIR) ldap/servers/plugins/statechange/$(DEPDIR) ldap/servers/plugins/syntaxes/$(DEPDIR) ldap/servers/plugins/uiduniq/$(DEPDIR) ldap/servers/plugins/usn/$(DEPDIR) ldap/servers/plugins/views/$(DEPDIR) ldap/servers/slapd/$(DEPDIR) ldap/servers/slapd/back-ldbm/$(DEPDIR) ldap/servers/slapd/tools/$(DEPDIR) ldap/servers/slapd/tools/ldclt/$(DEPDIR) ldap/servers/slapd/tools/rsearch/$(DEPDIR) ldap/servers/snmp/$(DEPDIR) ldap/systools/$(DEPDIR) lib/base/$(DEPDIR) lib/ldaputil/$(DEPDIR) lib/libaccess/$(DEPDIR) lib/libadmin/$(DEPDIR) lib/libsi18n/$(DEPDIR)
+ -rm -rf ldap/libraries/libavl/$(DEPDIR) ldap/servers/plugins/acct_usability/$(DEPDIR) ldap/servers/plugins/acctpolicy/$(DEPDIR) ldap/servers/plugins/acl/$(DEPDIR) ldap/servers/plugins/automember/$(DEPDIR) ldap/servers/plugins/bitwise/$(DEPDIR) ldap/servers/plugins/chainingdb/$(DEPDIR) ldap/servers/plugins/collation/$(DEPDIR) ldap/servers/plugins/cos/$(DEPDIR) ldap/servers/plugins/deref/$(DEPDIR) ldap/servers/plugins/distrib/$(DEPDIR) ldap/servers/plugins/dna/$(DEPDIR) ldap/servers/plugins/http/$(DEPDIR) ldap/servers/plugins/linkedattrs/$(DEPDIR) ldap/servers/plugins/memberof/$(DEPDIR) ldap/servers/plugins/mep/$(DEPDIR) ldap/servers/plugins/pam_passthru/$(DEPDIR) ldap/servers/plugins/passthru/$(DEPDIR) ldap/servers/plugins/posix-winsync/$(DEPDIR) ldap/servers/plugins/presence/$(DEPDIR) ldap/servers/plugins/pwdstorage/$(DEPDIR) ldap/servers/plugins/referint/$(DEPDIR) ldap/servers/plugins/replication/$(DEPDIR) ldap/servers/plugins/retrocl/$(DEPDIR) ldap/servers/plugins/rever/$
(DEPDIR) ldap/servers/plugins/roles/$(DEPDIR) ldap/servers/plugins/rootdn_access/$(DEPDIR) ldap/servers/plugins/schema_reload/$(DEPDIR) ldap/servers/plugins/statechange/$(DEPDIR) ldap/servers/plugins/syntaxes/$(DEPDIR) ldap/servers/plugins/uiduniq/$(DEPDIR) ldap/servers/plugins/usn/$(DEPDIR) ldap/servers/plugins/views/$(DEPDIR) ldap/servers/slapd/$(DEPDIR) ldap/servers/slapd/back-ldbm/$(DEPDIR) ldap/servers/slapd/tools/$(DEPDIR) ldap/servers/slapd/tools/ldclt/$(DEPDIR) ldap/servers/slapd/tools/rsearch/$(DEPDIR) ldap/servers/snmp/$(DEPDIR) ldap/systools/$(DEPDIR) lib/base/$(DEPDIR) lib/ldaputil/$(DEPDIR) lib/libaccess/$(DEPDIR) lib/libadmin/$(DEPDIR) lib/libsi18n/$(DEPDIR)
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
diff --git a/config.h.in b/config.h.in
index 46e93eb..98eaf33 100644
--- a/config.h.in
+++ b/config.h.in
@@ -54,6 +54,9 @@
/* enable the pam passthru auth plugin */
#undef ENABLE_PAM_PASSTHRU
+/* enable support for POSIX user/group attributes in winsync */
+#undef ENABLE_POSIX_WINSYNC
+
/* enable the presence plugin */
#undef ENABLE_PRESENCE
diff --git a/configure b/configure
index a70bfb6..809b471 100755
--- a/configure
+++ b/configure
@@ -887,6 +887,8 @@ with_systemdsystemunitdir
PKG_CONFIG
with_tmpfiles_d
with_fhs_opt
+enable_posix_winsync_FALSE
+enable_posix_winsync_TRUE
enable_acctpolicy_FALSE
enable_acctpolicy_TRUE
enable_presence_FALSE
@@ -1047,6 +1049,7 @@ enable_autobind
enable_bitwise
enable_presence
enable_acctpolicy
+enable_posix_winsync
with_fhs
with_fhs_opt
with_tmpfiles_d
@@ -1762,6 +1765,8 @@ Optional Features:
yes)
--enable-presence enable the presence plugin (default: no)
--enable-acctpolicy enable the account policy plugin (default: yes)
+ --enable-posix-winsync enable support for POSIX user/group attributes in
+ winsync (default: yes)
Optional Packages:
--with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
@@ -5510,13 +5515,13 @@ if test "${lt_cv_nm_interface+set}" = set; then
else
lt_cv_nm_interface="BSD nm"
echo "int some_variable = 0;" > conftest.$ac_ext
- (eval echo "\"\$as_me:5513: $ac_compile\"" >&5)
+ (eval echo "\"\$as_me:5518: $ac_compile\"" >&5)
(eval "$ac_compile" 2>conftest.err)
cat conftest.err >&5
- (eval echo "\"\$as_me:5516: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
+ (eval echo "\"\$as_me:5521: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
(eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
cat conftest.err >&5
- (eval echo "\"\$as_me:5519: output\"" >&5)
+ (eval echo "\"\$as_me:5524: output\"" >&5)
cat conftest.out >&5
if $GREP 'External.*some_variable' conftest.out > /dev/null; then
lt_cv_nm_interface="MS dumpbin"
@@ -6722,7 +6727,7 @@ ia64-*-hpux*)
;;
*-*-irix6*)
# Find out which ABI we are using.
- echo '#line 6725 "configure"' > conftest.$ac_ext
+ echo '#line 6730 "configure"' > conftest.$ac_ext
if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
@@ -9287,11 +9292,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:9290: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:9295: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:9294: \$? = $ac_status" >&5
+ echo "$as_me:9299: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings other than the usual output.
@@ -9626,11 +9631,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:9629: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:9634: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:9633: \$? = $ac_status" >&5
+ echo "$as_me:9638: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings other than the usual output.
@@ -9731,11 +9736,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:9734: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:9739: $lt_compile\"" >&5)
(eval "$lt_compile" 2>out/conftest.err)
ac_status=$?
cat out/conftest.err >&5
- echo "$as_me:9738: \$? = $ac_status" >&5
+ echo "$as_me:9743: \$? = $ac_status" >&5
if (exit $ac_status) && test -s out/conftest2.$ac_objext
then
# The compiler can only warn and ignore the option if not recognized
@@ -9786,11 +9791,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:9789: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:9794: $lt_compile\"" >&5)
(eval "$lt_compile" 2>out/conftest.err)
ac_status=$?
cat out/conftest.err >&5
- echo "$as_me:9793: \$? = $ac_status" >&5
+ echo "$as_me:9798: \$? = $ac_status" >&5
if (exit $ac_status) && test -s out/conftest2.$ac_objext
then
# The compiler can only warn and ignore the option if not recognized
@@ -12589,7 +12594,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 12592 "configure"
+#line 12597 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -12685,7 +12690,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 12688 "configure"
+#line 12693 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -14705,11 +14710,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:14708: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:14713: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:14712: \$? = $ac_status" >&5
+ echo "$as_me:14717: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings other than the usual output.
@@ -14804,11 +14809,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:14807: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:14812: $lt_compile\"" >&5)
(eval "$lt_compile" 2>out/conftest.err)
ac_status=$?
cat out/conftest.err >&5
- echo "$as_me:14811: \$? = $ac_status" >&5
+ echo "$as_me:14816: \$? = $ac_status" >&5
if (exit $ac_status) && test -s out/conftest2.$ac_objext
then
# The compiler can only warn and ignore the option if not recognized
@@ -14856,11 +14861,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:14859: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:14864: $lt_compile\"" >&5)
(eval "$lt_compile" 2>out/conftest.err)
ac_status=$?
cat out/conftest.err >&5
- echo "$as_me:14863: \$? = $ac_status" >&5
+ echo "$as_me:14868: \$? = $ac_status" >&5
if (exit $ac_status) && test -s out/conftest2.$ac_objext
then
# The compiler can only warn and ignore the option if not recognized
@@ -20442,6 +20447,37 @@ else
fi
+if test -z "$enable_posix_winsync" ; then
+ enable_posix_winsync=yes # if not set on cmdline, set default
+fi
+{ $as_echo "$as_me:$LINENO: checking for --enable-posix-winsync" >&5
+$as_echo_n "checking for --enable-posix-winsync... " >&6; }
+# Check whether --enable-posix_winsync was given.
+if test "${enable_posix_winsync+set}" = set; then
+ enableval=$enable_posix_winsync;
+fi
+
+if test "$enable_posix_winsync" = yes ; then
+ { $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
+
+cat >>confdefs.h <<\_ACEOF
+#define ENABLE_POSIX_WINSYNC 1
+_ACEOF
+
+else
+ { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+ if test "$enable_posix_winsync" = "yes"; then
+ enable_posix_winsync_TRUE=
+ enable_posix_winsync_FALSE='#'
+else
+ enable_posix_winsync_TRUE='#'
+ enable_posix_winsync_FALSE=
+fi
+
+
# the default prefix - override with --prefix or --with-fhs
@@ -25222,6 +25258,13 @@ $as_echo "$as_me: error: conditional \"enable_acctpolicy\" was never defined.
Usually this means the macro was only invoked conditionally." >&2;}
{ (exit 1); exit 1; }; }
fi
+if test -z "${enable_posix_winsync_TRUE}" && test -z "${enable_posix_winsync_FALSE}"; then
+ { { $as_echo "$as_me:$LINENO: error: conditional \"enable_posix_winsync\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"enable_posix_winsync\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+ { (exit 1); exit 1; }; }
+fi
if test -z "${WINNT_TRUE}" && test -z "${WINNT_FALSE}"; then
{ { $as_echo "$as_me:$LINENO: error: conditional \"WINNT\" was never defined.
Usually this means the macro was only invoked conditionally." >&5
diff --git a/configure.ac b/configure.ac
index c24084d..df02cff 100644
--- a/configure.ac
+++ b/configure.ac
@@ -209,6 +209,21 @@ else
fi
AM_CONDITIONAL(enable_acctpolicy,test "$enable_acctpolicy" = "yes")
+if test -z "$enable_posix_winsync" ; then
+ enable_posix_winsync=yes # if not set on cmdline, set default
+fi
+AC_MSG_CHECKING(for --enable-posix-winsync)
+AC_ARG_ENABLE(posix_winsync,
+ AS_HELP_STRING([--enable-posix-winsync],
+ [enable support for POSIX user/group attributes in winsync (default: yes)]))
+if test "$enable_posix_winsync" = yes ; then
+ AC_MSG_RESULT(yes)
+ AC_DEFINE([ENABLE_POSIX_WINSYNC], [1], [enable support for POSIX user/group attributes in winsync])
+else
+ AC_MSG_RESULT(no)
+fi
+AM_CONDITIONAL(enable_posix_winsync,test "$enable_posix_winsync" = "yes")
+
# the default prefix - override with --prefix or --with-fhs
AC_PREFIX_DEFAULT([/opt/$PACKAGE_NAME])
diff --git a/ldap/admin/src/scripts/DSCreate.pm.in b/ldap/admin/src/scripts/DSCreate.pm.in
index fcb04e3..1d5e71a 100644
--- a/ldap/admin/src/scripts/DSCreate.pm.in
+++ b/ldap/admin/src/scripts/DSCreate.pm.in
@@ -378,6 +378,9 @@ sub createConfigFile {
if (-f "$inf->{General}->{prefix}@updatedir(a)/50replication-plugins.ldif") {
push @ldiffiles, "$inf->{General}->{prefix}@updatedir(a)/50replication-plugins.ldif";
}
+ if (-f "$inf->{General}->{prefix}@updatedir(a)/50posix-winsync-plugin.ldif") {
+ push @ldiffiles, "$inf->{General}->{prefix}@updatedir(a)/50posix-winsync-plugin.ldif";
+ }
if (-f "$inf->{General}->{prefix}@templatedir(a)/90betxn-plugins.ldif") {
push @ldiffiles, "$inf->{General}->{prefix}@templatedir(a)/90betxn-plugins.ldif";
diff --git a/ldap/ldif/50posix-winsync-plugin.ldif b/ldap/ldif/50posix-winsync-plugin.ldif
new file mode 100644
index 0000000..a9c7908
--- /dev/null
+++ b/ldap/ldif/50posix-winsync-plugin.ldif
@@ -0,0 +1,15 @@
+dn: cn=Posix Winsync API,cn=plugins,cn=config
+objectclass: top
+objectclass: nsSlapdPlugin
+objectclass: extensibleObject
+cn: Posix Winsync API
+nsslapd-pluginpath: libposix-winsync-plugin
+nsslapd-plugininitfunc: posix_winsync_plugin_init
+nsslapd-plugintype: preoperation
+nsslapd-pluginenabled: off
+nsslapd-plugin-depends-on-type: database
+posixWinsyncMsSFUSchema: false
+posixWinsyncMapMemberUID: true
+posixWinsyncCreateMemberOfTask: false
+posixWinsyncLowerCaseUID: false
+nsslapd-pluginprecedence: 25
diff --git a/ldap/servers/plugins/posix-winsync/README b/ldap/servers/plugins/posix-winsync/README
new file mode 100644
index 0000000..d35a85f
--- /dev/null
+++ b/ldap/servers/plugins/posix-winsync/README
@@ -0,0 +1,50 @@
+This is a winsync plugin for the 389 directory server. http://port389.org
+
+The Posix Winsync Plugin syncs Posix attributes between 389 DS and MS
+AD for users and groups, if the attributes are available in one of the
+tow worlds. For syncing from AD to DS it will add the objectclass
+posixAccount and ShadowAccount or posixGroup for the ldap entry.
+For sync a user or group from DS to AD AD needs a nisdomain name, the
+nisdomin name I have stored in the upper container of the users and
+groups, e.g.:
+dn: dc=example,dc=dom
+nisDomain: example
+objectClass: top
+objectClass: domain
+objectClass: nisdomainobject
+dc: example
+It can be stored in any container above the user and group container
+and below the replicated DS subtree.
+The MSFU35 and the RFC2307 schema of AD is supported, but must
+configured in the plugin. User lock/unlock will sync and lock the user
+on DS with nsmanageddisabledrole. The code is borrowed from the
+freeIPA project.
+It is also possible to generate memberUid Attributes in Posix Groups
+corresponding the group members, if the members are Posix Users.
+After syncing from AD with a change in group membership, it will
+schedule a 'Member of Plugin' task, so that users get the memberOf
+attributes. For that the posix user get the objectclass inetUser
+
+Configuration
+
+The configuration entry DN is cn=Posix Winsync API,cn=plugins,cn=config
+
+there are 4 Config attributes:
+
+posixWinsyncMsSFUSchema -- set this true for the old MSFU schema on W2k3 AD's
+ default: false
+
+posixWinsyncMapMemberUID -- set this false, if you don't want generate memberUid attributs in posix Groups
+ default: true
+
+posixWinsyncCreateMemberOfTask -- create a task for the member of plugin to
+ generate the memberOf attributes in a user, if a group membership in
+ any user is changed while syncing. The postop-/preop plugins will not
+ called through winsync, thats why create a task.
+ default: false
+
+posixWinsyncLowerCaseUID: some customers use uppercase letters in samAccountName
+ which is mapped to uid. uid should be case insensitve and works on
+ Unix/Linux for users, but makes problems with supplementary groups (a least on Solaris)
+ so you can set this to true, so that memberUid attributes will convert to lowercase.
+ default: false
diff --git a/ldap/servers/plugins/posix-winsync/posix-group-func.c b/ldap/servers/plugins/posix-winsync/posix-group-func.c
new file mode 100644
index 0000000..72963ac
--- /dev/null
+++ b/ldap/servers/plugins/posix-winsync/posix-group-func.c
@@ -0,0 +1,490 @@
+/** Author: Carsten Grzemba grzemba(a)contac-dt.de>
+ *
+ * Copyright (C) 2011 contac Datentechnik GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; version 2 only
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+ $Id: posix-group-func.c 28 2011-05-13 14:35:29Z grzemba $
+ */
+#include "slapi-plugin.h"
+
+#include <string.h>
+#include <nspr.h>
+#include "posix-wsp-ident.h"
+
+Slapi_Value **
+valueset_get_valuearray(const Slapi_ValueSet *vs); /* stolen from proto-slap.h */
+static PRMonitor *memberuid_operation_lock = 0;
+
+void
+memberUidLock()
+{
+ PR_EnterMonitor(memberuid_operation_lock);
+}
+
+void
+memberUidUnlock()
+{
+ PR_ExitMonitor(memberuid_operation_lock);
+}
+
+int
+memberUidLockInit()
+{
+ return (memberuid_operation_lock = PR_NewMonitor()) != NULL;
+}
+
+/* search the user with DN udn and returns uid*/
+char *
+searchUid(const char *udn)
+{
+ Slapi_PBlock *int_search_pb = slapi_pblock_new();
+ Slapi_Entry **entries = NULL;
+ char *attrs[] = { "uid", NULL };
+ char *uid = NULL;
+
+ slapi_log_error(SLAPI_LOG_PLUGIN, POSIX_WINSYNC_PLUGIN_NAME, "search Uid: search %s\n", udn);
+
+ slapi_search_internal_set_pb(int_search_pb, udn, LDAP_SCOPE_BASE,
+ "(|(objectclass=posixAccount)(objectclass=ldapsubentry))", attrs,
+ 0 /* attrsonly */, NULL /* controls */, NULL /* uniqueid */,
+ posix_winsync_get_plugin_identity(), 0 /* actions */);
+ if (slapi_search_internal_pb(int_search_pb)) {
+ /* get result and log an error */
+ int res = 0;
+ slapi_pblock_get(int_search_pb, SLAPI_PLUGIN_INTOP_RESULT, &res);
+ slapi_log_error(SLAPI_LOG_FATAL, POSIX_WINSYNC_PLUGIN_NAME,
+ "searchUid: error searching for uid: %d", res);
+ } else {
+ slapi_log_error(SLAPI_LOG_PLUGIN, POSIX_WINSYNC_PLUGIN_NAME, "searchUid: searched %s\n",
+ udn);
+ slapi_pblock_get(int_search_pb, SLAPI_PLUGIN_INTOP_SEARCH_ENTRIES, &entries);
+ if (NULL != entries && NULL != entries[0]) {
+ Slapi_Attr *attr = NULL;
+ Slapi_Value *v = NULL;
+
+ if (slapi_entry_attr_find(entries[0], "uid", &attr) == 0) {
+ slapi_attr_first_value(attr, &v);
+ uid = slapi_ch_strdup(slapi_value_get_string(v));
+ slapi_log_error(SLAPI_LOG_PLUGIN, POSIX_WINSYNC_PLUGIN_NAME,
+ "searchUid: return uid %s\n", uid);
+ /* slapi_value_free(&v); */
+ } else {
+ slapi_log_error(SLAPI_LOG_PLUGIN, POSIX_WINSYNC_PLUGIN_NAME,
+ "searchUid: uid in %s not found\n", udn);
+ }
+ slapi_free_search_results_internal(int_search_pb);
+ slapi_pblock_destroy(int_search_pb);
+ if (posix_winsync_config_get_lowercase()) {
+ return slapi_dn_ignore_case(uid);
+ }
+ return uid;
+ }
+ }
+ slapi_free_search_results_internal(int_search_pb);
+ slapi_pblock_destroy(int_search_pb);
+ slapi_log_error(SLAPI_LOG_PLUGIN, POSIX_WINSYNC_PLUGIN_NAME,
+ "searchUid: posix user %s not found\n", udn);
+ return NULL;
+}
+
+int
+dn_in_set(const char* uid, char **uids)
+{
+ int i;
+ Slapi_DN *sdn_uid = slapi_sdn_new_dn_byval(uid);
+ Slapi_DN *sdn_ul = slapi_sdn_new();
+
+ if (uids == NULL || uid == NULL)
+ return false;
+ for (i = 0; uids[i]; i++) {
+ slapi_sdn_set_dn_byref(sdn_ul, uids[i]);
+ if (slapi_sdn_compare(sdn_uid, sdn_ul) == 0) {
+ slapi_sdn_free(&sdn_ul);
+ slapi_sdn_free(&sdn_uid);
+ return true;
+ }
+ slapi_sdn_done(sdn_ul);
+ }
+ slapi_sdn_free(&sdn_ul);
+ slapi_sdn_free(&sdn_uid);
+ return false;
+}
+
+int
+uid_in_set(const char* uid, char **uids)
+{
+ int i;
+
+ if (uid == NULL)
+ return false;
+ for (i = 0; uids != NULL && uids[i] != NULL; i++) {
+ Slapi_RDN *i_rdn = NULL;
+ char *i_uid = NULL;
+ char *t = NULL;
+
+ slapi_log_error(SLAPI_LOG_PLUGIN, POSIX_WINSYNC_PLUGIN_NAME, "uid_in_set: comp %s %s \n",
+ uid, uids[i]);
+ i_rdn = slapi_rdn_new_dn(uids[i]);
+ if (slapi_rdn_get_first(i_rdn, &t, &i_uid) == 1) {
+ if (strncasecmp(uid, i_uid, 256) == 0) {
+ slapi_rdn_free(&i_rdn);
+ return true;
+ }
+ }
+ slapi_rdn_free(&i_rdn);
+ }
+ return false;
+}
+
+/* return 1 if smods already has the given mod - 0 otherwise */
+static int
+smods_has_mod(Slapi_Mods *smods, int modtype, const char *type, const char *val)
+{
+ int rc = 0;
+ Slapi_Mod *smod = slapi_mod_new(), *smodp = NULL;
+
+ for (smodp = slapi_mods_get_first_smod(smods, smod);
+ (rc == 0) && smods && (smodp != NULL);
+ smodp = slapi_mods_get_next_smod(smods, smod)) {
+ if (slapi_attr_types_equivalent(slapi_mod_get_type(smod), type)
+ && ((slapi_mod_get_operation(smod) | LDAP_MOD_BVALUES) == (modtype | LDAP_MOD_BVALUES))) {
+ /* type and op are equal - see if val is in the mod's list of values */
+ Slapi_Value *sval = slapi_value_new_string((char *) val);
+ Slapi_Attr *attr = slapi_attr_new();
+ struct berval *bvp = NULL;
+
+ slapi_attr_init(attr, type);
+ for (bvp = slapi_mod_get_first_value(smodp); (rc == 0) && (bvp != NULL);
+ bvp = slapi_mod_get_next_value(smodp)) {
+ Slapi_Value *modval = slapi_value_new_berval(bvp);
+
+ rc = (slapi_value_compare(attr, sval, modval) == 0);
+ slapi_value_free(&modval);
+ }
+ slapi_value_free(&sval);
+ slapi_attr_free(&attr);
+ }
+ }
+ slapi_mod_free(&smod);
+ return rc;
+}
+
+int
+modGroupMembership(Slapi_Entry *entry, Slapi_Mods *smods, int *do_modify)
+{
+ int rc = 0;
+ Slapi_Attr * obj_attr = NULL; /* Entry attributes */
+
+ slapi_log_error(SLAPI_LOG_PLUGIN, POSIX_WINSYNC_PLUGIN_NAME, "modGroupMembership: ==>\n");
+
+ rc = slapi_entry_attr_find(entry, "objectclass", &obj_attr);
+ if (rc == 0) { /* Found objectclasses, so... */
+ int i;
+ Slapi_Value * value = NULL; /* Attribute values */
+
+ slapi_log_error(SLAPI_LOG_PLUGIN, POSIX_WINSYNC_PLUGIN_NAME,
+ "modGroupMembership scan objectclasses\n");
+ for (i = slapi_attr_first_value(obj_attr, &value); i != -1;
+ i = slapi_attr_next_value(obj_attr, i, &value)) {
+ const char * oc = NULL;
+
+ oc = slapi_value_get_string(value);
+ if (strncasecmp(oc, "posixGroup", 11) == 0) { /* entry has objectclass posixGroup */
+ Slapi_Mod *smod = NULL;
+ Slapi_Mod *nextMod = slapi_mod_new();
+ int del_mod = 0;
+ char **smod_adduids = NULL;
+ char **smod_deluids = NULL;
+
+ slapi_log_error(SLAPI_LOG_PLUGIN, POSIX_WINSYNC_PLUGIN_NAME,
+ "modGroupMembership: posixGroup -> look for uniquemember\n");
+ if (slapi_is_loglevel_set(SLAPI_LOG_PLUGIN))
+ slapi_mods_dump(smods, "memberUid - mods dump - initial");
+ for (smod = slapi_mods_get_first_smod(smods, nextMod); smod; smod
+ = slapi_mods_get_next_smod(smods, nextMod)) {
+ if (slapi_attr_types_equivalent(slapi_mod_get_type(smod), "uniqueMember")) {
+ struct berval *bv;
+
+ del_mod = slapi_mod_get_operation(smod);
+ for (bv = slapi_mod_get_first_value(smod); bv;
+ bv = slapi_mod_get_next_value(smod)) {
+ Slapi_Value *sv = slapi_value_new();
+
+ slapi_value_init_berval(sv, bv); /* copies bv_val */
+ if (SLAPI_IS_MOD_DELETE(slapi_mod_get_operation(smod))) {
+ slapi_ch_array_add(&smod_deluids,
+ slapi_ch_strdup(slapi_value_get_string(sv)));
+ slapi_log_error(SLAPI_LOG_PLUGIN, POSIX_WINSYNC_PLUGIN_NAME,
+ "modGroupMembership: add to deluids %s\n",
+ bv->bv_val);
+ } else {
+ slapi_ch_array_add(&smod_adduids,
+ slapi_ch_strdup(slapi_value_get_string(sv)));
+ slapi_log_error(SLAPI_LOG_PLUGIN, POSIX_WINSYNC_PLUGIN_NAME,
+ "modGroupMembership: add to adduids %s\n",
+ bv->bv_val);
+ }
+ slapi_value_free(&sv);
+ }
+ }
+ }
+ slapi_mod_free(&nextMod);
+ if (!del_mod) {
+ slapi_log_error(SLAPI_LOG_PLUGIN, POSIX_WINSYNC_PLUGIN_NAME,
+ "modGroupMembership: no uniquemember mod, nothing to do<==\n");
+ return 0;
+ }
+
+ slapi_log_error(SLAPI_LOG_PLUGIN, POSIX_WINSYNC_PLUGIN_NAME,
+ "modGroupMembership: entry is posixGroup\n");
+
+ Slapi_Attr * muid_attr = NULL; /* Entry attributes */
+ Slapi_Value * uid_value = NULL; /* Attribute values */
+
+ char **adduids = NULL;
+ char **moduids = NULL;
+ char **deluids = NULL;
+ int doModify = false;
+ int j = 0;
+
+ if (SLAPI_IS_MOD_DELETE(del_mod) || smod_deluids != NULL) {
+ Slapi_Attr * mu_attr = NULL; /* Entry attributes */
+ rc = slapi_entry_attr_find(entry, "memberUid", &mu_attr);
+ if (rc != 0 || mu_attr == NULL) {
+ slapi_log_error(SLAPI_LOG_PLUGIN, POSIX_WINSYNC_PLUGIN_NAME,
+ "modGroupMembership end: attribute memberUid not found\n");
+ return 0;
+ }
+ /* found attribute uniquemember */
+ if (smod_deluids == NULL) { /* deletion of the last value, deletes the Attribut from entry complete, this operation has no value, so we must look by self */
+ Slapi_Attr * um_attr = NULL; /* Entry attributes */
+ Slapi_Value * uid_dn_value = NULL; /* Attribute values */
+ int rc = slapi_entry_attr_find(entry, "uniquemember", &um_attr);
+ if (rc != 0 || um_attr == NULL) {
+ slapi_log_error(SLAPI_LOG_PLUGIN, POSIX_WINSYNC_PLUGIN_NAME,
+ "modGroupMembership end: attribute uniquemember not found\n");
+ return 0;
+ }
+ /* found attribute uniquemember */
+ /* ...loop for value... */
+ for (j = slapi_attr_first_value(um_attr, &uid_dn_value); j != -1;
+ j = slapi_attr_next_value(um_attr, j, &uid_dn_value)) {
+ slapi_ch_array_add(&smod_deluids,
+ slapi_ch_strdup(slapi_value_get_string(uid_dn_value)));
+ }
+ }
+ /* ...loop for value... */
+ for (j = slapi_attr_first_value(mu_attr, &uid_value); j != -1;
+ j = slapi_attr_next_value(mu_attr, j, &uid_value)) {
+ /* remove from uniquemember: remove from memberUid also */
+ const char *uid = NULL;
+ slapi_log_error(SLAPI_LOG_PLUGIN, POSIX_WINSYNC_PLUGIN_NAME,
+ "modGroupMembership: test dellist \n");
+ uid = slapi_value_get_string(uid_value);
+ slapi_log_error(SLAPI_LOG_PLUGIN, POSIX_WINSYNC_PLUGIN_NAME,
+ "modGroupMembership: test dellist %s\n", uid);
+ if (uid_in_set(uid, smod_deluids)) {
+ slapi_ch_array_add(&deluids, slapi_ch_strdup(uid));
+ slapi_log_error(SLAPI_LOG_PLUGIN, POSIX_WINSYNC_PLUGIN_NAME,
+ "modGroupMembership: add to dellist %s\n", uid);
+ doModify = true;
+ }
+ }
+ }
+ if (smod_adduids != NULL) { /* not MOD_DELETE */
+ const char *uid_dn = NULL;
+
+ slapi_log_error(SLAPI_LOG_PLUGIN, POSIX_WINSYNC_PLUGIN_NAME,
+ "modGroupMembership: posixGroup -> look for uniquemember\n");
+ /* found attribute uniquemember */
+ for (j = 0; smod_adduids[j]; j++) {
+ static char *uid = NULL;
+
+ uid_dn = smod_adduids[j];
+ slapi_log_error(SLAPI_LOG_PLUGIN, POSIX_WINSYNC_PLUGIN_NAME,
+ "modGroupMembership: perform user %s\n", uid_dn);
+
+ uid = searchUid(uid_dn);
+
+ if (uid == NULL) {
+ slapi_log_error(SLAPI_LOG_PLUGIN, POSIX_WINSYNC_PLUGIN_NAME,
+ "modGroupMembership: uid not found for %s, cannot do anything\n",
+ uid_dn); /* member on longer on server, do nothing */
+ } else {
+ rc |= slapi_entry_attr_find(entry, "memberUid", &muid_attr);
+ if (rc != 0 || muid_attr == NULL) { /* Found no memberUid list, so create */
+ slapi_log_error(SLAPI_LOG_PLUGIN, POSIX_WINSYNC_PLUGIN_NAME,
+ "modGroupMembership: no attribute memberUid, add with %s \n",
+ uid_dn);
+ slapi_ch_array_add(&adduids, uid);
+ doModify = true;
+ } else { /* Found a memberUid list, so modify */
+ Slapi_ValueSet *vs = NULL;
+ Slapi_Value *v = slapi_value_new();
+
+ slapi_value_init_string_passin(v, uid);
+ slapi_attr_get_valueset(muid_attr, &vs);
+ if (slapi_valueset_find(muid_attr, vs, v) != NULL) { /* already exist, all ok */
+ slapi_log_error(SLAPI_LOG_PLUGIN, POSIX_WINSYNC_PLUGIN_NAME,
+ "modGroupMembership: uid found in memberuid list %s nothing to do\n",
+ uid);
+ } else {
+ slapi_ch_array_add(&moduids, uid);
+ slapi_log_error(SLAPI_LOG_PLUGIN, POSIX_WINSYNC_PLUGIN_NAME,
+ "modGroupMembership: add to modlist %s\n", uid);
+ doModify = true;
+ }
+ /* slapi_value_free(&v); */
+ }
+ }
+ }
+ }
+ if (doModify) {
+ if (adduids) {
+ int i;
+ for (i = 0; adduids[i]; i++) {
+ if (!smods_has_mod(smods, LDAP_MOD_ADD, "memberUid", adduids[i])) {
+ slapi_mods_add_string(smods, LDAP_MOD_ADD, "memberUid", adduids[i]);
+ }
+ }
+ } else {
+ int i;
+ for (i = 0; moduids && moduids[i]; i++) {
+ if (!smods_has_mod(smods, LDAP_MOD_ADD, "memberUid", moduids[i])) {
+ slapi_mods_add_string(smods, LDAP_MOD_ADD, "memberUid", moduids[i]);
+ }
+ }
+ slapi_ch_array_free(moduids);
+ moduids = NULL;
+ for (i = 0; deluids && deluids[i]; i++) {
+ if (!smods_has_mod(smods, LDAP_MOD_DELETE, "memberUid", deluids[i])) {
+ slapi_mods_add_string(smods, LDAP_MOD_DELETE, "memberUid",
+ deluids[i]);
+ }
+ }
+ }
+ if (slapi_is_loglevel_set(SLAPI_LOG_PLUGIN))
+ slapi_mods_dump(smods, "memberUid - mods dump");
+ *do_modify = 1;
+ posix_winsync_config_set_MOFTaskCreated();
+
+ slapi_ch_array_free(smod_adduids);
+ smod_adduids = NULL;
+ slapi_ch_array_free(adduids);
+ adduids = NULL;
+ slapi_ch_array_free(smod_deluids);
+ smod_deluids = NULL;
+ slapi_ch_array_free(deluids);
+ deluids = NULL;
+ slapi_ch_array_free(moduids);
+ moduids = NULL;
+ break;
+ }
+ slapi_ch_array_free(smod_adduids);
+ smod_adduids = NULL;
+ slapi_ch_array_free(adduids);
+ adduids = NULL;
+ slapi_ch_array_free(smod_deluids);
+ smod_deluids = NULL;
+ slapi_ch_array_free(deluids);
+ deluids = NULL;
+ slapi_ch_array_free(moduids);
+ moduids = NULL;
+ }
+ }
+ }
+ slapi_log_error(SLAPI_LOG_PLUGIN, POSIX_WINSYNC_PLUGIN_NAME, "modGroupMembership: <==\n");
+ return 0;
+}
+
+int
+addGroupMembership(Slapi_Entry *entry, Slapi_Entry *ad_entry)
+{
+ int rc = 0;
+ Slapi_Attr * obj_attr = NULL; /* Entry attributes */
+
+ slapi_log_error(SLAPI_LOG_PLUGIN, POSIX_WINSYNC_PLUGIN_NAME, "addGroupMembership: ==>\n");
+
+ rc = slapi_entry_attr_find(entry, "objectclass", &obj_attr);
+ if (rc == 0) { /* Found objectclasses, so... */
+ int i;
+ Slapi_Value * value = NULL; /* Attribute values */
+
+ slapi_log_error(SLAPI_LOG_PLUGIN, POSIX_WINSYNC_PLUGIN_NAME,
+ "addGroupMembership scan objectclasses\n");
+ for (i = slapi_attr_first_value(obj_attr, &value); i != -1;
+ i = slapi_attr_next_value(obj_attr, i, &value)) {
+ Slapi_Attr * um_attr = NULL; /* Entry attributes uniquemember */
+ Slapi_Attr * muid_attr = NULL; /* Entry attributes memebrof */
+ Slapi_Value * uid_value = NULL; /* uniquemember Attribute values */
+ const char * oc = NULL;
+
+ oc = slapi_value_get_string(value);
+ if (strncasecmp(oc, "posixGroup", 11) == 0) { /* entry has objectclass posixGroup */
+ Slapi_ValueSet *newvs = NULL;
+
+ slapi_log_error(SLAPI_LOG_PLUGIN, POSIX_WINSYNC_PLUGIN_NAME,
+ "addGroupMembership: posixGroup -> look for uniquemember\n");
+ rc = slapi_entry_attr_find(entry, "uniquemember", &um_attr);
+ if (rc != 0 || um_attr == NULL) {
+ slapi_log_error(SLAPI_LOG_PLUGIN, POSIX_WINSYNC_PLUGIN_NAME,
+ "addGroupMembership end: attribute uniquemember not found\n");
+ return 0;
+ }
+ /* found attribute uniquemember */
+ rc = slapi_entry_attr_find(entry, "memberUid", &muid_attr);
+ if (rc != 0 || muid_attr == NULL) { /* Found no memberUid list, so create */
+ slapi_log_error(SLAPI_LOG_PLUGIN, POSIX_WINSYNC_PLUGIN_NAME,
+ "addGroupMembership: no attribute memberUid\n");
+ }
+ newvs = slapi_valueset_new();
+ /* ...loop for value... */
+ for (i = slapi_attr_first_value(um_attr, &uid_value); i != -1;
+ i = slapi_attr_next_value(um_attr, i, &uid_value)) {
+ const char *uid_dn = NULL;
+ static char *uid = NULL;
+ Slapi_Value *v = NULL;
+
+ uid_dn = slapi_value_get_string(uid_value);
+ slapi_log_error(SLAPI_LOG_PLUGIN, POSIX_WINSYNC_PLUGIN_NAME,
+ "addGroupMembership: perform member %s\n", uid_dn);
+ uid = searchUid(uid_dn);
+ if (uid == NULL) {
+ slapi_log_error(SLAPI_LOG_PLUGIN, POSIX_WINSYNC_PLUGIN_NAME,
+ "addGroupMembership: uid not found for %s, cannot do anything\n",
+ uid_dn); /* member on longer on server, do nothing */
+ } else {
+ v = slapi_value_new_string(uid);
+ slapi_ch_free_string(&uid);
+ if (slapi_attr_value_find(muid_attr, slapi_value_get_berval(v)) == 0) {
+ slapi_value_free(&v);
+ continue;
+ }
+ slapi_valueset_add_value(newvs, v);
+ slapi_value_free(&v);
+ }
+ }
+ slapi_entry_add_valueset(entry, "memberUid", newvs);
+ slapi_valueset_free(newvs);
+ posix_winsync_config_get_MOFTaskCreated();
+
+ break;
+ }
+ }
+ }
+ slapi_log_error(SLAPI_LOG_PLUGIN, POSIX_WINSYNC_PLUGIN_NAME, "addGroupMembership: <==\n");
+ return 0;
+}
+
diff --git a/ldap/servers/plugins/posix-winsync/posix-group-func.h b/ldap/servers/plugins/posix-winsync/posix-group-func.h
new file mode 100644
index 0000000..9452022
--- /dev/null
+++ b/ldap/servers/plugins/posix-winsync/posix-group-func.h
@@ -0,0 +1,21 @@
+/*
+ $Id: posix-group-func.h 11 2011-03-30 12:38:14Z grzemba $
+*/
+
+#ifndef POSIX_GROUP_WINSYNC_H
+#define POSIX_GROUP_WINSYNC_H
+
+/*
+Slapi_PBlock *searchDN( const char *baseDN, const char *filter, char *attrs[] );
+Slapi_PBlock * dnHasObjectClass( const char *baseDN, const char *objectClass, Slapi_Entry **entry );
+char * searchUid(const char *udn);
+int dn_in_set(const char* uid, char **uids);
+*/
+int modGroupMembership(Slapi_Entry *entry, Slapi_Mods *smods, int *do_modify);
+int addGroupMembership(Slapi_Entry *entry, Slapi_Entry *ad_entry);
+char * searchUid(const char *udn);
+void memberUidLock();
+void memberUidUnlock();
+int memberUidLockInit();
+
+#endif
diff --git a/ldap/servers/plugins/posix-winsync/posix-group-task.c b/ldap/servers/plugins/posix-winsync/posix-group-task.c
new file mode 100644
index 0000000..e31064c
--- /dev/null
+++ b/ldap/servers/plugins/posix-winsync/posix-group-task.c
@@ -0,0 +1,303 @@
+#include "slapi-plugin.h"
+#include "nspr.h"
+
+#include "posix-wsp-ident.h"
+#include "posix-group-func.h"
+
+typedef struct _task_data
+{
+ char *dn; /* search base */
+ char *filter_str; /* search filter */
+} task_data;
+
+typedef struct _cb_data
+{
+ char *dn;
+ void *txn;
+} cb_data;
+/*
+ typedef struct _posix_group_task_data
+ {
+ POSIX_WinSync_Config *config;
+ Slapi_Value *memberdn_val;
+ Slapi_ValueSet **uidvals;
+ void *txn;
+ } posix_group_data_data;
+ */
+
+/* interface function */
+int
+posix_group_task_add(Slapi_PBlock *pb, Slapi_Entry *e, Slapi_Entry *eAfter, int *returncode,
+ char *returntext, void *arg);
+
+static void
+posix_group_task_destructor(Slapi_Task *task);
+static void
+posix_group_fixup_task_thread(void *arg);
+static int
+posix_group_fix_memberuid_callback(Slapi_Entry *e, void *callback_data);
+
+/* extract a single value from the entry (as a string) -- if it's not in the
+ * entry, the default will be returned (which can be NULL).
+ * you do not need to free anything returned by this.
+ */
+static const char *
+fetch_attr(Slapi_Entry *e, const char *attrname, const char *default_val)
+{
+ Slapi_Attr *attr;
+ Slapi_Value *val = NULL;
+
+ if (slapi_entry_attr_find(e, attrname, &attr) != 0)
+ return default_val;
+ slapi_attr_first_value(attr, &val);
+ return slapi_value_get_string(val);
+}
+
+/* e configEntry */
+int
+posix_group_task_add(Slapi_PBlock *pb, Slapi_Entry *e, Slapi_Entry *eAfter, int *returncode,
+ char *returntext, void *arg)
+{
+ PRThread *thread = NULL;
+ int rv = SLAPI_DSE_CALLBACK_OK;
+ task_data *mytaskdata = NULL;
+ Slapi_Task *task = NULL;
+ const char *filter;
+ const char *dn = 0;
+
+ *returncode = LDAP_SUCCESS;
+
+ /* get arg(s) */
+ /* default: set replication basedn */
+ if ((dn = fetch_attr(e, "basedn", slapi_sdn_get_dn(posix_winsync_config_get_suffix()))) == NULL) {
+ *returncode = LDAP_OBJECT_CLASS_VIOLATION;
+ rv = SLAPI_DSE_CALLBACK_ERROR;
+ goto out;
+ }
+
+ if ((filter = fetch_attr(e, "filter", "(&(objectclass=posixGroup)(uniquemember=*))")) == NULL) {
+ *returncode = LDAP_OBJECT_CLASS_VIOLATION;
+ rv = SLAPI_DSE_CALLBACK_ERROR;
+ goto out;
+ }
+
+ /* setup our task data */
+ mytaskdata = (task_data*) slapi_ch_malloc(sizeof(task_data));
+ if (mytaskdata == NULL) {
+ *returncode = LDAP_OPERATIONS_ERROR;
+ rv = SLAPI_DSE_CALLBACK_ERROR;
+ goto out;
+ }
+ mytaskdata->dn = slapi_ch_strdup(dn);
+ mytaskdata->filter_str = slapi_ch_strdup(filter);
+
+ /* allocate new task now */
+ task = slapi_new_task(slapi_entry_get_ndn(e));
+
+ /* register our destructor for cleaning up our private data */
+ slapi_task_set_destructor_fn(task, posix_group_task_destructor);
+
+ /* Stash a pointer to our data in the task */
+ slapi_task_set_data(task, mytaskdata);
+
+ /* start the sample task as a separate thread */
+ thread = PR_CreateThread(PR_USER_THREAD, posix_group_fixup_task_thread, (void *) task,
+ PR_PRIORITY_NORMAL, PR_GLOBAL_THREAD, PR_UNJOINABLE_THREAD,
+ SLAPD_DEFAULT_THREAD_STACKSIZE);
+ if (thread == NULL) {
+ slapi_log_error(SLAPI_LOG_FATAL, POSIX_WINSYNC_PLUGIN_NAME,
+ "unable to create task thread!\n");
+ *returncode = LDAP_OPERATIONS_ERROR;
+ rv = SLAPI_DSE_CALLBACK_ERROR;
+ slapi_task_finish(task, *returncode);
+ } else {
+ rv = SLAPI_DSE_CALLBACK_OK;
+ }
+
+ out: return rv;
+}
+
+static void
+posix_group_task_destructor(Slapi_Task *task)
+{
+ if (task) {
+ task_data *mydata = (task_data *) slapi_task_get_data(task);
+ if (mydata) {
+ slapi_ch_free_string(&mydata->dn);
+ slapi_ch_free_string(&mydata->filter_str);
+ /* Need to cast to avoid a compiler warning */
+ slapi_ch_free((void **) &mydata);
+ }
+ }
+}
+
+static int
+posix_group_del_memberuid_callback(Slapi_Entry *e, void *callback_data)
+{
+ int rc = 0;
+ LDAPMod mod;
+ LDAPMod *mods[2];
+ char *val[2];
+ Slapi_PBlock *mod_pb = 0;
+ cb_data *the_cb_data = (cb_data *) callback_data;
+
+ mod_pb = slapi_pblock_new();
+
+ mods[0] = &mod;
+ mods[1] = 0;
+
+ val[0] = 0; /* all */
+ val[1] = 0;
+
+ mod.mod_op = LDAP_MOD_DELETE;
+ mod.mod_type = "memberuid";
+ mod.mod_values = val;
+
+ slapi_modify_internal_set_pb_ext(mod_pb, slapi_entry_get_sdn(e), mods, 0, 0,
+ posix_winsync_get_plugin_identity(), 0);
+
+ slapi_pblock_set(mod_pb, SLAPI_TXN, the_cb_data->txn);
+ slapi_modify_internal_pb(mod_pb);
+
+ slapi_pblock_get(mod_pb, SLAPI_PLUGIN_INTOP_RESULT, &rc);
+
+ slapi_pblock_destroy(mod_pb);
+
+ return rc;
+}
+
+static int
+posix_group_fix_memberuid(char *dn, char *filter_str, void *txn)
+{
+ int rc = 0;
+ struct _cb_data callback_data = { dn, txn };
+ Slapi_PBlock *search_pb = slapi_pblock_new();
+
+ /* char *attrs[]={"uniquemember","memberuid",NULL}; */
+
+ slapi_search_internal_set_pb(search_pb, dn, LDAP_SCOPE_SUBTREE, filter_str, 0, 0, 0, 0,
+ posix_winsync_get_plugin_identity(), 0);
+
+ slapi_pblock_set(search_pb, SLAPI_TXN, txn); /* set transaction id */
+ rc = slapi_search_internal_callback_pb(search_pb, &callback_data, 0,
+ posix_group_fix_memberuid_callback, 0);
+
+ slapi_pblock_destroy(search_pb);
+
+ return rc;
+}
+
+/* posix_group_fix_memberuid_callback()
+ * Add initial and/or fix up broken group list in entry
+ *
+ * 1. forall uniquemember search if posixAccount ? add uid : ""
+ */
+static int
+posix_group_fix_memberuid_callback(Slapi_Entry *e, void *callback_data)
+{
+ int rc = 0;
+ char *dn = slapi_entry_get_dn(e);
+ Slapi_DN *sdn = slapi_entry_get_sdn(e);
+
+ Slapi_Attr *obj_attr = NULL;
+
+ rc = slapi_entry_attr_find(e, "uniquemember", &obj_attr);
+ if (rc == 0) { /* Found uniquemember, so... */
+ int i;
+ Slapi_Value * value = slapi_value_new(); /* new memberuid Attribute values */
+ Slapi_Value * uniqval = NULL; /* uniquemeber Attribute values */
+ Slapi_ValueSet *uids = slapi_valueset_new();
+
+ slapi_log_error(SLAPI_LOG_PLUGIN, POSIX_WINSYNC_PLUGIN_NAME,
+ "_fix_memberuid scan uniquemember, group %s\n", dn);
+ for (i = slapi_attr_first_value(obj_attr, &uniqval); i != -1;
+ i = slapi_attr_next_value(obj_attr, i, &uniqval)) {
+ const char *member = NULL;
+ char * uid = NULL;
+ member = slapi_value_get_string(uniqval);
+ /* search uid for member (DN) */
+ slapi_log_error(SLAPI_LOG_PLUGIN, POSIX_WINSYNC_PLUGIN_NAME, "search %s\n", member);
+ if ((uid = searchUid(member)) != NULL) {
+ slapi_value_set_string(value, uid);
+ /* add uids ValueSet */
+ slapi_valueset_add_value(uids, value);
+ }
+ }
+ slapi_value_free(&value);
+
+ /* If we found some posix members, replace the existing memberuid attribute
+ * with the found values. */
+ if (uids && slapi_valueset_count(uids)) {
+ Slapi_PBlock *mod_pb = slapi_pblock_new();
+ Slapi_Value *val = 0;
+ Slapi_Mod *smod;
+ LDAPMod **mods = (LDAPMod **) slapi_ch_malloc(2 * sizeof(LDAPMod *));
+ int hint = 0;
+ cb_data *the_cb_data = (cb_data *) callback_data;
+
+ smod = slapi_mod_new();
+ slapi_mod_init(smod, 0);
+ slapi_mod_set_operation(smod, LDAP_MOD_REPLACE | LDAP_MOD_BVALUES);
+ slapi_mod_set_type(smod, "memberuid");
+
+ /* Loop through all of our values and add them to smod */
+ hint = slapi_valueset_first_value(uids, &val);
+ while (val) {
+ /* this makes a copy of the berval */
+ slapi_mod_add_value(smod, slapi_value_get_berval(val));
+ hint = slapi_valueset_next_value(uids, hint, &val);
+ }
+
+ mods[0] = slapi_mod_get_ldapmod_passout(smod);
+ mods[1] = 0;
+
+ slapi_modify_internal_set_pb_ext(mod_pb, sdn, mods, 0, 0,
+ posix_winsync_get_plugin_identity(), 0);
+
+ slapi_pblock_set(mod_pb, SLAPI_TXN, the_cb_data->txn);
+ slapi_modify_internal_pb(mod_pb);
+
+ slapi_pblock_get(mod_pb, SLAPI_PLUGIN_INTOP_RESULT, &rc);
+
+ ldap_mods_free(mods, 1);
+ slapi_mod_free(&smod);
+ slapi_pblock_destroy(mod_pb);
+ } else {
+ /* No member were found, so remove the memberuid attribute
+ * from this entry. */
+ posix_group_del_memberuid_callback(e, callback_data);
+ }
+ slapi_valueset_free(uids);
+ }
+ return rc;
+}
+
+static void
+posix_group_fixup_task_thread(void *arg)
+{
+ Slapi_Task *task = (Slapi_Task *) arg;
+ task_data *td = NULL;
+ int rc = 0;
+
+ /* Fetch our task data from the task */
+ td = (task_data *) slapi_task_get_data(task);
+
+ slapi_task_begin(task, 1);
+ slapi_task_log_notice(task, "posix_group task starts (arg: %s) ...\n", td->filter_str);
+
+ /* get the memberOf operation lock */
+ memberUidLock();
+
+ /* do real work */
+ rc = posix_group_fix_memberuid(td->dn, td->filter_str, NULL /* no txn? */);
+
+ /* release the memberOf operation lock */
+ memberUidUnlock();
+
+ slapi_task_log_notice(task, "posix_group task finished.");
+ slapi_task_log_status(task, "posix_group task finished.");
+ slapi_task_inc_progress(task);
+
+ /* this will queue the destruction of the task */
+ slapi_task_finish(task, rc);
+}
diff --git a/ldap/servers/plugins/posix-winsync/posix-winsync-config.c b/ldap/servers/plugins/posix-winsync/posix-winsync-config.c
new file mode 100644
index 0000000..8239456
--- /dev/null
+++ b/ldap/servers/plugins/posix-winsync/posix-winsync-config.c
@@ -0,0 +1,284 @@
+/** BEGIN COPYRIGHT BLOCK
+ * This Program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation; version 2 of the License.
+ *
+ * This Program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this Program; if not, write to the Free Software Foundation, Inc., 59 Temple
+ * Place, Suite 330, Boston, MA 02111-1307 USA.
+ *
+ * In addition, as a special exception, Red Hat, Inc. gives You the additional
+ * right to link the code of this Program with code not covered under the GNU
+ * General Public License ("Non-GPL Code") and to distribute linked combinations
+ * including the two, subject to the limitations in this paragraph. Non-GPL Code
+ * permitted under this exception must only link to the code of this Program
+ * through those well defined interfaces identified in the file named EXCEPTION
+ * found in the source code files (the "Approved Interfaces"). The files of
+ * Non-GPL Code may instantiate templates or use macros or inline functions from
+ * the Approved Interfaces without causing the resulting work to be covered by
+ * the GNU General Public License. Only Red Hat, Inc. may make changes or
+ * additions to the list of Approved Interfaces. You must obey the GNU General
+ * Public License in all respects for all of the Program code and other code
+ * used in conjunction with the Program except the Non-GPL Code covered by this
+ * exception. If you modify this file, you may extend this exception to your
+ * version of the file, but you are not obligated to do so. If you do not wish
+ * to provide this exception without modification, you must delete this
+ * exception statement from your version and license this file solely under the
+ * GPL without exception.
+ *
+ * END COPYRIGHT BLOCK **/
+/*
+ $Id: posix-winsync-config.c 42 2011-06-10 08:39:50Z grzemba $
+ $HeadURL: file:///storejet/svn/posix-winsync-plugin/trunk/posix-winsync-config.c $
+ */
+
+#ifdef WINSYNC_TEST_POSIX
+#include <slapi-plugin.h>
+#include "winsync-plugin.h"
+#else
+#include <dirsrv/slapi-plugin.h>
+#include <dirsrv/winsync-plugin.h>
+#endif
+#include "posix-wsp-ident.h"
+#include <string.h>
+#include "posix-group-func.h"
+
+#define POSIX_WINSYNC_CONFIG_FILTER "(objectclass=*)"
+/*
+ * static variables
+ */
+/* for now, there is only one configuration and it is global to the plugin */
+static POSIX_WinSync_Config theConfig;
+static int inited = 0;
+
+/* This is called when a new agreement is created or loaded
+ at startup.
+ */
+
+void *
+posix_winsync_agmt_init(const Slapi_DN *ds_subtree, const Slapi_DN *ad_subtree)
+{
+ void *cbdata = NULL;
+ void *node = NULL;
+ Slapi_DN *sdn = NULL;
+
+ slapi_log_error(SLAPI_LOG_PLUGIN, POSIX_WINSYNC_PLUGIN_NAME,
+ "--> posix_winsync_agmt_init [%s] [%s] -- begin\n",
+ slapi_sdn_get_dn(ds_subtree), slapi_sdn_get_dn(ad_subtree));
+
+ sdn = slapi_get_first_suffix(&node, 0);
+ while (sdn) {
+ if (slapi_sdn_isparent(sdn, ds_subtree) == 0) {
+ theConfig.rep_suffix = sdn;
+ slapi_log_error(SLAPI_LOG_PLUGIN, POSIX_WINSYNC_PLUGIN_NAME, "Found suffix's '%s'\n",
+ slapi_sdn_get_dn(sdn));
+ break;
+ }
+ sdn = slapi_get_next_suffix(&node, 0);
+ }
+ if (!sdn) {
+ slapi_log_error(SLAPI_LOG_FATAL, POSIX_WINSYNC_PLUGIN_NAME, "suffix not found for '%s'\n",
+ slapi_dn_parent(slapi_sdn_get_dn(ds_subtree)));
+ }
+
+ slapi_log_error(SLAPI_LOG_PLUGIN, POSIX_WINSYNC_PLUGIN_NAME,
+ "<-- posix_winsync_agmt_init -- end\n");
+
+ return cbdata;
+}
+
+static int
+posix_winsync_apply_config(Slapi_PBlock *pb, Slapi_Entry* entryBefore, Slapi_Entry* e,
+ int *returncode, char *returntext, void *arg);
+
+POSIX_WinSync_Config *
+posix_winsync_get_config()
+{
+ return &theConfig;
+}
+
+PRBool
+posix_winsync_config_get_mapMemberUid()
+{
+ return theConfig.mapMemberUID;
+}
+
+PRBool
+posix_winsync_config_get_lowercase()
+{
+ return theConfig.lowercase;
+}
+
+PRBool
+posix_winsync_config_get_createMOFTask()
+{
+ return theConfig.createMemberOfTask;
+}
+void
+posix_winsync_config_set_MOFTaskCreated()
+{
+ theConfig.MOFTaskCreated = PR_TRUE;
+}
+void
+posix_winsync_config_reset_MOFTaskCreated()
+{
+ theConfig.MOFTaskCreated = PR_FALSE;
+}
+PRBool
+posix_winsync_config_get_MOFTaskCreated()
+{
+ return theConfig.MOFTaskCreated;
+}
+
+PRBool
+posix_winsync_config_get_msSFUSchema()
+{
+ return theConfig.mssfuSchema;
+}
+
+Slapi_DN *
+posix_winsync_config_get_suffix()
+{
+ return theConfig.rep_suffix;
+}
+/*
+ * Read configuration and create a configuration data structure.
+ * This is called after the server has configured itself so we can check
+ * schema and whatnot.
+ * Returns an LDAP error code (LDAP_SUCCESS if all goes well).
+ */
+int
+posix_winsync_config(Slapi_Entry *config_e)
+{
+ int returncode = LDAP_SUCCESS;
+ char returntext[SLAPI_DSE_RETURNTEXT_SIZE];
+
+ slapi_log_error(SLAPI_LOG_PLUGIN, POSIX_WINSYNC_PLUGIN_NAME, "--> _config %s -- begin\n",
+ slapi_entry_get_dn_const(config_e));
+ if (inited) {
+ slapi_log_error(SLAPI_LOG_FATAL, POSIX_WINSYNC_PLUGIN_NAME,
+ "Error: POSIX WinSync plug-in already configured. "
+ "Please remove the plugin config entry [%s]\n",
+ slapi_entry_get_dn_const(config_e));
+ return (LDAP_PARAM_ERROR);
+ }
+
+ /* initialize fields */
+ if ((theConfig.lock = slapi_new_mutex()) == NULL) {
+ return (LDAP_LOCAL_ERROR);
+ }
+
+ /* init defaults */
+ theConfig.config_e = slapi_entry_alloc();
+ slapi_entry_init(theConfig.config_e, slapi_ch_strdup(""), NULL);
+ theConfig.mssfuSchema = PR_FALSE;
+ theConfig.mapMemberUID = PR_TRUE;
+ theConfig.lowercase = PR_FALSE;
+ theConfig.createMemberOfTask = PR_FALSE;
+ theConfig.MOFTaskCreated = PR_FALSE;
+
+ posix_winsync_apply_config(NULL, NULL, config_e, &returncode, returntext, NULL);
+ /* config DSE must be initialized before we get here */
+ {
+ int rc = 0;
+ const char *config_dn = slapi_entry_get_dn_const(config_e);
+
+ if (!memberUidLockInit()) {
+ slapi_log_error(SLAPI_LOG_PLUGIN, POSIX_WINSYNC_PLUGIN_NAME,
+ "posix_winsync_config -- init Monitor failed\n");
+ }
+
+ slapi_config_register_callback(SLAPI_OPERATION_MODIFY, DSE_FLAG_POSTOP, config_dn,
+ LDAP_SCOPE_BASE, POSIX_WINSYNC_CONFIG_FILTER,
+ posix_winsync_apply_config, NULL);
+
+ rc = slapi_task_register_handler("memberuid task", posix_group_task_add);
+ if (rc) {
+ slapi_log_error(SLAPI_LOG_PLUGIN, POSIX_WINSYNC_PLUGIN_NAME,
+ "posix_winsync_config -- register memberuid task failed\n");
+ }
+ }
+
+ inited = 1;
+
+ if (returncode != LDAP_SUCCESS) {
+ slapi_log_error(SLAPI_LOG_FATAL, POSIX_WINSYNC_PLUGIN_NAME, "Error %d: %s\n", returncode,
+ returntext);
+ }
+
+ return returncode;
+}
+
+static int
+posix_winsync_apply_config(Slapi_PBlock *pb, Slapi_Entry* entryBefore, Slapi_Entry* e,
+ int *returncode, char *returntext, void *arg)
+{
+ PRBool mssfuSchema = PR_FALSE;
+ PRBool mapMemberUID = PR_TRUE;
+ PRBool createMemberOfTask = PR_FALSE;
+ PRBool lowercase = PR_FALSE;
+ Slapi_Attr *testattr = NULL;
+
+ *returncode = LDAP_UNWILLING_TO_PERFORM; /* be pessimistic */
+
+ /* get msfuSchema value */
+ if (!slapi_entry_attr_find(e, POSIX_WINSYNC_MSSFU_SCHEMA, &testattr) && (NULL != testattr)) {
+ mssfuSchema = slapi_entry_attr_get_bool(e, POSIX_WINSYNC_MSSFU_SCHEMA);
+ slapi_log_error(SLAPI_LOG_PLUGIN, POSIX_WINSYNC_PLUGIN_NAME,
+ "_apply_config: Config paramter %s: %d\n", POSIX_WINSYNC_MSSFU_SCHEMA,
+ mssfuSchema);
+ }
+
+ /* get memberUid value */
+ if (!slapi_entry_attr_find(e, POSIX_WINSYNC_MAP_MEMBERUID, &testattr) && (NULL != testattr)) {
+ mapMemberUID = slapi_entry_attr_get_bool(e, POSIX_WINSYNC_MAP_MEMBERUID);
+ slapi_log_error(SLAPI_LOG_PLUGIN, POSIX_WINSYNC_PLUGIN_NAME,
+ "_apply_config: Config paramter %s: %d\n", POSIX_WINSYNC_MAP_MEMBERUID,
+ mapMemberUID);
+ }
+ /* get create task value */
+ if (!slapi_entry_attr_find(e, POSIX_WINSYNC_CREATE_MEMBEROFTASK, &testattr) && (NULL
+ != testattr)) {
+ createMemberOfTask = slapi_entry_attr_get_bool(e, POSIX_WINSYNC_CREATE_MEMBEROFTASK);
+ slapi_log_error(SLAPI_LOG_PLUGIN, POSIX_WINSYNC_PLUGIN_NAME,
+ "_apply_config: Config paramter %s: %d\n",
+ POSIX_WINSYNC_CREATE_MEMBEROFTASK, createMemberOfTask);
+ }
+ /* get lower case UID in memberUID */
+ if (!slapi_entry_attr_find(e, POSIX_WINSYNC_LOWER_CASE, &testattr) && (NULL != testattr)) {
+ lowercase = slapi_entry_attr_get_bool(e, POSIX_WINSYNC_LOWER_CASE);
+ slapi_log_error(SLAPI_LOG_PLUGIN, POSIX_WINSYNC_PLUGIN_NAME,
+ "_apply_config: Config paramter %s: %d\n", POSIX_WINSYNC_LOWER_CASE,
+ lowercase);
+ }
+ /* if we got here, we have valid values for everything
+ set the config entry */
+ slapi_lock_mutex(theConfig.lock);
+ slapi_entry_free(theConfig.config_e);
+ theConfig.config_e = slapi_entry_alloc();
+ slapi_entry_init(theConfig.config_e, slapi_ch_strdup(""), NULL);
+
+ /* all of the attrs and vals have been set - set the other values */
+ theConfig.mssfuSchema = mssfuSchema;
+ theConfig.mapMemberUID = mapMemberUID;
+ theConfig.createMemberOfTask = createMemberOfTask;
+ theConfig.lowercase = lowercase;
+
+ /* success */
+ slapi_log_error(SLAPI_LOG_PLUGIN, POSIX_WINSYNC_PLUGIN_NAME,
+ "<-- _apply_config: config evaluated\n");
+ *returncode = LDAP_SUCCESS;
+
+ slapi_unlock_mutex(theConfig.lock);
+
+ if (*returncode != LDAP_SUCCESS) {
+ return SLAPI_DSE_CALLBACK_ERROR;
+ } else {
+ return SLAPI_DSE_CALLBACK_OK;
+ }
+}
+
diff --git a/ldap/servers/plugins/posix-winsync/posix-winsync.c b/ldap/servers/plugins/posix-winsync/posix-winsync.c
new file mode 100644
index 0000000..6eddc23
--- /dev/null
+++ b/ldap/servers/plugins/posix-winsync/posix-winsync.c
@@ -0,0 +1,1459 @@
+/** Author: Carsten Grzemba grzemba(a)contac-dt.de>
+ *
+ * Copyright (C) 2011 contac Datentechnik GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; version 2 only
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ $Id: posix-winsync.c 40 2011-06-10 08:28:56Z grzemba $
+ **/
+
+/*
+ * - AD needs for Posix attributes a NIS Domainname, this software expect a attribute nisDomain with the name in a upper container on DS side
+ * - currently the winsync API has no callbacks for new created entries on DS side
+
+ compile:
+ gcc -g -shared -m64 -fPIC -c -D WINSYNC_TEST_POSIX \
+ -I ../fedora-ds/ds/ldap/servers/slapd \
+ -I ../fedora-ds/ds/ldap/servers/plugins/replication \
+ -I /usr/include/mps posix-winsync.c
+ link:
+ ld -G posix-winsync.o -o libposix-winsync.so
+
+ configure DS with
+
+ dn: cn=Posix Winsync API,cn=plugins,cn=config
+ objectclass: top
+ objectclass: nsSlapdPlugin
+ objectclass: extensibleObject
+ cn: Posix Winsync API
+ nsslapd-pluginpath: libposix-winsync
+ nsslapd-plugininitfunc: posix_winsync_plugin_init
+ nsslapd-plugintype: preoperation
+ nsslapd-pluginenabled: on
+ nsslapd-plugin-depends-on-type: database
+ nsslapd-pluginDescription: Sync Posix Attributes for users and groups between AD and DS if available and user lock/unlock
+ nsslapd-pluginVendor: contac Datentechnik GmbH
+ nsslapd-pluginId: posix-winsync-plugin
+ nsslapd-pluginVersion: POSIX/1.0
+
+ AFTER that make new replication aggrements
+
+ for details see: Red_Hat_Directory_Server-8.2-Plug-in_Guide-en-US.pdf
+ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#ifdef WINSYNC_TEST_POSIX
+#include <slapi-plugin.h>
+#include "winsync-plugin.h"
+#else
+#include <dirsrv/slapi-plugin.h>
+#include <dirsrv/winsync-plugin.h>
+#endif
+#include <plstr.h>
+#include <strings.h>
+#include <stdlib.h>
+#include "posix-wsp-ident.h"
+#include "posix-group-func.h"
+
+#define MEMBEROFTASK "memberof task"
+Slapi_Value **
+valueset_get_valuearray(const Slapi_ValueSet *vs); /* stolen from proto-slap.h */
+void *
+posix_winsync_get_plugin_identity();
+void *
+posix_winsync_agmt_init(const Slapi_DN *ds_subtree, const Slapi_DN *ad_subtree);
+
+/**
+ * Plugin identifiers
+ */
+static Slapi_PluginDesc posix_winsync_pdesc =
+ { "posix-winsync-plugin", VENDOR, DS_PACKAGE_VERSION,
+ "Sync Posix Attributs for users and groups between AD and DS if available" };
+typedef struct _windows_attr_map
+{
+ char *windows_attribute_name;
+ char *ldap_attribute_name;
+} windows_attribute_map;
+
+static windows_attribute_map user_attribute_map[] = { { "unixHomeDirectory", "homeDirectory" },
+ { "loginShell", "loginShell" },
+ { "uidNumber", "uidNumber" },
+ { "gidNumber", "gidNumber" },
+ { "gecos", "gecos" },
+ { NULL, NULL } };
+
+static windows_attribute_map user_mssfu_attribute_map[] =
+ { { "msSFU30homedirectory", "homeDirectory" },
+ { "msSFU30loginshell", "loginShell" },
+ { "msSFU30uidnumber", "uidNumber" },
+ { "msSFU30gidnumber", "gidNumber" },
+ { "msSFU30gecos", "gecos" },
+ { NULL, NULL } };
+
+static windows_attribute_map group_attribute_map[] = { { "memberUid", "memberUid" },
+ { "gidNumber", "gidNumber" },
+ { NULL, NULL } };
+
+static windows_attribute_map group_mssfu_attribute_map[] = { { "msSFU30memberUid", "memberUid" },
+ { "msSFU30gidNumber", "gidNumber" },
+ { NULL, NULL } };
+
+static char *posix_winsync_plugin_name = POSIX_WINSYNC_PLUGIN_NAME;
+
+enum
+{
+ ACCT_DISABLE_INVALID, /* the invalid value */
+ ACCT_DISABLE_NONE, /* do not sync acct disable status */
+ ACCT_DISABLE_TO_AD, /* sync only from ds to ad */
+ ACCT_DISABLE_TO_DS, /* sync only from ad to ds */
+ ACCT_DISABLE_BOTH
+/* bi-directional sync */
+};
+
+/*
+ * Check if the given entry has account lock on (i.e. entry is disabled)
+ * Mostly copied from check_account_lock in the server code.
+ * Returns: 0 - account is disabled (lock == "true")
+ * 1 - account is enabled (lock == "false" or empty)
+ * -1 - some sort of error
+ */
+static int
+check_account_lock(Slapi_Entry *ds_entry, int *isvirt)
+{
+ int rc = 1;
+ Slapi_ValueSet *values = NULL;
+ int type_name_disposition = 0;
+ char *actual_type_name = NULL;
+ int attr_free_flags = 0;
+ char *strval;
+
+ /* first, see if the attribute is a "real" attribute */
+ strval = slapi_entry_attr_get_charptr(ds_entry, "nsAccountLock");
+ if (strval) { /* value is real */
+ *isvirt = 0; /* value is real */
+ rc = 1; /* default to enabled */
+ if (PL_strncasecmp(strval, "true", 4) == 0) {
+ rc = 0; /* account is disabled */
+ }
+ slapi_ch_free_string(&strval);
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
+ "<-- check_account_lock - entry [%s] has real "
+ "attribute nsAccountLock and entry %s locked\n",
+ slapi_entry_get_dn_const(ds_entry), rc ? "is not" : "is");
+ return rc;
+ }
+
+ rc = slapi_vattr_values_get(ds_entry, "nsAccountLock", &values, &type_name_disposition,
+ &actual_type_name, SLAPI_VIRTUALATTRS_REQUEST_POINTERS,
+ &attr_free_flags);
+ if (rc == 0) {
+ Slapi_Value *v = NULL;
+ const struct berval *bvp = NULL;
+
+ rc = 1; /* default is enabled */
+ *isvirt = 1; /* value is virtual */
+ if ((slapi_valueset_first_value(values, &v) != -1) &&
+ ((bvp = slapi_value_get_berval(v)) != NULL)) {
+ if ((bvp != NULL) && (PL_strncasecmp(bvp->bv_val, "true", 4) == 0)) {
+ slapi_vattr_values_free(&values, &actual_type_name, attr_free_flags);
+ rc = 0; /* account is disabled */
+ }
+ }
+
+ if (values != NULL) {
+ slapi_vattr_values_free(&values, &actual_type_name, attr_free_flags);
+ }
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
+ "<-- check_account_lock - entry [%s] has virtual "
+ "attribute nsAccountLock and entry %s locked\n",
+ slapi_entry_get_dn_const(ds_entry), rc ? "is not" : "is");
+ } else {
+ rc = 1; /* no attr == entry is enabled */
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
+ "<-- check_account_lock - entry [%s] does not "
+ "have attribute nsAccountLock - entry %s locked\n",
+ slapi_entry_get_dn_const(ds_entry), rc ? "is not" : "is");
+ }
+
+ return rc;
+}
+
+/*
+ * This can be used either in the to ad direction or the to ds direction, since in both
+ * cases we have to read both entries and compare the values.
+ * ad_entry - entry from AD
+ * ds_entry - entry from DS
+ * direction - either ACCT_DISABLE_TO_AD or ACCT_DISABLE_TO_DS
+ *
+ * If smods is given, this is the list of mods to send in the given direction. The
+ * appropriate modify operation will be added to this list or changed to the correct
+ * value if it already exists.
+ * Otherwise, if a destination entry is given, the value will be written into
+ * that entry.
+ */
+static void
+sync_acct_disable(void *cbdata, /* the usual domain config data */
+ const Slapi_Entry *ad_entry, /* the AD entry */
+ Slapi_Entry *ds_entry, /* the DS entry */
+ int direction, /* the direction - TO_AD or TO_DS */
+ Slapi_Entry *update_entry, /* the entry to update for ADDs */
+ Slapi_Mods *smods, /* the mod list for MODIFYs */
+ int *do_modify /* if not NULL, set this to true if mods were added */
+)
+{
+ int ds_is_enabled = 1; /* default to true */
+ int ad_is_enabled = 1; /* default to true */
+ unsigned long adval = 0; /* raw account val from ad entry */
+ int isvirt = 0;
+
+ /* get the account lock state of the ds entry */
+ if (0 == check_account_lock(ds_entry, &isvirt)) {
+ ds_is_enabled = 0;
+ }
+ if (isvirt)
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
+ "<-- sync_acct_disable - %s DS nsaccountlock is virtual!!!!\n",
+ slapi_entry_get_dn_const(ds_entry));
+ /* get the account lock state of the ad entry */
+ adval = slapi_entry_attr_get_ulong(ad_entry, "UserAccountControl");
+ if (adval & 0x2) {
+ /* account is disabled */
+ ad_is_enabled = 0;
+ }
+
+ if (ad_is_enabled == ds_is_enabled) { /* both have same value - nothing to do */
+ return;
+ }
+
+ /* have to enable or disable */
+ if (direction == ACCT_DISABLE_TO_AD) {
+ unsigned long mask;
+ /* set the mod or entry */
+ if (ds_is_enabled) {
+ mask = ~0x2;
+ adval &= mask; /* unset the 0x2 disable bit */
+ } else {
+ mask = 0x2;
+ adval |= mask; /* set the 0x2 disable bit */
+ }
+ if (update_entry) {
+ slapi_entry_attr_set_ulong(update_entry, "userAccountControl", adval);
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
+ "<-- sync_acct_disable - %s AD account [%s] - "
+ "new value is [%ld]\n", (ds_is_enabled) ? "enabled" : "disabled",
+ slapi_entry_get_dn_const(update_entry), adval);
+ } else {
+ /* iterate through the mods - if there is already a mod
+ for userAccountControl, change it - otherwise, add it */
+ char acctvalstr[32];
+ LDAPMod *mod = NULL;
+ struct berval *mod_bval = NULL;
+ for (mod = slapi_mods_get_first_mod(smods); mod; mod = slapi_mods_get_next_mod(smods)) {
+ if (!PL_strcasecmp(mod->mod_type, "userAccountControl") && mod->mod_bvalues
+ && mod->mod_bvalues[0]) {
+ mod_bval = mod->mod_bvalues[0];
+ /* mod_bval points directly to value inside mod list */
+ break;
+ }
+ }
+ if (!mod_bval) { /* not found - add it */
+ struct berval tmpbval = { 0, NULL };
+ Slapi_Mod *smod = slapi_mod_new();
+ slapi_mod_init(smod, 1); /* one element */
+ slapi_mod_set_type(smod, "userAccountControl");
+ slapi_mod_set_operation(smod, LDAP_MOD_REPLACE | LDAP_MOD_BVALUES);
+ slapi_mod_add_value(smod, &tmpbval);
+ /* add_value makes a copy of the bval - so let's get a pointer
+ to that new value - we will change the bval in place */
+ mod_bval = slapi_mod_get_first_value(smod);
+ /* mod_bval points directly to value inside mod list */
+ /* now add the new mod to smods */
+ slapi_mods_add_ldapmod(smods, slapi_mod_get_ldapmod_passout(smod));
+ /* smods now owns the ldapmod */
+ slapi_mod_free(&smod);
+ if (do_modify) {
+ *do_modify = 1; /* added mods */
+ }
+ }
+ if (mod_bval) {
+ /* this is where we set or update the actual value
+ mod_bval points directly into the mod list we are
+ sending */
+ if (mod_bval->bv_val && (mod_bval->bv_len > 0)) {
+ /* get the old val */
+ adval = strtol(mod_bval->bv_val, NULL, 10);
+ }
+ if (ds_is_enabled) {
+ mask = ~0x2;
+ adval &= mask; /* unset the 0x2 disable bit */
+ } else {
+ mask = 0x2;
+ adval |= mask; /* set the 0x2 disable bit */
+ }
+ PR_snprintf(acctvalstr, sizeof(acctvalstr), "%lu", adval);
+ slapi_ch_free_string(&mod_bval->bv_val);
+ mod_bval->bv_val = slapi_ch_strdup(acctvalstr);
+ mod_bval->bv_len = strlen(acctvalstr);
+ }
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
+ "<-- sync_acct_disable - %s AD account [%s] - "
+ "new value is [%ld]\n", (ds_is_enabled) ? "enabled" : "disabled",
+ slapi_entry_get_dn_const(ad_entry), adval);
+ }
+ }
+
+ if (direction == ACCT_DISABLE_TO_DS) {
+ char *attrtype = NULL;
+ char *attrval;
+ char *val = NULL;
+
+ attrtype = (isvirt) ? "nsRoleDN" : "nsAccountLock";
+ if (ad_is_enabled) {
+ attrval = NULL; /* will delete the value */
+ } else {
+ if (isvirt) {
+ val = slapi_create_dn_string("cn=nsManagedDisabledRole,%s",
+ slapi_sdn_get_dn(posix_winsync_config_get_suffix()));
+ attrval = val;
+ } else {
+ attrval = "true";
+ }
+ }
+
+ if (update_entry) {
+ slapi_entry_attr_set_charptr(update_entry, attrtype, attrval);
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
+ "<-- sync_acct_disable - %s DS account [%s]\n", (ad_is_enabled)
+ ? "enable" : "disable", slapi_entry_get_dn_const(ds_entry));
+ } else { /* do mod */
+ Slapi_Mod *smod = slapi_mod_new();
+
+ slapi_mod_init(smod, 1); /* one element */
+ slapi_mod_set_type(smod, attrtype);
+ if (attrval == NULL) {
+ slapi_mod_set_operation(smod, LDAP_MOD_DELETE | LDAP_MOD_BVALUES);
+ } else {
+ Slapi_Value *v = NULL;
+ v = slapi_value_new_string(attrval);
+ slapi_mod_set_operation(smod, LDAP_MOD_REPLACE | LDAP_MOD_BVALUES);
+ slapi_mod_add_value(smod, slapi_value_get_berval(v));
+ slapi_value_free(&v);
+ }
+ slapi_mods_add_ldapmod(smods, slapi_mod_get_ldapmod_passout(smod));
+ slapi_mod_free(&smod);
+
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
+ "<-- sync_acct_disable - %s DS account [%s]\n", (ad_is_enabled)
+ ? "enable" : "disable", slapi_entry_get_dn_const(ds_entry));
+ if (do_modify) {
+ *do_modify = 1; /* added mods */
+ }
+ }
+ slapi_ch_free_string(&val);
+ }
+ return;
+}
+
+/* Returns non-zero if the attribute value sets are identical. */
+static int
+attr_compare_equal(Slapi_Attr *a, Slapi_Attr *b)
+{
+ int i = 0;
+ Slapi_Value *va = NULL;
+
+ /* Iterate through values in attr a and search for each in attr b */
+ for (i = slapi_attr_first_value(a, &va); va && (i != -1); i = slapi_attr_next_value(a, i, &va)) {
+
+ /* Compare the entire attribute value */
+ if (slapi_attr_value_find(b, slapi_value_get_berval(va)) != 0) {
+ return 0;
+ }
+ }
+ return 1;
+}
+
+static int
+addNisDomainName(Slapi_Mod *smod, const Slapi_Entry *ds_entry)
+{
+ Slapi_Entry *entry = NULL;
+ char *type_NisDomain = "nisDomain";
+ Slapi_PBlock * pb;
+ int rc = -1;
+
+ char* nisdomainname = NULL;
+ Slapi_DN* entry_sdn = slapi_entry_get_sdn((Slapi_Entry *) ds_entry);
+ Slapi_DN* subtree_sdn = slapi_sdn_new();
+ Slapi_DN *childparent = slapi_sdn_new();
+ struct berval **vals;
+
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name, "addNisDomainName start DN:%s\n",
+ slapi_sdn_get_dn(entry_sdn));
+ slapi_sdn_get_parent(entry_sdn, subtree_sdn);
+ pb = slapi_pblock_new();
+ do {
+ Slapi_Attr *attr = NULL;
+ char *nisDomainAttr[] = { type_NisDomain, NULL };
+
+ slapi_sdn_get_parent(subtree_sdn, childparent);
+ if (slapi_sdn_isempty(childparent)) {
+ rc = -1;
+ break;
+ }
+ rc = slapi_search_internal_get_entry(childparent, nisDomainAttr, &entry,
+ posix_winsync_get_plugin_identity());
+ if (rc == 0) {
+ if (rc == 0 && entry) {
+ rc = slapi_entry_attr_find(entry, type_NisDomain, &attr);
+ if (attr) {
+ rc = slapi_attr_get_bervals_copy(attr, &vals);
+ break;
+ } else {
+ rc = LDAP_NO_SUCH_ATTRIBUTE;
+ }
+ }
+ }
+ slapi_sdn_copy(childparent, subtree_sdn);
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
+ "addNisDomainName iterate DN:%s\n", slapi_sdn_get_dn(subtree_sdn));
+ slapi_entry_free(entry);
+ entry = NULL;
+ } while (PR_TRUE);
+ slapi_pblock_destroy(pb);
+ if (rc != 0) {
+ slapi_log_error(SLAPI_LOG_REPL, posix_winsync_plugin_name,
+ "addNisDomainName: no nisdomainname found in %s, LDAP Err%d\n",
+ slapi_sdn_get_dn(subtree_sdn), rc);
+ } else {
+ slapi_mod_init(smod, 1);
+ slapi_mod_set_type(smod, "msSFU30NisDomain");
+ slapi_mod_set_operation(smod, LDAP_MOD_REPLACE | LDAP_MOD_BVALUES);
+ slapi_mod_add_value(smod, vals[0]);
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
+ "addNisDomainName NisDomain %s found in DN:%s\n", vals[0]->bv_val,
+ slapi_sdn_get_dn(childparent));
+ if (slapi_is_loglevel_set(SLAPI_LOG_PLUGIN))
+ slapi_mod_dump((LDAPMod*) slapi_mod_get_ldapmod_byref(smod), 0);
+ ber_bvecfree(vals);
+
+ }
+ slapi_sdn_free(&childparent);
+ slapi_entry_free(entry);
+ entry = NULL;
+ slapi_sdn_free(&subtree_sdn);
+
+ slapi_ch_free_string(&nisdomainname);
+ return rc;
+}
+
+static void
+posix_winsync_dirsync_search_params_cb(void *cbdata, const char *agmt_dn, char **base, int *scope,
+ char **filter, char ***attrs, LDAPControl ***serverctrls)
+{
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
+ "--> posix_winsync_dirsync_search_params_cb -- begin\n");
+
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
+ "<-- posix_winsync_dirsync_search_params_cb -- end\n");
+
+ return;
+}
+
+/* called before searching for a single entry from AD - agmt_dn will be NULL */
+static void
+posix_winsync_pre_ad_search_cb(void *cbdata, const char *agmt_dn, char **base, int *scope,
+ char **filter, char ***attrs, LDAPControl ***serverctrls)
+{
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
+ "--> posix_winsync_pre_ad_search_cb -- begin\n");
+
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
+ "<-- posix_winsync_pre_ad_search_cb -- end\n");
+
+ return;
+}
+
+/* called before an internal search to get a single DS entry - agmt_dn will be NULL */
+static void
+posix_winsync_pre_ds_search_entry_cb(void *cbdata, const char *agmt_dn, char **base, int *scope,
+ char **filter, char ***attrs, LDAPControl ***serverctrls)
+{
+ /*
+ char *tmpbase=slapi_ch_strdup(*base);
+ char *d = *base;
+ char *s = tmpbase;
+ int i=0;
+ */
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name, "--> _pre_ds_search_cb -- begin\n");
+ /* skip the first subtree container ou=xyz, */
+ /* if (strlen(*base) > 3) {
+ s++;
+ while(*s !='\0'){
+ if (((*(s) == ',') || (*(s) == ';' )) && (*((s)-1) != '\\')){
+ s++;
+ while(*s !='\0'){
+ *d++ = *s++;
+ }
+ *d='\0';
+ break;
+ }
+ s++;
+ }
+ }
+ */
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
+ "-- _pre_ds_search_cb - base [%s] "
+ "scope [%d] filter [%s]\n", *base, *scope, *filter);
+ /* slapi_ch_free_string(&tmpbase); */
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name, "<-- _pre_ds_search_cb -- end\n");
+ return;
+}
+
+/* called before the total update to get all entries from the DS to sync to AD */
+static void
+posix_winsync_pre_ds_search_all_cb(void *cbdata, const char *agmt_dn, char **base, int *scope,
+ char **filter, char ***attrs, LDAPControl ***serverctrls)
+{
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
+ "--> posix_winsync_pre_ds_search_all_cb -- orig filter [%s] -- begin\n",
+ ((filter && *filter) ? *filter : "NULL"));
+
+ /* slapi_ch_free_string(filter);
+ *filter = slapi_ch_strdup("(|(objectclass=posixaccount)(objectclass=posixgroup))");
+ */
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
+ "<-- posix_winsync_pre_ds_search_all_cb -- end\n");
+
+ return;
+}
+
+static void
+posix_winsync_pre_ad_mod_user_cb(void *cbdata, const Slapi_Entry *rawentry, Slapi_Entry *ad_entry,
+ Slapi_Entry *ds_entry, Slapi_Mods *smods, int *do_modify)
+{
+ LDAPMod *mod = NULL;
+ int rc = 0;
+ Slapi_Attr *attr = NULL;
+ windows_attribute_map *attr_map = user_attribute_map;
+
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
+ "--> posix_winsync_pre_ad_mod_user_cb -- begin DS account [%s]\n",
+ slapi_entry_get_dn_const(ds_entry));
+ if (posix_winsync_config_get_msSFUSchema()) {
+ attr_map = user_mssfu_attribute_map;
+ }
+
+ /* called if init Replica: add nisDomain, uidnumber, ... if avail */
+ for (rc = slapi_entry_first_attr(ds_entry, &attr); rc == 0;
+ rc = slapi_entry_next_attr(ds_entry, attr, &attr)) {
+ char *type = NULL;
+
+ size_t i = 0;
+
+ slapi_attr_get_type(attr, &type);
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
+ "_pre_ad_mod_user_cb -- check modify type %s\n", type);
+ while (attr_map[i].windows_attribute_name != NULL) {
+ if (0 == slapi_attr_type_cmp(type, attr_map[i].ldap_attribute_name,
+ SLAPI_TYPE_CMP_SUBTYPE)) {
+ Slapi_Attr *ad_attr = NULL;
+ Slapi_ValueSet *vs = NULL;
+ char *ad_type = NULL;
+ int is_present_local;
+
+ slapi_attr_get_valueset(attr, &vs);
+ ad_type = slapi_ch_strdup(attr_map[i].windows_attribute_name);
+ slapi_entry_attr_find(ad_entry, ad_type, &ad_attr);
+ is_present_local = (NULL == ad_attr) ? 0 : 1;
+ if (is_present_local) {
+ int values_equal = 0;
+ values_equal = attr_compare_equal(attr, ad_attr);
+ if (!values_equal) {
+ slapi_log_error(
+ SLAPI_LOG_PLUGIN,
+ posix_winsync_plugin_name,
+ "_pre_ad_mod_user_cb -- update mods: %s, %s : values are different -> modify\n",
+ slapi_sdn_get_dn(slapi_entry_get_sdn_const(ds_entry)),
+ ad_type);
+
+ slapi_mods_add_mod_values(smods, LDAP_MOD_REPLACE, ad_type,
+ valueset_get_valuearray(vs));
+ *do_modify = 1;
+ }
+ } else {
+ slapi_mods_add_mod_values(smods, LDAP_MOD_ADD, ad_type,
+ valueset_get_valuearray(vs));
+ if (0 == slapi_attr_type_cmp(type, "uidNumber", SLAPI_TYPE_CMP_SUBTYPE)) {
+ Slapi_Mod *mysmod = slapi_mod_new();
+ addNisDomainName(mysmod, ds_entry);
+ slapi_mods_add_ldapmod(smods, slapi_mod_get_ldapmod_passout(mysmod));
+ slapi_mod_free(&mysmod);
+ }
+ *do_modify = 1;
+ }
+ slapi_ch_free((void**) &ad_type);
+ slapi_valueset_free(vs);
+
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
+ "_pre_ad_mod_user_cb -- add modify %s DS account [%s]\n",
+ attr_map[i].windows_attribute_name,
+ slapi_entry_get_dn_const(ds_entry));
+
+ }
+ i++;
+ }
+ if (0 == slapi_attr_type_cmp(type, "nsAccountLock", SLAPI_TYPE_CMP_SUBTYPE))
+ sync_acct_disable(cbdata, rawentry, ds_entry, ACCT_DISABLE_TO_AD, NULL, smods,
+ do_modify);
+ }
+ if (slapi_is_loglevel_set(SLAPI_LOG_PLUGIN)) {
+ for (mod = slapi_mods_get_first_mod(smods); mod; mod = slapi_mods_get_next_mod(smods)) {
+ slapi_mod_dump(mod, 0);
+ }
+ }
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
+ "<-- posix_winsync_pre_ad_mod_user_cb -- end\n");
+
+ return;
+}
+
+static void
+posix_winsync_pre_ad_mod_group_cb(void *cbdata, const Slapi_Entry *rawentry, Slapi_Entry *ad_entry,
+ Slapi_Entry *ds_entry, Slapi_Mods *smods, int *do_modify)
+{
+ LDAPMod *mod = NULL;
+ int rc = 0;
+ Slapi_Attr *attr = NULL;
+ windows_attribute_map *attr_map = group_attribute_map;
+
+ if (posix_winsync_config_get_msSFUSchema())
+ attr_map = group_mssfu_attribute_map;
+
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
+ "--> _pre_ad_mod_group_cb -- begin DS account [%s]\n",
+ slapi_entry_get_dn_const(ds_entry));
+
+ /* called if init Replica: add nisDomain, gidnumber, memberuid, if avail */
+ for (rc = slapi_entry_first_attr(ds_entry, &attr); rc == 0;
+ rc = slapi_entry_next_attr(ds_entry, attr, &attr)) {
+ char *type = NULL;
+ size_t i = 0;
+
+ slapi_attr_get_type(attr, &type);
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
+ "_pre_ad_mod_group_cb -- check modify type %s\n", type);
+ while (attr_map[i].windows_attribute_name != NULL) {
+ if (0 == slapi_attr_type_cmp(type, attr_map[i].ldap_attribute_name,
+ SLAPI_TYPE_CMP_SUBTYPE)) {
+ Slapi_Attr *ad_attr = NULL;
+ Slapi_ValueSet *vs = NULL;
+ char *ad_type = NULL;
+ int is_present_local;
+
+ slapi_attr_get_valueset(attr, &vs);
+ ad_type = slapi_ch_strdup(attr_map[i].windows_attribute_name);
+ slapi_entry_attr_find(ad_entry, ad_type, &ad_attr);
+ is_present_local = (NULL == ad_attr) ? 0 : 1;
+ if (is_present_local) {
+ int values_equal = 0;
+ values_equal = attr_compare_equal(attr, ad_attr);
+ if (!values_equal) {
+ slapi_log_error(
+ SLAPI_LOG_PLUGIN,
+ posix_winsync_plugin_name,
+ "_pre_ad_mod_group_cb -- update mods: %s, %s : values are different -> modify\n",
+ slapi_sdn_get_dn(slapi_entry_get_sdn_const(ds_entry)),
+ ad_type);
+
+ slapi_mods_add_mod_values(smods, LDAP_MOD_REPLACE, ad_type,
+ valueset_get_valuearray(vs));
+ *do_modify = 1;
+ }
+ } else {
+
+ slapi_mods_add_mod_values(smods, LDAP_MOD_ADD, ad_type,
+ valueset_get_valuearray(vs));
+ if (0 == slapi_attr_type_cmp(type, "gidNumber", SLAPI_TYPE_CMP_SUBTYPE)) {
+ Slapi_Mod *mysmod = slapi_mod_new();
+ addNisDomainName(mysmod, ds_entry);
+ slapi_mods_add_ldapmod(smods, slapi_mod_get_ldapmod_passout(mysmod));
+ slapi_mod_free(&mysmod);
+ }
+ *do_modify = 1;
+ }
+ slapi_ch_free((void**) &ad_type);
+ slapi_valueset_free(vs);
+
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
+ "_pre_ad_mod_group_cb -- add modify %s DS account [%s]\n",
+ attr_map[i].windows_attribute_name,
+ slapi_entry_get_dn_const(ds_entry));
+ }
+ i++;
+ }
+ }
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name, "_pre_ad_mod_group_cb -- step\n");
+ if (slapi_is_loglevel_set(SLAPI_LOG_PLUGIN)) {
+ for (mod = slapi_mods_get_first_mod(smods); mod; mod = slapi_mods_get_next_mod(smods)) {
+ slapi_mod_dump(mod, 0);
+ }
+ }
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
+ "<-- _pre_ad_mod_group_cb -- end\n");
+
+ return;
+}
+
+static void
+posix_winsync_pre_ds_mod_user_cb(void *cbdata, const Slapi_Entry *rawentry, Slapi_Entry *ad_entry,
+ Slapi_Entry *ds_entry, Slapi_Mods *smods, int *do_modify)
+{
+ LDAPMod* mod = NULL;
+ Slapi_Attr *attr = NULL;
+ int is_present_local = 0;
+ int do_modify_local = 0;
+ int rc;
+ windows_attribute_map *attr_map = user_attribute_map;
+
+ if (posix_winsync_config_get_msSFUSchema())
+ attr_map = user_mssfu_attribute_map;
+
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
+ "--> _pre_ds_mod_user_cb -- begin\n");
+
+ /* add objectclass: posixAccount, uidnumber ,gidnumber ,homeDirectory, loginshell */
+ /* in the ad to ds case we have no changelog, so we have to compare the entries */
+ for (rc = slapi_entry_first_attr(ad_entry, &attr); rc == 0;
+ rc = slapi_entry_next_attr(ad_entry, attr, &attr)) {
+ char *type = NULL;
+ size_t i = 0;
+
+ slapi_attr_get_type(attr, &type);
+ while (attr_map[i].windows_attribute_name != NULL) {
+ if (0 == slapi_attr_type_cmp(type, attr_map[i].windows_attribute_name,
+ SLAPI_TYPE_CMP_SUBTYPE)) {
+ Slapi_Attr *local_attr = NULL;
+ char *local_type = NULL;
+ Slapi_ValueSet *vs = NULL;
+
+ slapi_attr_get_valueset(attr, &vs);
+ local_type = slapi_ch_strdup(attr_map[i].ldap_attribute_name);
+ slapi_entry_attr_find(ds_entry, local_type, &local_attr);
+ is_present_local = (NULL == local_attr) ? 0 : 1;
+ if (is_present_local) {
+ int values_equal = 0;
+ values_equal = attr_compare_equal(attr, local_attr);
+ if (!values_equal) {
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
+ "_pre_ds_mod_user_cb -- update mods: %s, %s : values are different -> modify\n",
+ slapi_sdn_get_dn(slapi_entry_get_sdn_const(ds_entry)),
+ local_type);
+
+ slapi_mods_add_mod_values(smods, LDAP_MOD_REPLACE, local_type,
+ valueset_get_valuearray(vs));
+ *do_modify = 1;
+ }
+ } else {
+
+ slapi_mods_add_mod_values(smods, LDAP_MOD_ADD, local_type,
+ valueset_get_valuearray(vs));
+ *do_modify = do_modify_local = 1;
+ }
+ slapi_valueset_free(vs);
+ slapi_ch_free((void**) &local_type);
+ /* what about if delete all values on windows ????? */
+ }
+ i++;
+ }
+ }
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
+ "<-- _pre_ds_mod_user_cb present %d modify %d\n", is_present_local,
+ do_modify_local);
+
+ if (!is_present_local && do_modify_local) {
+ Slapi_Attr *oc_attr = NULL;
+ Slapi_Value *voc = slapi_value_new();
+
+ slapi_value_init_string(voc, "posixAccount");
+ rc = slapi_entry_attr_find(ds_entry, "objectClass", &oc_attr);
+ if (rc == 0) {
+ const struct berval *bv = slapi_value_get_berval(voc);
+ if (bv && slapi_attr_value_find(oc_attr, bv) != 0) {
+ Slapi_ValueSet *oc_vs = slapi_valueset_new();
+ Slapi_Value *oc_nv = slapi_value_new();
+
+ slapi_attr_get_valueset(oc_attr, &oc_vs);
+ slapi_value_init_string(oc_nv, "posixAccount");
+ slapi_valueset_add_value(oc_vs, oc_nv);
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
+ "<-- _pre_ds_mod_user_cb add oc:posixAccount\n");
+
+ slapi_value_init_string(voc, "shadowAccount");
+ if (slapi_attr_value_find(oc_attr, slapi_value_get_berval(voc)) != 0) {
+ Slapi_Value *oc_nv = slapi_value_new();
+
+ slapi_value_init_string(oc_nv, "shadowAccount");
+ slapi_valueset_add_value(oc_vs, oc_nv);
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
+ "<-- _pre_ds_mod_user_cb add oc:shadowAccount\n");
+ }
+ slapi_mods_add_mod_values(smods, LDAP_MOD_REPLACE, "objectClass",
+ valueset_get_valuearray(oc_vs));
+ slapi_value_free(&oc_nv);
+ slapi_valueset_free(oc_vs);
+ }
+ }
+ slapi_value_free(&voc);
+ }
+ sync_acct_disable(cbdata, rawentry, ds_entry, ACCT_DISABLE_TO_DS, NULL, smods, do_modify);
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name, "<-- _pre_ds_mod_user_cb %s %s\n",
+ slapi_sdn_get_dn(slapi_entry_get_sdn_const(ds_entry)), (do_modify) ? "modified"
+ : "not modified");
+
+ if (slapi_is_loglevel_set(SLAPI_LOG_PLUGIN)) {
+ for (mod = slapi_mods_get_first_mod(smods); mod; mod = slapi_mods_get_next_mod(smods)) {
+ slapi_mod_dump(mod, 0);
+ }
+ }
+
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name, "<-- _pre_ds_mod_user_cb -- end\n");
+
+ return;
+}
+
+static void
+posix_winsync_pre_ds_mod_group_cb(void *cbdata, const Slapi_Entry *rawentry, Slapi_Entry *ad_entry,
+ Slapi_Entry *ds_entry, Slapi_Mods *smods, int *do_modify)
+{
+ LDAPMod* mod = NULL;
+ Slapi_Attr *attr = NULL;
+ int is_present_local = 0;
+ int do_modify_local = 0;
+ int rc;
+ windows_attribute_map *attr_map = group_attribute_map;
+
+ if (posix_winsync_config_get_msSFUSchema())
+ attr_map = group_mssfu_attribute_map;
+
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
+ "--> _pre_ds_mod_group_cb -- begin\n");
+ /* in the ad to ds case we have no changelog, so we have to compare the entries */
+ for (rc = slapi_entry_first_attr(ad_entry, &attr); rc == 0; rc
+ = slapi_entry_next_attr(ad_entry, attr, &attr)) {
+ char *type = NULL;
+ Slapi_ValueSet *vs = NULL;
+ size_t i = 0;
+
+ slapi_attr_get_type(attr, &type);
+ while (attr_map[i].windows_attribute_name != NULL) {
+ if (0 == slapi_attr_type_cmp(type, attr_map[i].windows_attribute_name,
+ SLAPI_TYPE_CMP_SUBTYPE)) {
+ Slapi_Attr *local_attr = NULL;
+ char *local_type = NULL;
+
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name, "1.\n");
+ slapi_attr_get_valueset(attr, &vs);
+ local_type = slapi_ch_strdup(attr_map[i].ldap_attribute_name);
+ slapi_entry_attr_find(ds_entry, local_type, &local_attr);
+ is_present_local = (NULL == local_attr) ? 0 : 1;
+ if (is_present_local) {
+ int values_equal = 0;
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name, "2.\n");
+ values_equal = attr_compare_equal(attr, local_attr);
+ if (!values_equal) {
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
+ "_pre_ds_mod_group_cb -- update mods: %s, %s : values are different -> modify\n",
+ slapi_sdn_get_dn(slapi_entry_get_sdn_const(ds_entry)),
+ local_type);
+
+ slapi_mods_add_mod_values(smods, LDAP_MOD_REPLACE, local_type,
+ valueset_get_valuearray(vs));
+ *do_modify = 1;
+ }
+ } else {
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name, "3.\n");
+
+ slapi_mods_add_mod_values(smods, LDAP_MOD_ADD, local_type,
+ valueset_get_valuearray(vs));
+ *do_modify = do_modify_local = 1;
+ }
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name, "4.\n");
+
+ slapi_ch_free((void**) &local_type);
+ slapi_valueset_free(vs);
+ /* what about if delete all values on windows ???? */
+ }
+ i++;
+ }
+ }
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
+ "_pre_ds_mod_group_cb present %d modify %d before\n", is_present_local,
+ do_modify_local);
+ if (posix_winsync_config_get_mapMemberUid()) {
+ memberUidLock();
+ modGroupMembership(ds_entry, smods, do_modify);
+ memberUidUnlock();
+ }
+
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
+ "_pre_ds_mod_group_cb present %d modify %d\n", is_present_local,
+ do_modify_local);
+
+ if (!is_present_local && do_modify_local) {
+ Slapi_Attr *oc_attr = NULL;
+ Slapi_Value *voc = slapi_value_new();
+
+ slapi_value_init_string(voc, "posixGroup");
+ slapi_entry_attr_find(ds_entry, "objectClass", &oc_attr);
+ if (slapi_attr_value_find(oc_attr, slapi_value_get_berval(voc)) != 0) {
+ Slapi_ValueSet *oc_vs = slapi_valueset_new();
+ Slapi_Value *oc_nv = slapi_value_new();
+
+ slapi_attr_get_valueset(oc_attr, &oc_vs);
+ slapi_value_init_string(oc_nv, "posixGroup");
+ slapi_valueset_add_value(oc_vs, oc_nv);
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
+ "_pre_ds_mod_group_cb add oc:posixGroup\n");
+ slapi_mods_add_mod_values(smods, LDAP_MOD_REPLACE, "objectClass",
+ valueset_get_valuearray(oc_vs));
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
+ "_pre_ds_mod_group_cb step\n");
+ slapi_value_free(&oc_nv);
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
+ "_pre_ds_mod_group_cb step\n");
+ /* slapi_valuset_free(oc_vs); */
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
+ "_pre_ds_mod_group_cb step\n");
+ }
+ slapi_value_free(&voc);
+ }
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name, "_pre_ds_mod_group_cb step\n");
+
+ if (slapi_is_loglevel_set(SLAPI_LOG_PLUGIN)) {
+ for (mod = slapi_mods_get_first_mod(smods); mod; mod = slapi_mods_get_next_mod(smods)) {
+ slapi_mod_dump(mod, 0);
+ }
+ }
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
+ "<-- _pre_ds_mod_group_cb -- end\n");
+
+ return;
+}
+
+static void
+posix_winsync_pre_ds_add_user_cb(void *cbdata, const Slapi_Entry *rawentry, Slapi_Entry *ad_entry,
+ Slapi_Entry *ds_entry)
+{
+ Slapi_Attr *attr = NULL;
+ char *type = NULL;
+ PRBool posixval = PR_FALSE;
+ windows_attribute_map *attr_map = user_attribute_map;
+
+ if (posix_winsync_config_get_msSFUSchema())
+ attr_map = user_mssfu_attribute_map;
+
+ /* add objectclass: posixAccount, uidnumber, gidnumber, homeDirectory, loginShell */
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
+ "--> _pre_ds_add_user_cb -- begin\n");
+
+ for (slapi_entry_first_attr(ad_entry, &attr); attr; slapi_entry_next_attr(ad_entry, attr, &attr)) {
+ size_t i = 0;
+
+ slapi_attr_get_type(attr, &type);
+ if (!type) {
+ continue;
+ }
+
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name, "--> _pre_ds_add_user_cb -- "
+ "look for [%s] to new entry [%s]\n", type, slapi_entry_get_dn_const(ds_entry));
+ while (attr_map[i].windows_attribute_name != NULL) {
+ if (slapi_attr_type_cmp(attr_map[i].windows_attribute_name, type,
+ SLAPI_TYPE_CMP_SUBTYPE) == 0) {
+ Slapi_ValueSet *svs = NULL;
+ slapi_attr_get_valueset(attr, &svs);
+ slapi_entry_add_valueset(ds_entry, attr_map[i].ldap_attribute_name, svs);
+ slapi_valueset_free(svs);
+
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
+ "--> _pre_ds_add_user_cb -- "
+ "adding val for [%s] to new entry [%s]\n", type,
+ slapi_entry_get_dn_const(ds_entry));
+ posixval = PR_TRUE;
+ }
+ i++;
+ }
+ }
+ if (posixval) {
+ int rc;
+ rc = slapi_entry_add_string(ds_entry, "objectClass", "posixAccount");
+ rc |= slapi_entry_add_string(ds_entry, "objectClass", "shadowAccount");
+ rc |= slapi_entry_add_string(ds_entry, "objectClass", "inetUser");
+ if (rc != 0)
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
+ "<-- _pre_ds_add_user_cb -- adding objectclass for new entry failed %d\n",
+ rc);
+ }
+ sync_acct_disable(cbdata, rawentry, ds_entry, ACCT_DISABLE_TO_DS, ds_entry, NULL, NULL);
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name, "<-- _pre_ds_add_user_cb -- end\n");
+
+ return;
+}
+
+static void
+posix_winsync_pre_ds_add_group_cb(void *cbdata, const Slapi_Entry *rawentry, Slapi_Entry *ad_entry,
+ Slapi_Entry *ds_entry)
+{
+ Slapi_Attr *attr = NULL;
+ char *type = NULL;
+ PRBool posixval = PR_FALSE;
+ windows_attribute_map *attr_map = group_attribute_map;
+
+ if (posix_winsync_config_get_msSFUSchema())
+ attr_map = group_mssfu_attribute_map;
+
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
+ "--> posix_winsync_pre_ds_add_group_cb -- begin\n");
+
+ for (slapi_entry_first_attr(ad_entry, &attr); attr; slapi_entry_next_attr(ad_entry, attr, &attr)) {
+ size_t i = 0;
+
+ slapi_attr_get_type(attr, &type);
+ if (!type) {
+ continue;
+ }
+
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name, "--> _pre_ds_add_group_cb -- "
+ "look for [%s] to new entry [%s]\n", type, slapi_entry_get_dn_const(ds_entry));
+ while (attr_map[i].windows_attribute_name != NULL) {
+ if (slapi_attr_type_cmp(attr_map[i].windows_attribute_name, type,
+ SLAPI_TYPE_CMP_SUBTYPE) == 0) {
+ Slapi_ValueSet *svs = NULL;
+ slapi_attr_get_valueset(attr, &svs);
+ slapi_entry_add_valueset(ds_entry, attr_map[i].ldap_attribute_name, svs);
+ slapi_valueset_free(svs);
+
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
+ "--> _pre_ds_add_group_cb -- "
+ "adding val for [%s] to new entry [%s]\n", type,
+ slapi_entry_get_dn_const(ds_entry));
+ posixval = PR_TRUE;
+ }
+ i++;
+ }
+ }
+ if (posixval) {
+ int rc;
+ rc = slapi_entry_add_string(ds_entry, "objectClass", "posixGroup");
+ if (rc != 0) {
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
+ "<-- _pre_ds_add_group_cb -- adding objectclass for new entry failed %d\n",
+ rc);
+ } else {
+ if (posix_winsync_config_get_mapMemberUid()) {
+ memberUidLock();
+ addGroupMembership(ds_entry, ad_entry);
+ memberUidUnlock();
+ }
+ }
+ }
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
+ "<-- posix_winsync_pre_ds_add_group_cb -- end\n");
+
+ return;
+}
+
+static void
+posix_winsync_get_new_ds_user_dn_cb(void *cbdata, const Slapi_Entry *rawentry,
+ Slapi_Entry *ad_entry, char **new_dn_string, const Slapi_DN *ds_suffix,
+ const Slapi_DN *ad_suffix)
+{
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
+ "--> posix_winsync_get_new_ds_user_dn_cb -- old dn [%s] -- begin\n",
+ *new_dn_string);
+
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
+ "<-- posix_winsync_get_new_ds_user_dn_cb -- new dn [%s] -- end\n",
+ *new_dn_string);
+
+ return;
+}
+
+static void
+posix_winsync_get_new_ds_group_dn_cb(void *cbdata, const Slapi_Entry *rawentry,
+ Slapi_Entry *ad_entry, char **new_dn_string, const Slapi_DN *ds_suffix,
+ const Slapi_DN *ad_suffix)
+{
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
+ "--> posix_winsync_get_new_ds_group_dn_cb -- begin\n");
+
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
+ "<-- posix_winsync_get_new_ds_group_dn_cb -- end\n");
+
+ return;
+}
+
+static void
+posix_winsync_pre_ad_mod_user_mods_cb(void *cbdata, const Slapi_Entry *rawentry,
+ const Slapi_DN *local_dn, const Slapi_Entry *ds_entry, LDAPMod * const *origmods,
+ Slapi_DN *remote_dn, LDAPMod ***modstosend)
+{
+ Slapi_Mods *smods = slapi_mods_new();
+ Slapi_Mods *new_smods = slapi_mods_new();
+ LDAPMod *mod = NULL;
+ windows_attribute_map *attr_map = user_attribute_map;
+
+ if (posix_winsync_config_get_msSFUSchema())
+ attr_map = user_mssfu_attribute_map;
+
+ /* mod if changed objectclass: posixAccount, uidnumber, gidnumber, homeDirectory, loginShell */
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
+ "--> _pre_ad_mod_user_mods_cb -- begin DS account [%s] \n",
+ slapi_entry_get_dn_const(ds_entry));
+
+ /* wrap the modstosend in a Slapi_Mods for convenience */
+ slapi_mods_init_passin(new_smods, *modstosend);
+ slapi_mods_init_byref(smods, (LDAPMod**) origmods);
+
+ for (mod = slapi_mods_get_first_mod(smods); mod; mod = slapi_mods_get_next_mod(smods)) {
+ size_t i = 0;
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
+ "_pre_ad_mod_user_mods_cb -- check modify type %s\n", mod->mod_type);
+ while (attr_map[i].windows_attribute_name != NULL) {
+ if (0 == slapi_attr_type_cmp(mod->mod_type, attr_map[i].ldap_attribute_name,
+ SLAPI_TYPE_CMP_SUBTYPE)) {
+ Slapi_Mod *mysmod = slapi_mod_new();
+ slapi_mod_init_byval(mysmod, mod);
+ slapi_mod_set_type(mysmod, attr_map[i].windows_attribute_name);
+ slapi_mods_add_ldapmod(new_smods, slapi_mod_get_ldapmod_passout(mysmod));
+ slapi_mod_free(&mysmod);
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
+ "_pre_ad_mod_user_mods_cb -- add modify %s DS account [%s]\n",
+ attr_map[i].windows_attribute_name,
+ slapi_entry_get_dn_const(ds_entry));
+ if (0 == slapi_attr_type_cmp(mod->mod_type, "uidNumber", SLAPI_TYPE_CMP_SUBTYPE)) {
+ Slapi_Mod *ocsmod = slapi_mod_new();
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
+ "_pre_ad_mod_user_mods_cb -- add NisDomain\n");
+ addNisDomainName(ocsmod, ds_entry);
+ slapi_mods_add_ldapmod(new_smods, slapi_mod_get_ldapmod_passout(ocsmod));
+ slapi_mod_free(&ocsmod);
+ }
+ }
+ i++;
+ }
+ if (0 == slapi_attr_type_cmp(mod->mod_type, "nsRoleDN", SLAPI_TYPE_CMP_SUBTYPE)) {
+ int dummy = 0;
+ sync_acct_disable(cbdata, rawentry, (Slapi_Entry *) ds_entry, ACCT_DISABLE_TO_AD, NULL,
+ new_smods, &dummy);
+ }
+ }
+ if (slapi_is_loglevel_set(SLAPI_LOG_PLUGIN)) {
+ for (mod = slapi_mods_get_first_mod(new_smods); mod; mod
+ = slapi_mods_get_next_mod(new_smods)) {
+ slapi_mod_dump(mod, 0);
+ }
+ }
+ *modstosend = slapi_mods_get_ldapmods_passout(new_smods);
+
+ slapi_mods_free(&smods);
+ slapi_mods_free(&new_smods);
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
+ "<-- _pre_ad_mod_user_mods_cb -- end\n");
+
+ return;
+}
+
+static void
+posix_winsync_pre_ad_mod_group_mods_cb(void *cbdata, const Slapi_Entry *rawentry,
+ const Slapi_DN *local_dn, const Slapi_Entry *ds_entry, LDAPMod * const *origmods,
+ Slapi_DN *remote_dn, LDAPMod ***modstosend)
+{
+ Slapi_Mods *smods = slapi_mods_new();
+ Slapi_Mods *new_smods = slapi_mods_new();
+ LDAPMod *mod = NULL;
+ windows_attribute_map *attr_map = group_attribute_map;
+
+ if (posix_winsync_config_get_msSFUSchema())
+ attr_map = group_mssfu_attribute_map;
+
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
+ "--> _pre_ad_mod_group_mods_cb -- begin\n");
+ /* wrap the modstosend in a Slapi_Mods for convenience */
+ slapi_mods_init_passin(new_smods, *modstosend);
+ slapi_mods_init_byref(smods, (LDAPMod**) origmods);
+
+ for (mod = slapi_mods_get_first_mod(smods); mod; mod = slapi_mods_get_next_mod(smods)) {
+ size_t i = 0;
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
+ "_pre_ad_mod_group_mods_cb -- check modify type %s\n", mod->mod_type);
+ while (attr_map[i].windows_attribute_name != NULL) {
+ if (0 == slapi_attr_type_cmp(mod->mod_type, attr_map[i].ldap_attribute_name,
+ SLAPI_TYPE_CMP_SUBTYPE)) {
+ Slapi_Mod *mysmod = slapi_mod_new();
+ if (mod->mod_op & LDAP_MOD_DELETE) {
+ slapi_mod_init(mysmod, 0);
+ slapi_mod_set_operation(mysmod, LDAP_MOD_DELETE | LDAP_MOD_BVALUES);
+ slapi_mod_set_type(mysmod, attr_map[i].windows_attribute_name);
+ } else {
+ slapi_mod_init_byval(mysmod, mod);
+ slapi_mod_set_type(mysmod, attr_map[i].windows_attribute_name);
+ if (0
+ == slapi_attr_type_cmp(mod->mod_type, "gidNumber", SLAPI_TYPE_CMP_SUBTYPE)) {
+ Slapi_Mod *ocsmod = slapi_mod_new();
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
+ "_pre_ad_mod_group_mods_cb -- add NisDomain\n");
+ addNisDomainName(ocsmod, ds_entry);
+ slapi_mods_add_ldapmod(new_smods, slapi_mod_get_ldapmod_passout(ocsmod));
+ slapi_mod_free(&ocsmod);
+ }
+ }
+ slapi_mods_add_ldapmod(new_smods, slapi_mod_get_ldapmod_passout(mysmod));
+ slapi_mod_free(&mysmod);
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
+ "_pre_ad_mod_group_mods_cb -- add modify %s DS account [%s]\n",
+ attr_map[i].windows_attribute_name,
+ slapi_entry_get_dn_const(ds_entry));
+ }
+ i++;
+ }
+ }
+ *modstosend = slapi_mods_get_ldapmods_passout(new_smods);
+ if (slapi_is_loglevel_set(SLAPI_LOG_PLUGIN)) {
+ for (mod = slapi_mods_get_first_mod(new_smods); mod;
+ mod = slapi_mods_get_next_mod(new_smods)) {
+ slapi_mod_dump(mod, 0);
+ }
+ }
+ slapi_mods_free(&smods);
+ slapi_mods_free(&new_smods);
+
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
+ "<-- _pre_ad_mod_group_mods_cb -- end\n");
+
+ return;
+}
+
+static int
+posix_winsync_can_add_entry_to_ad_cb(void *cbdata, const Slapi_Entry *local_entry,
+ const Slapi_DN *remote_dn)
+{
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
+ "--> posix_winsync_can_add_entry_to_ad_cb -- begin\n");
+
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
+ "<-- posix_winsync_can_add_entry_to_ad_cb -- end\n");
+
+ return 1; /* false - do not allow entries to be added to ad */
+}
+
+static void
+posix_winsync_begin_update_cb(void *cbdata, const Slapi_DN *ds_subtree, const Slapi_DN *ad_subtree,
+ int is_total)
+{
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
+ "--> posix_winsync_begin_update_cb -- begin\n");
+
+ posix_winsync_config_reset_MOFTaskCreated();
+
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
+ "<-- posix_winsync_begin_update_cb -- end\n");
+
+ return;
+}
+
+static void
+posix_winsync_end_update_cb(void *cbdata, const Slapi_DN *ds_subtree, const Slapi_DN *ad_subtree,
+ int is_total)
+{
+
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
+ "--> posix_winsync_end_update_cb -- begin %d %d\n",
+ posix_winsync_config_get_MOFTaskCreated(),
+ posix_winsync_config_get_createMOFTask());
+ if (posix_winsync_config_get_MOFTaskCreated() && posix_winsync_config_get_createMOFTask()) {
+ /* add a task to schedule memberof Plugin for fix memebrof attributs */
+ Slapi_PBlock *pb = slapi_pblock_new();
+ Slapi_Entry *e_task = slapi_entry_alloc();
+ int rc = 0;
+ char *dn = slapi_create_dn_string("cn=%s,cn=%s,cn=tasks,cn=config",
+ posix_winsync_plugin_name, MEMBEROFTASK);
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
+ "--> posix_winsync_end_update_cb, create task %s\n", dn);
+ if (NULL == dn) {
+ slapi_log_error(SLAPI_LOG_FATAL, posix_winsync_plugin_name,
+ "posix_winsync_end_update_cb: "
+ "failed to create task dn: cn=%s,%s,cn=tasks,cn=config\n",
+ posix_winsync_plugin_name, MEMBEROFTASK);
+ return;
+ }
+ slapi_entry_init(e_task, slapi_ch_strdup(dn), NULL);
+ slapi_entry_add_string(e_task, "cn", slapi_ch_strdup(posix_winsync_plugin_name));
+ slapi_entry_add_string(e_task, "objectClass", "extensibleObject");
+ slapi_entry_add_string(e_task, "basedn", slapi_sdn_get_dn(ds_subtree));
+
+ slapi_add_entry_internal_set_pb(pb, e_task, NULL, posix_winsync_get_plugin_identity(), 0);
+ slapi_add_internal_pb(pb);
+ slapi_pblock_get(pb, SLAPI_PLUGIN_INTOP_RESULT, &rc);
+ if (rc != 0) {
+ slapi_log_error(SLAPI_LOG_FATAL, posix_winsync_plugin_name,
+ "posix_winsync_end_update_cb: "
+ "failed to add task entry\n");
+ } else {
+
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
+ "posix_winsync_end_update_cb: "
+ "add task entry\n");
+ }
+ /* slapi_entry_free(e_task); */
+ slapi_pblock_destroy(pb);
+ pb = NULL;
+ posix_winsync_config_reset_MOFTaskCreated();
+ }
+
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
+ "<-- posix_winsync_end_update_cb -- end\n");
+
+ return;
+}
+
+static void
+posix_winsync_destroy_agmt_cb(void *cbdata, const Slapi_DN *ds_subtree, const Slapi_DN *ad_subtree)
+{
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
+ "--> posix_winsync_destroy_agmt_cb -- begin\n");
+
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
+ "<-- posix_winsync_destroy_agmt_cb -- end\n");
+
+ return;
+}
+
+static void *posix_winsync_api[] = { NULL, /* reserved for api broker use, must be zero */
+ posix_winsync_agmt_init,
+ posix_winsync_dirsync_search_params_cb,
+ posix_winsync_pre_ad_search_cb,
+ posix_winsync_pre_ds_search_entry_cb,
+ posix_winsync_pre_ds_search_all_cb,
+ posix_winsync_pre_ad_mod_user_cb,
+ posix_winsync_pre_ad_mod_group_cb,
+ posix_winsync_pre_ds_mod_user_cb,
+ posix_winsync_pre_ds_mod_group_cb,
+ posix_winsync_pre_ds_add_user_cb,
+ posix_winsync_pre_ds_add_group_cb,
+ posix_winsync_get_new_ds_user_dn_cb,
+ posix_winsync_get_new_ds_group_dn_cb,
+ posix_winsync_pre_ad_mod_user_mods_cb,
+ posix_winsync_pre_ad_mod_group_mods_cb,
+ posix_winsync_can_add_entry_to_ad_cb,
+ posix_winsync_begin_update_cb,
+ posix_winsync_end_update_cb,
+ posix_winsync_destroy_agmt_cb };
+
+static Slapi_ComponentId *posix_winsync_plugin_id = NULL;
+
+/*
+ ** Plugin identity mgmt
+ */
+
+void
+posix_winsync_set_plugin_identity(void * identity)
+{
+ posix_winsync_plugin_id = identity;
+}
+
+void *
+posix_winsync_get_plugin_identity()
+{
+ return posix_winsync_plugin_id;
+}
+
+static int
+posix_winsync_plugin_start(Slapi_PBlock *pb)
+{
+ int rc;
+ Slapi_Entry *config_e = NULL; /* entry containing plugin config */
+
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
+ "--> posix_winsync_plugin_start -- begin\n");
+
+ if (slapi_apib_register(WINSYNC_v1_0_GUID, posix_winsync_api)) {
+ slapi_log_error(SLAPI_LOG_FATAL, posix_winsync_plugin_name,
+ "<-- posix_winsync_plugin_start -- failed to register winsync api -- end\n");
+ return -1;
+ }
+
+ if (slapi_pblock_get(pb, SLAPI_ADD_ENTRY, &config_e) != 0) {
+ slapi_log_error(SLAPI_LOG_FATAL, posix_winsync_plugin_name, "missing config entry\n");
+ return (-1);
+ }
+ if ((rc = posix_winsync_config(config_e)) != LDAP_SUCCESS) {
+ slapi_log_error(SLAPI_LOG_FATAL, posix_winsync_plugin_name, "configuration failed (%s)\n",
+ ldap_err2string(rc));
+ return (-1);
+ }
+
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
+ "<-- posix_winsync_plugin_start -- registered; end\n");
+ return 0;
+}
+
+static int
+posix_winsync_plugin_close(Slapi_PBlock *pb)
+{
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
+ "--> posix_winsync_plugin_close -- begin\n");
+
+ slapi_apib_unregister(WINSYNC_v1_0_GUID);
+
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
+ "<-- posix_winsync_plugin_close -- end\n");
+ return 0;
+}
+
+/* this is the slapi plugin init function,
+ not the one used by the winsync api
+ */
+int
+posix_winsync_plugin_init(Slapi_PBlock *pb)
+{
+ void *plugin_id = NULL;
+
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
+ "--> posix_winsync_plugin_init -- begin\n");
+
+ if (slapi_pblock_set(pb, SLAPI_PLUGIN_VERSION, SLAPI_PLUGIN_VERSION_01) != 0
+ || slapi_pblock_set(pb, SLAPI_PLUGIN_START_FN, (void *) posix_winsync_plugin_start) != 0
+ || slapi_pblock_set(pb, SLAPI_PLUGIN_CLOSE_FN, (void *) posix_winsync_plugin_close) != 0
+ || slapi_pblock_set(pb, SLAPI_PLUGIN_DESCRIPTION, (void *) &posix_winsync_pdesc) != 0) {
+ slapi_log_error(SLAPI_LOG_FATAL, posix_winsync_plugin_name,
+ "<-- posix_winsync_plugin_init -- failed to register plugin -- end\n");
+ return -1;
+ }
+
+ /* Retrieve and save the plugin identity to later pass to
+ internal operations */
+ if (slapi_pblock_get(pb, SLAPI_PLUGIN_IDENTITY, &plugin_id) != 0) {
+ slapi_log_error(SLAPI_LOG_FATAL, posix_winsync_plugin_name,
+ "<-- posix_winsync_plugin_init -- failed to retrieve plugin identity -- end\n");
+ return -1;
+ }
+
+ posix_winsync_set_plugin_identity(plugin_id);
+
+ slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name,
+ "<-- posix_winsync_plugin_init -- end\n");
+ return 0;
+}
+
diff --git a/ldap/servers/plugins/posix-winsync/posix-wsp-ident.h b/ldap/servers/plugins/posix-winsync/posix-wsp-ident.h
new file mode 100644
index 0000000..43a23df
--- /dev/null
+++ b/ldap/servers/plugins/posix-winsync/posix-wsp-ident.h
@@ -0,0 +1,51 @@
+/**
+ $Id: posix-wsp-ident.h 39 2011-06-10 08:22:11Z grzemba $
+**/
+
+#ifndef POSIX_WINSYNC_H
+#define POSIX_WINSYNC_H
+
+
+#define POSIX_WINSYNC_PLUGIN_NAME "posix-winsync"
+
+#define PLUGIN_MAGIC_VENDOR_STR "contac Datentechnik GmbH"
+#define PRODUCTTEXT "1.1"
+#define null NULL
+#define true -1
+#define false 0
+#define POSIX_WINSYNC_MSSFU_SCHEMA "posixWinsyncMsSFUSchema"
+#define POSIX_WINSYNC_MAP_MEMBERUID "posixWinsyncMapMemberUID"
+#define POSIX_WINSYNC_CREATE_MEMBEROFTASK "posixWinsyncCreateMemberOfTask"
+#define POSIX_WINSYNC_LOWER_CASE "posixWinsyncLowerCaseUID"
+
+
+void * posix_winsync_get_plugin_identity();
+
+typedef struct posix_winsync_config_struct {
+ Slapi_Mutex *lock; /* for config access */
+ Slapi_Entry *config_e; /* configuration entry */
+ PRBool mssfuSchema; /* use W2k3 Schema msSFU30 */
+ PRBool mapMemberUID; /* map uniqueMember to memberUid */
+ PRBool lowercase; /* store the uid in group memberuid in lower case */
+ PRBool createMemberOfTask; /* should memberOf Plugin Task run after AD sync */
+ PRBool MOFTaskCreated;
+ Slapi_DN *rep_suffix; /* namingContext in DS of the replicated suffix */
+} POSIX_WinSync_Config;
+
+int posix_winsync_config(Slapi_Entry *config_e);
+POSIX_WinSync_Config *posix_winsync_get_config();
+PRBool posix_winsync_config_get_mapMemberUid();
+PRBool posix_winsync_config_get_msSFUSchema();
+PRBool posix_winsync_config_get_lowercase();
+PRBool posix_winsync_config_get_createMOFTask();
+Slapi_DN *posix_winsync_config_get_suffix();
+void posix_winsync_config_reset_MOFTaskCreated();
+void posix_winsync_config_set_MOFTaskCreated();
+PRBool posix_winsync_config_get_MOFTaskCreated();
+
+int posix_group_task_add(Slapi_PBlock *pb, Slapi_Entry *e,
+ Slapi_Entry *eAfter, int *returncode, char *returntext,
+ void *arg);
+
+
+#endif
11 years, 8 months
Changes to 'refs/tags/389-ds-base-1.2.11.11'
by Mark Reynolds
Changes since 389-ds-base-1.2.6.a1:
Charles Lopes (1):
Bug #361: Bad DNs in ACIs can segfault ns-slapd
Endi S. Dewata (168):
Bug 545620 - Password cannot start with minus sign
Bug 538525 - Ability to create instance as non-root user
Bug 570542 - Root password cannot contain matching curly braces
Bug 470684 - Pam_passthru plugin doesn't verify account activation
Bug 573375 - MODRDN operation not logged
Bug 520151 - Error when modifying userPassword with proxy user
Bug 455489 - Address compiler warnings about strict-aliasing rules
Bug 566320 - RFE: add exception to removal of attributes in cn=config for aci
Bug 566043 - startpid file is only cleaned by initscript runs
Bug 584109 - Slapd crashes while parsing DNA configuration
Bug 542570 - Directory Server port number is not validated in the beginning.
Bug 145181 - Plugin target/bind subtrees only take 1 value.
Bug 614511 - fix coverify Defect Type: Null pointer dereferences issues 11846 - 11891
Bug 614511 - fix coverify Defect Type: Null pointer dereferences issues 11846 - 11891
Bug 614511 - fix coverify Defect Type: Null pointer dereferences issues 11846 - 11891
Bug 614511 - fix coverify Defect Type: Null pointer dereferences issues 11846 - 11891
Bug 614511 - fix coverify Defect Type: Null pointer dereferences issues 11846 - 11891
Bug 614511 - fix coverify Defect Type: Null pointer dereferences issues 11846 - 11891
Bug 614511 - fix coverify Defect Type: Null pointer dereferences issues 11846 - 11891
Bug 614511 - fix coverify Defect Type: Null pointer dereferences issues 11846 - 11891
Bug 614511 - fix coverify Defect Type: Null pointer dereferences issues 11846 - 11891
Bug 614511 - fix coverify Defect Type: Null pointer dereferences issues 11846 - 11891
Bug 614511 - fix coverify Defect Type: Null pointer dereferences issues 11846 - 11891
Bug 614511 - fix coverify Defect Type: Null pointer dereferences issues 11846 - 11891
Bug 614511 - fix coverify Defect Type: Null pointer dereferences issues 11846 - 11891
Bug 614511 - fix coverify Defect Type: Null pointer dereferences issues 11846 - 11891
Bug 614511 - fix coverify Defect Type: Null pointer dereferences issues 11846 - 11891
Bug 614511 - fix coverify Defect Type: Null pointer dereferences issues 11846 - 11891
Bug 614511 - fix coverify Defect Type: Null pointer dereferences issues 11846 - 11891
Bug 614511 - fix coverify Defect Type: Null pointer dereferences issues 11846 - 11891
Bug 614511 - fix coverify Defect Type: Null pointer dereferences issues 11846 - 11891
Bug 614511 - fix coverify Defect Type: Null pointer dereferences issues 11846 - 11891
Bug 614511 - fix coverify Defect Type: Null pointer dereferences issues 11846 - 11891
Bug 614511 - fix coverify Defect Type: Null pointer dereferences issues 11846 - 11891
Bug 619122 - fix coverify Defect Type: Resource leaks issues CID 11975 - 12053
Bug 619122 - fix coverify Defect Type: Resource leaks issues CID 11975 - 12053
Bug 619122 - fix coverify Defect Type: Resource leaks issues CID 11975 - 12053
Bug 619122 - fix coverify Defect Type: Resource leaks issues CID 11975 - 12053
Bug 619122 - fix coverify Defect Type: Resource leaks issues CID 11975 - 12053
Bug 619122 - fix coverify Defect Type: Resource leaks issues CID 11975 - 12053
Bug 619122 - fix coverify Defect Type: Resource leaks issues CID 11975 - 12053
Bug 619122 - fix coverify Defect Type: Resource leaks issues CID 11975 - 12053
Bug 619122 - fix coverify Defect Type: Resource leaks issues CID 11975 - 12053
Bug 619122 - fix coverify Defect Type: Resource leaks issues CID 11975 - 12053
Bug 619122 - fix coverify Defect Type: Resource leaks issues CID 11975 - 12053
Bug 619122 - fix coverify Defect Type: Resource leaks issues CID 11975 - 12053
Bug 619122 - fix coverify Defect Type: Resource leaks issues CID 11975 - 12053
Bug 619122 - fix coverify Defect Type: Resource leaks issues CID 11975 - 12053
Bug 619122 - fix coverify Defect Type: Resource leaks issues CID 11975 - 12053
Bug 619122 - fix coverify Defect Type: Resource leaks issues CID 11975 - 12053
Bug 619122 - fix coverify Defect Type: Resource leaks issues CID 11975 - 12053
Bug 619122 - fix coverify Defect Type: Resource leaks issues CID 11975 - 12053
Bug 619122 - fix coverify Defect Type: Resource leaks issues CID 11975 - 12053
Bug 619122 - fix coverify Defect Type: Resource leaks issues CID 11975 - 12053
Bug 619122 - fix coverify Defect Type: Resource leaks issues CID 11975 - 12053
Bug 619122 - fix coverify Defect Type: Resource leaks issues CID 11975 - 12053
Bug 619122 - fix coverify Defect Type: Resource leaks issues CID 11975 - 12053
Bug 619122 - fix coverify Defect Type: Resource leaks issues CID 11975 - 12053
Bug 619122 - fix coverify Defect Type: Resource leaks issues CID 11975 - 12053
Bug 619122 - fix coverify Defect Type: Resource leaks issues CID 11975 - 12053
Bug 619122 - fix coverify Defect Type: Resource leaks issues CID 11975 - 12053
Bug 619122 - fix coverify Defect Type: Resource leaks issues CID 11975 - 12053
Bug 619122 - fix coverify Defect Type: Resource leaks issues CID 11975 - 12053
Bug 619122 - fix coverify Defect Type: Resource leaks issues CID 11975 - 12053
Bug 619122 - fix coverify Defect Type: Resource leaks issues CID 11975 - 12053
Bug 619122 - fix coverify Defect Type: Resource leaks issues CID 11975 - 12053
Bug 619122 - fix coverify Defect Type: Resource leaks issues CID 11975 - 12053
Bug 619122 - fix coverify Defect Type: Resource leaks issues CID 11975 - 12053
Bug 619122 - fix coverify Defect Type: Resource leaks issues CID 11975 - 12053
Bug 617630 - fix coverify Defect Type: Resource leaks issues CID 12052 - 12093
Bug 617630 - fix coverify Defect Type: Resource leaks issues CID 12052 - 12093
Bug 617630 - fix coverify Defect Type: Resource leaks issues CID 12052 - 12093
Bug 617630 - fix coverify Defect Type: Resource leaks issues CID 12052 - 12093
Bug 617630 - fix coverify Defect Type: Resource leaks issues CID 12052 - 12093
Bug 617630 - fix coverify Defect Type: Resource leaks issues CID 12052 - 12093
Bug 617630 - fix coverify Defect Type: Resource leaks issues CID 12052 - 12093
Bug 617630 - fix coverify Defect Type: Resource leaks issues CID 12052 - 12093
Bug 617630 - fix coverify Defect Type: Resource leaks issues CID 12052 - 12093
Bug 617630 - fix coverify Defect Type: Resource leaks issues CID 12052 - 12093
Bug 617630 - fix coverify Defect Type: Resource leaks issues CID 12052 - 12093
Bug 617630 - fix coverify Defect Type: Resource leaks issues CID 12052 - 12093
Bug 617630 - fix coverify Defect Type: Resource leaks issues CID 12052 - 12093
Bug 617630 - fix coverify Defect Type: Resource leaks issues CID 12052 - 12093
Bug 617630 - fix coverify Defect Type: Resource leaks issues CID 12052 - 12093
Bug 617630 - fix coverify Defect Type: Resource leaks issues CID 12052 - 12093
Bug 617630 - fix coverify Defect Type: Resource leaks issues CID 12052 - 12093
Bug 617630 - fix coverify Defect Type: Resource leaks issues CID 12052 - 12093
Bug 617630 - fix coverify Defect Type: Resource leaks issues CID 12052 - 12093
Bug 617630 - fix coverify Defect Type: Resource leaks issues CID 12052 - 12093
Bug 617630 - fix coverify Defect Type: Resource leaks issues CID 12052 - 12093
Bug 617630 - fix coverify Defect Type: Resource leaks issues CID 12052 - 12093
Bug 613056 - fix coverify Defect Type: Null pointer dereferences issues 11892 - 11939
Bug 613056 - fix coverify Defect Type: Null pointer dereferences issues 11892 - 11939
Bug 613056 - fix coverify Defect Type: Null pointer dereferences issues 11892 - 11939
Bug 613056 - fix coverify Defect Type: Null pointer dereferences issues 11892 - 11939
Bug 613056 - fix coverify Defect Type: Null pointer dereferences issues 11892 - 11939
Bug 613056 - fix coverify Defect Type: Null pointer dereferences issues 11892 - 11939
Bug 613056 - fix coverify Defect Type: Null pointer dereferences issues 11892 - 11939
Bug 613056 - fix coverify Defect Type: Null pointer dereferences issues 11892 - 11939
Bug 613056 - fix coverify Defect Type: Null pointer dereferences issues 11892 - 11939
Bug 613056 - fix coverify Defect Type: Null pointer dereferences issues 11892 - 11939
Bug 613056 - fix coverify Defect Type: Null pointer dereferences issues 11892 - 11939
Bug 613056 - fix coverify Defect Type: Null pointer dereferences issues 11892 - 11939
Bug 613056 - fix coverify Defect Type: Null pointer dereferences issues 11892 - 11939
Bug 613056 - fix coverify Defect Type: Null pointer dereferences issues 11892 - 11939
Bug 613056 - fix coverify Defect Type: Null pointer dereferences issues 11892 - 11939
Bug 613056 - fix coverify Defect Type: Null pointer dereferences issues 11892 - 11939
Bug 613056 - fix coverify Defect Type: Null pointer dereferences issues 11892 - 11939
Bug 613056 - fix coverify Defect Type: Null pointer dereferences issues 11892 - 11939
Bug 613056 - fix coverify Defect Type: Null pointer dereferences issues 11892 - 11939
Bug 613056 - fix coverify Defect Type: Null pointer dereferences issues 11892 - 11939
Bug 613056 - fix coverify Defect Type: Null pointer dereferences issues 11892 - 11939
Bug 613056 - fix coverify Defect Type: Null pointer dereferences issues 11892 - 11939
Bug 613056 - fix coverify Defect Type: Null pointer dereferences issues 11892 - 11939
Bug 613056 - fix coverify Defect Type: Null pointer dereferences issues 11892 - 11939
Bug 613056 - fix coverify Defect Type: Null pointer dereferences issues 11892 - 11939
Bug 613056 - fix coverify Defect Type: Null pointer dereferences issues 11892 - 11939
Bug 616500 - fix coverify Defect Type: Resource leaks issues CID 12094 - 12136
Bug 616500 - fix coverify Defect Type: Resource leaks issues CID 12094 - 12136
Bug 616500 - fix coverify Defect Type: Resource leaks issues CID 12094 - 12136
Bug 616500 - fix coverify Defect Type: Resource leaks issues CID 12094 - 12136
Bug 616500 - fix coverify Defect Type: Resource leaks issues CID 12094 - 12136
Bug 616500 - fix coverify Defect Type: Resource leaks issues CID 12094 - 12136
Bug 616500 - fix coverify Defect Type: Resource leaks issues CID 12094 - 12136
Bug 616500 - fix coverify Defect Type: Resource leaks issues CID 12094 - 12136
Bug 616500 - fix coverify Defect Type: Resource leaks issues CID 12094 - 12136
Bug 616500 - fix coverify Defect Type: Resource leaks issues CID 12094 - 12136
Bug 616500 - fix coverify Defect Type: Resource leaks issues CID 12094 - 12136
Bug 616500 - fix coverify Defect Type: Resource leaks issues CID 12094 - 12136
Bug 616500 - fix coverify Defect Type: Resource leaks issues CID 12094 - 12136
Bug 616500 - fix coverify Defect Type: Resource leaks issues CID 12094 - 12136
Bug 616500 - fix coverify Defect Type: Resource leaks issues CID 12094 - 12136
Bug 616500 - fix coverify Defect Type: Resource leaks issues CID 12094 - 12136
Bug 616500 - fix coverify Defect Type: Resource leaks issues CID 12094 - 12136
Bug 610119 - fix coverify Defect Type: Null pointer dereferences issues 12167 - 12199
Bug 610119 - fix coverify Defect Type: Null pointer dereferences issues 12167 - 12199
Bug 610119 - fix coverify Defect Type: Null pointer dereferences issues 12167 - 12199
Bug 610119 - fix coverify Defect Type: Null pointer dereferences issues 12167 - 12199
Bug 610119 - fix coverify Defect Type: Null pointer dereferences issues 12167 - 12199
Bug 610119 - fix coverify Defect Type: Null pointer dereferences issues 12167 - 12199
Bug 610119 - fix coverify Defect Type: Null pointer dereferences issues 12167 - 12199
Bug 610119 - fix coverify Defect Type: Null pointer dereferences issues 12167 - 12199
Bug 610119 - fix coverify Defect Type: Null pointer dereferences issues 12167 - 12199
Bug 610119 - fix coverify Defect Type: Null pointer dereferences issues 12167 - 12199
Bug 610119 - fix coverify Defect Type: Null pointer dereferences issues 12167 - 12199
Bug 610119 - fix coverify Defect Type: Null pointer dereferences issues 12167 - 12199
Bug 610119 - fix coverify Defect Type: Null pointer dereferences issues 12167 - 12199
Bug 610119 - fix coverify Defect Type: Null pointer dereferences issues 12167 - 12199
Bug 610119 - fix coverify Defect Type: Null pointer dereferences issues 12167 - 12199
Bug 610119 - fix coverify Defect Type: Null pointer dereferences issues 12167 - 12199
Bug 611790 - fix coverify Defect Type: Null pointer dereferences issues 11940 - 12166
Bug 611790 - fix coverify Defect Type: Null pointer dereferences issues 11940 - 12166
Bug 611790 - fix coverify Defect Type: Null pointer dereferences issues 11940 - 12166
Bug 611790 - fix coverify Defect Type: Null pointer dereferences issues 11940 - 12166
Bug 611790 - fix coverify Defect Type: Null pointer dereferences issues 11940 - 12166
Bug 611790 - fix coverify Defect Type: Null pointer dereferences issues 11940 - 12166
Bug 611790 - fix coverify Defect Type: Null pointer dereferences issues 11940 - 12166
Bug 611790 - fix coverify Defect Type: Null pointer dereferences issues 11940 - 12166
Bug 611790 - fix coverify Defect Type: Null pointer dereferences issues 11940 - 12166
Bug 611790 - fix coverify Defect Type: Null pointer dereferences issues 11940 - 12166
Bug 611790 - fix coverify Defect Type: Null pointer dereferences issues 11940 - 12166
Bug 611790 - fix coverify Defect Type: Null pointer dereferences issues 11940 - 12166
Bug 611790 - fix coverify Defect Type: Null pointer dereferences issues 11940 - 12166
Bug 611790 - fix coverify Defect Type: Null pointer dereferences issues 11940 - 12166
Bug 628096 - spurious error message from /sbin/service when doing a stop on no instances
Bug 573889 - Migration does not remove deprecated schema
Bug 606545 - core schema should include numSubordinates
Bug 643979 - Strange byte sequence for attribute with no values (nsslapd-referral)
Endi Sukma Dewata (16):
Bug 630092 - Coverity #12117: Resource leaks issues
Bug 630092 - Coverity #15478: Resource leaks issues
Bug 630092 - Coverity #15479: Resource leaks issues
Bug 630092 - Coverity #15481: Resource leaks issues
Bug 630092 - Coverity #15482: Resource leaks issues
Bug 630092 - Coverity #15483: Resource leaks issues
Bug 630092 - Coverity #15484: Resource leaks issues
Bug 630092 - Coverity #15485: Resource leaks issues
Bug 630092 - Coverity #15487: Resource leaks issues
Bug 630092 - Coverity #15490: Resource leaks issues
Bug 630092 - Coverity #15497: Resource leaks issues
Bug 630092 - Coverity #11991: Resource leaks issues
Bug 630092 - Coverity #12000: Resource leaks issues
Bug 630092 - Coverity #12003: Resource leaks issues
Bug 630092 - Coverity #11985: Resource leaks issues
Bug 630092 - Coverity #11992,11993: Resource leaks issues
Jeroen van Meeuwen (Kolab Systems) (1):
Suppress alert on unavailable port with forced setup
Mark Reynolds (70):
Ticket #71 - unable to delete managed entry config
Ticket #159 - Managed Entry Plugin runs against managed entries upon any update without validating
Ticket #177 - logconv.pl doesn't detect restarts
Merge branch 'ticket159'
Ticket #49 - better handling for server shutdown while long running tasks are active
Ticket #50 - server should not call a plugin after the plugin close function is calle
Updated for ticket#50
Ticket #55 - Limit of 1024 characters for nsMatchingRule
Ticket #140 - incorrect memset parameters
Revert "Ticket #140 - incorrect memset parameters"
Revert "Ticket #55 - Limit of 1024 characters for nsMatchingRule"
Ticket #38 - nisDomain schema is incorrect
Ticket #6 - protocol error from proxied auth operation
Ticket #55 - Limit of 1024 characters for nsMatchingRule
Ticket #39 - Account Policy Plugin does not work for simple binds when PAM Pass Through Auth plugin is enabled
Ticket 175 - logconv.pl improvements
Ticket 175 - minor fixes
Ticket #17 - Replication optimizations
Ticket #17 - new replication optimizations
Ticket #129 - Should only update modifyTimestamp/modifiersName on MODIFY ops
Ticket #111 - ability to control behavior of modifyTimestamp/modifiersName
Ticket #211 - dnaNextValue gets incremented even if the user addition fails
Ticket #74 - Add schema for DNA plugin (RFE)
Ticket #306 - void function cannot return value
Ticket #302 - use thread local storage for internalModifiersName & internalCreatorsName
Schema Reload crash fix
Ticket #291 - cannot use & in a sasl map search filter
Ticket #305 - Certain CMP operations hang or cause ns-slapd to crash
Ticket #191 - Implement SO_KEEPALIVE in network calls
Config changes fail because of unknown attribute "internalModifiersname"
Ticket #292 - logconv.pl reporting unindexed search with different search base than shown in access logs
Ticket #308 - Automembership plugin fails if data and config area mixed in the plugin configuration
Ticket #271 - replication code cleanup
TIcket #285 - compilation fixes for '--format-security'
Ticket #271 - Slow shutdown when you have 100+ replication agreements
Ticket #24 - Add nsTLS1 to the DS schema
Ticket #319 - ldap-agent crashes on start with signal SIGSEGV
Ticket #20 - Allow automember to work on entries that have already been added
Ticket #315 - ns-slapd exits/crashes if /var fills up
Ticket #315 - small fix to libglobs
Ticket #183 - passwordMaxFailure should lockout password one sooner - and should be configurable to avoid regressions
Coverity Fixes
Ticket #325 - logconv.pl : use of getopts to parse command line options
Ticket #183 - passwordMaxFailure should lockout password one sooner
Ticket #207 - [RFE] enable attribute that tracks when a password was last set
Ticket #214 - Adding Replication agreement should complain if required nsds5ReplicaCredentials not supplied
Ticket #337 - Improve CLEANRUV task
Ticket #321 - krbExtraData is being null modified and replicated on each ssh login
Ticket #110 - RFE limiting root DN by host, IP, time of day, day of week
Ticket 368 - Make the cleanAllRUV task one step
Coverity Fix
Ticket 365 - passwords in clear text in the audit log
Ticket 366 - Change DS to purge ticket from krb cache in case of authentication error
Ticket 399 - slapi_ldap_bind() doesn't check bind results
Ticket #369 - restore of replica ldif file on second master after deleting two records shows only 1 deletion
Update the slapi-plugin documentation on new slapi functions, and added a slapi function for checking on shutdowns
Ticket #388 - Improve replication agreement status messages
COVERITY FIXES
Ticket 413 - "Server is unwilling to perform" when running ldapmodify on nsds5ReplicaStripAttrs
Ticket 403 - CLEANALLRUV feature
Ticket 407 - memory leak in dna plugin
Ticket 403 - cleanallruv coverity fixes
bump version to 1.2.11.8 for offical release
Ticket 407 - dna memory leak - fix crash from prev fix
Bumped version to 1.2.11.9
Ticket 403 - CLEANALLRUV revisions
bumped version to 1.2.11.10
Ticket 403 - fix CLEANALLRUV regression from last commit
Ticket 429
bumped version to 1.2.11.11
Nathan Kinder (193):
Bug 549554 - Trim single-valued attributes before sending to AD
Improve search for pcre header file
Bug 434735 - Allow SASL ANONYMOUS mech to work
Bug 570912 - Avoid selinux context conflict with httpd
Allow instance name to be parsed from start-slapd
Add managed entries plug-in
Bug 572355 - Label instance files and ports during upgrade.
Bug 578863 - Password modify extop needs to send referrals on replicas
Bug 584156 - Remove ldapi socket file during upgrade
Fix rsearch usage of name files for random filters
Bug 584497 - Allow DNA plugin to set same value on multiple attributes
Add replication session hooks
Correct function prototype for repl session hook
Bug 592389 - Set anonymous resource limits properly
Bug 601433 - Add man pages for start-dirsrv and related commands
Bug 604263 - Fix memory leak when password change is rejected
Bug 612242 - membership change on DS does not show on AD
Bug 613833 - Allow dirsrv_t to bind to rpc ports
Bug 594745 - Get rid of dirsrv_lib_t label
Bug 620927 - Allow multiple membership attributes in memberof plugin
Bug 612264 - ACI issue with (targetattr='userPassword')
Bug 630098 - fix coverity Defect Type: Code maintainability issues
Bug 630098 - fix coverity Defect Type: Code maintainability issues
Bug 630093 - (cov#15511) Don't use unintialized search_results in refint plugin
Bug 630093 - (cov#15518) Need to intialize fd in ldbm2ldif code
Bug 630096 - (cov#11778) check return value of ldap_parse_result
Bug 630096 - (cov#15446) check return value of ber_scanf()
Bug 630096 - (cov#15449,15450) Check return value of stat()
Bug 630096 - (cov#15448) Check return value of cache_replace()
Bug 630096 - (cov#15447) - Check return value of idl_append_extend()
Bug 630090 - (cov#11974) Remove unused ACL functions
Bug 630090 - (cov#15445) Fix illegal free in archive code
Bug 630094 - (cov#11818) Fix unreachable return in snmp subagent
Bug 630094 - (cov#15451) Get rid of unreachable free statements
Bug 630094 - (cov#15452) Remove NULL checking for op_string
Bug 630094 - (cov#15453) Eliminate NULL check for local_newentry
Bug 630094 - (cov#15454) Fix deadcode issue in mapping tree code
Bug 630094 - (cov#15455) Remove deadcode in attr_index_config()
Bug 630094 - (cov#15456) Remove NULL check for srdn in import code
Bug 630094 - (cov#15457) Remove deadcode in import code
Bug 630094 - (cov#15458) Fix deadcode issue in moddn code
Bug 630094 - (cov#15459) Remove NULL check for srdn in ldif2ldbm code
Bug 630094 - (cov#15520) Fix unreachable code issue if perfctrs code
Bug 630094 - (cov#15581) Add missing breaks in agt_mopen_stats()
Bug 690090 - (cov#11974) Remove additional unused ACL functions
Bug 630091 - (cov#15512) Fix usage of uninitialized bervals
Bug 630091 - (cov#15513) Fix usage of uninitialized bervals
Bug 630091 - (cov#15514) Initialize DBT in entryrdn_get_parent()
Bug 630091 - (cov#15515) Use of uninitialized array in index config code
Bug 630091 - (cov#15516,15517) Initialize pointers before attempting to free
Bug 630091 - (cov#15519) Initialize bervals in search_easter_egg()
Bug 630091 - (cov#15582) Free of uninitialized pointer in attr_index_config()
Bug 630097 - (cov#11933) Fix NULL dereference in schema code
Bug 630097 - (cov#11938) NULL dereference in mmldif
Bug 630097 - (cov#11946) NULL dereference in ResHashCreate()
Bug 630097 - (cov#11964) Remove dead code from libaccess
Bug 630097 - (cov#12143) NULL dereference in cos cache code
Bug 630097 - (cov#12148) NULL dereference in ruvInit()
Bug 630097 - (cov#12182,12183) NULL dereference in import code
Bug 630097 - (cov#15460) NULL deference in ACL URL code
Bug 630097 - (cov#15461) Remove unnecessary NULL check in DNA
Bug 630097 - (cov#15462) NULL dereference in mep_modrdn_post_op()
Bug 630097 - (cov#15463) Remove NULL check in referint plugin
Bug 630097 - (cov#15464) NULL dereference in repl code
Bug 630097 - (cov#15465) Null dereference in USN code
Bug 630097 - (cov#15473) NULL dereference in ResHashCreate()
Bug 630097 - (cov#15505) NULL dereference in memberOf code
Bug 630097 - (cov#15506) NULL dereference in dblayer code
Bug 630097 - (cov#15507,15508) NULL dereference in entryrdn code
Bug 630097 - (cov#15509) NULL dereference in idsktune
Bug 630097 - (cov#11938) NULL dereference in mmldif
Bug 630097 - (cov#15477) NULL dereference in ACL plug-in code
Bug 630091 - (cov#12209) Use of uninitialized pointer in libaccess
Bug 630092 - (cov#12116) Resource leak in ldclt code
Bug 630092 - (cov#12105) Resource leak in pwdscheme config code
Bug 630092 - (cov#12068) Resource leak in certmap code
Bug 630091 - (cov#11973) Array overrun in libaccess
Bug 522055 - Scope check for managed attribute fails
Bug 625335 - Self-write aci has permission to invalid attribute
Bug 631993 - Log authzid when proxy auth control is used
Cov #16300 - Unused variable in account policy plugin
Bug 544321 - remove-ds.pl should not throw error unlabelling port
Bug 555955 - Allow CoS values to be merged
Bug 643937 - Initialize replication version flags
Bug 305131 - Allow empty modify operation
Bug 619633 - Make attribute uniqueness obey requiredObjectClass
Bug 619623 - attr-unique-plugin ignores requiredObjectClass on modrdn operations
Bug 189985 - Improve attribute uniqueness error message
Bug 647932 - multiple memberOf configuration adding memberOf where there is no member
Bug 521088 - DNA should check ACLs before getting a value from the range
Bug 635009 - Add one-way AD sync capability
Bump VERSION.sh to 1.2.8.a1
Bug 648949 - Move selinux policy into base OS
Bug 648949 - Update configure
Roll back VERSION.sh for 1.2.7 release
Bug 625950 - hash nsslapd-rootpw changes in audit log
Bug 656392 - Remove calls to ber_err_print()
Bug 656515 - Allow Name and Optional UID syntax for grouping attributes
Bug 197886 - Avoid overflow of UUID generator
Bug 658312 - Allow mapped attribute types to be quoted
Bug 197886 - Initialize return value for UUID generation code
Bug 658309 - Process escaped characters in managed entry mappings
Bug 659456 - Incorrect usage of ber_printf() in winsync code
Bug 641944 - Don't normalize non-DN RDN values
Bug 658312 - Invalid free in Managed Entry plug-in
Bug 661792 - Valid managed entry config rejected
Bug 588791 - Allow anonymous rootDSE access only
Bug 606439 - Creating server instance with LDAPI takes too long
Bug 632670 - Chain-on-update logs managed-entries-plugin errors
Bug 621008 - parsing purge RUV from changelog at startup fails
Bug 663191 - Don't use $USER in DSCreate.pm
Bug 663597 - Memory leaks in normalization code
Bug 659131 - Incorrect RDN values added with multi-valued RDN
Bug 661102 - Rename of managed entries not handled correctly
Bug 193297 - Call pre-bind plug-ins for all SASL bind steps
Bug 201652 - LDAPv2 bind with expired password doesn't unbind correctly
Bug 470576 - Migration could do addition checks before commiting actions
Bug 481195 - Missing op type in log when password change required
Bug 509897 - Validate dnaScope to ensure it is a legal DN
Bug 505722 - Allow ntGroup to have mail attribute present
Bug 543633 - replication problems if supplier is killed under update load
Bug 671033 - range sharing between server breaks with SASL/GSSAPI auth
Bug 527912 - setup-ds.pl appears to hang when DNS is unreachable
Bug 252249 - Add pkg-config file for plug-in developers
Bug 670616 - Allow SSF to be set for local (ldapi) connections
Bug 668862 - init scripts return wrong error code
Bug 674430 - Improve error messages for attribute uniqueness
Bug 675853 - dirsrv crash segfault in need_new_pw()
Bug 678646 - Ignore tombstone operations in managed entry plug-in
Bug 671199 - Don't allow other to write to rundir
Bug 672468 - Don't use empty path elements in LD_LIBRARY_PATH
Bug 674852 - crash in ldap-agent when using OpenLDAP
Bug 681345 - setup-ds.pl should set SuiteSpotGroup automatically
Bug 680558 - Winsync plugin fails to restrain itself to the configured subtree
Bug 504803 - Allow maxlogsize to be set if logmaxdiskspace is -1
Bug 687974 - (cov#10715) Fix Coverity uninitialized variables issues
Bug 688341 - (cov#10709) Fix Coverity code maintainability issues
Bug 688341 - (cov#10708) Fix Coverity code maintainability issues
Bug 688341 - (cov#10706,10707) Fix Coverity code maintainability issues
Bug 688341 - (cov#10704,10705) Fix Coverity code maintainability issues
Bug 688341 - (cov#10703) Fix Coverity code maintainability issues
Bug 688341 - (cov#10702) Fix Coverity code maintainability issues
Bug 688341 - (cov#10709) Fix Coverity code maintainability issues
Bug 689537 - (cov#10699) Fix Coverity NULL pointer dereferences
Bug 689537 - (cov#10610) Fix Coverity NULL pointer dereferences
Bug 689537 - (cov#10608) Fix Coverity NULL pointer dereferences
Bug 689952 - (cov#10581) Incorrect bit check in replication connection code
Bug 690526 - (cov#10734) Double free in dse_add()
Bug 690649 - (cov#10731) Use of free'd pointer in indexing code
Bug 690882 - (cov#10571) Incorrect sizeof use in uuid code
Bug 690882 - (cov#10636,10637) Useless comparison in attrcrypt
Bug 690882 - (cov#10703) Incorrect sizeof use in vattr code
Bug 690882 - (cov#10572,10710) Incorrect sizeof use in uuid code
Bug 691574 - (cov#10579) Check return value of ber_scanf() in sort code
Bug 691574 - (cov#10577) Check return types when adding RDN CSNs
Bug 691574 - (cov#10573) check return value in GER code
Bug 691574 - (cov#10575) Check return value of ldap_get_option
Bug 691574 - (cov#10573) Fix syntax error
Bug 693868 - Add managed entry config during in-place upgrade
Add Auto Membership Plug-in
Bug 698428 - Make auto membership use Slapi_DN for DN comparisons
Bug 695779 - windows sync can lose old values when a new value is added
Bug 700557 - Linked attrs callbacks access free'd pointers after close
Bug 700557 - Leak at shutdown in DNA plug-in
Bug 703304 - Auto membership alternate config area should override default area
Bug 703304 - Auto membership alternate config area should override default area
Bug 703530 - Allow Managed Entry config to be relocated
Bug 697961 - memberOf needs to be triggered by internal operations
Bug 710377 - Import with chain-on-update crashes ns-slapd
Split automember regex rules into separate entries
Bug 713209 - Update sudo schema
Bug 691313 - Need TLS/SSL error messages in repl status and errors log
Bug 723937 - Slapi_Counter API broken on 32-bit F15
Bug 725743 - Make memberOf use PRMonitor for it's operation lock
Bug 729717 - Fatal error messages when syncing deletes from AD
Bug 728510 - Run dirsync after sending updates to AD
Bug 730387 - Add slapi_rwlock API and use POSIX rwlocks
Bug 611438 - Add Account Usability Control support
Bug 728592 - Allow ns-slapd to start with an invalid server cert
Bug 732541 - Ignore error 32 when adding automember config
Bug 722292 - Entries in DS are not updated properly when using WinSync API
Bug 722292 - (cov#11030) Leak of mapped_sdn in winsync rename code
Bug 735114 - renaming a managed entry does not update mepmanagedby
Bug 739172 - Allow separate fractional attrs for incremental and total protocols
Bug 743966 - Compiler warnings in account usability plugin
Bug 744946 - (cov#11046) NULL dereference in IDL code
Bug 752155 - Use restorecon after creating init script lock file
Ticket 284 - Remove unnecessary SNMP MIB files
ticket 304 - Fix kernel version checking in dsktune
ticket 211 - Use of uninitialized variables in ldbm_back_modify()
ticket 181 - Allow PAM passthru plug-in to have multiple config entries
coverity 12563 Read from pointer after free (fix 2)
Ticket 211 - Avoid preop range requests non-DNA operations
Noriko Hosoi (339):
544089 - Referential Integrity Plugin does not take into account the attribute
557224 - subtree rename breaks the referential integrity plug-in
247413 - Incorrect error on multiple identical value add
559016 - Attempting to rename suffix returns inappropriate errors
555577 - Syntax validation fails for "ou=NetscapeRoot" tree
Undo - 555577 - Syntax validation fails for "ou=NetscapeRoot" tree
560827 - Admin Server templates: DistinguishName validation fails
548535 - memory leak in attrcrypt
563365 - Error handling problems in the backend functions
565664 - Incorrect parameter for CACHE_RETURN()
565987 - redhat-ds-base fails to build due to undefined struct
527848 - make sure db upgrade to 4.7 and later works correctly
539618 - Replication bulk import reports Invalid read/write
567370 - dncache: assertion failure in id2entry_delete
548115 - memory leak in schema reload
555970 - missing read lock in the combination of cos and nsview
539618 - Replication bulk import reports Invalid read/write
570667 - MMR: simultaneous total updates on the masters cause
Merge branch '547503'
Revert "Merge branch '547503'"
Bug 554573 - ACIs use bind DN from bind req rather than cert mapped DN from sasl/external
199923 - subtree search fails to find items under a db
570107 - The import of LDIFs with base-64 encoded DNs fails,
572649 - DS8.2 crashes on RHEL 4 (corresponding to bob, ber_2 test case)
573060 - DN normalizer: ESC HEX HEX is not normalized (
573896 - initializing subtree with invalid syntax crashes ns-slapd
515805 - Stop "initialize Database" crashes the server
548533 - memory leak in Repl_5_Inc_Protocol_new
Fixing a syntax error
Update to New DN Format
585905 - ACL with targattrfilters error crashes the server
574167 - An escaped space at the end of the RDN value is not
590931 - rhds81 import - hardcoded pages_limit for nsslapd-import-cache-autosize
591336 - Implementing upgrade DN format tool
593453 - Creating password policy with ns-newpolicy.pl on Replicated
593110 - backup-restore does not ALWAYS work
593899 - adding specific ACI causes very large mem allocate request
588867 - entryusn plugin fails on solaris
593899 - adding specific ACI causes very large mem allocate request
595893 - Base DN in SASL mapping is not normalized
511112 - Password history limited to 25 values
597375 - Deleting LDBM database causes backup/restore problem
574101 - MODRDN request never returns - possible deadlock
606920 - anonymous resource limit - nstimelimit -
605827 - In-place upgrade: upgrade dn format should not run in setup-ds-admin.pl
578296 - Attribute type entrydn needs to be added when subtree
609256 - Selinux: pwdhash fails if called via Admin Server CGI
609255 - fix coverity Defect Type: Memory - illegal accesses issues
609255 - fix coverity Defect Type: Memory - illegal accesses issues
609255 - fix coverity Defect Type: Memory - illegal accesses issues
609255 - fix coverity Defect Type: Memory - illegal accesses issues
609255 - fix coverity Defect Type: Memory - illegal accesses issues
609255 - fix coverity Defect Type: Memory - illegal accesses issues
609255 - fix coverity Defect Type: Memory - illegal accesses issues
609255 - fix coverity Defect Type: Memory - illegal accesses issues
609255 - fix coverity Defect Type: Memory - illegal accesses issues
609255 - fix coverity Defect Type: Memory - illegal accesses issues
609255 - fix coverity Defect Type: Memory - illegal accesses issues
609255 - fix coverity Defect Type: Memory - illegal accesses issues
609255 - fix coverity Defect Type: Memory - illegal accesses issues
609255 - fix coverity Defect Type: Memory - illegal accesses issues
609255 - fix coverity Defect Type: Memory - illegal accesses issues
609255 - fix coverity Defect Type: Memory - illegal accesses issues
616618 - 389 v1.2.5 accepts 2 identical entries with different DN formats
610281 - fix coverity Defect Type: Control flow issues
610281 - fix coverity Defect Type: Control flow issues
610281 - fix coverity Defect Type: Control flow issues
610281 - fix coverity Defect Type: Control flow issues
610281 - fix coverity Defect Type: Control flow issues
610281 - fix coverity Defect Type: Control flow issues
610281 - fix coverity Defect Type: Control flow issues
610281 - fix coverity Defect Type: Control flow issues
610281 - fix coverity Defect Type: Control flow issues
610281 - fix coverity Defect Type: Control flow issues
610281 - fix coverity Defect Type: Control flow issues
610281 - fix coverity Defect Type: Control flow issues
610281 - fix coverity Defect Type: Control flow issues
610281 - fix coverity Defect Type: Control flow issues
610281 - fix coverity Defect Type: Control flow issues
610281 - fix coverity Defect Type: Control flow issues
610281 - fix coverity Defect Type: Control flow issues
610281 - fix coverity Defect Type: Control flow issues
610281 - fix coverity Defect Type: Control flow issues
610281 - fix coverity Defect Type: Control flow issues
610281 - fix coverity Defect Type: Control flow issues
610281 - fix coverity Defect Type: Control flow issues
610281 - fix coverity Defect Type: Control flow issues
610281 - fix coverity Defect Type: Control flow issues
610281 - fix coverity Defect Type: Control flow issues
610281 - fix coverity Defect Type: Control flow issues
610281 - fix coverity Defect Type: Control flow issues
610281 - fix coverity Defect Type: Control flow issues
610281 - fix coverity Defect Type: Control flow issues
610281 - fix coverity Defect Type: Control flow issues
610281 - fix coverity Defect Type: Control flow issues
616608 - SIGBUS in RDN index reads on platforms with strict alignments
619595 - Upgrading sub suffix under non-normalized suffix disappears
513166 - Simple Paged result doesn't provide the server's estimate
621928 - Unable to enable replica (rdn problem?) on 1.2.6 rc6
Bug 194531 - db2bak is too noisy
Bug 622628 - fix coverity Defect Type: Integer handling issues
Bug 622628 - fix coverity Defect Type: Integer handling issues
Bug 622628 - fix coverity Defect Type: Integer handling issues
Bug 622903 - fix coverity Defect Type: Code maintainability issues
Bug 622903 - fix coverity Defect Type: Code maintainability issues
Bug 622903 - fix coverity Defect Type: Code maintainability issues
Bug 622903 - fix coverity Defect Type: Code maintainability issues
Bug 622903 - fix coverity Defect Type: Code maintainability issues
Bug 622903 - fix coverity Defect Type: Code maintainability issues
Bug 622903 - fix coverity Defect Type: Code maintainability issues
Bug 622903 - fix coverity Defect Type: Code maintainability issues
Bug 622903 - fix coverity Defect Type: Code maintainability issues
Bug 622903 - fix coverity Defect Type: Code maintainability issues
Bug 622903 - fix coverity Defect Type: Code maintainability issues
Bug 622903 - fix coverity Defect Type: Code maintainability issues
Bug 622903 - fix coverity Defect Type: Code maintainability issues
Bug 622903 - fix coverity Defect Type: Code maintainability issues
Bug 622903 - fix coverity Defect Type: Code maintainability issues
Bug 623118 - Simplepaged results going in infinite loop
Bug 614511 - fix coverity Defect Type: Null pointer dereferences issues 11846 - 11891
Bug 619122 - fix coverity Defect Type: Resource leaks issues CID 11975 - 12051
Bug 617630 - fix coverify Defect Type: Resource leaks issues CID 12052 - 12093
Bug 617630 - fix coverify Defect Type: Resource leaks issues CID 12052 - 12093
Bug 617630 - fix coverity Defect Type: Resource leaks issues CID 12052 - 12093
Bug 613056 - fix coverify Defect Type: Null pointer dereferences issues 11892 - 11939
Bug 616500 - fix coverity Defect Type: Resource leaks issues CID 12094 - 12136
Bug 616500 - fix coverity Defect Type: Resource leaks issues CID 12094 - 12136
Bug 616500 - fix coverity Defect Type: Resource leaks issues CID 12094 - 12136
Bug 614511 - fix coverify Defect Type: Null pointer dereferences issues 11846 - 11891
Bug 613056 - fix coverify Defect Type: Null pointer dereferences issues 11892 - 11939
Bug 613056 - fix coverify Defect Type: Null pointer dereferences issues 11892
Bug 616500 - fix coverity Defect Type: Resource leaks issues
Bug 623507 - fix coverity Defect Type: Incorrect expression issues
Bug 623507 - fix coverity Defect Type: Incorrect expression issues
Bug 613056 - fix coverify Defect Type: Null pointer dereferences
Bug 610119 - fix coverify Defect Type: Null pointer dereferences issues 12167 - 12199
Bug 610119 - fix coverify Defect Type: Null pointer dereferences issues 12167 - 12199
Bug 610119 - fix coverify Defect Type: Null pointer dereferences issues 12167 - 12199
Bug 610119 - fix coverify Defect Type: Null pointer dereferences issues 12167 - 12199
Bug 611790 - fix coverify Defect Type: Null pointer dereferences issues 11940 - 12166
Bug 611790 - fix coverify Defect Type: Null pointer dereferences issues 11940 - 12166
Bug 611790 - fix coverify Defect Type: Null pointer dereferences issues 11940 - 12166
Bug 611790 - fix coverify Defect Type: Null pointer dereferences issues 11940 - 12166
Bug 611790 - fix coverify Defect Type: Null pointer dereferences issues 11940 - 12166
Removed redundant code in agmt_new_from_entry
Bug 617630 - fix coverify Defect Type: Resource leaks issues CID 12052 - 12093
Bug 628300 - DN is not normalized in dn/entry cache when an entry is added, entrydn is not present in search results
Bug 531642 - EntryUSN: RFE: a configuration option to make entryusn "global"
Bug 627738 - The cn=monitor statistics entries for the dnentry cache do not change or change very rarely
DN normalizer should check the invalid type
Bug 627738 - The cn=monitor statistics entries for the dnentry cache
Bug 629710 - escape_string does not check '\<HEX><HEX>'
agmtlist_shutdown (repl5_agmtlist.c) had an illegal access defect.
Bug 633168 - Share backend dbEnv with the replication changelog
Bug 633168 - Share backend dbEnv with the replication changelog
Bug 631862 - crash - delete entries not in cache + referint
Bug 625014 - SubTree Renames: ModRDN operation fails and the server hangs if the entry is moved to "under" the same DN.
Bug 558099 - Enhancement request: Log more information about the search result being a paged one
Bug 635987 - Incorrect sub scope search result with
Bug 606920 - anonymous resource limit- nstimelimit -
Bug 635987 - Incorrect sub scope search result with ACL containing ldap:///self
Bug 639289 - Adding a new CN entry with UpperCase UTF-8 Character
Bug 640027 - Naming attribute with a special char sequence parsing bug
Bug 640854 - changelog db: _cl5WriteOperation: failed to
Bug 637852 - sasl_io_start_packet: failed - read only 3 bytes
Bug 586966 - Sample update script has syntax errors
Bug 586973 - Sample update ldif points to non-existent directory
Bug 602456 - Allow to add any cn=config attributes;
Bug 244229 - targetattr not verified against schema when setting an aci
Bug 643532 - Incorrect DNs sometimes returned on searches
Bug 592397 - Upgrade tool dn2rdn: it does not clean up
Bug 645061 - Upgrade: 06inetorgperson.ldif and 05rfc4524.ldif
Bug 629681 - Retro Changelog trimming does not behave as expected
Bug 644608 - RHDS 8.1->8.2 upgrade fails to properly migrate ACIs
Bug 644608 - RHDS 8.1->8.2 upgrade fails to properly migrate ACIs
Bug 644608 - RHDS 8.1->8.2 upgrade fails to properly migrate ACIs
Bug 638773 - permissions too loose on pid and lock files
Bug 491733 - dbtest crashes
Bug 329751 - "nested" filtered roles searches candidates more
Bug 567282 - server can not abandon searchRequest of "simple paged results"
Bug 572018 - Upgrading from 1.2.5 to 1.2.6.a2 deletes userRoot
Bug 651571 - When attrcrypt is on, entrydn is stored in the backend db
Bug 661918 - 389-ds MMR plugin's changelogdb path logic is incorrect
Bug 182507 - clear-password mod from replica is discarded before changelogged
Bug 602456 - Allow to add any cn=config attributes;
Bug 489379 - passwordExpirationTime in entry being added
Bug 663484 - Entry usn plugin fails to properly tag entries on initialization
Bug 664563 - GER: ger for non-present entry is not correct
Bug 653007 - db2ldif export of clear text passwords lacks storage scheme
Bug 667488 - Cannot recreate numsubordinates index with db2index
Bug 663752 - Cert renewal for attrcrypt and encchangelog
Bug 615100 - log rotationinfo always recreated at startup,
Bug 624442 - MMR: duplicate replica ID
Bug 669205 - db2bak: backed up changelog should include RUVs
Bug 616850 - ldapmodify failed to reject the replace operation
Bug 627993 - Inconsistent storage of password expiry times
Bug 627993 - Inconsistent storage of password expiry times
dn2rdn should respect the DB version info
Bug 646381 - Faulty password for nsmultiplexorcredentials does not give any error message in logs
Bug 624547 - attrcrypt should query the given slot/token for
Bug 668619 - slapd stops responding
Bug 151705 - Need to update Console Cipher Preferences with new ciphers
Bug 615052 - intrinsics and 64-bit atomics code fails to compile
Bug 616213 - insufficient stack size for HP-UX on PA-RISC
Bug 675265 - preventryusn gets added to entries on a failed delete
Bug 604881 - admin server log files have incorrect permissions/ownerships
Bug 676053 - export task followed by import task causes cache assertion
Bug 676053 - export task followed by import task causes cache assertion
Bug 676053 - export task followed by import task causes cache assertion
Bug 450016 - RFE- Console display values in KB/MB/GB
Cancelling commit aef19508c4f618285116d2068655183658f564d9
Bug 625424 - repl-monitor.pl doesn't work in hub node
Bug 679978 - modifying attr value crashes the server, which is supposed to
Bug 681015 - RFE: allow fine grained password policy duration attributes in days, hours, minutes, as well
Bug 668909 - Can't modify replication agreement in some cases
Bug 684996 - Exported tombstone cannot be imported correctly
Bug 681015 - RFE: allow fine grained password policy duration attributes in days, hours, minutes, as well
Bug 689866 - ns-newpwpolicy.pl needs to use the new DN format
Bug 690955 - Mrclone fails due to the replica generation id mismatch
Bug 696407 - If an entry with a mixed case RDN is turned to be
Bug 697027 - 1 - minor memory leaks found by Valgrind + TET
Bug 697027 - 2 - minor memory leaks found by Valgrind + TET
Bug 697027 - 3 - minor memory leaks found by Valgrind + TET
Bug 697027 - 4 - minor memory leaks found by Valgrind + TET
Bug 697027 - 5 - minor memory leaks found by Valgrind + TET
Bug 697027 - 6 - minor memory leaks found by Valgrind + TET
Bug 697027 - 7 - minor memory leaks found by Valgrind + TET
Bug 697027 - 8 - minor memory leaks found by Valgrind + TET
Bug 697027 - 9 - minor memory leaks found by Valgrind + TET
Bug 697027 - 10 - minor memory leaks found by Valgrind + TET
Bug 697027 - 11 - minor memory leaks found by Valgrind + TET
Bug 697027 - 12 - minor memory leaks found by Valgrind + TET
Bug 697027 - 13 - minor memory leaks found by Valgrind + TET
Bug 697027 - 14 - minor memory leaks found by Valgrind + TET
Bug 697027 - 15 - minor memory leaks found by Valgrind + TET
Bug 697027 - 16 - minor memory leaks found by Valgrind + TET
Bug 697027 - 3 - minor memory leaks found by Valgrind + TET
Bug 697027 - 3 - minor memory leaks found by Valgrind + TET
Bug 700215 - ldclt core dumps
Bug 668619 - slapd stops responding
Bug 709826 - Memory leak: when extra referrals configured
Bug 706179 - DS can not restart after create a new objectClass has entryusn attribute
Bug 663752 - Cert renewal for attrcrypt and encchangelog
Bug 663752 - Cert renewal for attrcrypt and encchangelog
Bug 711679 - unresponsive LDAP service when deleting vlv on replica
Bug 711679 - unresponsive LDAP service when deleting vlv on replica
Bug 718303 - Intensive updates on masters could break the consumer's cache
Merge branch '718303'
Bug 719069 - clean up compiler warnings in 389-ds-base 1.2.9
Bug 712855 - Directory Server 8.2 logs "Netscape Portable
Bug 663752 - Cert renewal for attrcrypt and encchangelog
Bug 732153 - subtree and user account lockout policies implemented?
Introducing an environment variable USE_VALGRIND to clean up the entry cache and dn cache on exit.
Bug 744945 - nsslapd-counters attribute value cannot be set to "off"
Keep unhashed password psuedo-attribute in the adding entry
Reduce the number of DN normalization
Bug 745259 - Incorrect entryUSN index under high load
Bug 750622 - Fix Coverity (11104) Resource leak:
Bug 750624 - Fix Coverity (11053) Explicit null dereferenced:
Bug 750625 - Fix Coverity (11066) Unused pointer value
Bug 750625 - Fix Coverity (11065) Uninitialized pointer read
Bug 750625 - Fix Coverity (11064) Dereference before null check
Bug 750625 - Fix Coverity (11061) Resource leak
Bug 750625 - Fix Coverity (11060) Dereference null return value
Bug 750625 - Fix Coverity (11058, 11059) Dereference null return value
Bug 750625 - Fix Coverity (11057) Dereference null return value
Bug 750625 - Fix Coverity (11055) Explicit null dereferenced
Bug 750625 - Fix Coverity (11054) Dereference after null check
Bug 750625 - Fix Coverity (11117) Uninitialized pointer read
Bug 750625 - Fix Coverity (11116) Uninitialized pointer read
Bug 750625 - Fix Coverity (11114, 11115) Uninitialized value use
Bug 750625 - Fix Coverity (11113) Uninitialized pointer read
Bug 750625 - Fix Coverity (11112) Uninitialized pointer read
Bug 750625 - Fix Coverity (11109, 11110, 11111) Uninitialized pointer read
Bug 750625 - Fix Coverity (11108) Sizeof not portable
Bug 750625 - Fix Coverity (11107) Dereference before null check
Bug 750625 - Fix Coverity (11096) Explicit null dereferenced
Bug 750625 - Fix Coverity (11095) Explicit null dereferenced
Bug 750625 - Fix Coverity (11094) Dereference after null check
Bug 750625 - Fix Coverity (11091) Unchecked return value
Bug 750625 - Fix Coverity (11055-2) Explicit null dereferenced
Bug 750625 - Fix Coverity (11062) Resource leak
Bug 750625 - Fix Coverity (11066-2) Unused pointer value
Bug 750625 - Fix Coverity (12195) Dereference after null check
Bug 750625 - Fix Coverity (12196) Dereference before null check
Bug 750625 - Fix Coverity (11066-3) Unused pointer value
Bug 745259 - Incorrect entryUSN index under high load in
Trac Ticket 2 - If node entries are tombstone'd,
Trac Ticket 2 - If node entries are tombstone'd,
Trac Ticket 26 - Please support setting
Trac Ticket 75 - Unconfigure plugin opperations are being called.
Trac Ticket 168 - minssf should not apply to rootdse
Trac Ticket #18 - Data inconsitency during replication
Trac Ticket #52 - FQDN set to nsslapd-listenhost
Trac Ticket 139 - eliminate the use of char *dn in favor of Slapi_DN *dn
Trac Ticket 35 - Log not clear enough on schema errors
Trac Ticket #274 - Reindexing entryrdn fails if
Trac Ticket #275 - Invalid read reported by valgrind
Trac Ticket 51 - memory leaks in 389-ds-base-1.2.8.2-1.el5?
Trac Ticket #27 - SASL/PLAIN binds do not work
Trac Ticket #84 - 389 Directory Server Unnecessary Checkpoints
Trac Ticket #169 - allow 389 to use db5
Trac Ticket #34 - remove-ds.pl does not remove everything
Trac Ticket #26 - Please support setting defaultNamingContext in the rootdse.
Trac Ticket #298 - crash when replicating orphaned tombstone entry
Trac Ticket #290 - server hangs during shutdown if betxn pre/post op fails
Trac Ticket #290 - server hangs during shutdown if betxn pre/post op fails
Minor bug fix introcuded by commit 69c9f3bf7dd9fe2cadd5eae0ab72ce218b78820e
Trac Ticket #260 - 389 DS does not support multiple
Fixing compiler warnings
Trac Ticket #303 - make DNA range requests work with transactions
coverity 12606 Logically dead code
Trac Ticket #46 - setup-ds-admin.pl does not like ipv6 only hostnames
Trac Ticket #46 (revised) - setup-ds-admin.pl does not like ipv6 only hostnames
Trac Ticket #46 - (take 3) setup-ds-admin.pl does not like ipv6 only hostnames
Trac Ticket #46 - (additional) setup-ds-admin.pl does not
Trac Ticket #45 - Fine Grained Password policy:
Trac Ticket #46 - (additional 2) setup-ds-admin.pl does not like ipv6 only hostnames
Trac Ticket #335 - transaction retries need to be cache aware
Trac Ticket #338 - letters in object's cn get converted to
Trac Ticket #310 - Avoid calling escape_string() for logged DNs
Trac Ticket #19 - Convert entryUSN plugin to transaction aware type
Trac Ticket #345 - db deadlock return should not log error
Trac Ticket #359 - Database RUV could mismatch the one
Trac Ticket #338 - letters in object's cn get converted to
Trac Ticket #359 - Database RUV could mismatch the one
Trac Ticket #335 - transaction retries need to be cache aware
Bug 829213 - unhashed#user#password visible after changing password https://bugzilla.redhat.com/show_bug.cgi?id=829213
Bug 829213 - unhashed#user#password visible after changing password https://bugzilla.redhat.com/show_bug.cgi?id=829213
Bug 829213 - unhashed#user#password visible after changing password https://bugzilla.redhat.com/show_bug.cgi?id=829213
audit log does not log unhashed password: enabled, by default.
Trac Ticket 396 - Account Usability Control Not Working [Bug 835238]
Trac Ticket #346 - Slow ldapmodify operation time for large quantities of multi-valued attribute values
Trac Ticket #346 - Slow ldapmodify operation time for large quantities of multi-valued attribute values
12813: Uninitialized pointer read
Trac Ticket #412 - memberof performance enhancement
Trac Ticket #409 - Report during startup if nsslapd-cachememsize is too small
Coverity defects
Trac Ticket #346 - Slow ldapmodify operation time for large
Rich Megginson (362):
Net::LDAP password modify extop breaks; msgid in response is 0xFF
Clean up assert for entrydn
Bug 543080 - Bitwise plugin fails to return the exact matched entries for Bitwise search filter
Bug 537466 - nsslapd-distribution-plugin should not require plugin name to begin with "lib"
bump version to 1.2.6.a2
Do not use syntax plugins directly for filters, indexing
wrap new style matching rule plugins for use in old style indexing code
change extensible filter code to use new syntax function style mr funcs
change syntax plugins to register required matching rule plugins
crash looking up compat syntax; numeric string syntax using integer; make octet string ordering work correctly
fix memory leak in attr replace when replacement fails
fix dso linking issues found by fedora 13 linking
problems linking with -z defs
389 DS segfaults on libsyntax-plugin.so - part 1
389 DS segfaults on libsyntax-plugin.so - part 2
389 DS segfaults on libsyntax-plugin.so - part 3
Bug 460162 - FedoraDS "with-FHS" installs init.d StartupScript in wrong location on non-RHEL/Fedora OS
Bug 568196 - Install DS8.2 on Solaris fails
Bug 568196 - Install DS8.2 on Solaris fails - part 2
Bug 551198 - LDAPI: incorrect logging to access log
bump version to 1.2.6.a3
fix various memory leaks
Bug 551198 - LDAPI: incorrect logging to access log - part 2
Bug 554573 - ACIs use bind DN from bind req rather than cert mapped DN from sasl/external
cleanup build warnings
Bug 571514 - upgrade to 1.2.6 should upgrade 05rfc4523.ldif (cert schema)
Bug 570905 - postalAddress syntax should allow empty lines (should allow $$)
Add support for additional schema/matching rules included with 389
Bug 572677 - Memory leak in searches including GER control
Bug 571677 - Busy replica on consumers when directly deleting a replication conflict
Bug 576074 - search filters with parentheses fail
Bug 567429 - slapd didn't close connection and get into CLOSE_WAIT state
Bug 578167 - repl. of mod/replace deletes multi-valued attrs
Bug 561575 - setup-ds-admin fails to supply nsds5ReplicaName when configuring via ConfigFile
Bug 572162 - the string "|*" within a search filter on a non-indexed attribute returns all elements.
Bug 576644 - segfault while multimaster replication (paired node won't find deleted entries)
start of 1.2.6.a4
Bug 572018 - Upgrading from 1.2.5 to 1.2.6.a2 deletes userRoot
Fix too few args for format warning in acllas
Bug 586571 - DS Console shows escaped DNs
Bug 591685 - Server instances Fail to Start on Solaris due to Library Path and pcre
bump console version to 1.2.3
Repl Session API needs to check for NULL api before init
Bug 593392 - setup-ds-admin.pl -k creates world readable file
Bug 595874 - 99user.ldif getting overpopulated
bump version to 1.2.6.a5
bump version to 1.2.6.rc1
bump version to 1.2.6.rc2
bump version to 1.2.6.rc3
Bug 604453 - SASL Stress and Server crash: Program quits with the assertion failure in PR_Poll
Bug 604453 - SASL Stress and Server crash: Program quits with the assertion failure in PR_Poll
Bug 603942 - null deref in _ger_parse_control() for subjectdn
bump version to 1.2.6.rc4
Bug 609590 - fix coverity Defect Type: Memory - corruptions issues
Bug 609590 - fix coverity Defect Type: Memory - corruptions issues
Bug 609590 - fix coverity Defect Type: Memory - corruptions issues
Bug 609590 - fix coverity Defect Type: Memory - corruptions issues
Bug 609590 - fix coverity Defect Type: Memory - corruptions issues
Bug 609590 - fix coverity Defect Type: Memory - corruptions issues
Bug 609590 - fix coverity Defect Type: Memory - corruptions issues
Bug 609590 - fix coverity Defect Type: Memory - corruptions issues
Bug 609590 - fix coverity Defect Type: Memory - corruptions issues
Bug 602530 - coverity: op_shared_modify: compare pre, post and original entries before freeing them
Bug 602531 - coverity: op_shared_delete: compare preop entry and GLUE_PARENT_ENTRY before freeing them
Bug 609590 - fix coverity Defect Type: Memory - corruptions issues
Bug 610177 - fix coverity Defect Type: Uninitialized variables issues
Bug 610276 - fix coverity Defect Type: API usage errors issues
Bug 611850 - fix coverity Defect Type: Error handling issues
Bug 614242 - C99/ANSI C++ related compile errors on HP-UX
Bug 547503 - replication broken again, with 389 MMR replication and TCP errors
Bug 617013 - repl-monitor.pl use cpu upto 90%
fix build failures due to libtool problems
Bug 617629 - Missing aliases in new schema files
Bug 617862 - Replication: Unable to delete tombstone errors
bump version to 1.2.7.a1
Bug 610281 - fix coverity Defect Type: Control flow issues - daemon.c:write_function()
Bug 610281 - fix coverity Defect Type: Control flow issues - last repl init status
postalAddress syntax does not accept empty values
ger should support both "dn" and "distinguishedName"
openldap - ldap_url_parse_ext is not part of the public api
fix memleak in ldbm_config_read_instance_entries
Add -x option to ldap tools when using openldap
openldap - add support for missing controls, add ldif api, fix NSS usage
port client tools to use openldap API
use the mozldap versions of the proxy auth control create function
document slapi wrappers for openldap/mozldap functions that differ
fix some compiler warnings
use strcasecmp with ptype and type->bv_val
ber_printf 'o' cannot handle NULL bv_val
fix the url_parse logic when looking for a missing suffix DN
openldap ldapsearch uses -LLL to suppress # version: N
add ldaptool_opts for the non BUNDLE case in Makefile.am
openldap ldapsearch returns empty line at end of LDIF output
have to use LDAP_OPT_X_TLS_NEVER to defeat cert hostname checking
openldap_read_function needs to set EWOULDBLOCK if the buffer is empty
do not terminate unwrapped LDIF line with another newline
slapi_ldap_url_parse must handle multiple host:port in url
convert mozldap host list to openldap uri list
move the out pointer back if continuation lines were removed
check src < *out only; only check for \nspace if src < *out - 2
use slapi_ldap_url_parse in the acl code
do not un-null-terminate normalized DN until new url is constructed
implement slapi_ldap_explode_dn and slapi_ldap_explode_rdn
use slapi_pblock_set to set the ldap result code for the be postop plugins
pass the string copy to slapi_dn_normalize_original
bug 614511 - fix coverity null reference - revert macro aci $dn logic
fix compiler warnings - unused vars/funcs, invalid casts
use slapi_mods_init_passin/get_ldapmods_passout if modifying the smods
Have to explicitly set protocol version to 3
Only check modrdn ops for backend/suffix correctness if not the default backend
Bug 634561 - Server crushes when using Windows Sync Agreement
openldap ber_init will assert if the bv->bv_val is NULL
add the account policy plugin and related server code, schema, and config
fix pblock memory leak
do not register pre/post op plugins if disabled
add support for global inactivity limit
fix typos in Makefile.am, acctpolicy schema
bump version to 1.2.7.a2
remove extra format argument; use %lu for size_t printf format
Bug 644013 - uniqueness plugin segfault bug
bump version to 1.2.7.a3
bump to 1.2.7.a4
bump version to 1.2.7.a5
put replication config entries in separate file
bump version to 1.2.7.a6
bump version to 1.2.7.1
bump version to 1.2.7.2
bump version to 1.2.7.3
bump version to 1.2.7.4
Bug 515329 - Multiple mods in one operation can result in an inconsistent replica
bump version to 1.2.8.a1
Bug 642046 - Segfault when using SASL/GSSAPI multimaster replication, possible krb5_creds doublefree
Bug 624485 - setup dsktune check step should default to "yes" if no problems found
Bug 622907 - support piped passwords to perl-based maintenance commands
Bug 624485 - setup dsktune check step should default to "yes" if no problems found
Bug 576534 - Password displayed on console when entered in command-line utilities
Bug 667935 - DS pipe log script's logregex.py plugin is not redirecting the log output to the text file
bump version to 1.2.8.a2
Bug 668385 - DS pipe log script is executed as many times as the dirsrv service is restarted
Bug 676689 - crash while adding a new user to be synced to windows
Bug 675113 - ns-slapd core dump in windows_tot_run if oneway sync is used
Bug 677440 - clean up compiler warnings in 389-ds-base 1.2.8
Bug 677774 - DS fails to start after reboot
Bug 666076 - dirsrv crash (1.2.7.5) with multiple simple paged result searches
Bug 675320 - empty modify operation with repl on or lastmod off will crash server
bump version to 1.2.9.a1 - console version to 1.2.4
Bug 677705 - ds-logpipe.py script is failing to validate "-s" and "--serverpid" options with "-t".
Bug 676655 - winsync stops working after server restart
Bug 680555 - ns-slapd segfaults if I have more than 100 DBs
Bug 514190 - setup-ds-admin.pl --debug does not log to file
Bug 518890 - setup-ds-admin.pl - improve hostname validation
Bug 644784 - Memory leak in "testbind.c" plugin
Bug 683250 - slapd crashing when traffic replayed
Bug 690584 - #10691 ldbm_back_init() - fix coverity resource leak issues
Bug 690584 - #10690 #10689 attrcrypt_get_ssl_cert_name() - fix coverity resource leak issues
Bug 690584 - #10688 - dblayer_make_env - fix coverity resource leak issues
Bug 690584 - #10669 #10668 cl5ImportLDIF - fix coverity resource leak issues
Bug 690584 - #10658 linked_attrs_pre_op - fix coverity resource leak issues
Bug 690584 - #10655 acllas__handle_group_entry - fix coverity resource leak issues
Bug 690584 - #10654 #10653 str2entry_dupcheck - fix coverity resource leak issues
Bug 690584 - #10652 #10651 #10650 #10649 #10648 #10647 send_specific_attrs send_all_attrs - fix coverity resource leak issues
Bug 690584 - #10643 hash_rootpw - fix coverity resource leak issues
Bug 690584 - #10641 reslimit_bv2int - fix coverity resource leak issues
Bug 691422 - sdt_destroy - fix coverity control flow issues
Bug 691422 - ldbm_back_upgradedb - fix coverity control flow issues
Bug 691422 - csnplFree - fix coverity control flow issues
Bug 691422 - SetUnicodeStringFromUTF_8 - fix coverity control flow issues
Bug 691422 - cl5DeleteRUV - fix coverity control flow issues
Bug 691422 - acl_read_access_allowed_on_entry - fix coverity control flow issues
Bug 691422 - search_internal_callback_pb - fix coverity control flow issues
Bug 691422 - cl5WriteRUV - fix coverity control flow issues
Bug 691422 - windows_replay_update - fix coverity control flow issues
Bug 690584 - #10691 ldbm_back_init() - fix coverity resource leak issues
Bug 690584 - #10652 #10651 #10650 #10649 #10648 #10647 send_specific_attrs send_all_attrs - fix coverity resource leak issues
Bug 668385 - DS pipe log script is executed as many times as the dirsrv service is restarted
Bug 692937 - Replica install fails after step for "enable GSSAPI for replication"
Bug 692331 - Segfault on index update during full replication push on 1.2.7.5
Bug 693451 - cannot use localized matching rules
Bug 693455 - nsMatchingRule does not work with multiple values
Bug 693503 - matching rules do not inherit from superior attribute type
Bug 693466 - Unable to change schema online
Bug 692991 - rhds82 - windows_tot_run: failed to obtain data to send to the consumer; LDAP error - -1
Bug 693473 - rhds82 rfe - windows_tot_run to log Sizelimit exceeded instead of LDAP error - -1
Bug 693962 - Full replica push loses some entries with multi-valued RDNs
Bug 694336 - Group sync hangs Windows initial Sync
Bug 700145 - userpasswd not replicating
Bug 703990 - Support upgrade from Red Hat Directory Server
bump console version to 1.2.5
Bug 703990 - Support upgrade from Red Hat Directory Server
Bug 703990 - Support upgrade from Red Hat Directory Server
Bug 707015 - Cannot disable SSLv3 and use TLS only
bump version to 1.2.9.a2
Bug 707384 - only allow FIPS approved cipher suites in FIPS mode
Bug 711906 - ns-slapd segfaults using suffix referrals
Bug 706209 - LEGAL: RHEL6.1 License issue for 389-ds-base package
Bug 703703 - setup-ds-admin.pl asks for legal agreement to a non-existant file
Bug 711679 - unresponsive LDAP service when deleting vlv on replica
bump console version to 1.2.6
Bug 697694 - rhds82 - incr update state stop_fatal_error "requires administrator action", with extop_result: 9
Bug 716980 - winsync uses old AD entry if new one not found
add support for ldif files with changetype: add
writing Inf file shows SchemaFile = ARRAY(0xhexnum)
look for separate openldap ldif library
bump version to 1.2.9.a3
Bug 709468 - RSA Authentication Server timeouts when using simple paged results on RHDS 8.2.
Bug 720059 - RDN with % can cause crashes or missing entries
bump version to 1.2.9.0
Bug 725542 - Instance upgrade fails when upgrading 389-ds-base package
Bug 725953 - Winsync: DS entries fail to sync to AD, if the User's CN entry contains a comma
Bug 723937 - replication failing on RUV errors
bump version to 1.2.9.1
Bug 727511 - ldclt SSL search requests are failing with "illegal error number -1" error
bump version to 1.2.9.2
Bug 727511 - ldclt SSL search requests are failing with "illegal error numbe
bump version to 1.2.9.3
Bug 727511 - ldclt SSL search requests are failing with "illegal error number -1" error
bump version to 1.2.9.4
Bug 727511 - ldclt SSL search requests are failing with "illegal error number -1" error
bump version to 1.2.9.5
Bug 729378 - delete user subtree container in AD + modify password in DS == DS crash
Bug 723937 - replication failing on RUV errors
Bug 729369 - upgrade DB to upgrade from entrydn to entryrdn format is not working.
make sure the DBVERSION file ends in a newline
bump version to 1.2.10.a1
Bug 633803 - passwordisglobalpolicy attribute brakes TLS chaining
Bug 733103 - large targetattr list with syntax errors cause server to crash or hang
Bug 703990 - cross-platform - Support upgrade from Red Hat Directory Server
Bug 735121 - simple paged search + ip/dns based ACI hangs server
Bug 695736 - Providing native systemd file for upcoming F15 Feature Systemd
Bug 590826 - Reloading database from ldif causes changelog to emit "data no longer matches" errors
Bug 736712 - Modifying ruv entry deadlocks server
Add support for pre/post db transaction plugins
Make all backend operations transaction aware
Bug 741744 - MOD operations with chained delete/add get back error 53 on backend config
Bug 742324 - allow nsslapd-idlistscanlimit to be set dynamically and per-user
Bug 741744 - part2 - MOD operations with chained delete/add get back error 53 on backend config
Bug 740942 - allow resource limits to be set for paged searches independently of limits for other searches/operations
bump version to 1.2.10.a2
bump version to 1.2.10.a3
fix transaction support in ldbm_delete
bump version to 1.2.10.a4
set the ENTRY_POST_OP for modrdn betxnpostoperation plugins
pass the plugin config entry to the plugin init function
make memberof transaction aware and able to be a betxnpostoperation plugin
Bug 741744 - part3 - MOD operations with chained delete/add get back error 53
bump version to 1.2.10.a5
Change referential integrity to be a betxnpostoperation plugin
Use new PLUGIN_CONFIG_ENTRY feature to allow switching between txn and regular
Bug 748575 - rhds81 modrn operation and 100% cpu use in replication
Bug 748575 - part 2 - rhds81 modrdn operation and 100% cpu use in replication
Bug 751495 - 'setup-ds.pl -u' fails with undefined routine 'updateSystemD'
bump version to 1.2.10.a6
Bug 751645 - crash when simple paged fails to send entry to client
csn_as_string - use slapi_uN_to_hex instead of sprintf
uniqueid formatting - use slapi_u8_to_hex instead of sprintf
fix member variable name error in slapi_uniqueIDFormat
reduce calls to csn_as_string and slapi_log_error
csn_init_as_string should not use sscanf
use slapi_hexchar2int and slapi_str_to_u8 everywhere
Bug 755754 - Unable to start dirsrv service using systemd
Bug 755725 - 389 programs linked against openldap crash during shutdown
Ticket 1 - pre-normalize filter and pre-compile substring regex - and other optimizations
Ticket #162 - Infinite loop / spin inside strcmpi_fast, acl_read_access_allowed_on_attr, server DoS
bak2db gets stuck in infinite loop
Ticket #256 - debug build assertion in ACL_EvalDestroy()
bump version to 1.2.10.a7
Ticket #167 - Mixing transaction and non-transaction plugins can cause deadlock
fix mep sdn compiler warnings
add a hack to disable sasl hostname canonicalization - helps with testing when you don't want to set up correct host name resolution and/or cannot set the default system hostname
Ticket #12 - 389 DS DNA Plugin / Replication failing on GSSAPI
Ticket #257 - repl-monitor doesn't work if leftmost hostnames are the same
fix recent compiler warnings
Ticket #15 - Get rid of rwlock.h/rwlock.c and just use slapi_rwlock instead
fix compiler warnings
Remove redundant code - make a global into a static
Ticket #262 - pid file not removed with systemd
fix mozldap build issues
Ticket #264 - upgrade needs better check for "server is running"
Ticket #263 - add systemd include directive
bump version to 1.2.10.rc1
change version to 1.2.10.a8
Ticket #272 - add tombstonenumsubordinates to schema
bump version to 1.2.10.rc1
Ticket #161 - Review and address latest Coverity issues
Ticket #22 - RFE: Support sendmail LDAP routing schema
Ticket #29 - Samba3-schema is missing sambaTrustedDomainPassword
Ticket #273 - ruv tombstone searches don't work after reindex entryrdn
Ticket #273 - ruv tombstone searches don't work after reindex entryrdn
fix a couple of minor coverity issues
Ticket #87 - Manpages fixes
Ticket #13 - slapd process exits when put the database on read only mode while updates are coming to the server
Ticket #55 - Limit of 1024 characters for nsMatchingRule
Ticket #277 - cannot set repl referrals or state
Ticket #278 - Schema replication update failed: Invalid syntax
Ticket #277 - cannot set repl referrals or state
Ticket #279 - filter normalization does not use matching rules
Ticket #280 - extensible binary filters do not work
Ticket #281 - TLS not working with latest openldap
coverity 12488 Resource leak In attr_index_config(): Leak of memory or pointers to system resources
bump version to 1.2.10.rc2
fix compiler warning in acct policy plugin
bump version to 1.2.11.a1
Ticket #294 - 389 DS Segfaults during replica install in FreeIPA
coverity uninit var and resource leak
Revert "Ticket #111 - ability to control behavior of modifyTimestamp/modifiersName"
Revert "Ticket #167 - Mixing transaction and non-transaction plugins can cause deadlock"
Revert "Change referential integrity to be a betxnpostoperation plugin"
Revert "make memberof transaction aware and able to be a betxnpostoperation plugin"
Revert "pass the plugin config entry to the plugin init function"
coverity 12559 Uninitialized pointer read In ldbm_back_modify(): Reads an uninitialized pointer or its target
Ticket #281 - TLS not working with latest openldap
Trac Ticket #298 - crash when replicating orphaned tombstone entry
Ticket #301 - implement transaction support using thread local storage
init txn thread private data for all database modes
handle null smods
memleak in mep_parse_config_entry
memleak in normalize_mods2bvals
destroy the entry cache and dn cache in the dse post op delete callback
Ticket #289 - allow betxn plugin config changes
coverity 12563 Read from pointer after free
Ticket 317 - RHDS fractional replication with excluded password policy attributes leads to wrong error messages.
Ticket #305 - Certain CMP operations hang or cause ns-slapd to crash
Ticket #320 - allow most plugins to be betxn plugins
Ticket #324 - Sync with group attribute containing () fails
Ticket #324 - redux: Sync with group attribute containing () fails
Ticket #316 and Ticket #70 - add post add/mod and AD add callback hooks
Ticket #261 - Add Solaris i386
Ticket #331 - transaction errors with db 4.3 and db 4.2
schema def must have DESC '' - close paren must be preceded by space
Ticket #336 - [abrt] 389-ds-base-1.2.10.4-2.fc16: index_range_read_ext: Process /usr/sbin/ns-slapd was killed by signal 11 (SIGSEGV)
Ticket #336 - [abrt] 389-ds-base-1.2.10.4-2.fc16: index_range_read_ext: Process /usr/sbin/ns-slapd was killed by signal 11 (SIGSEGV)
Ticket #347 - IPA dirsvr seg-fault during system longevity test
Ticket #348 - crash in ldap_initialize with multiple threads
Ticket #351 - use betxn plugins by default
Ticket #353 - coverity 12625-12629 - leaks, dead code, unchecked return
bump version to 1.2.11.1
Ticket #348 - crash in ldap_initialize with multiple threads
Ticket #351 - use betxn plugins by default
bump version to 1.2.11.2
Ticket #358 - managed entry doesn't delete linked entry
bump version to 1.2.11.3
Trac Ticket #359 - Database RUV could mismatch the one in changelog under the stress
Ticket #321 - krbExtraData is being null modified and replicated on each ssh login
Ticket #360 - ldapmodify returns Operations error
Ticket #382 - DS Shuts down intermittently
Ticket #383 - usn + mmr = deletions are not replicated
bump version to 1.2.11.4
fix coverity issues with uninit vals, no return checking
Ticket #389 - ADD operations not in audit log
Ticket #360 - ldapmodify returns Operations error - fix delete caching
Ticket #360 - ldapmodify returns Operations error - fix delete caching
improve txn test index handling
Ticket #387 - managed entry sometimes doesn't delete the managed entry
Ticket #387 - managed entry sometimes doesn't delete the managed entry
bump version to 1.2.11.5
bump version to 1.2.11.6
Ticket 378 - unhashed#user#password visible after changing password
bump version to 1.2.11.7
Ticket #405 - referint modrdn not working if case is different
Ticket #406 - Impossible to rename entry (modrdn) with Attribute Uniqueness plugin enabled
Ticket #410 - Referential integrity plug-in does not work when update interval is not zero
Ticket #425 - support multiple winsync plugins
nturpin (1):
Ticket #3: acl cache overflown problem
root (4):
Bug 480787 - Autoconf parameter --with and --without
Ticket #326 - MemberOf plugin should work on all backends
Ticket #337 - RFE - Improve CLEANRUV functionality
Ticket #216 - RFE - Disable replication agreements
---
.gitignore | 1
Makefile.am | 279
Makefile.in | 5303 -
README | 11
VERSION.sh | 7
aclocal.m4 | 6996 --
compile | 21
config.guess | 302
config.h.in | 25
config.sub | 232
configure |41959 +++++-------
configure.ac | 196
depcomp | 172
dirsrv.pc.in | 7
include/base/dbtbase.h | 2
include/base/file.h | 3
include/base/lexer.h | 126
include/base/rwlock.h | 91
include/i18n.h | 115
include/ldaputil/ldaputil.h | 10
include/libaccess/aclerror.h | 1
include/libaccess/aclproto.h | 15
include/libaccess/aclstruct.h | 2
include/libaccess/dbtlibaccess.h | 3
include/public/nsacl/aclapi.h | 7
install-sh | 517
ldap/admin/src/base-initconfig.in | 44
ldap/admin/src/initconfig.in | 37
ldap/admin/src/logconv.pl | 809
ldap/admin/src/scripts/10cleanupldapi.pl | 23
ldap/admin/src/scripts/10fixrundir.pl | 11
ldap/admin/src/scripts/50acctusabilityplugin.ldif | 21
ldap/admin/src/scripts/50automemberplugin.ldif | 15
ldap/admin/src/scripts/50fixNsState.pl | 240
ldap/admin/src/scripts/50managedentriesplugin.ldif | 16
ldap/admin/src/scripts/50refintprecedence.ldif | 4
ldap/admin/src/scripts/50smd5pwdstorageplugin.ldif | 5
ldap/admin/src/scripts/60upgradeschemafiles.pl | 2
ldap/admin/src/scripts/70upgradefromldif.pl | 108
ldap/admin/src/scripts/80upgradednformat.pl | 206
ldap/admin/src/scripts/81changelog.pl | 34
ldap/admin/src/scripts/90subtreerename.pl | 21
ldap/admin/src/scripts/91subtreereindex.pl | 148
ldap/admin/src/scripts/DSCreate.pm.in | 338
ldap/admin/src/scripts/DSDialogs.pm | 6
ldap/admin/src/scripts/DSMigration.pm.in | 47
ldap/admin/src/scripts/DSUpdate.pm.in | 50
ldap/admin/src/scripts/DSUtil.pm.in | 329
ldap/admin/src/scripts/DialogManager.pm | 241
ldap/admin/src/scripts/DialogManager.pm.in | 241
ldap/admin/src/scripts/Inf.pm | 67
ldap/admin/src/scripts/Migration.pm.in | 20
ldap/admin/src/scripts/Setup.pm.in | 20
ldap/admin/src/scripts/SetupDialogs.pm.in | 31
ldap/admin/src/scripts/SetupLog.pm | 8
ldap/admin/src/scripts/dnaplugindepends.ldif | 3
ldap/admin/src/scripts/ds-logpipe.py | 221
ldap/admin/src/scripts/exampleupdate.ldif | 2
ldap/admin/src/scripts/exampleupdate.sh | 10
ldap/admin/src/scripts/logregex.py | 16
ldap/admin/src/scripts/migrate-ds.pl.in | 13
ldap/admin/src/scripts/remove-ds.pl.in | 30
ldap/admin/src/scripts/repl-monitor.pl.in | 86
ldap/admin/src/scripts/restart-dirsrv.in | 25
ldap/admin/src/scripts/setup-ds.pl.in | 7
ldap/admin/src/scripts/setup-ds.res.in | 35
ldap/admin/src/scripts/start-dirsrv.in | 43
ldap/admin/src/scripts/stop-dirsrv.in | 27
ldap/admin/src/scripts/template-bak2db.in | 49
ldap/admin/src/scripts/template-bak2db.pl.in | 29
ldap/admin/src/scripts/template-cleanallruv.pl.in | 186
ldap/admin/src/scripts/template-db2bak.in | 53
ldap/admin/src/scripts/template-db2bak.pl.in | 29
ldap/admin/src/scripts/template-db2index.in | 14
ldap/admin/src/scripts/template-db2index.pl.in | 33
ldap/admin/src/scripts/template-db2ldif.in | 15
ldap/admin/src/scripts/template-db2ldif.pl.in | 29
ldap/admin/src/scripts/template-dbverify.in | 15
ldap/admin/src/scripts/template-dn2rdn.in | 25
ldap/admin/src/scripts/template-fixup-linkedattrs.pl.in | 29
ldap/admin/src/scripts/template-fixup-memberof.pl.in | 29
ldap/admin/src/scripts/template-ldif2db.in | 15
ldap/admin/src/scripts/template-ldif2db.pl.in | 29
ldap/admin/src/scripts/template-ldif2ldap.in | 19
ldap/admin/src/scripts/template-monitor.in | 19
ldap/admin/src/scripts/template-ns-accountstatus.pl.in | 33
ldap/admin/src/scripts/template-ns-activate.pl.in | 33
ldap/admin/src/scripts/template-ns-inactivate.pl.in | 33
ldap/admin/src/scripts/template-ns-newpwpolicy.pl.in | 47
ldap/admin/src/scripts/template-restart-slapd.in | 2
ldap/admin/src/scripts/template-restoreconfig.in | 15
ldap/admin/src/scripts/template-saveconfig.in | 15
ldap/admin/src/scripts/template-schema-reload.pl.in | 29
ldap/admin/src/scripts/template-start-slapd.in | 3
ldap/admin/src/scripts/template-stop-slapd.in | 2
ldap/admin/src/scripts/template-suffix2instance.in | 15
ldap/admin/src/scripts/template-syntax-validate.pl.in | 29
ldap/admin/src/scripts/template-upgradedb.in | 15
ldap/admin/src/scripts/template-upgradednformat.in | 63
ldap/admin/src/scripts/template-usn-tombstone-cleanup.pl.in | 29
ldap/admin/src/scripts/template-verify-db.pl.in | 19
ldap/admin/src/scripts/template-vlvindex.in | 15
ldap/admin/src/slapd.inf.in | 2
ldap/admin/src/template-initconfig.in | 18
ldap/docs/LICENSE.txt | 132
ldap/docs/README.txt | 11
ldap/include/ldaplog.h | 32
ldap/ldif/50replication-plugins.ldif | 26
ldap/ldif/template-baseacis.ldif.in | 2
ldap/ldif/template-bitwise.ldif.in | 6
ldap/ldif/template-dnaplugin.ldif.in | 2
ldap/ldif/template-dse.ldif.in | 107
ldap/ldif/template-suffix-db.ldif.in | 1
ldap/schema/00core.ldif | 72
ldap/schema/01core389.ldif | 25
ldap/schema/02common.ldif | 12
ldap/schema/05rfc4523.ldif | 14
ldap/schema/05rfc4524.ldif | 30
ldap/schema/06inetorgperson.ldif | 5
ldap/schema/10automember-plugin.ldif | 123
ldap/schema/10dna-plugin.ldif | 204
ldap/schema/10mep-plugin.ldif | 104
ldap/schema/30ns-common.ldif | 4
ldap/schema/50ns-directory.ldif | 4
ldap/schema/60acctpolicy.ldif | 47
ldap/schema/60nis.ldif | 2
ldap/schema/60pam-plugin.ldif | 3
ldap/schema/60qmail.ldif | 24
ldap/schema/60sabayon.ldif | 10
ldap/schema/60samba3.ldif | 34
ldap/schema/60sendmail.ldif | 54
ldap/schema/60sudo.ldif | 58
ldap/servers/plugins/acct_usability/acct_usability.c | 464
ldap/servers/plugins/acct_usability/acct_usability.h | 63
ldap/servers/plugins/acctpolicy/acct_config.c | 143
ldap/servers/plugins/acctpolicy/acct_init.c | 191
ldap/servers/plugins/acctpolicy/acct_plugin.c | 313
ldap/servers/plugins/acctpolicy/acct_util.c | 257
ldap/servers/plugins/acctpolicy/acctpolicy.h | 81
ldap/servers/plugins/acctpolicy/sampleconfig.ldif | 40
ldap/servers/plugins/acctpolicy/samplepolicy.ldif | 27
ldap/servers/plugins/acl/acl.c | 247
ldap/servers/plugins/acl/acl.h | 43
ldap/servers/plugins/acl/acl_ext.c | 152
ldap/servers/plugins/acl/aclanom.c | 24
ldap/servers/plugins/acl/acleffectiverights.c | 116
ldap/servers/plugins/acl/aclgroup.c | 19
ldap/servers/plugins/acl/aclinit.c | 2
ldap/servers/plugins/acl/acllas.c | 402
ldap/servers/plugins/acl/acllist.c | 79
ldap/servers/plugins/acl/aclparse.c | 615
ldap/servers/plugins/acl/aclplugin.c | 37
ldap/servers/plugins/acl/aclproxy.c | 232
ldap/servers/plugins/acl/aclutil.c | 117
ldap/servers/plugins/automember/automember.c | 2651
ldap/servers/plugins/automember/automember.h | 134
ldap/servers/plugins/bitwise/bitwise.c | 23
ldap/servers/plugins/chainingdb/cb.h | 8
ldap/servers/plugins/chainingdb/cb_add.c | 105
ldap/servers/plugins/chainingdb/cb_bind.c | 196
ldap/servers/plugins/chainingdb/cb_compare.c | 101
ldap/servers/plugins/chainingdb/cb_config.c | 34
ldap/servers/plugins/chainingdb/cb_conn_stateless.c | 102
ldap/servers/plugins/chainingdb/cb_controls.c | 36
ldap/servers/plugins/chainingdb/cb_delete.c | 125
ldap/servers/plugins/chainingdb/cb_init.c | 6
ldap/servers/plugins/chainingdb/cb_instance.c | 325
ldap/servers/plugins/chainingdb/cb_modify.c | 133
ldap/servers/plugins/chainingdb/cb_modrdn.c | 176
ldap/servers/plugins/chainingdb/cb_monitor.c | 6
ldap/servers/plugins/chainingdb/cb_schema.c | 4
ldap/servers/plugins/chainingdb/cb_search.c | 223
ldap/servers/plugins/chainingdb/cb_utils.c | 15
ldap/servers/plugins/collation/collate.c | 24
ldap/servers/plugins/collation/orfilter.c | 19
ldap/servers/plugins/cos/cos.c | 52
ldap/servers/plugins/cos/cos_cache.c | 768
ldap/servers/plugins/deref/deref.c | 16
ldap/servers/plugins/dna/dna.c | 1785
ldap/servers/plugins/http/http_impl.c | 81
ldap/servers/plugins/linkedattrs/fixup_task.c | 119
ldap/servers/plugins/linkedattrs/linked_attrs.c | 237
ldap/servers/plugins/linkedattrs/linked_attrs.h | 7
ldap/servers/plugins/memberof/memberof.c | 1075
ldap/servers/plugins/memberof/memberof.h | 11
ldap/servers/plugins/memberof/memberof_config.c | 275
ldap/servers/plugins/mep/mep.c | 2837
ldap/servers/plugins/mep/mep.h | 130
ldap/servers/plugins/pam_passthru/pam_passthru.h | 48
ldap/servers/plugins/pam_passthru/pam_ptconfig.c | 715
ldap/servers/plugins/pam_passthru/pam_ptimpl.c | 79
ldap/servers/plugins/pam_passthru/pam_ptpreop.c | 587
ldap/servers/plugins/passthru/passthru.h | 4
ldap/servers/plugins/passthru/ptbind.c | 6
ldap/servers/plugins/passthru/ptconfig.c | 43
ldap/servers/plugins/passthru/ptconn.c | 8
ldap/servers/plugins/passthru/ptpreop.c | 17
ldap/servers/plugins/pwdstorage/smd5_pwd.c | 9
ldap/servers/plugins/referint/referint.c | 778
ldap/servers/plugins/replication/cl4_api.c | 2
ldap/servers/plugins/replication/cl5.h | 1
ldap/servers/plugins/replication/cl5_api.c | 2712
ldap/servers/plugins/replication/cl5_api.h | 122
ldap/servers/plugins/replication/cl5_clcache.c | 71
ldap/servers/plugins/replication/cl5_clcache.h | 2
ldap/servers/plugins/replication/cl5_config.c | 247
ldap/servers/plugins/replication/cl5_init.c | 2
ldap/servers/plugins/replication/cl5_test.c | 2
ldap/servers/plugins/replication/cl_crypt.c | 203
ldap/servers/plugins/replication/cl_crypt.h | 53
ldap/servers/plugins/replication/csnpl.c | 74
ldap/servers/plugins/replication/legacy_consumer.c | 31
ldap/servers/plugins/replication/llist.c | 8
ldap/servers/plugins/replication/repl-session-plugin.h | 119
ldap/servers/plugins/replication/repl.h | 2
ldap/servers/plugins/replication/repl5.h | 132
ldap/servers/plugins/replication/repl5_agmt.c | 607
ldap/servers/plugins/replication/repl5_agmtlist.c | 132
ldap/servers/plugins/replication/repl5_connection.c | 194
ldap/servers/plugins/replication/repl5_inc_protocol.c | 1315
ldap/servers/plugins/replication/repl5_init.c | 138
ldap/servers/plugins/replication/repl5_mtnode_ext.c | 13
ldap/servers/plugins/replication/repl5_plugins.c | 206
ldap/servers/plugins/replication/repl5_prot_private.h | 4
ldap/servers/plugins/replication/repl5_protocol.c | 107
ldap/servers/plugins/replication/repl5_protocol_util.c | 563
ldap/servers/plugins/replication/repl5_replica.c | 865
ldap/servers/plugins/replication/repl5_replica_config.c | 2224
ldap/servers/plugins/replication/repl5_replica_dnhash.c | 26
ldap/servers/plugins/replication/repl5_replica_hash.c | 30
ldap/servers/plugins/replication/repl5_ruv.c | 525
ldap/servers/plugins/replication/repl5_ruv.h | 20
ldap/servers/plugins/replication/repl5_tot_protocol.c | 32
ldap/servers/plugins/replication/repl5_total.c | 22
ldap/servers/plugins/replication/repl5_updatedn_list.c | 2
ldap/servers/plugins/replication/repl_bind.c | 6
ldap/servers/plugins/replication/repl_compare.c | 18
ldap/servers/plugins/replication/repl_connext.c | 2
ldap/servers/plugins/replication/repl_controls.c | 2
ldap/servers/plugins/replication/repl_extop.c | 663
ldap/servers/plugins/replication/repl_globals.c | 9
ldap/servers/plugins/replication/repl_init.c | 1
ldap/servers/plugins/replication/repl_objset.c | 9
ldap/servers/plugins/replication/repl_session_plugin.c | 188
ldap/servers/plugins/replication/repl_shared.h | 17
ldap/servers/plugins/replication/replutil.c | 112
ldap/servers/plugins/replication/test_repl_session_plugin.c | 335
ldap/servers/plugins/replication/urp.c | 182
ldap/servers/plugins/replication/urp.h | 3
ldap/servers/plugins/replication/urp_glue.c | 9
ldap/servers/plugins/replication/urp_tombstone.c | 9
ldap/servers/plugins/replication/windows_connection.c | 165
ldap/servers/plugins/replication/windows_inc_protocol.c | 55
ldap/servers/plugins/replication/windows_private.c | 1450
ldap/servers/plugins/replication/windows_protocol_util.c | 890
ldap/servers/plugins/replication/windows_tot_protocol.c | 125
ldap/servers/plugins/replication/windowsrepl.h | 50
ldap/servers/plugins/replication/winsync-plugin.h | 495
ldap/servers/plugins/retrocl/retrocl.c | 51
ldap/servers/plugins/retrocl/retrocl.h | 2
ldap/servers/plugins/retrocl/retrocl_create.c | 13
ldap/servers/plugins/retrocl/retrocl_po.c | 20
ldap/servers/plugins/retrocl/retrocl_trim.c | 20
ldap/servers/plugins/rever/des.c | 72
ldap/servers/plugins/rever/rever.c | 8
ldap/servers/plugins/roles/roles_cache.c | 128
ldap/servers/plugins/roles/roles_plugin.c | 52
ldap/servers/plugins/rootdn_access/rootdn_access.c | 669
ldap/servers/plugins/rootdn_access/rootdn_access.h | 57
ldap/servers/plugins/schema_reload/schema_reload.c | 56
ldap/servers/plugins/shared/plugin-utils.h | 112
ldap/servers/plugins/shared/utils.c | 508
ldap/servers/plugins/statechange/statechange.c | 55
ldap/servers/plugins/syntaxes/bin.c | 142
ldap/servers/plugins/syntaxes/bitstring.c | 68
ldap/servers/plugins/syntaxes/ces.c | 172
ldap/servers/plugins/syntaxes/cis.c | 321
ldap/servers/plugins/syntaxes/deliverymethod.c | 32
ldap/servers/plugins/syntaxes/dn.c | 72
ldap/servers/plugins/syntaxes/facsimile.c | 32
ldap/servers/plugins/syntaxes/guide.c | 32
ldap/servers/plugins/syntaxes/int.c | 96
ldap/servers/plugins/syntaxes/nameoptuid.c | 73
ldap/servers/plugins/syntaxes/numericstring.c | 148
ldap/servers/plugins/syntaxes/sicis.c | 32
ldap/servers/plugins/syntaxes/string.c | 443
ldap/servers/plugins/syntaxes/syntax.h | 61
ldap/servers/plugins/syntaxes/syntax_common.c | 118
ldap/servers/plugins/syntaxes/tel.c | 94
ldap/servers/plugins/syntaxes/teletex.c | 32
ldap/servers/plugins/syntaxes/telex.c | 31
ldap/servers/plugins/syntaxes/validate.c | 17
ldap/servers/plugins/syntaxes/value.c | 120
ldap/servers/plugins/uiduniq/7bit.c | 76
ldap/servers/plugins/uiduniq/plugin-utils.h | 96
ldap/servers/plugins/uiduniq/uid.c | 368
ldap/servers/plugins/uiduniq/utils.c | 249
ldap/servers/plugins/usn/usn.c | 344
ldap/servers/plugins/usn/usn.h | 3
ldap/servers/plugins/usn/usn_cleanup.c | 44
ldap/servers/plugins/views/views.c | 36
ldap/servers/slapd/abandon.c | 8
ldap/servers/slapd/add.c | 257
ldap/servers/slapd/agtmmap.c | 56
ldap/servers/slapd/apibroker.c | 58
ldap/servers/slapd/attr.c | 163
ldap/servers/slapd/attrlist.c | 9
ldap/servers/slapd/attrsyntax.c | 143
ldap/servers/slapd/auditlog.c | 85
ldap/servers/slapd/auth.c | 95
ldap/servers/slapd/ava.c | 2
ldap/servers/slapd/back-ldbm/ancestorid.c | 104
ldap/servers/slapd/back-ldbm/archive.c | 91
ldap/servers/slapd/back-ldbm/back-ldbm.h | 108
ldap/servers/slapd/back-ldbm/backentry.c | 6
ldap/servers/slapd/back-ldbm/cache.c | 158
ldap/servers/slapd/back-ldbm/dbhelp.c | 18
ldap/servers/slapd/back-ldbm/dblayer.c | 2370
ldap/servers/slapd/back-ldbm/dblayer.h | 14
ldap/servers/slapd/back-ldbm/dbtest.c | 349
ldap/servers/slapd/back-ldbm/dbversion.c | 52
ldap/servers/slapd/back-ldbm/dn2entry.c | 63
ldap/servers/slapd/back-ldbm/filterindex.c | 259
ldap/servers/slapd/back-ldbm/findentry.c | 147
ldap/servers/slapd/back-ldbm/id2entry.c | 189
ldap/servers/slapd/back-ldbm/idl.c | 35
ldap/servers/slapd/back-ldbm/idl_common.c | 7
ldap/servers/slapd/back-ldbm/idl_new.c | 111
ldap/servers/slapd/back-ldbm/idl_shim.c | 17
ldap/servers/slapd/back-ldbm/import-merge.c | 28
ldap/servers/slapd/back-ldbm/import-threads.c | 1385
ldap/servers/slapd/back-ldbm/import.c | 403
ldap/servers/slapd/back-ldbm/import.h | 32
ldap/servers/slapd/back-ldbm/index.c | 346
ldap/servers/slapd/back-ldbm/init.c | 89
ldap/servers/slapd/back-ldbm/instance.c | 174
ldap/servers/slapd/back-ldbm/ldbm_add.c | 417
ldap/servers/slapd/back-ldbm/ldbm_attr.c | 392
ldap/servers/slapd/back-ldbm/ldbm_attrcrypt.c | 986
ldap/servers/slapd/back-ldbm/ldbm_attrcrypt_config.c | 2
ldap/servers/slapd/back-ldbm/ldbm_bind.c | 9
ldap/servers/slapd/back-ldbm/ldbm_compare.c | 9
ldap/servers/slapd/back-ldbm/ldbm_config.c | 321
ldap/servers/slapd/back-ldbm/ldbm_config.h | 9
ldap/servers/slapd/back-ldbm/ldbm_delete.c | 617
ldap/servers/slapd/back-ldbm/ldbm_entryrdn.c | 1582
ldap/servers/slapd/back-ldbm/ldbm_index_config.c | 668
ldap/servers/slapd/back-ldbm/ldbm_instance_config.c | 270
ldap/servers/slapd/back-ldbm/ldbm_modify.c | 516
ldap/servers/slapd/back-ldbm/ldbm_modrdn.c | 708
ldap/servers/slapd/back-ldbm/ldbm_search.c | 427
ldap/servers/slapd/back-ldbm/ldbm_usn.c | 74
ldap/servers/slapd/back-ldbm/ldif2ldbm.c | 792
ldap/servers/slapd/back-ldbm/matchrule.c | 50
ldap/servers/slapd/back-ldbm/misc.c | 300
ldap/servers/slapd/back-ldbm/monitor.c | 14
ldap/servers/slapd/back-ldbm/nextid.c | 17
ldap/servers/slapd/back-ldbm/parents.c | 141
ldap/servers/slapd/back-ldbm/perfctrs.c | 26
ldap/servers/slapd/back-ldbm/proto-back-ldbm.h | 56
ldap/servers/slapd/back-ldbm/seq.c | 3
ldap/servers/slapd/back-ldbm/sort.c | 38
ldap/servers/slapd/back-ldbm/start.c | 100
ldap/servers/slapd/back-ldbm/upgrade.c | 56
ldap/servers/slapd/back-ldbm/vlv.c | 388
ldap/servers/slapd/back-ldbm/vlv_srch.c | 17
ldap/servers/slapd/back-ldbm/vlv_srch.h | 3
ldap/servers/slapd/back-ldif/back-ldif.h | 2
ldap/servers/slapd/back-ldif/modrdn.c | 12
ldap/servers/slapd/backend.c | 72
ldap/servers/slapd/backend_manager.c | 18
ldap/servers/slapd/bind.c | 365
ldap/servers/slapd/bulk_import.c | 39
ldap/servers/slapd/charray.c | 32
ldap/servers/slapd/compare.c | 43
ldap/servers/slapd/computed.c | 36
ldap/servers/slapd/config.c | 19
ldap/servers/slapd/configdse.c | 68
ldap/servers/slapd/connection.c | 204
ldap/servers/slapd/conntable.c | 3
ldap/servers/slapd/control.c | 26
ldap/servers/slapd/csn.c | 77
ldap/servers/slapd/csngen.c | 54
ldap/servers/slapd/csnset.c | 4
ldap/servers/slapd/daemon.c | 694
ldap/servers/slapd/delete.c | 128
ldap/servers/slapd/dn.c | 1561
ldap/servers/slapd/dse.c | 788
ldap/servers/slapd/dynalib.c | 29
ldap/servers/slapd/entry.c | 967
ldap/servers/slapd/entrywsi.c | 140
ldap/servers/slapd/eventq.c | 4
ldap/servers/slapd/extendop.c | 35
ldap/servers/slapd/factory.c | 1
ldap/servers/slapd/fe.h | 5
ldap/servers/slapd/fedse.c | 40
ldap/servers/slapd/filter.c | 141
ldap/servers/slapd/filter.h | 1
ldap/servers/slapd/filtercmp.c | 26
ldap/servers/slapd/filterentry.c | 36
ldap/servers/slapd/generation.c | 1
ldap/servers/slapd/index_subsystem.c | 28
ldap/servers/slapd/intrinsics.h | 7
ldap/servers/slapd/ldaputil.c | 892
ldap/servers/slapd/lenstr.c | 6
ldap/servers/slapd/libglobs.c | 1046
ldap/servers/slapd/libslapd.def | 1
ldap/servers/slapd/log.c | 171
ldap/servers/slapd/log.h | 20
ldap/servers/slapd/main.c | 291
ldap/servers/slapd/mapping_tree.c | 478
ldap/servers/slapd/match.c | 96
ldap/servers/slapd/modify.c | 540
ldap/servers/slapd/modrdn.c | 379
ldap/servers/slapd/modutil.c | 77
ldap/servers/slapd/operation.c | 38
ldap/servers/slapd/opshared.c | 411
ldap/servers/slapd/pagedresults.c | 581
ldap/servers/slapd/passwd_extop.c | 203
ldap/servers/slapd/pblock.c | 649
ldap/servers/slapd/plugin.c | 350
ldap/servers/slapd/plugin_acl.c | 24
ldap/servers/slapd/plugin_internal_op.c | 204
ldap/servers/slapd/plugin_mr.c | 474
ldap/servers/slapd/plugin_syntax.c | 442
ldap/servers/slapd/protect_db.c | 24
ldap/servers/slapd/protect_db.h | 7
ldap/servers/slapd/proto-slap.h | 127
ldap/servers/slapd/proxyauth.c | 246
ldap/servers/slapd/psearch.c | 76
ldap/servers/slapd/pw.c | 552
ldap/servers/slapd/pw.h | 7
ldap/servers/slapd/pw_mgmt.c | 162
ldap/servers/slapd/pw_retry.c | 121
ldap/servers/slapd/rdn.c | 141
ldap/servers/slapd/referral.c | 29
ldap/servers/slapd/regex.c | 31
ldap/servers/slapd/resourcelimit.c | 84
ldap/servers/slapd/result.c | 103
ldap/servers/slapd/rootdse.c | 12
ldap/servers/slapd/rwlock.c | 257
ldap/servers/slapd/rwlock.h | 65
ldap/servers/slapd/sasl_io.c | 167
ldap/servers/slapd/sasl_map.c | 63
ldap/servers/slapd/saslbind.c | 172
ldap/servers/slapd/schema.c | 219
ldap/servers/slapd/schemaparse.c | 13
ldap/servers/slapd/search.c | 92
ldap/servers/slapd/security_wrappers.c | 36
ldap/servers/slapd/slap.h | 251
ldap/servers/slapd/slapi-plugin-compat4.h | 6
ldap/servers/slapd/slapi-plugin.h | 1377
ldap/servers/slapd/slapi-private.h | 59
ldap/servers/slapd/slapi2nspr.c | 79
ldap/servers/slapd/slapi_counter.c | 24
ldap/servers/slapd/snmp_collator.c | 19
ldap/servers/slapd/sort.c | 9
ldap/servers/slapd/ssl.c | 323
ldap/servers/slapd/str2filter.c | 5
ldap/servers/slapd/task.c | 184
ldap/servers/slapd/test-plugins/testbind.c | 1
ldap/servers/slapd/test-plugins/testpostop.c | 1
ldap/servers/slapd/thread_data.c | 174
ldap/servers/slapd/time.c | 91
ldap/servers/slapd/tools/dbscan.c | 76
ldap/servers/slapd/tools/ldclt/data.c | 70
ldap/servers/slapd/tools/ldclt/ldapfct.c | 1149
ldap/servers/slapd/tools/ldclt/ldclt.c | 50
ldap/servers/slapd/tools/ldclt/ldclt.h | 3
ldap/servers/slapd/tools/ldclt/ldcltU.c | 24
ldap/servers/slapd/tools/ldclt/parser.c | 19
ldap/servers/slapd/tools/ldclt/scalab01.c | 190
ldap/servers/slapd/tools/ldclt/threadMain.c | 6
ldap/servers/slapd/tools/ldif.c | 4
ldap/servers/slapd/tools/mmldif.c | 9
ldap/servers/slapd/tools/pwenc.c | 2
ldap/servers/slapd/tools/rsearch/addthread.c | 51
ldap/servers/slapd/tools/rsearch/sdattable.c | 4
ldap/servers/slapd/tools/rsearch/searchthread.c | 94
ldap/servers/slapd/uniqueid.c | 99
ldap/servers/slapd/utf8compare.c | 25
ldap/servers/slapd/util.c | 357
ldap/servers/slapd/uuid.c | 22
ldap/servers/slapd/value.c | 62
ldap/servers/slapd/valueset.c | 75
ldap/servers/slapd/vattr.c | 115
ldap/servers/snmp/NETWORK-SERVICES-MIB.txt | 650
ldap/servers/snmp/RFC-1215.txt | 38
ldap/servers/snmp/RFC1155-SMI.txt | 119
ldap/servers/snmp/SNMPv2-CONF.txt | 322
ldap/servers/snmp/SNMPv2-SMI.txt | 344
ldap/servers/snmp/SNMPv2-TC.txt | 772
ldap/servers/snmp/ldap-agent.c | 26
ldap/servers/snmp/main.c | 12
ldap/servers/snmp/netscape-ldap.mib | 759
ldap/systools/idsktune.c | 100
lib/base/crit.cpp | 6
lib/base/ereport.cpp | 2
lib/base/file.cpp | 24
lib/base/lexer.cpp | 1015
lib/base/plist.cpp | 3
lib/base/pool.cpp | 10
lib/base/rwlock.cpp | 168
lib/base/util.cpp | 13
lib/ldaputil/cert.c | 4
lib/ldaputil/certmap.c | 409
lib/ldaputil/dbconf.c | 1
lib/ldaputil/utest/Makefile | 149
lib/ldaputil/utest/auth.cpp | 611
lib/ldaputil/utest/authtest | 138
lib/ldaputil/utest/certmap.conf | 68
lib/ldaputil/utest/dblist.conf | 47
lib/ldaputil/utest/example.c | 153
lib/ldaputil/utest/plugin.c | 152
lib/ldaputil/utest/plugin.h | 57
lib/ldaputil/utest/stubs.c | 144
lib/ldaputil/utest/stubs.cpp | 139
lib/ldaputil/utest/test.ref | 480
lib/ldaputil/vtable.c | 2
lib/libaccess/acl.tab.cpp | 25
lib/libaccess/aclcache.cpp | 105
lib/libaccess/aclflush.cpp | 1
lib/libaccess/aclpriv.h | 1
lib/libaccess/acltext.y | 4
lib/libaccess/acltools.cpp | 1896
lib/libaccess/aclutil.cpp | 13
lib/libaccess/authdb.cpp | 112
lib/libaccess/lasdns.cpp | 23
lib/libaccess/lasgroup.cpp | 10
lib/libaccess/lasip.cpp | 20
lib/libaccess/nseframe.cpp | 1
lib/libaccess/oneeval.cpp | 19
lib/libaccess/permhash.h | 11
lib/libaccess/register.cpp | 50
lib/libaccess/usrcache.cpp | 14
lib/libaccess/utest/.purify | 19
lib/libaccess/utest/Makefile | 147
lib/libaccess/utest/acl.dat | 44
lib/libaccess/utest/aclfile0 | 87
lib/libaccess/utest/aclfile1 | 43
lib/libaccess/utest/aclfile10 | 45
lib/libaccess/utest/aclfile11 | 43
lib/libaccess/utest/aclfile12 | 43
lib/libaccess/utest/aclfile13 | 43
lib/libaccess/utest/aclfile14 | 43
lib/libaccess/utest/aclfile15 | 43
lib/libaccess/utest/aclfile16 | 43
lib/libaccess/utest/aclfile17 | 43
lib/libaccess/utest/aclfile18 | 51
lib/libaccess/utest/aclfile19 | 46
lib/libaccess/utest/aclfile2 | 43
lib/libaccess/utest/aclfile3 | 43
lib/libaccess/utest/aclfile4 | 43
lib/libaccess/utest/aclfile5 | 43
lib/libaccess/utest/aclfile6 | 55
lib/libaccess/utest/aclfile7 | 43
lib/libaccess/utest/aclfile8 | 43
lib/libaccess/utest/aclfile9 | 43
lib/libaccess/utest/aclgrp0 | 42
lib/libaccess/utest/aclgrp1 | 42
lib/libaccess/utest/aclgrp2 | 42
lib/libaccess/utest/aclgrp3 | 42
lib/libaccess/utest/aclgrp4 | 42
lib/libaccess/utest/acltest.cpp | 794
lib/libaccess/utest/onetest.cpp | 77
lib/libaccess/utest/shexp.cpp | 331
lib/libaccess/utest/shexp.h | 168
lib/libaccess/utest/test.ref | 217
lib/libaccess/utest/testmain.cpp | 89
lib/libaccess/utest/twotest.cpp | 87
lib/libaccess/utest/ustubs.cpp | 331
lib/libadmin/error.c | 2
lib/libadmin/template.c | 2
lib/libadmin/util.c | 48
lib/libsi18n/coreres.c | 141
lib/libsi18n/coreres.h | 52
lib/libsi18n/getlang.c | 330
lib/libsi18n/getstrmem.c | 160
lib/libsi18n/getstrmem.h | 1
lib/libsi18n/getstrprop.c | 85
lib/libsi18n/makstrdb.c | 21
lib/libsi18n/propset.c | 442
lib/libsi18n/propset.h | 80
lib/libsi18n/reshash.c | 21
ltmain.sh |13199 ++-
m4/db.m4 | 27
m4/fhs.m4 | 4
m4/icu.m4 | 25
m4/kerberos.m4 | 4
m4/mozldap.m4 | 38
m4/netsnmp.m4 | 15
m4/nspr.m4 | 17
m4/nss.m4 | 17
m4/openldap.m4 | 30
m4/pcre.m4 | 28
m4/sasl.m4 | 25
m4/selinux.m4 | 13
m4/svrcore.m4 | 41
man/man1/cl-dump.1 | 18
man/man1/dbgen.pl.1 | 4
man/man1/infadd.1 | 8
man/man1/migratecred.1 | 6
man/man1/mmldif.1 | 4
man/man1/pwdhash.1 | 4
man/man1/repl-monitor.1 | 16
man/man8/ns-slapd.8 | 10
man/man8/remove-ds.pl.8 | 6
man/man8/restart-dirsrv.8 | 50
man/man8/setup-ds.pl.8 | 4
man/man8/start-dirsrv.8 | 50
man/man8/stop-dirsrv.8 | 50
missing | 104
selinux/dirsrv.fc.in | 2
selinux/dirsrv.if | 41
selinux/dirsrv.te | 11
wrappers/cl-dump.in | 11
wrappers/dbscan.in | 10
wrappers/infadd.in | 12
wrappers/initscript.in | 244
wrappers/ldap-agent-initscript.in | 20
wrappers/ldap-agent.in | 12
wrappers/ldclt.in | 12
wrappers/ldif.in | 12
wrappers/migratecred.in | 14
wrappers/mmldif.in | 14
wrappers/pwdhash.in | 14
wrappers/repl-monitor.in | 11
wrappers/rsearch.in | 12
wrappers/systemd-snmp.service.in | 16
wrappers/systemd.group.in | 6
wrappers/systemd.template.service.in | 28
wrappers/systemd.template.sysconfig | 3
632 files changed, 94927 insertions(+), 71718 deletions(-)
---
11 years, 8 months
ldap/servers
by Richard Allen Megginson
ldap/servers/slapd/ssl.c | 5 +++++
1 file changed, 5 insertions(+)
New commits:
commit 53c974f363d633aedfea40690a6aa4bfbeb00de0
Author: Rich Megginson <rmeggins(a)redhat.com>
Date: Mon Aug 20 12:20:21 2012 -0600
Ticket #430 - server to server ssl client auth broken with latest openldap
https://fedorahosted.org/389/ticket/430
Resolves: Ticket #430
Bug Description: server to server ssl client auth broken with latest openldap
Reviewed by: nhosoi (Thanks!)
Branch: master
Fix Description: Pass in the openldap certfile as "tokenname:certnickname"
for the internal token as well as for external tokens. openldap 2.4.32 and
later are patched to accept this, and will force the use of the token named
tokenname as the slot/token to use. If the internal one has already been
unlocked (i.e. by the server doing SSL server init) then the cert can be used
without having to unlock the key/cert db again.
Platforms tested: RHEL6 x86_64, Fedora 17
Flag Day: no
Doc impact: no
diff --git a/ldap/servers/slapd/ssl.c b/ldap/servers/slapd/ssl.c
index f656df9..0aab53d 100644
--- a/ldap/servers/slapd/ssl.c
+++ b/ldap/servers/slapd/ssl.c
@@ -1348,7 +1348,12 @@ slapd_SSL_client_auth (LDAP* ld)
* the personality for internal tokens.
*/
token = slapi_ch_strdup(internalTokenName);
+#if defined(USE_OPENLDAP)
+ /* openldap needs tokenname:certnick */
+ PR_snprintf(cert_name, sizeof(cert_name), "%s:%s", token, personality);
+#else
PL_strncpyz(cert_name, personality, sizeof(cert_name));
+#endif
slapi_ch_free((void **) &ssltoken);
} else {
/* external PKCS #11 token - attach token name */
11 years, 8 months
Branch '389-ds-base-1.2.11' - ldap/servers
by Richard Allen Megginson
ldap/servers/slapd/ssl.c | 5 +++++
1 file changed, 5 insertions(+)
New commits:
commit 9f959f071c38f7f9181b279846f4f94947805d64
Author: Rich Megginson <rmeggins(a)redhat.com>
Date: Mon Aug 20 12:20:21 2012 -0600
Ticket #430 - server to server ssl client auth broken with latest openldap
https://fedorahosted.org/389/ticket/430
Resolves: Ticket #430
Bug Description: server to server ssl client auth broken with latest openldap
Reviewed by: nhosoi (Thanks!)
Branch: 389-ds-base-1.2.11
Fix Description: Pass in the openldap certfile as "tokenname:certnickname"
for the internal token as well as for external tokens. openldap 2.4.32 and
later are patched to accept this, and will force the use of the token named
tokenname as the slot/token to use. If the internal one has already been
unlocked (i.e. by the server doing SSL server init) then the cert can be used
without having to unlock the key/cert db again.
Platforms tested: RHEL6 x86_64, Fedora 17
Flag Day: no
Doc impact: no
diff --git a/ldap/servers/slapd/ssl.c b/ldap/servers/slapd/ssl.c
index f656df9..0aab53d 100644
--- a/ldap/servers/slapd/ssl.c
+++ b/ldap/servers/slapd/ssl.c
@@ -1348,7 +1348,12 @@ slapd_SSL_client_auth (LDAP* ld)
* the personality for internal tokens.
*/
token = slapi_ch_strdup(internalTokenName);
+#if defined(USE_OPENLDAP)
+ /* openldap needs tokenname:certnick */
+ PR_snprintf(cert_name, sizeof(cert_name), "%s:%s", token, personality);
+#else
PL_strncpyz(cert_name, personality, sizeof(cert_name));
+#endif
slapi_ch_free((void **) &ssltoken);
} else {
/* external PKCS #11 token - attach token name */
11 years, 8 months
Branch '389-ds-base-1.2.11' - ldap/schema
by Mark Reynolds
ldap/schema/01core389.ldif | 1 +
1 file changed, 1 insertion(+)
New commits:
commit 78ed55b49ccbb8d65e8548c668f19b128cbdce15
Author: Mark Reynolds <mreynolds(a)redhat.com>
Date: Mon Aug 20 13:38:02 2012 -0400
Ticket 429
Add nsslapd-readonly to DS schema
diff --git a/ldap/schema/01core389.ldif b/ldap/schema/01core389.ldif
index 58b4b76..d9d1c33 100644
--- a/ldap/schema/01core389.ldif
+++ b/ldap/schema/01core389.ldif
@@ -138,6 +138,7 @@ attributeTypes: ( 2.16.840.1.113730.3.1.2135 NAME 'nsds5ReplicaCleanRUV' DESC 'N
attributeTypes: ( 2.16.840.1.113730.3.1.2136 NAME 'nsds5ReplicaCleanRUVNotified' DESC 'Netscape defined attribute type' SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 X-ORIGIN 'Netscape Directory Server' )
attributeTypes: ( 2.16.840.1.113730.3.1.2137 NAME 'nsds5ReplicaAbortCleanRUV' DESC 'Netscape defined attribute type' SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 X-ORIGIN 'Netscape Directory Server' )
attributeTypes: ( 2.16.840.1.113730.3.1.2111 NAME 'tombstoneNumSubordinates' DESC 'count of immediate subordinates for tombstone entries' EQUALITY integerMatch ORDERING integerOrderingMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE NO-USER-MODIFICATION USAGE directoryOperation X-ORIGIN '389 directory server' )
+attributeTypes: ( 2.16.840.1.113730.3.1.2138 NAME 'nsslapd-readonly' DESC 'Netscape defined attribute type' SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE X-ORIGIN 'Netscape Directory Server' )
#
# objectclasses
#
11 years, 8 months
ldap/schema
by Mark Reynolds
ldap/schema/01core389.ldif | 1 +
1 file changed, 1 insertion(+)
New commits:
commit fb54b6780e8d5113287f690dac579fe9b599e910
Author: Mark Reynolds <mreynolds(a)redhat.com>
Date: Mon Aug 20 12:35:53 2012 -0400
Ticket 429 - Add nsslapd-readonly to schema
Added nsslapd-readonly to DS schema
https://fedorahosted.org/389/ticket/429
Reviewed by: ?
diff --git a/ldap/schema/01core389.ldif b/ldap/schema/01core389.ldif
index 58b4b76..d9d1c33 100644
--- a/ldap/schema/01core389.ldif
+++ b/ldap/schema/01core389.ldif
@@ -138,6 +138,7 @@ attributeTypes: ( 2.16.840.1.113730.3.1.2135 NAME 'nsds5ReplicaCleanRUV' DESC 'N
attributeTypes: ( 2.16.840.1.113730.3.1.2136 NAME 'nsds5ReplicaCleanRUVNotified' DESC 'Netscape defined attribute type' SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 X-ORIGIN 'Netscape Directory Server' )
attributeTypes: ( 2.16.840.1.113730.3.1.2137 NAME 'nsds5ReplicaAbortCleanRUV' DESC 'Netscape defined attribute type' SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 X-ORIGIN 'Netscape Directory Server' )
attributeTypes: ( 2.16.840.1.113730.3.1.2111 NAME 'tombstoneNumSubordinates' DESC 'count of immediate subordinates for tombstone entries' EQUALITY integerMatch ORDERING integerOrderingMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE NO-USER-MODIFICATION USAGE directoryOperation X-ORIGIN '389 directory server' )
+attributeTypes: ( 2.16.840.1.113730.3.1.2138 NAME 'nsslapd-readonly' DESC 'Netscape defined attribute type' SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE X-ORIGIN 'Netscape Directory Server' )
#
# objectclasses
#
11 years, 8 months
Branch '389-ds-base-1.2.11' - ldap/servers
by Mark Reynolds
ldap/servers/plugins/replication/repl5_replica_config.c | 31 +++++++++++-----
ldap/servers/plugins/replication/repl5_ruv.c | 29 ++++++++++++++
ldap/servers/plugins/replication/repl5_ruv.h | 1
ldap/servers/plugins/replication/repl_extop.c | 4 --
4 files changed, 54 insertions(+), 11 deletions(-)
New commits:
commit 0968b3f5d5551dc75e00c9d6e9528cc062f451fa
Author: Mark Reynolds <mreynolds(a)redhat.com>
Date: Mon Aug 20 12:17:51 2012 -0400
Ticket 403 - fix CLEANALLRUV regression from last commit
Bug Description: The last commit for CLEANALLRUV caused a regression that could
hang the process when comparing maxcsn's.
Fix Description: Needed to write a new ruv_compare_csn function to handle the
unique scenarios presented by CLEANALLRUV.
Also improved settings verfication, and error handling.
https://fedorahosted.org/389/ticket/403
Reviewed by: ?
diff --git a/ldap/servers/plugins/replication/repl5_replica_config.c b/ldap/servers/plugins/replication/repl5_replica_config.c
index b408809..e222746 100644
--- a/ldap/servers/plugins/replication/repl5_replica_config.c
+++ b/ldap/servers/plugins/replication/repl5_replica_config.c
@@ -1461,19 +1461,32 @@ replica_cleanallruv_thread(void *arg)
if(data->replica == NULL && data->repl_obj == NULL){
/*
* This thread was initiated at startup because the process did not finish. Due
- * to timing issues, we need to wait to grab the replica obj until we get here.
+ * to startup timing issues, we need to wait before grabbing the replica obj, as
+ * the backends might not be online yet.
*/
+ PR_Lock( notify_lock );
+ PR_WaitCondVar( notify_cvar, PR_SecondsToInterval(5) );
+ PR_Unlock( notify_lock );
data->repl_obj = replica_get_replica_from_dn(data->sdn);
+ if(data->repl_obj == NULL){
+ cleanruv_log(data->task, CLEANALLRUV_ID, "Unable to retrieve repl object from dn(%s).", data->sdn);
+ aborted = 1;
+ goto done;
+ }
data->replica = (Replica*)object_get_data(data->repl_obj);
free_obj = 1;
- }
- if(data->replica == NULL && data->repl_obj){
+ } else if(data->replica == NULL && data->repl_obj){
data->replica = (Replica*)object_get_data(data->repl_obj);
- }
- if( data->repl_obj == NULL){
+ } else if( data->repl_obj == NULL && data->replica){
data->repl_obj = object_new(data->replica, NULL);
free_obj = 1;
}
+ /* verify we have set our repl objects */
+ if(data->repl_obj == NULL || data->replica == NULL){
+ cleanruv_log(data->task, CLEANALLRUV_ID, "Unable to set the replica objects.");
+ aborted = 1;
+ goto done;
+ }
if(data->task){
slapi_task_begin(data->task, 1);
}
@@ -1492,11 +1505,13 @@ replica_cleanallruv_thread(void *arg)
ruv_obj = replica_get_ruv(data->replica);
ruv = object_get_data (ruv_obj);
while(data->maxcsn && !is_task_aborted(data->rid) && !is_cleaned_rid(data->rid) && !slapi_is_shutting_down()){
- if(csn_get_replicaid(data->maxcsn) == 0 || ruv_covers_csn_strict(ruv,data->maxcsn)){
+ if(csn_get_replicaid(data->maxcsn) == 0 || ruv_covers_csn_cleanallruv(ruv,data->maxcsn)){
/* We are caught up, now we can clean the ruv's */
break;
}
- DS_Sleep(PR_SecondsToInterval(5));
+ PR_Lock( notify_lock );
+ PR_WaitCondVar( notify_cvar, PR_SecondsToInterval(5) );
+ PR_Unlock( notify_lock );
}
object_release(ruv_obj);
/*
@@ -1963,7 +1978,7 @@ add_cleaned_rid(ReplicaId rid, Replica *r, char *maxcsn)
repl_get_plugin_identity (PLUGIN_MULTIMASTER_REPLICATION), 0);
slapi_modify_internal_pb (pb);
slapi_pblock_get(pb, SLAPI_PLUGIN_INTOP_RESULT, &rc);
- if (rc != LDAP_SUCCESS){
+ if (rc != LDAP_SUCCESS && rc != LDAP_TYPE_OR_VALUE_EXISTS){
slapi_log_error(SLAPI_LOG_FATAL, repl_plugin_name, "CleanAllRUV Task: failed to update replica "
"config (%d), rid (%d)\n", rc, rid);
}
diff --git a/ldap/servers/plugins/replication/repl5_ruv.c b/ldap/servers/plugins/replication/repl5_ruv.c
index fb8ea09..b52dd49 100644
--- a/ldap/servers/plugins/replication/repl5_ruv.c
+++ b/ldap/servers/plugins/replication/repl5_ruv.c
@@ -920,6 +920,35 @@ ruv_covers_csn_strict(const RUV *ruv, const CSN *csn)
return rc;
}
+/*
+ * Used by the cleanallruv task
+ *
+ * We want to return TRUE if replica is NULL,
+ * and we want to use "csn_compare() <="
+ */
+PRBool
+ruv_covers_csn_cleanallruv(const RUV *ruv, const CSN *csn)
+{
+ RUVElement *replica;
+ ReplicaId rid;
+ PRBool return_value;
+
+ if (ruv == NULL || csn == NULL){
+ slapi_log_error(SLAPI_LOG_REPL, repl_plugin_name, "ruv_covers_csn_cleanallruv: NULL argument\n");
+ return_value = PR_FALSE;
+ } else {
+ rid = csn_get_replicaid(csn);
+ replica = ruvGetReplica (ruv, rid);
+ if (replica == NULL){
+ /* already cleaned */
+ return_value = PR_TRUE;
+ } else {
+ return_value = (csn_compare (csn, replica->csn) <= 0);
+ }
+ }
+
+ return return_value;
+}
/*
* The function gets min{maxcsns of all ruv elements} if get_the_max=0,
diff --git a/ldap/servers/plugins/replication/repl5_ruv.h b/ldap/servers/plugins/replication/repl5_ruv.h
index f2d96f3..944f5ed 100644
--- a/ldap/servers/plugins/replication/repl5_ruv.h
+++ b/ldap/servers/plugins/replication/repl5_ruv.h
@@ -115,6 +115,7 @@ void ruv_set_replica_generation (RUV *ruv, const char *generation);
PRBool ruv_covers_ruv(const RUV *covering_ruv, const RUV *covered_ruv);
PRBool ruv_covers_csn(const RUV *ruv, const CSN *csn);
PRBool ruv_covers_csn_strict(const RUV *ruv, const CSN *csn);
+PRBool ruv_covers_csn_cleanallruv(const RUV *ruv, const CSN *csn);
int ruv_get_min_csn(const RUV *ruv, CSN **csn);
int ruv_get_max_csn(const RUV *ruv, CSN **csn);
int ruv_get_rid_max_csn(const RUV *ruv, CSN **csn, ReplicaId rid);
diff --git a/ldap/servers/plugins/replication/repl_extop.c b/ldap/servers/plugins/replication/repl_extop.c
index ecf1f93..334b86b 100644
--- a/ldap/servers/plugins/replication/repl_extop.c
+++ b/ldap/servers/plugins/replication/repl_extop.c
@@ -1541,8 +1541,6 @@ multimaster_extop_cleanruv(Slapi_PBlock *pb)
csn_free(&maxcsn);
rc = 1;
goto free_and_return;
- } else {
- slapi_log_error(SLAPI_LOG_FATAL, repl_plugin_name, "cleanAllRUV_task: cleaning rid (%d)...\n", rid);
}
/*
@@ -1618,7 +1616,7 @@ multimaster_extop_cleanruv(Slapi_PBlock *pb)
break;
}
slapi_log_error(SLAPI_LOG_FATAL, repl_plugin_name, "cleanAllRUV_task: checking if we're caught up...\n");
- if(ruv_covers_csn_strict(ruv,maxcsn) || csn_get_replicaid(maxcsn) == 0){
+ if(ruv_covers_csn_cleanallruv(ruv,maxcsn) || csn_get_replicaid(maxcsn) == 0){
/* We are caught up */
break;
} else {
11 years, 8 months
ldap/servers
by Mark Reynolds
ldap/servers/plugins/replication/repl5_replica_config.c | 31 +++++++++++-----
ldap/servers/plugins/replication/repl5_ruv.c | 29 ++++++++++++++
ldap/servers/plugins/replication/repl5_ruv.h | 1
ldap/servers/plugins/replication/repl_extop.c | 4 --
4 files changed, 54 insertions(+), 11 deletions(-)
New commits:
commit 819910db80e3452edcbe42f3154eb7af4a98efd7
Author: Mark Reynolds <mreynolds(a)redhat.com>
Date: Mon Aug 20 12:51:10 2012 -0400
Ticket 403 - fix CLEANALLRUV regression from last commit
Bug Description: The last commit for CLEANALLRUV caused a regression that could
hang the process when comparing maxcsn's.
Fix Description: Needed to write a new ruv_compare_csn function to handle the
unique scenarios presented by CLEANALLRUV.
Also improved settings verfication, and error handling.
https://fedorahosted.org/389/ticket/403
Reviewed by: richm (Thanks!)
diff --git a/ldap/servers/plugins/replication/repl5_replica_config.c b/ldap/servers/plugins/replication/repl5_replica_config.c
index c8c746c..fbb0667 100644
--- a/ldap/servers/plugins/replication/repl5_replica_config.c
+++ b/ldap/servers/plugins/replication/repl5_replica_config.c
@@ -1461,19 +1461,32 @@ replica_cleanallruv_thread(void *arg)
if(data->replica == NULL && data->repl_obj == NULL){
/*
* This thread was initiated at startup because the process did not finish. Due
- * to timing issues, we need to wait to grab the replica obj until we get here.
+ * to startup timing issues, we need to wait before grabbing the replica obj, as
+ * the backends might not be online yet.
*/
+ PR_Lock( notify_lock );
+ PR_WaitCondVar( notify_cvar, PR_SecondsToInterval(5) );
+ PR_Unlock( notify_lock );
data->repl_obj = replica_get_replica_from_dn(data->sdn);
+ if(data->repl_obj == NULL){
+ cleanruv_log(data->task, CLEANALLRUV_ID, "Unable to retrieve repl object from dn(%s).", data->sdn);
+ aborted = 1;
+ goto done;
+ }
data->replica = (Replica*)object_get_data(data->repl_obj);
free_obj = 1;
- }
- if(data->replica == NULL && data->repl_obj){
+ } else if(data->replica == NULL && data->repl_obj){
data->replica = (Replica*)object_get_data(data->repl_obj);
- }
- if( data->repl_obj == NULL){
+ } else if( data->repl_obj == NULL && data->replica){
data->repl_obj = object_new(data->replica, NULL);
free_obj = 1;
}
+ /* verify we have set our repl objects */
+ if(data->repl_obj == NULL || data->replica == NULL){
+ cleanruv_log(data->task, CLEANALLRUV_ID, "Unable to set the replica objects.");
+ aborted = 1;
+ goto done;
+ }
if(data->task){
slapi_task_begin(data->task, 1);
}
@@ -1492,11 +1505,13 @@ replica_cleanallruv_thread(void *arg)
ruv_obj = replica_get_ruv(data->replica);
ruv = object_get_data (ruv_obj);
while(data->maxcsn && !is_task_aborted(data->rid) && !is_cleaned_rid(data->rid) && !slapi_is_shutting_down()){
- if(csn_get_replicaid(data->maxcsn) == 0 || ruv_covers_csn_strict(ruv,data->maxcsn)){
+ if(csn_get_replicaid(data->maxcsn) == 0 || ruv_covers_csn_cleanallruv(ruv,data->maxcsn)){
/* We are caught up, now we can clean the ruv's */
break;
}
- DS_Sleep(PR_SecondsToInterval(5));
+ PR_Lock( notify_lock );
+ PR_WaitCondVar( notify_cvar, PR_SecondsToInterval(5) );
+ PR_Unlock( notify_lock );
}
object_release(ruv_obj);
/*
@@ -1963,7 +1978,7 @@ add_cleaned_rid(ReplicaId rid, Replica *r, char *maxcsn)
repl_get_plugin_identity (PLUGIN_MULTIMASTER_REPLICATION), 0);
slapi_modify_internal_pb (pb);
slapi_pblock_get(pb, SLAPI_PLUGIN_INTOP_RESULT, &rc);
- if (rc != LDAP_SUCCESS){
+ if (rc != LDAP_SUCCESS && rc != LDAP_TYPE_OR_VALUE_EXISTS){
slapi_log_error(SLAPI_LOG_FATAL, repl_plugin_name, "CleanAllRUV Task: failed to update replica "
"config (%d), rid (%d)\n", rc, rid);
}
diff --git a/ldap/servers/plugins/replication/repl5_ruv.c b/ldap/servers/plugins/replication/repl5_ruv.c
index fb8ea09..b52dd49 100644
--- a/ldap/servers/plugins/replication/repl5_ruv.c
+++ b/ldap/servers/plugins/replication/repl5_ruv.c
@@ -920,6 +920,35 @@ ruv_covers_csn_strict(const RUV *ruv, const CSN *csn)
return rc;
}
+/*
+ * Used by the cleanallruv task
+ *
+ * We want to return TRUE if replica is NULL,
+ * and we want to use "csn_compare() <="
+ */
+PRBool
+ruv_covers_csn_cleanallruv(const RUV *ruv, const CSN *csn)
+{
+ RUVElement *replica;
+ ReplicaId rid;
+ PRBool return_value;
+
+ if (ruv == NULL || csn == NULL){
+ slapi_log_error(SLAPI_LOG_REPL, repl_plugin_name, "ruv_covers_csn_cleanallruv: NULL argument\n");
+ return_value = PR_FALSE;
+ } else {
+ rid = csn_get_replicaid(csn);
+ replica = ruvGetReplica (ruv, rid);
+ if (replica == NULL){
+ /* already cleaned */
+ return_value = PR_TRUE;
+ } else {
+ return_value = (csn_compare (csn, replica->csn) <= 0);
+ }
+ }
+
+ return return_value;
+}
/*
* The function gets min{maxcsns of all ruv elements} if get_the_max=0,
diff --git a/ldap/servers/plugins/replication/repl5_ruv.h b/ldap/servers/plugins/replication/repl5_ruv.h
index f2d96f3..944f5ed 100644
--- a/ldap/servers/plugins/replication/repl5_ruv.h
+++ b/ldap/servers/plugins/replication/repl5_ruv.h
@@ -115,6 +115,7 @@ void ruv_set_replica_generation (RUV *ruv, const char *generation);
PRBool ruv_covers_ruv(const RUV *covering_ruv, const RUV *covered_ruv);
PRBool ruv_covers_csn(const RUV *ruv, const CSN *csn);
PRBool ruv_covers_csn_strict(const RUV *ruv, const CSN *csn);
+PRBool ruv_covers_csn_cleanallruv(const RUV *ruv, const CSN *csn);
int ruv_get_min_csn(const RUV *ruv, CSN **csn);
int ruv_get_max_csn(const RUV *ruv, CSN **csn);
int ruv_get_rid_max_csn(const RUV *ruv, CSN **csn, ReplicaId rid);
diff --git a/ldap/servers/plugins/replication/repl_extop.c b/ldap/servers/plugins/replication/repl_extop.c
index ecf1f93..334b86b 100644
--- a/ldap/servers/plugins/replication/repl_extop.c
+++ b/ldap/servers/plugins/replication/repl_extop.c
@@ -1541,8 +1541,6 @@ multimaster_extop_cleanruv(Slapi_PBlock *pb)
csn_free(&maxcsn);
rc = 1;
goto free_and_return;
- } else {
- slapi_log_error(SLAPI_LOG_FATAL, repl_plugin_name, "cleanAllRUV_task: cleaning rid (%d)...\n", rid);
}
/*
@@ -1618,7 +1616,7 @@ multimaster_extop_cleanruv(Slapi_PBlock *pb)
break;
}
slapi_log_error(SLAPI_LOG_FATAL, repl_plugin_name, "cleanAllRUV_task: checking if we're caught up...\n");
- if(ruv_covers_csn_strict(ruv,maxcsn) || csn_get_replicaid(maxcsn) == 0){
+ if(ruv_covers_csn_cleanallruv(ruv,maxcsn) || csn_get_replicaid(maxcsn) == 0){
/* We are caught up */
break;
} else {
11 years, 8 months
Branch '389-ds-base-1.2.11' - ldap/servers
by Noriko Hosoi
ldap/servers/plugins/referint/referint.c | 2 +-
ldap/servers/plugins/syntaxes/string.c | 2 ++
2 files changed, 3 insertions(+), 1 deletion(-)
New commits:
commit 063e1517b4d681d0593141d2cdc742f3e7f42aae
Author: Noriko Hosoi <nhosoi(a)totoro.usersys.redhat.com>
Date: Wed Aug 15 14:54:42 2012 -0700
Trac Ticket #346 - Slow ldapmodify operation time for large
quantities of multi-valued attribute values
https://fedorahosted.org/389/ticket/346
Fix Description: When comparing dn syntax attribute values (e.g.,
member in a group) with filter values, filter values are case-
lowered, but the attribute values in an entry are not any more.
This patch lowers the case before the comparison in the syntax
plugin.
(cherry picked from commit 091166e8c0642380d96cb495e30471b0bb4a5c94)
diff --git a/ldap/servers/plugins/referint/referint.c b/ldap/servers/plugins/referint/referint.c
index 7aee564..8f751da 100644
--- a/ldap/servers/plugins/referint/referint.c
+++ b/ldap/servers/plugins/referint/referint.c
@@ -196,7 +196,7 @@ referint_postop_del( Slapi_PBlock *pb )
if(argv == NULL){
slapi_log_error( SLAPI_LOG_FATAL, REFERINT_PLUGIN_SUBSYSTEM,
- "referint_postop_modrdn, args are NULL\n" );
+ "referint_postop_del, args are NULL\n" );
return( -1 );
}
diff --git a/ldap/servers/plugins/syntaxes/string.c b/ldap/servers/plugins/syntaxes/string.c
index e5bdc18..54cd7c8 100644
--- a/ldap/servers/plugins/syntaxes/string.c
+++ b/ldap/servers/plugins/syntaxes/string.c
@@ -390,6 +390,8 @@ string_filter_sub( Slapi_PBlock *pb, char *initial, char **any, char *final,
/* 3rd arg: 1 - trim leading blanks */
if (!(slapi_value_get_flags(bvals[j]) & SLAPI_ATTR_FLAG_NORMALIZED)) {
value_normalize_ext( realval, syntax, 1, &alt );
+ } else if (syntax & SYNTAX_DN) {
+ slapi_dn_ignore_case(realval);
}
if (alt) {
tmprc = slapi_re_exec( re, alt, time_up );
11 years, 8 months
ldap/servers
by Noriko Hosoi
ldap/servers/plugins/referint/referint.c | 2 +-
ldap/servers/plugins/syntaxes/string.c | 2 ++
2 files changed, 3 insertions(+), 1 deletion(-)
New commits:
commit 62371318797c483e710e8fb779220bfbfd019040
Author: Noriko Hosoi <nhosoi(a)totoro.usersys.redhat.com>
Date: Wed Aug 15 14:54:42 2012 -0700
Trac Ticket #346 - Slow ldapmodify operation time for large
quantities of multi-valued attribute values
https://fedorahosted.org/389/ticket/346
Fix Description: When comparing dn syntax attribute values (e.g.,
member in a group) with filter values, filter values are case-
lowered, but the attribute values in an entry are not any more.
This patch lowers the case before the comparison in the syntax
plugin.
(cherry picked from commit 091166e8c0642380d96cb495e30471b0bb4a5c94)
diff --git a/ldap/servers/plugins/referint/referint.c b/ldap/servers/plugins/referint/referint.c
index 0d381fe..b219b6a 100644
--- a/ldap/servers/plugins/referint/referint.c
+++ b/ldap/servers/plugins/referint/referint.c
@@ -193,7 +193,7 @@ referint_postop_del( Slapi_PBlock *pb )
if(argv == NULL){
slapi_log_error( SLAPI_LOG_FATAL, REFERINT_PLUGIN_SUBSYSTEM,
- "referint_postop_modrdn, args are NULL\n" );
+ "referint_postop_del, args are NULL\n" );
return( -1 );
}
diff --git a/ldap/servers/plugins/syntaxes/string.c b/ldap/servers/plugins/syntaxes/string.c
index e5bdc18..54cd7c8 100644
--- a/ldap/servers/plugins/syntaxes/string.c
+++ b/ldap/servers/plugins/syntaxes/string.c
@@ -390,6 +390,8 @@ string_filter_sub( Slapi_PBlock *pb, char *initial, char **any, char *final,
/* 3rd arg: 1 - trim leading blanks */
if (!(slapi_value_get_flags(bvals[j]) & SLAPI_ATTR_FLAG_NORMALIZED)) {
value_normalize_ext( realval, syntax, 1, &alt );
+ } else if (syntax & SYNTAX_DN) {
+ slapi_dn_ignore_case(realval);
}
if (alt) {
tmprc = slapi_re_exec( re, alt, time_up );
11 years, 8 months