X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=server.c;h=a0eb50e2308e0a77ab4bc142cb2da845229bea11;hp=ae8848b6856732ae7d1d7fb034953f64b682aad1;hb=ce9e297eb91a932a11f81890c800d0380b5bc9c9;hpb=7d28108f4691e0e7df199fd89f386cafeb3466c7 diff --git a/server.c b/server.c index ae8848b6..a0eb50e2 100644 --- a/server.c +++ b/server.c @@ -18,7 +18,7 @@ * - Buffer trees: \ref buffer_tree.h, * - Sideband API: \ref sideband.h, * - Crypto: \ref crypt.h, \ref crypt_backend.h, - * - Error subsystem: \ref error.h, \ref error2.c, + * - Error subsystem: \ref error.h, * - Inter process communication: \ref ipc.h, * - Forward error correction: \ref fec.h, * - Daemons: \ref daemon.h, @@ -40,6 +40,7 @@ #include #include #include +#include #include "para.h" #include "error.h" @@ -65,10 +66,10 @@ #include "ggo.h" #include "version.h" -__printf_2_3 void (*para_log)(int, const char*, ...) = daemon_log; +/** Array of error strings. */ +DEFINE_PARA_ERRLIST; -/** Define the array of error lists needed by para_server. */ -INIT_SERVER_ERRLISTS; +__printf_2_3 void (*para_log)(int, const char*, ...) = daemon_log; /** Shut down non-authorized connections after that many seconds. */ #define ALARM_TIMEOUT 10 @@ -411,8 +412,9 @@ static int init_afs(int argc, char **argv) { int ret, afs_server_socket[2]; pid_t afs_pid; + char c; - ret = socketpair(PF_UNIX, SOCK_DGRAM, 0, afs_server_socket); + ret = socketpair(PF_UNIX, SOCK_STREAM, 0, afs_server_socket); if (ret < 0) exit(EXIT_FAILURE); get_random_bytes_or_die((unsigned char *)&afs_socket_cookie, @@ -422,6 +424,7 @@ static int init_afs(int argc, char **argv) exit(EXIT_FAILURE); if (afs_pid == 0) { /* child (afs) */ int i; + for (i = argc - 1; i >= 0; i--) memset(argv[i], 0, strlen(argv[i])); sprintf(argv[0], "para_server (afs)"); @@ -430,6 +433,10 @@ static int init_afs(int argc, char **argv) } mmd->afs_pid = afs_pid; close(afs_server_socket[1]); + if (read(afs_server_socket[0], &c, 1) <= 0) { + PARA_EMERG_LOG("early afs exit\n"); + exit(EXIT_FAILURE); + } ret = mark_fd_nonblocking(afs_server_socket[0]); if (ret < 0) exit(EXIT_FAILURE); @@ -531,7 +538,7 @@ out: prev_uptime = uptime; prev_events = mmd->events; mmd->vss_status_flags = mmd->new_vss_status_flags; - PARA_DEBUG_LOG("%d events, forcing status update\n", mmd->events); + PARA_DEBUG_LOG("%u events, forcing status update\n", mmd->events); killpg(0, SIGUSR1); }