-
Notifications
You must be signed in to change notification settings - Fork 19
Open
Description
In handleWgPeerUpdate
Lines 117 to 185 in 703fe4f
| func (o *Olm) handleWgPeerUpdate(msg websocket.WSMessage) { | |
| logger.Debug("Received update-peer message: %v", msg.Data) | |
| // Check if tunnel is still running | |
| if !o.tunnelRunning { | |
| logger.Debug("Tunnel stopped, ignoring update-peer message") | |
| return | |
| } | |
| if o.peerManager == nil { | |
| logger.Debug("Ignoring update-peer message: peerManager is nil (shutdown in progress)") | |
| return | |
| } | |
| jsonData, err := json.Marshal(msg.Data) | |
| if err != nil { | |
| logger.Error("Error marshaling data: %v", err) | |
| return | |
| } | |
| var updateData peers.SiteConfig | |
| if err := json.Unmarshal(jsonData, &updateData); err != nil { | |
| logger.Error("Error unmarshaling update data: %v", err) | |
| return | |
| } | |
| // Get existing peer from PeerManager | |
| existingPeer, exists := o.peerManager.GetPeer(updateData.SiteId) | |
| if !exists { | |
| logger.Warn("Peer with site ID %d not found", updateData.SiteId) | |
| return | |
| } | |
| // Create updated site config by merging with existing data | |
| siteConfig := existingPeer | |
| if updateData.Endpoint != "" { | |
| siteConfig.Endpoint = updateData.Endpoint | |
| } | |
| if updateData.RelayEndpoint != "" { | |
| siteConfig.RelayEndpoint = updateData.RelayEndpoint | |
| } | |
| if updateData.PublicKey != "" { | |
| siteConfig.PublicKey = updateData.PublicKey | |
| } | |
| if updateData.ServerIP != "" { | |
| siteConfig.ServerIP = updateData.ServerIP | |
| } | |
| if updateData.ServerPort != 0 { | |
| siteConfig.ServerPort = updateData.ServerPort | |
| } | |
| if updateData.RemoteSubnets != nil { | |
| siteConfig.RemoteSubnets = updateData.RemoteSubnets | |
| } | |
| if err := o.peerManager.UpdatePeer(siteConfig); err != nil { | |
| logger.Error("Failed to update peer: %v", err) | |
| return | |
| } | |
| // If the endpoint changed, trigger holepunch to refresh NAT mappings | |
| if updateData.Endpoint != "" && updateData.Endpoint != existingPeer.Endpoint { | |
| logger.Info("Endpoint changed for site %d, triggering holepunch to refresh NAT mappings", updateData.SiteId) | |
| _ = o.holePunchManager.TriggerHolePunch() | |
| o.holePunchManager.ResetServerHolepunchInterval() | |
| } | |
| logger.Info("Successfully updated peer for site %d", updateData.SiteId) | |
| } |
we merge several mutable fields from peers.SiteConfig, but we never copy Aliases.
As a result, alias changes delivered via the update-peer websocket path never reach PeerManager.UpdatePeer(), even though UpdatePeer() already removes and re-adds alias DNS records when siteConfig.Aliases changes.
Expected:
- alias additions/removals/renames in update-peer should update the local DNS store
Actual:
- alias updates are ignored in this path because siteConfig.Aliases is never merged
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels