From 4f2a13c22338b0672efd8c642ee2828de200640b Mon Sep 17 00:00:00 2001 From: ElgarL Date: Sun, 1 Apr 2012 03:44:37 +0100 Subject: Force remove player attachments on disconnect, and tidyup during player join in case of any errors. Fixes a bug of losing permissions. --- EssentialsGroupManager/src/Changelog.txt | 3 +- .../permissions/BukkitPermissions.java | 39 +++++++++++++++++++++- 2 files changed, 40 insertions(+), 2 deletions(-) (limited to 'EssentialsGroupManager') diff --git a/EssentialsGroupManager/src/Changelog.txt b/EssentialsGroupManager/src/Changelog.txt index c57b050c3..c6f45bb01 100644 --- a/EssentialsGroupManager/src/Changelog.txt +++ b/EssentialsGroupManager/src/Changelog.txt @@ -156,4 +156,5 @@ v 1.9: - Auto rename all case sensitive world folders to lower case (if possible). - Update GlobalGroups.yml for new/changed Towny permission nodes. - Stop attempting to push empty permissions when players edit the yml's incorrectly. - - Catch errors caused by bad indentation in yml's. \ No newline at end of file + - Catch errors caused by bad indentation in yml's. + - Force remove player attachments on disconnect, and tidyup during player join in case of any errors. Fixes a bug of losing permissions. \ No newline at end of file diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/BukkitPermissions.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/BukkitPermissions.java index dc08168dc..5c711351e 100644 --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/BukkitPermissions.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/BukkitPermissions.java @@ -38,6 +38,7 @@ import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerChangedWorldEvent; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerKickEvent; +import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.event.server.PluginDisableEvent; import org.bukkit.event.server.PluginEnableEvent; import org.bukkit.permissions.Permission; @@ -342,6 +343,18 @@ public class BukkitPermissions { if (player != null) this.updatePermissions(player, null); } + + /** + * Force remove any attachments + * + * @param player + */ + private void removeAttachment(Player player) { + if (attachments.containsKey(player)) { + player.removeAttachment(attachments.get(player)); + attachments.remove(player); + } + } /** * Player events tracked to cause Superperms updates @@ -355,6 +368,12 @@ public class BukkitPermissions { public void onPlayerJoin(PlayerJoinEvent event) { setPlayer_join(true); Player player = event.getPlayer(); + + /* + * Tidy up any lose ends + */ + removeAttachment(player); + // force GM to create the player if they are not already listed. if (plugin.getWorldsHolder().getWorldData(player.getWorld().getName()).getUser(player.getName()) != null) { setPlayer_join(false); @@ -370,7 +389,25 @@ public class BukkitPermissions { @EventHandler(priority = EventPriority.LOWEST) public void onPlayerKick(PlayerKickEvent event) { - attachments.remove(event.getPlayer()); + Player player = event.getPlayer(); + + /* + * force remove any attachments as bukkit may not + */ + removeAttachment(player); + } + + @EventHandler(priority = EventPriority.LOWEST) + public void onPlayerQuit(PlayerQuitEvent event) { + if (!GroupManager.isLoaded()) + return; + + Player player = event.getPlayer(); + + /* + * force remove any attachments as bukkit may not + */ + removeAttachment(player); } } -- cgit v1.2.3 From 99e315e625052d68fc5932cabf52e10b601fdb09 Mon Sep 17 00:00:00 2001 From: ElgarL Date: Mon, 2 Apr 2012 21:12:19 +0100 Subject: Added a new permission node 'groupmanager.op'. This will cause players with this node to be treated as op's when using GroupManager commands (they will still require each commands permission node to use them). --- EssentialsGroupManager/src/Changelog.txt | 4 +++- .../src/org/anjocaido/groupmanager/GroupManager.java | 2 +- EssentialsGroupManager/src/plugin.yml | 7 ++++++- 3 files changed, 10 insertions(+), 3 deletions(-) (limited to 'EssentialsGroupManager') diff --git a/EssentialsGroupManager/src/Changelog.txt b/EssentialsGroupManager/src/Changelog.txt index c6f45bb01..fd9d8ef35 100644 --- a/EssentialsGroupManager/src/Changelog.txt +++ b/EssentialsGroupManager/src/Changelog.txt @@ -157,4 +157,6 @@ v 1.9: - Update GlobalGroups.yml for new/changed Towny permission nodes. - Stop attempting to push empty permissions when players edit the yml's incorrectly. - Catch errors caused by bad indentation in yml's. - - Force remove player attachments on disconnect, and tidyup during player join in case of any errors. Fixes a bug of losing permissions. \ No newline at end of file + - Force remove player attachments on disconnect, and tidyup during player join in case of any errors. Fixes a bug of losing permissions. + - Added a new permission node 'groupmanager.op'. This will cause players with this node to be treated as op's when + using GroupManager commands (they will still require each commands permission node to use them). \ No newline at end of file diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/GroupManager.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/GroupManager.java index 09ea3b247..8bd346735 100644 --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/GroupManager.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/GroupManager.java @@ -303,7 +303,7 @@ public class GroupManager extends JavaPlugin { senderPlayer = (Player) sender; senderUser = worldsHolder.getWorldData(senderPlayer).getUser(senderPlayer.getName()); senderGroup = senderUser.getGroup(); - isOpOverride = (isOpOverride && senderPlayer.isOp()); + isOpOverride = (isOpOverride && (senderPlayer.isOp() || worldsHolder.getWorldPermissions(senderPlayer).has(senderPlayer, "groupmanager.op"))); System.out.println("[PLAYER_COMMAND] " + senderPlayer.getName() + ": /" + commandLabel + " " + Tasks.join(args, " ")); if (isOpOverride || worldsHolder.getWorldPermissions(senderPlayer).has(senderPlayer, "groupmanager." + cmd.getName())) { diff --git a/EssentialsGroupManager/src/plugin.yml b/EssentialsGroupManager/src/plugin.yml index bf42a08c3..f7faa5896 100644 --- a/EssentialsGroupManager/src/plugin.yml +++ b/EssentialsGroupManager/src/plugin.yml @@ -163,4 +163,9 @@ commands: manclear: description: Clear world selection. Next commands will work on your world. usage: / - permissions: groupmanager.manclear \ No newline at end of file + permissions: groupmanager.manclear + +Permissions: + groupmanager.op: + description: User is treated as an op when using the GroupManager commands. + default: false \ No newline at end of file -- cgit v1.2.3 From 77e15e9330e9f18b3e30ace012cbeb1f208f4911 Mon Sep 17 00:00:00 2001 From: ElgarL Date: Tue, 3 Apr 2012 14:30:27 +0100 Subject: Prevent Null entries in group inheritance from throwing errors. --- EssentialsGroupManager/src/Changelog.txt | 3 ++- .../org/anjocaido/groupmanager/dataholder/WorldDataHolder.java | 10 ++++++---- 2 files changed, 8 insertions(+), 5 deletions(-) (limited to 'EssentialsGroupManager') diff --git a/EssentialsGroupManager/src/Changelog.txt b/EssentialsGroupManager/src/Changelog.txt index fd9d8ef35..eba17517c 100644 --- a/EssentialsGroupManager/src/Changelog.txt +++ b/EssentialsGroupManager/src/Changelog.txt @@ -159,4 +159,5 @@ v 1.9: - Catch errors caused by bad indentation in yml's. - Force remove player attachments on disconnect, and tidyup during player join in case of any errors. Fixes a bug of losing permissions. - Added a new permission node 'groupmanager.op'. This will cause players with this node to be treated as op's when - using GroupManager commands (they will still require each commands permission node to use them). \ No newline at end of file + using GroupManager commands (they will still require each commands permission node to use them). + - Prevent Null entries in group inheritance from throwing errors. \ No newline at end of file diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/WorldDataHolder.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/WorldDataHolder.java index d7f146438..cee2ec0b8 100644 --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/WorldDataHolder.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/WorldDataHolder.java @@ -563,10 +563,12 @@ public class WorldDataHolder { List inheritedList = inheritance.get(groupKey); Group thisGroup = ph.getGroup(groupKey); for (String inheritedKey : inheritedList) { - Group inheritedGroup = ph.getGroup(inheritedKey); - if (thisGroup != null && inheritedGroup != null) { - thisGroup.addInherits(inheritedGroup); - } + if (inheritedKey != null) { + Group inheritedGroup = ph.getGroup(inheritedKey); + if (thisGroup != null && inheritedGroup != null) { + thisGroup.addInherits(inheritedGroup); + } + } } } -- cgit v1.2.3 From d8891569e9e52692248e5daab14da1a0016999a0 Mon Sep 17 00:00:00 2001 From: ElgarL Date: Thu, 5 Apr 2012 12:54:26 +0100 Subject: Update to 2.0 Fix GM reporting of permission inheritance to retain the correct order. Lower inheritance groups can no longer negate a higher groups permissions. --- EssentialsGroupManager/src/Changelog.txt | 4 ++- .../permissions/AnjoPermissionsHandler.java | 30 ++++++++++------------ 2 files changed, 17 insertions(+), 17 deletions(-) (limited to 'EssentialsGroupManager') diff --git a/EssentialsGroupManager/src/Changelog.txt b/EssentialsGroupManager/src/Changelog.txt index eba17517c..a636ac6fe 100644 --- a/EssentialsGroupManager/src/Changelog.txt +++ b/EssentialsGroupManager/src/Changelog.txt @@ -160,4 +160,6 @@ v 1.9: - Force remove player attachments on disconnect, and tidyup during player join in case of any errors. Fixes a bug of losing permissions. - Added a new permission node 'groupmanager.op'. This will cause players with this node to be treated as op's when using GroupManager commands (they will still require each commands permission node to use them). - - Prevent Null entries in group inheritance from throwing errors. \ No newline at end of file + - Prevent Null entries in group inheritance from throwing errors. +v 2.0: + - Fix GM reporting of permission inheritance to retain the correct order. Lower inheritance groups can no longer negate a higher groups permissions. \ No newline at end of file diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/AnjoPermissionsHandler.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/AnjoPermissionsHandler.java index 6b6ae58ea..08240441d 100644 --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/AnjoPermissionsHandler.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/AnjoPermissionsHandler.java @@ -144,7 +144,7 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { // Perm doesn't already exists and there is no negation for it // or It's a negated perm where a normal perm doesn't exists (don't allow inheritance to negate higher perms) if ((!negated && !playerPermArray.contains(perm) && !playerPermArray.contains("-" + perm)) - || (negated && !playerPermArray.contains(perm.substring(1)))) + || (negated && !playerPermArray.contains(perm.substring(1)) && !playerPermArray.contains("-" + perm))) playerPermArray.add(perm); } } @@ -164,20 +164,17 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { if (perms.contains("*")) { permArray.addAll(GroupManager.BukkitPermissions.getAllRegisteredPermissions(includeChildren)); allPerms = true; + perms.remove("*"); } for (String perm : perms) { - - if (!perm.equalsIgnoreCase("*")) { - + /** * all permission sets are passed here pre-sorted, alphabetically. * This means negated nodes will be processed before all permissions * other than *. */ - boolean negated = false; - if (perm.startsWith("-")) - negated = true; + boolean negated = perm.startsWith("-"); if (!permArray.contains(perm)) { permArray.add(perm); @@ -195,15 +192,16 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { Map children = GroupManager.BukkitPermissions.getAllChildren((negated ? perm.substring(1) : perm), new HashSet()); if (children != null) { - if (negated || (negated && allPerms)) { + if (negated) + if (allPerms) { - // Remove children of negated nodes - for (String child : children.keySet()) - if (children.get(child)) - if (permArray.contains(child)) - permArray.remove(child); + // Remove children of negated nodes + for (String child : children.keySet()) + if (children.get(child)) + if (permArray.contains(child)) + permArray.remove(child); - } else if (!negated){ + } else { // Add child nodes for (String child : children.keySet()) @@ -214,7 +212,6 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { } } } - } } return permArray; @@ -959,7 +956,8 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { for (String sonName : now.getInherits()) { Group son = ph.getGroup(sonName); if (son != null && !alreadyVisited.contains(son)) { - stack.push(son); + // Add rather than push to retain inheritance order. + stack.add(son); alreadyVisited.add(son); } } -- cgit v1.2.3 From a407c6ed0cafc4a58b3a560b97a48355d83d8fbd Mon Sep 17 00:00:00 2001 From: ElgarL Date: Thu, 5 Apr 2012 15:02:08 +0100 Subject: Fix an error I caused trying to modify an unmodifiable list when parsing '*' permissions. --- EssentialsGroupManager/src/Changelog.txt | 3 ++- .../anjocaido/groupmanager/permissions/AnjoPermissionsHandler.java | 4 +++- 2 files changed, 5 insertions(+), 2 deletions(-) (limited to 'EssentialsGroupManager') diff --git a/EssentialsGroupManager/src/Changelog.txt b/EssentialsGroupManager/src/Changelog.txt index a636ac6fe..c5fe5564d 100644 --- a/EssentialsGroupManager/src/Changelog.txt +++ b/EssentialsGroupManager/src/Changelog.txt @@ -162,4 +162,5 @@ v 1.9: using GroupManager commands (they will still require each commands permission node to use them). - Prevent Null entries in group inheritance from throwing errors. v 2.0: - - Fix GM reporting of permission inheritance to retain the correct order. Lower inheritance groups can no longer negate a higher groups permissions. \ No newline at end of file + - Fix GM reporting of permission inheritance to retain the correct order. Lower inheritance groups can no longer negate a higher groups permissions. + - Fix an error I caused trying to modify an unmodifiable list when parsing '*' permissions. \ No newline at end of file diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/AnjoPermissionsHandler.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/AnjoPermissionsHandler.java index 08240441d..b40694bb0 100644 --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/AnjoPermissionsHandler.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/AnjoPermissionsHandler.java @@ -155,8 +155,10 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { return playerPermArray; } - private Set populatePerms (List perms, boolean includeChildren) { + private Set populatePerms (List permsList, boolean includeChildren) { + // Create a new array so it's modifiable. + List perms = new ArrayList(permsList); Set permArray = new HashSet(); Boolean allPerms = false; -- cgit v1.2.3