Handle hostnames with upper-case letters
[webmin.git] / apache / manual_save.cgi
1 #!/usr/local/bin/perl
2 # manual_save.cgi
3 # Save manually entered directives
4
5 require './apache-lib.pl';
6 &ReadParseMime();
7 $access{'types'} eq '*' || &error($text{'manual_ecannot'});
8 if (defined($in{'virt'})) {
9         if (defined($in{'idx'})) {
10                 # directory within virtual server
11                 ($vconf, $v) = &get_virtual_config($in{'virt'});
12                 $d = $vconf->[$in{'idx'}];
13                 $file = $d->{'file'};
14                 $return = "dir_index.cgi";
15                 $start = $d->{'line'}+1; $end = $d->{'eline'}-1;
16                 $logtype = 'dir';
17                 $logname = &virtual_name($v, 1).":".$d->{'words'}->[0];
18                 }
19         else {
20                 # virtual server (which can have multiple files!)
21                 ($conf, $v) = &get_virtual_config($in{'virt'});
22                 @files = &unique((map { $_->{'file'} } @$conf), $v->{'file'});
23                 $return = "virt_index.cgi";
24                 $file = $in{'editfile'} || $v->{'file'};
25                 &indexof($file, @files) >= 0 ||
26                         &error($text{'manual_efile'});
27                 if ($file eq $v->{'file'}) {
28                         $start = $v->{'line'}+1; $end = $v->{'eline'}-1;
29                         }
30                 else {
31                         $start = $end = undef;
32                         }
33                 $logtype = 'virt'; $logname = &virtual_name($v, 1);
34                 }
35         }
36 else {
37         if (defined($in{'idx'})) {
38                 # files within .htaccess file
39                 $hconf = &get_htaccess_config($in{'file'});
40                 $d = $hconf->[$in{'idx'}];
41                 $file = $in{'file'};
42                 $return = "files_index.cgi";
43                 $start = $d->{'line'}+1; $end = $d->{'eline'}-1;
44                 $logtype = 'files';
45                 $logname = "$in{'file'}:$d->{'words'}->[0]";
46                 }
47         else {
48                 # .htaccess file
49                 $file = $in{'file'};
50                 $return = "htaccess_index.cgi";
51                 $logtype = 'htaccess'; $logname = $in{'file'};
52                 }
53         }
54
55 &lock_file($file);
56 $temp = &transname();
57 &copy_source_dest($file, $temp);
58 $in{'directives'} =~ s/\r//g;
59 $in{'directives'} =~ s/\s+$//;
60 @dirs = split(/\n/, $in{'directives'});
61 $lref = &read_file_lines($file);
62 if (!defined($start)) {
63         $start = 0;
64         $end = @$lref - 1;
65         }
66 splice(@$lref, $start, $end-$start+1, @dirs);
67 &flush_file_lines();
68 if ($config{'test_manual'}) {
69         $err = &test_config();
70         if ($err) {
71                 &copy_source_dest($temp, $file);
72                 &error(&text('manual_etest', "<pre>$err</pre>"));
73                 }
74         }
75 unlink($temp);
76 &unlock_file($file);
77 &webmin_log($logtype, "manual", $logname, \%in);
78
79 foreach $h ('virt', 'idx', 'file') {
80         push(@args, "$h=$in{$h}") if (defined($in{$h}));
81         }
82 &redirect("$return?".join("&", @args));
83