File: test2.pl

package info (click to toggle)
adduser 3.153
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 3,560 kB
  • sloc: perl: 9,407; sh: 189; makefile: 22
file content (142 lines) | stat: -rw-r--r-- 3,985 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
#!/usr/bin/perl -w

# expect:
#  - a new system user $USER
#  - added to group nogroup
#  - home directory /home/$USER
#  - removal works

use strict;
use lib_test;

my $file_find_present;

BEGIN {
    local $ENV{PERL_DL_NONLAZY}=1;
    $file_find_present=1;
    eval {
        require File::Find;
    };
    if ($@) {
        $file_find_present = 0;
    }
}

my $groupname = "nogroup";
my $username = find_unused_name();
my $homedir = "/home/$username";
my $cmd;

sub create_user {
    my ($username, $groupname, $system, $homedir) = (@_);
    my $cmd;
    if( $system ) {
        $cmd = "adduser --system --home $homedir $username";
    } else {
        $cmd = "adduser --disabled-password --comment foo --home $homedir $username";
    }

    if (!defined (getpwnam($username))) {
        print "Testing $cmd... ";
        `$cmd`;
        my $error = ($?>>8);
        if ($error) {
            print "failed\n  adduser returned an errorcode != 0 ($error)\n";
            exit $error;
        }
        assert(check_user_exist ($username));
        assert(check_homedir_exist($username, $homedir));
        if( $system ) {
            assert(check_group_exist($groupname));
            assert(check_user_in_group ($username,$groupname));
        } else {
            assert(check_group_exist($username));
            assert(check_user_in_group ($username,$username));
        }
        print "ok\n";
    }
}

create_user($username, $groupname, 1, $homedir);
# deluser without --remove-home _must_ always work
$cmd = "deluser $username";
if (defined (getpwnam($username))) {
    print "Testing $cmd... ";
    `$cmd`;
    my $error = ($?>>8);
    if ($error) {
        print "failed\n  deluser returned an errorcode != 0 ($error)\n";
        exit $error;
    }
    assert(check_user_not_exist ($username));
    assert(check_dir_exist($homedir));	
    `rm -rf $homedir`;
    print "ok\n";
}

create_user($username, $groupname, 0, $homedir);
# deluser without --remove-home _must_ always work
$cmd = "deluser $username";
if (defined (getpwnam($username))) {
    print "Testing $cmd... ";
    `$cmd`;
    my $error = ($?>>8);
    if ($error) {
        print "failed\n  deluser returned an errorcode != 0 ($error)\n";
        exit $error;
    }
    assert(check_user_not_exist ($username));
    assert(check_dir_exist($homedir));	
    `rm -rf $homedir`;
    print "ok\n";
}

create_user($username, $groupname, 1, $homedir);
# deluser --system with --remove-home may spew a warning but must exit successfully
$cmd = "deluser --system --remove-home $username";
if (defined (getpwnam($username))) {
    print "Testing $cmd... ";
    `$cmd`;
    my $error = ($?>>8);
    if ($error) {
        print "failed\n  deluser returned an errorcode != 0 ($error)\n";
        exit $error;
    }
    assert(check_user_not_exist ($username));
    if( $file_find_present ) {
        assert(check_homedir_not_exist($homedir));	
    } else {
        assert(check_dir_exist($homedir));	
        `rm -rf $homedir`;
    }
    print "ok\n";
}

create_user($username, $groupname, 0, $homedir);
# deluser with --remove-home may error out without File::Find
$cmd = "deluser --remove-home $username";
if (defined (getpwnam($username))) {
    print "Testing $cmd... ";
    `$cmd`;
    my $error = ($?>>8);
    if ($error) {
        if( $file_find_present ) {
            print "failed\n  deluser returned an errorcode != 0 ($error)\n";
            exit $error;
        } else {
            if( $error == 56 ) {
                `deluser $username`;
            } else {
                print "failed\n  deluser (file::find not present) returned an errorcode != 0/56 ($error)\n";
            }
            print "failed\n  deluser (file::find not present) returned an errorcode != 0 ($error)\n";
            $error=0;
            `rm -rf $homedir`;
        }
    }
    assert(check_user_not_exist ($username));
    assert(check_homedir_not_exist($homedir));	
    print "ok\n";
}

# vim: tabstop=4 shiftwidth=4 expandtab