1 |
#!/usr/local/bin/perl -w |
2 |
|
3 |
# Dobrica Pavlinusic <dpavlin@pliva.hr> |
4 |
# 2000-01-31 DbP prva verzija |
5 |
# 2000-02-14 DbP mozda i radi? |
6 |
|
7 |
$debug=0; |
8 |
|
9 |
$debug++ if (defined($ARGV[0]) && $ARGV[0] eq "-d"); |
10 |
|
11 |
warn "DEBUG -- me kreira ni¹ta!" if ($debug); |
12 |
|
13 |
$|++; |
14 |
|
15 |
#---- |
16 |
|
17 |
open(ERR,"> error-log"); |
18 |
|
19 |
print STDERR "/etc/aliases"; |
20 |
open(ALIAS,"/etc/aliases") || die "Can't open /etc/aliases"; |
21 |
open(NALIAS,">aliases.new") || die "Can't open aliases.new"; |
22 |
while(<ALIAS>) { |
23 |
chop; |
24 |
print NALIAS "$_\n"; |
25 |
next if (m!^#!); |
26 |
if (m!\w+.\w+!) { |
27 |
($mail_alias,$mail_login) = split(/\s*:\s*/,$_,2); |
28 |
$mail_alias =~ tr [A-Z] [a-z]; |
29 |
} |
30 |
$etc_alias{$mail_alias}=$mail_login; |
31 |
# print "$mail_alias: $mail_login\n" if ($debug); |
32 |
print STDERR "."; |
33 |
} |
34 |
close(ALIAS); |
35 |
print STDERR "\n"; |
36 |
|
37 |
print STDERR "/etc/passwd"; |
38 |
open(PASSWD,"/etc/passwd") || die "Can't open /etc/passwd !"; |
39 |
open(NPASSWD,">passwd.new") || die "Can't open passwd.new !"; |
40 |
while(<PASSWD>) { |
41 |
chop; |
42 |
($login,$foo,$id,$gid,$full_name,$dir,$shell) = split(/:/,$_,7); |
43 |
$etc_passwd{$login}=$full_name; |
44 |
# print "$login:$full_name\n" if ($debug); |
45 |
print NPASSWD "$_\n"; |
46 |
print STDERR "."; |
47 |
} |
48 |
close(PASSWD); |
49 |
print STDERR "\n"; |
50 |
|
51 |
print STDERR "/etc/group"; |
52 |
open(GROUP,"/etc/group") || die "Can't open /etc/group !"; |
53 |
while(<GROUP>) { |
54 |
($group,$foo,$gid,$foo) = split (/:/,$_,4); |
55 |
$group_id{$group}=$gid; |
56 |
# print "$group:$gid\n" if ($debug); |
57 |
print STDERR "."; |
58 |
} |
59 |
close(GROUP); |
60 |
print STDERR "\n"; |
61 |
|
62 |
sub nuke_chars { |
63 |
my $foo=$_[0]; |
64 |
$foo =~ tr/¹ðè澩ÐÈÆ®/sdcczSDCCZ/; # nuke iso88592 |
65 |
$foo =~ tr/ðèæÐÈÆ/sdcczSDCCZ/; # nuke cp1250 |
66 |
return $foo; |
67 |
} |
68 |
|
69 |
open(KORI,"zaotvaranje.txt") || die "Can't open data file: $!"; |
70 |
while(<KORI>) { |
71 |
chomp; |
72 |
next if (/^#/ || /^$/); |
73 |
($ime,$prezime,$tojzoj,$odjel,$lokacija,$objekt,$kat,$soba,$tip, |
74 |
$z,$sifrarad,$login,$passwd,$grupa,$IPadresa,$IPime,$email_alias, |
75 |
$brojzahtjeva,$datumzaprimanja,$kontakt,$datummreza, |
76 |
$datumserver,$lupdate,$vrsta,$telefon,$gateway,$MT) = |
77 |
split(/\t/,$_,27); |
78 |
|
79 |
|
80 |
next if ($ime eq "ime" || $prezime eq "prezime"); |
81 |
|
82 |
if (!defined($ime) || !defined($prezime) || $ime eq "" || $prezime eq "") { |
83 |
print ERR "preskacem red '$_'\n"; |
84 |
next; |
85 |
} |
86 |
|
87 |
$ime=nuke_chars($ime); |
88 |
$prezime=nuke_chars($prezime); |
89 |
$email_alias=nuke_chars($email_alias); |
90 |
|
91 |
if ($email_alias =~ / /) { |
92 |
print ERR "email_alias $email_alias ima razmake!\n"; |
93 |
$email_alias =~ s/ //g; |
94 |
} |
95 |
|
96 |
|
97 |
$tojzoj=~ tr [A-Z] [a-z]; |
98 |
# @groups=("inzenjer","proizv","uprava","regpro","kadrovi", |
99 |
# "odnosi","prehrana","sirovine","strateg","veterina", |
100 |
# "kozmeti","farma","financ","zajednic"); |
101 |
|
102 |
$group="users"; |
103 |
# foreach $gr (@groups) { |
104 |
# if ($tojzoj =~ /$gr/) { |
105 |
# $group="$gr"; |
106 |
# } |
107 |
# } |
108 |
|
109 |
# $add=""; |
110 |
# do { |
111 |
# $email_alias="$ime.$prezime$add"; |
112 |
# print " email: $email_alias\n" if ($debug); |
113 |
# $add++; |
114 |
# } while ($etc_alias{$email_alias} ne ""); |
115 |
|
116 |
if (defined($etc_alias{$email_alias})) { |
117 |
print STDERR "Korisnik: $ime $prezime veæ postoji!\n"; |
118 |
print ERR "preskocen: $ime $prezime (postoji e-mail alias)\n"; |
119 |
next; |
120 |
} |
121 |
|
122 |
if (defined($etc_passwd{$login})) { |
123 |
print STDERR "Korisnik: $ime $prezime veæ postoji ($login) !\n"; |
124 |
print ERR "preskocen: $ime $prezime (postoji isti login $login)\n"; |
125 |
next; |
126 |
} |
127 |
|
128 |
push @novi_aliases,$email_alias; |
129 |
|
130 |
@foo = ( 'a'..'z','0'..'9','A'..'Z' ); |
131 |
|
132 |
# for (1..8) { $passwd=$passwd.$foo[int(rand($#foo))] }; |
133 |
$salt = $foo[int(rand($#foo))].$foo[int(rand($#foo))]; |
134 |
$crypt_passwd = crypt($passwd,$salt); |
135 |
|
136 |
$id++; |
137 |
$loc=""; |
138 |
$loc.=$objekat if (defined($objekat)); |
139 |
$loc.=" $kat" if (defined($kat)); |
140 |
$loc.=" $soba" if (defined($soba)); |
141 |
$full_name="$ime $prezime,$loc,$sifrarad"; |
142 |
$full_name=~s/, +/,/g; |
143 |
$full_name=~s/ +:/:/g; |
144 |
$full_name=nuke_chars($full_name); |
145 |
$shell="/usr/bin/false"; |
146 |
$dir="/usr/users/$login"; |
147 |
|
148 |
die "Nema grupe $group!" if (! defined($group_id{$group})); |
149 |
print "$login:$passwd:$id:$group_id{$group}:$full_name:$dir:$shell\n" if ($debug); |
150 |
print NPASSWD "$login:$crypt_passwd:$id:$group_id{$group}:$full_name:$dir:$shell\n"; |
151 |
print NALIAS "$email_alias: $login\n"; |
152 |
|
153 |
#---- C2 security |
154 |
# if (!$debug || 1) { |
155 |
# open(AUTH,">> $0.auth"); |
156 |
# print AUTH "$login:u_name=$login:u_id#$id:u_pwd=$crypt_passwd:u_succhg#",time,":u_lock\@:chkent:\n"; |
157 |
# close(AUTH); |
158 |
# } |
159 |
|
160 |
system "mkdir -p $dir ; mkdir $dir/bin ; \ |
161 |
chown -R $id:$group_id{$group} $dir ; chmod 755 $dir" if (! $debug); |
162 |
|
163 |
} |
164 |
|
165 |
close(NPASSWD); |
166 |
close(NALIAS); |
167 |
|
168 |
system "mv /etc/passwd passwd.orig" if (! $debug); |
169 |
system "cp passwd.new /etc/passwd" if (! $debug); |
170 |
system "chmod 644 /etc/passwd" if (! $debug); |
171 |
system "/usr/sbin/mkpasswd /etc/passwd" if (! $debug); |
172 |
system "mv /etc/aliases aliases.orig" if (! $debug); |
173 |
system "cp aliases.new /etc/aliases" if (! $debug); |
174 |
system "chmod 644 /etc/aliases" if (! $debug); |
175 |
system "/usr/sbin/newaliases" if (! $debug); |
176 |
#system "/tcb/bin/edauth -s < $0.auth" if (! $debug); |
177 |
|
178 |
foreach $alias (@novi_aliases) { |
179 |
system "/usr/lib/sendmail $alias < mail.txt" if (! $debug); |
180 |
} |