[Date Prev][Date Next]
[Chronological]
[Thread]
[Top]
RE: segfault in ldap_back_search() with ENABLE_REWRITE (ITS#2825)
Looks like the sasl code assumed only nbase was ever needed by the backends.
The fix is to provide a non-NULL base in sasl.c. I'll take care of this.
-- Howard Chu
Chief Architect, Symas Corp. Director, Highland Sun
http://www.symas.com http://highlandsun.com/hyc
Symas: Premier OpenSource Development and Support
> -----Original Message-----
> From: owner-openldap-bugs@OpenLDAP.org
> [mailto:owner-openldap-bugs@OpenLDAP.org]On Behalf Of
> ftr@highstreetnetworks.com
> Sent: Thursday, November 13, 2003 6:34 AM
> To: openldap-its@OpenLDAP.org
> Subject: Re: segfault in ldap_back_search() with ENABLE_REWRITE
> (ITS#2825)
>
>
> This is a multi-part message in MIME format.
> --------------040507020600070408090206
> Content-Type: text/plain; charset=ISO-8859-1; format=flowed
> Content-Transfer-Encoding: 7bit
>
> Pierangelo Masarati wrote:
>
> >I assumed "base" would always be set; however,
> >
> slap_sasl_match(), slap_sasl2dn() and two places in sasl.c call it
> explicitly with NULL:
> vvvvv
> (*be->be_search)( be, conn, &op, NULL, &dn,
> scope, LDAP_DEREF_NEVER, 1, 0,
> filter, NULL, NULL, 1 );
>
> I tried applying the attached patch, but there are many other places
> further down that make this same assumption.
>
> --
> Tom Riddle
> HighStreet Networks
> www.highstreetnetworks.com
>
>
> --------------040507020600070408090206
> Content-Type: text/plain;
> name="hsn1.patch"
> Content-Transfer-Encoding: 7bit
> Content-Disposition: inline;
> filename="hsn1.patch"
>
> --- openldap-2.1.22-orig/servers/slapd/back-ldap/search.c
> 2003-03-12 17:27:57.000000000 -0500
> +++ openldap-2.1.22/servers/slapd/back-ldap/search.c
> 2003-11-12 09:53:32.000000000 -0500
> @@ -157,18 +157,18 @@
> */
> #ifdef ENABLE_REWRITE
> switch ( rewrite_session( li->rwinfo, "searchBase",
> - base->bv_val, conn, &mbase.bv_val ) ) {
> + base ? base->bv_val : NULL, conn,
> &mbase.bv_val ) ) {
> case REWRITE_REGEXEC_OK:
> - if ( mbase.bv_val == NULL ) {
> + if ( mbase.bv_val == NULL && base) {
> mbase = *base;
> }
> #ifdef NEW_LOGGING
> LDAP_LOG( BACK_LDAP, DETAIL1,
> "[rw] searchBase: \"%s\" -> \"%s\"\n",
> - base->bv_val, mbase.bv_val, 0 );
> + base ? base->bv_val : "", mbase.bv_val, 0 );
> #else /* !NEW_LOGGING */
> Debug( LDAP_DEBUG_ARGS, "rw> searchBase: \"%s\"
> -> \"%s\"\n%s",
> - base->bv_val, mbase.bv_val, "" );
> + base ? base->bv_val : "", mbase.bv_val, "" );
> #endif /* !NEW_LOGGING */
> break;
>
>
> --------------040507020600070408090206--
>