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