我已經編寫了一些C代碼來連接到Kerberized LDAP服務器。這一切都可以正常工作,但目前它每次連接時都會生成一個新的TGT,而不是在默認憑證緩存中使用該TGT(假設它已經存在)。檢查高速緩存中是否存在Kerberos票據
我已經研究過使用類似krb5_cc_resolve和krb5_initialize來獲取對緩存的引用,但是這似乎會破壞緩存(如果緩存已存在)以及它擁有的任何票據。
基本上,我想知道的是:是否有任何方法檢查現有TGT的默認憑證緩存而不破壞它?如文檔所述,
我已經編寫了一些C代碼來連接到Kerberized LDAP服務器。這一切都可以正常工作,但目前它每次連接時都會生成一個新的TGT,而不是在默認憑證緩存中使用該TGT(假設它已經存在)。檢查高速緩存中是否存在Kerberos票據
我已經研究過使用類似krb5_cc_resolve和krb5_initialize來獲取對緩存的引用,但是這似乎會破壞緩存(如果緩存已存在)以及它擁有的任何票據。
基本上,我想知道的是:是否有任何方法檢查現有TGT的默認憑證緩存而不破壞它?如文檔所述,
查看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;
正如文檔所述,'krb5_initialize'清除緩存。如果您想訪問現有的緩存,請不要這樣做 – jalf