]> gitweb.michael.orlitzky.com - dead/htsn.git/commitdiff
Retain umask after daemonizing.
authorMichael Orlitzky <michael@orlitzky.com>
Mon, 23 Dec 2013 15:25:46 +0000 (10:25 -0500)
committerMichael Orlitzky <michael@orlitzky.com>
Mon, 23 Dec 2013 15:25:46 +0000 (10:25 -0500)
Report when we have successfully logged in.

src/Main.hs
src/Unix.hs

index 02b42ff09b2f5b58b3357147d03a5679e43f606b..2b0b5b920db4acefd161c2c069ec127695f6483d 100644 (file)
@@ -198,6 +198,7 @@ log_in cfg h = do
     else do
       send_cred h (password cfg)
       _ <- recv_line h -- "The Sports Network"
+      report_info $ "Logged in as " ++ (username cfg) ++ "."
       return ()
   where
     username_prompt = "Username: "
index a4389bee0e844ea7cd7024d608e3e126033bc926..9b0ddaac9d3bbc10dc532b87c233378be2dd19cb 100644 (file)
@@ -19,6 +19,7 @@ import System.Posix (
   getUserEntryForName,
   installHandler,
   removeLink,
+  setFileCreationMask,
   setGroupID,
   setUserID,
   sigTERM )
@@ -62,14 +63,23 @@ graceful_shutdown cfg main_thread_id = do
 --   finally do the daemonization dance.
 --
 full_daemonize :: Configuration -> IO () -> IO ()
-full_daemonize cfg program =
+full_daemonize cfg program = do
+  -- The call to 'daemonize' will set the umask to zero, but we want
+  -- to retain it. So, we set the umask to zero before 'daemonize'
+  -- can, so that we can record the previous umask value (returned by
+  -- setFileCreationMask).
+  orig_umask <- setFileCreationMask 0
   -- This is the 'daemonize' from System.Posix.Daemonize.
-  daemonize program'
+  daemonize (program' orig_umask)
   where
     -- We need to do all this stuff *after* we daemonize.
-    program' = do
+    program' orig_umask = do
       -- First write the PID file which probably requires root.
       pid <- getProcessID
+
+      -- The PID file needs to be read-only for anyone but its
+      -- owner. Hopefully the umask accomplishes this!
+      _ <- setFileCreationMask orig_umask
       writeFile (pidfile cfg) (show pid)
 
       -- We need to pass the thread ID to the signal handler so it