diff options
-rw-r--r-- | Presence/UTmp.hs | 11 |
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 | |||
17 | import Data.BitSyntax | 17 | import Data.BitSyntax |
18 | import Data.Functor.Identity | 18 | import Data.Functor.Identity |
19 | import Data.Maybe | 19 | import Data.Maybe |
20 | import System.Posix.Process | ||
20 | import System.Posix.Signals | 21 | import System.Posix.Signals |
21 | import System.Posix.Types | 22 | import System.Posix.Types |
23 | import System.Posix.User | ||
22 | import Control.Monad | 24 | import Control.Monad |
23 | import Data.Word | 25 | import Data.Word |
24 | import Data.Int | 26 | import Data.Int |
@@ -161,7 +163,14 @@ type UserName = L.ByteString | |||
161 | type Tty = L.ByteString | 163 | type Tty = L.ByteString |
162 | 164 | ||
163 | users :: IO [(UserName, Tty, ProcessID)] | 165 | users :: IO [(UserName, Tty, ProcessID)] |
164 | users = fmap (map only3) $ do | 166 | users = 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' |