[Date Prev][Date Next] [Chronological] [Thread] [Top]

Re: ldap_url_search fails when URL does not specify host (ldap:///) (ITS#843)



At 09:39 AM 10/18/00 +0000, B.Candler@pobox.com wrote:
>A couple of other issues:
>
>- The difference in ldap_url_parse still exists. i.e. for an empty hostname
>in the URL, openldap-1.2.11 returns a NULL pointer, whilst openldap-2.0.6
>returns a pointer to an empty string.

IMO, this is a bug which you should report as a separate issue.

>- When ldap_url_search returned, it was leaving LDAP_OPT_ERROR_STRING set to
>a null pointer.
>
>In an attempt to test this again, I ran the program below leaving the ldap
>server pointing to a non-existent host (10.0.0.1). After 75 seconds it
>aborts with a sig11:

You test program fails to test the result of ldap_open() and
then called ldap_url_search() with a NULL session handle.


>$ ./ldaptest
>Host: '', Port: 389
>Segmentation fault (core dumped)
>
>$ gdb ldaptest -c ldaptest.core
>...
>Program terminated with signal 11, Segmentation fault.
>Reading symbols from /usr/lib/libc.so.4...done.
>Reading symbols from /usr/libexec/ld-elf.so.1...done.
>#0  0x804ba65 in ldap_alloc_ber_with_options (ld=0x0) at request.c:62
>62          if (( ber = ber_alloc_t( ld->ld_lberoptions )) == NULL ) {
>(gdb) bt
>#0  0x804ba65 in ldap_alloc_ber_with_options (ld=0x0) at request.c:62
>#1  0x8051567 in ldap_build_search_req (ld=0x0, 
>    base=0x805e0c0 "o=whatever,c=GB", scope=2, 
>    filter_in=0x805e0d0 "(objectclass=*)", attrs=0x0, attrsonly=0, sctrls=0x0, 
>    cctrls=0x0, timelimit=-1, sizelimit=-1) at search.c:275
>#2  0x804ea6b in ldap_url_search (ld=0x0, 
>    url=0x80582e0 "ldap:///o=whatever,c=GB??sub?(objectclass=*)", attrsonly=0)
>    at url.c:885
>#3  0x8049099 in main ()
>#4  0x8048f95 in _start ()
>(gdb) 
>
>
>
>Regards,
>
>Brian.
>
>--3V7upXqbjpZ4EhLz
>Content-Type: text/plain; charset=us-ascii
>Content-Disposition: attachment; filename="ldaptest.c"
>
>#include <stdio.h>
>#ifdef OPENLDAPv1
>#include <lber.h>
>#endif
>#include <ldap.h>
>
>#define HOST "10.0.0.1"
>#define URL  "ldap:///o=whatever,c=GB??sub?(objectclass=*)"
>/* #define URL  "ldap://10.0.0.2/o=whatever,c=GB??sub?(objectclass=*)" */
>
>int main(void)
>{
>  LDAP *ld = ldap_open(HOST, 389);
>  LDAPURLDesc *ludp;
>  LDAPMessage *result;
>  int r1, r2;
>
>  if (ldap_url_parse(URL, &ludp) != 0) {
>    fprintf(stderr, "Error in ldap_url_parse\n");
>    return 1;
>  }
>  fprintf(stderr, "Host: '%s', Port: %d\n", ludp->lud_host?ludp->lud_host:"NULL", ludp->lud_port);
>  
>  r1 = ldap_url_search(ld, URL, 0);
>  if (r1 == -1) {
>#ifdef OPENLDAPv1
>    char *error = ld->ld_error;
>#else
>    char *error;
>    int errorno;
>    ldap_get_option(ld, LDAP_OPT_ERROR_NUMBER, &errorno);
>    fprintf(stderr, "Error in ldap_url_search: %d\n", errorno);
>    ldap_get_option(ld, LDAP_OPT_ERROR_STRING, &error);
>#endif
>    fprintf(stderr, "Error in ldap_url_search: %s\n", error?error:"NULL");
>    return 1;
>  }
>  
>  r2 = ldap_result(ld, LDAP_RES_ANY, 1, NULL, &result);
>  if (r2 == -1) {
>#ifdef OPENLDAPv1
>    char *error = ld->ld_error;
>#else
>    char *error;
>    ldap_get_option(ld, LDAP_OPT_ERROR_STRING, &error);
>#endif
>    fprintf(stderr, "Error in ldap_result: %s\n", error?error:"NULL");
>    return 1;
>  }
>  fprintf(stderr, "OK\n");
>  return 0;
>}
>
>--3V7upXqbjpZ4EhLz--