Handle hostnames with upper-case letters
[webmin.git] / squid / save_smem.cgi
1 #!/usr/local/bin/perl
2 # save_smem.cgi
3 # Save simple memory usage options
4
5 require './squid-lib.pl';
6 $access{'musage'} || &error($text{'emem_ecannot'});
7 &ReadParse();
8 &lock_file($config{'squid_conf'});
9 $conf = &get_config();
10 $whatfailed = $text{'smem_ftsmo'};
11
12 if ($squid_version < 2) {
13         &save_opt("cache_mem", \&check_size, $conf);
14         &save_opt("cache_swap", \&check_size, $conf);
15         }
16 else {
17         &save_opt_bytes("cache_mem", $conf);
18         &save_opt("fqdncache_size", \&check_size, $conf);
19         }
20 if ($squid_version < 2) {
21         &save_opt("maximum_object_size", \&check_obj_size, $conf);
22         }
23 else {
24         &save_opt_bytes("maximum_object_size", $conf);
25         }
26 &save_opt("ipcache_size", \&check_size, $conf);
27
28 if ($in{'cache_dir_def'}) {
29         &save_directive($conf, "cache_dir", [ ]);
30         }
31 else {
32         for($i=0; defined($dir = $in{"cache_dir_$i"}); $i++) {
33                 if ($squid_version >= 2.4) {
34                         $lv1 = $in{"cache_lv1_$i"}; $lv2 = $in{"cache_lv2_$i"};
35                         $size = $in{"cache_size_$i"};
36                         $type = $in{"cache_type_$i"};
37                         $opts = $in{"cache_opts_$i"};
38                         next if (!$dir && !$lv1 && !$lv2 && !$size);
39                         &check_error(\&check_dir, $dir);
40                         &check_error(\&check_dirsize, $size);
41                         &check_error(\&check_dircount, $lv1);
42                         &check_error(\&check_dircount, $lv2);
43                         push(@chd, { 'name' => 'cache_dir',
44                                      'values' => [ $type, $dir, $size,
45                                                    $lv1, $lv2, $opts ] });
46                         }
47                 elsif ($squid_version >= 2.3) {
48                         $lv1 = $in{"cache_lv1_$i"}; $lv2 = $in{"cache_lv2_$i"};
49                         $size = $in{"cache_size_$i"};
50                         $type = $in{"cache_type_$i"};
51                         next if (!$dir && !$lv1 && !$lv2 && !$size);
52                         &check_error(\&check_dir, $dir);
53                         &check_error(\&check_dirsize, $size);
54                         &check_error(\&check_dircount, $lv1);
55                         &check_error(\&check_dircount, $lv2);
56                         push(@chd, { 'name' => 'cache_dir',
57                                      'values' => [ $type, $dir, $size,
58                                                    $lv1, $lv2 ] });
59                         }
60                 elsif ($squid_version >= 2) {
61                         $lv1 = $in{"cache_lv1_$i"}; $lv2 = $in{"cache_lv2_$i"};
62                         $size = $in{"cache_size_$i"};
63                         next if (!$dir && !$lv1 && !$lv2 && !$size);
64                         &check_error(\&check_dir, $dir);
65                         &check_error(\&check_dirsize, $size);
66                         &check_error(\&check_dircount, $lv1);
67                         &check_error(\&check_dircount, $lv2);
68                         push(@chd, { 'name' => 'cache_dir',
69                                      'values' => [ $dir, $size, $lv1, $lv2 ] });
70                         }
71                 else {
72                         next if (!$dir);
73                         &check_error(\&check_dir, $dir);
74                         push(@chd, { 'name' => 'cache_dir',
75                                      'values' => [ $dir ] });
76                         }
77                 }
78         if (!@chd) {
79                 &error($text{'scache_emsg0'});
80                 }
81         &save_directive($conf, "cache_dir", \@chd);
82         }
83 if ($squid_version < 2) {
84         &save_opt("swap_level1_dirs", \&check_dircount, $conf);
85         &save_opt("swap_level2_dirs", \&check_dircount, $conf);
86         &save_opt("store_avg_object_size", \&check_objsize, $conf);
87         }
88 else {
89         &save_opt_bytes("store_avg_object_size", $conf);
90         }
91 &save_opt("store_objects_per_bucket", \&check_bucket, $conf);
92
93 &flush_file_lines();
94 &unlock_file($config{'squid_conf'});
95 &webmin_log("mem", undef, undef, \%in);
96 &redirect("");
97
98 sub check_size
99 {
100 return $_[0] =~ /^\d+$/ ? undef : &text('smem_emsg1',$_[0]);
101 }
102
103 sub check_high
104 {
105 return $_[0] =~ /^\d+$/ && $_[0] > 0 && $_[0] <= 100
106                 ? undef : &text('smem_emsg2',$_[0]);
107 }
108
109 sub check_low
110 {
111 return $_[0] =~ /^\d+$/ && $_[0] > 0 && $_[0] <= 100
112                 ? undef : &text('smem_emsg3',$_[0]);
113 }
114
115 sub check_obj_size
116 {
117 return $_[0] =~ /^\d+$/ ? undef : &text('smem_emsg4',$_[0]);
118 }
119