66 lines
		
	
	
	
		
			2.5 KiB
			
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			66 lines
		
	
	
	
		
			2.5 KiB
			
		
	
	
	
		
			Diff
		
	
	
	
	
	
From aaef1aadb21a198475a656132ef4488b85b8fd1b Mon Sep 17 00:00:00 2001
 | 
						|
From: dummy <dummy@example.com>
 | 
						|
Date: Thu, 3 Jul 2014 23:22:47 +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 e4124b8..7aca431 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 qualified Data.ByteString.Char8 as BS
 | 
						|
 import Data.Char (isSpace)
 | 
						|
 import Data.List (isPrefixOf)
 | 
						|
@@ -32,6 +32,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)
 | 
						|
@@ -132,7 +133,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 0a08a9e..724a3e0 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
 | 
						|
 |