Browse code

Do not allow corrupted syslog-address

Signed-off-by: Alexander Morozov <lk4d4@docker.com>

Alexander Morozov authored on 2015/08/18 03:37:55
Showing 1 changed files
... ...
@@ -107,33 +107,35 @@ func (s *syslogger) Name() string {
107 107
 }
108 108
 
109 109
 func parseAddress(address string) (string, string, error) {
110
-	if urlutil.IsTransportURL(address) {
111
-		url, err := url.Parse(address)
112
-		if err != nil {
113
-			return "", "", err
114
-		}
110
+	if address == "" {
111
+		return "", "", nil
112
+	}
113
+	if !urlutil.IsTransportURL(address) {
114
+		return "", "", fmt.Errorf("syslog-address should be in form proto://address, got %v", address)
115
+	}
116
+	url, err := url.Parse(address)
117
+	if err != nil {
118
+		return "", "", err
119
+	}
115 120
 
116
-		// unix socket validation
117
-		if url.Scheme == "unix" {
118
-			if _, err := os.Stat(url.Path); err != nil {
119
-				return "", "", err
120
-			}
121
-			return url.Scheme, url.Path, nil
121
+	// unix socket validation
122
+	if url.Scheme == "unix" {
123
+		if _, err := os.Stat(url.Path); err != nil {
124
+			return "", "", err
122 125
 		}
126
+		return url.Scheme, url.Path, nil
127
+	}
123 128
 
124
-		// here we process tcp|udp
125
-		host := url.Host
126
-		if _, _, err := net.SplitHostPort(host); err != nil {
127
-			if !strings.Contains(err.Error(), "missing port in address") {
128
-				return "", "", err
129
-			}
130
-			host = host + ":514"
129
+	// here we process tcp|udp
130
+	host := url.Host
131
+	if _, _, err := net.SplitHostPort(host); err != nil {
132
+		if !strings.Contains(err.Error(), "missing port in address") {
133
+			return "", "", err
131 134
 		}
132
-
133
-		return url.Scheme, host, nil
135
+		host = host + ":514"
134 136
 	}
135 137
 
136
-	return "", "", nil
138
+	return url.Scheme, host, nil
137 139
 }
138 140
 
139 141
 // ValidateLogOpt looks for syslog specific log options