1
0
Fork 0
mirror of https://github.com/syncthing/syncthing-android.git synced 2024-11-26 06:11:19 +00:00

Really fix DNS

The previous patch was merged against a different version of Go, plus had bugs.
Now given I am able to build stuff, this seems to do the right job.
This commit is contained in:
AudriusButkevicius 2016-04-01 20:42:50 -04:00
parent 09bba7140a
commit 96afcdf132
2 changed files with 55 additions and 80 deletions

View file

@ -60,14 +60,12 @@ mkdir -p "$GOROOT_FINAL"
pushd ext/golang/go/src pushd ext/golang/go/src
git reset --hard HEAD
# Apply patches to Golang # Apply patches to Golang
for PATCH in $MYDIR/patches/golang/all/*.patch; do for PATCH in $MYDIR/patches/golang/all/*.patch; do
if ! patch -R -p1 --dry-run <$PATCH &>/dev/null; then
echo "Applying $PATCH" echo "Applying $PATCH"
patch -p1 <$PATCH patch -p1 <$PATCH
else
echo "Patch $PATCH already applied"
fi
done done
set +e set +e

View file

@ -1,8 +1,25 @@
diff --git a/net/dnsclient_unix.go b/net/dnsclient_unix.go
index 17188f0..15a1663 100644
--- a/net/dnsclient_unix.go
+++ b/net/dnsclient_unix.go
@@ -279,12 +279,6 @@ func (conf *resolverConfig) tryUpdate(name string) {
return
}
conf.modTime = fi.ModTime()
- } else {
- // If modTime wasn't set prior, assume nothing has changed.
- if conf.modTime.IsZero() {
- return
- }
- conf.modTime = time.Time{}
}
dnsConf := dnsReadConfig(name)
diff --git a/net/dnsconfig_unix.go b/net/dnsconfig_unix.go diff --git a/net/dnsconfig_unix.go b/net/dnsconfig_unix.go
index 6073fdb..9df3cec 100644 index 6073fdb..bd6ca41 100644
--- a/net/dnsconfig_unix.go --- a/net/dnsconfig_unix.go
+++ b/net/dnsconfig_unix.go +++ b/net/dnsconfig_unix.go
@@ -8,18 +8,57 @@ @@ -8,7 +8,53 @@
package net package net
@ -11,97 +28,62 @@ index 6073fdb..9df3cec 100644
+ "fmt" + "fmt"
+ "os/exec" + "os/exec"
+ "strings" + "strings"
+ "sync"
+ "time"
+) +)
+ +
+var ( +var currentNS []string
+ logOnce sync.Once
+)
+ +
+func getDefaultNS() []string { +func getDefaultNS() []string {
+ var servers []string + var servers []string
+ for _, prop := range []string{"net.dns", "net.dns1", "net.dns2", "net.dns3", "net.dns4"} { + for _, prop := range []string{"net.dns1", "net.dns2"} {
+ cmd := exec.Command("getprop", prop) + cmd := exec.Command("getprop", prop)
+ if cmd.Run() == nil {
+ outputBytes, err := cmd.Output() + outputBytes, err := cmd.Output()
+ if err != nil { + if err != nil {
+ continue + continue
+ } + }
+
+ output := strings.Trim(string(outputBytes), "\n") + output := strings.Trim(string(outputBytes), "\n")
+ if ParseIP(output) != nil { + if ParseIP(output) != nil {
+ servers = append(servers, output) + servers = append(servers, output)
+ } + }
+ } + }
+ }
+ +
+ if servers == nil { + if len(servers) == 0 {
+ servers = []string{"8.8.8.8", "8.8.4.4", "4.2.2.1"} + servers = []string{"8.8.8.8", "8.8.4.4", "4.2.2.1"}
+ } + }
+ +
+ logOnce.Do(func() { + if !slicesEqual(currentNS, servers) {
+ fmt.Println("Using the following DNS servers", servers) + fmt.Println("Using DNS servers:", servers)
+ }) + currentNS = servers
+ }
+ +
+ return servers + return currentNS
+}
+
+func slicesEqual(a, b []string) bool {
+ if len(a) != len(b) {
+ return false
+ }
+
+ for i := range a {
+ if a[i] != b[i] {
+ return false
+ }
+ }
+
+ return true
+} +}
type dnsConfig struct { type dnsConfig struct {
- servers []string // servers to use servers []string // servers to use
- search []string // suffixes to append to local name @@ -33,7 +79,7 @@ func dnsReadConfig(filename string) *dnsConfig {
- ndots int // number of dots in name to trigger absolute lookup
- timeout int // seconds before giving up on packet
- attempts int // lost packets before giving up on server
- rotate bool // round robin among servers
- unknownOpt bool // anything unknown was encountered
- lookup []string // OpenBSD top-level database "lookup" order
- err error // any error that occurs during open of resolv.conf
+ servers []string // servers to use
+ search []string // suffixes to append to local name
+ ndots int // number of dots in name to trigger absolute lookup
+ timeout int // seconds before giving up on packet
+ attempts int // lost packets before giving up on server
+ rotate bool // round robin among servers
+ unknownOpt bool // anything unknown was encountered
+ lookup []string // OpenBSD top-level database "lookup" order
+ err error // any error that occurs during open of resolv.conf
+ mtime time.Time // time of resolv.conf modification
}
// See resolv.conf(5) on a Linux machine.
@@ -33,11 +72,20 @@ func dnsReadConfig(filename string) *dnsConfig {
} }
file, err := open(filename) file, err := open(filename)
if err != nil { if err != nil {
- conf.servers = defaultNS - conf.servers = defaultNS
+ conf.servers = getDefaultNS() + conf.servers = getDefaultNS()
+ conf.mtime = time.Now()
conf.err = err conf.err = err
return conf return conf
} }
defer file.close() @@ -110,7 +156,7 @@ func dnsReadConfig(filename string) *dnsConfig {
+ if fi, err := file.file.Stat(); err == nil {
+ conf.mtime = fi.ModTime()
+ } else {
+ conf.mtime = time.Now()
+ conf.servers = getDefaultNS()
+ conf.err = err
+ return conf
+ }
for line, ok := file.readLine(); ok; line, ok = file.readLine() {
if len(line) > 0 && (line[0] == ';' || line[0] == '#') {
// comment.
@@ -51,7 +99,7 @@ func dnsReadConfig(filename string) *dnsConfig {
case "nameserver": // add one name server
if len(f) > 1 && len(conf.servers) < 3 { // small, but the standard limit
// One more check: make sure server name is
- // just an IP address. Otherwise we need DNS
+ // just an IP address. Otherwise we need DNS
// to look it up.
if parseIPv4(f[1]) != nil {
conf.servers = append(conf.servers, f[1])
@@ -110,7 +158,7 @@ func dnsReadConfig(filename string) *dnsConfig {
} }
} }
if len(conf.servers) == 0 { if len(conf.servers) == 0 {
@ -110,8 +92,3 @@ index 6073fdb..9df3cec 100644
} }
return conf return conf
} }
@@ -118,3 +166,4 @@ func dnsReadConfig(filename string) *dnsConfig {
func hasPrefix(s, prefix string) bool {
return len(s) >= len(prefix) && s[:len(prefix)] == prefix
}
+