source: genesis/config/iris/proxy/FreeBSD/8.0-RELEASE/g_list.pl

Last change on this file was 9524, checked in by rick, 14 years ago

Make sure debug messages do not lent up in the output.

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