X-Git-Url: http://dolda2000.com/gitweb/?a=blobdiff_plain;f=daemon%2Fmain.c;h=d0084683b3c7ae503a823fd0d943fb5cb09eecba;hb=987518f8933f88fae1987c600890dd75464a54d2;hp=20aee80ff253fb02007a7631b07bf4e3936b6926;hpb=267c4a93c208c648c2b7a433e525b3608c7d7b01;p=doldaconnect.git diff --git a/daemon/main.c b/daemon/main.c index 20aee80..d008468 100644 --- a/daemon/main.c +++ b/daemon/main.c @@ -43,6 +43,10 @@ #include "sysevents.h" #include "auth.h" +#ifdef HAVE_KEYUTILS +#include +#endif + struct module *modchain = NULL; static struct timer *timers = NULL; static struct child *children = NULL; @@ -303,6 +307,10 @@ pid_t forksess(uid_t user, struct authhandle *auth, void (*ccbfunc)(pid_t, int, setpgrp(); signal(SIGHUP, SIG_IGN); errno = 0; +#ifdef HAVE_KEYUTILS + keyctl_join_session_keyring(NULL); + keyctl_chown(KEY_SPEC_SESSION_KEYRING, pwent->pw_uid, pwent->pw_gid); +#endif if((authopensess(auth)) != AUTH_SUCCESS) { flog(LOG_WARNING, "could not open session for user %s: %s", pwent->pw_name, (errno == 0)?"Unknown error - should be logged above":strerror(errno)); @@ -373,7 +381,7 @@ int main(int argc, char **argv) FILE *pfstream, *confstream; int delay, immsyslog; struct module *mod; - struct timer *timer, *ntimer; + struct timer *timer; struct child *child; double now; @@ -452,7 +460,7 @@ int main(int argc, char **argv) preinit(0); if(configfile == NULL) { - if((configfile = findconfigfile()) == NULL) + if((configfile = findfile("doldacond.conf", NULL, 0)) == NULL) { flog(LOG_CRIT, "could not find a configuration file"); exit(1); @@ -527,20 +535,23 @@ int main(int argc, char **argv) } pollsocks(delay); now = ntime(); - for(timer = timers; timer != NULL; timer = ntimer) + do { - ntimer = timer->next; - if(now < timer->at) - continue; - if(timer->prev != NULL) - timer->prev->next = timer->next; - if(timer->next != NULL) - timer->next->prev = timer->prev; - if(timer == timers) - timers = timer->next; - timer->func(0, timer->data); - free(timer); - } + for(timer = timers; timer != NULL; timer = timer->next) + { + if(now < timer->at) + continue; + if(timer->prev != NULL) + timer->prev->next = timer->next; + if(timer->next != NULL) + timer->next->prev = timer->prev; + if(timer == timers) + timers = timer->next; + timer->func(0, timer->data); + free(timer); + break; + } + } while(timer != NULL); do { for(child = children; child != NULL; child = child->next)