Переглянути джерело

Do not allow corrupted syslog-address

Signed-off-by: Alexander Morozov <lk4d4@docker.com>
Alexander Morozov 10 роки тому
батько
коміт
b7a6d14bdc
1 змінених файлів з 23 додано та 21 видалено
  1. 23 21
      daemon/logger/syslog/syslog.go

+ 23 - 21
daemon/logger/syslog/syslog.go

@@ -107,33 +107,35 @@ func (s *syslogger) Name() string {
 }
 
 func parseAddress(address string) (string, string, error) {
-	if urlutil.IsTransportURL(address) {
-		url, err := url.Parse(address)
-		if err != nil {
-			return "", "", err
-		}
+	if address == "" {
+		return "", "", nil
+	}
+	if !urlutil.IsTransportURL(address) {
+		return "", "", fmt.Errorf("syslog-address should be in form proto://address, got %v", address)
+	}
+	url, err := url.Parse(address)
+	if err != nil {
+		return "", "", err
+	}
 
-		// unix socket validation
-		if url.Scheme == "unix" {
-			if _, err := os.Stat(url.Path); err != nil {
-				return "", "", err
-			}
-			return url.Scheme, url.Path, nil
+	// unix socket validation
+	if url.Scheme == "unix" {
+		if _, err := os.Stat(url.Path); err != nil {
+			return "", "", err
 		}
+		return url.Scheme, url.Path, nil
+	}
 
-		// here we process tcp|udp
-		host := url.Host
-		if _, _, err := net.SplitHostPort(host); err != nil {
-			if !strings.Contains(err.Error(), "missing port in address") {
-				return "", "", err
-			}
-			host = host + ":514"
+	// here we process tcp|udp
+	host := url.Host
+	if _, _, err := net.SplitHostPort(host); err != nil {
+		if !strings.Contains(err.Error(), "missing port in address") {
+			return "", "", err
 		}
-
-		return url.Scheme, host, nil
+		host = host + ":514"
 	}
 
-	return "", "", nil
+	return url.Scheme, host, nil
 }
 
 // ValidateLogOpt looks for syslog specific log options