我编写了一些C代码来连接Kerberized LDAP服务器。这一切都运行正常,但目前,它每次连接时都会生成一个新的TGT,而不是在默认凭据缓存中使用它(假设它已经存在)。
我已经研究过使用krb5_cc_resolve和krb5_initialize来获取对缓存的引用,但这似乎会破坏缓存(如果它已经存在)以及它所拥有的任何票证。
基本上,我想知道的是:有没有办法检查现有TGT的默认凭证缓存而不会破坏它?
答案 0 :(得分:1)
答案 1 :(得分:0)
在kstart的代码中查看它实现-H选项的位置。
基本上,您需要检查故障单中委托人的到期时间。
/* Obtain the ticket. */
memset(&increds, 0, sizeof(increds));
code = krb5_cc_resolve(ctx, config->cache, &ccache);
if (code != 0)
goto done;
increds.client = config->client;
else {
code = krb5_cc_get_principal(ctx, ccache, &increds.client);
if (code != 0)
goto done;
}
code = get_krbtgt_princ(ctx, increds.client, &increds.server);
if (code != 0)
goto done;
code = krb5_get_credentials(ctx, 0, ccache, &increds, &outcreds);
if (code != 0)
goto done;
increds_valid = true;
/* Check the expiration time and renewal limit. */
if (code == 0) {
now = time(NULL);
then = outcreds->times.endtime;
if (config->happy_ticket > 0)
offset = 60 * config->happy_ticket;
else
offset = 60 * config->keep_ticket + EXPIRE_FUDGE;
if (then < now + offset)
code = KRB5KRB_AP_ERR_TKT_EXPIRED;