]> git.saurik.com Git - apt.git/commitdiff
Make root group configurable via ROOT_GROUP
authorJulian Andres Klode <jak@debian.org>
Thu, 25 Aug 2016 14:25:00 +0000 (16:25 +0200)
committerJulian Andres Klode <jak@debian.org>
Fri, 26 Aug 2016 20:24:25 +0000 (22:24 +0200)
This is needed on BSD where root's default group is wheel, not
root.

CMake/config.h.in
CMakeLists.txt
apt-pkg/acquire-item.cc
apt-pkg/acquire-worker.cc
apt-pkg/acquire.cc
apt-pkg/indexcopy.cc

index c23254929b045c74374d7363c95bc4ad186cde39..6f39e2f5808bd20410d7fe259e664a45c3df8935 100644 (file)
@@ -64,6 +64,9 @@
 #cmakedefine LIBEXEC_DIR "${LIBEXEC_DIR}"
 #cmakedefine BIN_DIR "${BIN_DIR}"
 
+/* Group of the root user */
+#cmakedefine ROOT_GROUP "${ROOT_GROUP}"
+
 #define APT_8_CLEANER_HEADERS
 #define APT_9_CLEANER_HEADERS
 #define APT_10_CLEANER_HEADERS
index 91609086626bc2db38491d119bddb5b1e965a9d3..24c58a0f8ad55ac6603b99430e798d385695bad2 100644 (file)
@@ -170,6 +170,12 @@ if (NOT DEFINED COMMON_ARCH)
   execute_process(COMMAND dpkg-architecture -qDEB_HOST_ARCH
                   OUTPUT_VARIABLE COMMON_ARCH OUTPUT_STRIP_TRAILING_WHITESPACE)
 endif()
+if (NOT DEFINED ROOT_GROUP)
+  execute_process(COMMAND id -gn root
+                  OUTPUT_VARIABLE ROOT_GROUP OUTPUT_STRIP_TRAILING_WHITESPACE)
+  message(STATUS "Found root group: ${ROOT_GROUP}")
+endif()
+set(ROOT_GROUP "${ROOT_GROUP}" CACHE STRING "Group of root (e.g.: wheel or root)")
 
 # Set various directories
 set(STATE_DIR "${CMAKE_INSTALL_FULL_LOCALSTATEDIR}/lib/apt" CACHE PATH "Your /var/lib/apt")
index f715e060ebe43bad680600dc3a4e3b08331a189e..88b5a58b56896f2dae393fb6acce4289adbbc1ea 100644 (file)
@@ -3440,7 +3440,7 @@ void pkgAcqChangelog::Init(std::string const &DestDir, std::string const &DestFi
    TemporaryDirectory = tmpname;
 
    ChangeOwnerAndPermissionOfFile("Item::QueueURI", TemporaryDirectory.c_str(),
-        SandboxUser.c_str(), "root", 0700);
+        SandboxUser.c_str(), ROOT_GROUP, 0700);
 
    DestFile = flCombine(TemporaryDirectory, DestFileName);
    if (DestDir.empty() == false)
index a4fbc765157b4ee0f410b014a5ee28800ab11b76..7afbec72a243e99e8a020490aa14a776ef3ad7fe 100644 (file)
@@ -732,7 +732,7 @@ bool pkgAcquire::Worker::QueueItem(pkgAcquire::Queue::QItem *Item)
    {
       std::string const SandboxUser = _config->Find("APT::Sandbox::User");
       ChangeOwnerAndPermissionOfFile("Item::QueueURI", Item->Owner->DestFile.c_str(),
-                                     SandboxUser.c_str(), "root", 0600);
+                                     SandboxUser.c_str(), ROOT_GROUP, 0600);
    }
 
    if (Debug == true)
