fix: reverter should execute the reversion in reversed order (#6872)
Signed-off-by: Jason Joo <hblzxsj@gmail.com>
This commit is contained in:
parent
ee4d26b780
commit
4e7bd5a51c
3 changed files with 22 additions and 2 deletions
|
@ -51,6 +51,7 @@ will behave as follows:
|
||||||
|
|
||||||
* `continue` will continue applying the next rule in the rule list.
|
* `continue` will continue applying the next rule in the rule list.
|
||||||
* `stop` will consider the current rule the last rule and will not continue. The default behaviour is `stop`
|
* `stop` will consider the current rule the last rule and will not continue. The default behaviour is `stop`
|
||||||
|
* When multiple rules are matched, the request rewrite follows the line order in the configuration, while the response rewrite(`answer` option) is executed in reverse order.
|
||||||
|
|
||||||
## Examples
|
## Examples
|
||||||
|
|
||||||
|
|
|
@ -90,8 +90,9 @@ func (r *ResponseReverter) WriteMsg(res1 *dns.Msg) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *ResponseReverter) rewriteResourceRecord(res *dns.Msg, rr dns.RR) {
|
func (r *ResponseReverter) rewriteResourceRecord(res *dns.Msg, rr dns.RR) {
|
||||||
for _, rule := range r.ResponseRules {
|
// The reverting rules need to be done in reversed order.
|
||||||
rule.RewriteResponse(res, rr)
|
for i := len(r.ResponseRules) - 1; i >= 0; i-- {
|
||||||
|
r.ResponseRules[i].RewriteResponse(res, rr)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -126,6 +126,24 @@ func TestValueResponseReverter(t *testing.T) {
|
||||||
rules = append(rules, r)
|
rules = append(rules, r)
|
||||||
|
|
||||||
doValueReverterTests("suffix", rules, t)
|
doValueReverterTests("suffix", rules, t)
|
||||||
|
|
||||||
|
// multiple rules
|
||||||
|
rules = []Rule{}
|
||||||
|
r, err = newNameRule("continue", "suffix", `.domain.uk`, ".domain.us", "answer", "auto")
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("cannot parse rule: %s", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
rules = append(rules, r)
|
||||||
|
|
||||||
|
r, err = newNameRule("stop", "suffix", `.domain.us`, ".cluster.local", "answer", "auto")
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("cannot parse rule: %s", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
rules = append(rules, r)
|
||||||
|
|
||||||
|
doValueReverterTests("suffix_multiple", rules, t)
|
||||||
}
|
}
|
||||||
|
|
||||||
func doValueReverterTests(name string, rules []Rule, t *testing.T) {
|
func doValueReverterTests(name string, rules []Rule, t *testing.T) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue