tailcfg, control/controlclient: allow empty MapResponse.Domain (mapver17)

Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
This commit is contained in:
Brad Fitzpatrick 2021-04-18 20:48:24 -07:00 committed by Brad Fitzpatrick
parent 5092cffd1f
commit 3739cf22b0
3 changed files with 29 additions and 3 deletions

View File

@ -38,6 +38,7 @@ type mapSession struct {
lastParsedPacketFilter []filter.Match lastParsedPacketFilter []filter.Match
collectServices bool collectServices bool
previousPeers []*tailcfg.Node // for delta-purposes previousPeers []*tailcfg.Node // for delta-purposes
lastDomain string
// netMapBuilding is non-nil during a netmapForResponse call, // netMapBuilding is non-nil during a netmapForResponse call,
// containing the value to be returned, once fully populated. // containing the value to be returned, once fully populated.
@ -96,6 +97,9 @@ func (ms *mapSession) netmapForResponse(resp *tailcfg.MapResponse) *netmap.Netwo
if v, ok := resp.CollectServices.Get(); ok { if v, ok := resp.CollectServices.Get(); ok {
ms.collectServices = v ms.collectServices = v
} }
if resp.Domain != "" {
ms.lastDomain = resp.Domain
}
nm := &netmap.NetworkMap{ nm := &netmap.NetworkMap{
SelfNode: resp.Node, SelfNode: resp.Node,
@ -108,7 +112,7 @@ func (ms *mapSession) netmapForResponse(resp *tailcfg.MapResponse) *netmap.Netwo
Peers: resp.Peers, Peers: resp.Peers,
User: resp.Node.User, User: resp.Node.User,
UserProfiles: make(map[tailcfg.UserID]tailcfg.UserProfile), UserProfiles: make(map[tailcfg.UserID]tailcfg.UserProfile),
Domain: resp.Domain, Domain: ms.lastDomain,
DNS: *ms.lastDNSConfig, DNS: *ms.lastDNSConfig,
Hostinfo: resp.Node.Hostinfo, Hostinfo: resp.Node.Hostinfo,
PacketFilter: ms.lastParsedPacketFilter, PacketFilter: ms.lastParsedPacketFilter,

View File

@ -256,4 +256,24 @@ func TestNetmapForResponse(t *testing.T) {
}) })
wantCollect(true) wantCollect(true)
}) })
t.Run("implicit_domain", func(t *testing.T) {
ms := newTestMapSession(t)
var nm *netmap.NetworkMap
want := func(v string) {
t.Helper()
if nm.Domain != v {
t.Errorf("netmap.Domain = %q; want %q", nm.Domain, v)
}
}
nm = ms.netmapForResponse(&tailcfg.MapResponse{
Node: new(tailcfg.Node),
Domain: "foo.com",
})
want("foo.com")
nm = ms.netmapForResponse(&tailcfg.MapResponse{
Node: new(tailcfg.Node),
})
want("foo.com")
})
} }

View File

@ -39,7 +39,8 @@
// 14: 2021-04-07: client understands DNSConfig.Routes and DNSConfig.Resolvers // 14: 2021-04-07: client understands DNSConfig.Routes and DNSConfig.Resolvers
// 15: 2021-04-12: client treats nil MapResponse.DNSConfig as meaning unchanged // 15: 2021-04-12: client treats nil MapResponse.DNSConfig as meaning unchanged
// 16: 2021-04-15: client understands Node.Online, MapResponse.OnlineChange // 16: 2021-04-15: client understands Node.Online, MapResponse.OnlineChange
const CurrentMapRequestVersion = 16 // 17: 2021-04-18: MapResponse.Domain empty means unchanged
const CurrentMapRequestVersion = 17
type StableID string type StableID string
@ -939,7 +940,8 @@ type MapResponse struct {
// "foo@gmail.com" (for siloed users on shared email // "foo@gmail.com" (for siloed users on shared email
// providers). Its exact form should not be depended on; new // providers). Its exact form should not be depended on; new
// forms are coming later. // forms are coming later.
Domain string // If empty, the value is unchanged.
Domain string `json:",omitempty"`
// CollectServices reports whether this node's Tailnet has // CollectServices reports whether this node's Tailnet has
// requested that info about services be included in HostInfo. // requested that info about services be included in HostInfo.