VGalaxies commented on code in PR #3008:
URL: https://github.com/apache/hugegraph/pull/3008#discussion_r3371365855


##########
hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/task/ServerInfoManager.java:
##########
@@ -122,19 +122,25 @@ public synchronized void initServerInfo(GlobalMasterInfo 
nodeInfo) {
                         "The server with name '%s' already in cluster", 
serverId);
 
         if (nodeInfo.nodeRole().master()) {
-            String page = this.supportsPaging() ? PageInfo.PAGE_NONE : null;
-            do {
-                Iterator<HugeServerInfo> servers = this.serverInfos(PAGE_SIZE, 
page);
-                while (servers.hasNext()) {
-                    existed = servers.next();
-                    E.checkArgument(!existed.role().master() || 
!existed.alive(),
-                                    "Already existed master '%s' in current 
cluster",
-                                    existed.id());
-                }
-                if (page != null) {
-                    page = PageInfo.pageInfo(servers);
-                }
-            } while (page != null);
+            try {
+                String page = this.supportsPaging() ? PageInfo.PAGE_NONE : 
null;
+                do {
+                    Iterator<HugeServerInfo> servers = 
this.serverInfos(PAGE_SIZE, page);
+                    while (servers.hasNext()) {
+                        existed = servers.next();
+                        E.checkArgument(!existed.role().master() || 
!existed.alive(),
+                                        "Already existed master '%s' in 
current cluster",
+                                        existed.id());
+                    }
+                    if (page != null) {
+                        page = PageInfo.pageInfo(servers);
+                    }
+                } while (page != null);
+            } catch (Exception e) {

Review Comment:
   High 
`hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/task/ServerInfoManager.java:139`
 - Existing live master detection is swallowed
      Evidence: The uniqueness check at lines 131-133 throws when another alive 
master exists, but the new broad `catch (Exception e)` at line 139 logs and 
continues to `saveServerInfo()` at line 149.
      Impact: A node can register itself as master even after detecting an 
existing alive master, allowing multiple masters in the same cluster.
      Requested fix: Do not catch the invariant failure. Only handle the 
specific schema-mismatch/read error if needed, and rethrow when an existing 
alive master is found.



##########
hugegraph-server/hugegraph-api/src/main/java/org/apache/hugegraph/api/space/GraphSpaceAPI.java:
##########
@@ -103,6 +107,171 @@ public Object get(@Context GraphManager manager,
         return gsInfo;
     }
 
+    @POST
+    @Timed
+    @Status(Status.CREATED)
+    @Consumes(APPLICATION_JSON)
+    @Produces(APPLICATION_JSON_WITH_CHARSET)
+    @Path("{graphspace}/role")
+    @RolesAllowed({"analyst"})

Review Comment:
   High 
`hugegraph-server/hugegraph-api/src/main/java/org/apache/hugegraph/api/space/GraphSpaceAPI.java:116`
 - Analysts can grant or revoke default roles for arbitrary users
      Evidence: `POST /graphspaces/{graphspace}/role` and `DELETE 
/graphspaces/{graphspace}/role` are gated only by `@RolesAllowed("analyst")`; 
after that, non-admin callers are blocked only for `SPACE`, while `ANALYST`, 
`SPACE_MEMBER`, and `OBSERVER` are created/deleted at lines 166-171 and 
268-271. `ANALYST` grants READ/WRITE/DELETE/EXECUTE in 
`StandardAuthManagerV2.java:1785-1787`.
      Impact: Any caller satisfying the analyst role can grant destructive 
graphspace permissions to other users or remove their roles, bypassing the 
existing admin/space-manager role-management boundary.
      Requested fix: Require admin or space manager permission for these role 
mutations, matching `ManagerAPI`, and keep admin-only enforcement for `SPACE` 
if needed.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to