Skip to content

Commit 051c276

Browse files
committed
Skip changing permissions entirely if -rpccookieperms=0 specified
1 parent d307da8 commit 051c276

File tree

2 files changed

+33
-6
lines changed

2 files changed

+33
-6
lines changed

src/httprpc.cpp

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -296,12 +296,18 @@ static bool InitRPCAuthentication()
296296
std::optional<fs::perms> cookie_perms{std::nullopt};
297297
auto cookie_perms_arg{gArgs.GetArg("-rpccookieperms")};
298298
if (cookie_perms_arg) {
299-
auto perm_opt = InterpretPermString(*cookie_perms_arg);
300-
if (!perm_opt) {
301-
LogError("Invalid -rpccookieperms=%s; must be one of 'owner', 'group', or 'all'.", *cookie_perms_arg);
302-
return false;
299+
if (*cookie_perms_arg == "0") {
300+
cookie_perms = std::nullopt;
301+
} else if (cookie_perms_arg->empty() || *cookie_perms_arg == "1") {
302+
// leave at default
303+
} else {
304+
auto perm_opt = InterpretPermString(*cookie_perms_arg);
305+
if (!perm_opt) {
306+
LogError("Invalid -rpccookieperms=%s; must be one of 'owner', 'group', or 'all'.", *cookie_perms_arg);
307+
return false;
308+
}
309+
cookie_perms = *perm_opt;
303310
}
304-
cookie_perms = *perm_opt;
305311
}
306312

307313
assert(strRPCUserColonPass.empty()); // Only support initializing once

test/functional/rpc_users.py

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,17 +118,38 @@ def test_perm(perm: Optional[str]):
118118
actual_perms = file_stat.st_mode & PERM_BITS_UMASK
119119
expected_perms = p[perm]
120120
assert_equal(expected_perms, actual_perms)
121+
return actual_perms
121122

122123
# Remove any leftover rpc{user|password} config options from previous tests
123124
self.nodes[1].replace_in_config([("rpcuser", "#rpcuser"), ("rpcpassword", "#rpcpassword")])
124125

125126
self.log.info('Check default cookie permission')
126-
test_perm(None)
127+
default_perms = test_perm(None)
127128

128129
self.log.info('Check custom cookie permissions')
129130
for perm in p.keys():
130131
test_perm(perm)
131132

133+
self.log.info('Check leaving cookie permissions alone')
134+
unassigned_perms = os.stat(self.nodes[1].chain_path / 'debug.log').st_mode & PERM_BITS_UMASK
135+
self.restart_node(1, extra_args=["-rpccookieperms=0"])
136+
actual_perms = os.stat(cookie_file_path).st_mode & PERM_BITS_UMASK
137+
assert_equal(unassigned_perms, actual_perms)
138+
self.restart_node(1, extra_args=["-norpccookieperms"])
139+
actual_perms = os.stat(cookie_file_path).st_mode & PERM_BITS_UMASK
140+
assert_equal(unassigned_perms, actual_perms)
141+
142+
self.log.info('Check -norpccookieperms -rpccookieperms')
143+
self.restart_node(1, extra_args=["-rpccookieperms=0", "-rpccookieperms=1"])
144+
actual_perms = os.stat(cookie_file_path).st_mode & PERM_BITS_UMASK
145+
assert_equal(default_perms, actual_perms)
146+
self.restart_node(1, extra_args=["-norpccookieperms", "-rpccookieperms"])
147+
actual_perms = os.stat(cookie_file_path).st_mode & PERM_BITS_UMASK
148+
assert_equal(default_perms, actual_perms)
149+
self.restart_node(1, extra_args=["-rpccookieperms=1660", "-norpccookieperms", "-rpccookieperms"])
150+
actual_perms = os.stat(cookie_file_path).st_mode & PERM_BITS_UMASK
151+
assert_equal(default_perms, actual_perms)
152+
132153
def test_norpccookiefile(self, node0_cookie_path):
133154
assert self.nodes[0].is_node_stopped(), "We expect previous test to stopped the node"
134155
assert not node0_cookie_path.exists()

0 commit comments

Comments
 (0)