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)