Handle hostnames with upper-case letters
[webmin.git] / ldap-useradmin / edit_group.cgi
1 #!/usr/local/bin/perl
2 # edit_group.cgi
3 # Display a form for editing or creating a group
4
5 require './ldap-useradmin-lib.pl';
6 &ReadParse();
7 $ldap = &ldap_connect();
8 if ($in{'new'}) {
9         $access{'gcreate'} || &error($text{'gedit_ecreate'});
10         &ui_print_header(undef, $text{'gedit_title2'}, "");
11         }
12 else {
13         $rv = $ldap->search(base => $in{'dn'},
14                             scope => 'base',
15                             filter => &group_filter());
16         ($ginfo) = $rv->all_entries;
17         $group = $ginfo->get_value('cn');
18         $gid = $ginfo->get_value('gidNumber');
19         $pass = $ginfo->get_value('userPassword');
20         $desc = $ginfo->get_value('description');
21         @members = $ginfo->get_value('memberUid');
22         foreach $oc ($ginfo->get_value('objectClass')) {
23                 $oclass{$oc} = 1;
24                 }
25         %ginfo = &dn_to_hash($ginfo);
26         &can_edit_group(\%ginfo) || &error($text{'gedit_eedit'});
27         &ui_print_header(undef, $text{'gedit_title'}, "");
28         }
29
30 # Build list of all possible users
31 @ulist = &useradmin::list_users();
32 %ulistdone = map { $_->{'user'}, 1 } @ulist;
33 push(@ulist, grep { !$ulistdone{$_->{'user'}} } &list_users());
34
35 # Start of form
36 print &ui_form_start("save_group.cgi", "post");
37 print &ui_hidden("new", $in{'new'});
38 print &ui_hidden("dn", $in{'dn'});
39 print &ui_table_start($text{'gedit_details'}, "width=100%", 2, [ "width=30%" ]);
40
41 # Current DN and classes
42 if (!$in{'new'}) {
43         print &ui_table_row($text{'gedit_dn'},
44                 "<tt>$in{'dn'}</tt>");
45
46         print &ui_table_row($text{'uedit_classes'},
47                 join(" , ", map { "<tt>$_</tt>" }
48                         $ginfo->get_value('objectClass')));
49         }
50
51 # Group name
52 print &ui_table_row($text{'gedit_group'},
53         &ui_textbox("group", $group, 20));
54
55 # Group ID
56 if ($in{'new'}) {
57         # Next GID comes from LDAP only
58         $newgid = $mconfig{'base_gid'};
59         while(&check_gid_used($ldap, $newgid)) {
60                 $newgid++;
61                 }
62         $gidfield = &ui_textbox("gid", $newgid, 10);
63         }
64 else {
65         $gidfield = &ui_textbox("gid", $gid, 10);
66         }
67 print &ui_table_row($text{'gedit_gid'},
68         $gidfield);
69
70 # Description
71 print &ui_table_row($text{'gedit_desc'},
72         &ui_textbox("desc", $desc, 40));
73
74 # Group password (rarely used, but..)
75 print &ui_table_row($text{'pass'},
76         &ui_radio_table("passmode", $pass eq "" ? 0 : 1,
77                 [ [ 0, $text{'none2'} ],
78                   [ 1, $text{'encrypted'},
79                        &ui_textbox("encpass", $pass, 20) ],
80                   [ 2, $text{'clear'},
81                        &ui_textbox("pass", undef, 15) ] ]));
82
83 # Member chooser
84 if ($config{'membox'} == 0) {
85         # Nicer left/right chooser
86         print &ui_table_row($text{'gedit_members'},
87                 &ui_multi_select("members",
88                         [ map { [ $_, $_ ] } @members ],
89                         [ map { [ $_->{'user'}, $_->{'user'} ] } @ulist ],
90                         10, 1, 0,
91                         $text{'gedit_allu'}, $text{'gedit_selu'}, 150));
92         }
93 else {
94         # Text box
95         print &ui_table_row($text{'gedit_members'},
96                 &ui_textarea("members", join("\n", @members), 5, 30));
97         }
98
99 print &ui_table_end();
100
101 # Show extra fields (if any)
102 &extra_fields_input($config{'group_fields'}, $ginfo, \@tds);
103
104 # Show capabilties section
105 print &ui_table_start($text{'gedit_cap'}, "width=100%", 4, [ "width=30%" ]);
106
107 # Samba group?
108 print &ui_table_row($text{'gedit_samba'},
109         &ui_yesno_radio("samba", $oclass{$samba_group_class}));
110
111 print &ui_table_end();
112
113 # Show section for on-save or on-creation options
114 if (!$in{'new'}) {
115         print &ui_table_start($text{'onsave'}, "width=100%", 2,
116                               [ "width=30%" ]);
117
118         # Change GID on save
119         print &ui_table_row($text{'chgid'},
120                 &ui_radio("chgid", 0,
121                   [ [ 0, $text{'no'} ],
122                     [ 1, $text{'gedit_homedirs'} ],
123                     [ 2, $text{'gedit_allfiles'} ] ]));
124
125
126         # Update in other modules?
127         print &ui_table_row($text{'gedit_mothers'},
128                 &ui_radio("others", $mconfig{'default_other'},
129                           [ [ 1, $text{'yes'} ],
130                             [ 0, $text{'no'} ] ]));
131
132         print &ui_table_end();
133         }
134 else {
135         print &ui_table_start($text{'uedit_oncreate'}, "width=100%", 2,
136                               [ "width=30%" ]);
137
138         # Create in other modules?
139         print &ui_table_row($text{'gedit_cothers'},
140                 &ui_radio("others", $mconfig{'default_other'},
141                           [ [ 1, $text{'yes'} ],
142                             [ 0, $text{'no'} ] ]));
143
144         print &ui_table_end();
145         }
146
147 # Save/delete/create buttons
148 if (!$in{'new'}) {
149         print &ui_form_end([ [ undef, $text{'save'} ],
150                              [ 'raw', $text{'uedit_raw'} ],
151                              [ 'delete', $text{'delete'} ],
152                            ]);
153         }
154 else {
155         print &ui_form_end([ [ undef, $text{'create'} ] ]);
156         }
157
158 &ui_print_footer("index.cgi?mode=groups", $text{'index_greturn'});
159