3 # Update, create or delete a log, or global settings
5 require './logrotate-lib.pl';
7 $parent = &get_config_parent();
8 $conf = $parent->{'members'};
10 # Editing the global options
14 # Adding a new section
15 $log = { 'members' => [ ],
16 'file' => &get_add_file() };
17 $logfile = $in{'file'};
21 $oldlog = $log = $conf->[$in{'idx'}];
22 $logfile = join(" ", @{$oldlog->{'name'}});
26 # Just delete this log entry
27 &lock_file($log->{'file'});
28 &save_directive($parent, $log, undef);
31 # Rotate log immediately
32 &ui_print_header(undef, $text{'force_title'}, "");
34 print $text{'force_doingone'},"\n";
35 ($ex, $out) = &rotate_log_now($log);
36 print "<pre>$out</pre>";
38 print $text{'force_failed'},"<br>\n";
41 print $text{'force_done'},"<br>\n";
44 &webmin_log("force", $logfile);
45 &ui_print_footer("", $text{'index_return'});
49 # Validate and store inputs
50 &lock_file($log->{'file'});
51 &error_setup($text{'save_err'});
53 @files = split(/\s+/, $in{'file'});
55 $f =~ /^\/\S+$/ || &error($text{'save_efile'});
57 $in{'file'} =~ s/\r//g;
58 $log->{'name'} = [ split(/\n/, $in{'file'}) ];
61 foreach $period ("daily", "weekly", "monthly") {
62 &save_directive($log, $period,
63 $in{'sched'} eq $period ? "" : undef);
66 $in{'size_def'} || $in{'size'} =~ /^\d+[kM]?$/ ||
67 &error($text{'save_esize'});
68 &save_directive($log, "size", $in{'size_def'} ? undef : $in{'size'});
70 $in{'rotate_def'} || $in{'rotate'} =~ /^\d+$/ ||
71 &error($text{'save_erotate'});
72 &save_directive($log, "rotate", $in{'rotate_def'} ? undef
75 &parse_yesno("compress", "nocompress", $log);
76 &parse_yesno("delaycompress", "nodelaycompress", $log);
77 &parse_yesno("copytruncate", "nocopytruncate", $log);
78 &parse_yesno("ifempty", "notifempty", $log);
79 &parse_yesno("missingok", "nomissingok", $log);
81 if ($in{'create'} == 2) {
82 &error($text{'save_emust1'}) if ($in{'createuser'} ne '' &&
83 $in{'createmode'} eq '');
84 &error($text{'save_emust2'}) if ($in{'creategroup'} ne '' &&
85 $in{'createuser'} eq '');
86 $in{'createmode'} eq '' ||
87 $in{'createmode'} =~ /^[0-7]{3,4}$/ ||
88 &error($text{'save_ecreatemode'});
89 $in{'createuser'} eq '' ||
90 defined(getpwnam($in{'createuser'})) ||
91 &error($text{'save_ecreateuser'});
92 $in{'creategroup'} eq '' ||
93 defined(getgrnam($in{'creategroup'})) ||
94 &error($text{'save_ecreategroup'});
95 &save_directive($log, "create",
96 $in{'createmode'}." ".
97 $in{'createuser'}." ".$in{'creategroup'});
98 &save_directive($log, "nocreate");
100 elsif ($in{'create'} == 1) {
101 &save_directive($log, "create");
102 &save_directive($log, "nocreate", "");
104 elsif ($in{'create'} == 0) {
105 &save_directive($log, "create");
106 &save_directive($log, "nocreate");
109 if ($in{'olddir'} == 2) {
110 -d $in{'olddirto'} || &error($text{'save_eolddirto'});
111 &save_directive($log, "olddir", $in{'olddirto'});
112 &save_directive($log, "noolddir");
114 elsif ($in{'olddir'} == 1) {
115 &save_directive($log, "olddir");
116 &save_directive($log, "noolddir", "");
118 elsif ($in{'olddir'} == 0) {
119 &save_directive($log, "olddir");
120 &save_directive($log, "noolddir");
123 $in{'ext_def'} || $in{'ext'} =~ /^\S+$/ ||
124 &error($text{'save_eext'});
125 &save_directive($log, "extension", $in{'ext_def'} ? undef : $in{'ext'});
127 if ($in{'mail'} == 2) {
128 $in{'mailto'} =~ /^\S+$/ || &error($text{'save_emailto'});
129 &save_directive($log, "mail", $in{'mailto'});
130 &save_directive($log, "nomail");
132 elsif ($in{'mail'} == 1) {
133 &save_directive($log, "mail");
134 &save_directive($log, "nomail", "");
136 elsif ($in{'mail'} == 0) {
137 &save_directive($log, "mail");
138 &save_directive($log, "nomail");
141 &parse_yesno("mailfirst", "maillast", $log);
143 if (defined($in{'errors'})) {
144 $in{'errors_def'} || $in{'errors'} =~ /^\S+$/ ||
145 &error($text{'save_eerrors'});
146 &save_directive($log, "errors", $in{'errors_def'} ? undef
150 if ($in{'pre'} =~ /\S/) {
151 $in{'pre'} =~ s/\r//g;
152 &has_endscript($in{'pre'}) && &error($text{'save_epre'});
153 &save_directive($log, "prerotate",
154 { "name" => "prerotate",
155 "script" => $in{'pre'} });
158 &save_directive($log, "prerotate");
161 if ($in{'post'} =~ /\S/) {
162 $in{'post'} =~ s/\r//g;
163 &has_endscript($in{'post'}) && &error($text{'save_epost'});
164 &save_directive($log, "postrotate",
165 { "name" => "postrotate",
166 "script" => $in{'post'} });
169 &save_directive($log, "postrotate");
172 if (&get_logrotate_version() >= 3.4) {
173 &parse_yesno("sharedscripts", "nosharedscripts", $log);
176 if (!$in{'global'}) {
177 # Save or create the actual log entry
178 &save_directive($parent, $oldlog, $log);
183 &delete_if_empty($log->{'file'}) if ($in{'delete'});
184 &unlock_file($log->{'file'});
185 &webmin_log($in{'delete'} ? "delete" : $in{'new'} ? "create" : "modify",
186 $in{'global'} ? "global" : "log", $logfile);
190 # parse_yesno(yesvalue, novalue, &conf)
193 local $d0 = &find($_[0], $_[2]->{'members'});
194 local $d1 = &find($_[1], $_[2]->{'members'});
195 if ($in{$_[0]} == 2 && !$d0) {
196 # Adding or replacing 'yes' value
197 &save_directive($_[2], $d1 || $_[0],
198 { 'name' => $_[0], 'value' => '' });
200 elsif ($in{$_[0]} == 1 && !$d1) {
201 # Adding or replacing 'no' value
202 &save_directive($_[2], $d0 || $_[1],
203 { 'name' => $_[1], 'value' => '' });
205 elsif ($in{$_[0]} == 0) {
206 &save_directive($_[2], $_[0]);
207 &save_directive($_[2], $_[1]);
214 foreach $l (split(/\n/, $_[0])) {
215 return 1 if ($l =~ /^\s*(endscript|endrotate)\s*$/);