-
Notifications
You must be signed in to change notification settings - Fork 0
/
reconfig
executable file
·167 lines (144 loc) · 4.64 KB
/
reconfig
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
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
#!/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;
#
# version 1, Sun Mar 26 18:31:28 1995, last mod by zen
#
# Usage: [perl] reconfig [file]
#
# This replaces the program paths (e.g. /bin/awk) in SATAN with an
# alternate path that is found in the file "file.paths". It also finds
# perl5 (or at least tries!) and changes the path in all the stand-alone
# perl programs.
#
# all the HTML browsers we know about, IN ORDER OF PREFERENCE!
@all_www= ("netscape", "Mosaic", "xmosaic", "lynx");
#
# Potential directories to find commands; first, find the user's path...
$PATH = $ENV{"PATH"};
# additional dirs; *COLON* separated!
$other_dirs="/usr/ccs/bin:/bin:/usr/bin:/usr/ucb:/usr/bsd:/usr/ucb/bin:/usr/sbin:/usr/etc:/usr/local/bin:/usr/bin/X11:/usr/X11/bin:/usr/openwin/bin";
#
# split into a more reasonable format. Personal aliases come last.
@all_dirs = split(/:/, $other_dirs . ":" . $PATH);
#
# Target shell scripts in question:
@shell_scripts=("config/paths.pl", "config/paths.sh");
@perl5_src = <bin/get_targets bin/faux_fping satan bin/*.satan perl/html.pl>;
#
# Target shell commands in question
@all_commands=("cc", "cat", "chmod", "cmp", "comm", "cp", "date", "diff",
"egrep", "expr", "find", "grep", "ls", "mail", "mkdir", "mv", "rm",
"sed", "sh", "sort", "tftp", "touch", "uniq", "uudecode", "ypcat",
"strings", "finger", "ftp", "rpcinfo", "rusers", "showmount", "ping",
"ypwhich", "nslookup", "xhost", "su", "awk", "sed", "test", "whoami",
"basename", "echo", "file");
print "checking to make sure all the target(s) are here...\n";
for (@shell_scripts) {
die "ERROR -- $_ not found!\n" unless -f $_;
}
# find perl5!
print "Ok, trying to find perl5 now... hang on a bit...\n";
for $dir (@all_dirs) {
# first, find where it might be; oftentimes you'll see perl,
# perl4, perl5, etc. in the same dir
next if (! -d $dir);
while (<$dir/perl5* $dir/perl*>) {
if (-x $_) {
$perl_version=`($_ -v 2> /dev/null) |
awk '/This is perl, version 5/ { print $NF }'`;
if ($perl_version) {
$PERL=$_;
$pflag="1";
last;
}
}
last if $pflag;
}
last if $pflag;
}
die "\nCan't find perl5! Bailing out...\n" unless $PERL;
print "\nPerl5 is in $PERL\n";
for (@perl5_src) { $perl5_src .= "$_ "; }
print "\nchanging the source in: $perl5_src\n";
system "$PERL -pi -e \"s@^#!.*/perl.*@#!$PERL@;\" $perl5_src";
# make sure things are executable...
system("chmod u+x $perl5_src");
# find the most preferred www viewer first.
for $www (@all_www) {
for $dir (@all_dirs) {
if (!$MOSAIC) {
if (-x "$dir/$www") {
$MOSAIC="$dir/$www";
next;
}
}
}
}
if ($MOSAIC) {
print "\nHTML/WWW Browser is $MOSAIC\n";
$upper{"MOSAIC"} = $MOSAIC;
}
else { print "Cannot find a web browser! SATAN cannot be run except in CLI"; }
print "\nSo far so good...\nLooking for all the commands now...\n";
for $command (@all_commands) {
$found="";
for $dir (@all_dirs) {
# special case rsh/remsh; if we can find remsh, ignore rsh
if ($command eq "rsh") {
# print "looking for rsh/remsh ($dir/$command)\n";
if (-f "$dir/remsh") {
# this converts to upper case
($upper = $command) =~ y/[a-z]/[A-Z]/;
$found="true";
$upper{$upper} = "$dir/remsh";
print "found $dir/remsh; using this instead of rsh\n";
last;
}
}
# if find the command in one of the directories, print string
if (-f "$dir/$command") {
# this converts to upper case
($upper = $command) =~ y/[a-z]/[A-Z]/;
$found="true";
$upper{$upper} = "$dir/$command";
# print "found ($upper) $dir/$command\n";
# if it's rsh we're examining, keep looking; else quit
last unless $command eq "rsh";
}
}
print "\nAEEEIIII...!!! can't find $command\n\n" unless $found;
}
print "\nOk, now doing substitutions on the shell scripts...\n";
for $shell (@shell_scripts) {
print "Changing paths in $shell...\n";
die "Can't open $shell\n" unless open(SCRIPT, $shell);
rename($shell, $shell . '.old');
die "Can't open $shell\n" unless open(OUT, ">$shell");
#
# Open up the script, search for lines beginning with
# stuff like "TEST", "AWK", etc. If the file ends in "pl",
# assume it's a perl script and change it accordingly
while (<SCRIPT>) {
$found = 0;
for $command (keys %upper) {
if(/^\$?$command=/) {
# shell script
if ($shell !~ /.pl$/) {
print OUT "$command=$upper{$command}\n";
}
# perl script
else {
print OUT "\$" . "$command=\"$upper{$command}\";\n";
}
$found = 1;
}
}
print OUT $_ if !$found;
}
close(SCRIPT);
close(OUT);
}
# done...