diff --git a/pkg/nmlite/hostname.go b/pkg/nmlite/hostname.go index 146aad0b6..88f35330c 100644 --- a/pkg/nmlite/hostname.go +++ b/pkg/nmlite/hostname.go @@ -67,7 +67,7 @@ func (hm *ResolvConfManager) getHostname() string { } func (hm *ResolvConfManager) getDomain() string { - if hm.domain != "" { + if hm.domain != "" && hm.domain != "dhcp" { return hm.domain } diff --git a/pkg/nmlite/interface.go b/pkg/nmlite/interface.go index 58bd73537..a9111a645 100644 --- a/pkg/nmlite/interface.go +++ b/pkg/nmlite/interface.go @@ -787,6 +787,7 @@ func (im *InterfaceManager) updateStateFromDHCPLease(lease *types.DHCPLease) { NameServers: lease.DNS, SearchList: lease.SearchList, Source: "dhcp", + Domain: lease.Domain, }); err != nil { im.logger.Warn().Err(err).Msg("failed to update resolv.conf") } diff --git a/pkg/nmlite/resolvconf.go b/pkg/nmlite/resolvconf.go index 1bacee7a9..b94f5c3db 100644 --- a/pkg/nmlite/resolvconf.go +++ b/pkg/nmlite/resolvconf.go @@ -192,6 +192,11 @@ func (rcm *ResolvConfManager) generateResolvConf(conf *types.ResolvConf) ([]byte mergeConfig(&nameservers, &searchList, &conf.ConfigIPv4) mergeConfig(&nameservers, &searchList, &conf.ConfigIPv6) + rcm.logger.Info(). + Interface("nameservers", nameservers). + Interface("searchList", searchList). + Msg("merged config") + flattenedSearchList := []string{} for search := range searchList { flattenedSearchList = append(flattenedSearchList, search) @@ -199,6 +204,7 @@ func (rcm *ResolvConfManager) generateResolvConf(conf *types.ResolvConf) ([]byte var buf bytes.Buffer if err := tmpl.Execute(&buf, map[string]any{ + "domain": rcm.getDomain(), "nameservers": nameservers, "searchList": flattenedSearchList, }); err != nil { diff --git a/ui/src/routes/devices.$id.settings.network.tsx b/ui/src/routes/devices.$id.settings.network.tsx index 8fdece8b5..e34011ac3 100644 --- a/ui/src/routes/devices.$id.settings.network.tsx +++ b/ui/src/routes/devices.$id.settings.network.tsx @@ -77,6 +77,8 @@ export function LifeTimeLabel({ lifetime }: Readonly<{ lifetime: string }>) { ); } +const NonCustomDomainOptions = ["dhcp", "local"]; + export default function SettingsNetworkRoute() { const { send } = useJsonRpc(); @@ -128,13 +130,18 @@ export default function SettingsNetworkRoute() { }, }; + if (!NonCustomDomainOptions.includes(settingsWithDefaults.domain)) { + setCustomDomain(settingsWithDefaults.domain); + settingsWithDefaults.domain = "custom"; + } + initialSettingsRef.current = settingsWithDefaults; return { settings: settingsWithDefaults, state }; } catch (err) { notifications.error(m.network_settings_load_error({ error: err instanceof Error ? err.message : m.unknown_error() })); throw err; } - }, [setNetworkState]); + }, [setNetworkState, setCustomDomain]); const formMethods = useForm({ mode: "onBlur", @@ -406,6 +413,7 @@ export default function SettingsNetworkRoute() { type="text" label={m.network_custom_domain()} placeholder="home.example.com" + value={customDomain} onChange={e => { setCustomDomain(e.target.value); }}