source: genesis/tools/g_list.pl@ 4990

Last change on this file since 4990 was 4990, checked in by dirkx, 19 years ago

+Cope with whost having port numbers

  • Property svn:eol-style set to native
  • Property svn:executable set to *
File size: 6.1 KB
Line 
1#!/usr/bin/perl -w
2#
3# Copyright 2005 Stichting Wireless Leiden
4# Rick van der Zwet
5#
6
7# Config located at other file
8my $conf_file="/home/genesis/tools/genesis.conf";
9do($conf_file) || die("Cann't open $conf_file");
10
11my $HTML=1;
12
13#laden van tool file
14do($toolfile) || die("Cann't open $toolfile");
15
16#gebruik van simple subje om ervoor te zorgen dat de print netjes in het
17#programma gestopt kan worden
18sub printline {
19 print "$_[0]\n";
20};
21
22
23#REQUEST parsen
24$request=$ENV{'REQUEST_URI'};
25if( $request=~/cgi-bin\/g_list.pl\/(.*)$/) {
26 ($node,$file)=split(/\//,$1);
27 $title="$node $file";
28}
29else {
30 $title="listing";
31};
32
33
34#controleer wat de browser is
35#en zorgen dan er de nodige tags geprint worden
36$browser=$ENV{'HTTP_USER_AGENT'};
37if( $browser=~/curl|wget|fetch/i) {
38 $HTML=0;
39 printline("Content-type: text/html\n\n");
40}
41else {
42 $HTML=1;
43 printline("Content-type: text/html\n\n");
44 printline("<HTML>");
45 printline("<TITLE>Genesis $title</TITLE>");
46 printline("<BODY BGcolor=white>");
47};
48
49
50#als geen node gespecificeerd dan kijken of svn geupdate is gevraagd
51if( $node eq '') {
52 if( $ENV{"QUERY_STRING"}=~/update/i) {
53 printline("<H2>Please wait while updating svn...</H2><P><PRE>");
54 select(STDERR); $| = 1; # make unbuffered
55 select(STDOUT); $| = 1; # make unbuffered
56 system("$svn update $home");
57 printline("</PRE>");
58 printline("<H2>Done.<H2><P>");
59 printline("Click <A HREF=$source>here</A>");
60 printline("if you're not forwarded automaticly in 5 seconds.<P>");
61 printline("<META HTTP-EQUIV=REFRESH CONTENT=5;URL=$source>");
62 }
63 else {
64 g_list( );
65 };
66}
67else {
68 if( $file eq '') {
69 foreach $file ( sort @filelist) {
70 if( $HTML) {
71 print "$file<BR>\n";
72 }
73 else {
74 print "$file\n";
75 };
76 };
77 }
78 elsif( $file eq 'config') {
79 g_print($hostname);
80 }
81 else {
82 foreach my $tmpFile ( sort @filelist) {
83 if( $file eq $tmpFile ) {
84 g_generate($file);
85 };
86 };
87 };
88};
89
90#plaats de sluit HTML tags
91if( $HTML) {
92 print <<EOF;
93</BODY>
94</HTML>
95EOF
96}
97
98
99#Het opbouwen van het begin scherm
100sub g_list {
101 if( $HTML) {
102 my $svn_version=svn_version("$ndir");
103 if( $svn_version=~/Last Changed Rev: (\d+)/) {
104 $revision=$1;
105 };
106 printline("<H1>Genesis config (revision: $revision):</H1><P>\n<PRE>");
107 printline("$svn_version");
108 printline("</PRE>");
109 printline("<FORM METHOD=get ACTION=$source>");
110 printline('<INPUT TYPE="submit" NAME="Update" VALUE="Update">');
111 printline("</FORM>");
112 printline("<TABLE BORDER=1>");
113 };
114
115 opendir(DIR, $ndir) || die "can't opendir $home: $!";
116 @dirs = grep { /^[^\.]/ && -d "$ndir/$_" } readdir(DIR);
117 closedir DIR;
118 foreach $dir (sort @dirs) {
119 if( $dir=~/attic/ ) {
120 next;
121 };
122 my $node = $dir;
123 if( ! $HTML ) {
124 print "$node\n";
125 }
126 else {
127 printline("<TR><TD><A HREF=g_list.pl/$node/config>$node</A></TD>");
128 foreach $file (sort @filelist) {
129 printline("<TD><A HREF=g_list.pl/$node/$file>$file</A></TD>\n");
130 };
131 };
132 };
133 if( $HTML ) {
134 printline("</TABLE><P>");
135 };
136};
137
138
139
140#ophalen svn versie
141sub svn_version {
142 local($file,$char)=@_;
143 local($svn_version);
144 $svn_version=`$svn info $file`;
145 if( $char ne '' ) {
146 $svn_version=~s/^([^$char].*)/$char $1/mgi;
147 };
148 return($svn_version);
149};
150
151
152
153#netjes de configuratie printen
154sub g_print {
155 my $config="$ndir/$node/$configfile";
156 parse_config($config);
157
158 printline("<H1>Genesis configuratie voor: $node</H1><P>");
159 printline("<PRE>" . svn_version($config) . "</PRE><P>");
160
161
162 my $TP='';
163 if( $tproxy !~ m/no/i ) {
164 $TP .= "\n";
165 $TP .= "Tproxy on cidr range $tproxy";
166 $TP .= "<b>WARNING - specification propably wrong - should be a cidr</b>"
167 unless $tproxy =~ m/\d+\.\d+\.\d+\.\d+\/\d+/;
168 };
169
170 printline("<TABLE BORDER=1><TR><TD COLSPAN=4><PRE>");
171 printline("master_ip=$master_ip");
172 printline("AGGREGATE=$AGGREGATE");
173 printline("");
174 printline("gw_open=$gw_open");
175 printline("nodetype=$nodetype");
176 printline("nodename=$nodename");
177 printline("");
178 printline("NS_forward=$NS_forward");
179 printline("NS_resolv=$NS_resolv");
180 printline("");
181 printline("location=$location");
182 printline("DISK=$DISK");
183 printline("");
184 printline("X=$X");
185 printline("Y=$Y");
186 printline("");
187 printline("OS=$OS");
188 printline("");
189 printline("$TP");
190 printline("</PRE></TD></TR>");
191
192 foreach $if( sort keys %config) {
193 if( $if=~/^(.*):\d+/ ) {
194 $subs{$1}++;
195 };
196 };
197
198 foreach $if( sort keys %config) {
199 if( $if=~/^([^:]+)/ ) {
200 $mymain=$1;
201 }
202 else {
203 $mymain='';
204 };
205
206 if( $if!~/:\d+/ ) {
207 $main=1;$cc='66'
208 }
209 else {
210 $main=0;
211 $cc='cc';
212 };
213
214 if(! ($ip=$IP{$if}) ) {
215 $ip='dhcp?';
216 };
217 if( $TYPE{$if}=~/wireless/ ) {
218 $color="#${cc}FFFF";
219 };
220 if( $TYPE{$if}=~/ethernet/) {
221 $color="#FFFF${cc}";
222 };
223
224 $cfg=$config{$if};
225 $cfg=~s/(.*KEY.*=).*/${1}***********/;
226 $cfg=~s/(.*PWD.*=).*/${1}***********/;
227 $cfg=~s/(.*CODE.*=).*/${1}***********/;
228 $cfg=~s/(.*PASS.*=).*/${1}***********/;
229
230 if( $main) {
231 printf "<TR bgcolor=$color><TD ROWSPAN=%d VALIGN=TOP><B>$if</TD>\n",(1+$subs{$if})*3,$subs{$if};
232 $c=4;
233 }
234 else {
235 $c=3;
236 print "<TR bgcolor=$color>";
237 };
238 $cfg=~s/</&lt;/gi;
239 $cfg=~s/>/&gt;/gi;
240
241 printline("<TD>$if</TD><TD><B>$ip</TD><TD>$DESC{$if}($SDESC{$if})</TD>");
242 printline("<TR><TD COLSPAN=$c><PRE>");
243 printline("$cfg");
244 printline("</PRE></TD>");
245 printline("<TR><TD COLSPAN=$c>&nbsp;</TD>");
246 };
247 printline("</TABLE>");
248};
249
250
251
252#Generen config
253sub g_generate {
254 my $file=$_[0];
255 $config="$ndir/$node/$configfile";
256 $svn_versiont=svn_version($toolfile,$char);
257 $svn_versionc=svn_version($config,$char);
258
259 if( $svn_versiont=~/Last Changed Rev: (\d+)/ ) {
260 $tool_rev=$1;
261 };
262 if( $svn_versionc=~/Last Changed Rev: (\d+)/ ) {
263 $config_rev=$1;
264 };
265
266 if( $tool_rev >= $config_rev) {
267 $svn_version=$svn_versiont . $svn_versionc;
268 }
269 else {
270 $svn_version=$svn_versionc;
271 };
272
273 if( $HTML) {
274 printline("<H1>Genesis $file voor: $hostname</H1><P>");
275 };
276
277 parse_config($config);
278 $pr=do_it($file);
279
280
281 if( $HTML ) {
282 $pr=~s/</&lt;/gi;
283 printline("<PRE>$pr</PRE>");
284 }
285 else {
286 print $pr;
287 };
288};
Note: See TracBrowser for help on using the repository browser.