Skip to content

Commit fca7b8f

Browse files
Revert "net: verify results from Lookup* are valid domain names"
This reverts commit c89f122. Reason for revert: reverting so we can apply follow-up fixes and do a single cherry pick. Change-Id: I16c6283a0bcab056216f330fb98fa3b5f2b0780c Reviewed-on: https://go-review.googlesource.com/c/go/+/323129 Reviewed-by: Katie Hockman <[email protected]> Reviewed-by: Filippo Valsorda <[email protected]> Trust: Katie Hockman <[email protected]> Run-TryBot: Katie Hockman <[email protected]> TryBot-Result: Go Bot <[email protected]>
1 parent 950fa11 commit fca7b8f

File tree

2 files changed

+8
-211
lines changed

2 files changed

+8
-211
lines changed

src/net/dnsclient_unix_test.go

Lines changed: 0 additions & 121 deletions
Original file line numberDiff line numberDiff line change
@@ -1799,124 +1799,3 @@ func TestPTRandNonPTR(t *testing.T) {
17991799
t.Errorf("names = %q; want %q", names, want)
18001800
}
18011801
}
1802-
1803-
func TestCVE202133195(t *testing.T) {
1804-
fake := fakeDNSServer{
1805-
rh: func(n, _ string, q dnsmessage.Message, _ time.Time) (dnsmessage.Message, error) {
1806-
r := dnsmessage.Message{
1807-
Header: dnsmessage.Header{
1808-
ID: q.Header.ID,
1809-
Response: true,
1810-
RCode: dnsmessage.RCodeSuccess,
1811-
RecursionAvailable: true,
1812-
},
1813-
Questions: q.Questions,
1814-
}
1815-
switch q.Questions[0].Type {
1816-
case dnsmessage.TypeCNAME:
1817-
r.Answers = []dnsmessage.Resource{}
1818-
case dnsmessage.TypeA: // CNAME lookup uses a A/AAAA as a proxy
1819-
r.Answers = append(r.Answers,
1820-
dnsmessage.Resource{
1821-
Header: dnsmessage.ResourceHeader{
1822-
Name: dnsmessage.MustNewName("<html>.golang.org."),
1823-
Type: dnsmessage.TypeA,
1824-
Class: dnsmessage.ClassINET,
1825-
Length: 4,
1826-
},
1827-
Body: &dnsmessage.AResource{
1828-
A: TestAddr,
1829-
},
1830-
},
1831-
)
1832-
case dnsmessage.TypeSRV:
1833-
n := q.Questions[0].Name
1834-
if n.String() == "_hdr._tcp.golang.org." {
1835-
n = dnsmessage.MustNewName("<html>.golang.org.")
1836-
}
1837-
r.Answers = append(r.Answers,
1838-
dnsmessage.Resource{
1839-
Header: dnsmessage.ResourceHeader{
1840-
Name: n,
1841-
Type: dnsmessage.TypeSRV,
1842-
Class: dnsmessage.ClassINET,
1843-
Length: 4,
1844-
},
1845-
Body: &dnsmessage.SRVResource{
1846-
Target: dnsmessage.MustNewName("<html>.golang.org."),
1847-
},
1848-
},
1849-
)
1850-
case dnsmessage.TypeMX:
1851-
r.Answers = append(r.Answers,
1852-
dnsmessage.Resource{
1853-
Header: dnsmessage.ResourceHeader{
1854-
Name: dnsmessage.MustNewName("<html>.golang.org."),
1855-
Type: dnsmessage.TypeMX,
1856-
Class: dnsmessage.ClassINET,
1857-
Length: 4,
1858-
},
1859-
Body: &dnsmessage.MXResource{
1860-
MX: dnsmessage.MustNewName("<html>.golang.org."),
1861-
},
1862-
},
1863-
)
1864-
case dnsmessage.TypeNS:
1865-
r.Answers = append(r.Answers,
1866-
dnsmessage.Resource{
1867-
Header: dnsmessage.ResourceHeader{
1868-
Name: dnsmessage.MustNewName("<html>.golang.org."),
1869-
Type: dnsmessage.TypeNS,
1870-
Class: dnsmessage.ClassINET,
1871-
Length: 4,
1872-
},
1873-
Body: &dnsmessage.NSResource{
1874-
NS: dnsmessage.MustNewName("<html>.golang.org."),
1875-
},
1876-
},
1877-
)
1878-
case dnsmessage.TypePTR:
1879-
r.Answers = append(r.Answers,
1880-
dnsmessage.Resource{
1881-
Header: dnsmessage.ResourceHeader{
1882-
Name: dnsmessage.MustNewName("<html>.golang.org."),
1883-
Type: dnsmessage.TypePTR,
1884-
Class: dnsmessage.ClassINET,
1885-
Length: 4,
1886-
},
1887-
Body: &dnsmessage.PTRResource{
1888-
PTR: dnsmessage.MustNewName("<html>.golang.org."),
1889-
},
1890-
},
1891-
)
1892-
}
1893-
return r, nil
1894-
},
1895-
}
1896-
r := Resolver{PreferGo: true, Dial: fake.DialContext}
1897-
1898-
_, err := r.LookupCNAME(context.Background(), "golang.org")
1899-
if expected := "lookup golang.org: CNAME target is invalid"; err.Error() != expected {
1900-
t.Errorf("LookupCNAME returned unexpected error, got %q, want %q", err.Error(), expected)
1901-
}
1902-
_, _, err = r.LookupSRV(context.Background(), "target", "tcp", "golang.org")
1903-
if expected := "lookup golang.org: SRV target is invalid"; err.Error() != expected {
1904-
t.Errorf("LookupSRV returned unexpected error, got %q, want %q", err.Error(), expected)
1905-
}
1906-
_, _, err = r.LookupSRV(context.Background(), "hdr", "tcp", "golang.org")
1907-
if expected := "lookup golang.org: SRV header name is invalid"; err.Error() != expected {
1908-
t.Errorf("LookupSRV returned unexpected error, got %q, want %q", err.Error(), expected)
1909-
}
1910-
_, err = r.LookupMX(context.Background(), "golang.org")
1911-
if expected := "lookup golang.org: MX target is invalid"; err.Error() != expected {
1912-
t.Errorf("LookupMX returned unexpected error, got %q, want %q", err.Error(), expected)
1913-
}
1914-
_, err = r.LookupNS(context.Background(), "golang.org")
1915-
if expected := "lookup golang.org: NS target is invalid"; err.Error() != expected {
1916-
t.Errorf("LookupNS returned unexpected error, got %q, want %q", err.Error(), expected)
1917-
}
1918-
_, err = r.LookupAddr(context.Background(), "1.2.3.4")
1919-
if expected := "lookup 1.2.3.4: PTR target is invalid"; err.Error() != expected {
1920-
t.Errorf("LookupAddr returned unexpected error, got %q, want %q", err.Error(), expected)
1921-
}
1922-
}

