# Syntactic sugar for "sudo" command in UNIX / Linux
if platform.system() == "OpenBSD":
SUDO = ["/usr/bin/doas"]
+elif platform.system() == "Windows":
+ SUDO = ["Start-Process", "powershell", "-Verb", "runAs"]
else:
SUDO = ["/usr/bin/env", "sudo"]
""" # noqa: W605
filename = os.path.abspath(final_file.name)
-
- if sys.platform == "linux":
+ if platform.system() == "Windows":
+ target_file = Path(os.getenv("SystemRoot")) / "system32" / "drivers" / "etc" / "hosts"
+ else:
target_file = "/etc/hosts"
- if os.getenv("IN_CONTAINER"):
- # It's not allowed to remove/replace a mounted /etc/hosts, so we replace the content.
- # This requires running the container user as root, as is the default.
- print(f"Running in container, so we will replace the content of {target_file}.")
- try:
- with open(target_file, "w") as target_stream:
- with open(filename, "r") as source_stream:
- target_stream.write(source_stream.read())
- return True
- except Exception:
- print_failure(f"Replacing content of {target_file} failed.")
- return False
- else:
- print(
- f"Replacing {target_file} requires root privileges. You might need to enter your password."
- )
- try:
- subprocess.run(SUDO + ["cp", filename, target_file], check=True)
- return True
- except subprocess.CalledProcessError:
- print_failure(f"Replacing {target_file} failed.")
- return False
- elif sys.platform == "win32":
- target_file = Path(os.getenv("SystemRoot")) / "system32" / "drivers" / "etc" / "hosts"
+ if os.getenv("IN_CONTAINER"):
+ # It's not allowed to remove/replace a mounted /etc/hosts, so we replace the content.
+ # This requires running the container user as root, as is the default.
+ print(f"Running in container, so we will replace the content of {target_file}.")
try:
with open(target_file, "w") as target_stream:
with open(filename, "r") as source_stream:
target_stream.write(source_stream.read())
return True
except Exception:
- print_failure(f"Replacing content of {target_file} failed.")
- return False
+ print_failure(f"Replacing content of {target_file} failed.")
+ return False
+ elif platform.system() == "Linux" or platform.system() == "Windows":
+
+
+ print(
+ f"Replacing {target_file} requires root privileges. You might need to enter your password."
+ )
+ try:
+ subprocess.run(SUDO + ["cp", filename, target_file], check=True)
+ return True
+ except subprocess.CalledProcessError:
+ print_failure(f"Replacing {target_file} failed.")
+ return False
def flush_dns_cache():