diff options
| author | erdgeist <> | 2013-03-12 19:04:26 +0000 | 
|---|---|---|
| committer | erdgeist <> | 2013-03-12 19:04:26 +0000 | 
| commit | 1bb78bf47650bcaccb359ae774554bcbc10934ab (patch) | |
| tree | 7a935b987a22bb2a1fb281ac9f53a4dc340524ef | |
| parent | 1bea5673c414dc20a51d33ea123e9e1e17aa09ce (diff) | |
Use the pidfile library to write the pidfile
| -rw-r--r-- | jaildaemon.c | 37 | 
1 files changed, 24 insertions, 13 deletions
diff --git a/jaildaemon.c b/jaildaemon.c index 4b6c923..918f01b 100644 --- a/jaildaemon.c +++ b/jaildaemon.c  | |||
| @@ -17,12 +17,15 @@ | |||
| 17 | #include <signal.h> | 17 | #include <signal.h> | 
| 18 | #include <unistd.h> | 18 | #include <unistd.h> | 
| 19 | #include <syslog.h> | 19 | #include <syslog.h> | 
| 20 | #include <libutil.h> | ||
| 20 | 21 | ||
| 21 | #define IPC_PACKETSIZE 4096 | 22 | #define IPC_PACKETSIZE 4096 | 
| 22 | #define MAGIC_EXIT_CODE 42 | 23 | #define MAGIC_EXIT_CODE 42 | 
| 23 | enum { IAM_DAEMON, IAM_CLIENT, IAM_FORKSLAVE }; | 24 | enum { IAM_DAEMON, IAM_CLIENT, IAM_FORKSLAVE }; | 
| 24 | static int g_uds; | 25 | static int g_uds; | 
| 25 | static int g_whoami = IAM_CLIENT; | 26 | static int g_whoami = IAM_CLIENT; | 
| 27 | static struct | ||
| 28 | pidfh * g_pidfilehandle; | ||
| 26 | static int g_fork_slave_fd; | 29 | static int g_fork_slave_fd; | 
| 27 | static char g_ipc_packet[IPC_PACKETSIZE]; | 30 | static char g_ipc_packet[IPC_PACKETSIZE]; | 
| 28 | static int * const g_ipc_packet_int = (int*)g_ipc_packet; | 31 | static int * const g_ipc_packet_int = (int*)g_ipc_packet; | 
| @@ -144,6 +147,8 @@ static int fork_fork_slave( ) { | |||
| 144 | /* I am child, close master's socket fd */ | 147 | /* I am child, close master's socket fd */ | 
| 145 | close( sockets[0] ); | 148 | close( sockets[0] ); | 
| 146 | g_whoami = IAM_FORKSLAVE; | 149 | g_whoami = IAM_FORKSLAVE; | 
| 150 | pidfile_close( g_pidfilehandle ); | ||
| 151 | g_pidfilehandle = NULL; | ||
| 147 | fork_slave( sockets[1] ); /* Never returns */ | 152 | fork_slave( sockets[1] ); /* Never returns */ | 
| 148 | exit(0); | 153 | exit(0); | 
| 149 | default: | 154 | default: | 
| @@ -285,6 +290,8 @@ static void kill_all_probes( void ) { | |||
| 285 | g_probes_size = 0; | 290 | g_probes_size = 0; | 
| 286 | free( g_probes ); | 291 | free( g_probes ); | 
| 287 | g_probes = 0; | 292 | g_probes = 0; | 
| 293 | |||
| 294 | pidfile_remove( g_pidfilehandle ); | ||
| 288 | } | 295 | } | 
| 289 | 296 | ||
| 290 | static int add_task_to_kqueue( int kq, daemon_task * t_in ) { | 297 | static int add_task_to_kqueue( int kq, daemon_task * t_in ) { | 
| @@ -394,23 +401,27 @@ int main( int argc, char **argv ) { | |||
| 394 | } | 401 | } | 
| 395 | } | 402 | } | 
| 396 | 403 | ||
| 397 | /* Start a fork slave while there is no file descriptors or initialized | 404 | /* Daemonize and start a fork slave while there is no file descriptors or | 
| 398 | memory yet. Communicate with this slave via socketpair */ | 405 | initialized memory yet. Communicate with this slave via socketpair */ | 
| 399 | if( o_daemonize ) { | 406 | if( o_daemonize ) { | 
| 400 | if( daemon(1,0) == -1 ) | 407 | g_pidfilehandle = pidfile_open(o_pidfile, 0600, NULL ); | 
| 401 | exerr( "daemonzing" ); | 408 | |
| 402 | g_fork_slave_fd = fork_fork_slave( ); | 409 | if (!g_pidfilehandle) { | 
| 410 | if (errno == EEXIST) | ||
| 411 | exerr( "jaildaemon already running." ); | ||
| 412 | /* If we cannot create pidfile from other reasons, only warn. */ | ||
| 413 | warn( "Cannot open or create pidfile" ); | ||
| 414 | } | ||
| 403 | 415 | ||
| 404 | /* When we're supposed to write a pidfile, just do it */ | 416 | if( daemon(1,0) == -1 ) { | 
| 405 | if( o_pidfile ) { | 417 | pidfile_remove(g_pidfilehandle); | 
| 406 | FILE *fp = fopen( o_pidfile, "w"); | 418 | exerr( "daemonzing" ); | 
| 407 | if (!fp) | ||
| 408 | exerr("opening pid file"); | ||
| 409 | fprintf(fp, "%d\n", (int)getpid()); | ||
| 410 | fclose(fp); | ||
| 411 | } | 419 | } | 
| 420 | pidfile_write(g_pidfilehandle); | ||
| 421 | |||
| 422 | g_fork_slave_fd = fork_fork_slave( ); | ||
| 412 | 423 | ||
| 413 | openlog( "jaildaemon", 0, LOG_DAEMON ); | 424 | openlog( "jaildaemon", 0, LOG_DAEMON ); | 
| 414 | setlogmask(LOG_UPTO(LOG_INFO)); | 425 | setlogmask(LOG_UPTO(LOG_INFO)); | 
| 415 | g_whoami = IAM_DAEMON; | 426 | g_whoami = IAM_DAEMON; | 
| 416 | 427 | ||
