Hello community,

here is the log from the commit of package openldap2 for openSUSE:Factory
checked in at Mon Aug 1 09:43:30 CEST 2011.



--------
--- openldap2/openldap2-client.changes  2011-03-29 17:31:51.000000000 +0200
+++ /mounts/work_src_done/STABLE/openldap2/openldap2-client.changes     
2011-07-07 17:04:11.000000000 +0200
@@ -1,0 +2,35 @@
+Thu Jul  7 14:43:05 UTC 2011 - rha...@suse.de
+
+- Update to 2.4.26
+  * Added libldap LDAP_OPT_X_TLS_PACKAGE (ITS#6969)
+  * Fixed libldap descriptor leak (ITS#6929)
+  * Fixed libldap socket leak (ITS#6930)
+  * Fixed libldap get option crash (ITS#6931)
+  * Fixed libldap lockup (ITS#6898)
+  * Fixed libldap ASYNC TLS setup (ITS#6828)
+  * Fixed libldap with missing \n terminations (ITS#6947)
+  * Fixed tools double free (ITS#6946)
+  * Fixed tools verbose output (ITS#6977)
+  * Fixed ldapmodify SEGV on invalid LDIF (ITS#6978)
+  * Added slapd extra_attrs database option (ITS#6513)
+  * Fixed slapd asserts (ITS#6932)
+  * Fixed slapd configfile param on windows (ITS#6933)
+  * Fixed slapd config with global chaining (ITS#6843)
+  * Fixed slapd uninitialized variables (ITS#6935)
+  * Fixed slapd config objectclass is readonly (ITS#6963)
+  * Fixed slapd entry response with control (ITS#6899)
+  * Fixed slapd with unknown attrs (ITS#6819)
+  * Fixed slapd normalization of schema RDN (ITS#6967)
+  * Fixed slapd operations cache to 10 op limit (ITS#6944)
+  * Fixed slapd syncrepl crash with non-replicated ops (ITS#6892)
+  * Fixed slapd-bdb/hdb with sparse index ranges (ITS#6961)
+  * Fixed back-ldap ppolicy updates (ITS#6711)
+  * Fixed back-ldap with id-assert (ITS#6817)
+  * Fixed various slapo-pcache issues (ITS#6823, ITS#6950,
+    ITS#6951, ITS#6953, ITS#6954)
+  * Fixed slapo-pcache database corruption (ITS#6831)
+  * Fixed slapo-syncprov with replicated subtrees (ITS#6872)
+- backported delete support for child entries of overlays from
+  master (bnc#704398)
+
+-------------------------------------------------------------------
openldap2.changes: same change

calling whatdependson for head-i586


Old:
----
  openldap-2.3.37.tar.bz2
  openldap-2.4.25.tar.bz2

New:
----
  0011-config-delete-overlay-fixes.dif
  0012-backport-ConfigLDAPdel-callback-from-current-master.dif
  openldap-2.3.37.tgz
  openldap-2.4.26.tgz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ openldap2-client.spec ++++++
--- /var/tmp/diff_new_pack.y6Mcu9/_old  2011-08-01 09:41:39.000000000 +0200
+++ /var/tmp/diff_new_pack.y6Mcu9/_new  2011-08-01 09:41:39.000000000 +0200
@@ -24,7 +24,7 @@
 %if %sles_version == 9 || %sles_version == 10
 BuildRequires:  -libopenssl-devel -pwdutils openssl-devel
 %endif
-Version:        2.4.25
+Version:        2.4.26
 Release:        1
 Url:            http://www.openldap.org
 License:        BSD3c(or similar) ; openldap 2.8
@@ -45,7 +45,7 @@
 Summary:        The OpenLDAP commandline client tools
 %endif
 AutoReqProv:    on
-Source:         openldap-%{version}.tar.bz2
+Source:         openldap-%{version}.tgz
 Source1:        openldap-rc.tgz
 Source2:        addonschema.tar.gz
 Source3:        DB_CONFIG
@@ -53,7 +53,7 @@
 Source5:        README.update
 Source6:        README.dynamic-overlays
 Source7:        schema2ldif
-Source100:      openldap-2.3.37.tar.bz2
+Source100:      openldap-2.3.37.tgz
 Patch1:         0001-build-adjustments.dif
 Patch2:         0002-slapd.conf.dif
 Patch3:         0003-LDAPI-socket-location.dif
@@ -64,6 +64,8 @@
 Patch8:         0008-Recover-on-DB-version-change.dif
 Patch9:         0009-unregister_supported_control-backport.dif
 Patch10:        0010-Fix-exposure-of-SSS-VLV-controls-ITS-6647.dif
+Patch11:        0011-config-delete-overlay-fixes.dif
+Patch12:        0012-backport-ConfigLDAPdel-callback-from-current-master.dif
 Patch100:       openldap-2.3.37.dif
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build
 %if "%{name}" == "openldap2"
@@ -240,6 +242,8 @@
 %patch8 -p1
 %patch9 -p1
 %patch10 -p1
+%patch11 -p1
+%patch12 -p1
 cp %{SOURCE5} .
 cp %{SOURCE6} .
 cd ../openldap-2.3.37
@@ -481,10 +485,7 @@
 %{_libdir}/libldap*.so.*
 EOF
 cat > openldap2-devel.filelist <<EOF
-/usr/include/lber.h
-/usr/include/lber_types.h
-/usr/include/ldap*.h
-/usr/include/slapi-plugin.h
+/usr/include/*.h
 %{_libdir}/liblber.a
 %{_libdir}/liblber.so
 %{_libdir}/libldap*.a

openldap2.spec: same change
++++++ 0001-build-adjustments.dif ++++++
--- /var/tmp/diff_new_pack.y6Mcu9/_old  2011-08-01 09:41:39.000000000 +0200
+++ /var/tmp/diff_new_pack.y6Mcu9/_new  2011-08-01 09:41:39.000000000 +0200
@@ -1,4 +1,4 @@
-From f8a35cec5591b61c3a39bb76a5410439e79d6aaf Mon Sep 17 00:00:00 2001
+From 43a8df1cab3f7bafb34b3356833779e6e2f0eaf1 Mon Sep 17 00:00:00 2001
 From: Ralf Haferkamp <rha...@suse.de>
 Date: Wed, 16 Jun 2010 14:04:07 +0200
 Subject: build-adjustments
@@ -20,10 +20,10 @@
  sharedstatedir = @sharedstatedir@
  sysconfdir = @sysconfdir@$(ldap_subdir)
 diff --git a/configure.in b/configure.in
-index 0e44858..4f15898 100644
+index 0872d81..225647b 100644
 --- a/configure.in
 +++ b/configure.in
-@@ -67,7 +67,9 @@ dnl Determine host platform
+@@ -69,7 +69,9 @@ dnl Determine host platform
  dnl           we try not to use this for much
  AC_CANONICAL_TARGET([])
  

++++++ 0002-slapd.conf.dif ++++++
--- /var/tmp/diff_new_pack.y6Mcu9/_old  2011-08-01 09:41:39.000000000 +0200
+++ /var/tmp/diff_new_pack.y6Mcu9/_new  2011-08-01 09:41:39.000000000 +0200
@@ -1,4 +1,4 @@
-From cd4cb8676956b0db50fae7cc0ccb110d40788644 Mon Sep 17 00:00:00 2001
+From 3a5f7ce7960e64d49ad104cc9abc7941b454d933 Mon Sep 17 00:00:00 2001
 From: Ralf Haferkamp <rha...@suse.de>
 Date: Wed, 16 Jun 2010 14:05:49 +0200
 Subject: slapd.conf

++++++ 0003-LDAPI-socket-location.dif ++++++
--- /var/tmp/diff_new_pack.y6Mcu9/_old  2011-08-01 09:41:39.000000000 +0200
+++ /var/tmp/diff_new_pack.y6Mcu9/_new  2011-08-01 09:41:39.000000000 +0200
@@ -1,4 +1,4 @@
-From dcee2b0d5e2fdcc3224ea315c49057bb6b763fac Mon Sep 17 00:00:00 2001
+From c5b25d50557bb79a54654699d47af29342157ad9 Mon Sep 17 00:00:00 2001
 From: Ralf Haferkamp <rha...@suse.de>
 Date: Wed, 16 Jun 2010 14:06:42 +0200
 Subject: LDAPI socket location

++++++ 0004-libldap-use-gethostbyname_r.dif ++++++
--- /var/tmp/diff_new_pack.y6Mcu9/_old  2011-08-01 09:41:39.000000000 +0200
+++ /var/tmp/diff_new_pack.y6Mcu9/_new  2011-08-01 09:41:39.000000000 +0200
@@ -1,4 +1,4 @@
-From 642b5d51f4fec7047de3692c5da3521a6a749ec2 Mon Sep 17 00:00:00 2001
+From 119f2c14aac61a04d98719b399266c1ed235793a Mon Sep 17 00:00:00 2001
 From: Ralf Haferkamp <rha...@suse.de>
 Date: Wed, 16 Jun 2010 14:08:03 +0200
 Subject: libldap use gethostbyname_r

++++++ 0005-pie-compile.dif ++++++
--- /var/tmp/diff_new_pack.y6Mcu9/_old  2011-08-01 09:41:39.000000000 +0200
+++ /var/tmp/diff_new_pack.y6Mcu9/_new  2011-08-01 09:41:39.000000000 +0200
@@ -1,4 +1,4 @@
-From fea5da62cd357a4fe5811b6399c5b32a1b43f455 Mon Sep 17 00:00:00 2001
+From 34e2af586533bf43e2fec55e707fa4d51ca6634c Mon Sep 17 00:00:00 2001
 From: Ralf Haferkamp <rha...@suse.de>
 Date: Fri, 12 Nov 2010 09:39:11 +0100
 Subject: pie compile

++++++ 0006-assorted-fixes-for-back-config-DELETE-support.dif ++++++
--- /var/tmp/diff_new_pack.y6Mcu9/_old  2011-08-01 09:41:39.000000000 +0200
+++ /var/tmp/diff_new_pack.y6Mcu9/_new  2011-08-01 09:41:39.000000000 +0200
@@ -1,14 +1,14 @@
-From a9a050afc3983cfcaba8a96085c97b5a213199f5 Mon Sep 17 00:00:00 2001
+From 1b23710affd68704d8fb66ba42901fa7aed1a379 Mon Sep 17 00:00:00 2001
 From: Ralf Haferkamp <rha...@suse.de>
 Date: Wed, 16 Jun 2010 14:08:56 +0200
 Subject: assorted fixes for back-config DELETE support
 
 
 diff --git a/servers/slapd/bconfig.c b/servers/slapd/bconfig.c
-index 623940b..47671bc 100644
+index 006647b..3354c09 100644
 --- a/servers/slapd/bconfig.c
 +++ b/servers/slapd/bconfig.c
-@@ -5973,13 +5973,26 @@ config_back_delete( Operation *op, SlapReply *rs )
+@@ -6050,13 +6050,26 @@ config_back_delete( Operation *op, SlapReply *rs )
                rs->sr_err = LDAP_UNWILLING_TO_PERFORM;
        } else if ( op->o_abandon ) {
                rs->sr_err = SLAPD_ABANDON;
@@ -37,7 +37,7 @@
  
                /* remove CfEntryInfo from the siblings list */
                if ( ce->ce_parent->ce_kids == ce ) {
-@@ -6041,6 +6054,7 @@ config_back_delete( Operation *op, SlapReply *rs )
+@@ -6118,6 +6131,7 @@ config_back_delete( Operation *op, SlapReply *rs )
  #else
        rs->sr_err = LDAP_UNWILLING_TO_PERFORM;
  #endif /* SLAP_CONFIG_DELETE */

++++++ 0007-No-Build-date-and-time-in-binaries.dif ++++++
--- /var/tmp/diff_new_pack.y6Mcu9/_old  2011-08-01 09:41:39.000000000 +0200
+++ /var/tmp/diff_new_pack.y6Mcu9/_new  2011-08-01 09:41:39.000000000 +0200
@@ -1,4 +1,4 @@
-From ffa5afc69917bbe153dcbddfbfac7d7b30eb0f9a Mon Sep 17 00:00:00 2001
+From 708185d30ee5a94ca4d98707521620291c8ddd1d Mon Sep 17 00:00:00 2001
 From: Cristian Rodriguez <cristian.rodrig...@opensuse.org>
 Date: Tue, 5 Oct 2010 13:59:40 +0200
 Subject: No Build date and time in binaries

++++++ 0008-Recover-on-DB-version-change.dif ++++++
--- /var/tmp/diff_new_pack.y6Mcu9/_old  2011-08-01 09:41:39.000000000 +0200
+++ /var/tmp/diff_new_pack.y6Mcu9/_new  2011-08-01 09:41:39.000000000 +0200
@@ -1,4 +1,4 @@
-From 6821a349975bad1bb6b85c4bf6ab82be92b5c51e Mon Sep 17 00:00:00 2001
+From 1ae2909f2464955fde817f3c8447724e4d5035c3 Mon Sep 17 00:00:00 2001
 From: Ralf Haferkamp <rha...@suse.de>
 Date: Tue, 5 Oct 2010 14:20:22 +0200
 Subject: Recover on DB version change

++++++ 0009-unregister_supported_control-backport.dif ++++++
--- /var/tmp/diff_new_pack.y6Mcu9/_old  2011-08-01 09:41:39.000000000 +0200
+++ /var/tmp/diff_new_pack.y6Mcu9/_new  2011-08-01 09:41:39.000000000 +0200
@@ -1,4 +1,4 @@
-From bf8d97b961515d698a7c9816e2af1feaa538b6bf Mon Sep 17 00:00:00 2001
+From 601cde61e0ad14e804a4f1bf54b6fac934aaad4b Mon Sep 17 00:00:00 2001
 From: ralf <ralf>
 Date: Wed, 30 Jun 2010 10:38:01 +0000
 Subject: unregister_supported_control() backport
@@ -15,10 +15,10 @@
 overlay_unregister_control().
 
 diff --git a/servers/slapd/backover.c b/servers/slapd/backover.c
-index e3a6b7c..4e86bfb 100644
+index cad81ab..56bcf65 100644
 --- a/servers/slapd/backover.c
 +++ b/servers/slapd/backover.c
-@@ -1074,14 +1074,22 @@ overlay_register_control( BackendDB *be, const char 
*oid )
+@@ -1076,14 +1076,22 @@ overlay_register_control( BackendDB *be, const char 
*oid )
                                gotit = 1;
                        }
  
@@ -43,7 +43,7 @@
                be->bd_self->be_ctrls[ SLAP_MAX_CIDS ] = 1;
        }
  
-@@ -1089,6 +1097,34 @@ overlay_register_control( BackendDB *be, const char 
*oid )
+@@ -1091,6 +1099,34 @@ overlay_register_control( BackendDB *be, const char 
*oid )
  }
  
  void
@@ -122,10 +122,10 @@
   * One-time initialization of internal controls.
   */
 diff --git a/servers/slapd/proto-slap.h b/servers/slapd/proto-slap.h
-index 494d201..9ed6901 100644
+index 4d0e1bb..1aebece 100644
 --- a/servers/slapd/proto-slap.h
 +++ b/servers/slapd/proto-slap.h
-@@ -656,6 +656,10 @@ LDAP_SLAPD_F (int) register_supported_control2 LDAP_P((
+@@ -657,6 +657,10 @@ LDAP_SLAPD_F (int) register_supported_control2 LDAP_P((
        int *controlcid ));
  #define register_supported_control(oid, mask, exops, fn, cid) \
        register_supported_control2((oid), (mask), (exops), (fn), 0, (cid))

++++++ 0010-Fix-exposure-of-SSS-VLV-controls-ITS-6647.dif ++++++
--- /var/tmp/diff_new_pack.y6Mcu9/_old  2011-08-01 09:41:39.000000000 +0200
+++ /var/tmp/diff_new_pack.y6Mcu9/_new  2011-08-01 09:41:39.000000000 +0200
@@ -1,4 +1,4 @@
-From aa567ba586b3f78ce9199929f2a058c17d0a6e29 Mon Sep 17 00:00:00 2001
+From b5ddeac919d767a390d7d9e3c2dac092cc4232e1 Mon Sep 17 00:00:00 2001
 From: ralf <ralf>
 Date: Fri, 22 Jan 2010 17:01:25 +0000
 Subject: Fix exposure of SSS/VLV controls (ITS#6647)
@@ -11,10 +11,10 @@
   is removed (additional fix for ITS#6647)
 
 diff --git a/servers/slapd/overlays/sssvlv.c b/servers/slapd/overlays/sssvlv.c
-index bb779e6..010a0b9 100644
+index ce3da34..7ffed1b 100644
 --- a/servers/slapd/overlays/sssvlv.c
 +++ b/servers/slapd/overlays/sssvlv.c
-@@ -1292,6 +1292,10 @@ static int sssvlv_db_init(
+@@ -1295,6 +1295,10 @@ static int sssvlv_db_init(
                if ( rc != LDAP_SUCCESS ) {
                        Debug( LDAP_DEBUG_ANY, "Failed to register VLV Request 
control '%s' (%d)\n",
                                LDAP_CONTROL_VLVREQUEST, rc, 0 );
@@ -25,7 +25,7 @@
                        return rc;
                }
        }
-@@ -1327,6 +1331,15 @@ static int sssvlv_db_destroy(
+@@ -1330,6 +1334,15 @@ static int sssvlv_db_destroy(
                ldap_pvt_thread_mutex_destroy( &sort_conns_mutex );
        }
  

++++++ 0011-config-delete-overlay-fixes.dif ++++++
>From 0ca1fbc64f2f02cbdff0827e4ca1bbe312bebc2f Mon Sep 17 00:00:00 2001
From: Ralf Haferkamp <rha...@suse.de>
Date: Fri, 22 Jan 2010 11:18:46 +0100
Subject: config-delete overlay fixes

- unregister controls when removing overlays from cn=config (syncprov,
  ppolicy, valsort, chain and sssvlv)
- Send error to active psearches upon syncprov overlay removal
- syncprov: reset BackendInfo to original value after checkpoint. Leaks memory
  otherwise (with -DSLAP_CONFIG_DELETE)

bnc#548773

diff --git a/servers/slapd/back-ldap/chain.c b/servers/slapd/back-ldap/chain.c
index 41bb6ef..8f37efb 100644
--- a/servers/slapd/back-ldap/chain.c
+++ b/servers/slapd/back-ldap/chain.c
@@ -1979,6 +1979,11 @@ ldap_chain_db_close(
        BackendDB       *be,
        ConfigReply     *cr )
 {
+#ifdef LDAP_CONTROL_X_CHAINING_BEHAVIOR
+#ifdef SLAP_CONFIG_DELETE
+       overlay_unregister_control( be, LDAP_CONTROL_X_CHAINING_BEHAVIOR );
+#endif /* SLAP_CONFIG_DELETE */
+#endif /* LDAP_CONTROL_X_CHAINING_BEHAVIOR */
        return ldap_chain_db_func( be, db_close );
 }
 
diff --git a/servers/slapd/overlays/ppolicy.c b/servers/slapd/overlays/ppolicy.c
index 43cc345..048bf89 100644
--- a/servers/slapd/overlays/ppolicy.c
+++ b/servers/slapd/overlays/ppolicy.c
@@ -2308,6 +2308,11 @@ ppolicy_close(
        slap_overinst *on = (slap_overinst *) be->bd_info;
        pp_info *pi = on->on_bi.bi_private;
 
+
+#ifdef SLAP_CONFIG_DELETE
+       overlay_unregister_control( be, LDAP_CONTROL_PASSWORDPOLICYREQUEST );
+#endif /* SLAP_CONFIG_DELETE */
+
        /* Perhaps backover should provide bi_destroy hooks... */
        ov_count--;
        if ( ov_count <=0 && pwcons ) {
diff --git a/servers/slapd/overlays/syncprov.c 
b/servers/slapd/overlays/syncprov.c
index 1100de7..814f95e 100644
--- a/servers/slapd/overlays/syncprov.c
+++ b/servers/slapd/overlays/syncprov.c
@@ -3143,6 +3143,7 @@ syncprov_db_close(
 {
     slap_overinst   *on = (slap_overinst *) be->bd_info;
     syncprov_info_t *si = (syncprov_info_t *)on->on_bi.bi_private;
+       syncops *so, *sonext;
 
        if ( slapMode & SLAP_TOOL_MODE ) {
                return 0;
@@ -3162,6 +3163,20 @@ syncprov_db_close(
                syncprov_checkpoint( op, on );
        }
 
+#ifdef SLAP_CONFIG_DELETE
+       ldap_pvt_thread_mutex_lock( &si->si_ops_mutex );
+       for ( so=si->si_ops, sonext=so;  so; so=sonext  ) {
+               SlapReply rs = {REP_RESULT};
+               rs.sr_err = LDAP_UNAVAILABLE;
+               send_ldap_result( so->s_op, &rs );
+               sonext=so->s_next;
+               syncprov_drop_psearch( so, 0);
+       }
+       si->si_ops=NULL;
+       ldap_pvt_thread_mutex_unlock( &si->si_ops_mutex );
+       overlay_unregister_control( be, LDAP_CONTROL_SYNC );
+#endif /* SLAP_CONFIG_DELETE */
+
     return 0;
 }
 
diff --git a/servers/slapd/overlays/valsort.c b/servers/slapd/overlays/valsort.c
index 80d9382..033cbf6 100644
--- a/servers/slapd/overlays/valsort.c
+++ b/servers/slapd/overlays/valsort.c
@@ -490,6 +490,10 @@ valsort_destroy(
        slap_overinst *on = (slap_overinst *)be->bd_info;
        valsort_info *vi = on->on_bi.bi_private, *next;
 
+#ifdef SLAP_CONFIG_DELETE
+       overlay_unregister_control( be, LDAP_CONTROL_VALSORT );
+#endif /* SLAP_CONFIG_DELETE */
+
        for (; vi; vi = next) {
                next = vi->vi_next;
                ch_free( vi->vi_dn.bv_val );
diff --git a/servers/slapd/proto-slap.h b/servers/slapd/proto-slap.h
index 1aebece..bb0dd63 100644
--- a/servers/slapd/proto-slap.h
+++ b/servers/slapd/proto-slap.h
@@ -484,6 +484,9 @@ LDAP_SLAPD_F (void) overlay_move LDAP_P((
 #ifdef SLAP_CONFIG_DELETE
 LDAP_SLAPD_F (void) overlay_remove LDAP_P((
        BackendDB *be, slap_overinst *on ));
+LDAP_SLAPD_F (void) overlay_unregister_control LDAP_P((
+       BackendDB *be,
+       const char *oid ));
 #endif /* SLAP_CONFIG_DELETE */
 LDAP_SLAPD_F (int) overlay_callback_after_backover LDAP_P((
        Operation *op, slap_callback *sc, int append ));
-- 
1.7.3.4

++++++ 0012-backport-ConfigLDAPdel-callback-from-current-master.dif ++++++
>From e9c58d8eb653e2e1fa8d84f8631dcc3fa5965db2 Mon Sep 17 00:00:00 2001
From: Ralf Haferkamp <r...@openldap.org>
Date: Tue, 15 Mar 2011 16:57:41 +0000
Subject: backport ConfigLDAPdel callback from current master

bnc#704398

diff --git a/servers/slapd/bconfig.c b/servers/slapd/bconfig.c
index 3354c09..309668e 100644
--- a/servers/slapd/bconfig.c
+++ b/servers/slapd/bconfig.c
@@ -6047,10 +6047,12 @@ config_back_delete( Operation *op, SlapReply *rs )
                        rs->sr_matched = last->ce_entry->e_name.bv_val;
                rs->sr_err = LDAP_NO_SUCH_OBJECT;
        } else if ( ce->ce_kids ) {
-               rs->sr_err = LDAP_UNWILLING_TO_PERFORM;
+               rs->sr_err = LDAP_NOT_ALLOWED_ON_NONLEAF;
        } else if ( op->o_abandon ) {
                rs->sr_err = SLAPD_ABANDON;
-       } else if ( ce->ce_type == Cft_Overlay || ce->ce_type == Cft_Database){
+       } else if ( ce->ce_type == Cft_Overlay ||
+                       ce->ce_type == Cft_Database ||
+                       ce->ce_type == Cft_Misc ){
                char *iptr;
                int count, ixold;
 
@@ -6058,7 +6060,46 @@ config_back_delete( Operation *op, SlapReply *rs )
                
                if ( ce->ce_type == Cft_Overlay ){
                        overlay_remove( ce->ce_be, (slap_overinst *)ce->ce_bi );
-               } else { /* Cft_Database*/
+               } else if ( ce->ce_type == Cft_Misc ) {
+                       /*
+                        * only Cft_Misc objects that have a co_lddel handler 
set in
+                        * the ConfigOCs struct can be deleted. This code also
+                        * assumes that the entry can be only have one 
objectclass
+                        * with co_type == Cft_Misc
+                        */
+                       ConfigOCs co, *coptr;
+                       Attribute *oc_at;
+                       int i;
+
+                       oc_at = attr_find( ce->ce_entry->e_attrs,
+                                       slap_schema.si_ad_objectClass );
+                       if ( !oc_at ) {
+                               rs->sr_err = LDAP_OTHER;
+                               rs->sr_text = "objectclass not found";
+                               ldap_pvt_thread_pool_resume( &connection_pool );
+                               goto out;
+                       }
+                       for ( i=0; !BER_BVISNULL(&oc_at->a_nvals[i]); i++ ) {
+                               co.co_name = &oc_at->a_nvals[i];
+                               coptr = avl_find( CfOcTree, &co, CfOc_cmp );
+                               if ( coptr == NULL || coptr->co_type != 
Cft_Misc ) {
+                                       continue;
+                               }
+                               if ( ! coptr->co_lddel || coptr->co_lddel( ce, 
op ) ){
+                                       rs->sr_err = LDAP_UNWILLING_TO_PERFORM;
+                                       if ( ! coptr->co_lddel ) {
+                                               rs->sr_text = "No delete 
handler found";
+                                       } else {
+                                               rs->sr_err = LDAP_OTHER;
+                                               /* FIXME: We should return a 
helpful error message
+                                                * here */
+                                       }
+                                       ldap_pvt_thread_pool_resume( 
&connection_pool );
+                                       goto out;
+                               }
+                               break;
+                       }
+               } else if (ce->ce_type == Cft_Database ) {
                        if ( ce->ce_be == frontendDB || ce->ce_be == op->o_bd ){
                                rs->sr_err = LDAP_UNWILLING_TO_PERFORM;
                                rs->sr_text = "Cannot delete config or frontend 
database";
@@ -6128,10 +6169,10 @@ config_back_delete( Operation *op, SlapReply *rs )
        } else {
                rs->sr_err = LDAP_UNWILLING_TO_PERFORM;
        }
+out:
 #else
        rs->sr_err = LDAP_UNWILLING_TO_PERFORM;
 #endif /* SLAP_CONFIG_DELETE */
-out:
        send_ldap_result( op, rs );
        return rs->sr_err;
 }
diff --git a/servers/slapd/config.h b/servers/slapd/config.h
index 9c037d4..d79ae74 100644
--- a/servers/slapd/config.h
+++ b/servers/slapd/config.h
@@ -100,12 +100,21 @@ typedef int (ConfigLDAPadd)(
 typedef int (ConfigCfAdd)(
        Operation *op, SlapReply *rs, Entry *parent, struct config_args_s *ca );
 
+#ifdef SLAP_CONFIG_DELETE
+/* Called when deleting a Cft_Misc Child object from cn=config */
+typedef int (ConfigLDAPdel)(
+       CfEntryInfo *ce, Operation *op );
+#endif
+
 typedef struct ConfigOCs {
        const char *co_def;
        ConfigType co_type;
        ConfigTable *co_table;
        ConfigLDAPadd *co_ldadd;
        ConfigCfAdd *co_cfadd;
+#ifdef SLAP_CONFIG_DELETE
+       ConfigLDAPdel *co_lddel;
+#endif
        ObjectClass *co_oc;
        struct berval *co_name;
 } ConfigOCs;
-- 
1.7.3.4


++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++



Remember to have fun...

-- 
To unsubscribe, e-mail: opensuse-commit+unsubscr...@opensuse.org
For additional commands, e-mail: opensuse-commit+h...@opensuse.org

Reply via email to