X-Git-Url: https://git.distorted.org.uk/~mdw/tripe/blobdiff_plain/4a3882945f605704ede113a9fe98cd19a92363a7..ac3a27f5170d199ad452e29ce7f78a6f5d0be913:/server/tripe.c?ds=sidebyside diff --git a/server/tripe.c b/server/tripe.c index b8438857..93d40b9b 100644 --- a/server/tripe.c +++ b/server/tripe.c @@ -292,9 +292,7 @@ int main(int argc, char *argv[]) rand_noisesrc(RAND_GLOBAL, &noise_source); rand_seed(RAND_GLOBAL, MAXHASHSZ); signal(SIGPIPE, SIG_IGN); - for (i = 0; tunnels[i]; i++) - tunnels[i]->init(); - p_init(ailist); freeaddrinfo(ailist); + if (!(f & f_daemon)) { af = AF_WARN; #ifndef NTRACE @@ -303,16 +301,34 @@ int main(int argc, char *argv[]) if (f & f_foreground) af |= AF_FOREGROUND; a_create(STDIN_FILENO, STDOUT_FILENO, af); + a_switcherr(); + } + + p_init(); + for (i = 0; tunnels[i]; i++) + tunnels[i]->init(); + p_bind(ailist); freeaddrinfo(ailist); + + for (i = 0; tunnels[i]; i++) { + if (tunnels[i]->flags&TUNF_PRIVOPEN) { + ps_split(f & f_daemon); + break; + } } - ps_split(f & f_daemon); - a_init(csock, u, g, csockmode); + + a_init(); + a_signals(); + a_listen(csock, u, g, csockmode); u_setugid(u, g); km_init(kr_priv, kr_pub, tag_priv); kx_init(); if (f & f_daemon) { - if (daemonize()) - die(EXIT_FAILURE, "couldn't become a daemon: %s", strerror(errno)); + if (daemonize()) { + a_warn("SERVER", "daemon-error", "?ERRNO", A_END); + exit(EXIT_FAILURE); + } a_daemon(); + a_switcherr(); } tv.tv_sec = time(0) + T_INTERVAL;