From 0e15cdd2843e58c1a916a2d4bc27910331c1f43e Mon Sep 17 00:00:00 2001 From: Georg Sauthoff Date: Thu, 15 Mar 2018 22:18:27 +0100 Subject: [PATCH] Use psinfo as fallback [gu]id source on Solaris 10 fixes #1193 --- psutil/_pssunos.py | 25 +++++++++++++++++++++---- psutil/_psutil_sunos.c | 10 ++++++---- 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/psutil/_pssunos.py b/psutil/_pssunos.py index eb9d8b14f3..93dbb125bf 100644 --- a/psutil/_pssunos.py +++ b/psutil/_pssunos.py @@ -79,7 +79,11 @@ nice=4, num_threads=5, status=6, - ttynr=7) + ttynr=7, + uid=8, + euid=9, + gid=10, + egid=11) # ===================================================================== @@ -394,7 +398,10 @@ def _proc_basic_info(self): @memoize_when_activated def _proc_cred(self): - return cext.proc_cred(self.pid, self._procfs_path) + @wrap_exceptions + def proc_cred(self): + return cext.proc_cred(self.pid, self._procfs_path) + return proc_cred(self) @wrap_exceptions def name(self): @@ -454,12 +461,22 @@ def ppid(self): @wrap_exceptions def uids(self): - real, effective, saved, _, _, _ = self._proc_cred() + try: + real, effective, saved, _, _, _ = self._proc_cred() + except AccessDenied: + real = self._proc_basic_info()[proc_info_map['uid']] + effective = self._proc_basic_info()[proc_info_map['euid']] + saved = None return _common.puids(real, effective, saved) @wrap_exceptions def gids(self): - _, _, _, real, effective, saved = self._proc_cred() + try: + _, _, _, real, effective, saved = self._proc_cred() + except AccessDenied: + real = self._proc_basic_info()[proc_info_map['gid']] + effective = self._proc_basic_info()[proc_info_map['egid']] + saved = None return _common.puids(real, effective, saved) @wrap_exceptions diff --git a/psutil/_psutil_sunos.c b/psutil/_psutil_sunos.c index 4d38a34234..99bf5d3299 100644 --- a/psutil/_psutil_sunos.c +++ b/psutil/_psutil_sunos.c @@ -102,17 +102,19 @@ psutil_proc_basic_info(PyObject *self, PyObject *args) { if (! psutil_file_to_struct(path, (void *)&info, sizeof(info))) return NULL; return Py_BuildValue( - "ikkdiiik", + "ikkdiiikiiii", info.pr_ppid, // parent pid info.pr_rssize, // rss info.pr_size, // vms PSUTIL_TV2DOUBLE(info.pr_start), // create time - // XXX - niceness is wrong (20 instead of 0), see: - // https://github.com/giampaolo/psutil/issues/1082 info.pr_lwp.pr_nice, // nice info.pr_nlwp, // no. of threads info.pr_lwp.pr_state, // status code - info.pr_ttydev // tty nr + info.pr_ttydev, // tty nr + (int)info.pr_uid, // real user id + (int)info.pr_euid, // effective user id + (int)info.pr_gid, // real group id + (int)info.pr_egid // effective group id ); }