]> arthur.barton.de Git - netatalk.git/commitdiff
Block SIGTERM when calling pam_close_session
authorFrank Lahm <franklahm@googlemail.com>
Mon, 18 Jun 2012 14:26:28 +0000 (16:26 +0200)
committerFrank Lahm <franklahm@googlemail.com>
Mon, 18 Jun 2012 14:26:28 +0000 (16:26 +0200)
etc/afpd/afp_dsi.c

index bf454e15e8b16cbbd4b377a6b19033afd0ca0760..6c6bc7d89e334ade0800fece736afa024c927310 100644 (file)
@@ -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);