From: Michael Vogt <mvo@debian.org>
Date: Mon, 25 Jan 2016 15:49:48 +0000 (+0100)
Subject: Store "Requested-By" user in history.log in a simpler format
X-Git-Tag: 1.2.1~2
X-Git-Url: https://git.saurik.com/apt.git/commitdiff_plain/46e88ba252230858abe891d5815fce884d3cf35d

Store "Requested-By" user in history.log in a simpler format

Git-Dch: ignore
Thanks: David Kalnischkies
---

diff --git a/apt-pkg/deb/dpkgpm.cc b/apt-pkg/deb/dpkgpm.cc
index e94a8cfdc..6751e9779 100644
--- a/apt-pkg/deb/dpkgpm.cc
+++ b/apt-pkg/deb/dpkgpm.cc
@@ -56,18 +56,30 @@
 using namespace std;
 
 APT_PURE static string
-AptHistoryUser()
+AptHistoryRequestingUser()
 {
-   stringstream out;
-   const char* env[]{"SUDO_USER", "PKEXEC_UID", nullptr};
+   const char* env[]{
+      "SUDO_UID", "PKEXEC_UID", "PACKAGEKIT_CALLER_UID", nullptr
+   };
+
    for (int i=0; env[i] != nullptr; i++)
    {
       if (getenv(env[i]) != nullptr)
       {
-         out << env[i] << "=" << getenv(env[i]) << " ";
+         int uid = atoi(getenv(env[i]));
+         if (uid > 0) {
+            struct passwd pwd;
+            struct passwd *result;
+            char buf[255];
+            if (getpwuid_r(uid, &pwd, buf, sizeof(buf), &result) == 0 && result != NULL) {
+               std::string res;
+               strprintf(res, "%s (%d)", pwd.pw_name, uid);
+               return res;
+            }
+         }
       }
    }
-   return out.str();
+   return "";
 }
 
 APT_PURE static unsigned int
@@ -892,8 +904,9 @@ bool pkgDPkgPM::OpenLog()
       }
       if (_config->Exists("Commandline::AsString") == true)
 	 WriteHistoryTag("Commandline", _config->Find("Commandline::AsString"));
-      if (AptHistoryUser() != "")
-         WriteHistoryTag("Requested-By", AptHistoryUser());
+      std::string RequestingUser = AptHistoryRequestingUser();
+      if (RequestingUser != "")
+         WriteHistoryTag("Requested-By", RequestingUser);
       WriteHistoryTag("Install", install);
       WriteHistoryTag("Reinstall", reinstall);
       WriteHistoryTag("Upgrade", upgrade);