mirror of
https://github.com/falk-werner/webfused
synced 2026-03-02 04:09:19 +00:00
switch user and group when started as root
This commit is contained in:
@@ -80,6 +80,15 @@ wfd_MockConfigBuilder_set_logger(
|
||||
return builder->setLogger(provider, level, settings);
|
||||
}
|
||||
|
||||
static void
|
||||
wfd_MockConfigBuilder_set_user(
|
||||
void * data,
|
||||
char const * user,
|
||||
char const * group)
|
||||
{
|
||||
auto * builder = reinterpret_cast<IConfigBuilder*>(data);
|
||||
return builder->setUser(user, group);
|
||||
}
|
||||
|
||||
static const wfd_config_builder_vtable wfd_MockConfigBuilder_vtable =
|
||||
{
|
||||
@@ -90,7 +99,8 @@ static const wfd_config_builder_vtable wfd_MockConfigBuilder_vtable =
|
||||
&wfd_MockConfigBuilder_set_server_document_root,
|
||||
&wfd_MockConfigBuilder_add_auth_provider,
|
||||
&wfd_MockConfigBuilder_add_filesystem,
|
||||
&wfd_MockConfigBuilder_set_logger
|
||||
&wfd_MockConfigBuilder_set_logger,
|
||||
&wfd_MockConfigBuilder_set_user
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -19,6 +19,7 @@ public:
|
||||
virtual bool addAuthProvider(char const * provider, wfd_settings * settings) = 0;
|
||||
virtual bool addFilesystem(char const * name, char const * mountpoint) = 0;
|
||||
virtual bool setLogger(char const * provider, int level, wfd_settings * settings) = 0;
|
||||
virtual void setUser(char const * user, char const * group) = 0;
|
||||
};
|
||||
|
||||
class MockConfigBuilder: public IConfigBuilder
|
||||
@@ -33,6 +34,7 @@ public:
|
||||
MOCK_METHOD2(addAuthProvider, bool (char const * provider, wfd_settings * settings));
|
||||
MOCK_METHOD2(addFilesystem, bool (char const * name, char const * mountpoint));
|
||||
MOCK_METHOD3(setLogger, bool (char const * provider, int level, wfd_settings * settings));
|
||||
MOCK_METHOD2(setUser, void (char const * user, char const * group));
|
||||
|
||||
struct wfd_config_builder getBuilder();
|
||||
};
|
||||
|
||||
@@ -101,5 +101,19 @@ TEST(config, set_logger)
|
||||
bool success = wfd_config_builder_set_logger(builder, "stderr", WFD_LOGLEVEL_ALL, nullptr);
|
||||
ASSERT_TRUE(success);
|
||||
|
||||
wfd_config_dispose(config);
|
||||
}
|
||||
|
||||
TEST(config, do_set_user)
|
||||
{
|
||||
wfd_config * config = wfd_config_create();
|
||||
ASSERT_NE(nullptr, config);
|
||||
|
||||
wfd_config_builder builder = wfd_config_get_builder(config);
|
||||
|
||||
wfd_config_builder_set_user(builder, "some.user", "some.group");
|
||||
ASSERT_STREQ("some.user", wfd_config_get_user(config));
|
||||
ASSERT_STREQ("some.group", wfd_config_get_group(config));
|
||||
|
||||
wfd_config_dispose(config);
|
||||
}
|
||||
@@ -546,3 +546,63 @@ TEST(config, log_fail_invalid_level)
|
||||
ASSERT_FALSE(result);
|
||||
}
|
||||
|
||||
TEST(config, set_user)
|
||||
{
|
||||
MockLogger logger;
|
||||
EXPECT_CALL(logger, log(_, _, _)).Times(0);
|
||||
EXPECT_CALL(logger, onclose()).Times(1);
|
||||
|
||||
StrictMock<MockConfigBuilder> builder;
|
||||
EXPECT_CALL(builder, setUser(_, _)).Times(1);
|
||||
|
||||
char const config_text[] =
|
||||
"version = { major = 1, minor = 0 }\n"
|
||||
"user:\n"
|
||||
"{\n"
|
||||
" name = \"webfused\"\n"
|
||||
" group = \"webfused\"\n"
|
||||
"}\n"
|
||||
;
|
||||
bool result = wfd_config_load_string(builder.getBuilder(), config_text);
|
||||
ASSERT_TRUE(result);
|
||||
}
|
||||
|
||||
TEST(config, set_user_fail_missing_name)
|
||||
{
|
||||
MockLogger logger;
|
||||
EXPECT_CALL(logger, log(WFD_LOGLEVEL_ERROR, _, _)).Times(1);
|
||||
EXPECT_CALL(logger, onclose()).Times(1);
|
||||
|
||||
StrictMock<MockConfigBuilder> builder;
|
||||
EXPECT_CALL(builder, setUser(_, _)).Times(0);
|
||||
|
||||
char const config_text[] =
|
||||
"version = { major = 1, minor = 0 }\n"
|
||||
"user:\n"
|
||||
"{\n"
|
||||
" group = \"webfused\"\n"
|
||||
"}\n"
|
||||
;
|
||||
bool result = wfd_config_load_string(builder.getBuilder(), config_text);
|
||||
ASSERT_FALSE(result);
|
||||
}
|
||||
|
||||
TEST(config, set_user_fail_missing_group)
|
||||
{
|
||||
MockLogger logger;
|
||||
EXPECT_CALL(logger, log(WFD_LOGLEVEL_ERROR, _, _)).Times(1);
|
||||
EXPECT_CALL(logger, onclose()).Times(1);
|
||||
|
||||
StrictMock<MockConfigBuilder> builder;
|
||||
EXPECT_CALL(builder, setUser(_, _)).Times(0);
|
||||
|
||||
char const config_text[] =
|
||||
"version = { major = 1, minor = 0 }\n"
|
||||
"user:\n"
|
||||
"{\n"
|
||||
" name = \"webfused\"\n"
|
||||
"}\n"
|
||||
;
|
||||
bool result = wfd_config_load_string(builder.getBuilder(), config_text);
|
||||
ASSERT_FALSE(result);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user