From 25e03ec9edd863136008881a4a57ea9a788d34b3 Mon Sep 17 00:00:00 2001 From: Frank Lahm 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 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