summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjoe <joe@jerkface.net>2018-05-24 19:20:21 -0400
committerjoe <joe@jerkface.net>2018-05-24 19:20:21 -0400
commit07584194c4c7fa270b78095970cf0d4101005b12 (patch)
tree4dc77357723cd1465997d1fdd89ca40f570b5b8a
parentb56fb7874cda7799b2535dee81a32dcedb09c676 (diff)
Add fallback for utmp read fail (for chroot).
-rw-r--r--Presence/UTmp.hs11
1 files changed, 10 insertions, 1 deletions
diff --git a/Presence/UTmp.hs b/Presence/UTmp.hs
index b43278da..aa2a7733 100644
--- a/Presence/UTmp.hs
+++ b/Presence/UTmp.hs
@@ -17,8 +17,10 @@ import qualified Data.ByteString.Lazy.Char8 as L
17import Data.BitSyntax 17import Data.BitSyntax
18import Data.Functor.Identity 18import Data.Functor.Identity
19import Data.Maybe 19import Data.Maybe
20import System.Posix.Process
20import System.Posix.Signals 21import System.Posix.Signals
21import System.Posix.Types 22import System.Posix.Types
23import System.Posix.User
22import Control.Monad 24import Control.Monad
23import Data.Word 25import Data.Word
24import Data.Int 26import Data.Int
@@ -161,7 +163,14 @@ type UserName = L.ByteString
161type Tty = L.ByteString 163type Tty = L.ByteString
162 164
163users :: IO [(UserName, Tty, ProcessID)] 165users :: IO [(UserName, Tty, ProcessID)]
164users = fmap (map only3) $ do 166users = utmp_users `catchIOError` \_ -> do
167 -- If we can't read utmp file, then return a list with only the current
168 -- user.
169 uname <- getLoginName
170 pid <- getProcessID -- TODO: XXX: Does this make sense as a fallback?
171 return [(L.pack uname,L.empty,pid)]
172 where
173 utmp_users = fmap (map only3) $ do
165 us <- utmp 174 us <- utmp
166 let us' = map interp_utmp_record us 175 let us' = map interp_utmp_record us
167 us'' = mapMaybe user_proc us' 176 us'' = mapMaybe user_proc us'