diff --git a/openeuler-uptime-Fix-uptime-return-0-user-when-systemd-pam-is-.patch b/openeuler-uptime-Fix-uptime-return-0-user-when-systemd-pam-is-.patch new file mode 100644 index 0000000000000000000000000000000000000000..8789db8e3d297abc5d20ececc2cb84a900287d00 --- /dev/null +++ b/openeuler-uptime-Fix-uptime-return-0-user-when-systemd-pam-is-.patch @@ -0,0 +1,29 @@ +From 600cc2dff859aac525d62000316d957846da4a66 Mon Sep 17 00:00:00 2001 +From: Chao Liu +Date: Tue, 7 May 2024 03:42:34 +0000 +Subject: [PATCH 1/2] uptime: Fix uptime return 0 user when systemd-pam is not + installed + +When systemd-pam is not installed, systemd won't create files in /run/systemd/sessions/ and sd_get_sessions will return 0. However, the actual number of users is not 0. When sd_get_sessions return 0, uptime should use getutxent for statistics. +--- + library/uptime.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/library/uptime.c b/library/uptime.c +index 52720cbc..0db38ee5 100644 +--- a/library/uptime.c ++++ b/library/uptime.c +@@ -71,7 +71,9 @@ PROCPS_EXPORT int procps_users(void) + + #if defined(WITH_SYSTEMD) || defined(WITH_ELOGIND) + if (sd_booted() > 0) +- return sd_get_sessions(NULL); ++ numuser = sd_get_sessions(NULL); ++ if (numuser > 0) ++ return numuser; + #endif + + setutent(); +-- +2.33.0 + diff --git a/openeuler-w-Fix-w-print-0-user-when-systemd-pam-is-not-install.patch b/openeuler-w-Fix-w-print-0-user-when-systemd-pam-is-not-install.patch new file mode 100644 index 0000000000000000000000000000000000000000..c11e99e74c03c97f4e28e8dd7f52c7eba335556f --- /dev/null +++ b/openeuler-w-Fix-w-print-0-user-when-systemd-pam-is-not-install.patch @@ -0,0 +1,82 @@ +From c0c707ac435d6318fa8d5542906599867877465a Mon Sep 17 00:00:00 2001 +From: Chao Liu +Date: Tue, 7 May 2024 07:20:34 +0000 +Subject: [PATCH 2/2] w: Fix w print 0 user when systemd-pam is not +installed + +Signed-off-by: SuperSix173 +--- + src/w.c | 53 ++++++++++++++++++++++++++--------------------------- + 1 file changed, 26 insertions(+), 27 deletions(-) + +diff --git a/src/w.c b/src/w.c +index fd6e75f..8e30e5d 100644 +--- a/src/w.c ++++ b/src/w.c +@@ -805,37 +805,36 @@ int main(int argc, char **argv) + printf(_(" IDLE WHAT\n")); + } + #if (defined(WITH_SYSTEMD) || defined(WITH_ELOGIND)) && defined(HAVE_SD_SESSION_GET_LEADER) +- if (sd_booted() > 0) { +- char **sessions_list; +- int sessions; +- int i; ++ char **sessions_list; ++ int sessions = 0; + ++ if (sd_booted() > 0) + sessions = sd_get_sessions (&sessions_list); +- if (sessions < 0 && sessions != -ENOENT) +- error(EXIT_FAILURE, -sessions, _("error getting sessions")); +- +- if (sessions >= 0) { +- for (int i = 0; i < sessions; i++) { +- char *name; +- int r; +- +- if ((r = sd_session_get_username(sessions_list[i], &name)) < 0) +- error(EXIT_FAILURE, -r, _("get user name failed")); +- +- if (user) { +- if (!strcmp(name, user)) +- showinfo(sessions_list[i], name, NULL, longform, +- maxcmd, from, userlen, fromlen, +- ip_addresses, pids); +- } else { +- showinfo(sessions_list[i], name, NULL, longform, maxcmd, +- from, userlen, fromlen, ip_addresses, pids); +- } +- free(name); +- free(sessions_list[i]); ++ ++ if (sessions < 0 && sessions != -ENOENT) ++ error(EXIT_FAILURE, -sessions, _("error getting sessions")); ++ ++ if (sessions > 0) { ++ for (int i = 0; i < sessions; i++) { ++ char *name; ++ int r; ++ ++ if ((r = sd_session_get_username(sessions_list[i], &name)) < 0) ++ error(EXIT_FAILURE, -r, _("get user name failed")); ++ ++ if (user) { ++ if (!strcmp(name, user)) ++ showinfo(sessions_list[i], name, NULL, longform, ++ maxcmd, from, userlen, fromlen, ++ ip_addresses, pids); ++ } else { ++ showinfo(sessions_list[i], name, NULL, longform, maxcmd, ++ from, userlen, fromlen, ip_addresses, pids); + } +- free(sessions_list); ++ free(name); ++ free(sessions_list[i]); + } ++ free(sessions_list); + } else { + #endif + #ifdef HAVE_UTMPX_H +-- +2.33.0 + diff --git a/procps-ng.spec b/procps-ng.spec index 57e8f86a0c5295771a050b4c7161e83ffc44747a..21a9dfa1bf432dc43d5dd1f4d3192e2df5f0e147 100644 --- a/procps-ng.spec +++ b/procps-ng.spec @@ -1,6 +1,6 @@ Name: procps-ng Version: 4.0.4 -Release: 4 +Release: 5 Summary: Utilities that provide system information. License: GPL+ and GPLv2 and GPLv2+ and GPLv3+ and LGPLv2+ URL: https://sourceforge.net/projects/procps-ng/ @@ -15,6 +15,8 @@ Patch3: backport-library-address-remaining-cpu-distortions-stat-api.patch Patch4: backport-uptime-fix-output-on-60-seconds.patch Patch5: backport-ps-don-t-lose-tasks-when-sort-used-with-forest-mode.patch Patch6: backport-acknowledge-fix-for-the-lost-tasks-ps-issue.patch +Patch7: openeuler-uptime-Fix-uptime-return-0-user-when-systemd-pam-is-.patch +Patch8: openeuler-w-Fix-w-print-0-user-when-systemd-pam-is-not-install.patch BuildRequires: ncurses-devel libtool autoconf automake gcc gettext-devel systemd-devel @@ -97,6 +99,9 @@ ln -s %{_bindir}/pidof %{buildroot}%{_sbindir}/pidof %{_mandir}/man* %changelog +* Thu May 9 2024 Liu Chao - 4.0.4-5 +- uptime/w: fix print 0 user when systemd-pam is not installed + * Thu Apr 25 2024 yinyongkang - 4.0.4-4 - ps: don't lose tasks when --sort used with forest mode