@@ -32,38 +32,66 @@ func (params params) validateParam(param *param) (errs []error) {
3232 }
3333 }
3434
35- if ownParam .proto == param . proto && ownParam . ip == param . ip && ownParam . port == param . port {
35+ if ownParam .stacksEqual ( param ) {
3636 if ownParam .useTLS != param .useTLS {
3737 err := wrapError (ConflictTLSMode , fmt .Sprintf ("cannot serve for both Plain and TLS mode: %+v, %+v" , ownParam , param ))
3838 errs = append (errs , err )
3939 }
40+ }
41+ }
4042
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
4473 }
4574 }
4675 }
4776
77+ err := wrapError (DuplicatedAddressHostname , fmt .Sprintf ("duplicated address and hostname: %+v" , param ))
78+ errs = append (errs , err )
4879 return
4980}
5081
51- func (params params ) validate (inputs params ) (errs []error ) {
82+ func (params params ) validate (inputs params ) (errs , warns []error ) {
5283 for _ , p := range inputs {
5384 es := p .validate ()
54- if len (es ) > 0 {
55- errs = append (errs , es ... )
56- }
85+ errs = append (errs , es ... )
5786
5887 es = inputs .validateParam (p )
59- if len (es ) > 0 {
60- errs = append (errs , es ... )
61- }
88+ errs = append (errs , es ... )
6289
6390 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 ... )
6795 }
6896
6997 return
0 commit comments