Handle hostnames with upper-case letters
[webmin.git] / syslog-ng / save_log.cgi
1 #!/usr/local/bin/perl
2 # Create, update or delete a log target
3
4 require './syslog-ng-lib.pl';
5 &ReadParse();
6 &error_setup($text{'log_err'});
7
8 # Get the old log
9 $conf = &get_config();
10 if (!$in{'new'}) {
11         @logs = &find("log", $conf);
12         ($log) = grep { $_->{'index'} == $in{'idx'} } @logs;
13         $log || &error($text{'log_egone'});
14         $old = $log;
15         }
16 else {
17         $log = { 'name' => 'log',
18                   'type' => 1,
19                   'members' => [ ] };
20         }
21
22 &lock_file($config{'syslogng_conf'});
23 if ($in{'delete'}) {
24         # Just delete it!
25         &save_directive($conf, undef, $log, undef, 0);
26         }
27 else {
28         # Save sources
29         @oldsources = &find("source", $log->{'members'});
30         foreach $s (split(/\0/, $in{'source'})) {
31                 push(@newsources, { 'name' => 'source',
32                                     'type' => 0,
33                                     'values' => [ $s ] });
34                 }
35         @newsources || &error($text{'log_esource'});
36         &save_multiple_directives($conf, $log, \@oldsources, \@newsources, 1);
37
38         # Save filters
39         @oldfilters = &find("filter", $log->{'members'});
40         foreach $s (split(/\0/, $in{'filter'})) {
41                 push(@newfilters, { 'name' => 'filter',
42                                     'type' => 0,
43                                     'values' => [ $s ] });
44                 }
45         &save_multiple_directives($conf, $log, \@oldfilters, \@newfilters, 1);
46
47         # Save destinations
48         @olddestinations = &find("destination", $log->{'members'});
49         foreach $s (split(/\0/, $in{'destination'})) {
50                 push(@newdestinations, { 'name' => 'destination',
51                                     'type' => 0,
52                                     'values' => [ $s ] });
53                 }
54         &save_multiple_directives($conf, $log, \@olddestinations, \@newdestinations, 1);
55
56         # Save flags
57         @flags = ( );
58         foreach $f (@log_flags) {
59                 if ($in{$f}) {
60                         push(@flags, $f, ",");
61                         }
62                 }
63         $fdir = undef;
64         if (@flags) {
65                 pop(@flags);  # remove last ,
66                 $fdir = { 'name' => 'flags',
67                           'type' => 0,
68                           'values' => \@flags };
69                 }
70         &save_directive($conf, $log, 'flags', $fdir, 1);
71
72         # Actually update the object
73         &save_directive($conf, undef, $old, $log, 0);
74         }
75
76 &unlock_file($config{'syslogng_conf'});
77 &webmin_log($in{'delete'} ? 'delete' : $in{'new'} ? 'create' : 'modify',
78             'log');
79 &redirect("list_logs.cgi");
80