mirror of
https://gitlab.isc.org/isc-projects/kea
synced 2025-09-02 15:05:16 +00:00
[#3050] Added Umask RAII and use it
This commit is contained in:
@@ -231,6 +231,9 @@ Daemon::writeConfigFile(const std::string& config_file,
|
|||||||
isc_throw(Unexpected, "Can't write configuration: conversion to JSON failed");
|
isc_throw(Unexpected, "Can't write configuration: conversion to JSON failed");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Remove rights for other from the umask.
|
||||||
|
Umask mask(S_IRWXO);
|
||||||
|
|
||||||
std::ofstream out(config_file, std::ios::trunc);
|
std::ofstream out(config_file, std::ios::trunc);
|
||||||
if (!out.good()) {
|
if (!out.good()) {
|
||||||
isc_throw(Unexpected, "Unable to open file " + config_file + " for writing");
|
isc_throw(Unexpected, "Unable to open file " + config_file + " for writing");
|
||||||
|
@@ -19,7 +19,6 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <sys/stat.h>
|
|
||||||
|
|
||||||
using namespace isc::util::str;
|
using namespace isc::util::str;
|
||||||
using namespace std;
|
using namespace std;
|
||||||
@@ -69,6 +68,14 @@ isFile(string const& path) {
|
|||||||
return ((statbuf.st_mode & S_IFMT) == S_IFREG);
|
return ((statbuf.st_mode & S_IFMT) == S_IFREG);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Umask::Umask(mode_t mask) : orig_umask_(umask(S_IWGRP | S_IWOTH)) {
|
||||||
|
umask(orig_umask_ | mask);
|
||||||
|
}
|
||||||
|
|
||||||
|
Umask::~Umask() {
|
||||||
|
umask(orig_umask_);
|
||||||
|
}
|
||||||
|
|
||||||
Path::Path(string const& full_name) {
|
Path::Path(string const& full_name) {
|
||||||
if (!full_name.empty()) {
|
if (!full_name.empty()) {
|
||||||
bool dir_present = false;
|
bool dir_present = false;
|
||||||
|
@@ -7,6 +7,7 @@
|
|||||||
#ifndef KEA_UTIL_FILESYSTEM_H
|
#ifndef KEA_UTIL_FILESYSTEM_H
|
||||||
#define KEA_UTIL_FILESYSTEM_H
|
#define KEA_UTIL_FILESYSTEM_H
|
||||||
|
|
||||||
|
#include <sys/stat.h>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
namespace isc {
|
namespace isc {
|
||||||
@@ -48,6 +49,23 @@ isDir(const std::string& path);
|
|||||||
bool
|
bool
|
||||||
isFile(const std::string& path);
|
isFile(const std::string& path);
|
||||||
|
|
||||||
|
/// \brief RAII device to limit access of created files.
|
||||||
|
struct Umask {
|
||||||
|
/// \brief Constructor
|
||||||
|
///
|
||||||
|
/// Set wanted bits in umask.
|
||||||
|
Umask(mode_t mask);
|
||||||
|
|
||||||
|
/// \brief Destructor.
|
||||||
|
///
|
||||||
|
/// Restore umask.
|
||||||
|
~Umask();
|
||||||
|
|
||||||
|
private:
|
||||||
|
/// \brief Original umask.
|
||||||
|
mode_t orig_umask_;
|
||||||
|
};
|
||||||
|
|
||||||
/// \brief Paths on a filesystem
|
/// \brief Paths on a filesystem
|
||||||
struct Path {
|
struct Path {
|
||||||
/// \brief Constructor
|
/// \brief Constructor
|
||||||
|
@@ -69,6 +69,18 @@ TEST_F(FileUtilTest, isFile) {
|
|||||||
EXPECT_FALSE(isFile(TEST_DATA_BUILDDIR));
|
EXPECT_FALSE(isFile(TEST_DATA_BUILDDIR));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// @brief Check Umask.
|
||||||
|
TEST_F(FileUtilTest, umask) {
|
||||||
|
// Protect the test itself assuming that Umask does what we expect...
|
||||||
|
Umask m0(0);
|
||||||
|
mode_t orig = umask(0);
|
||||||
|
{
|
||||||
|
Umask m(S_IROTH);
|
||||||
|
EXPECT_EQ(S_IROTH, umask(S_IRWXO));
|
||||||
|
}
|
||||||
|
EXPECT_EQ(0, umask(orig));
|
||||||
|
}
|
||||||
|
|
||||||
/// @brief Check that the components are split correctly.
|
/// @brief Check that the components are split correctly.
|
||||||
TEST(PathTest, components) {
|
TEST(PathTest, components) {
|
||||||
// Complete name
|
// Complete name
|
||||||
|
Reference in New Issue
Block a user