stub out POSIX stuff
This commit is contained in:
parent
e5f1ca7b4b
commit
6c74a42cc6
17 changed files with 128 additions and 0 deletions
4
Utility/Daemon.hs
Normal file → Executable file
4
Utility/Daemon.hs
Normal file → Executable file
|
@ -5,12 +5,16 @@
|
|||
- Licensed under the GNU GPL version 3 or higher.
|
||||
-}
|
||||
|
||||
{-# LANGUAGE CPP #-}
|
||||
|
||||
module Utility.Daemon where
|
||||
|
||||
import Common
|
||||
import Utility.LogFile
|
||||
|
||||
#if 0
|
||||
import System.Posix
|
||||
#endif
|
||||
|
||||
{- Run an action as a daemon, with all output sent to a file descriptor.
|
||||
-
|
||||
|
|
60
Utility/FileMode.hs
Normal file → Executable file
60
Utility/FileMode.hs
Normal file → Executable file
|
@ -5,6 +5,8 @@
|
|||
- Licensed under the GNU GPL version 3 or higher.
|
||||
-}
|
||||
|
||||
{-# LANGUAGE CPP #-}
|
||||
|
||||
module Utility.FileMode where
|
||||
|
||||
import Common
|
||||
|
@ -17,6 +19,7 @@ import Foreign (complement)
|
|||
{- Applies a conversion function to a file's mode. -}
|
||||
modifyFileMode :: FilePath -> (FileMode -> FileMode) -> IO ()
|
||||
modifyFileMode f convert = void $ modifyFileMode' f convert
|
||||
#if 0
|
||||
modifyFileMode' :: FilePath -> (FileMode -> FileMode) -> IO FileMode
|
||||
modifyFileMode' f convert = do
|
||||
s <- getFileStatus f
|
||||
|
@ -25,6 +28,9 @@ modifyFileMode' f convert = do
|
|||
when (new /= old) $
|
||||
setFileMode f new
|
||||
return old
|
||||
#else
|
||||
modifyFileMode' = error "modifyFileMode' TODO"
|
||||
#endif
|
||||
|
||||
{- Adds the specified FileModes to the input mode, leaving the rest
|
||||
- unchanged. -}
|
||||
|
@ -33,7 +39,11 @@ addModes ms m = combineModes (m:ms)
|
|||
|
||||
{- Removes the specified FileModes from the input mode. -}
|
||||
removeModes :: [FileMode] -> FileMode -> FileMode
|
||||
#if 0
|
||||
removeModes ms m = m `intersectFileModes` complement (combineModes ms)
|
||||
#else
|
||||
removeModes = error "removeModes TODO"
|
||||
#endif
|
||||
|
||||
{- Runs an action after changing a file's mode, then restores the old mode. -}
|
||||
withModifiedFileMode :: FilePath -> (FileMode -> FileMode) -> IO a -> IO a
|
||||
|
@ -44,43 +54,78 @@ withModifiedFileMode file convert a = bracket setup cleanup go
|
|||
go _ = a
|
||||
|
||||
writeModes :: [FileMode]
|
||||
#if 0
|
||||
writeModes = [ownerWriteMode, groupWriteMode, otherWriteMode]
|
||||
#else
|
||||
writeModes = []
|
||||
#endif
|
||||
|
||||
readModes :: [FileMode]
|
||||
#if 0
|
||||
readModes = [ownerReadMode, groupReadMode, otherReadMode]
|
||||
#else
|
||||
readModes = []
|
||||
#endif
|
||||
|
||||
executeModes :: [FileMode]
|
||||
#if 0
|
||||
executeModes = [ownerExecuteMode, groupExecuteMode, otherExecuteMode]
|
||||
#else
|
||||
executeModes = []
|
||||
#endif
|
||||
|
||||
{- Removes the write bits from a file. -}
|
||||
preventWrite :: FilePath -> IO ()
|
||||
#if 0
|
||||
preventWrite f = modifyFileMode f $ removeModes writeModes
|
||||
#else
|
||||
preventWrite _ = return ()
|
||||
#endif
|
||||
|
||||
{- Turns a file's owner write bit back on. -}
|
||||
allowWrite :: FilePath -> IO ()
|
||||
#if 0
|
||||
allowWrite f = modifyFileMode f $ addModes [ownerWriteMode]
|
||||
#else
|
||||
allowWrite _ = return ()
|
||||
#endif
|
||||
|
||||
{- Allows owner and group to read and write to a file. -}
|
||||
groupWriteRead :: FilePath -> IO ()
|
||||
#if 0
|
||||
groupWriteRead f = modifyFileMode f $ addModes
|
||||
[ ownerWriteMode, groupWriteMode
|
||||
, ownerReadMode, groupReadMode
|
||||
]
|
||||
#else
|
||||
groupWriteRead _ = return ()
|
||||
#endif
|
||||
|
||||
#if 0
|
||||
checkMode :: FileMode -> FileMode -> Bool
|
||||
checkMode checkfor mode = checkfor `intersectFileModes` mode == checkfor
|
||||
#endif
|
||||
|
||||
{- Checks if a file mode indicates it's a symlink. -}
|
||||
isSymLink :: FileMode -> Bool
|
||||
#if 0
|
||||
isSymLink = checkMode symbolicLinkMode
|
||||
#else
|
||||
isSymLink _ = False
|
||||
#endif
|
||||
|
||||
{- Checks if a file has any executable bits set. -}
|
||||
isExecutable :: FileMode -> Bool
|
||||
#if 0
|
||||
isExecutable mode = combineModes executeModes `intersectFileModes` mode /= 0
|
||||
#else
|
||||
isExecutable _ = False
|
||||
#endif
|
||||
|
||||
{- Runs an action without that pesky umask influencing it, unless the
|
||||
- passed FileMode is the standard one. -}
|
||||
noUmask :: FileMode -> IO a -> IO a
|
||||
#if 0
|
||||
noUmask mode a
|
||||
| mode == stdFileMode = a
|
||||
| otherwise = bracket setup cleanup go
|
||||
|
@ -88,17 +133,28 @@ noUmask mode a
|
|||
setup = setFileCreationMask nullFileMode
|
||||
cleanup = setFileCreationMask
|
||||
go _ = a
|
||||
#else
|
||||
noUmask _ a = a
|
||||
#endif
|
||||
|
||||
combineModes :: [FileMode] -> FileMode
|
||||
#if 0
|
||||
combineModes [] = undefined
|
||||
combineModes [m] = m
|
||||
combineModes (m:ms) = foldl unionFileModes m ms
|
||||
#else
|
||||
combineModes _ = error "combineModes TODO"
|
||||
#endif
|
||||
|
||||
stickyMode :: FileMode
|
||||
stickyMode = 512
|
||||
|
||||
isSticky :: FileMode -> Bool
|
||||
#if 0
|
||||
isSticky = checkMode stickyMode
|
||||
#else
|
||||
isSticky _ = False
|
||||
#endif
|
||||
|
||||
setSticky :: FilePath -> IO ()
|
||||
setSticky f = modifyFileMode f $ addModes [stickyMode]
|
||||
|
@ -110,6 +166,7 @@ setSticky f = modifyFileMode f $ addModes [stickyMode]
|
|||
- as writeFile.
|
||||
-}
|
||||
writeFileProtected :: FilePath -> String -> IO ()
|
||||
#if 0
|
||||
writeFileProtected file content = do
|
||||
h <- openFile file WriteMode
|
||||
void $ tryIO $
|
||||
|
@ -117,3 +174,6 @@ writeFileProtected file content = do
|
|||
removeModes [groupReadMode, otherReadMode]
|
||||
hPutStr h content
|
||||
hClose h
|
||||
#else
|
||||
writeFileProtected = writeFile
|
||||
#endif
|
||||
|
|
14
Utility/Gpg.hs
Normal file → Executable file
14
Utility/Gpg.hs
Normal file → Executable file
|
@ -5,13 +5,17 @@
|
|||
- Licensed under the GNU GPL version 3 or higher.
|
||||
-}
|
||||
|
||||
{-# LANGUAGE CPP #-}
|
||||
|
||||
module Utility.Gpg where
|
||||
|
||||
import System.Posix.Types
|
||||
import Control.Applicative
|
||||
import Control.Concurrent
|
||||
import Control.Exception (bracket)
|
||||
#if 0
|
||||
import System.Posix.Env (setEnv, unsetEnv, getEnv)
|
||||
#endif
|
||||
|
||||
import Common
|
||||
|
||||
|
@ -20,6 +24,7 @@ newtype KeyIds = KeyIds [String]
|
|||
|
||||
stdParams :: [CommandParam] -> IO [String]
|
||||
stdParams params = do
|
||||
#ifndef __WINDOWS__
|
||||
-- Enable batch mode if GPG_AGENT_INFO is set, to avoid extraneous
|
||||
-- gpg output about password prompts. GPG_BATCH is set by the test
|
||||
-- suite for a similar reason.
|
||||
|
@ -29,6 +34,9 @@ stdParams params = do
|
|||
then []
|
||||
else ["--batch", "--no-tty", "--use-agent"]
|
||||
return $ batch ++ defaults ++ toCommand params
|
||||
#else
|
||||
return $ defaults ++ toCommand params
|
||||
#endif
|
||||
where
|
||||
-- be quiet, even about checking the trustdb
|
||||
defaults = ["--quiet", "--trust-model", "always"]
|
||||
|
@ -64,6 +72,7 @@ pipeStrict params input = do
|
|||
- Note that to avoid deadlock with the cleanup stage,
|
||||
- the reader must fully consume gpg's input before returning. -}
|
||||
feedRead :: [CommandParam] -> String -> (Handle -> IO ()) -> (Handle -> IO a) -> IO a
|
||||
#ifndef __WINDOWS__
|
||||
feedRead params passphrase feeder reader = do
|
||||
-- pipe the passphrase into gpg on a fd
|
||||
(frompipe, topipe) <- createPipe
|
||||
|
@ -83,6 +92,9 @@ feedRead params passphrase feeder reader = do
|
|||
feeder to
|
||||
hClose to
|
||||
reader from
|
||||
#else
|
||||
feedRead = error "feedRead TODO"
|
||||
#endif
|
||||
|
||||
{- Finds gpg public keys matching some string. (Could be an email address,
|
||||
- a key id, or a name; See the section 'HOW TO SPECIFY A USER ID' of
|
||||
|
@ -204,6 +216,7 @@ keyBlock public ls = unlines
|
|||
| public = "PUBLIC"
|
||||
| otherwise = "PRIVATE"
|
||||
|
||||
#if 0
|
||||
{- Runs an action using gpg in a test harness, in which gpg does
|
||||
- not use ~/.gpg/, but a directory with the test key set up to be used. -}
|
||||
testHarness :: IO a -> IO a
|
||||
|
@ -230,3 +243,4 @@ testTestHarness :: IO Bool
|
|||
testTestHarness = do
|
||||
keys <- testHarness $ findPubKeys testKeyId
|
||||
return $ KeyIds [testKeyId] == keys
|
||||
#endif
|
||||
|
|
4
Utility/LogFile.hs
Normal file → Executable file
4
Utility/LogFile.hs
Normal file → Executable file
|
@ -5,11 +5,15 @@
|
|||
- Licensed under the GNU GPL version 3 or higher.
|
||||
-}
|
||||
|
||||
{-# LANGUAGE CPP #-}
|
||||
|
||||
module Utility.LogFile where
|
||||
|
||||
import Common
|
||||
|
||||
#if 0
|
||||
import System.Posix
|
||||
#endif
|
||||
|
||||
openLog :: FilePath -> IO Fd
|
||||
openLog logfile = do
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue