Added option to not grant new permissions to users
[webmin.git] / acl_security.pl
1
2 do 'web-lib.pl';
3 &init_config();
4 do 'ui-lib.pl';
5
6 # acl_security_form(&options)
7 # Output HTML for editing global security options
8 sub acl_security_form
9 {
10 local $o = $_[0];
11
12 # Root directory for file browser
13 print &ui_table_row($text{'acl_root'},
14         &ui_opt_textbox("root", $o->{'root'}, 40, $text{'acl_home'})." ".
15         &file_chooser_button("root", 1));
16
17 # Other dirs to allow
18 print &ui_table_row($text{'acl_otherdirs'},
19         &ui_textarea("otherdirs", join("\n", split(/\t+/, $o->{'otherdirs'})),
20                      5, 40), 3);
21
22 # Can see dot files?
23 print &ui_table_row($text{'acl_nodot'},
24         &ui_yesno_radio("nodot", int($o->{'nodot'})));
25
26 # Browse as Unix user
27 print &ui_table_row($text{'acl_fileunix'},
28         &ui_opt_textbox("fileunix", $o->{'fileunix'}, 13,
29                         $text{'acl_sameunix'})." ".
30         &user_chooser_button("fileunix"));
31
32 print &ui_hr();
33
34 # Users visible in chooser
35 print &ui_table_row($text{'acl_uedit'},
36   &ui_radio_table("uedit_mode", int($o->{'uedit_mode'}),
37         [ [ 0, $text{'acl_uedit_all'} ],
38           [ 1, $text{'acl_uedit_none'} ],
39           [ 2, $text{'acl_uedit_only'},
40                &ui_textbox("uedit_can",
41                            $o->{'uedit_mode'} == 2 ? $o->{'uedit'} : "", 40).
42                " ".&user_chooser_button("uedit_can", 1) ],
43           [ 3, $text{'acl_uedit_except'},
44                &ui_textbox("uedit_cannot",
45                            $o->{'uedit_mode'} == 3 ? $o->{'uedit'} : "", 40).
46                " ".&user_chooser_button("uedit_cannot", 1) ],
47           [ 4, $text{'acl_uedit_uid'},
48                &ui_textbox("uedit_uid",
49                            $o->{'uedit_mode'} == 4 ? $o->{'uedit'} : "", 6).
50                " - ".
51                &ui_textbox("uedit_uid2",
52                            $o->{'uedit_mode'} == 4 ? $o->{'uedit2'} : "", 6) ],
53           [ 5, $text{'acl_uedit_group'},
54                &ui_group_textbox("uedit_group",
55                 $o->{'uedit_mode'} == 5 ? $dummy=getgrgid($o->{'uedit'}) : "")],
56         ]));
57
58 # Groups visible in chooser
59 print &ui_table_row($text{'acl_gedit'},
60     &ui_radio_table("gedit_mode", int($o->{'gedit_mode'}),
61         [ [ 0, $text{'acl_gedit_all'} ],
62           [ 1, $text{'acl_gedit_none'} ],
63           [ 2, $text{'acl_gedit_only'},
64                &ui_textbox("gedit_can",
65                            $o->{'gedit_mode'} == 2 ? $o->{'gedit'} : "", 40).
66                " ".&group_chooser_button("gedit_can", 1) ],
67           [ 3, $text{'acl_gedit_except'},
68                &ui_textbox("gedit_cannot",
69                            $o->{'gedit_mode'} == 3 ? $o->{'gedit'} : "", 40).
70                " ".&group_chooser_button("gedit_cannot", 1) ],
71           [ 4, $text{'acl_gedit_gid'},
72                &ui_textbox("gedit_gid",
73                            $o->{'gedit_mode'} == 4 ? $o->{'gedit'} : "", 6).
74                " - ".
75                &ui_textbox("gedit_gid2",
76                            $o->{'gedit_mode'} == 4 ? $o->{'gedit2'} : "", 6) ],
77         ]));
78
79 print &ui_table_hr();
80
81 # Can submit feedback?
82 print &ui_table_row($text{'acl_feedback'},
83         &ui_radio("feedback", int($o->{'feedback'}),
84                   [ map { [ $_, $text{'acl_feedback'.$_} ] } (2,3,1,0) ]));
85
86 # Can accept RPC calls?
87 print &ui_table_row($text{'acl_rpc'},
88         &ui_radio("rpc", int($o->{'rpc'}),
89                   [ [ 1, $text{'acl_rpc1'} ],
90                     $o->{'rpc'} == 2 ? ( [ 2, $text{'acl_rpc2'} ] ) : ( ),
91                     [ 0, $text{'acl_rpc0'} ] ]));
92
93 # Get new permissions?
94 print &ui_table_row($text{'acl_negative'},
95         &ui_radio("negative", int($o->{'negative'}),
96                   [ [ 0, $text{'yes'} ], [ 1, $text{'no'} ] ]));
97
98 # Readonly mode
99 print &ui_table_row($text{'acl_readonly2'},
100         &ui_radio("readonly", int($o->{'readonly'}),
101                   [ [ 1, $text{'acl_readonlyyes'} ],
102                     [ 0, $text{'no'} ] ]));
103 }
104
105 # acl_security_save(&options)
106 # Parse the form for global security options
107 sub acl_security_save
108 {
109 $_[0]->{'root'} = $in{'root_def'} ? undef : $in{'root'};
110 $_[0]->{'otherdirs'} = join("\t", split(/\r?\n/, $in{'otherdirs'}));
111 $_[0]->{'nodot'} = $in{'nodot'};
112
113 $_[0]->{'uedit_mode'} = $in{'uedit_mode'};
114 $_[0]->{'uedit'} = $in{'uedit_mode'} == 2 ? $in{'uedit_can'} :
115                    $in{'uedit_mode'} == 3 ? $in{'uedit_cannot'} :
116                    $in{'uedit_mode'} == 4 ? $in{'uedit_uid'} :
117                    $in{'uedit_mode'} == 5 ? getgrnam($in{'uedit_group'}) : "";
118 $_[0]->{'uedit2'} = $in{'uedit_mode'} == 4 ? $in{'uedit_uid2'} : undef;
119
120 $_[0]->{'gedit_mode'} = $in{'gedit_mode'};
121 $_[0]->{'gedit'} = $in{'gedit_mode'} == 2 ? $in{'gedit_can'} :
122                    $in{'gedit_mode'} == 3 ? $in{'gedit_cannot'} :
123                    $in{'gedit_mode'} == 4 ? $in{'gedit_gid'} : "";
124 $_[0]->{'gedit2'} = $in{'gedit_mode'} == 4 ? $in{'gedit_gid2'} : undef;
125 $_[0]->{'feedback'} = $in{'feedback'};
126 $_[0]->{'rpc'} = $in{'rpc'};
127 $_[0]->{'negative'} = $in{'negative'};
128 $_[0]->{'readonly'} = $in{'readonly'};
129 $_[0]->{'fileunix'} = $in{'fileunix_def'} ? undef : $in{'fileunix'};
130 }
131