[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Different Heimdal/MIT behaviour of krb5_get_credentials ?



I have a AD forest with MM.COM with domains DOM1.MM.COM,DOM2.MM.COM and 
SUB.DOM2.MM.COM which all trust each other. To test the availability of 
service tickets I created the following short program:

#include <string.h>
#include <stdio.h>
#include <krb5.h>
#ifndef HEIMDAL
#include <com_err.h>
#endif

int main(int argc, char **argv) {
krb5_creds creds;
krb5_creds * new_creds = 0;
krb5_error_code kret;
krb5_ccache ccache;
krb5_context kcontext = 0;
char* hostname,*service;

if (argc<3) {
fprintf(stderr, "Usage: %s hostname service [enctype]\n",argv[0]);
return(1);
}

hostname = strdup(argv[1]);
service = strdup(argv[2]);

kret = krb5_init_context(&kcontext);
if (kret) {
com_err(argv[0], kret,"while initialising context");
return(-1);
}

if ((kret = krb5_cc_default(kcontext, &ccache))) {
com_err(argv[0], kret,"while initialising ccache");
return(-1);
}

memset((char *)&creds, 0, sizeof(creds));

if ((kret = krb5_sname_to_principal(kcontext, hostname,service, 
KRB5_NT_SRV_HST,&creds.server))) {
com_err(argv[0], kret,"while initialising server creds");
return(-1);
}

if ((kret = krb5_cc_get_principal(kcontext, ccache,&creds.client))) {
krb5_free_cred_contents(kcontext, &creds);
com_err(argv[0], kret,"while reading principal from ccache");
return(-1);
}

#ifdef HEIMDAL
creds.session.keytype=ENCTYPE_DES_CBC_MD5;
if (argc == 4) {
creds.session.keytype=atoi(argv[3]);
}
#else
creds.keyblock.enctype=ENCTYPE_DES_CBC_MD5;
if (argc == 4) {
creds.keyblock.enctype=atoi(argv[3]);
}
#endif

if ((kret = krb5_get_credentials(kcontext, 0,ccache, &creds, &new_creds))) {
krb5_free_cred_contents(kcontext, &creds);
com_err(argv[0], kret,"while getting credentials");
return(-1);
}
}

Now I try to get a  krbtgt ticket for SUB.DOM2.MM.COM as user 
markus@DOM1.MM.COM
With Heimdal it works fine and I get the list of intermediate tickets, but 
when I use MIT I get an error message:

Server not found in Kerberos database while getting credentials

Does the MIT code canonicalise the name in creds.server principal ?

Thanks
Markus
# kinit
markus@DOM1.MM.COM's Password:
Your password/account will expire at Sun Jun  3 00:50:39 2007

kinit: NOTICE: ticket renewable lifetime is 1 week
# ./get_service_ticket SUB.DOM2.MM.COM krbtgt
# klist -v
Credentials cache: FILE:/tmp/krb5cc_75228
        Principal: markus@DOM1.MM.COM
    Cache version: 4

Server: krbtgt/DOM1.MM.COM@DOM1.MM.COM
Ticket etype: arcfour-hmac-md5, kvno 1
Auth time:  May 31 14:32:06 2007
End time:   Jun  1 00:32:06 2007
Renew till: Jun  7 14:32:06 2007
Ticket flags: renewable, initial, pre-authenticated
Addresses: IPv4:10.128.55.23, IPv4:172.16.155.1

Server: krbtgt/MM.COM@DOM1.MM.COM
Ticket etype: arcfour-hmac-md5
Auth time:  May 31 14:32:06 2007
Start time: May 31 14:32:14 2007
End time:   Jun  1 00:32:06 2007
Ticket flags: pre-authenticated, ok-as-delegate
Addresses: IPv4:10.128.55.23, IPv4:172.16.155.1

Server: krbtgt/DOM2.MM.COM@MM.COM
Ticket etype: arcfour-hmac-md5
Auth time:  May 31 14:32:06 2007
Start time: May 31 14:32:14 2007
End time:   Jun  1 00:32:06 2007
Ticket flags: pre-authenticated, ok-as-delegate
Addresses: IPv4:10.128.55.23, IPv4:172.16.155.1

Server: krbtgt/SUB.DOM2.MM.COM@DOM2.MM.COM
Ticket etype: arcfour-hmac-md5
Auth time:  May 31 14:32:06 2007
Start time: May 31 14:32:14 2007
End time:   Jun  1 00:32:06 2007
Ticket flags: pre-authenticated, ok-as-delegate
Addresses: IPv4:10.128.55.23, IPv4:172.16.155.1

Server: krbtgt/sub.dom2.mm.com@SUB.DOM2.MM.COM
Ticket etype: des-cbc-md5, kvno 1
Auth time:  May 31 14:32:06 2007
Start time: May 31 14:32:15 2007
End time:   Jun  1 00:32:06 2007
Ticket flags: pre-authenticated
Addresses: IPv4:10.128.55.23, IPv4:172.16.155.1

# kinit
markus@DOM1.MM.COM's Password:
Your password/account will expire at Sun Jun  3 00:50:39 2007

kinit: NOTICE: ticket renewable lifetime is 1 week

# ./get_service_ticket_mit SUB.DOM2.MM.COM krbtgt
./get_service_ticket_mit: Server not found in Kerberos database while 
getting credentials
# klist -e
Ticket cache: FILE:/tmp/krb5cc_75228
Default principal: markus@DOM1.MM.COM

Valid starting     Expires            Service principal
05/31/07 12:46:31  05/31/07 22:46:31  krbtgt/DOM1.MM.COM@DOM1.MM.COM
        renew until 06/07/07 12:46:31, Etype (skey, tkt): ArcFour with
HMAC/md5, ArcFour with HMAC/md5