[comp.unix.programmer] Where does ps

tar@hilbert.math.ksu.edu (Tim Ramsey) (12/03/90)

I'm running SunOS 4.1 on a SPARCserver 330.  I have a setuid root program
that I'm working with.  I want it to give up its euid until it does some
final cleanup, where I want to restore the setuid root privs.  SunOS 4.1
saves the set-user ID at exec.

Here's a pseudocode snippit:

main() {
   ...
   initialize();
   ...
   cleanup();
   ...
}

initialize() {
   ...
   setreuid(-1, getuid());
   printf("ruid: %d, euid: %d\n", getuid(), geteuid());
}

cleanup() {
   setreuid(-1, 0);
   printf("ruid: %d, euid: %d\n", getuid(), geteuid());
}

The first printf shows the euid has been set to the ruid.  However, ps
shows the UID as 0:

       F UID   PID  PPID CP PRI NI  SZ  RSS WCHAN    STAT TT  TIME COMMAND
20008001   0  8841  7404  1  15  0 288 1304 select   S    p4  0:00 snippit

ofiles, among other programs, shows the process running with uid == mine.
Where is ps getting this?  Could it be using the saved set-user ID?  The
second setreuid succeeds in setting the euid back to 0.

As a further data point, if I replace the setreuid() in initialize() with
setuid(), ps shows the process running with my uid (which is correct).
However, the setreuid() in cleanup() then fails with EPERM.  Replacing
setreuid() with setuid() fails as well.

Can anyone explain what ps is showing me, and why setuid() seems to unset
the saved set-user ID?  Please email your responses; I'll post a summary
if asked.

Thanks,

Tim
--
Tim Ramsey (tar@math.ksu.edu)   (913) 532-6750 (voice)  532-7004 (FAX)
Department of Mathematics, Kansas State University, Manhattan KS 66506