|
|
@ -201,7 +201,44 @@ func (m directManager) backupConfig() error {
|
|
|
|
return os.Rename(resolvConf, backupConf)
|
|
|
|
return os.Rename(resolvConf, backupConf)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func (m directManager) restoreBackup() error {
|
|
|
|
|
|
|
|
if _, err := os.Stat(backupConf); err != nil {
|
|
|
|
|
|
|
|
if os.IsNotExist(err) {
|
|
|
|
|
|
|
|
// No backup, nothing we can do.
|
|
|
|
|
|
|
|
return nil
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return err
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
owned, err := m.ownedByTailscale()
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
|
|
return err
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if _, err := os.Stat(resolvConf); err != nil && !os.IsNotExist(err) {
|
|
|
|
|
|
|
|
return err
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
resolvConfExists := !os.IsNotExist(err)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if resolvConfExists && !owned {
|
|
|
|
|
|
|
|
// There's already a non-tailscale config in place, get rid of
|
|
|
|
|
|
|
|
// our backup.
|
|
|
|
|
|
|
|
os.Remove(backupConf)
|
|
|
|
|
|
|
|
return nil
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// We own resolv.conf, and a backup exists.
|
|
|
|
|
|
|
|
if err := os.Rename(backupConf, resolvConf); err != nil {
|
|
|
|
|
|
|
|
return err
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return nil
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func (m directManager) SetDNS(config OSConfig) error {
|
|
|
|
func (m directManager) SetDNS(config OSConfig) error {
|
|
|
|
|
|
|
|
if config.Equal(OSConfig{}) {
|
|
|
|
|
|
|
|
if err := m.restoreBackup(); err != nil {
|
|
|
|
|
|
|
|
return err
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
} else {
|
|
|
|
if err := m.backupConfig(); err != nil {
|
|
|
|
if err := m.backupConfig(); err != nil {
|
|
|
|
return err
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -211,6 +248,7 @@ func (m directManager) SetDNS(config OSConfig) error {
|
|
|
|
if err := atomicfile.WriteFile(resolvConf, buf.Bytes(), 0644); err != nil {
|
|
|
|
if err := atomicfile.WriteFile(resolvConf, buf.Bytes(), 0644); err != nil {
|
|
|
|
return err
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// We might have taken over a configuration managed by resolved,
|
|
|
|
// We might have taken over a configuration managed by resolved,
|
|
|
|
// in which case it will notice this on restart and gracefully
|
|
|
|
// in which case it will notice this on restart and gracefully
|
|
|
|