From: Ruben ten Hove Date: Tue, 5 Jul 2022 16:54:31 +0000 (-0400) Subject: fix windows sudo and replace X-Git-Url: http://git.99rst.org/?a=commitdiff_plain;h=0a99194b2844bbc026ab62da69798fdc34815a79;p=stevenblack-hosts.git fix windows sudo and replace --- diff --git a/updateHostsFile.py b/updateHostsFile.py index 8d60d9d90..dc1b0cf5f 100755 --- a/updateHostsFile.py +++ b/updateHostsFile.py @@ -42,6 +42,8 @@ except ImportError: # 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"] @@ -1279,42 +1281,35 @@ def move_hosts_file_into_place(final_file): """ # 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():