From c08365be03214ef1b5704c487bccaa6f9d211c57 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Tue, 14 May 2019 10:29:47 +0200 Subject: Retry loginctl show-session Sometimes we try to query a session too soon after login. The session is already present in utmp, but not known to logind yet. Retry for those cases. --- src/userlist.c | 3 +++ src/userlist.h | 1 + 2 files changed, 4 insertions(+) diff --git a/src/userlist.c b/src/userlist.c index 6e1f3d2..fffe772 100644 --- a/src/userlist.c +++ b/src/userlist.c @@ -110,6 +110,9 @@ int getUserList( struct user *outbuf, int size ) outbuf[use].sessionLeader = u->ut_pid; getSessionData( &outbuf[use] ); printf( "New Session: '%s' on '%s', Display '%s', logind session '%s', login pid '%d', utmp pid '%d'.\n", outbuf[use].user, outbuf[use].device, outbuf[use].display, outbuf[use].sessionName, (int)outbuf[use].sessionHead, (int)outbuf[use].sessionLeader ); + } else if ( outbuf[use].sessionName[0] == '\0' && outbuf[use].loginctlFails < 5 ) { + getSessionData( &outbuf[use] ); + outbuf[use].loginctlFails++; } outbuf[use].mark = true; // Reset offset if timestamp changed diff --git a/src/userlist.h b/src/userlist.h index c0ffc2f..ca7a70b 100644 --- a/src/userlist.h +++ b/src/userlist.h @@ -17,6 +17,7 @@ struct user { int lastWarnLevel; int lastActivityOffset; int lockTimeOffset; + int loginctlFails; bool mark; bool isLocked; char user[STRLEN]; -- cgit v1.2.3-55-g7522