Remove privilege escalation via seteuid() etc. on Linux.
authorCarl Hetherington <cth@carlh.net>
Wed, 26 May 2021 07:43:36 +0000 (09:43 +0200)
committerCarl Hetherington <cth@carlh.net>
Wed, 26 May 2021 18:05:49 +0000 (20:05 +0200)
src/lib/cross.h
src/lib/cross_linux.cc
src/lib/ext.cc
test/disk_writer_test.cc

index b70d84a0e23111012a4d7084286d55fbeaf3840e..25b3b38200c601b12f1ebd1f5b842c0e83b14482 100644 (file)
@@ -71,14 +71,6 @@ namespace dcpomatic {
        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.
index 326e590b8b8ce7e2d3840024f06dad240f836d5f..65151791cc820dc4f83ab1317e9418a59ac39aa0 100644 (file)
@@ -371,7 +371,6 @@ bool
 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) {
@@ -382,41 +381,6 @@ Drive::unmount ()
 }
 
 
-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 ()
 {
index 86821bfa11336fcf3c8556c55fea3a41283c2a6b..feba68c1f6eec9c15951b1fa70cf010b6843fafd 100644 (file)
@@ -304,10 +304,6 @@ try
        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) {
index 1146c2e1b9e096345afa2802e78e08ae1cb18901..217032d758f4d99db3a5bd27a9b0e53a1361f66b 100644 (file)
@@ -98,7 +98,6 @@ BOOST_AUTO_TEST_CASE (disk_writer_test1)
        /* 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);