krb4 get_svc_in_tkt() crashes and oddities

Todd Zino tcz3 at cornell.edu
Fri Jun 7 15:43:00 EDT 2002


While porting our authentication code from Unix to Windows (switching to 
the KFW 2.x stuff for linking, compiling, and headers), I have had several 
problems with the K4 krb_get_svc_in_tkt() function.

This had been used successfully under Unix to retrive a "krbtgt" from the 
kdc using the path to the srvtab as one of the arguments. This, of course, 
merely rearranges the variables for a krb_get_in_tkt() call with a 
srvtab_to_key() translator as the (*key_proc()) argument.

In Win32, this code is crashing, specifically when it gets down to this 
portion of krb_get_in_tkt():

         if (in_tkt_decrypt_again >= 0){
             (*key_proc)((char *)0,(char *)0,(char *)0,arg,(C_Block *)0);
         }

Which will call srvtab_to_key() with a bunch of nulls. srvtab_to_key() is 
basically a conduit for read_service_key() which has the line

         wcard = (instance[0] == '*') && (instance[1] == '\0');

which is where the crash is (since parameter char * instance is being 
called as (char *)0 as per the excerpt above from krb_get_in_tkt().

Is this a bug or a de facto implementation problem, i.e. I should use 
another function besides krb_get_svc_in_tkt() to do this procedure or there 
is an issue with which "version" of this to use, the one in the krb4 src 
tree or the one in the krb5 src tree (which includes its own krb4 sources) 
that both get distro'd with KFW 2.x? When I step debugged to find all this 
stuff, it was going into the krb4 one.

I'm also unsure of the role of this in_tkt_decrypt_again sentinal; is this 
only valid in prompt-for-password situations, or does it have a role in 
srvtab/keytab TGT auths as well? It had a value of 0 each time I stepped 
through this.

One more question on this topic: Why is krb_get_svc_in_tkt() not defined in 
krb.h, at least the "krb4" one? It is defined in the "kerberosIV/krb.h" of 
krb5. This has resulted in some link/compile problems when trying to make a 
dummy console .EXE that does nothing but call this with hardcoded values in 
its main() so I can see how persistant the problem is.

-Todd




More information about the krbdev mailing list