import Text.Parsec ( ParseError, parse )
import System.Console.CmdArgs ( def )
import System.Exit ( exitSuccess, exitWith, ExitCode (ExitFailure) )
-import System.IO ( hPutStrLn, stderr )
+import System.IO ( hPrint, stderr )
import CommandLine ( get_args )
import Configuration ( Configuration(..), merge_optional )
case (parse_lists $ lists cfg) of
Left e -> do
- hPutStrLn stderr (show e)
+ hPrint stderr e
exitWith (ExitFailure exit_unparseable_list)
- Right ls -> do
+ Right ls ->
case (parse_hosts $ hosts cfg) of
Left e -> do
- hPutStrLn stderr (show e)
+ hPrint stderr e
exitWith (ExitFailure exit_unparseable_host)
Right hs -> do
listings <- concatMapM (lookup_rbl ls) hs
{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE FlexibleInstances #-}
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE StandaloneDeriving #-}
-- | An OptionalConfiguration is just like a 'Configuration', except
-- all of its fields are optional. The user can set options in two
import Data.Data ( Data )
import Data.Maybe ( fromMaybe )
import Data.Monoid ( Monoid(..) )
+import Data.Text ( pack )
import Data.Typeable ( Typeable )
import Paths_harbl ( getSysconfDir )
import System.Console.CmdArgs.Default ( Default(..) )
import System.Directory ( getHomeDirectory )
import System.FilePath ( (</>) )
import System.IO.Error ( catchIOError )
-import System.IO ( hPutStrLn, stderr )
+import System.IO ( hPrint, stderr )
-- Harbl library imports.
import Network.DNS.RBL.Weight ( Weight )
from_rc :: IO OptionalConfiguration
from_rc = do
etc <- catchIOError getSysconfDir (\e -> do
- hPutStrLn stderr (show e)
+ hPrint stderr e
return "/etc")
home <- catchIOError getHomeDirectory (\e -> do
- hPutStrLn stderr (show e)
+ hPrint stderr e
return "$(HOME)")
let global_config_path = etc </> "harblrc"
let user_config_path = home </> ".harblrc"
cfg <- DC.load [ DC.Optional global_config_path,
DC.Optional user_config_path ]
- cfg_lists <- DC.lookup cfg "lists"
- cfg_hosts <- DC.lookup cfg "hosts"
- cfg_threshold <- DC.lookup cfg "threshold"
+ cfg_lists <- DC.lookup cfg (pack "lists")
+ cfg_hosts <- DC.lookup cfg (pack "hosts")
+ cfg_threshold <- DC.lookup cfg (pack "threshold")
return $ OptionalConfiguration
(fromMaybe def cfg_hosts)
(fromMaybe def cfg_lists)