From f4c76399862f86f3cd88d23bced9192652e3d51f Mon Sep 17 00:00:00 2001 From: Noah van der Aa Date: Thu, 25 Apr 2024 19:13:12 +0200 Subject: [PATCH] Un-jankify root user detection --- .../0648-Add-root-admin-user-detection.patch | 25 +++---------------- .../server/0781-Detect-headless-JREs.patch | 4 +-- 2 files changed, 6 insertions(+), 23 deletions(-) diff --git a/patches/server/0648-Add-root-admin-user-detection.patch b/patches/server/0648-Add-root-admin-user-detection.patch index 1d520afe11..5b81dcd09a 100644 --- a/patches/server/0648-Add-root-admin-user-detection.patch +++ b/patches/server/0648-Add-root-admin-user-detection.patch @@ -12,19 +12,16 @@ Co-authored-by: Noah van der Aa diff --git a/src/main/java/io/papermc/paper/util/ServerEnvironment.java b/src/main/java/io/papermc/paper/util/ServerEnvironment.java new file mode 100644 -index 0000000000000000000000000000000000000000..6bd0afddbcc461149dfe9a5c7a86fff6ea13a5f1 +index 0000000000000000000000000000000000000000..68098dfe716e93aafcca4d8d5b5a81d8648b3654 --- /dev/null +++ b/src/main/java/io/papermc/paper/util/ServerEnvironment.java -@@ -0,0 +1,40 @@ +@@ -0,0 +1,23 @@ +package io.papermc.paper.util; + +import com.sun.security.auth.module.NTSystem; +import com.sun.security.auth.module.UnixSystem; -+import org.apache.commons.lang.SystemUtils; -+ -+import java.io.IOException; -+import java.io.InputStream; +import java.util.Set; ++import org.apache.commons.lang.SystemUtils; + +public class ServerEnvironment { + private static final boolean RUNNING_AS_ROOT_OR_ADMIN; @@ -34,21 +31,7 @@ index 0000000000000000000000000000000000000000..6bd0afddbcc461149dfe9a5c7a86fff6 + if (SystemUtils.IS_OS_WINDOWS) { + RUNNING_AS_ROOT_OR_ADMIN = Set.of(new NTSystem().getGroupIDs()).contains(WINDOWS_HIGH_INTEGRITY_LEVEL); + } else { -+ boolean isRunningAsRoot = false; -+ if (new UnixSystem().getUid() == 0) { -+ // Due to an OpenJDK bug (https://bugs.openjdk.java.net/browse/JDK-8274721), UnixSystem#getUid incorrectly -+ // returns 0 when the user doesn't have a username. Because of this, we'll have to double-check if the user ID is -+ // actually 0 by running the id -u command. -+ try { -+ Process process = new ProcessBuilder("id", "-u").start(); -+ process.waitFor(); -+ InputStream inputStream = process.getInputStream(); -+ isRunningAsRoot = new String(inputStream.readAllBytes()).trim().equals("0"); -+ } catch (InterruptedException | IOException ignored) { -+ isRunningAsRoot = false; -+ } -+ } -+ RUNNING_AS_ROOT_OR_ADMIN = isRunningAsRoot; ++ RUNNING_AS_ROOT_OR_ADMIN = new UnixSystem().getUid() == 0; + } + } + diff --git a/patches/server/0781-Detect-headless-JREs.patch b/patches/server/0781-Detect-headless-JREs.patch index 4f9486860f..5ba28913a8 100644 --- a/patches/server/0781-Detect-headless-JREs.patch +++ b/patches/server/0781-Detect-headless-JREs.patch @@ -8,10 +8,10 @@ This patch detects the missing dependency and stops the server with a clear erro containing a link to instructions on how to install a non-headless JRE. diff --git a/src/main/java/io/papermc/paper/util/ServerEnvironment.java b/src/main/java/io/papermc/paper/util/ServerEnvironment.java -index 6bd0afddbcc461149dfe9a5c7a86fff6ea13a5f1..148d233f4f5278ff39eacdaa0f4f0e7d73be936a 100644 +index 68098dfe716e93aafcca4d8d5b5a81d8648b3654..2b7070e0cefa7cf0777df159693750fea14e800b 100644 --- a/src/main/java/io/papermc/paper/util/ServerEnvironment.java +++ b/src/main/java/io/papermc/paper/util/ServerEnvironment.java -@@ -37,4 +37,14 @@ public class ServerEnvironment { +@@ -20,4 +20,14 @@ public class ServerEnvironment { public static boolean userIsRootOrAdmin() { return RUNNING_AS_ROOT_OR_ADMIN; }