Pádraig Brady <[email protected]> writes:

> Note there was worry about redundant linking with -lsystemd
> when getlogin() is not replaced, however that is mitigated
> in general with the --as-needed linker option (the lib-ignore
> gnulib module). Tested with:
>
>   ./configure --with-systemd gl_cv_func_getlogin_works=no
>
> * NEWS: Mention the Build-related fix.
> Reported at https://bugs.debian.org/1129960

Agreed regarding a lib-ignore. It makes life much easier, and I assume
any platform we really care about supports it.

> ---
>  NEWS         | 3 +++
>  src/local.mk | 1 +
>  2 files changed, 4 insertions(+)
>
> diff --git a/NEWS b/NEWS
> index 3edfbd502..cf9334ef0 100644
> --- a/NEWS
> +++ b/NEWS
> @@ -142,6 +142,9 @@ GNU coreutils NEWS                                    -*- 
> outline -*-
>  
>  ** Build-related
>  
> +  'logname' now builds, where getlogin() is replaced (e.g. with musl),
> +  and systemd libs are being used, by linking the required libraries.
> +
>    The multi-call binary built with configure --enable-single-binary is 
> reduced
>    in size by around 10KB through the more efficient reuse of the 'test' code
>    by '[', and the 'true' code by 'false'.
> diff --git a/src/local.mk b/src/local.mk
> index cf13f1339..6ed4ed78f 100644
> --- a/src/local.mk
> +++ b/src/local.mk
> @@ -344,6 +344,7 @@ src_pinky_LDADD += $(READUTMP_LIB)
>  src_uptime_LDADD += $(READUTMP_LIB)
>  src_users_LDADD += $(READUTMP_LIB)
>  src_who_LDADD += $(READUTMP_LIB)
> +src_logname_LDADD += $(READUTMP_LIB)
>  
>  # for strsignal
>  src_kill_LDADD += $(LIBTHREAD)

I see, we replaced getlogin on musl since there it just uses [1]:

    getenv ("LOGNAME")

which is incorrect according to POSIX [2]:

    The logname utility shall write the user's login name to standard
    output. The login name shall be the string that would be returned by
    the getlogin() function defined in the System Interfaces volume of
    POSIX.1-2024.

    [...]

    The logname utility explicitly ignores the LOGNAME environment
    variable because environment changes could produce erroneous
    results.

I assume the musl developers implemented it incorrectly on purpose
because they dislike utmp/wtmp [3].

Since systemd supporting musl, at least experimentally, is relatively
new excluding it was mostly fine up until now.

Collin

[1] 
https://github.com/kraj/musl/blob/cec26f5164f0deede51ed36591f58fca19c10795/src/unistd/getlogin.c#L6
[2] https://pubs.opengroup.org/onlinepubs/9799919799/utilities/logname.html
[3] 
https://wiki.musl-libc.org/faq.html#Q:-Why-is-the-utmp/wtmp-functionality-only-implemented-as-stubs?

Reply via email to