1#!/usr/local/bin/perl 2# save_global.cgi 3# Save options to a webalizer.conf file 4 5use strict; 6use warnings; 7our (%text, %config, %gconfig, %access, $module_name, %in, $remote_user); 8require './webalizer-lib.pl'; 9&error_setup($text{'global_err'}); 10$access{'view'} && &error($text{'edit_ecannot'}); 11&ReadParse(); 12!$in{'file'} || &can_edit_log($in{'file'}) || &error($text{'edit_ecannot'}); 13$in{'file'} || $access{'global'} || &error($text{'edit_ecannot'}); 14 15my $cfile = &config_file_name($in{'file'}) if ($in{'file'}); 16if ($in{'delete'}) { 17 # Just delete the configuration for this logfile 18 &unlink_logged($cfile); 19 &redirect(""); 20 exit; 21 } 22 23&lock_file($cfile || $config{'webalizer_conf'}); 24my $conf = &get_config($in{'file'}); 25 26# Validate and store inputs 27if ($in{'report_def'}) { 28 &save_directive($conf, "ReportTitle"); 29 } 30else { 31 $in{'report'} =~ /\S/ || &error($text{'global_ereport'}); 32 &save_directive($conf, "ReportTitle", $in{'report'}); 33 } 34 35if ($in{'host_def'}) { 36 &save_directive($conf, "HostName"); 37 } 38elsif (defined($in{'host'})) { 39 $in{'host'} =~ /^\S+$/ || &error($text{'global_ehost'}); 40 &save_directive($conf, "HostName", $in{'host'}); 41 } 42 43my @pages = split(/\s+/, $in{'page'}); 44&save_directive($conf, "PageType", @pages); 45 46my @index = split(/\s+/, $in{'index'}); 47&save_directive($conf, "IndexAlias", @index); 48 49if ($in{'gmt'}) { 50 &save_directive($conf, "GMTTime", "yes"); 51 } 52else { 53 &save_directive($conf, "GMTTime"); 54 } 55 56if ($in{'fold'}) { 57 &save_directive($conf, "FoldSeqErr", "yes"); 58 } 59else { 60 &save_directive($conf, "FoldSeqErr"); 61 } 62 63if ($in{'visit_def'}) { 64 &save_directive($conf, "VisitTimeout"); 65 } 66else { 67 $in{'visit'} =~ /^\d+$/ || &error($text{'global_evisit'}); 68 &save_directive($conf, "VisitTimeout", $in{'visit'}); 69 } 70 71if ($in{'dns_def'}) { 72 &save_directive($conf, "DNSChildren"); 73 } 74else { 75 $in{'dns'} =~ /^\d+$/ || &error($text{'global_edns'}); 76 &save_directive($conf, "DNSChildren", $in{'dns'}); 77 } 78 79if ($in{'history_def'}) { 80 &save_directive($conf, "HistoryName"); 81 } 82else { 83 $in{'history'} =~ /^\S+$/ || &error($text{'global_ehistory'}); 84 &save_directive($conf, "HistoryName", $in{'history'}); 85 } 86 87if ($in{'current_def'}) { 88 &save_directive($conf, "IncrementalName"); 89 } 90else { 91 $in{'current'} =~ /^\S+$/ || &error($text{'global_ecurrent'}); 92 &save_directive($conf, "IncrementalName", $in{'current'}); 93 } 94 95if ($in{'cache_def'}) { 96 &save_directive($conf, "DNSCache"); 97 } 98else { 99 $in{'cache'} =~ /^\S+$/ || &error($text{'global_ecache'}); 100 &save_directive($conf, "DNSCache", $in{'cache'}); 101 } 102 103foreach my $g ('DailyGraph', 'DailyStats', 'HourlyGraph', 104 'HourlyStats', 'CountryGraph', 'GraphLegend') { 105 if ($in{$g}) { 106 &save_directive($conf, $g); 107 } 108 else { 109 &save_directive($conf, $g, "no"); 110 } 111 } 112 113foreach my $t ('TopSites', 'TopKSites', 'TopURLs', 'TopKURLs', 'TopReferrers', 114 'TopAgents', 'TopCountries', 'TopEntry', 'TopExit', 115 'TopSearch', 'TopUsers') { 116 if ($in{"${t}_def"} == 1) { 117 &save_directive($conf, $t); 118 } 119 elsif ($in{"${t}_def"} == 2) { 120 &save_directive($conf, $t, "0"); 121 } 122 else { 123 $in{$t} =~ /^\d+$/ || &error(&text('global_etable', 124 $text{"global_$t"})); 125 &save_directive($conf, $t, $in{$t}); 126 } 127 } 128 129foreach my $a ('AllSites', 'AllURLs', 'AllReferrers', 'AllAgents', 130 'AllSearchStr', 'AllUsers') { 131 if ($in{$a}) { 132 &save_directive($conf, $a, "yes"); 133 } 134 else { 135 &save_directive($conf, $a); 136 } 137 } 138 139foreach my $hid ("HideURL", "HideSite", "HideReferrer", 140 "HideUser", "HideAgent") { 141 my @hidv = split(/\s+/, $in{lc($hid)}); 142 &save_directive($conf, $hid, @hidv); 143 } 144 145foreach my $ign ("IgnoreURL", "IgnoreSite", "IgnoreReferrer", 146 "IgnoreUser", "IgnoreAgent") { 147 my @ignv = split(/\s+/, $in{lc($ign)}); 148 &save_directive($conf, $ign, @ignv); 149 } 150 151foreach my $inc ("IncludeURL", "IncludeSite", "IncludeReferrer", 152 "IncludeUser", "IncludeAgent") { 153 my @incv = split(/\s+/, $in{lc($inc)}); 154 &save_directive($conf, $inc, @incv); 155 } 156 157&flush_file_lines(); 158&unlock_file($cfile || $config{'webalizer_conf'}); 159&webmin_log("modify", "global", $in{'file'}); 160&redirect($in{'file'} ? "edit_log.cgi?file=".&urlize($in{'file'}). 161 "&type=$in{'type'}&custom=$in{'custom'}" : ""); 162 163