PerlPowerTools
view release on metacpan or search on metacpan
# Parse and stash away -n switch, if provided
if ($#ARGV >= 0 && $ARGV[0] eq '-n') {
shift (@ARGV);
$~ = "format_n";
}
# Use system mailbox if none was specified on the command line
if ( $#ARGV < 0 ) {
if ( ! ($user = getlogin)) {
@a = getpwuid($<);
$user = $a[0];
}
if ( -r "/var/spool/mail/$user" ) { # Modern systems
@ARGV = ("/var/spool/mail/$user");
}
elsif ( -r "/usr/mail/$user" ) { # System V
@ARGV = ("/usr/mail/$user");
}
elsif ( -r "/usr/spool/mail" ) { # BSD
@ARGV = ("/usr/spool/mail/$user");
warn "$Program: Choose only one of -G, -g, -p, or -u\n";
help();
}
my($user,$pw,$uid,$gid,$tp);
if ( @ARGV ) { # user specified
help() if scalar(@ARGV) > 1;
($user,$pw,$uid,$gid) = getpwnam $ARGV[0];
if (!defined($uid) && $ARGV[0] =~ m/\A[0-9]+\Z/) {
($user,$pw,$uid,$gid) = getpwuid $ARGV[0];
}
unless (defined $uid) {
warn "$Program: $ARGV[0]: No such user\n";
exit EX_FAILURE;
}
}
if ( $opt_u ) { # print uid
$tp = defined $uid ? $uid : $opt_r ? $< : $>;
$tp = scalar getpwuid $tp || $tp if ( $opt_n );
}
elsif ( $opt_g ) { # print gid
$tp = defined $gid ? $gid : (split(/\s+/,($opt_r)?$(:$)))[0];
$tp = scalar getgrgid $tp || $tp if ( $opt_n );
}
elsif ( $opt_p ) { # human-readable form (names when possible, etc.)
my($rgid,@rgids);
if ( $user ) {
$tp.="uid $user\n";
$tp.="rgid $gid\n";
while ( my($name,$pw,$gid,$members) = getgrent ) {
push(@rgids,$gid) if ( grep($_ eq $user,split(/\s+/,$members)) );
}
}
else {
my $login = getlogin;
unless ($login) {
warn "$Program: getlogin failed\n";
exit EX_FAILURE;
}
$tp.="login $login\n" if ( $login ne scalar getpwuid $< );
my($uid) = scalar getpwuid $< || $<;
$tp.="uid $uid\n";
my($euid) = scalar getpwuid $> || $>;
$tp.="euid $euid\n" if ( $< != $> );
($rgid,@rgids)=split(/\s+/,$();
my($egid)=split(/\s+/,$));
my($nrgid) = scalar getgrgid $rgid || $rgid;
my($negid) = scalar getgrgid $egid || $egid;
$tp.="rgid $nrgid\n";
$tp.="egid $negid\n" if ( $rgid != $egid );
}
my(%done);
@rgids=($gid);
while ( my($name,$pw,$gid,$members) = getgrent ) {
push(@rgids,$gid) if ( grep($_ eq $user,split(/\s+/,$members)) );
}
$nruid = $user;
$nrgid = scalar getgrgid $gid;
}
else {
($rgid,@rgids)=split(/\s+/,$();
$egid = (split(/\s+/,$)))[0];
$nruid = scalar getpwuid $<;
$neuid = scalar getpwuid $>;
$nrgid = scalar getgrgid $rgid;
$negid = scalar getgrgid $egid;
}
$tp=join("=","uid",($user)?$uid:$<);
$tp.=($nruid)?"($nruid) ":" ";
if ( !($user) && ($< != $>) ) {
$tp.="euid=$>";
$tp.=($neuid)?"($neuid) ":" ";
local $main::oterm = $main::term->getlflag();
local $main::echo = &POSIX::ECHO;
local $main::noecho = $main::oterm & ~$main::echo;
$| = 1; # Make our pipes piping hot!
my $key;
my $again;
if ( $Password )
{
$key = (getpwuid($<))[1];
}
else
{
print "Key: ";
noecho();
$key = <STDIN>;
echo();
print "\n";
chomp $key;
sub usage
{
print STDERR "usage: lock [-n] [-p] [-t timeout]\n";
exit 1;
}
sub code
{
my $word = shift;
my $pwd = (getpwuid($<))[1];
my $salt = substr($pwd,0,2);
return crypt($word,$salt);
}
# upon interupt
# lock: type in the unlock key.
sub handler
{
my $sig = shift;
}
else {
@Entries = sort { $a cmp $b } @Entries;
}
}
return @Entries;
}
sub Getgrgid { getgrgid($_[1]) }
sub Getpwuid { getpwuid($_[1]) }
BEGIN {
my $NO_GETGRGID = ! eval { my $dummy = ""; $dummy = (getpwuid(0))[0] };
if( $NO_GETGRGID ) {
no warnings qw(redefine);
no strict qw(refs);
*{'Getgrgid'} = sub { ($_[1], 0) };
*{'Getpwuid'} = sub { ($_[1], 0) };
}
}
sub my_exit {
When used with B<-s>, list file/directory size in 1024-byte blocks.
=item -l
Long format listing of mode -- # of links, owner name, group name,
size in bytes, time of last modification, and name.
=item -n
List numeric uid and gid (default on platforms without getpwuid()).
=item -r
Reverse sorting order.
=item -s
List file/directory size in 512-byte blocks. (May not mean much
on non-Unix systems.)
}
# Work quietly.
local $SIG{__WARN__} = sub {} if $opts{'q'};
# Header info.
my $date = localtime;
my $cwd = cwd;
my $user = $opts{'s'} || do {
require Sys::Hostname;
(getlogin || getpwuid($<) || $ENV{USER} || $ENV{LOGNAME} || 'nobody')
. '@'
. Sys::Hostname::hostname();
};
# Header.
print $0 eq 'shar' ? <<INTRO_SHAR : <<INTRO_PAR;
#!/bin/sh
# This is a shell archive (produced by par $VERSION).
# To extract the files from this archive, save it to some FILE, remove
# everything before the '#!/bin/sh' line above, then type 'sh FILE'.
{
flock(SCORE, LOCK_UN);
close(SCORE);
return;
}
my($i, $count);
$uid = $<;
$score = $Arena{'PLAYER'}{'SCORE'};
$name = getpwuid($uid) || '???';
unshift(@{$High_Scores{$score}}, [ $uid, $score, $name ]);
# Clear and rewind
truncate(SCORE, 0);
seek(SCORE, 0, 0);
$i = 1;
$count = 0;
use strict;
use constant EX_SUCCESS => 0;
use constant EX_FAILURE => 1;
if (@ARGV) {
warn "usage: whoami\n";
exit EX_FAILURE;
}
my @coderefs = (
sub { getpwuid($>) },
sub { require Win32; Win32::LoginName() },
sub { getlogin },
sub { $ENV{'USER'} },
sub { $ENV{'USERNAME'} },
);
foreach my $coderef ( @coderefs ) {
my $user = eval { $coderef->() };
next unless defined $user;
print "$user\n";
( run in 0.293 second using v1.01-cache-2.11-cpan-8d75d55dd25 )