std::string get_process_id ();
}
-class PrivilegeEscalator
-{
-public:
- PrivilegeEscalator ();
- ~PrivilegeEscalator ();
-
- static bool test;
-};
/** @class Waker
* @brief A class which tries to keep the computer awake on various operating systems.
Drive::unmount ()
{
for (auto i: _mount_points) {
- PrivilegeEscalator esc;
int const r = umount(i.string().c_str());
LOG_DISK("Tried to unmount %1 and got %2 and %3", i.string(), r, errno);
if (r == -1) {
}
-void
-unprivileged ()
-{
- uid_t ruid, euid, suid;
- if (getresuid(&ruid, &euid, &suid) == -1) {
- cerr << "getresuid() failed.\n";
- }
- if (seteuid(ruid) == -1) {
- cerr << "seteuid() failed.\n";
- }
-}
-
-
-bool PrivilegeEscalator::test = false;
-
-
-PrivilegeEscalator::~PrivilegeEscalator ()
-{
- if (!test) {
- unprivileged ();
- }
-}
-
-
-PrivilegeEscalator::PrivilegeEscalator ()
-{
- if (!test) {
- int const r = seteuid(0);
- if (r < 0) {
- throw PrivilegeError (String::compose("seteuid() call failed with %1", errno));
- }
- }
-}
-
-
boost::filesystem::path
config_path ()
{
parts.division[2] = 0;
parts.division[3] = 0;
-#ifdef DCPOMATIC_LINUX
- PrivilegeEscalator e;
-#endif
-
/* XXX: not sure if disk_id matters */
int r = ext4_mbr_write (bd, &parts, 0);
if (r) {
/* Some arbitrary file size here */
make_random_file (dcp / "foo", 1024 * 1024 * 32 - 6128);
- PrivilegeEscalator::test = true;
dcpomatic::write (dcp, disk.string(), partition.string(), 0);
BOOST_CHECK_EQUAL (system("/sbin/e2fsck -fn build/test/disk_writer_test1.partition"), 0);