As requested, here's the same test case a little more readable:

This leaves a backdoor open (possibly in the saved UID):

======================================
#!/usr/bin/perl -wT

use strict;
use English qw(-no_match_vars);

sub ids { print "RUID=$REAL_USER_ID EUID=$EFFECTIVE_USER_ID\n" }

ids;
$REAL_USER_ID = 1000;
$EFFECTIVE_USER_ID = 1000;
ids;
$REAL_USER_ID = $EFFECTIVE_USER_ID = 0;
ids;

======================================
OUTPUT:

RUID=1000 EUID=0
RUID=1000 EUID=1000
RUID=0 EUID=0


Still, changing the order of the "*_USER_ID = 1000" lines or using 
POSIX::setuid(1000) works as expected.

Christopher

Reply via email to