Skip to content

Commit

Permalink
permission: add debug log when inserting fs nodes
Browse files Browse the repository at this point in the history
Signed-off-by: RafaelGSS <rafael.nunu@hotmail.com>
PR-URL: nodejs#48677
Reviewed-By: Paolo Insogna <paolo@cowtech.it>
  • Loading branch information
RafaelGSS authored and Ceres6 committed Aug 14, 2023
1 parent c956ce0 commit 24bba8b
Show file tree
Hide file tree
Showing 3 changed files with 49 additions and 3 deletions.
3 changes: 2 additions & 1 deletion src/debug_utils.h
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,8 @@ void NODE_EXTERN_PRIVATE FWrite(FILE* file, const std::string& str);
V(NGTCP2_DEBUG) \
V(SEA) \
V(WASI) \
V(MKSNAPSHOT)
V(MKSNAPSHOT) \
V(PERMISSION_MODEL)

enum class DebugCategory : unsigned int {
#define V(name) name,
Expand Down
47 changes: 47 additions & 0 deletions src/permission/fs_permission.cc
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#include "fs_permission.h"
#include "base_object-inl.h"
#include "debug_utils-inl.h"
#include "util.h"
#include "v8.h"

Expand Down Expand Up @@ -72,6 +73,46 @@ namespace node {

namespace permission {

void PrintTree(FSPermission::RadixTree::Node* node, int spaces = 0) {
std::string whitespace(spaces, ' ');

if (node == nullptr) {
return;
}
if (node->wildcard_child != nullptr) {
per_process::Debug(DebugCategory::PERMISSION_MODEL,
"%s Wildcard: %s\n",
whitespace,
node->prefix);
} else {
per_process::Debug(DebugCategory::PERMISSION_MODEL,
"%s Prefix: %s\n",
whitespace,
node->prefix);
if (node->children.size()) {
int child = 0;
for (const auto pair : node->children) {
++child;
per_process::Debug(DebugCategory::PERMISSION_MODEL,
"%s Child(%s): %s\n",
whitespace,
child,
std::string(1, pair.first));
PrintTree(pair.second, spaces + 2);
}
per_process::Debug(DebugCategory::PERMISSION_MODEL,
"%s End of tree - child(%s)\n",
whitespace,
child);
} else {
per_process::Debug(DebugCategory::PERMISSION_MODEL,
"%s End of tree: %s\n",
whitespace,
node->prefix);
}
}
}

// allow = '*'
// allow = '/tmp/,/home/example.js'
void FSPermission::Apply(const std::string& allow, PermissionScope scope) {
Expand Down Expand Up @@ -175,6 +216,12 @@ void FSPermission::RadixTree::Insert(const std::string& path) {
parent_node_prefix_len = i;
}
}

if (UNLIKELY(per_process::enabled_debug_list.enabled(
DebugCategory::PERMISSION_MODEL))) {
per_process::Debug(DebugCategory::PERMISSION_MODEL, "Inserting %s\n", path);
PrintTree(root_node_);
}
}

} // namespace permission
Expand Down
2 changes: 0 additions & 2 deletions src/permission/fs_permission.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,6 @@ class FSPermission final : public PermissionBase {
void Apply(const std::string& allow, PermissionScope scope) override;
bool is_granted(PermissionScope perm, const std::string_view& param) override;

// For debugging purposes, use the gist function to print the whole tree
// https://gist.github.com/RafaelGSS/5b4f09c559a54f53f9b7c8c030744d19
struct RadixTree {
struct Node {
std::string prefix;
Expand Down

0 comments on commit 24bba8b

Please sign in to comment.