fix windows sudo and replace
authorRuben ten Hove <redacted>
Tue, 5 Jul 2022 16:54:31 +0000 (12:54 -0400)
committerRuben ten Hove <redacted>
Tue, 5 Jul 2022 16:54:31 +0000 (12:54 -0400)
updateHostsFile.py

index 8d60d9d909bf5e8ffd12ad5326835034ae1664c1..dc1b0cf5f512c9e4edca8765dd11d66ae7de0000 100755 (executable)
@@ -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():
git clone https://git.99rst.org/PROJECT