Blob Blame History Raw
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