Authen-Krb5-Easy
view release on metacpan or search on metacpan
OUTPUT:
RETVAL
#/* equivilent to calling kdestory */
int
kdestroy()
# /* returns
# * 0 - success
# * other - krb5 error code
# */
CODE:
krb5_context context;
krb5_error_code code;
krb5_ccache ccache = NULL;
krb_error_while_doing = NULL;
krb_error_string = NULL;
krb_error_code = 0;
code = krb5_init_context(&context);
if(code)
{
krb_error_while_doing = "unable to initialize context";
krb_error_string = (char *)error_message(code);
krb_error_code = code;
XSRETURN_UNDEF;
}
code = krb5_cc_default(context, &ccache);
if(code)
{
krb_error_while_doing = "could not get default ccache";
krb_error_string = (char *)error_message(code);
krb_error_code = code;
XSRETURN_UNDEF;
}
code = krb5_cc_destroy(context, ccache);
if(code)
{
krb_error_while_doing = "unable to destroy ccache";
krb_error_string = (char *)error_message(code);
krb_error_code = code;
XSRETURN_UNDEF;
}
krb5_free_context(context);
RETVAL=1;
OUTPUT:
RETVAL
# /* time until ticket expires */
time_t
kexpires()
# /* return:
# * 0 - error
# * other - time of experation
# */
CODE:
krb5_context context;
krb5_error_code code;
krb5_ccache ccache = NULL;
krb5_cc_cursor current;
krb5_creds creds;
krb5_principal princ;
krb5_flags flags;
bool expired = true;
time_t earliest = 0;
krb_error_while_doing = NULL;
krb_error_string = NULL;
krb_error_code = 0;
code = krb5_init_context(&context);
if(code)
{
krb_error_while_doing = "unable to initialize context";
krb_error_string = (char *)error_message(code);
krb_error_code = code;
XSRETURN_UNDEF;
}
code = krb5_cc_default(context, &ccache);
if(code)
{
krb_error_while_doing = "could not get default ccache";
krb_error_string = (char *)error_message(code);
krb_error_code = code;
XSRETURN_UNDEF;
}
flags = 0;
code = krb5_cc_set_flags(context, ccache, flags);
if(code)
{
krb_error_while_doing = "could not set ccache flags";
krb_error_string = (char *)error_message(code);
krb_error_code = code;
XSRETURN_UNDEF;
}
code = krb5_cc_get_principal(context, ccache, &princ);
if(code)
{
krb_error_while_doing = "could not get principle";
krb_error_string = (char *)error_message(code);
krb_error_code = code;
XSRETURN_UNDEF;
}
code = krb5_cc_start_seq_get(context, ccache, ¤t);
if(code)
{
krb_error_while_doing = "could not start sequential get";
krb_error_string = (char *)error_message(code);
krb_error_code = code;
XSRETURN_UNDEF;
}
code = krb5_cc_next_cred(context, ccache, ¤t, &creds);
while(!code && expired)
{
if(creds.server->length == 2
&& !strcmp(creds.server->realm.data, princ->realm.data)
&& !strcmp((char *)creds.server->data[0].data, "krbtgt")
&& !strcmp((char *)creds.server->data[1].data, princ->realm.data)
&& (creds.times.endtime < earliest || !earliest))
earliest = creds.times.endtime;
( run in 2.224 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )