A resposta a esta pergunta é exatamente o que foi postulado nos comentários. Do seu código, você pode incluir o cabeçalho krb5.h
. Isso lhe dará acesso às funções que compõem a base de código do Kerberos.
Abaixo está um exemplo de brinquedo que é adaptado de a documentação .
#include <string.h>
#include <krb5.h>
int main(void)
{
krb5_error_code ret;
krb5_creds creds;
krb5_principal client_princ = NULL;
krb5_context context;
const char* princname = "user@REALM";
const char* password = "secret";
krb5_init_context(&context);
memset(&creds, 0, sizeof(creds));
ret = krb5_parse_name(context, princname, &client_princ);
if (ret)
goto cleanup;
ret = krb5_get_init_creds_password(context, &creds, client_princ,
password, NULL, NULL, 0, NULL, NULL);
if (ret)
goto cleanup;
ret = krb5_verify_init_creds(context, &creds, NULL, NULL, NULL, NULL);
/* do things with the ticket (&creds) here */
cleanup:
krb5_free_principal(context, client_princ);
krb5_free_cred_contents(context, &creds);
return 0;
}
A função krb5_init_context()
é o que lê seu arquivo de configuração e honra o tipo MEMORY:
ccache. O ticket obtido será armazenado nesse espaço de memória do processo.
Este código, de fato, obtém um TGT. Podemos verificar isso tomando uma captura de pacote enquanto ele é executado. Nós também podemos apenas descarregar a memória deste processo e verificar se o TGT está contido nele.