Hello community,
here is the log from the commit of package openldap2 for openSUSE:11.4
checked in at Fri Mar 4 16:15:36 CET 2011.
--------
--- old-versions/11.4/all/openldap2/openldap2-client.changes 2011-01-19 17:54:59.000000000 +0100
+++ 11.4/openldap2/openldap2-client.changes 2011-03-02 10:44:41.000000000 +0100
@@ -1,0 +2,14 @@
+Tue Mar 1 13:15:45 UTC 2011 - rhafer@suse.de
+
+- ModRDN Operations with an empty old DN value and "remove old RDN"
+ enabled could crash the LDAP Server (bnc#674985, ITS#6768)
+- Using the password policy overlay in a chainging setup (with
+ "ppolicy_forward_updates" enabled) could cause BIND operations
+ to return SUCCESS even if the wrong password was sent.
+ (bnc#674985, ITS#6607)
+- Only expose SSS/VLV controls in rootDSE if the sssvlv overlay is
+ at least instanciated once. Solaris clients (and Outlook) have
+ problems connecting to OpenLDAP otherwise (bnc#648479, includes
+ fixes for ITS#6647, ITS#6649 and ITS#6685)
+
+-------------------------------------------------------------------
openldap2.changes: same change
Package does not exist at destination yet. Using Fallback old-versions/11.4/all/openldap2
Destination is old-versions/11.4/UPDATES/all/openldap2
calling whatdependson for 11.4-i586
New:
----
0010-unregister_supported_control-backport-dif
0011-Fix-exposure-of-SSS-VLV-controls-ITS-6647-dif
0012-forwarded-bind-failure-messages-cause-success-ITS-6607-dif
0013-fix-modrdn-with-empty-olddn-ITS-6768-dif
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ openldap2-client.spec ++++++
--- /var/tmp/diff_new_pack.feYpTh/_old 2011-03-04 16:15:17.000000000 +0100
+++ /var/tmp/diff_new_pack.feYpTh/_new 2011-03-04 16:15:17.000000000 +0100
@@ -25,7 +25,7 @@
BuildRequires: -libopenssl-devel -pwdutils openssl-devel
%endif
Version: 2.4.23
-Release: 6
+Release: 6.<RELEASE2>
Url: http://www.openldap.org
License: BSD3c(or similar) ; openldap 2.8
%if "%{name}" == "openldap2"
@@ -63,6 +63,10 @@
Patch7: 0007-No-Build-date-and-time-in-binaries.dif
Patch8: 0008-Recover-on-DB-version-change.dif
Patch9: 0009-List-static-overlays-backends-when-with-VVV.dif
+Patch10: 0010-unregister_supported_control-backport-dif
+Patch11: 0011-Fix-exposure-of-SSS-VLV-controls-ITS-6647-dif
+Patch12: 0012-forwarded-bind-failure-messages-cause-success-ITS-6607-dif
+Patch13: 0013-fix-modrdn-with-empty-olddn-ITS-6768-dif
Patch100: openldap-2.3.37.dif
Patch200: slapd_getaddrinfo_dupl.dif
BuildRoot: %{_tmppath}/%{name}-%{version}-build
@@ -88,6 +92,25 @@
The OpenLDAP Project
From 7fd700941fb1d735a78073124fb8f473eaf9b1b4 Mon Sep 17 00:00:00 2001 From: ralf <ralf> Date: Wed, 30 Jun 2010 10:38:01 +0000 Subject: unregister_supported_control() backport
The fix for bnc#648479/ITS#6647 makes use of this call Original log-message: new call unregister_supported_control(), will be needed for cn=config delete support Also included: use be_ctrls[cid] for counting the number of overlay instances that have registered the control for a specific BackendDB to make sure that the control is unregistered only after the last instance calls overlay_unregister_control(). diff --git a/servers/slapd/backover.c b/servers/slapd/backover.c index cef3286..d2065dc 100644 --- a/servers/slapd/backover.c +++ b/servers/slapd/backover.c @@ -1074,14 +1074,22 @@ overlay_register_control( BackendDB *be, const char *oid ) gotit = 1; } - bd->be_ctrls[ cid ] = 1; + /* overlays can be instanciated multiple times, use + * be_ctrls[ cid ] as an instance counter, so that the + * overlay's controls are only really disabled after the + * last instance called overlay_register_control() */ + bd->be_ctrls[ cid ]++; bd->be_ctrls[ SLAP_MAX_CIDS ] = 1; } } if ( !gotit ) { - be->bd_self->be_ctrls[ cid ] = 1; + /* overlays can be instanciated multiple times, use + * be_ctrls[ cid ] as an instance counter, so that the + * overlay's controls are only really unregistered after the + * last instance called overlay_register_control() */ + be->bd_self->be_ctrls[ cid ]++; be->bd_self->be_ctrls[ SLAP_MAX_CIDS ] = 1; } @@ -1089,6 +1097,34 @@ overlay_register_control( BackendDB *be, const char *oid ) } void +overlay_unregister_control( BackendDB *be, const char *oid ) +{ + int gotit = 0; + int cid; + + if ( slap_find_control_id( oid, &cid ) == LDAP_CONTROL_NOT_FOUND ) { + return; + } + + if ( SLAP_ISGLOBALOVERLAY( be ) ) { + BackendDB *bd; + + /* remove from all backends... */ + LDAP_STAILQ_FOREACH( bd, &backendDB, be_next ) { + if ( bd == be->bd_self ) { + gotit = 1; + } + + bd->be_ctrls[ cid ]--; + } + } + + if ( !gotit ) { + be->bd_self->be_ctrls[ cid ]--; + } +} + +void overlay_destroy_one( BackendDB *be, slap_overinst *on ) { slap_overinfo *oi = on->on_info; diff --git a/servers/slapd/controls.c b/servers/slapd/controls.c index 5cdfaf0..0aaac3a 100644 --- a/servers/slapd/controls.c +++ b/servers/slapd/controls.c @@ -344,6 +344,38 @@ register_supported_control2(const char *controloid, return LDAP_SUCCESS; } +#ifdef SLAP_CONFIG_DELETE +int +unregister_supported_control( const char *controloid ) +{ + struct slap_control *sc; + int i; + + if ( controloid == NULL || (sc = find_ctrl( controloid )) == NULL ){ + return -1; + } + + for ( i = 0; slap_known_controls[ i ]; i++ ) { + if ( strcmp( controloid, slap_known_controls[ i ] ) == 0 ) { + do { + slap_known_controls[ i ] = slap_known_controls[ i+1 ]; + } while ( slap_known_controls[ i++ ] ); + num_known_controls--; + break; + } + } + + LDAP_SLIST_REMOVE(&controls_list, sc, slap_control, sc_next); + ch_free( sc->sc_oid ); + if ( sc->sc_extendedopsbv != NULL ) { + ber_bvarray_free( sc->sc_extendedopsbv ); + } + ch_free( sc ); + + return 0; +} +#endif /* SLAP_CONFIG_DELETE */ + /* * One-time initialization of internal controls. */ diff --git a/servers/slapd/proto-slap.h b/servers/slapd/proto-slap.h index fa225d9..65015cb 100644 --- a/servers/slapd/proto-slap.h +++ b/servers/slapd/proto-slap.h @@ -647,6 +647,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)) +#ifdef SLAP_CONFIG_DELETE +LDAP_SLAPD_F (int) unregister_supported_control LDAP_P(( + const char* controloid )); +#endif /* SLAP_CONFIG_DELETE */ LDAP_SLAPD_F (int) slap_controls_init LDAP_P ((void)); LDAP_SLAPD_F (void) controls_destroy LDAP_P ((void)); LDAP_SLAPD_F (int) controls_root_dse_info LDAP_P ((Entry *e)); -- 1.7.3.4 ++++++ 0011-Fix-exposure-of-SSS-VLV-controls-ITS-6647-dif ++++++
From 829dc9ac421c3a69e20b016f405d93ff263f124f 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)
Fixes bnc#648479 Contains the following upstream commits: - plugged one time memory leak (found with valgrind) - Quit send loops if slapd is shutting down - make sure so is correctly initialized (spotted by valgrind, possibly related to ITS#6649) - do not expose control until sssvlv overlay is actually instantiated at least once (ITS#6647) - ITS#6685 fix result code tag - Unregister VLV control as well when last overlay instance is removed (additional fix for ITS#6647) diff --git a/servers/slapd/overlays/sssvlv.c b/servers/slapd/overlays/sssvlv.c index 10dde1f..38e9e2d 100644 --- a/servers/slapd/overlays/sssvlv.c +++ b/servers/slapd/overlays/sssvlv.c @@ -198,7 +198,7 @@ static int pack_vlv_response_control( ber_init2( ber, NULL, LBER_USE_DER ); ber_set_option( ber, LBER_OPT_BER_MEMCTX, &op->o_tmpmemctx ); - rc = ber_printf( ber, "{iii", so->so_vlv_target, so->so_nentries, + rc = ber_printf( ber, "{iie", so->so_vlv_target, so->so_nentries, so->so_vlv_rc ); if ( rc != -1 && so->so_vcontext ) { @@ -801,9 +801,9 @@ static int sssvlv_op_search( op->o_tmpmemctx ); /* Install serversort response callback to handle a new search */ if ( ps || vc ) { - so = ch_malloc( sizeof(sort_op)); + so = ch_calloc( 1, sizeof(sort_op)); } else { - so = op->o_tmpalloc( sizeof(sort_op), op->o_tmpmemctx ); + so = op->o_tmpcalloc( 1, sizeof(sort_op), op->o_tmpmemctx ); } sort_conns[op->o_conn->c_conn_idx] = so; @@ -1158,6 +1158,38 @@ static int sssvlv_db_init( { slap_overinst *on = (slap_overinst *)be->bd_info; sssvlv_info *si; + + if ( ov_count == 0 ) { + int rc; + + rc = register_supported_control2( LDAP_CONTROL_SORTREQUEST, + SLAP_CTRL_SEARCH, + NULL, + sss_parseCtrl, + 1 /* replace */, + &sss_cid ); + if ( rc != LDAP_SUCCESS ) { + Debug( LDAP_DEBUG_ANY, "Failed to register Sort Request control '%s' (%d)\n", + LDAP_CONTROL_SORTREQUEST, rc, 0 ); + return rc; + } + + rc = register_supported_control2( LDAP_CONTROL_VLVREQUEST, + SLAP_CTRL_SEARCH, + NULL, + vlv_parseCtrl, + 1 /* replace */, + &vlv_cid ); + if ( rc != LDAP_SUCCESS ) { + Debug( LDAP_DEBUG_ANY, "Failed to register VLV Request control '%s' (%d)\n", + LDAP_CONTROL_VLVREQUEST, rc, 0 ); +#ifdef SLAP_CONFIG_DELETE + overlay_unregister_control( be, LDAP_CONTROL_SORTREQUEST ); + unregister_supported_control( LDAP_CONTROL_SORTREQUEST ); +#endif /* SLAP_CONFIG_DELETE */ + return rc; + } + } si = (sssvlv_info *)ch_malloc(sizeof(sssvlv_info)); on->on_bi.bi_private = si; @@ -1183,14 +1215,23 @@ static int sssvlv_db_destroy( { slap_overinst *on = (slap_overinst *)be->bd_info; sssvlv_info *si = (sssvlv_info *)on->on_bi.bi_private; - + ov_count--; if ( !ov_count && sort_conns) { sort_conns--; ch_free(sort_conns); ldap_pvt_thread_mutex_destroy( &sort_conns_mutex ); } - + +#ifdef SLAP_CONFIG_DELETE + overlay_unregister_control( be, LDAP_CONTROL_SORTREQUEST ); + overlay_unregister_control( be, LDAP_CONTROL_VLVREQUEST ); + if ( ov_count == 0 ) { + unregister_supported_control( LDAP_CONTROL_SORTREQUEST ); + unregister_supported_control( LDAP_CONTROL_VLVREQUEST ); + } +#endif /* SLAP_CONFIG_DELETE */ + if ( si ) { ch_free( si ); on->on_bi.bi_private = NULL; @@ -1217,30 +1258,9 @@ int sssvlv_initialize() if ( rc ) return rc; - rc = register_supported_control2( LDAP_CONTROL_SORTREQUEST, - SLAP_CTRL_SEARCH, - NULL, - sss_parseCtrl, - 1 /* replace */, - &sss_cid ); - - if ( rc == LDAP_SUCCESS ) { - rc = register_supported_control2( LDAP_CONTROL_VLVREQUEST, - SLAP_CTRL_SEARCH, - NULL, - vlv_parseCtrl, - 1 /* replace */, - &vlv_cid ); - } - - if ( rc == LDAP_SUCCESS ) { - rc = overlay_register( &sssvlv ); - if ( rc != LDAP_SUCCESS ) { - Debug( LDAP_DEBUG_ANY, "Failed to register server side sort overlay\n", 0, 0, 0 ); - } - } - else { - Debug( LDAP_DEBUG_ANY, "Failed to register control %d\n", rc, 0, 0 ); + rc = overlay_register( &sssvlv ); + if ( rc != LDAP_SUCCESS ) { + Debug( LDAP_DEBUG_ANY, "Failed to register server side sort overlay\n", 0, 0, 0 ); } return rc; -- 1.7.3.4 ++++++ 0012-forwarded-bind-failure-messages-cause-success-ITS-6607-dif ++++++
From 2fd270af43c3a952f999fa1de3e9e6c9275e9d08 Mon Sep 17 00:00:00 2001 From: quanah <quanah> Date: Mon, 10 Jan 2011 20:36:19 +0000 Subject: forwarded bind failure messages cause success (ITS#6607)
Original log from CVS: Add rev 1.77 of chain.c for control callbacks ITS#6475, ITS#6607 bnc#674985 CVE-2011-1024 diff --git a/servers/slapd/back-ldap/chain.c b/servers/slapd/back-ldap/chain.c index c517f15..6b7036a 100644 --- a/servers/slapd/back-ldap/chain.c +++ b/servers/slapd/back-ldap/chain.c @@ -854,6 +854,7 @@ ldap_chain_response( Operation *op, SlapReply *rs ) /* we need this to know if back-ldap returned any result */ lb.lb_lc = lc; + sc2.sc_next = sc->sc_next; sc2.sc_private = &lb; sc2.sc_response = ldap_chain_cb_response; op->o_callback = &sc2; @@ -947,6 +948,7 @@ ldap_chain_response( Operation *op, SlapReply *rs ) case LDAP_SUCCESS: case LDAP_REFERRAL: + sr_err = rs->sr_err; /* slapd-ldap sent response */ if ( !op->o_abandon && lb.lb_status != LDAP_CH_RES ) { /* FIXME: should we send response? */ @@ -974,7 +976,7 @@ cannot_chain:; default: #endif /* LDAP_CONTROL_X_CHAINING_BEHAVIOR */ if ( LDAP_CHAIN_RETURN_ERR( lc ) ) { - rs->sr_err = rc; + sr_err = rs->sr_err = rc; rs->sr_type = sr_type; } else { @@ -992,7 +994,8 @@ cannot_chain:; } if ( lb.lb_status == LDAP_CH_NONE && rc != SLAPD_ABANDON ) { - op->o_callback = NULL; + /* give the remaining callbacks a chance */ + op->o_callback = sc->sc_next; rc = rs->sr_err = slap_map_api2result( rs ); send_ldap_result( op, rs ); } -- 1.7.3.4 ++++++ 0013-fix-modrdn-with-empty-olddn-ITS-6768-dif ++++++
From 65dd46e08db6fb93c7e5515c2ced2f0f444f241d Mon Sep 17 00:00:00 2001 From: quanah <quanah> Date: Tue, 4 Jan 2011 19:44:43 +0000 Subject: fix modrdn with empty olddn (ITS#6768)
slapd crashes when processing a modrdn operation with an empty olddn parameter and "remove old DN" enabled. (bnc#674985) diff --git a/servers/slapd/modrdn.c b/servers/slapd/modrdn.c index e2e4bf0..562da72 100644 --- a/servers/slapd/modrdn.c +++ b/servers/slapd/modrdn.c @@ -392,7 +392,9 @@ slap_modrdn2mods( LDAPRDN new_rdn = NULL; assert( !BER_BVISEMPTY( &op->oq_modrdn.rs_newrdn ) ); - assert( !op->orr_deleteoldrdn || !BER_BVISEMPTY( &op->o_req_dn ) ); + + /* if requestDN is empty, silently reset deleteOldRDN */ + if ( BER_BVISEMPTY( &op->o_req_dn ) ) op->orr_deleteoldrdn = 0; if ( ldap_bv2rdn_x( &op->oq_modrdn.rs_newrdn, &new_rdn, (char **)&rs->sr_text, LDAP_DN_FORMAT_LDAP, op->o_tmpmemctx ) ) { -- 1.7.3.4 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Remember to have fun... -- To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-commit+help@opensuse.org