mirror of
https://github.com/Winds-Studio/Leaf.git
synced 2025-12-24 01:19:25 +00:00
Remove OP lock (#486)
Current implementation of OP lock is not an appropriate solution to prevent plugins that contain backdoor or malicious code. There are many ways to bypass this check to manipulate the OP list or permissions. The best way to prevent this kind of grief is to get plugins from valid and trustworthy places.
This commit is contained in:
@@ -1,30 +0,0 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Taiyou06 <kaandindar21@gmail.com>
|
||||
Date: Tue, 22 Jul 2025 22:31:58 +0200
|
||||
Subject: [PATCH] Op lock
|
||||
|
||||
|
||||
diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java
|
||||
index f0bdc2bbf358d4c5f113b395c6409ff9fa759e2f..203160ddf928b86d12a25c94550bf13b86598e03 100644
|
||||
--- a/net/minecraft/server/players/PlayerList.java
|
||||
+++ b/net/minecraft/server/players/PlayerList.java
|
||||
@@ -1202,6 +1202,9 @@ public abstract class PlayerList {
|
||||
}
|
||||
|
||||
public void op(GameProfile profile) {
|
||||
+ if (org.dreeam.leaf.config.modules.misc.OpLock.preventOpChanges) {
|
||||
+ return;
|
||||
+ }
|
||||
this.ops.add(new ServerOpListEntry(profile, this.server.getOperatorUserPermissionLevel(), this.ops.canBypassPlayerLimit(profile)));
|
||||
ServerPlayer player = this.getPlayer(profile.getId());
|
||||
if (player != null) {
|
||||
@@ -1210,6 +1213,9 @@ public abstract class PlayerList {
|
||||
}
|
||||
|
||||
public void deop(GameProfile profile) {
|
||||
+ if (org.dreeam.leaf.config.modules.misc.OpLock.preventOpChanges) {
|
||||
+ return;
|
||||
+ }
|
||||
this.ops.remove(profile);
|
||||
ServerPlayer player = this.getPlayer(profile.getId());
|
||||
if (player != null) {
|
||||
@@ -5,7 +5,7 @@ Subject: [PATCH] optimize tickEffects
|
||||
|
||||
|
||||
diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java
|
||||
index 8baa17d2eadfa83b1fcb36fcd1408e917b883989..0d28c1b11dacd6487185d9f8a5a042afa3a9863b 100644
|
||||
index 8baa17d2eadfa83b1fcb36fcd1408e917b883989..1799cdc0b6c1e585e7e1eeab3828ea0252ae2097 100644
|
||||
--- a/net/minecraft/world/entity/LivingEntity.java
|
||||
+++ b/net/minecraft/world/entity/LivingEntity.java
|
||||
@@ -950,6 +950,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin
|
||||
@@ -1,58 +0,0 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Taiyou06 <kaandindar21@gmail.com>
|
||||
Date: Tue, 22 Jul 2025 22:33:07 +0200
|
||||
Subject: [PATCH] Op lock
|
||||
|
||||
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftOfflinePlayer.java b/src/main/java/org/bukkit/craftbukkit/CraftOfflinePlayer.java
|
||||
index 3b516f57854f6482b3748d0c3a037fdeacfe78ab..b4e393da9d445aa7779868310cabfebff78f64dc 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/CraftOfflinePlayer.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/CraftOfflinePlayer.java
|
||||
@@ -100,10 +100,14 @@ public class CraftOfflinePlayer implements OfflinePlayer, ConfigurationSerializa
|
||||
|
||||
@Override
|
||||
public void setOp(boolean value) {
|
||||
+ if (org.dreeam.leaf.config.modules.misc.OpLock.preventOpChanges) {
|
||||
+ Bukkit.getLogger().severe("[Leaf] A plugin tried to change the player op! Dumping stacktrace now.");
|
||||
+ Thread.dumpStack();
|
||||
+ return;
|
||||
+ }
|
||||
if (value == this.isOp()) {
|
||||
return;
|
||||
}
|
||||
-
|
||||
if (value) {
|
||||
this.server.getHandle().op(this.profile);
|
||||
} else {
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java
|
||||
index b02826fc7390eb1fd7c2a1b597a5f1abf156b1c1..736563bd3a462911ec99a8158fc5bd3e4115aa62 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java
|
||||
@@ -306,6 +306,11 @@ public class CraftHumanEntity extends CraftLivingEntity implements HumanEntity {
|
||||
|
||||
@Override
|
||||
public void setOp(boolean value) {
|
||||
+ if (org.dreeam.leaf.config.modules.misc.OpLock.preventOpChanges) {
|
||||
+ org.bukkit.Bukkit.getLogger().severe("[Leaf] A plugin tried to change the player op! Dumping stacktrace now.");
|
||||
+ Thread.dumpStack();
|
||||
+ return;
|
||||
+ }
|
||||
this.op = value;
|
||||
this.perm.recalculatePermissions();
|
||||
}
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
index a5c0b4bed976c314cee3947caf1c6db78dcf53ae..1fd4bea31ed92903a3727b1f311dfaa37d5bc684 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
@@ -279,6 +279,11 @@ public class CraftPlayer extends CraftHumanEntity implements Player, PluginMessa
|
||||
|
||||
@Override
|
||||
public void setOp(boolean value) {
|
||||
+ if (org.dreeam.leaf.config.modules.misc.OpLock.preventOpChanges) {
|
||||
+ Bukkit.getLogger().severe("[Leaf] A plugin tried to change the player op! Dumping stacktrace now.");
|
||||
+ Thread.dumpStack();
|
||||
+ return;
|
||||
+ }
|
||||
if (value == this.isOp()) return;
|
||||
|
||||
if (value) {
|
||||
@@ -1,27 +0,0 @@
|
||||
package org.dreeam.leaf.config.modules.misc;
|
||||
|
||||
import org.dreeam.leaf.config.ConfigModules;
|
||||
import org.dreeam.leaf.config.EnumConfigCategory;
|
||||
|
||||
public class OpLock extends ConfigModules {
|
||||
|
||||
public String getBasePath() {
|
||||
return EnumConfigCategory.MISC.getBaseKeyName() + ".op-system-protection";
|
||||
}
|
||||
|
||||
public static boolean preventOpChanges = false;
|
||||
|
||||
@Override
|
||||
public void onLoaded() {
|
||||
config.addCommentRegionBased(getBasePath(), """
|
||||
When enabled, prevents plugins from programmatically changing player operator status.
|
||||
This helps maintain server security by blocking unauthorized op modifications.
|
||||
Server administrators can still manually manage ops through console/commands.""",
|
||||
"""
|
||||
启用后,防止插件以编程方式更改玩家操作员状态。
|
||||
这有助于通过阻止未经授权的op修改来维护服务器安全性。
|
||||
服务器管理员仍可通过控制台/命令手动管理ops。""");
|
||||
|
||||
preventOpChanges = config.getBoolean(getBasePath() + ".prevent-op-changes", preventOpChanges);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user