Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit6b4f75d

Browse files
committed
Respect resolvedAddressTypes when follow CNAME records,closeAsyncHttpClient#1327
Motivation:When we follow CNAME records we should respect resolvedAddressTypes andonly query A / AAAA depending on which address types are expected.Modifications:Check if we should query A / AAAA when follow CNAMEs depending onresolvedAddressTypes.Result:Correct behaviour when follow CNAMEs.
1 parenta0cbc31 commit6b4f75d

File tree

2 files changed

+59
-16
lines changed

2 files changed

+59
-16
lines changed

‎netty-bp/resolver-dns/src/main/java/io/netty/resolver/dns/DnsNameResolver.java‎

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
importio.netty.handler.codec.dns.DnsRecord;
3636
importio.netty.handler.codec.dns.DatagramDnsResponseDecoder;
3737
importio.netty.handler.codec.dns.DnsQuestion;
38+
importio.netty.handler.codec.dns.DnsRecordType;
3839
importio.netty.handler.codec.dns.DnsResponse;
3940
importio.netty.resolver.HostsFileEntriesResolver;
4041
importio.netty.resolver.InetNameResolver;
@@ -59,7 +60,9 @@
5960
importjava.util.Collection;
6061
importjava.util.Collections;
6162
importjava.util.Iterator;
63+
importjava.util.LinkedHashSet;
6264
importjava.util.List;
65+
importjava.util.Set;
6366

6467
importstaticio.netty.util.internal.ObjectUtil2.*;
6568

@@ -148,6 +151,10 @@ protected DnsServerAddressStream initialValue() throws Exception {
148151
privatefinalHostsFileEntriesResolverhostsFileEntriesResolver;
149152
privatefinalString[]searchDomains;
150153
privatefinalintndots;
154+
privatefinalbooleancnameFollowARecords;
155+
privatefinalbooleancnameFollowAAAARecords;
156+
privatefinalInternetProtocolFamily2preferredAddressType;
157+
privatefinalDnsRecordType[]resolveRecordTypes;
151158

152159
/**
153160
* Creates a new DNS-based name resolver that communicates with the specified list of DNS servers.
@@ -200,6 +207,32 @@ public DnsNameResolver(
200207
this.searchDomains =checkNotNull(searchDomains,"searchDomains").clone();
201208
this.ndots =checkPositiveOrZero(ndots,"ndots");
202209

210+
booleancnameFollowARecords =false;
211+
booleancnameFollowAAAARecords =false;
212+
// Use LinkedHashSet to maintain correct ordering.
213+
Set<DnsRecordType>recordTypes =newLinkedHashSet<DnsRecordType>(resolvedAddressTypes.length);
214+
for (InternetProtocolFamily2family:resolvedAddressTypes) {
215+
switch (family) {
216+
caseIPv4:
217+
cnameFollowARecords =true;
218+
recordTypes.add(DnsRecordType.A);
219+
break;
220+
caseIPv6:
221+
cnameFollowAAAARecords =true;
222+
recordTypes.add(DnsRecordType.AAAA);
223+
break;
224+
default:
225+
thrownewError();
226+
}
227+
}
228+
229+
// One of both must be always true.
230+
assertcnameFollowARecords ||cnameFollowAAAARecords;
231+
this.cnameFollowAAAARecords =cnameFollowAAAARecords;
232+
this.cnameFollowARecords =cnameFollowARecords;
233+
resolveRecordTypes =recordTypes.toArray(newDnsRecordType[recordTypes.size()]);
234+
preferredAddressType =resolvedAddressTypes[0];
235+
203236
Bootstrapb =newBootstrap();
204237
b.group(executor());
205238
b.channelFactory(channelFactory);
@@ -260,6 +293,22 @@ final int ndots() {
260293
returnndots;
261294
}
262295

296+
finalbooleanisCnameFollowAAAARecords() {
297+
returncnameFollowAAAARecords;
298+
}
299+
300+
finalbooleanisCnameFollowARecords() {
301+
returncnameFollowARecords;
302+
}
303+
304+
finalInternetProtocolFamily2preferredAddressType() {
305+
returnpreferredAddressType;
306+
}
307+
308+
finalDnsRecordType[]resolveRecordTypes() {
309+
returnresolveRecordTypes;
310+
}
311+
263312
/**
264313
* Returns {@code true} if and only if this resolver sends a DNS query with the RD (recursion desired) flag set.
265314
* The default value is {@code true}.

‎netty-bp/resolver-dns/src/main/java/io/netty/resolver/dns/DnsNameResolverContext.java‎

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -146,19 +146,7 @@ public void operationComplete(Future<T> future) throws Exception {
146146

147147
privatevoidinternalResolve(Promise<T>promise) {
148148
InetSocketAddressnameServerAddrToTry =nameServerAddrs.next();
149-
for (InternetProtocolFamily2f:resolveAddressTypes) {
150-
finalDnsRecordTypetype;
151-
switch (f) {
152-
caseIPv4:
153-
type =DnsRecordType.A;
154-
break;
155-
caseIPv6:
156-
type =DnsRecordType.AAAA;
157-
break;
158-
default:
159-
thrownewError();
160-
}
161-
149+
for (DnsRecordTypetype:parent.resolveRecordTypes()) {
162150
query(nameServerAddrToTry,newDefaultDnsQuestion(hostname,type),promise);
163151
}
164152
}
@@ -410,7 +398,7 @@ private boolean gotPreferredAddress() {
410398
}
411399

412400
finalintsize =resolvedEntries.size();
413-
switch (resolveAddressTypes[0]) {
401+
switch (parent.preferredAddressType()) {
414402
caseIPv4:
415403
for (inti =0;i <size;i ++) {
416404
if (resolvedEntries.get(i).address()instanceofInet4Address) {
@@ -425,6 +413,8 @@ private boolean gotPreferredAddress() {
425413
}
426414
}
427415
break;
416+
default:
417+
thrownewError();
428418
}
429419

430420
returnfalse;
@@ -520,8 +510,12 @@ private void followCname(InetSocketAddress nameServerAddr, String name, String c
520510
}
521511

522512
finalInetSocketAddressnextAddr =nameServerAddrs.next();
523-
query(nextAddr,newDefaultDnsQuestion(cname,DnsRecordType.A),promise);
524-
query(nextAddr,newDefaultDnsQuestion(cname,DnsRecordType.AAAA),promise);
513+
if (parent.isCnameFollowARecords()) {
514+
query(nextAddr,newDefaultDnsQuestion(cname,DnsRecordType.A),promise);
515+
}
516+
if (parent.isCnameFollowAAAARecords()) {
517+
query(nextAddr,newDefaultDnsQuestion(cname,DnsRecordType.AAAA),promise);
518+
}
525519
}
526520

527521
privatevoidaddTrace(InetSocketAddressnameServerAddr,Stringmsg) {

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp