#!/usr/bin/perl -w use strict; use English; my $user=shift; my ($name, $uid, $gid, $home, $shell); if ($user!~/^\d+$/) { ($name,$uid,$gid,$home,$shell)=(getpwnam($user))[0,2,3,7,8]; } else { ($name,$uid,$gid,$home,$shell)=(getpwuid($user))[0,2,3,7,8]; } if (!defined($name) or !defined($uid) or !defined($gid)) { die "Failed to get passwd entry for $user: $!\n"; } $GID = $EGID = "$gid $gid"; $UID = $EUID = $uid; my $term=undef; $term=$ENV{'TERM'} if (defined($ENV{'TERM'})); %ENV=( 'USER' => $name, 'USERNAME' => $name, 'LOGNAME' => $name, 'HOME' => $home, 'SHELL' => $shell, 'PATH' => '/bin:/usr/bin:/usr/local/bin', ); $ENV{'TERM'}=$term if (defined($term)); exec @ARGV or die "exec failed: $!";