summaryrefslogtreecommitdiff
path: root/apt-pkg/deb/dpkgpm.cc
diff options
context:
space:
mode:
Diffstat (limited to 'apt-pkg/deb/dpkgpm.cc')
-rw-r--r--apt-pkg/deb/dpkgpm.cc27
1 files changed, 20 insertions, 7 deletions
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);