Просмотр исходного кода

Resolver bug fixes

- Accept dns_transform API parameter

- Follow required int-as-string API parameter convention for dns_attempt

- Never fall back to system resolver when BindToDevice is configured
Rod Hynes 3 лет назад
Родитель
Сommit
ffafe3af81
3 измененных файлов с 13 добавлено и 5 удалено
  1. 10 4
      psiphon/common/resolver/resolver.go
  2. 1 0
      psiphon/server/api.go
  3. 2 1
      psiphon/serverApi.go

+ 10 - 4
psiphon/common/resolver/resolver.go

@@ -491,10 +491,16 @@ func (r *Resolver) ResolveIP(
 	// that try a AlternateDNSServer, or just use the standard library
 	// that try a AlternateDNSServer, or just use the standard library
 	// resolver.
 	// resolver.
 	//
 	//
-	// ResolveIP should always be called, even when defaultResolverLookupIP
-	// will be used, to ensure correct metrics counts and ensure a consistent
-	// error message log stack for all DNS-related failures.
-	if len(systemServers) == 0 && params.AlternateDNSServer == "" {
+	// ResolveIP should always be called, even when defaultResolverLookupIP is
+	// expected to be used, to ensure correct metrics counts and ensure a
+	// consistent error message log stack for all DNS-related failures.
+	//
+	// When BindToDevice is configured, the standard library resolver is not
+	// used, as it will not route outside of the VPN.
+	if len(systemServers) == 0 &&
+		params.AlternateDNSServer == "" &&
+		r.networkConfig.BindToDevice == nil {
+
 		IPs, err := defaultResolverLookupIP(ctx, hostname, r.networkConfig.LogHostnames)
 		IPs, err := defaultResolverLookupIP(ctx, hostname, r.networkConfig.LogHostnames)
 		if err != nil {
 		if err != nil {
 			return nil, errors.Trace(err)
 			return nil, errors.Trace(err)

+ 1 - 0
psiphon/server/api.go

@@ -923,6 +923,7 @@ var baseDialParams = []requestParamSpec{
 	{"split_tunnel_regions", isRegionCode, requestParamOptional | requestParamArray},
 	{"split_tunnel_regions", isRegionCode, requestParamOptional | requestParamArray},
 	{"dns_preresolved", isAnyString, requestParamOptional},
 	{"dns_preresolved", isAnyString, requestParamOptional},
 	{"dns_preferred", isAnyString, requestParamOptional},
 	{"dns_preferred", isAnyString, requestParamOptional},
+	{"dns_transform", isAnyString, requestParamOptional},
 	{"dns_attempt", isIntString, requestParamOptional | requestParamLogStringAsInt},
 	{"dns_attempt", isIntString, requestParamOptional | requestParamLogStringAsInt},
 }
 }
 
 

+ 2 - 1
psiphon/serverApi.go

@@ -1087,7 +1087,8 @@ func getBaseAPIParameters(
 					params["dns_transform"] = dialParams.ResolveParameters.ProtocolTransformName
 					params["dns_transform"] = dialParams.ResolveParameters.ProtocolTransformName
 				}
 				}
 
 
-				params["dns_attempt"] = dialParams.ResolveParameters.GetFirstAttemptWithAnswer()
+				params["dns_attempt"] = strconv.Itoa(
+					dialParams.ResolveParameters.GetFirstAttemptWithAnswer())
 			}
 			}
 		}
 		}