r18473: Once we go online, trigger a "get krb5 ticket event"
authorJeremy Allison <jra@samba.org>
Wed, 13 Sep 2006 13:55:19 +0000 (13:55 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 16:51:43 +0000 (11:51 -0500)
immediately if we were waiting on one.
Jeremy.
(This used to be commit 6dc8f9042f057e1f9aff46042a0fe697cb8a912c)

source3/lib/events.c
source3/nsswitch/winbindd_cm.c

index 7da44c3466294ee3804678e8ceffe5df578266bd..d6f3c328288d5e51e5bfe1e1c24f77d9da763bfb 100644 (file)
@@ -58,7 +58,8 @@ struct timed_event *add_timed_event(TALLOC_CTX *mem_ctx,
        te->handler = handler;
        te->private_data = private_data;
 
-       /* keep the list ordered */
+       /* keep the list ordered - this is NOT guarenteed as event times
+          may be changed after insertion */
        last_te = NULL;
        for (cur_te = timed_events; cur_te; cur_te = cur_te->next) {
                /* if the new event comes before the current one break */
@@ -115,3 +116,17 @@ struct timeval *get_timed_events_timeout(struct timeval *to_ret)
 
        return to_ret;
 }
+
+int set_event_dispatch_time(const char *event_name, struct timeval when)
+{
+       int num_events = 0;
+       struct timed_event *te;
+
+       for (te = timed_events; te; te = te->next) {
+               if (strcmp(event_name, te->event_name) == 0) {
+                       te->when = when;
+                       num_events++;
+               }
+       }
+       return num_events;
+}
index ff2567d3e544093e5f10c44efaf53d64e25c11ed..a0d97f2ff630988f62243179b93437e8123b86d0 100644 (file)
@@ -146,6 +146,8 @@ void set_domain_offline(struct winbindd_domain *domain)
 
 void set_domain_online(struct winbindd_domain *domain)
 {
+       struct timeval now;
+
        DEBUG(10,("set_domain_online: called for domain %s\n",
                domain->name ));
 
@@ -155,6 +157,10 @@ void set_domain_online(struct winbindd_domain *domain)
                return;
        }
 
+       /* If we are waiting to get a krb5 ticket, trigger immediately. */
+       GetTimeOfDay(&now);
+       set_event_dispatch_time("krb5_ticket_gain_handler", now);
+
        domain->online = True;
 }