dash.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* $ENV handling depends on defined(linux), why??
@ 2021-10-13  9:39 Denys Vlasenko
  2021-10-13  9:55 ` Harald van Dijk
  0 siblings, 1 reply; 4+ messages in thread
From: Denys Vlasenko @ 2021-10-13  9:39 UTC (permalink / raw)
  To: DASH shell mailing list

I was looking at this bit:

        if (
#ifndef linux
                getuid() == geteuid() && getgid() == getegid() &&
#endif
                iflag
        ) {
                if ((shinit = lookupvar("ENV")) != NULL && *shinit != '\0') {
                        read_profile(shinit);
                }
        }

thinking "condition order is wrong, if !iflag, calling getuid()
is pointless, we waste 4 syscalls" but then I noticed
"#ifndef linux". So, the inefficiency is not biting me, a linux user...

...but wait. (1) this check says "if we are setuid and run by non-root,
do not source $ENV". Who in their right mind would have a *setuid*
shell executable on any system where security matters?
IOW: this code is pointless anyway even for non-linux users.
And
(2) If there is some sort of standard language somewhere which says
this logic has to exist, then why we don't do this on linux?

git history shows it was there in initial import.

I propose to delete entire #ifndef/#endif block. It's likely wrong.

Alternatively, move "iflag" above "getuid() == geteuid()" checks.

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2021-10-13 21:31 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-10-13  9:39 $ENV handling depends on defined(linux), why?? Denys Vlasenko
2021-10-13  9:55 ` Harald van Dijk
2021-10-13 19:17   ` Denys Vlasenko
2021-10-13 21:31     ` Harald van Dijk

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).