X-Git-Url: https://gitweb.michael.orlitzky.com/?a=blobdiff_plain;f=src%2FMain.hs;h=5afadcdfbc80e80fb1b4a2213afacce6fc836809;hb=refs%2Ftags%2F0.0.5;hp=5b034ba5119bf336721c334a3c1fe69f1518fd83;hpb=45ac9baca360d0f0dabe4576fb44c1634a50dbf7;p=hath.git diff --git a/src/Main.hs b/src/Main.hs index 5b034ba..5afadcd 100644 --- a/src/Main.hs +++ b/src/Main.hs @@ -1,9 +1,7 @@ module Main where -import Control.Concurrent.ParallelIO.Global ( - parallel, - stopGlobalPool ) +import Control.Concurrent.ParallelIO.Global ( stopGlobalPool ) import Control.Monad (unless, when) import qualified Data.ByteString.Char8 as BS (intercalate, pack, unpack) import Data.List ((\\), intercalate) @@ -11,10 +9,10 @@ import Data.Maybe (catMaybes, isNothing) import Data.String.Utils (splitWs) import System.Exit (ExitCode(..), exitSuccess, exitWith) import System.IO (stderr, hPutStrLn) +import Text.Read (readMaybe) import Cidr ( Cidr(..), - cidr_from_string, combine_all, enumerate, max_octet1, @@ -32,7 +30,7 @@ import CommandLine ( Mode(..), parse_errors, parse_mode ) -import DNS (Domain, lookup_ptrs) +import DNS (Domain, PTRResult, lookup_ptrs) import ExitCodes ( exit_args_parse_failed, exit_invalid_cidr ) import Octet () @@ -58,6 +56,7 @@ addr_barrier x = non_addr_char ++ x ++ non_addr_char -- max values. -- 4. Join the regexes from step 3 with regexes matching periods. -- 5. Stick an address boundary on either side of the result. +-- cidr_to_regex :: Cidr.Cidr -> String cidr_to_regex cidr = addr_barrier (intercalate "\\." [range1, range2, range3, range4]) @@ -115,7 +114,7 @@ main = do input <- inputfunc let cidr_strings = splitWs input - let cidrs = map cidr_from_string cidr_strings + let cidrs = map readMaybe cidr_strings when (any isNothing cidrs) $ do putStrLn "Error: not valid CIDR notation." @@ -155,18 +154,17 @@ main = do let addr_bytestrings = map (BS.pack . show) addrs ptrs <- lookup_ptrs addr_bytestrings let pairs = zip addr_bytestrings ptrs - _ <- parallel (map (putStrLn . show_pair) pairs) - return () + mapM_ (putStrLn . show_pair) pairs stopGlobalPool where - show_pair :: (Domain, Maybe [Domain]) -> String - show_pair (s, mds) = + show_pair :: (Domain, PTRResult) -> String + show_pair (s, eds) = (BS.unpack s) ++ ": " ++ results where space = BS.pack " " results = - case mds of - Nothing -> "" - Just ds -> BS.unpack $ BS.intercalate space ds + case eds of + Left err -> "ERROR (" ++ (show err) ++ ")" + Right ds -> BS.unpack $ BS.intercalate space ds