1
0
mirror of https://github.com/samba-team/samba.git synced 2025-02-04 17:47:26 +03:00

r22061: Fix the krb5 user ticket refresh event timeout in winbindd

(This used to be commit 4a99b89618948f5518b9c685d1cdcfaad69bfc80)
This commit is contained in:
Gerald Carter 2007-04-03 18:32:25 +00:00 committed by Gerald (Jerry) Carter
parent 9b807d4f87
commit 01c8809f76

View File

@ -27,10 +27,20 @@
#undef DBGC_CLASS
#define DBGC_CLASS DBGC_WINBIND
/* uncomment this to to fast debugging on the krb5 ticket renewal event */
#ifdef DEBUG_KRB5_TKT_RENEWAL
#undef DEBUG_KRB5_TKT_RENEWAL
#endif
#define MAX_CCACHES 100
static struct WINBINDD_CCACHE_ENTRY *ccache_list;
/* The Krb5 ticket refresh handler should be scheduled
at one-half of the period from now till the tkt
expiration */
#define KRB5_EVENT_REFRESH_TIME(x) ((x) - (((x) - time(NULL))/2))
/****************************************************************
Find an entry by name.
****************************************************************/
@ -115,7 +125,13 @@ static void krb5_ticket_refresh_handler(struct event_context *event_ctx,
"for: %s in ccache: %s\n",
entry->principal_name, entry->ccname));
new_start = entry->refresh_time;
#if defined(DEBUG_KRB5_TKT_RENEWAL)
new_start = time(NULL) + 30;
#else
/* The tkt should be refreshed at one-half the period
from now to the expiration time */
new_start = KRB5_EVENT_REFRESH_TIME(entry->refresh_time);
#endif
goto done;
}
@ -126,6 +142,12 @@ static void krb5_ticket_refresh_handler(struct event_context *event_ctx,
entry->principal_name,
entry->service,
&new_start);
#if defined(DEBUG_KRB5_TKT_RENEWAL)
new_start = time(NULL) + 30;
#else
new_start = KRB5_EVENT_REFRESH_TIME(new_start);
#endif
gain_root_privilege();
if (ret) {
@ -168,7 +190,6 @@ static void krb5_ticket_gain_handler(struct event_context *event_ctx,
talloc_get_type_abort(private_data, struct WINBINDD_CCACHE_ENTRY);
#ifdef HAVE_KRB5
int ret;
time_t new_start;
struct timeval t;
struct WINBINDD_MEMORY_CREDS *cred_ptr = entry->cred_ptr;
struct winbindd_domain *domain = NULL;
@ -215,9 +236,6 @@ static void krb5_ticket_gain_handler(struct event_context *event_ctx,
DEBUG(10,("krb5_ticket_gain_handler: successful kinit for: %s in ccache: %s\n",
entry->principal_name, entry->ccname));
/* Renew at 1/2 the expiration time */
new_start = entry->refresh_time / 2;
goto got_ticket;
}
@ -233,11 +251,11 @@ static void krb5_ticket_gain_handler(struct event_context *event_ctx,
got_ticket:
#if 0 /* TESTING */
#if defined(DEBUG_KRB5_TKT_RENEWAL)
t = timeval_set(time(NULL) + 30, 0);
#else
t = timeval_set(new_start, 0);
#endif /* TESTING */
t = timeval_set(KRB5_EVENT_REFRESH_TIME(entry->refresh_time), 0);
#endif
entry->event = event_add_timed(winbind_event_context(), entry,
t,
@ -372,7 +390,11 @@ NTSTATUS add_ccache_to_list(const char *princ_name,
} else {
/* Renew at 1/2 the ticket expiration time */
entry->event = event_add_timed(winbind_event_context(), entry,
timeval_set((ticket_end - 1)/2, 0),
#if defined(DEBUG_KRB5_TKT_RENEWAL)
timeval_set(time(NULL)+30, 0),
#else
timeval_set(KRB5_EVENT_REFRESH_TIME(ticket_end), 0),
#endif
"krb5_ticket_refresh_handler",
krb5_ticket_refresh_handler,
entry);
@ -494,6 +516,7 @@ static NTSTATUS store_memory_creds(struct WINBINDD_MEMORY_CREDS *memcredp, const
memcredp->len += strlen(pass)+1;
}
#if defined(LINUX)
/* aligning the memory on on x86_64 and compiling
with gcc 4.1 using -O2 causes a segv in the