diff --git a/namesys/dns.go b/namesys/dns.go index d74213e93..96147534a 100644 --- a/namesys/dns.go +++ b/namesys/dns.go @@ -61,7 +61,7 @@ func (r *DNSResolver) resolveOnce(ctx context.Context, name string) (path.Path, p, err := parseEntry(t) if err == nil { if len(segments) > 1 { - return path.FromSegments(p.String() + "/", segments[1]) + return path.FromSegments("", strings.TrimRight(p.String(), "/"), segments[1]) } return p, nil } diff --git a/namesys/dns_test.go b/namesys/dns_test.go index a1e4ce442..27b3883db 100644 --- a/namesys/dns_test.go +++ b/namesys/dns_test.go @@ -26,6 +26,7 @@ func TestDnsEntryParsing(t *testing.T) { "dnslink=/ipfs/QmY3hE8xgFCjGcz6PHgnvJz5HZi1BaKRfPkn1ghZUcYMjD/foo", "dnslink=/ipns/QmY3hE8xgFCjGcz6PHgnvJz5HZi1BaKRfPkn1ghZUcYMjD/bar", "dnslink=/ipfs/QmY3hE8xgFCjGcz6PHgnvJz5HZi1BaKRfPkn1ghZUcYMjD/foo/bar/baz", + "dnslink=/ipfs/QmY3hE8xgFCjGcz6PHgnvJz5HZi1BaKRfPkn1ghZUcYMjD/foo/bar/baz/", "dnslink=/ipfs/QmY3hE8xgFCjGcz6PHgnvJz5HZi1BaKRfPkn1ghZUcYMjD", } @@ -93,6 +94,12 @@ func newMockDNS() *mockDNS { "withrecsegment.example.com": []string{ "dnslink=/ipns/withsegment.example.com/subsub", }, + "withtrailing.example.com": []string{ + "dnslink=/ipfs/QmY3hE8xgFCjGcz6PHgnvJz5HZi1BaKRfPkn1ghZUcYMjD/sub/", + }, + "withtrailingrec.example.com": []string{ + "dnslink=/ipns/withtrailing.example.com/segment/", + }, }, } } @@ -118,4 +125,8 @@ func TestDNSResolution(t *testing.T) { testResolution(t, r, "bad.example.com", DefaultDepthLimit, "", ErrResolveFailed) testResolution(t, r, "withsegment.example.com", DefaultDepthLimit, "/ipfs/QmY3hE8xgFCjGcz6PHgnvJz5HZi1BaKRfPkn1ghZUcYMjD/sub/segment", nil) testResolution(t, r, "withrecsegment.example.com", DefaultDepthLimit, "/ipfs/QmY3hE8xgFCjGcz6PHgnvJz5HZi1BaKRfPkn1ghZUcYMjD/sub/segment/subsub", nil) + testResolution(t, r, "withsegment.example.com/test1", DefaultDepthLimit, "/ipfs/QmY3hE8xgFCjGcz6PHgnvJz5HZi1BaKRfPkn1ghZUcYMjD/sub/segment/test1", nil) + testResolution(t, r, "withrecsegment.example.com/test2", DefaultDepthLimit, "/ipfs/QmY3hE8xgFCjGcz6PHgnvJz5HZi1BaKRfPkn1ghZUcYMjD/sub/segment/subsub/test2", nil) + testResolution(t, r, "withrecsegment.example.com/test3/", DefaultDepthLimit, "/ipfs/QmY3hE8xgFCjGcz6PHgnvJz5HZi1BaKRfPkn1ghZUcYMjD/sub/segment/subsub/test3/", nil) + testResolution(t, r, "withtrailingrec.example.com", DefaultDepthLimit, "/ipfs/QmY3hE8xgFCjGcz6PHgnvJz5HZi1BaKRfPkn1ghZUcYMjD/sub/segment/", nil) } diff --git a/namesys/namesys.go b/namesys/namesys.go index b375a5c04..4c9868b57 100644 --- a/namesys/namesys.go +++ b/namesys/namesys.go @@ -75,7 +75,7 @@ func (ns *mpns) resolveOnce(ctx context.Context, name string) (path.Path, error) p, err := resolver.resolveOnce(ctx, segments[2]) if err == nil { if len(segments) > 3 { - return path.FromSegments(p.String() + "/", segments[3]) + return path.FromSegments("", strings.TrimRight(p.String(), "/"), segments[3]) } else { return p, err }