pesign/0035-Fix-shutdown-by-systemd-to-remove-socket-and-pidfile.patch

94 lines
2.4 KiB
Diff
Raw Normal View History

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/42] 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