From 04c833f6486ed8da1fed0431f7aaa5cd5769c797 Mon Sep 17 00:00:00 2001 From: ElgarL Date: Mon, 14 Jan 2013 06:47:50 +0000 Subject: [PATCH] Fix recursive loop when used on offline servers. --- .../permissions/AnjoPermissionsHandler.java | 44 ++++++++++++++----- 1 file changed, 33 insertions(+), 11 deletions(-) diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/AnjoPermissionsHandler.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/AnjoPermissionsHandler.java index 59efb33dc..7396f3f70 100644 --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/AnjoPermissionsHandler.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/AnjoPermissionsHandler.java @@ -768,6 +768,9 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { } /** + * Wrapper for offline server checks. + * Looks for the 'groupmanager.noofflineperms' permissions and reports no permissions on servers set to offline. + * * Check user and groups with inheritance and Bukkit if bukkit = true return * a PermissionCheckResult. * @@ -778,23 +781,42 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { */ public PermissionCheckResult checkFullGMPermission(User user, String targetPermission, Boolean checkBukkit) { - PermissionCheckResult result = new PermissionCheckResult(); - result.accessLevel = targetPermission; - result.resultType = PermissionCheckResult.Type.NOTFOUND; - - if (user == null || targetPermission == null || targetPermission.isEmpty()) { - return result; - } - /* - * Do not push any perms to bukkit if... + * Report no permissions under the following conditions. + * * We are in offline mode * and the player has the 'groupmanager.noofflineperms' permission. */ - if (!Bukkit.getServer().getOnlineMode() - && (checkFullGMPermission(user, "groupmanager.noofflineperms", true).resultType == PermissionCheckResult.Type.FOUND)) + if (user == null || targetPermission == null || targetPermission.isEmpty() || + (!Bukkit.getServer().getOnlineMode() + && (checkPermission(user, "groupmanager.noofflineperms", true).resultType == PermissionCheckResult.Type.FOUND))) { + + PermissionCheckResult result = new PermissionCheckResult(); + result.accessLevel = targetPermission; + result.resultType = PermissionCheckResult.Type.NOTFOUND; + return result; + } + + return checkPermission(user, targetPermission, checkBukkit); + } + /** + * + * Check user and groups with inheritance and Bukkit if bukkit = true return + * a PermissionCheckResult. + * + * @param user + * @param targetPermission + * @param checkBukkit + * @return PermissionCheckResult + */ + private PermissionCheckResult checkPermission(User user, String targetPermission, Boolean checkBukkit) { + + PermissionCheckResult result = new PermissionCheckResult(); + result.accessLevel = targetPermission; + result.resultType = PermissionCheckResult.Type.NOTFOUND; + if (checkBukkit) { // Check Bukkit perms to support plugins which add perms via code // (Heroes).