home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The World of Computer Software
/
World_Of_Computer_Software-02-385-Vol-1of3.iso
/
c
/
cops_104.zip
/
cops_104
/
perl
/
user.chk
< prev
next >
Wrap
Text File
|
1992-03-10
|
2KB
|
63 lines
#!/bin/sh -- need to mention perl here to avoid recursion
'true' || eval 'exec perl -S $0 $argv:q';
eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}'
& eval 'exec /usr/local/bin/perl -S $0 $argv:q'
if 0;
#
# This combines user.chk and home.chk. It searches for home directories
# and various user startup files for world writability, as well as flagging
# any .rhosts and .netrc files that are readable. You can change the
# files checked by changing @ftable and @readables, respectively.
#
#
# check for writable files in all user's homes
#
require "pass.cache.pl";
require "is_able.pl";
# files checked for:
@ftable = ("rhosts", "profile", "login", "logout", "cshrc",
"bashrc", "bash_profile", "inputrc", "screenrc",
"kshrc", "tcshrc", "netrc", "forward", "dbxinit",
"distfile", "exrc", "emacsrc", "remote", "mh_profile",
"xinitrc", "xsession", "Xdefaults", "Xresources", "rninit");
@readables = ("netrc", "rhosts");
local(%done);
# what's the point of doing a keys and using $i ??
# why not just do "for $dir (values %uname2dir) {" ????
for $i (keys %uname2dir) {
$dir = $uname2dir{$i};
# I don't want to hear about every file in their home dir, if
# is WW, but still need to check the .netrc file for readability...
next unless $dir;
next if $done{$dir}++;
if (-e $dir) {
if (&is_able($dir, "w", "w")) {
for $r (@readables) {
if (-s "$dir/.$r") {
&is_able("$dir/.$r", "w", "r");
}
}
next;
}
for $file (@ftable) {
$foo_file = $dir . "/.$file";
if (-e $foo_file) {
&is_able($foo_file, "w", "w");
for $r (@readables) {
if ($file eq $r && -s $foo_file) {
&is_able($foo_file, "w", "r");
}
}
}
}
}
}
1;