src/net/lookup.go

Lines changed: 8 additions & 90 deletions
Original file line numberDiff line numberDiff line change
@@ -396,9 +396,6 @@ func (r *Resolver) LookupPort(ctx context.Context, network, service string) (por
396396
// contain DNS "CNAME" records, as long as host resolves to
397397
// address records.
398398
//
399-
// The returned canonical name is validated to be a properly
400-
// formatted presentation-format domain name.
401-
//
402399
// LookupCNAME uses context.Background internally; to specify the context, use
403400
// Resolver.LookupCNAME.
404401
func LookupCNAME(host string) (cname string, err error) {
@@ -415,18 +412,8 @@ func LookupCNAME(host string) (cname string, err error) {
415412
// LookupCNAME does not return an error if host does not
416413
// contain DNS "CNAME" records, as long as host resolves to
417414
// address records.
418-
//
419-
// The returned canonical name is validated to be a properly
420-
// formatted presentation-format domain name.
421-
func (r *Resolver) LookupCNAME(ctx context.Context, host string) (string, error) {
422-
cname, err := r.lookupCNAME(ctx, host)
423-
if err != nil {
424-
return "", err
425-
}
426-
if !isDomainName(cname) {
427-
return "", &DNSError{Err: "CNAME target is invalid", Name: host}
428-
}
429-
return cname, nil
415+
func (r *Resolver) LookupCNAME(ctx context.Context, host string) (cname string, err error) {
416+
return r.lookupCNAME(ctx, host)
430417
}
431418

432419
// LookupSRV tries to resolve an SRV query of the given service,
@@ -438,9 +425,6 @@ func (r *Resolver) LookupCNAME(ctx context.Context, host string) (string, error)
438425
// That is, it looks up _service._proto.name. To accommodate services
439426
// publishing SRV records under non-standard names, if both service
440427
// and proto are empty strings, LookupSRV looks up name directly.
441-
//
442-
// The returned service names are validated to be properly
443-
// formatted presentation-format domain names.
444428
func LookupSRV(service, proto, name string) (cname string, addrs []*SRV, err error) {
445429
return DefaultResolver.lookupSRV(context.Background(), service, proto, name)
446430
}
@@ -454,88 +438,34 @@ func LookupSRV(service, proto, name string) (cname string, addrs []*SRV, err err
454438
// That is, it looks up _service._proto.name. To accommodate services
455439
// publishing SRV records under non-standard names, if both service
456440
// and proto are empty strings, LookupSRV looks up name directly.
457-
//
458-
// The returned service names are validated to be properly
459-
// formatted presentation-format domain names.
460-
func (r *Resolver) LookupSRV(ctx context.Context, service, proto, name string) (string, []*SRV, error) {
461-
cname, addrs, err := r.lookupSRV(ctx, service, proto, name)
462-
if err != nil {
463-
return "", nil, err
464-
}
465-
if cname != "" && !isDomainName(cname) {
466-
return "", nil, &DNSError{Err: "SRV header name is invalid", Name: name}
467-
}
468-
for _, addr := range addrs {
469-
if addr == nil {
470-
continue
471-
}
472-
if !isDomainName(addr.Target) {
473-
return "", nil, &DNSError{Err: "SRV target is invalid", Name: name}
474-
}
475-
}
476-
return cname, addrs, nil
441+
func (r *Resolver) LookupSRV(ctx context.Context, service, proto, name string) (cname string, addrs []*SRV, err error) {
442+
return r.lookupSRV(ctx, service, proto, name)
477443
}
478444

479445
// LookupMX returns the DNS MX records for the given domain name sorted by preference.
480446
//
481-
// The returned mail server names are validated to be properly
482-
// formatted presentation-format domain names.
483-
//
484447
// LookupMX uses context.Background internally; to specify the context, use
485448
// Resolver.LookupMX.
486449
func LookupMX(name string) ([]*MX, error) {
487450
return DefaultResolver.lookupMX(context.Background(), name)
488451
}
489452

490453
// LookupMX returns the DNS MX records for the given domain name sorted by preference.
491-
//
492-
// The returned mail server names are validated to be properly
493-
// formatted presentation-format domain names.
494454
func (r *Resolver) LookupMX(ctx context.Context, name string) ([]*MX, error) {
495-
records, err := r.lookupMX(ctx, name)
496-
if err != nil {
497-
return nil, err
498-
}
499-
for _, mx := range records {
500-
if mx == nil {
501-
continue
502-
}
503-
if !isDomainName(mx.Host) {
504-
return nil, &DNSError{Err: "MX target is invalid", Name: name}
505-
}
506-
}
507-
return records, nil
455+
return r.lookupMX(ctx, name)
508456
}
509457

510458
// LookupNS returns the DNS NS records for the given domain name.
511459
//
512-
// The returned name server names are validated to be properly
513-
// formatted presentation-format domain names.
514-
//
515460
// LookupNS uses context.Background internally; to specify the context, use
516461
// Resolver.LookupNS.
517462
func LookupNS(name string) ([]*NS, error) {
518463
return DefaultResolver.lookupNS(context.Background(), name)
519464
}
520465

521466
// LookupNS returns the DNS NS records for the given domain name.
522-
//
523-
// The returned name server names are validated to be properly
524-
// formatted presentation-format domain names.
525467
func (r *Resolver) LookupNS(ctx context.Context, name string) ([]*NS, error) {
526-
records, err := r.lookupNS(ctx, name)
527-
if err != nil {
528-
return nil, err
529-
}
530-
for _, ns := range records {
531-
if ns == nil {
532-
continue
533-
}
534-
if !isDomainName(ns.Host) {
535-
return nil, &DNSError{Err: "NS target is invalid", Name: name}
536-
}
537-
}
538-
return records, nil
468+
return r.lookupNS(ctx, name)
539469
}
540470

541471
// LookupTXT returns the DNS TXT records for the given domain name.
@@ -565,18 +495,6 @@ func LookupAddr(addr string) (names []string, err error) {
565495

566496
// LookupAddr performs a reverse lookup for the given address, returning a list
567497
// of names mapping to that address.
568-
//
569-
// The returned names are validated to be properly
570-
// formatted presentation-format domain names.
571-
func (r *Resolver) LookupAddr(ctx context.Context, addr string) ([]string, error) {
572-
names, err := r.lookupAddr(ctx, addr)
573-
if err != nil {
574-
return nil, err
575-
}
576-
for _, name := range names {
577-
if !isDomainName(name) {
578-
return nil, &DNSError{Err: "PTR target is invalid", Name: addr}
579-
}
580-
}
581-
return names, nil
498+
func (r *Resolver) LookupAddr(ctx context.Context, addr string) (names []string, err error) {
499+
return r.lookupAddr(ctx, addr)
582500
}

0 commit comments

Comments
 (0)