+ cfg <- get_args
+
+ -- This reads stdin.
+ input <- BS.getContents
+
+ -- Split the input on any whitespace characters.
+ let raw_domains = BS.words input
+
+ -- Convert these to ByteStrings.
+ let raw_delegates = map BS.pack (delegates cfg)
+
+ let normalize_function =
+ if (no_append_root cfg)
+ then normalize_case
+ else normalize
+
+ -- Normalize the given names and delegates
+ let nrml_domains = map normalize_function raw_domains
+ let nrml_delegates = map normalize_function raw_delegates
+
+ rc <- case (server cfg) of
+ Nothing -> return defaultResolvConf
+ Just s -> do
+ s' <- resolve_address s
+ case s' of
+ Nothing -> do
+ hPutStrLn stderr ("Bad DNS server or lookup error: " ++ s)
+ exitWith (ExitFailure exit_bad_server)
+ Just s'' ->
+ return $ defaultResolvConf { resolvInfo =
+ RCHostName (show s'') }
+
+ rs <- makeResolvSeed rc
+
+ let lookup_function = case cfg of
+ (NS _ _ _) -> lookupNS'
+ (MX _ _ _) -> lookupMX'
+
+ _ <- withResolver rs $ \resolver -> do
+ -- Bad stuff happens if we try to run these lookups in parallel
+ -- instead of the reports.
+ records <- mapM (lookup_function resolver) nrml_domains
+ let cleaned_records = map (clean nrml_delegates) records
+ parallel (map report cleaned_records)
+
+ stopGlobalPool