From 25e03ec9edd863136008881a4a57ea9a788d34b3 Mon Sep 17 00:00:00 2001
From: Frank Lahm <franklahm@googlemail.com>
Date: Mon, 18 Jun 2012 16:26:28 +0200
Subject: [PATCH] Block SIGTERM when calling pam_close_session
---
etc/afpd/afp_dsi.c | 11 +++++++++--
1 files changed, 9 insertions(+), 2 deletions(-)
diff --git a/etc/afpd/afp_dsi.c b/etc/afpd/afp_dsi.c
index bf454e1..6c6bc7d 100644
--- a/etc/afpd/afp_dsi.c
+++ b/etc/afpd/afp_dsi.c
@@ -80,7 +80,8 @@ static sigjmp_buf recon_jmp;
static void afp_dsi_close(AFPObj *obj)
{
DSI *dsi = obj->handle;
-
+ sigset_t sigs;
+
close(obj->ipc_fd);
obj->ipc_fd = -1;
@@ -97,8 +98,14 @@ static void afp_dsi_close(AFPObj *obj)
}
close_all_vol();
- if (obj->logout)
+
+ if (obj->logout) {
+ /* Block SIGTERM, PAM might send us a SIGTERM in (*obj->logout)() -> pam_close_session() */
+ pthread_sigmask(SIG_BLOCK, &sigs, NULL);
+ sigemptyset(&sigs);
+ sigaddset(&sigs, SIGTERM);
(*obj->logout)();
+ }
LOG(log_note, logtype_afpd, "AFP statistics: %.2f KB read, %.2f KB written",
dsi->read_count/1024.0, dsi->write_count/1024.0);
--
1.7.4.1
From d8f375c4fbff7a27768ce6efebec64ab193734ee Mon Sep 17 00:00:00 2001
From: Frank Lahm <franklahm@googlemail.com>
Date: Wed, 20 Jun 2012 15:33:26 +0200
Subject: [PATCH] Fix signal blocking, pthread_sigmask was called before mask initialisation. Also block all sigs instead of only SIGTERM (think I saw SIGHUP somewhere).
---
etc/afpd/afp_dsi.c | 5 ++---
1 files changed, 2 insertions(+), 3 deletions(-)
diff --git a/etc/afpd/afp_dsi.c b/etc/afpd/afp_dsi.c
index 6c6bc7d..7779b23 100644
--- a/etc/afpd/afp_dsi.c
+++ b/etc/afpd/afp_dsi.c
@@ -100,10 +100,9 @@ static void afp_dsi_close(AFPObj *obj)
close_all_vol();
if (obj->logout) {
- /* Block SIGTERM, PAM might send us a SIGTERM in (*obj->logout)() -> pam_close_session() */
+ /* Block sigs, PAM/systemd/whoever might send us a SIG??? in (*obj->logout)() -> pam_close_session() */
+ sigfillset(&sigs);
pthread_sigmask(SIG_BLOCK, &sigs, NULL);
- sigemptyset(&sigs);
- sigaddset(&sigs, SIGTERM);
(*obj->logout)();
}
--
1.7.4.1