From fd54eb21e9e535e4bcb6f7152be02a0ade7d5bcb Mon Sep 17 00:00:00 2001 From: Aikar Date: Wed, 21 Mar 2018 19:59:54 -0400 Subject: [PATCH] Configurable Unrestricted Signs - Resolves #1054 Bukkit restricts command execution of signs to test if the sender has permission to run the specified command. This breaks vanilla maps that use signs to intentionally run as elevated permission. Bukkit provides an unrestricted advancements setting, so this setting compliments that one and allows for unrestricted signs. We still filter sign update packets to strip out commands at edit phase, however there is no sanity in ever expecting creative mode to not be able to create signs with any command. Creative servers should absolutely never enable this. Non creative servers, enable at own risk!!! --- ...0279-Configurable-Unrestricted-Signs.patch | 83 +++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 Spigot-Server-Patches/0279-Configurable-Unrestricted-Signs.patch diff --git a/Spigot-Server-Patches/0279-Configurable-Unrestricted-Signs.patch b/Spigot-Server-Patches/0279-Configurable-Unrestricted-Signs.patch new file mode 100644 index 0000000000..858cc0dd68 --- /dev/null +++ b/Spigot-Server-Patches/0279-Configurable-Unrestricted-Signs.patch @@ -0,0 +1,83 @@ +From d5469b0d39edc94565e0f6558b4ffb2e1636187b Mon Sep 17 00:00:00 2001 +From: Aikar +Date: Wed, 21 Mar 2018 19:57:10 -0400 +Subject: [PATCH] Configurable Unrestricted Signs + +Bukkit restricts command execution of signs to test if the sender +has permission to run the specified command. This breaks vanilla +maps that use signs to intentionally run as elevated permission. + +Bukkit provides an unrestricted advancements setting, so this setting +compliments that one and allows for unrestricted signs. + +We still filter sign update packets to strip out commands at edit phase, +however there is no sanity in ever expecting creative mode to not be +able to create signs with any command. + +Creative servers should absolutely never enable this. +Non creative servers, enable at own risk!!! + +diff --git a/src/main/java/net/minecraft/server/TileEntitySign.java b/src/main/java/net/minecraft/server/TileEntitySign.java +index 3f2c5b2d5..67bd3bcbe 100644 +--- a/src/main/java/net/minecraft/server/TileEntitySign.java ++++ b/src/main/java/net/minecraft/server/TileEntitySign.java +@@ -38,7 +38,7 @@ public class TileEntitySign extends TileEntity { + public void load(NBTTagCompound nbttagcompound) { + this.isEditable = false; + super.load(nbttagcompound); +- ICommandListener icommandlistener = new ICommandListener() { ++ ICommandListener icommandlistener = new ISignCommandListener() { // Paper + public String getName() { + return "Sign"; + } +@@ -125,7 +125,7 @@ public class TileEntitySign extends TileEntity { + } + + public boolean b(final EntityHuman entityhuman) { +- ICommandListener icommandlistener = new ICommandListener() { ++ ICommandListener icommandlistener = new ISignCommandListener() { // Paper + public String getName() { + return entityhuman.getName(); + } +@@ -200,4 +200,5 @@ public class TileEntitySign extends TileEntity { + public CommandObjectiveExecutor f() { + return this.i; + } ++ public interface ISignCommandListener extends ICommandListener {} // Paper + } +diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java +index 090a4d2f2..74d684506 100644 +--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java ++++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java +@@ -175,6 +175,7 @@ public final class CraftServer implements Server { + private CraftIconCache icon; + private boolean overrideAllCommandBlockCommands = false; + private boolean unrestrictedAdvancements; ++ private boolean unrestrictedSignCommands; // Paper + private final List playerView; + public int reloadCount; + public static Exception excessiveVelEx; // Paper - Velocity warnings +@@ -253,6 +254,12 @@ public final class CraftServer implements Server { + saveCommandsConfig(); + overrideAllCommandBlockCommands = commandsConfiguration.getStringList("command-block-overrides").contains("*"); + unrestrictedAdvancements = commandsConfiguration.getBoolean("unrestricted-advancements"); ++ // Paper start ++ unrestrictedSignCommands = commandsConfiguration.getBoolean("unrestricted-signs"); ++ if (unrestrictedSignCommands) { ++ logger.warning("Warning: Commands are no longer restricted on signs. If you allow players to use Creative Mode, there may be risk of players bypassing permissions. Use this setting at your own risk!!!!"); ++ } ++ // Paper end + pluginManager.useTimings(configuration.getBoolean("settings.plugin-profiling")); + monsterSpawn = configuration.getInt("spawn-limits.monsters"); + animalSpawn = configuration.getInt("spawn-limits.animals"); +@@ -270,6 +277,7 @@ public final class CraftServer implements Server { + listener = ((CommandListenerWrapper) listener).base; + } + ++ if (unrestrictedSignCommands && listener instanceof TileEntitySign.ISignCommandListener) return true; // Paper + return unrestrictedAdvancements && listener instanceof AdvancementRewards.AdvancementCommandListener; + } + +-- +2.16.2 +