Re: [RFC] w using logind instead of utmp

"Thorsten Kukuk" <[email protected]> ("kukuk") Tue, 13 Jun 2023 07:16:21 +0000
Newsgroups gmane.linux.procps.devel
Message-ID <[email protected]>
Hi,

On Tue, Jun 13, Craig Small wrote:

> On Fri, 9 Jun 2023 at 23:27, Thorsten Kukuk <[email protected]>
> wrote:
> 
> 
>     with w there is one binary left which only uses utmp, here is a patch to
>     add logind support, too.
> 
> OK, thanks for looking into this.
>  
> 
>     systemd-logind v245 (or current git) will be necessary for this, as only
>     this version has all the APIs to access the data.
> 
> The autoconf only checks for sd_session_get_leader() but I see that you have
> ringfenced a few systemd functions with that define. That would imply to me
> that either
> 1) You can't use those functions without the information from the
> sd_session_get_leader(); or
> 2) They are introduced at the same time (e.g. in v254

sd_session_get_leader() was the last added function, all other functions
are older. So if sd_session_get_leader() is present, all other functions
should be present, too. I doubt that anybody builds a systemd version
and manually removes single, older functions.

> What I'm concerned here is the compile time works but those functions are not
> present. What happens then? It looks like its doing the right thing here but
> confirming it would be great.

This are libsystemd functions. They use the same symbol versioning as
glibc is using. So if you compile with a newer libsystemd and run it
with an older libsystemd, you will get the same function not found errors.

If you use a newer libsystemd with an older systemd-logind: also no
problem, it will continue to work. systemd-logind provides the data
since the beginning, only the libsystemd API was missing.

> Also, I think what you're doing here is iterating through what sd_get_sessions
> returns which is an array of sessions. For all the subsequent functions,
> session==NULL means that sd_get_sessions didn't
> have any sessions so we're not running on a systemd system?

No, it means nobody is logged in.
sd_booted() determines, if systemd is running or not.

> Not sure about all the conditional function calls/definitions, it might be
> better always to pass the session even when it's NULL (e.g. not compiled with
> systemd). On the one hand, it means we aren't meaninglessly passing that
> pointer, on the other it makes all the function definitions messier.

That what I was thinking about, too, but was unsure. And you would get
"unused arguments" warnings/errors.

  Thorsten

> I'll compile it in soon and let you know.
> 
>  - Craig
> 
> 
> 
>     Would it be Ok this way? Or what to change?
> 
>      Thorsten
>     --
>     Thorsten Kukuk, Distinguished Engineer, Senior Architect, Future
>     Technologies
>     SUSE Software Solutions Germany GmbH, Frankenstraße 146, 90461 Nuernberg,
>     Germany
>     Managing Director: Ivo Totev, Andrew Myers, Andrew McDonald, Martje Boudien
>     Moerman
>     (HRB 36809, AG Nürnberg)
> 

-- 
Thorsten Kukuk, Distinguished Engineer, Senior Architect, Future Technologies
SUSE Software Solutions Germany GmbH, Frankenstraße 146, 90461 Nuernberg, Germany
Managing Director: Ivo Totev, Andrew Myers, Andrew McDonald, Martje Boudien Moerman
(HRB 36809, AG Nürnberg)