Hi, here's a backtrace with debugging symbols. The problem is in libhx509: #0 0x0f8bfedc in *__GI_raise (sig=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:64 #1 0x0f8c1b74 in *__GI_abort () at abort.c:88 #2 0x0fe0c6b8 in _hx509_abort (fmt=0xfe49e2c "slot not in session") at cert.c:3237 #3 0x0fe2141c in p11_put_session (p=0x1001aa48, slot=0x10027428, session=1) at ks_p11.c:486 #4 0x0fe212cc in p11_get_session (context=0x100189c8, p=0x1001aa48, slot=0x10027428, lock=0x1001a9b8, psession=0xbfa3b5c4) at ks_p11.c:457 #5 0x0fe20eb4 in p11_init_slot (context=0x100189c8, p=0x1001aa48, lock=0x1001a9b8, id=0, num=0, slot=0x10027428) at ks_p11.c:353 #6 0x0fe2258c in p11_init (context=0x100189c8, certs=0x1001aa10, data=0x1001aa18, flags=0, residue=0xbfa3c376 "/usr/lib/opensc/opensc-pkcs11.so", lock=0x1001a9b8) at ks_p11.c:914 #7 0x0fe1caf4 in hx509_certs_init (context=0x100189c8, name=0xbfa3c36f "PKCS11:/usr/lib/opensc/opensc-pkcs11.so", flags=0, lock=0x1001a9b8, certs=0x10018320) at keyset.c:158 #8 0x0fefab8c in _krb5_pk_load_id (context=0x10018008, ret_id=0x10018338, user_id=0xbfa3c36f "PKCS11:/usr/lib/opensc/opensc-pkcs11.so", anchor_id=0x100182f0 "FILE:/etc/ssl/certs/krbca.pem", chain_list=0x0, revoke_list=0x0, prompter=0x10005e70 <krb5_prompter_posix>, prompter_data=0x0, password=0xbfa3b8f4 "") at pkinit.c:1508 #9 0x0fefc144 in krb5_get_init_creds_opt_set_pkinit (context=0x10018008, opt=0x100188f8, principal=0x10018358, user_id=0xbfa3c36f "PKCS11:/usr/lib/opensc/opensc-pkcs11.so", x509_anchors=0x100182f0 "FILE:/etc/ssl/certs/krbca.pem", pool=0x0, pki_revoke=0x0, flags=0, prompter=0x10005e70 <krb5_prompter_posix>, prompter_data=0x0, password=0xbfa3b8f4 "") at pkinit.c:2027 #10 0x10003f6c in get_new_tickets (context=0x10018008, principal=0x10018358, ccache=0x10018250, ticket_life=0, interactive=1) at kinit.c:426 #11 0x100053c4 in main (argc=1, argv=0xbfa3c170) at kinit.c:815
abort is being called due to P11_SESSION_IN_USE not being set but p11_put_session wants to clear it. The real fix probably simply wants to remove the p11_put_session calls but with the attached version it's clearer what's going wrong. Cheers, -- Guido
>From b4f49d6877e97f5ba26c6e719369f6d2abb63afa Mon Sep 17 00:00:00 2001 From: Guido Guenther <[EMAIL PROTECTED]> Date: Fri, 19 Sep 2008 00:07:56 +0200 Subject: [PATCH] set P11_SESSION_IN_USE so p11_put_session can clear it --- lib/hx509/ks_p11.c | 2 ++ 1 files changed, 2 insertions(+), 0 deletions(-) diff --git a/lib/hx509/ks_p11.c b/lib/hx509/ks_p11.c index bf46e66..7f2c395 100644 --- a/lib/hx509/ks_p11.c +++ b/lib/hx509/ks_p11.c @@ -454,6 +454,7 @@ p11_get_session(hx509_context context, "Failed to login on slot id %d " "with error: 0x%08x", (int)slot->id, ret); + slot->flags |= P11_SESSION_IN_USE; p11_put_session(p, slot, slot->session); return HX509_PKCS11_LOGIN; } @@ -463,6 +464,7 @@ p11_get_session(hx509_context context, if (context) hx509_set_error_string(context, 0, ENOMEM, "out of memory"); + slot->flags |= P11_SESSION_IN_USE; p11_put_session(p, slot, slot->session); return ENOMEM; } -- 1.5.6.5