@@ -828,7 +828,7 @@ void pkgAcquire::Worker::PrepareFiles(char const * const caller, pkgAcquire::Que
 {
    if (RealFileExists(Itm->Owner->DestFile))
    {
-      ChangeOwnerAndPermissionOfFile(caller, Itm->Owner->DestFile.c_str(), "root", "root", 0644);
+      ChangeOwnerAndPermissionOfFile(caller, Itm->Owner->DestFile.c_str(), "root", ROOT_GROUP, 0644);
       std::string const filename = Itm->Owner->DestFile;
       for (pkgAcquire::Queue::QItem::owner_iterator O = Itm->Owners.begin(); O != Itm->Owners.end(); ++O)
       {
index 33c98cf2e7527539cbdcc4eae5f1609606388953..b5f88e1b39a6e929105fd77862f449fa1c1e973b 100644 (file)
@@ -80,7 +80,7 @@ void pkgAcquire::Initialize()
    if (getuid() == 0 && SandboxUser.empty() == false && SandboxUser != "root") // if we aren't root, we can't chown, so don't try it
    {
       struct passwd const * const pw = getpwnam(SandboxUser.c_str());
-      struct group const * const gr = getgrnam("root");
+      struct group const * const gr = getgrnam(ROOT_GROUP);
       if (pw != NULL && gr != NULL)
       {
         std::string const AuthConf = _config->FindFile("Dir::Etc::netrc");
@@ -106,7 +106,7 @@ static bool SetupAPTPartialDirectory(std::string const &grand, std::string const
    if (getuid() == 0 && SandboxUser.empty() == false && SandboxUser != "root") // if we aren't root, we can't chown, so don't try it
    {
       struct passwd const * const pw = getpwnam(SandboxUser.c_str());
-      struct group const * const gr = getgrnam("root");
+      struct group const * const gr = getgrnam(ROOT_GROUP);
       if (pw != NULL && gr != NULL)
       {
          // chown the partial dir
index 4a35e3847005bd32dcb4812bceb45a0f7aa62997..ca5c42cb78149d88355670de28d9456953038422 100644 (file)
@@ -207,7 +207,7 @@ bool IndexCopy::CopyPackages(string CDROM,string Name,vector<string> &List,
         FinalF += URItoFileName(S);
         if (rename(TargetF.c_str(),FinalF.c_str()) != 0)
            return _error->Errno("rename","Failed to rename");
-        ChangeOwnerAndPermissionOfFile("CopyPackages", FinalF.c_str(), "root", "root", 0644);
+        ChangeOwnerAndPermissionOfFile("CopyPackages", FinalF.c_str(), "root", ROOT_GROUP, 0644);
       }
 
       /* Mangle the source to be in the proper notation with
@@ -531,7 +531,7 @@ bool SigVerify::CopyMetaIndex(string CDROM, string CDName,          /*{{{*/
       Rel.Open(prefix + file,FileFd::ReadOnly);
       if (CopyFile(Rel,Target) == false || Target.Close() == false)
         return _error->Error("Copying of '%s' for '%s' from '%s' failed", file.c_str(), CDName.c_str(), prefix.c_str());
-      ChangeOwnerAndPermissionOfFile("CopyPackages", TargetF.c_str(), "root", "root", 0644);
+      ChangeOwnerAndPermissionOfFile("CopyPackages", TargetF.c_str(), "root", ROOT_GROUP, 0644);
 
       return true;
 }
@@ -738,7 +738,7 @@ bool TranslationsCopy::CopyTranslations(string CDROM,string Name,   /*{{{*/
         FinalF += URItoFileName(S);
         if (rename(TargetF.c_str(),FinalF.c_str()) != 0)
            return _error->Errno("rename","Failed to rename");
-        ChangeOwnerAndPermissionOfFile("CopyTranslations", FinalF.c_str(), "root", "root", 0644);
+        ChangeOwnerAndPermissionOfFile("CopyTranslations", FinalF.c_str(), "root", ROOT_GROUP, 0644);
       }
 
       CurrentSize += FileSize;