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

Re: slapd crash (ITS#38)



Ok, 

another one:


shanagary# !.
./slapd -p 39039 -d 901
slapd 1.1.3-Release (Tue Jan 19 13:07:11 MET 1999)
        hwr@shanagary:/home/hwr/src/openldap-rel-eng/ldap/servers/slapd
ACL: access to dn=.*, O=XLINK GMBH, C=DE
        by dn=self
        by dn=.*, O=XLINK GMBH, C=DE
        by domain=.*xlink.net
        by dn=.*

slapd starting
conn=0 fd=5 connection from localhost (127.0.0.1) accepted.
do_bind
conn=0 op=0 BIND dn="cn=Heiko Rupp,o=Xlink GmbH,c=DE" method=128
do_bind: version 2 dn (cn=Heiko Rupp,o=Xlink GmbH,c=DE) method 128
==> ldbm_back_bind: dn: cn=Heiko Rupp,o=Xlink GmbH,c=DE
dn2entry_r: dn: cn=Heiko Rupp,o=Xlink GmbH,c=DE
=> dn2id( "cn=Heiko Rupp,o=Xlink GmbH,c=DE" )
=> ldbm_cache_open( "/var/db/ldap/dn2id.dbb", 514, 600 )
ldbm_cache_open (blksize 8192) (maxids 2046) (maxindirect 2)
<= ldbm_cache_open (opened 0)
<= dn2id NOID
dn2entry_r: dn: o=Xlink GmbH,c=DE
=> dn2id( "o=Xlink GmbH,c=DE" )
=> ldbm_cache_open( "/var/db/ldap/dn2id.dbb", 514, 600 )
<= ldbm_cache_open (cache 0)
<= dn2id 1
=> id2entry_r( 1 )
=> ldbm_cache_open( "/var/db/ldap/id2entry.dbb", 514, 600 )
ldbm_cache_open (blksize 8192) (maxids 2046) (maxindirect 2)
<= ldbm_cache_open (opened 1)
=> str2entry
<= str2entry 0x36540
entry_rdwr_rlock: ID: 1
<= id2entry_r( 1 ) (disk)
====> cache_return_entry_r
entry_rdwr_runlock: ID: 1
send_ldap_result 0::
conn=0 op=0 RESULT err=0 tag=97 nentries=0
do_search
SRCH "cn=Heiko Rupp,o=Xlink GmbH,c=DE" 0 2    0 0 0
    filter: (objectclass=*)
    attrs:
conn=0 op=1 SRCH base="cn=Heiko Rupp,o=Xlink GmbH,c=DE" scope=0 filter="(objectclass=*)"
=> ldbm_back_search
<= dereferencing dn: "cn=Heiko Rupp,o=Xlink GmbH,c=DE"
dn2entry_r: dn: cn=Heiko Rupp,o=Xlink GmbH,c=DE
=> dn2id( "cn=Heiko Rupp,o=Xlink GmbH,c=DE" )
=> ldbm_cache_open( "/var/db/ldap/dn2id.dbb", 514, 600 )
<= ldbm_cache_open (cache 0)
<= dn2id NOID
dn2entry_r: dn: o=Xlink GmbH,c=DE
=> dn2id( "o=Xlink GmbH,c=DE" )
====> cache_find_entry_dn2id: found dn: O=XLINK GMBH,C=DE
entry_rdwr_rlock: ID: 1
entry_rdwr_runlock: ID: 1
<= dn2id 1 (in cache)
=> id2entry_r( 1 )
====> cache_find_entry_dn2id: found id: 1 rw: 0
entry_rdwr_rlock: ID: 1
<= id2entry_r 0x36540 (cache)
====> cache_return_entry_r
entry_rdwr_runlock: ID: 1
dn2entry_r: dn: o=Xlink GmbH,c=DE
=> dn2id( "o=Xlink GmbH,c=DE" )
====> cache_find_entry_dn2id: found dn: O=XLINK GMBH,C=DE
entry_rdwr_rlock: ID: 1
entry_rdwr_runlock: ID: 1
<= dn2id 1 (in cache)
=> id2entry_r( 1 )
====> cache_find_entry_dn2id: found id: 1 rw: 0
entry_rdwr_rlock: ID: 1
<= id2entry_r 0x36540 (cache)
<= matched o=Xlink GmbH,c=DE
<= remainder cn=Heiko Rupp,
<= checking for alias for dn o=Xlink GmbH, c=DE
<= l&g we have o=Xlink GmbH,c=DE vs o=Xlink GmbH, c=DE 
====> cache_return_entry_r
entry_rdwr_runlock: ID: 1
<= expanded to cn=Heiko Rupp,o=Xlink GmbH, c=DE
====> cache_return_entry_r
entry_rdwr_runlock: ID: 1
dn2entry_r: dn: cn=Heiko Rupp,o=Xlink GmbH, c=DE
=> dn2id( "cn=Heiko Rupp,o=Xlink GmbH, c=DE" )
=> ldbm_cache_open( "/var/db/ldap/dn2id.dbb", 514, 600 )
<= ldbm_cache_open (cache 0)
<= dn2id NOID
dn2entry_r: dn: o=Xlink GmbH, c=DE
=> dn2id( "o=Xlink GmbH, c=DE" )
====> cache_find_entry_dn2id: found dn: O=XLINK GMBH,C=DE
entry_rdwr_rlock: ID: 1
entry_rdwr_runlock: ID: 1
<= dn2id 1 (in cache)
=> id2entry_r( 1 )
====> cache_find_entry_dn2id: found id: 1 rw: 0
entry_rdwr_rlock: ID: 1
<= id2entry_r 0x36540 (cache)
====> cache_return_entry_r
entry_rdwr_runlock: ID: 1
dn2entry_r: dn: o=Xlink GmbH, c=DE
=> dn2id( "o=Xlink GmbH, c=DE" )
====> cache_find_entry_dn2id: found dn: O=XLINK GMBH,C=DE
entry_rdwr_rlock: ID: 1
entry_rdwr_runlock: ID: 1
<= dn2id 1 (in cache)
=> id2entry_r( 1 )
====> cache_find_entry_dn2id: found id: 1 rw: 0
entry_rdwr_rlock: ID: 1
<= id2entry_r 0x36540 (cache)
<= matched o=Xlink GmbH, c=DE
<= remainder cn=Heiko Rupp,
<= checking for alias for dn o=Xlink GmbH, c=DE
<= l&g we have o=Xlink GmbH, c=DE vs o=Xlink GmbH, c=DE 
====> cache_return_entry_r
entry_rdwr_runlock: ID: 1
====> cache_return_entry_r
entry_rdwr_runlock: ID: 1
dn2entry_r: dn: (null)
Segmentation fault (core dumped)
shanagary# gdb slapd slapd.core
#0  0x40081d81 in strdup ()
(gdb) bt
#0  0x40081d81 in strdup ()
#1  0xea1f in ch_strdup (string=0x0) at ch_malloc.c:72
#2  0x1b79c in dn2id (be=0x32800, dn=0x0) at dn2id.c:72
#3  0x1bcb7 in dn2entry (be=0x32800, dn=0x0, matched=0xefbfd3f8, rw=0)
    at dn2id.c:171
#4  0x1bda6 in dn2entry_r (be=0x32800, dn=0x0, matched=0xefbfd3f8)
    at dn2id.c:207
#5  0x23556 in derefDN (be=0x32800, conn=0x332e4, op=0x36400, 
    dn=0x363c0 "cn=Heiko Rupp,o=Xlink GmbH,c=DE") at alias.c:215
#6  0x21d99 in ldbm_back_search (be=0x32800, conn=0x332e4, op=0x36400, 
    base=0x363c0 "cn=Heiko Rupp,o=Xlink GmbH,c=DE", scope=0, deref=2, 
    slimit=-1, tlimit=-1, filter=0x41aa0, filterstr=0x41bc0 "(objectclass=*)", 
    attrs=0x0, attrsonly=0) at search.c:82
#7  0x4d06 in do_search (conn=0x332e4, op=0x36400) at search.c:148
#8  0x403a in connection_operation (arg_v=0x3fbb0) at connection.c:74
#9  0x2818b in pthread_create (tid=0x3642c, attr=0xefbfd528, 
    func=0x3e30 <connection_operation>, arg=0x3fbb0) at thread.c:534
#10 0x466b in connection_activity (conn=0x332e4) at connection.c:225
#11 0x3b80 in slapd_daemon (port=0x987f) at daemon.c:365
#12 0x2818b in pthread_create (tid=0x30004, attr=0x0, 
    func=0x24f8 <slapd_daemon>, arg=0x987f) at thread.c:534
#13 0x1dd2 in main (argc=5, argv=0xefbfd78c) at main.c:139

#5  0x23556 in derefDN (be=0x32800, conn=0x332e4, op=0x36400, 
    dn=0x363c0 "cn=Heiko Rupp,o=Xlink GmbH,c=DE") at alias.c:215
215       if ( (eNew = dn2entry_r( be, newDN, &matched )) != NULL) {
(gdb) p newDN
$1 = 0x0


A poosible patch (though I think this should be solved "deeper"):

diff -c alias.c,1 alias.c
*** alias.c,1   Tue Jan 19 14:20:53 1999
--- alias.c     Tue Jan 19 14:21:19 1999
***************
*** 212,217 ****
--- 212,218 ----
     * the final part of the DN might be an alias 
     * so try to dereference it.
     */
+ if (newDN != NULL) {
    if ( (eNew = dn2entry_r( be, newDN, &matched )) != NULL) {
      if ((eDeref = derefAlias_r( be, conn, op, eNew )) != NULL) {
        free (newDN);
***************
*** 233,238 ****
--- 234,240 ----
      send_ldap_result( conn, op, LDAP_ALIAS_PROBLEM, "",
                      "Maximum alias dereference depth exceeded for base" );
    }
+ }
  
    if (newDN == NULL) {
      newDN = ch_strdup ( dn );


  Heiko