Is kfw thread safe ?
Markus Moeller
huaraz at moeller.plus.com
Sun Sep 9 09:13:28 EDT 2007
I have an application running on w2k3 compiled with VisualStudio 2005
Express Edition which calls gss_init_sec_context from different threads with
a memory cache and I get from time to time the following if I run it under
debug in VS 2005:
First-chance exception at 0x77e55e02 in thread_test.exe: 0x000006D9: There
are no more endpoints available from the endpoint mapper.
One sample trace is:
kernel32.dll!77e55e02()
[Frames below may be incorrect and/or missing, no symbols loaded for
kernel32.dll]
kernel32.dll!77e55e02()
rpcrt4.dll!77c71abe()
rpcrt4.dll!77c71122()
rpcrt4.dll!77c84664()
rpcrt4.dll!77c848aa()
rpcrt4.dll!77ce2125()
ntdll.dll!7c821b84()
ntdll.dll!7c821b84()
> krb5_32.dll!asn1_decode_principal_name(code_buffer_rep * buf=0x00000774,
> krb5_principal_data * * val=0x00000000) Line 382 + 0x1b bytes C
kernel32.dll!77e6bad8()
ntdll.dll!7c8302b3()
ntdll.dll!7c82f9c1()
ntdll.dll!7c8302e7()
ntdll.dll!7c82fadf()
ntdll.dll!7c82fb23()
ws2_32.dll!71c07ebc()
ws2_32.dll!71c03717()
ws2_32.dll!71c035b3()
ntdll.dll!7c8302b3()
ntdll.dll!7c82f9c1()
ntdll.dll!7c82f9dd()
ws2_32.dll!71c07959()
ntdll.dll!7c8302e7()
ntdll.dll!7c82fadf()
ntdll.dll!7c82fb23()
ws2_32.dll!71c07039()
ntdll.dll!7c8302e7()
ntdll.dll!7c82fadf()
ntdll.dll!7c82fb23()
mswsock.dll!71b23f4b()
mswsock.dll!71b23f4b()
mswsock.dll!71b24206()
mswsock.dll!71b2423a()
ntdll.dll!7c82fb23()
hnetcfg.dll!5f2a2acf()
hnetcfg.dll!5f29c464()
mswsock.dll!71b2217f()
ntdll.dll!7c8213e4()
mswsock.dll!71b21aba()
mswsock.dll!71b23f4b()
mswsock.dll!71b24891()
ws2help.dll!71bf17fc()
mswsock.dll!71b26493()
mswsock.dll!71b22767()
ws2help.dll!71bf17fc()
mswsock.dll!71b26599()
ws2_32.dll!71c039ce()
krb5_32.dll!start_connection(conn_state * state=0x003d9ec8, select_state *
selstate=0x00e604c8, sendto_callback_info * callback_info=0x00000000,
_krb5_data * callback_buffer=0x00000000) Line 631 + 0x15 bytes C
krb5_32.dll!maybe_send(conn_state * conn=0x003d9ec8, select_state *
selstate=0x00e604c8, sendto_callback_info * callback_info=0x00000000,
_krb5_data * callback_buffer=0x00000000) Line 748 + 0x11 bytes C
krb5_32.dll!krb5int_sendto(_krb5_context * context=0x003dfa10, const
_krb5_data * message=0x003d7558, const addrlist * addrs=0x00beede8,
sendto_callback_info * callback_info=0x00000000, _krb5_data *
reply=0x00beef9c, sockaddr * localaddr=0x00000000, int *
localaddrlen=0x00000000, sockaddr * remoteaddr=0x00000000, int *
remoteaddrlen=0x00000000, int * addr_used=0x00beeddc) Line 1180 + 0x28
bytes C
krb5_32.dll!krb5_sendto_kdc(_krb5_context * context=0x003dfa10, const
_krb5_data * message=0x003d7558, const _krb5_data * realm=0x003d72dc,
_krb5_data * reply=0x00beef9c, int * use_master=0x00beee78, int tcp_only=0)
Line 385 + 0x20 bytes C
krb5_32.dll!krb5_send_tgs(_krb5_context * context=0x003dfa10, int
kdcoptions=8388608, const _krb5_ticket_times * timestruct=0x00bef048, const
int * ktypes=0x00000000, const krb5_principal_data * sname=0x003d72d8,
_krb5_address * const * addrs=0x003d74e8, _krb5_authdata * const *
authorization_data=0x00000000, _krb5_pa_data * const * padata=0x00000000,
const _krb5_data * second_ticket=0x00000000, _krb5_creds *
in_cred=0x00bef214, _krb5_response * rep=0x00beef94) Line 267 + 0x26 bytes
C
krb5_32.dll!krb5_get_cred_via_tkt(_krb5_context * context=0x003dfa10,
_krb5_creds * tkt=0x00bef214, int kdcoptions=8388608, _krb5_address * const
* address=0x003d74e8, _krb5_creds * in_cred=0x00bef02c, _krb5_creds * *
out_cred=0x003d7050) Line 220 + 0x40 bytes C
krb5_32.dll!try_kdc(tr_state * ts=0x00bef198, _krb5_creds *
tgtq=0x00bef0e0) Line 498 + 0x57 bytes C
krb5_32.dll!next_closest_tgt(tr_state * ts=0x00bef198, krb5_principal_data
* client=0x003dde60) Line 580 + 0xc bytes C
krb5_32.dll!do_traversal(_krb5_context * ctx=0x003dfa10, _krb5_ccache *
ccache=0x003dd160, krb5_principal_data * client=0x003dde60,
krb5_principal_data * server=0x003dde88, _krb5_creds *
out_cc_tgt=0x00bef32c, _krb5_creds * * out_tgt=0x00bef328, _krb5_creds * * *
out_kdc_tgts=0x00bef4d0) Line 722 + 0xe bytes C
krb5_32.dll!krb5_get_cred_from_kdc_opt(_krb5_context * context=0x003dfa10,
_krb5_ccache * ccache=0x003dd160, _krb5_creds * in_cred=0x00bef598,
_krb5_creds * * out_cred=0x00bef674, _krb5_creds * * * tgts=0x00bef4d0, int
kdcopt=0) Line 856 + 0x22 bytes C
krb5_32.dll!krb5_get_cred_from_kdc(_krb5_context * context=0x003dfa10,
_krb5_ccache * ccache=0x003dd160, _krb5_creds * in_cred=0x00bef598,
_krb5_creds * * out_cred=0x00bef674, _krb5_creds * * * tgts=0x00bef4d0)
Line 1186 + 0x16 bytes C
krb5_32.dll!krb5_get_credentials(_krb5_context * context=0x003dfa10, int
options=0, _krb5_ccache * ccache=0x003dd160, _krb5_creds *
in_creds=0x00bef598, _krb5_creds * * out_creds=0x00bef674) Line 144 + 0x15
bytes C
gssapi32.dll!get_credentials() Line 118 + 0x17 bytes C
gssapi32.dll!new_connection(unsigned int * minor_status=0x00befbe0,
_krb5_gss_cred_id_rec * cred=0x003d7940, gss_ctx_id_struct * *
context_handle=0x003db528, gss_name_struct * target_name=0x003d7b30,
gss_OID_desc_struct * mech_type=0x003d7f98, unsigned int req_flags=32,
unsigned int time_req=0, gss_channel_bindings_struct *
input_chan_bindings=0x00000000, gss_buffer_desc_struct *
input_token=0x00000000, gss_OID_desc_struct * * actual_mech_type=0x003d7e1c,
gss_buffer_desc_struct * output_token=0x00bef984, unsigned int *
ret_flags=0x003d7e14, unsigned int * time_rec=0x00000000, _krb5_context *
context=0x003dfa10, int default_mech=0) Line 540 + 0x1e bytes C
gssapi32.dll!krb5_gss_init_sec_context(unsigned int *
minor_status=0x00befbe0, gss_cred_id_struct *
claimant_cred_handle=0x00000000, gss_ctx_id_struct * *
context_handle=0x003db528, gss_name_struct * target_name=0x003d7b30,
gss_OID_desc_struct * mech_type=0x003d7f98, unsigned int req_flags=32,
unsigned int time_req=0, gss_channel_bindings_struct *
input_chan_bindings=0x00000000, gss_buffer_desc_struct *
input_token=0x00000000, gss_OID_desc_struct * * actual_mech_type=0x003d7e1c,
gss_buffer_desc_struct * output_token=0x00bef984, unsigned int *
ret_flags=0x003d7e14, unsigned int * time_rec=0x00000000) Line 948 + 0x32
bytes C
gssapi32.dll!k5glue_init_sec_context(void * ctx=0x00000000, unsigned int *
minor_status=0x00befbe0, gss_cred_id_struct *
claimant_cred_handle=0x00000000, gss_ctx_id_struct * *
context_handle=0x003db528, gss_name_struct * target_name=0x003d7b30,
gss_OID_desc_struct * mech_type=0x003d7f98, unsigned int req_flags=32,
unsigned int time_req=0, gss_channel_bindings_struct *
input_chan_bindings=0x00000000, gss_buffer_desc_struct *
input_token=0x00000000, gss_OID_desc_struct * * actual_mech_type=0x003d7e1c,
gss_buffer_desc_struct * output_token=0x00bef984, unsigned int *
ret_flags=0x003d7e14, unsigned int * time_rec=0x00000000) Line 680 + 0x2c
bytes C
gssapi32.dll!gss_init_sec_context(unsigned int * minor_status=0x00befbe0,
gss_cred_id_struct * claimant_cred_handle=0x00000000, gss_ctx_id_struct * *
context_handle=0x003d7df0, gss_name_struct * target_name=0x003d78a8,
gss_OID_desc_struct * req_mech_type=0x003d7f98, unsigned int req_flags=32,
unsigned int time_req=0, gss_channel_bindings_struct *
input_chan_bindings=0x00000000, gss_buffer_desc_struct *
input_token=0x00000000, gss_OID_desc_struct * * actual_mech_type=0x003d7e1c,
gss_buffer_desc_struct * output_token=0x00bef984, unsigned int *
ret_flags=0x003d7e14, unsigned int * time_rec=0x00000000) Line 225 + 0x37
bytes C
gssapi32.dll!init_ctx_call_init(unsigned int * minor_status=0x00befbe0,
spnego_gss_ctx_id_rec * sc=0x003d7de0, gss_cred_id_struct *
claimant_cred_handle=0x00000000, gss_name_struct * target_name=0x003d78a8,
unsigned int req_flags=0, unsigned int time_req=0, gss_buffer_desc_struct *
mechtok_in=0x00000000, gss_OID_desc_struct * * actual_mech=0x00000000,
gss_buffer_desc_struct * mechtok_out=0x00bef984, unsigned int *
ret_flags=0x00000000, unsigned int * time_rec=0x00000000, unsigned int *
negState=0x00bef998, send_token_flag * send_token=0x00bef9a4) Line 699 +
0x3e bytes C
gssapi32.dll!spnego_gss_init_sec_context(void * ct=0x00000000, unsigned
int * minor_status=0x00befbe0, gss_cred_id_struct *
claimant_cred_handle=0x00000000, gss_ctx_id_struct * *
context_handle=0x003d77a0, gss_name_struct * target_name=0x003d78a8,
gss_OID_desc_struct * mech_type=0x004b6048, unsigned int req_flags=0,
unsigned int time_req=0, gss_channel_bindings_struct *
input_chan_bindings=0x00000000, gss_buffer_desc_struct *
input_token=0x00befbc8, gss_OID_desc_struct * * actual_mech=0x00000000,
gss_buffer_desc_struct * output_token=0x00befbc0, unsigned int *
ret_flags=0x00000000, unsigned int * time_rec=0x00000000) Line 808 + 0x2f
bytes C
gssapi32.dll!gss_init_sec_context(unsigned int * minor_status=0x00befbe0,
gss_cred_id_struct * claimant_cred_handle=0x00000000, gss_ctx_id_struct * *
context_handle=0x00befbdc, gss_name_struct * target_name=0x003d7278,
gss_OID_desc_struct * req_mech_type=0x004b6048, unsigned int req_flags=0,
unsigned int time_req=0, gss_channel_bindings_struct *
input_chan_bindings=0x00000000, gss_buffer_desc_struct *
input_token=0x00befbc8, gss_OID_desc_struct * * actual_mech_type=0x00000000,
gss_buffer_desc_struct * output_token=0x00befbc0, unsigned int *
ret_flags=0x00000000, unsigned int * time_rec=0x00000000) Line 225 + 0x37
bytes C
thread_test.exe!auth_call(char * server=0x009e3100, int gssapi=1, int
debug=1, int logging=1, int thread=9) Line 228 + 0x2e bytes C
thread_test.exe!ConnectionHandler(void * threadarg=0x009e63f8) Line 599 +
0x29 bytes C
kernel32.dll!77e6608b()
I run the same application on Unix and don't see these errors.
Thank you
Markus
More information about the Kerberos
mailing list