Index: source/libsmb/clikrb5.c =================================================================== --- source/libsmb/clikrb5.c (revision 119) +++ source/libsmb/clikrb5.c (working copy) @@ -270,6 +270,7 @@ goto cleanup_creds; } +get_ticket: if ((retval = krb5_get_credentials(context, 0, ccache, &creds, &credsp))) { DEBUG(1,("krb5_get_credentials failed for %s (%s)\n", @@ -285,6 +286,22 @@ krb5_set_real_time(context, t + time_offset + 1, 0); } + /* cope with expired tickets */ + if ((unsigned)credsp->times.endtime < time(NULL)) { + DEBUG(3,("Ticket (%s) in ccache (%s) has expired (%s - %d). Renewing.\n", + principal, krb5_cc_default_name(context), + http_timestring((unsigned)credsp->times.endtime), (unsigned)credsp->times.endtime)); + if ((retval = krb5_cc_remove_cred(context, ccache, 0, credsp))) { + DEBUG(1,("krb5_cc_remove_cred failed for %s (%s)\n", + principal, error_message(retval))); + } + goto get_ticket; + } + + DEBUG(10,("Ticket (%s) in ccache (%s) is valid until: (%s - %d)\n", + principal, krb5_cc_default_name(context), + http_timestring((unsigned)credsp->times.endtime), (unsigned)credsp->times.endtime)); + in_data.length = 0; retval = krb5_mk_req_extended(context, auth_context, ap_req_options, &in_data, credsp, outbuf);