Well that was a breeze. The attached patch fixes the following assertion when trying to use cldap functionality: io.c:81: ber_write: Assertion `buf != ((void *)0)' failed. Mike On Wed, 30 May 2007 21:14:59 -0400 Michael B Allen <mba2000@ioplex.com> wrote: > On Wed, 30 May 2007 18:42:11 -0400 > Michael B Allen <mba2000@ioplex.com> wrote: > > > Hi, > > > > What's the status of the client oriented connectionless code? I'm getting > > an abort. I'm tracking it down now and I'm willing to put some work into > > this so if anyone has some advice I'd appreciate it. > > > > Mike > > > > $ gdb cldap > > GNU gdb Red Hat Linux (6.3.0.0-1.132.EL4rh) > > Copyright 2004 Free Software Foundation, Inc. > > GDB is free software, covered by the GNU General Public License, and you are > > welcome to change it and/or distribute copies of it under certain conditions. > > Type "show copying" to see the conditions. > > There is absolutely no warranty for GDB. Type "show warranty" for details. > > This GDB was configured as "i386-redhat-linux-gnu"...Using host libthread_db library "/lib/tls/libthread_db.so.1". > > > > (gdb) run cldap://dc1.example.com > > Starting program: /home/miallen/cldap cldap://dc1.example.com > > cldap: io.c:81: ber_write: Assertion `buf != ((void *)0)' failed. > > > > Program received signal SIGABRT, Aborted. > > 0x0025d7a2 in _dl_sysinfo_int80 () from /lib/ld-linux.so.2 > > (gdb) bt > > #0 0x0025d7a2 in _dl_sysinfo_int80 () from /lib/ld-linux.so.2 > > #1 0x0029d7f5 in raise () from /lib/tls/libc.so.6 > > #2 0x0029f199 in abort () from /lib/tls/libc.so.6 > > #3 0x00296dd1 in __assert_fail () from /lib/tls/libc.so.6 > > #4 0x009b0722 in ber_write () from /home/miallen/openldap/lib/liblber-2.3.so.0 > > #5 0x0061926a in ldap_build_search_req () from /home/miallen/openldap/lib/libldap-2.3.so.0 > > #6 0x00618ff3 in ldap_search_ext () from /home/miallen/openldap/lib/libldap-2.3.so.0 > > #7 0x00619087 in ldap_search_ext_s () from /home/miallen/openldap/lib/libldap-2.3.so.0 > > #8 0x0804959b in run (url=0xbff90c04 "cldap://dc1.example.com") at cldap.c:23 > > #9 0x08049767 in main (argc=0, argv=0xbff21914) at cldap.c:83 > > (gdb) > > Well the problem is that the ldap_search_ext function calls > ldap_build_search_req which calls > > ber_write(ber, ld->ld_options.ldo_peer, sizeof(struct sockaddr), 0); > > but ldo_peer is NULL because it hasn't been connected yet. > > This is best illustrated with the following call sequence outline: > > ldap_search_ext > ldap_build_search_req (tries to use ldo_peer here but ...) > ldap_send_inital_request > ldap_send_server_request > ldap_new_connection > ldap_int_open_connection > ldap_connect_to_host calls > getaddrinfo > ldap_pvt_connect (ldo_peer initialized here) > > Clearly the ldap_build_search_req function is not in a good position to > know the address of the target. That would be the responsibility of the > transport layer. > > So I believe the best solution is to simply skip those 4 bytes and let > one of the send functions encode the target address. > > I'll prepare a patch. > > Mike
Attachment:
cldap.patch
Description: Binary data