From df78914cae2dc2e3da5170cf3f9c7b412aed3afa Mon Sep 17 00:00:00 2001 From: Luke Shumaker Date: Thu, 3 Sep 2015 16:59:14 -0600 Subject: Use a defer/recover block to have the exit status on panic match LSB. --- src/nshd/hackers_git/hackers.go | 2 ++ src/nshd/main.go | 2 ++ src/nslcd_systemd/nslcd_systemd.go | 2 ++ src/sd_daemon/lsb/exit-status.go | 12 ++++++++++++ 4 files changed, 18 insertions(+) diff --git a/src/nshd/hackers_git/hackers.go b/src/nshd/hackers_git/hackers.go index ecbda7a..814e921 100644 --- a/src/nshd/hackers_git/hackers.go +++ b/src/nshd/hackers_git/hackers.go @@ -6,6 +6,7 @@ import ( "nslcd_proto/util" "nslcd_systemd" "sd_daemon/logger" + "sd_daemon/lsb" "sync" ) @@ -47,6 +48,7 @@ func NewHackers(config Config) *Hackers { } o.workers.Add(1) go func() { + defer lsb.Recover() defer o.workers.Done() o.worker() }() diff --git a/src/nshd/main.go b/src/nshd/main.go index ebca1a6..bc53711 100644 --- a/src/nshd/main.go +++ b/src/nshd/main.go @@ -1,12 +1,14 @@ package main import ( + "sd_daemon/lsb" "nshd/hackers_git" "nslcd_systemd" "os" ) func main() { + defer lsb.Recover() config := hackers_git.Config{ Pam_password_prohibit_message: "", Yamldir: "/var/cache/parabola-hackers/users", diff --git a/src/nslcd_systemd/nslcd_systemd.go b/src/nslcd_systemd/nslcd_systemd.go index dd548ad..c4511ef 100644 --- a/src/nslcd_systemd/nslcd_systemd.go +++ b/src/nslcd_systemd/nslcd_systemd.go @@ -82,6 +82,7 @@ func Main(backend Backend) uint8 { sock := make(chan *net.UnixConn, 1) go func() { + defer lsb.Recover() for { conn, err := socket.Accept() if err != nil { @@ -114,6 +115,7 @@ Loop: case conn := <-sock: wg.Add(1) go func() { + defer lsb.Recover() defer wg.Done() handler(conn, backend) }() diff --git a/src/sd_daemon/lsb/exit-status.go b/src/sd_daemon/lsb/exit-status.go index ba5b68b..41eaafd 100644 --- a/src/sd_daemon/lsb/exit-status.go +++ b/src/sd_daemon/lsb/exit-status.go @@ -1,5 +1,10 @@ package lsb +import ( + "os" + "sd_daemon/logger" +) + /* systemd daemon(7) recommends using the exit codes defined in the * "LSB recomendations for SysV init scripts"[1]. * @@ -60,3 +65,10 @@ const ( EXIT_BUS_ENDPOINT uint8 = 236 EXIT_SMACK_PROCESS_LABEL uint8 = 237 ) + +func Recover() { + if r := recover(); r != nil { + logger.Err("panic: %v", r) + os.Exit(int(EXIT_FAILURE)) + } +} -- cgit v1.2.3-54-g00ecf