Wed Dec 22 06:24:46 2010: Request 63801 was acted upon.
Transaction: Correspondence added by arost
       Queue: PAR-Packer
     Subject: setuid pp'ed scripts: 1st invocation fails, 2nd+ call ok
   Broken in: 1.008
    Severity: Wishlist
       Owner: Nobody
  Requestors: bitc...@post2.25u.com
      Status: open
 Ticket <URL: https://rt.cpan.org/Ticket/Display.html?id=63801 >


On Wed Dec 22 05:00:46 2010, RSCHUPP wrote:
> On 2010-12-21 10:56:00, arost wrote:
> [...]
> > Or, as suggested before, maybe it's even better to
> > make cache handling independent of the applications current effective
> > user id. Which makes sense, since the cache handling (I think) is
> > something that should be completely transparent to the application.
> 
> No, it doesn't make sense: the cache is per user (for a reason)
> and YOU break transparency by "switching users" in midstream.
> Sorry, but this not different from e.g. a script manipulating
> @INC in nasty ways at runtime or invoking $^X.

I don't agree to that. For @INC, I know that @INC can be subject to
external settings in the environment and that @INC affects the runtime
behaviour of my Perl application - so I know that I have to be careful fiddling
with that, no matter if pp'ed or not. Also for $^X, I'd _expect_ things
to be different in a pp'ed world.

setuid(), in contrast, is a systemcall like any other, which normally
has no impact on the behaviour of a Perl application (from a Perl point
of view), so in that sense, it is completely orthogonal to the world of
Perl. In the pp'ed Perl world, this is no longer true.

The per-user nature of caching I don't question at all - my suggestion is
rather to _enforce_ its per-user nature, by _always_ accessing the cache with 
the
real user id, and _not_ taking into account any later changes to the
effective user id.

> Actually, it's not the use of sudo per se - it's your script
> calling setuid at runtime.

Yep. So, to summarize, pp users must be aware of these three
points then:
1/ do not use setuid
2/ do not use POSIX::setuid(), and do not modify $>/$)
3/ if 2/ cannot be avoided, then workaround the PAR cache problems by
   a) use Archive::Unzip::Burst, and
   b) explicitly require any "leftovers" before the first call
      to setuid()

Cheers/alex

Reply via email to