diff --git a/gray-theme/squid/images/manual.gif b/gray-theme/squid/images/manual.gif new file mode 100755 index 000000000..ce1f3a3f0 Binary files /dev/null and b/gray-theme/squid/images/manual.gif differ diff --git a/squid/acl_security.pl b/squid/acl_security.pl index f8fdf9e17..d7e3a2d24 100755 --- a/squid/acl_security.pl +++ b/squid/acl_security.pl @@ -3,7 +3,7 @@ require 'squid-lib.pl'; @accopts = ('portsnets', 'othercaches', 'musage', 'logging', 'copts', 'hprogs', 'actrl', 'admopts', 'proxyauth', 'miscopt', 'cms', 'rebuild', 'calamaris', 'delay', 'headeracc', 'refresh', 'cachemgr', - 'authparam', 'iptables'); + 'authparam', 'iptables', 'manual'); # acl_security_form(&options) # Output HTML for editing security options for the squid module diff --git a/squid/backup_config.pl b/squid/backup_config.pl index 14993f056..622da761b 100755 --- a/squid/backup_config.pl +++ b/squid/backup_config.pl @@ -8,23 +8,7 @@ do 'squid-lib.pl'; # Returns files and directories that can be backed up sub backup_config_files { -# Add main config file -my @rv = ( $config{'squid_conf'} ); - -# Add users file -my $conf = &get_config(); -my $file = &get_auth_file($conf); -push(@rv, $file) if ($file); - -# Add files from ACLs -my @acl = &find_config("acl", $conf); -foreach my $a (@acl) { - if ($a->{'values'}->[2] =~ /^"(.*)"$/ || $a->{'values'}->[3] =~ /^"(.*)"$/) { - push(@rv, $1); - } - } - -return &unique(@rv); +return &get_all_config_files(); } # pre_backup(&files) diff --git a/squid/edit_manual.cgi b/squid/edit_manual.cgi new file mode 100755 index 000000000..3f9ac4fab --- /dev/null +++ b/squid/edit_manual.cgi @@ -0,0 +1,32 @@ +#!/usr/local/bin/perl +# Show a form for editing a mapping file + +require './squid-lib.pl'; +&ReadParse(); +$access{'manual'} || &error($text{'manual_ecannot'}); +&ui_print_header(undef, $text{'manual_title'}, ""); + +# Find all the config files +@files = &get_all_config_files(); +$file = $in{'file'} || $files[0]; +if (@files > 1) { + # Show form to select + print &ui_form_start("edit_manual.cgi"); + print $text{'manual_file'},"\n"; + print &ui_select("file", $file, [ map { [ $_ ] } @files ]),"\n"; + print &ui_submit($text{'manual_change'}); + print &ui_form_end(),"
\n";
+ }
+
+# Show the file contents
+$data = &read_file_contents($file);
+print &ui_form_start("save_manual.cgi", "form-data");
+print &ui_hidden("file", $file);
+print &text('manual_editing', "$file"),"
\n";
+print &ui_table_start();
+print &ui_table_row(undef, &ui_textarea("data", $data, 20, 80), 2);
+print &ui_table_end();
+print &ui_form_end([ [ "save", $text{'save'} ] ] );
+
+&ui_print_footer("", $text{'index_return'});
+
diff --git a/squid/images/manual.gif b/squid/images/manual.gif
new file mode 100644
index 000000000..e57b83c90
Binary files /dev/null and b/squid/images/manual.gif differ
diff --git a/squid/lang/en b/squid/lang/en
index 2c806ef2a..a661d6979 100644
--- a/squid/lang/en
+++ b/squid/lang/en
@@ -37,6 +37,15 @@ index_restart=Apply Configuration
index_restartdesc=Click this button to activate the current Squid configuration.
index_iptables=Port Redirection Setup
index_squid=Squid Proxy Server
+index_manual=Edit Configuration Files
+
+manual_title=Edit Configuration Files
+manual_file=Select a config file to edit:
+manual_change=Change
+manual_editing=Use the text box below to manually edit the configs in $1. Be careful, as no syntax or validity checking will be done.
+manual_err=Failed to save config file
+manual_efile=Invalid config filename!
+manual_ecannot=You are not allowed to manually edit config files
buttsave=Save
buttdel=Delete
diff --git a/squid/save_manual.cgi b/squid/save_manual.cgi
new file mode 100755
index 000000000..270a73b81
--- /dev/null
+++ b/squid/save_manual.cgi
@@ -0,0 +1,18 @@
+#!/usr/local/bin/perl
+# Update a manually edited config file
+
+require './squid-lib.pl';
+&ReadParseMime();
+&error_setup($text{'manual_err'});
+$access{'manual'} || &error($text{'manual_ecannot'});
+@files = &get_all_config_files();
+&indexof($in{'file'}, @files) >= 0 || &error($text{'manual_efile'});
+
+# Save the data
+$in{'data'} =~ s/\r//g;
+&open_lock_tempfile(FILE, ">$in{'file'}");
+&print_tempfile(FILE, $in{'data'});
+&close_tempfile(FILE);
+
+&webmin_log("manual", undef, $in{'file'});
+&redirect("");
\ No newline at end of file
diff --git a/squid/squid-lib.pl b/squid/squid-lib.pl
index e23e91731..14e296d9d 100755
--- a/squid/squid-lib.pl
+++ b/squid/squid-lib.pl
@@ -608,5 +608,28 @@ sub list_cachemgr_actions
return ("5min" ,"60min" ,"asndb" ,"authenticator" ,"cbdata" ,"client_list" ,"comm_incoming" ,"config" ,"counters" ,"delay" ,"digest_stats" ,"dns" ,"events" ,"filedescriptors" ,"fqdncache" ,"histograms" ,"http_headers" ,"info" ,"io" ,"ipcache" ,"mem" ,"menu" ,"netdb" ,"non_peers" ,"objects" ,"offline_toggle" ,"pconn" ,"peer_select" ,"redirector" ,"refresh" ,"server_list" ,"shutdown" ,"store_digest" ,"storedir" ,"utilization" ,"via_headers" ,"vm_objects");
}
+# get_all_config_files()
+# Returns all files from the Squid config
+sub get_all_config_files
+{
+# Add main config file
+my @rv = ( $config{'squid_conf'} );
+
+# Add users file
+my $conf = &get_config();
+my $file = &get_auth_file($conf);
+push(@rv, $file) if ($file);
+
+# Add files from ACLs
+my @acl = &find_config("acl", $conf);
+foreach my $a (@acl) {
+ if ($a->{'values'}->[2] =~ /^"(.*)"$/ || $a->{'values'}->[3] =~ /^"(.*)"$/) {
+ push(@rv, $1);
+ }
+ }
+
+return &unique(@rv);
+}
+
1;