https://bugs.openldap.org/show_bug.cgi?id=9633
Issue ID: 9633
Summary: Intermittent test030 failure caused by referral
chasing
Product: OpenLDAP
Version: unspecified
Hardware: All
OS: All
Status: UNCONFIRMED
Severity: normal
Priority: ---
Component: libraries
Assignee: [email protected]
Reporter: [email protected]
Target Milestone: ---
Not 100% reproducible but occurs frequently using ldif or wt backends. The test
hits an assert failure in libldap.
>>>>> Starting test030-relay for wt...
running defines.sh
Testing virtual naming context mapping with relay ldap meta backend(s)...
Using relay backend...
Starting slapd on TCP/IP port 9051...
Using ldapsearch to check that slapd is running...
Using ldapadd to populate the database...
Searching base="dc=example,dc=com"...
Searching base="o=Example,c=US"...
Searching base="o=Esempio,c=IT"...
Searching base="o=Beispiel,c=DE"...
Modifying database "o=Beispiel,c=DE"...
Modifying database "o=Example,c=US"...
Searching base="o=Example,c=US"...
Searching base="o=Esempio,c=IT"...
Searching filter="(objectClass=referral)"
attrs="'*' ref"
base="dc=example,dc=com"...
base="o=Example,c=US"...
base="o=Esempio,c=IT"...
Searching filter="(seeAlso=cn=all staff,ou=Groups,o=Example,c=US)"
attrs="seeAlso"
base="o=Example,c=US"...
Searching filter="(uid=example)"
attrs="uid"
base="o=Example,c=US"...
Searching filter="(member=cn=Another Added Group,ou=Groups,o=Example,c=US)"
attrs="member"
base="o=Example,c=US"...
Filtering ldapsearch results...
Filtering original ldif used to create database...
Comparing filter output...
Changing password to database "o=Example,c=US"...
Binding with newly changed password to database "o=Beispiel,c=DE"...
Comparing to database "o=Esempio,c=IT"...
>>>>> waiting for things to exit
Using ldap backend...
Starting slapd on TCP/IP port 9051...
Using ldapsearch to check that slapd is running...
Using ldapadd to populate the database...
Searching base="dc=example,dc=com"...
Searching base="o=Example,c=US"...
Searching base="o=Esempio,c=IT"...
Searching base="o=Beispiel,c=DE"...
Modifying database "o=Beispiel,c=DE"...
Modifying database "o=Example,c=US"...
Searching base="o=Example,c=US"...
Search failed (255)!
../../head/tests/scripts/test030-relay: 240: kill: No such process
>>>>> Failed test030-relay for wt after 3 seconds
(exit 255)
make[1]: Leaving directory '/home/hyc/OD/hobj/tests'
backtrace:
gdb) bt
#0 __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:49
#1 0x00007fb9119bd864 in __GI_abort () at abort.c:79
#2 0x00007fb9119bd749 in __assert_fail_base (
fmt=0x7fb911b46f78 "%s%s%s:%u: %s%sAssertion `%s' failed.\n%n",
assertion=0x7fb9123efc93 "lr->lr_refcnt == 0",
file=0x7fb9123ef5c0 "../../../head/libraries/libldap/request.c",
line=1671, function=<optimized out>) at assert.c:92
#3 0x00007fb9119cf3d6 in __GI___assert_fail (
assertion=0x7fb9123efc93 "lr->lr_refcnt == 0",
file=0x7fb9123ef5c0 "../../../head/libraries/libldap/request.c",
line=1671,
function=0x7fb9123efe70 <__PRETTY_FUNCTION__.1>
"ldap_find_request_by_msgid") at assert.c:101
#4 0x00007fb9121d671c in ldap_find_request_by_msgid (ld=0x7fb8fc124d70,
msgid=3) at ../../../head/libraries/libldap/request.c:1671
#5 0x00007fb9121b882d in try_read1msg (ld=0x7fb8fc124d70, msgid=5, all=1,
lc=0x7fb8fc128180, result=0x7fb90511bf48)
at ../../../head/libraries/libldap/result.c:575
#6 0x00007fb9121b8135 in wait4msg (ld=0x7fb8fc124d70, msgid=5, all=1,
timeout=0x7fb90511bf90, result=0x7fb90511bf48)
at ../../../head/libraries/libldap/result.c:369
#7 0x00007fb9121b77cb in ldap_result (ld=0x7fb8fc124d70, msgid=5, all=1,
timeout=0x7fb90511bf90, result=0x7fb90511bf48)
--Type <RET> for more, q to quit, c to continue without paging--
at ../../../head/libraries/libldap/result.c:120
#8 0x00007fb9121d3b8c in ldap_new_connection (ld=0x7fb8fc124d70,
srvlist=0x7fb90511c160, use_ldsb=0, connect=1, bind=0x7fb90511c1a0,
m_req=1, m_res=1) at ../../../head/libraries/libldap/request.c:627
#9 0x00007fb9121d2ba0 in ldap_send_server_request (ld=0x7fb8fc124d70,
ber=0x7fb8f0137ea0, msgid=4, parentreq=0x7fb8f0000fd0,
srvlist=0x7fb90511c160, lc=0x0, bind=0x7fb90511c1a0, m_noconn=0, m_res=1)
at ../../../head/libraries/libldap/request.c:253
#10 0x00007fb9121d56e5 in ldap_chase_v3referrals (ld=0x7fb8fc124d70,
lr=0x7fb8f0000fd0, refs=0x0, sref=1, errstrp=0x7fb8f0001000,
hadrefp=0x7fb90511c208) at ../../../head/libraries/libldap/request.c:1283
#11 0x00007fb9121b8b40 in try_read1msg (ld=0x7fb8fc124d70, msgid=3, all=0,
lc=0x7fb8fc128180, result=0x7fb90511c4e8)
at ../../../head/libraries/libldap/result.c:680
#12 0x00007fb9121b8135 in wait4msg (ld=0x7fb8fc124d70, msgid=3, all=0,
timeout=0x7fb90511c520, result=0x7fb90511c4e8)
at ../../../head/libraries/libldap/result.c:369
#13 0x00007fb9121b77cb in ldap_result (ld=0x7fb8fc124d70, msgid=3, all=0,
timeout=0x7fb90511c520, result=0x7fb90511c4e8)
at ../../../head/libraries/libldap/result.c:120
#14 0x000055a093724e35 in ldap_back_search (op=0x7fb8f0000be0,
rs=0x7fb90511d990) at ../../../../head/servers/slapd/back-ldap/search.c:317
#15 0x000055a0936ff157 in overlay_op_walk (op=0x7fb8f0000be0,
--Type <RET> for more, q to quit, c to continue without paging--
rs=0x7fb90511d990, which=op_search, oi=0x55a0943711d0, on=0x0)
at ../../../head/servers/slapd/backover.c:706
#16 0x000055a0936ff417 in over_op_func (op=0x7fb8f0000be0, rs=0x7fb90511d990,
which=op_search) at ../../../head/servers/slapd/backover.c:766
#17 0x000055a0936ff59b in over_op_search (op=0x7fb8f0000be0, rs=0x7fb90511d990)
at ../../../head/servers/slapd/backover.c:796
#18 0x000055a09365d201 in fe_op_search (op=0x7fb8f0000be0, rs=0x7fb90511d990)
at ../../../head/servers/slapd/search.c:426
#19 0x000055a09365c9fa in do_search (op=0x7fb8f0000be0, rs=0x7fb90511d990)
at ../../../head/servers/slapd/search.c:267
#20 0x000055a093658e0c in connection_operation (ctx=0x7fb90511daf0,
arg_v=0x7fb8f0000be0) at ../../../head/servers/slapd/connection.c:1113
#21 0x000055a09365956b in connection_read_thread (ctx=0x7fb90511daf0,
argv=0x10) at ../../../head/servers/slapd/connection.c:1265
#22 0x00007fb9121feea3 in ldap_int_thread_pool_wrapper (xpool=0x55a094357ac0)
at ../../../head/libraries/libldap/tpool.c:1053
#23 0x00007fb911b8c450 in start_thread (arg=0x7fb90511e640)
at pthread_create.c:481
#24 0x00007fb911aaed53 in clone ()
at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
(gdb) frame 11
#11 0x00007fb9121b8b40 in try_read1msg (ld=0x7fb8fc124d70, msgid=3, all=0,
lc=0x7fb8fc128180, result=0x7fb90511c4e8)
at ../../../head/libraries/libldap/result.c:680
680 refer_cnt =
ldap_chase_v3referrals( ld, lr, refs,
(gdb) l
675 if ( ber_scanf( &tmpber, "{v}", &refs )
== LBER_ERROR ) {
676 rc = LDAP_DECODING_ERROR;
677
678 } else {
679 /* Note: refs array is freed by
ldap_chase_v3referrals */
680 refer_cnt =
ldap_chase_v3referrals( ld, lr, refs,
681 1, &lr->lr_res_error,
&hadref );
682 if ( refer_cnt > 0 ) {
683 /* successfully chased
reference */
684 /* If haven't got end
search, set chasing referrals */
(gdb) p *lr
$7 = {lr_msgid = 3, lr_status = 1, lr_refcnt = 1, lr_outrefcnt = 1,
lr_abandoned = 0, lr_origid = 3, lr_parentcnt = 0, lr_res_msgtype = 115,
lr_res_errno = 0, lr_res_error = 0x0, lr_res_matched = 0x0,
lr_ber = 0x7fb8f0139eb0, lr_conn = 0x7fb8fc128180, lr_dn = {bv_len = 17,
bv_val = 0x7fb8f0128b79 "dc=example,dc=com\n\001\002\n\001"},
lr_parent = 0x0, lr_child = 0x0, lr_refnext = 0x0, lr_prev = 0x0,
lr_next = 0x0}
(gdb)
The problem appears to be due to recursion in try_read1msg() when chasing a
referral. In this case it's processing msgid 3 and then while looking for
response to msgid 5 it sees another response to msgid 3. It looks up the
corresponding request and sees it already has a non-zero lr_refcnt and assert
fails there.
--
You are receiving this mail because:
You are on the CC list for the issue.