Subversion Repositories DevTools

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1572 gchristi 1
 
2
use Getopt::Long;
3
 
4
use constant {  OK                  => 0,
5
                NOUSER              => 1,    # user $opt_user does not exist
6
                NOGROUP             => 2,    # group $opt_group does not exist
7
                PRIMARYGROUP        => 3,    # Primary group of user $opt_user is not $opt_group
8
                SECONDARYGROUP      => 4,    # user $opt_user is not a member of one of the elements in $opt_Groups
9
                HOMEDIR             => 5,    # user $opt_user home dir is not $opt_home
10
                INVALIDPARAMETERS   => 6,    # GetOpt Errors
11
                MISSINGPARAMETERS   => 7     # user or group options missing
12
};
13
 
14
our ( $opt_user, $opt_group, @opt_Groups, $opt_home );
15
my $retval;
16
 
17
Getopt::Long::Configure("no_ignore_case");
18
 
19
if ( ! GetOptions( "user=s"    => \$opt_user, 
20
                   "group=s"   => \$opt_group,
21
                   "Groups=s"  => \@opt_Groups,
22
                   "home=s"    => \$opt_home ) )
23
{
24
    print "Error processing Options\n";
25
    $retval = INVALIDPARAMETERS;
26
}
27
elsif ( ! defined($opt_user) && ! defined($opt_group) )
28
{
29
    print "Missing user and/or group arguments\n";
30
    $retval = MISSINGPARAMETERS;
31
}
32
# else if no user but we have a group then the group becomes the check so check to see if group exists
33
elsif ( ! defined($opt_user) && defined($opt_group) )
34
{
35
    print "Checking group $opt_group ... ";
36
    $retval = ( getgrnam($opt_group) ) ? OK : NOGROUP;
37
    print (($retval == OK) ? "OK\n" : "ERROR: Does not exist\n");
38
}
39
#else user is defined with or with out group, does not matter
40
else
41
{
42
    print "Checking user $opt_user ... ";
43
 
44
    my @usrdet = getpwnam($opt_user);
45
 
46
    if ( $#usrdet > -1 )
47
    {
48
        $retval = OK;
49
 
50
        if ( defined($opt_group) && getgrgid($usrdet[3]) ne $opt_group )
51
        {
52
            print "ERROR: Primary Group not $opt_group\n";
53
            $retval = PRIMARYGROUP;
54
        }
55
 
56
        my @secgrps = map { split /,/ } @opt_Groups;
57
        for ( my $i = 0; $retval == OK && $i <= $#secgrps; $i++ )
58
        {
59
            if ( !grep { $_ eq $opt_user } split(' ', (getgrnam($secgrps[$i]))[3] ) )
60
            {
61
                print "ERROR: Not in Secondary group $secgrps[$i]\n";
62
                $retval = SECONDARYGROUP;
63
            }
64
        }
65
 
66
        if ( $retval == OK && defined($opt_home) && $usrdet[7] ne $opt_home )
67
        {
68
            print "ERROR: Home Dir not $opt_home\n";
69
            $retval = HOMEDIR;
70
        }
71
 
72
        print "OK\n" if ( $retval == OK );
73
    }
74
    else
75
    {
76
        print "ERROR: Does not exist\n";
77
        $retval =  NOUSER;
78
    }
79
}
80
 
81
exit($retval);