94 lines
2.4 KiB
Diff
94 lines
2.4 KiB
Diff
From f1a2f097cfb290951702251703abcd34ca0bf9e6 Mon Sep 17 00:00:00 2001
|
|
From: Peter Jones <pjones@redhat.com>
|
|
Date: Thu, 18 Oct 2012 15:13:11 -0400
|
|
Subject: [PATCH 35/41] Fix shutdown by systemd to remove socket and pidfile.
|
|
|
|
Signed-off-by: Peter Jones <pjones@redhat.com>
|
|
---
|
|
src/daemon.c | 33 +++++++++++++++------------------
|
|
src/daemon.h | 1 +
|
|
2 files changed, 16 insertions(+), 18 deletions(-)
|
|
|
|
diff --git a/src/daemon.c b/src/daemon.c
|
|
index 7ad036c..974a559 100644
|
|
--- a/src/daemon.c
|
|
+++ b/src/daemon.c
|
|
@@ -116,15 +116,6 @@ send_response(context *ctx, cms_context *cms, struct pollfd *pollfd, int rc)
|
|
static void
|
|
handle_kill_daemon(context *ctx, struct pollfd *pollfd, socklen_t size)
|
|
{
|
|
- if (ctx->sd >= 0) {
|
|
- close(ctx->sd);
|
|
- unlink(SOCKPATH);
|
|
- }
|
|
- xfree(ctx->errstr);
|
|
-
|
|
- ctx->backup_cms->log(ctx->backup_cms, ctx->priority|LOG_NOTICE,
|
|
- "pesignd exiting (pid %d)", getpid());
|
|
-
|
|
should_exit = 1;
|
|
}
|
|
|
|
@@ -602,11 +593,17 @@ handle_event(context *ctx, struct pollfd *pollfd)
|
|
static void
|
|
do_shutdown(context *ctx, int nsockets, struct pollfd *pollfds)
|
|
{
|
|
+ unlink(SOCKPATH);
|
|
+ unlink(PIDFILE);
|
|
+
|
|
+ ctx->backup_cms->log(ctx->backup_cms, ctx->priority|LOG_NOTICE,
|
|
+ "pesignd exiting (pid %d)", getpid());
|
|
+
|
|
+ xfree(ctx->errstr);
|
|
+
|
|
for (int i = 0; i < nsockets; i++)
|
|
close(pollfds[i].fd);
|
|
free(pollfds);
|
|
-
|
|
- xfree(ctx->errstr);
|
|
}
|
|
|
|
static int
|
|
@@ -843,7 +840,7 @@ daemon_logger(cms_context *cms, int priority, char *fmt, ...)
|
|
static void
|
|
write_pid_file(int pid)
|
|
{
|
|
- int fd = open("/var/run/pesign.pid", O_WRONLY|O_CREAT|O_TRUNC, 0644);
|
|
+ int fd = open(PIDFILE, O_WRONLY|O_CREAT|O_TRUNC, 0644);
|
|
if (fd < 0) {
|
|
err:
|
|
fprintf(stderr, "couldn't open pidfile: %m\n");
|
|
@@ -963,12 +960,12 @@ daemonize(cms_context *cms_ctx, int do_fork)
|
|
setsid();
|
|
|
|
if (do_fork) {
|
|
- signal(SIGTTOU, SIG_IGN);
|
|
- signal(SIGTTIN, SIG_IGN);
|
|
- signal(SIGTSTP, SIG_IGN);
|
|
- signal(SIGQUIT, quit_handler);
|
|
- signal(SIGINT, quit_handler);
|
|
- signal(SIGTERM, quit_handler);
|
|
+ struct sigaction sa = {
|
|
+ .sa_handler = quit_handler,
|
|
+ };
|
|
+ sigaction(SIGQUIT, &sa, NULL);
|
|
+ sigaction(SIGINT, &sa, NULL);
|
|
+ sigaction(SIGTERM, &sa, NULL);
|
|
}
|
|
|
|
char *homedir = NULL;
|
|
diff --git a/src/daemon.h b/src/daemon.h
|
|
index 56cef17..5485e60 100644
|
|
--- a/src/daemon.h
|
|
+++ b/src/daemon.h
|
|
@@ -48,5 +48,6 @@ typedef enum {
|
|
|
|
#define PESIGND_VERSION 0xa3cf41cb
|
|
#define SOCKPATH "/var/run/pesign/socket"
|
|
+#define PIDFILE "/var/run/pesign.pid"
|
|
|
|
#endif /* DAEMON_H */
|
|
--
|
|
1.7.12.1
|
|
|