@@ -32,38 +32,66 @@ func (params params) validateParam(param *param) (errs []error) {
32
32
}
33
33
}
34
34
35
- if ownParam .proto == param . proto && ownParam . ip == param . ip && ownParam . port == param . port {
35
+ if ownParam .stacksEqual ( param ) {
36
36
if ownParam .useTLS != param .useTLS {
37
37
err := wrapError (ConflictTLSMode , fmt .Sprintf ("cannot serve for both Plain and TLS mode: %+v, %+v" , ownParam , param ))
38
38
errs = append (errs , err )
39
39
}
40
+ }
41
+ }
40
42
41
- if (len (param .hostNames ) == 0 && len (ownParam .hostNames ) == 0 ) || (ownParam .hasHostNames (param .hostNames )) {
42
- err := wrapError (DuplicatedAddressHostname , fmt .Sprintf ("duplicated address and hostname: %+v, %+v" , ownParam , param ))
43
- errs = append (errs , err )
43
+ return
44
+ }
45
+
46
+ func (params params ) validateShadows (param * param ) (errs []error ) {
47
+ if len (params ) == 0 {
48
+ return nil
49
+ }
50
+
51
+ if len (param .hostNames ) == 0 {
52
+ shadowed := false
53
+ for _ , ownParam := range params {
54
+ if ownParam .stacksEqual (param ) && len (ownParam .hostNames ) == 0 {
55
+ shadowed = true
56
+ break
57
+ }
58
+ }
59
+ if ! shadowed {
60
+ return nil
61
+ }
62
+ } else {
63
+ for _ , hostName := range param .hostNames {
64
+ shadowed := false
65
+ for _ , ownParam := range params {
66
+ if ownParam .stacksEqual (param ) && ownParam .hasHostName (hostName ) {
67
+ shadowed = true
68
+ break
69
+ }
70
+ }
71
+ if ! shadowed {
72
+ return nil
44
73
}
45
74
}
46
75
}
47
76
77
+ err := wrapError (DuplicatedAddressHostname , fmt .Sprintf ("duplicated address and hostname: %+v" , param ))
78
+ errs = append (errs , err )
48
79
return
49
80
}
50
81
51
- func (params params ) validate (inputs params ) (errs []error ) {
82
+ func (params params ) validate (inputs params ) (errs , warns []error ) {
52
83
for _ , p := range inputs {
53
84
es := p .validate ()
54
- if len (es ) > 0 {
55
- errs = append (errs , es ... )
56
- }
85
+ errs = append (errs , es ... )
57
86
58
87
es = inputs .validateParam (p )
59
- if len (es ) > 0 {
60
- errs = append (errs , es ... )
61
- }
88
+ errs = append (errs , es ... )
62
89
63
90
es = params .validateParam (p )
64
- if len (es ) > 0 {
65
- errs = append (errs , es ... )
66
- }
91
+ errs = append (errs , es ... )
92
+
93
+ ws := params .validateShadows (p )
94
+ warns = append (warns , ws ... )
67
95
}
68
96
69
97
return
0 commit comments