Merge: + querylog: preserve searching compatibility with the previous version

* commit 'a7742a366511e272a8c24dc5fcd1a62759c2bacb':
  - querylog: fix linter issue
  + querylog: preserve searching compatibility with the previous version
This commit is contained in:
Simon Zolin 2019-11-19 17:21:12 +03:00
commit 0d4dce5c79
1 changed files with 39 additions and 1 deletions

View File

@ -398,6 +398,7 @@ func readJSONValue(s, name string) string {
return s[start:end] return s[start:end]
} }
// nolint (gocyclo)
func (r *Reader) applySearch(str string) bool { func (r *Reader) applySearch(str string) bool {
if r.search.ResponseStatus == responseStatusFiltered { if r.search.ResponseStatus == responseStatusFiltered {
boolVal, ok := readJSONBool(str, "IsFiltered") boolVal, ok := readJSONBool(str, "IsFiltered")
@ -406,8 +407,26 @@ func (r *Reader) applySearch(str string) bool {
} }
} }
mq := dns.Msg{}
if len(r.search.Domain) != 0 { if len(r.search.Domain) != 0 {
val := readJSONValue(str, "QH") val := readJSONValue(str, "QH")
if len(val) == 0 {
// pre-v0.99.3 compatibility
val = readJSONValue(str, "Question")
if len(val) == 0 {
return false
}
bval, err := base64.StdEncoding.DecodeString(val)
if err != nil {
return false
}
err = mq.Unpack(bval)
if err != nil {
return false
}
val = strings.TrimSuffix(mq.Question[0].Name, ".")
}
if len(val) == 0 { if len(val) == 0 {
return false return false
} }
@ -421,7 +440,26 @@ func (r *Reader) applySearch(str string) bool {
if len(r.search.QuestionType) != 0 { if len(r.search.QuestionType) != 0 {
val := readJSONValue(str, "QT") val := readJSONValue(str, "QT")
if len(val) == 0 { if len(val) == 0 {
return false // pre-v0.99.3 compatibility
if len(mq.Question) == 0 {
val = readJSONValue(str, "Question")
if len(val) == 0 {
return false
}
bval, err := base64.StdEncoding.DecodeString(val)
if err != nil {
return false
}
err = mq.Unpack(bval)
if err != nil {
return false
}
}
ok := false
val, ok = dns.TypeToString[mq.Question[0].Qtype]
if !ok {
return false
}
} }
if val != r.search.QuestionType { if val != r.search.QuestionType {
return false return false