User:Rich Farmbrough/temp155

From Wikipedia, the free encyclopedia
#!/usr/bin/perl
# How to setuid and setgid in PERL using POSIX
use POSIX qw(setuid setgid);
use strict;
use warnings;

set_user_and_group("handheld");
create_a_test_file();

sub create_a_test_file{
    system "rm testFile";
    open TEST,">:","testFile";
    print TEST "this is a test file\n";
    close TEST;
}

sub set_user_and_group
{
    my $user = shift || die 'No user set.\n';

    open PASSWD, '<:', '/etc/passwd' || die "Can't open /etc/passwd for reading, error $!.\n";
    my $user_uid='';
    my $user_gid='';
    while (<PASSWD>)
    {
        my ($username,$passwd,$uid,$gid,$geco,$homedir,$shell) = split(/:/);

        if ($username eq $user)
        {
            $user_uid = $uid;
            $user_gid = $gid;
            last;
        }
    }
    close PASSWD;
    if ($user_uid eq '' || $user_gid eq '')
    {
        die "No user $user found in /etc/passwd, or uid/gid not set.\n";
    }
    setgid($user_gid);
    setuid($user_uid);
    return 0;
}