mirror of
https://github.com/tailscale/tailscale.git
synced 2024-12-01 22:15:51 +00:00
net/dns: add documentation to openresolv's config fetch.
Signed-off-by: David Anderson <danderson@tailscale.com>
This commit is contained in:
parent
61b361bac0
commit
55b39fa945
@ -49,11 +49,15 @@ func (m openresolvManager) SupportsSplitDNS() bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (m openresolvManager) GetBaseConfig() (OSConfig, error) {
|
func (m openresolvManager) GetBaseConfig() (OSConfig, error) {
|
||||||
|
// List the names of all config snippets openresolv is aware
|
||||||
|
// of. Snippets get listed in priority order (most to least),
|
||||||
|
// which we'll exploit later.
|
||||||
bs, err := exec.Command("resolvconf", "-i").CombinedOutput()
|
bs, err := exec.Command("resolvconf", "-i").CombinedOutput()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return OSConfig{}, err
|
return OSConfig{}, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Remove the "tailscale" snippet from the list.
|
||||||
args := []string{"-l"}
|
args := []string{"-l"}
|
||||||
for _, f := range strings.Split(strings.TrimSpace(string(bs)), " ") {
|
for _, f := range strings.Split(strings.TrimSpace(string(bs)), " ") {
|
||||||
if f == "tailscale" {
|
if f == "tailscale" {
|
||||||
@ -62,6 +66,17 @@ func (m openresolvManager) GetBaseConfig() (OSConfig, error) {
|
|||||||
args = append(args, f)
|
args = append(args, f)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// List all resolvconf snippets except our own, and parse that as
|
||||||
|
// a resolv.conf. This effectively generates a blended config of
|
||||||
|
// "everyone except tailscale", which is what would be in use if
|
||||||
|
// tailscale hadn't set exclusive mode.
|
||||||
|
//
|
||||||
|
// Note that this is not _entirely_ true. To be perfectly correct,
|
||||||
|
// we should be looking for other interfaces marked exclusive that
|
||||||
|
// predated tailscale, and stick to only those. However, in
|
||||||
|
// practice, openresolv uses are generally quite limited, and boil
|
||||||
|
// down to 1-2 DHCP leases, for which the correct outcome is a
|
||||||
|
// blended config like the one we produce here.
|
||||||
var buf bytes.Buffer
|
var buf bytes.Buffer
|
||||||
cmd := exec.Command("resolvconf", args...)
|
cmd := exec.Command("resolvconf", args...)
|
||||||
cmd.Stdout = &buf
|
cmd.Stdout = &buf
|
||||||
|
Loading…
Reference in New Issue
Block a user