--- /dev/null
+[func] fdupont
+ Added support for using a file to configure MySql
+ and PostgreSQL passwords. Instead of configuring
+ a value, it is taken from the content of a file.
+ The new parameter is "password-file".
+ (Gitlab #3959)
EXPECT_THROW(HostMgr::addBackend(connectionString(
MYSQL_VALID_TYPE, VALID_NAME, VALID_HOST, VALID_USER, VALID_PASSWORD,
VALID_TIMEOUT, INVALID_READONLY_DB)), DbInvalidReadOnly);
+ EXPECT_THROW(HostMgr::addBackend(connectionString(
+ MYSQL_VALID_TYPE, VALID_NAME, VALID_HOST, VALID_USER, NOT_EXIST_FILE)),
+ BadValue);
+ EXPECT_THROW(HostMgr::addBackend(connectionString(
+ MYSQL_VALID_TYPE, VALID_NAME, VALID_HOST, VALID_USER, INVALID_FILE)),
+ DbOpenError);
// Check for missing parameters
EXPECT_THROW(HostMgr::addBackend(connectionString(
- MYSQL_VALID_TYPE, NULL, VALID_HOST, INVALID_USER, VALID_PASSWORD)),
+ MYSQL_VALID_TYPE, 0, VALID_HOST, INVALID_USER, VALID_PASSWORD)),
NoDatabaseName);
+ // Check for password file.
+ EXPECT_NO_THROW(HostMgr::addBackend(connectionString(
+ MYSQL_VALID_TYPE, VALID_NAME, VALID_HOST, VALID_USER, VALID_FILE)));
+ HostMgr::delBackend("mysql");
+
// Check for SSL/TLS support.
if (hasMySQLTls()) {
EXPECT_NO_THROW(HostMgr::addBackend(connectionString(
EXPECT_THROW(HostMgr::addBackend(connectionString(
MYSQL_VALID_TYPE, VALID_NAME, VALID_HOST, VALID_USER, VALID_PASSWORD,
VALID_TIMEOUT, INVALID_READONLY_DB)), DbInvalidReadOnly);
+ EXPECT_THROW(HostMgr::addBackend(connectionString(
+ MYSQL_VALID_TYPE, VALID_NAME, VALID_HOST, VALID_USER, NOT_EXIST_FILE)),
+ BadValue);
+ EXPECT_THROW(HostMgr::addBackend(connectionString(
+ MYSQL_VALID_TYPE, VALID_NAME, VALID_HOST, VALID_USER, INVALID_FILE)),
+ DbOpenError);
// Check for missing parameters
EXPECT_THROW(HostMgr::addBackend(connectionString(
MYSQL_VALID_TYPE, NULL, VALID_HOST, INVALID_USER, VALID_PASSWORD)),
NoDatabaseName);
+ // Check for password file.
+ EXPECT_NO_THROW(HostMgr::addBackend(connectionString(
+ MYSQL_VALID_TYPE, VALID_NAME, VALID_HOST, VALID_USER, VALID_FILE)));
+ HostMgr::delBackend("mysql");
+
// Tidy up after the test
destroyMySQLSchema();
}
MYSQL_VALID_TYPE, VALID_NAME, VALID_HOST, VALID_USER, DEFAULT_PASSWORD)),
isc::data::DefaultCredential);
+ EXPECT_THROW(LeaseMgrFactory::create(connectionString(
+ MYSQL_VALID_TYPE, VALID_NAME, VALID_HOST, VALID_USER, NOT_EXIST_FILE)),
+ BadValue);
+
+ EXPECT_THROW(LeaseMgrFactory::create(connectionString(
+ MYSQL_VALID_TYPE, VALID_NAME, VALID_HOST, VALID_USER, INVALID_FILE)),
+ DbOpenError);
+
// Check for invalid timeouts
EXPECT_THROW(LeaseMgrFactory::create(connectionString(
MYSQL_VALID_TYPE, VALID_NAME, VALID_HOST, VALID_USER, VALID_PASSWORD, INVALID_TIMEOUT_1)),
// Check for missing parameters
EXPECT_THROW(LeaseMgrFactory::create(connectionString(
- MYSQL_VALID_TYPE, NULL, VALID_HOST, VALID_USER, VALID_PASSWORD)),
+ MYSQL_VALID_TYPE, 0, VALID_HOST, VALID_USER, VALID_PASSWORD)),
NoDatabaseName);
+ // Check for password file.
+ EXPECT_NO_THROW(LeaseMgrFactory::create(connectionString(
+ MYSQL_VALID_TYPE, VALID_NAME, VALID_HOST, VALID_USER, VALID_FILE)));
+
// Check for SSL/TLS support.
if (hasMySQLTls()) {
EXPECT_NO_THROW(LeaseMgrFactory::create(connectionString(
EXPECT_THROW(HostMgr::addBackend(connectionString(
PGSQL_VALID_TYPE, VALID_NAME, VALID_HOST, VALID_USER, DEFAULT_PASSWORD)),
DefaultCredential);
+ EXPECT_THROW(HostMgr::addBackend(connectionString(
+ PGSQL_VALID_TYPE, VALID_NAME, VALID_HOST, VALID_USER, NOT_EXIST_FILE)),
+ BadValue);
+ EXPECT_THROW(HostMgr::addBackend(connectionString(
+ PGSQL_VALID_TYPE, VALID_NAME, VALID_HOST, VALID_USER, INVALID_FILE)),
+ DbOpenError);
EXPECT_THROW(HostMgr::addBackend(connectionString(
PGSQL_VALID_TYPE, VALID_NAME, VALID_HOST, VALID_USER, VALID_PASSWORD, INVALID_TIMEOUT_1)),
DbInvalidTimeout);
// Check for missing parameters
EXPECT_THROW(HostMgr::addBackend(connectionString(
- PGSQL_VALID_TYPE, NULL, VALID_HOST, INVALID_USER, VALID_PASSWORD)),
+ PGSQL_VALID_TYPE, 0, VALID_HOST, INVALID_USER, VALID_PASSWORD)),
NoDatabaseName);
+ // Check for password file.
+ EXPECT_NO_THROW(HostMgr::addBackend(connectionString(
+ PGSQL_VALID_TYPE, VALID_NAME, VALID_HOST, VALID_USER, VALID_FILE)));
+
// Check for SSL/TLS support.
if (hasPgSQLTls()) {
EXPECT_NO_THROW(HostMgr::addBackend(connectionString(
EXPECT_THROW(HostMgr::addBackend(connectionString(
PGSQL_VALID_TYPE, VALID_NAME, VALID_HOST, VALID_USER, DEFAULT_PASSWORD)),
DefaultCredential);
+ EXPECT_THROW(HostMgr::addBackend(connectionString(
+ PGSQL_VALID_TYPE, VALID_NAME, VALID_HOST, VALID_USER, NOT_EXIST_FILE)),
+ BadValue);
+ EXPECT_THROW(HostMgr::addBackend(connectionString(
+ PGSQL_VALID_TYPE, VALID_NAME, VALID_HOST, VALID_USER, INVALID_FILE)),
+ DbOpenError);
EXPECT_THROW(HostMgr::addBackend(connectionString(
PGSQL_VALID_TYPE, VALID_NAME, VALID_HOST, VALID_USER, VALID_PASSWORD, INVALID_TIMEOUT_1)),
DbInvalidTimeout);
// Check for missing parameters
EXPECT_THROW(HostMgr::addBackend(connectionString(
- PGSQL_VALID_TYPE, NULL, VALID_HOST, INVALID_USER, VALID_PASSWORD)),
+ PGSQL_VALID_TYPE, 0, VALID_HOST, INVALID_USER, VALID_PASSWORD)),
NoDatabaseName);
+ // Check for password file.
+ EXPECT_NO_THROW(HostMgr::addBackend(connectionString(
+ PGSQL_VALID_TYPE, VALID_NAME, VALID_HOST, VALID_USER, VALID_FILE)));
+
// Tidy up after the test
destroyPgSQLSchema();
}
PGSQL_VALID_TYPE, VALID_NAME, VALID_HOST, VALID_USER, DEFAULT_PASSWORD)),
isc::data::DefaultCredential);
+ EXPECT_THROW(LeaseMgrFactory::create(connectionString(
+ PGSQL_VALID_TYPE, VALID_NAME, VALID_HOST, VALID_USER, NOT_EXIST_FILE)),
+ BadValue);
+
+ // See invalid password comment.
+ EXPECT_THROW(LeaseMgrFactory::create(connectionString(
+ PGSQL_VALID_TYPE, VALID_NAME, VALID_HOST, VALID_USER, INVALID_FILE)),
+ DbOpenError);
+
// Check for invalid timeouts
EXPECT_THROW(LeaseMgrFactory::create(connectionString(
PGSQL_VALID_TYPE, VALID_NAME, VALID_HOST, VALID_USER, VALID_PASSWORD, INVALID_TIMEOUT_1)),
// Check for missing parameters
EXPECT_THROW(LeaseMgrFactory::create(connectionString(
- PGSQL_VALID_TYPE, NULL, VALID_HOST, VALID_USER, VALID_PASSWORD)),
+ PGSQL_VALID_TYPE, 0, VALID_HOST, VALID_USER, VALID_PASSWORD)),
NoDatabaseName);
+ // Check for password file.
+ EXPECT_NO_THROW(LeaseMgrFactory::create(connectionString(
+ PGSQL_VALID_TYPE, VALID_NAME, VALID_HOST, VALID_USER, VALID_FILE)));
+
// Check for SSL/TLS support.
if (hasPgSQLTls()) {
EXPECT_NO_THROW(LeaseMgrFactory::create(connectionString(
testUpdateStatsOn4DifferentSubnet();
}
-TEST_F(PgSqlLeaseMgrTest, updateStatsOn6SameSubnet) {
+TEST_F(PgSqlLeaseMgrTest, updateStatsOn6SameSubnet) {
testUpdateStatsOn6SameSubnet();
}
-TEST_F(PgSqlLeaseMgrTest, updateStatsOn6SameSubnetPD) {
+TEST_F(PgSqlLeaseMgrTest, updateStatsOn6SameSubnetPD) {
testUpdateStatsOn6SameSubnetPD();
}
-TEST_F(PgSqlLeaseMgrTest, updateStatsOn6DifferentSubnet) {
+TEST_F(PgSqlLeaseMgrTest, updateStatsOn6DifferentSubnet) {
testUpdateStatsOn6DifferentSubnet();
}
-TEST_F(PgSqlLeaseMgrTest, updateStatsOn6DifferentSubnetPD) {
+TEST_F(PgSqlLeaseMgrTest, updateStatsOn6DifferentSubnetPD) {
testUpdateStatsOn6DifferentSubnetPD();
}
subdir_done()
endif
+current_source_dir = meson.current_source_dir()
kea_database_testutils_lib = static_library(
'kea-database-testutils',
'schema.cc',
- cpp_args: [f'-DTEST_CA_DIR="@TEST_CA_DIR@"'],
+ cpp_args: [
+ f'-DTEST_CA_DIR="@TEST_CA_DIR@"',
+ f'-DFILE_DIR="@current_source_dir@"',
+ ],
dependencies: [GTEST_DEP],
include_directories: [include_directories('.')] + INCLUDES,
)
const char* VALID_PASSWORD = "password=keatest";
const char* INVALID_PASSWORD = "password=invalid";
const char* DEFAULT_PASSWORD = "password=1234";
+const char* VALID_FILE = "password-file=" FILE_DIR "/password";
+const char* NOT_EXIST_FILE = "password-file=" FILE_DIR "/does-not-exit";
+const char* INVALID_FILE = "password-file=" FILE_DIR "/bad-password";
const char* VALID_TIMEOUT = "connect-timeout=10";
const char* INVALID_TIMEOUT_1 = "connect-timeout=foo";
const char* INVALID_TIMEOUT_2 = "connect-timeout=-17";
extern const char* VALID_PASSWORD;
extern const char* INVALID_PASSWORD;
extern const char* DEFAULT_PASSWORD;
+extern const char* VALID_FILE;
+extern const char* NOT_EXIST_FILE;
+extern const char* INVALID_FILE;
extern const char* VALID_TIMEOUT;
extern const char* INVALID_TIMEOUT_1;
extern const char* INVALID_TIMEOUT_2;
if (!spassword_file.empty()) {
// This can throw.
spassword = util::file::getContent(spassword_file);
+ dbconnparameters += " password = '" + spassword + "'";
}
if (!spassword.empty()) {
// Refuse default password.