⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 acl.cgi

📁 Unix下基于Web的管理工具
💻 CGI
字号:
#!/usr/local/bin/perl# acl.cgi# Display a form for editing or creating a new ACLrequire './squid-lib.pl';&ReadParse();$conf = &get_config();if ($in{'type'}) {	&header("Create ACL", "", undef, 0, 0, 0, &restart_button());	$type = $in{'type'};	}else {	&header("Edit ACL", "", undef, 0, 0, 0, &restart_button());	@acl = @{$conf->[$in{'index'}]->{'values'}};	$type = $acl[1];	if ($acl[2] =~ /^"(.*)"$/) {		# read from file		open(FILE, $1);		chop(@vals = <FILE>);		close(FILE);		$file = $1;		}	else { @vals = @acl[2..$#acl]; }	if ($type =~ /^(src|dst|srcdomain|dstdomain|user|myip)$/) {		@vals = sort { $a cmp $b } @vals;		}	elsif ($type eq "port") {		@vals = sort { $a <=> $b } @vals;		}	@deny = grep { $_->{'values'}->[1] eq $acl[0] }			&find_config("deny_info", $conf);	}print "<hr>\n";print "<form action=acl_save.cgi method=post>\n";if (@acl) {	print "<input type=hidden name=index value=$in{'index'}>\n";	print "<input type=hidden name=file value=$file>\n";	}if (@deny) {	print "<input type=hidden name=dindex value=$deny[0]->{'index'}>\n";	}print "<input type=hidden name=type value=$type>\n";print "<table border>\n";print "<tr $tb> <td><b>$acl_types{$type} ACL</b></td> </tr>\n";print "<tr $cb> <td><table>\n";print "<tr> <td nowrap><b>ACL Name</b></td>\n";print "<td><input name=name size=20 value=\"$acl[0]\"></td>\n";if ($type eq "src") {	print "<tr> <td colspan=2><table>\n";	print "<tr> <td><b>From IP</b></td> <td><b>To IP</b></td>\n";	print "     <td><b>Netmask</b></td> </tr>\n";	for($i=0; $i<=@vals; $i++) {		if ($vals[$i] =~ /^([\d\.]+)-([\d\.]+)\/([\d\.]+)$/) {			$from = $1; $to = $2; $mask = $3;			}		elsif ($vals[$i] =~ /^([\d\.]+)\/([\d\.]+)$/) {			$from = $1; $to = ""; $mask = $2;			}		else { $from = $to = $mask = ""; }		print "<tr>\n";		print "<td><input name=from_$i size=15 value=\"$from\"></td>\n";		print "<td><input name=to_$i size=15 value=\"$to\"></td>\n";		print "<td><input name=mask_$i size=15 value=\"$mask\"></td>\n";		print "</tr>\n";		}	print "</table></td> </tr>\n";	}elsif ($type eq "dst" || $type eq "myip") {	print "<tr> <td colspan=2><table>\n";	print "<tr> <td><b>IP Address</b></td> <td><b>Netmask</b></td> </tr>\n";	for($i=0; $i<=@vals; $i++) {		if ($vals[$i] =~ /^([\d\.]+)\/([\d\.]+)$/) {			$ip = $1; $mask = $2;			}		else { $ip = $mask = ""; }		print "<tr>\n";		print "<td><input name=ip_$i size=15 value=\"$ip\"></td>\n";		print "<td><input name=mask_$i size=15 value=\"$mask\"></td>\n";		print "</tr>\n";		}	print "</table></td> </tr>\n";	}elsif ($type eq "srcdomain") {	print "<tr> <td valign=top><b>Domains</b></td>\n";	print "<td><textarea name=vals rows=6 cols=20>",join("\n", @vals),	      "</textarea></td> </tr>\n";	}elsif ($type eq "dstdomain") {	print "<tr> <td valign=top><b>Domains</b></td>\n";	print "<td><textarea name=vals rows=6 cols=20>",join("\n", @vals),	      "</textarea></td> </tr>\n";	}elsif ($type eq "time") {	local $vals = join(' ', @vals);	if ($vals =~ /[A-Z]+/) {		foreach $d (split(//, $vals)) {			$day{$d}++;			}		}	if ($vals =~ /(\d+):(\d+)-(\d+):(\d+)/) {		$h1 = $1; $m1 = $2;		$h2 = $3; $m2 = $4;		$hour++;		}	print "<tr> <td valign=top><b>Days of the Week</b></td> <td>\n";	printf "<input type=radio name=day_def value=1 %s> All\n",		%day ? "" : "checked";	printf "<input type=radio name=day_def value=0 %s> Selected..<br>\n",		%day ? "checked" : "";	%day_name = ( 'S', 'Sunday', 'M', 'Monday', 'T', 'Tuesday',		      'W', 'Wednesday', 'H', 'Thursday', 'F', 'Friday',		      'A', 'Saturday' );	print "<select name=day multiple size=7>\n";	foreach $d ('S', 'M', 'T', 'W', 'H', 'F', 'A') {		printf "<option value=$d %s> $day_name{$d}\n",			$day{$d} ? "selected" : "";		}	print "</select></td> </tr>\n";	print "<tr> <td valign=top><b>Hours of the Day</b></td> <td>\n";	printf "<input type=radio name=hour_def value=1 %s> All\n",		$hour ? "" : "checked";	printf "&nbsp;<input type=radio name=hour_def value=0 %s>\n",		$hour ? "checked" : "";	print "<input name=h1 size=2 value=\"$h1\">:";	print "<input name=m1 size=2 value=\"$m1\"> to ";	print "<input name=h2 size=2 value=\"$h2\">:";	print "<input name=m2 size=2 value=\"$m2\"></td> </tr>\n";	}elsif ($type eq "url_regex") {	print "<tr> <td valign=top><b>Regular Expressions</b></td>\n";	print "<td><textarea name=vals rows=6 cols=20>",join("\n", @vals),	      "</textarea></td> </tr>\n";	}elsif ($type eq "urlpath_regex") {	print "<tr> <td valign=top><b>Regular Expressions</b></td>\n";	print "<td><textarea name=vals rows=6 cols=20>",join("\n", @vals),	      "</textarea></td> </tr>\n";	}elsif ($type eq "port") {	print "<tr> <td valign=top><b>TCP Ports</b></td>\n";	printf "<td><input name=vals size=30 value=\"%s\"></td> </tr>\n",		join(" ", @vals);	}elsif ($type eq "proto") {	print "<tr> <td valign=top><b>URL Protocols</b></td> <td>\n";	foreach $p (@vals) { $proto{$p}++; }	foreach $p ('http', 'ftp', 'gopher', 'wais', 'cache_object') {		printf "<input type=checkbox name=vals value=$p %s> $p\n",			$proto{$p} ? "checked" : "";		}	print "</td> </tr>\n";	}elsif ($type eq "method") {	print "<tr> <td valign=top><b>Request Methods</b></td> <td>\n";	foreach $m (@vals) { $meth{$m}++; }	foreach $m ('GET', 'POST', 'HEAD', 'CONNECT', 'PUT', 'DELETE') {		printf "<input type=checkbox name=vals value=$m %s> $m\n",			$meth{$m} ? "checked" : "";		}	print "</td> </tr>\n";	}elsif ($type eq "browser") {	print "<tr> <td valign=top><b>Browser Regexp</b></td>\n";	printf "<td><input name=vals size=30 value=\"%s\"></td> </tr>\n",		join(' ', @vals);	}elsif ($type eq "user") {	print "<tr> <td valign=top><b>Proxy Users</b></td>\n";	print "<td><textarea name=vals rows=6 cols=20 wrap>",		join("\n", @vals),"</textarea></td> </tr>\n";	}elsif ($type eq "src_as" || $type eq "dst_as") {	print "<tr> <td valign=top><b>AS Numbers</b></td>\n";	printf "<td><input name=vals size=20 value=\"%s\"></td> </tr>\n",		join(' ', @vals);	}elsif ($type eq "proxy_auth") {	print "<tr> <td valign=top><b>Refresh Time</b></td>\n";	print "<td><input name=vals size=8 value=\"$vals[0]\"></td> </tr>\n";	}elsif ($type eq "srcdom_regex" || $type eq "dstdom_regex") {	print "<tr> <td valign=top><b>Regular Expressions</b></td>\n";	print "<td><textarea name=vals rows=6 cols=20>",join("\n", @vals),	      "</textarea></td> </tr>\n";	}elsif ($type eq "ident") {	print "<tr> <td valign=top><b>RFC931 Users</b></td>\n";	print "<td><textarea name=vals rows=6 cols=20 wrap>",		join(' ', @vals),"</textarea></td> </tr>\n";	}print "<tr> <td><b>Failure URL</b></td>\n";printf "<td><input name=deny size=25 value=\"%s\"></td> </tr>\n",	@deny ? $deny[0]->{'values'}->[0] : "";print "</table></td></tr></table><br>\n";print "<input type=submit value=Save>\n";if (!$in{'type'}) { print "<input type=submit value=Delete name=delete>\n"; }print "</form>\n";print "<hr>\n";&footer("edit_acl.cgi", "ACL list");

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -