mirror of
				https://github.com/tailscale/tailscale.git
				synced 2025-10-31 00:01:40 +01:00 
			
		
		
		
	Tailscale attempts to determine if resolvconf or openresolv is in use by running `resolvconf --version`, under the assumption this command will error when run with Debian's resolvconf. This assumption is no longer true and leads to the wrong commands being run on newer versions of Debian with resolvconf >= 1.90. We can now check if the returned version string starts with "Debian resolvconf" if the command is successful. Fixes #9218 Signed-off-by: Galen Guyer <galen@galenguyer.com>
		
			
				
	
	
		
			31 lines
		
	
	
		
			743 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			31 lines
		
	
	
		
			743 B
		
	
	
	
		
			Go
		
	
	
	
	
	
| // Copyright (c) Tailscale Inc & AUTHORS
 | |
| // SPDX-License-Identifier: BSD-3-Clause
 | |
| 
 | |
| //go:build linux || freebsd || openbsd
 | |
| 
 | |
| package dns
 | |
| 
 | |
| import (
 | |
| 	"bytes"
 | |
| 	"os/exec"
 | |
| )
 | |
| 
 | |
| func resolvconfStyle() string {
 | |
| 	if _, err := exec.LookPath("resolvconf"); err != nil {
 | |
| 		return ""
 | |
| 	}
 | |
| 	output, err := exec.Command("resolvconf", "--version").CombinedOutput()
 | |
| 	if err != nil {
 | |
| 		// Debian resolvconf doesn't understand --version, and
 | |
| 		// exits with a specific error code.
 | |
| 		if exitErr, ok := err.(*exec.ExitError); ok && exitErr.ExitCode() == 99 {
 | |
| 			return "debian"
 | |
| 		}
 | |
| 	}
 | |
| 	if bytes.HasPrefix(output, []byte("Debian resolvconf")) {
 | |
| 		return "debian"
 | |
| 	}
 | |
| 	// Treat everything else as openresolv, by far the more popular implementation.
 | |
| 	return "openresolv"
 | |
| }
 |