diff options
Diffstat (limited to 'apt-pkg/deb')
-rw-r--r-- | apt-pkg/deb/dpkgpm.cc | 27 |
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); |