375158f6b5
Added a cabal.config file; the result of running cabal freeze. It's not used yet (needs a newer cabal than is in debian stable), but the plan is that once the autbuilders are swiched to jessie, this can be used to make cabal install the same versions of packages that this patch got building, and so avoid breaking every time eg, yesod is upgraded. This commit was sponsored by Daniel Atlas.
66 lines
2.5 KiB
Diff
66 lines
2.5 KiB
Diff
From 99f349066fc960bfa60b4e369bb21431c87d9b59 Mon Sep 17 00:00:00 2001
|
|
From: dummy <dummy@example.com>
|
|
Date: Tue, 14 Oct 2014 03:54:57 +0000
|
|
Subject: [PATCH] use android net.dns1 command instead of resolv.conf file
|
|
|
|
Android has no /etc/resolv.conf. Some might have /system/etc/resolv.conf,
|
|
but even that does not seem likely.
|
|
|
|
This is likely a little slow, but is at least fine for git-annex's uses,
|
|
since it only uses this library for occasional SRV lookups.
|
|
---
|
|
Network/DNS/Resolver.hs | 11 +++++++++--
|
|
dns.cabal | 1 +
|
|
2 files changed, 10 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/Network/DNS/Resolver.hs b/Network/DNS/Resolver.hs
|
|
index 9e8342b..4c6c380 100644
|
|
--- a/Network/DNS/Resolver.hs
|
|
+++ b/Network/DNS/Resolver.hs
|
|
@@ -19,7 +19,7 @@ module Network.DNS.Resolver (
|
|
) where
|
|
|
|
import Control.Applicative ((<$>), (<*>), pure)
|
|
-import Control.Exception (bracket)
|
|
+import Control.Exception (bracket, catch, IOException)
|
|
import Data.Char (isSpace)
|
|
import Data.List (isPrefixOf)
|
|
import Data.Maybe (fromMaybe)
|
|
@@ -33,6 +33,7 @@ import Network.Socket (AddrInfoFlag(..), AddrInfo(..), SockAddr(..), PortNumber(
|
|
import Prelude hiding (lookup)
|
|
import System.Random (getStdRandom, randomR)
|
|
import System.Timeout (timeout)
|
|
+import System.Process
|
|
|
|
#if mingw32_HOST_OS == 1
|
|
import Network.Socket (send)
|
|
@@ -133,7 +134,13 @@ makeResolvSeed conf = ResolvSeed <$> addr
|
|
addr = case resolvInfo conf of
|
|
RCHostName numhost -> makeAddrInfo numhost Nothing
|
|
RCHostPort numhost mport -> makeAddrInfo numhost $ Just mport
|
|
- RCFilePath file -> toAddr <$> readFile file >>= \i -> makeAddrInfo i Nothing
|
|
+ RCFilePath file -> do
|
|
+ -- Android has no /etc/resolv.conf; use getprop command.
|
|
+ ls <- catch (lines <$> readProcess "getprop" ["net.dns1"] []) (const (return []) :: IOException -> IO [String])
|
|
+ let addr = case ls of
|
|
+ [] -> "8.8.8.8" -- google public dns as a fallback only
|
|
+ (l:_) -> l
|
|
+ makeAddrInfo addr Nothing
|
|
toAddr cs = let l:_ = filter ("nameserver" `isPrefixOf`) $ lines cs
|
|
in extract l
|
|
extract = reverse . dropWhile isSpace . reverse . dropWhile isSpace . drop 11
|
|
diff --git a/dns.cabal b/dns.cabal
|
|
index fd7d7a3..5ad8a84 100644
|
|
--- a/dns.cabal
|
|
+++ b/dns.cabal
|
|
@@ -38,6 +38,7 @@ Library
|
|
, network >= 2.3
|
|
, random
|
|
, resourcet
|
|
+ , process
|
|
else
|
|
Build-Depends: base >= 4 && < 5
|
|
, attoparsec
|
|
--
|
|
1.7.10.4
|
|
|