[Date Prev][Date Next]
[Chronological]
[Thread]
[Top]
Re: ldap_unbind 2.0.11
That's not a bug in ldap_unbind(), but a bug in your program.
You cannot send a request to a NULL connection. ldap_unbind()'s
interface is quite consistent with other ldap_*() routines
which expect to be passed an LDAP connection.
Kurt
At 07:27 AM 7/24/2001, Dipl.-Inf. Guus Leeuw jr. wrote:
>Folks,
>
>just wondering whether somebody is fixing ldap_unbind in 2.0.11.
>
>Following just happened at my site here:
>void clean_up(void)
>{
> /* Snippets */
> ldap_memfree(user_dn);
> ldap_unbind(ldap_connection);
>}
>
>$ make
>$ src/login
>SIGSEGV caught. Program Terminated.
>$ gdb src/login
>(gdb) run
>Starting program: .../src/login
>...
>Program received signal SIGSEGV, Segmentation fault.
>ldap_ld_free (ld=0x0, close=1, sctrls=0x0, cctrls=0x0) at unbind.c:70
>70 unbind.c: No such file or directory.
>
>Obviously, my ldap_connection was a (LDAP *) 0.
>BUT, user_dn has been (LDAPMessage *) 0 as well, and that one doesn't
>break...
>
>Snippet from ber_memfree (which is the function called in the end by
>ldap_memfree:
>if(p == NULL ) {
> return;
>}
>
>in any case, here is diff -u unbind.c.2.0.11 unbind.c:
>--- unbind.c.2.0.11 Tue Jul 24 15:10:26 2001
>+++ unbind.c Tue Jul 24 15:18:47 2001
>@@ -66,6 +66,10 @@
> int err = LDAP_SUCCESS;
> LDAPRequest *lr, *nextlr;
>
>+ if(ld == NULL ) {
>+ return LDAP_SUCCESS;
>+ }
>+
> /* free LDAP structure and outstanding requests/responses */
> for ( lr = ld->ld_requests; lr != NULL; lr = nextlr ) {
> nextlr = lr->lr_next;
>
>BTW, unbind.c is in libraries/libldap/ (Just for reference :)
>
>I believe a consistent interface is better than an inconsistent interface,
>and I'ld be glad if this patch can be worked into the release, unless, of
>course,
>there is a reason for not checking ld == NULL in ldap_ld_free.
>
>Cheers,
>Guus