!134 [sync] PR-133: uptime/w: fix print 0 user when systemd-pam is not installed

From: @openeuler-sync-bot 
Reviewed-by: @wangbin224 
Signed-off-by: @wangbin224
This commit is contained in:
openeuler-ci-bot 2024-05-09 11:05:30 +00:00 committed by Gitee
commit 74655f3ca2
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
3 changed files with 117 additions and 1 deletions

View File

@ -0,0 +1,29 @@
From 600cc2dff859aac525d62000316d957846da4a66 Mon Sep 17 00:00:00 2001
From: Chao Liu <liuchao173@huawei.com>
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

View File

@ -0,0 +1,82 @@
From c0c707ac435d6318fa8d5542906599867877465a Mon Sep 17 00:00:00 2001
From: Chao Liu <liuchao173@huawei.com>
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 <liuchao173@huawei.com>
---
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

View File

@ -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 <liuchao173@huawei.com> - 4.0.4-5
- uptime/w: fix print 0 user when systemd-pam is not installed
* Thu Apr 25 2024 yinyongkang <yinyongkang@kylinos.cn> - 4.0.4-4
- ps: don't lose tasks when --sort used with forest mode