Handle hostnames with upper-case letters
[webmin.git] / wuftpd / save_class.cgi
1 #!/usr/local/bin/perl
2 # save_class.cgi
3 # Save user classes
4
5 require './wuftpd-lib.pl';
6 &error_setup($text{'class_err'});
7 &ReadParse();
8
9 &lock_file($config{'ftpaccess'});
10 $conf = &get_ftpaccess();
11
12 # save class options
13 for($i=0; defined($class = $in{"class_$i"}); $i++) {
14         next if (!$class);
15         $class =~ /^\S+$/ || &error(&text('class_eclass', $class));
16         @types = split(/\0/, $in{"types_$i"});
17         @types || &error(&text('class_etypes', $class));
18         @addrs = split(/\s+/, $in{"addrs_$i"});
19         @addrs || &error(&text('class_eaddrs', $class));
20         push(@class, { 'name' => 'class',
21                        'star' => $addrs[0] eq '*',
22                        'values' => [ $class, join(",", @types), @addrs ] });
23         }
24 @class = sort { $a->{'star'} ? 1 : $b->{'star'} ? -1 : 0 } @class;
25 &save_directive($conf, 'class', \@class);
26
27 # save guest/real user/group options
28 foreach $g ('guestuser', 'guestgroup', 'realuser', 'realgroup') {
29         if ($in{$g}) {
30                 &save_directive($conf, $g, [ { 'name' => $g,
31                                                'values' => [ $in{$g} ] } ] );
32                 }
33         else {
34                 &save_directive($conf, $g, [ ]);
35                 }
36         }
37
38 # save allow/deny uid/gid options
39 &lock_file($config{'ftpusers'});
40 if ($in{'ftpusers'}) {
41         &open_tempfile(FTPUSERS, ">$config{'ftpusers'}");
42         foreach $u (split(/\s+/, $in{'ftpusers'})) {
43                 &print_tempfile(FTPUSERS, $u,"\n");
44                 }
45         &close_tempfile(FTPUSERS);
46         }
47 else {
48         unlink($config{'ftpusers'});
49         }
50 &unlock_file($config{'ftpusers'});
51 foreach $g ('deny-uid', 'deny-gid', 'allow-uid', 'allow-gid') {
52         ($fg = $g) =~ s/-/_/g;
53         if ($in{$fg}) {
54                 &save_directive($conf, $g, [ { 'name' => $g,
55                                                'values' => [ $in{$fg} ] } ] );
56                 }
57         else {
58                 &save_directive($conf, $g, [ ]);
59                 }
60         }
61
62 &flush_file_lines();
63 &unlock_file($config{'ftpaccess'});
64 &webmin_log("class", undef, undef, \%in);
65 &redirect("");
66