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

