Skip to content

Commit 07caa8a

Browse files
authored
fix: domain name comparison in should_forward_by_query (#1953)
1 parent 34ebd07 commit 07caa8a

File tree

1 file changed

+7
-1
lines changed
  • crates/shadowsocks-service/src/local/dns

1 file changed

+7
-1
lines changed

crates/shadowsocks-service/src/local/dns/server.rs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -594,13 +594,19 @@ fn should_forward_by_query(context: &ServiceContext, balancer: &PingBalancer, qu
594594
if let ServerAddr::DomainName(dn, ..) = svr_cfg.addr() {
595595
// Convert domain name to `Name`
596596
// Ignore it if error occurs
597-
if let Ok(name) = Name::from_str(dn) {
597+
if let Ok(mut name) = Name::from_str(dn) {
598598
// cmp will handle FQDN in case insensitive way
599599
if let Ordering::Equal = query.name().cmp(&name) {
600600
// It seems that query is for this server, just bypass it to local resolver
601601
trace!("DNS querying name {} of server {:?}", query.name(), svr_cfg);
602602
return Some(false);
603603
}
604+
// test it again with fqdn set
605+
name.set_fqdn(true);
606+
if let Ordering::Equal = query.name().cmp(&name) {
607+
trace!("DNS querying name {} of server {:?}", query.name(), svr_cfg);
608+
return Some(false);
609+
}
604610
}
605611
}
606612
}

0 commit comments

Comments
 (0)