#!/usr/local/bin/perl # edit_group.cgi # Display a form for editing or creating a group require './user-lib.pl'; &ReadParse(); # Get group and show page header $n = $in{'group'}; if ($n eq "") { $access{'gcreate'} == 1 || &error($text{'gedit_ecreate'}); &ui_print_header(undef, $text{'gedit_title2'}, "", "create_group"); } else { @glist = &list_groups(); ($ginfo_hash) = grep { $_->{'group'} eq $n } @glist; $ginfo_hash || &error($text{'gedit_egone'}); %group = %$ginfo_hash; &can_edit_group(\%access, \%group) || &error($text{'gedit_eedit'}); &ui_print_header(undef, $text{'gedit_title'}, "", "edit_group"); } @ulist = &list_users(); &build_group_used(\%gused); # Start of form print &ui_form_start("save_group.cgi", "post"); print &ui_hidden("old", $n) if ($n ne ""); print &ui_table_start($text{'gedit_details'}, "width=100%", 2, [ "width=30%" ]); # Group name print &ui_table_row(&hlink($text{'gedit_group'}, "ggroup"), $n eq "" ? &ui_textbox("group", undef, 20) : "".&html_escape($group{'group'}).""); # Group ID if ($n ne "") { # Existing group, just show field to edit $gidfield = &ui_textbox("gid", $group{'gid'}, 10); } else { # Work out which GID modes are available @gidmodes = ( ); $defgid = &allocate_gid(\%gused); if ($access{'autogid'}) { push(@gidmodes, [ 1, $text{'gedit_gid_def'} ]); } if ($access{'calcgid'}) { push(@gidmodes, [ 2, $text{'gedit_gid_calc'} ]); } if ($access{'usergid'}) { push(@gidmodes, [ 0, &ui_textbox("gid", $defgid, 10) ]); } if (@gidmodes == 1) { $gidfield = &ui_hidden("gid_def", $gidmodes[0]->[0]). $gidmodes[0]->[1]; } else { $gidfield = &ui_radio("gid_def", $config{'gid_mode'}, \@gidmodes); } } print &ui_table_row(&hlink($text{'gedit_gid'}, "ggid"), $gidfield); # Group password (rarely used, but..) print &ui_table_row(&hlink($text{'pass'}, "gpasswd"), &ui_radio_table("passmode", $group{'pass'} eq "" ? 0 : 1, [ [ 0, $text{'none2'} ], [ 1, $text{'encrypted'}, &ui_textbox("encpass", $group{'pass'}, 20) ], [ 2, $text{'clear'}, &ui_textbox("pass", undef, 15) ] ])); # Member chooser @ulist = &sort_users(\@ulist, $config{'sort_mode'}); if ($config{'membox'} == 0) { # Nicer left/right chooser print &ui_table_row(&hlink($text{'gedit_members'}, "gmembers"), &ui_multi_select("members", [ map { [ $_, $_ ] } sort { lc($a) cmp lc($b) } split(/,/ , &html_escape($group{'members'})) ], [ map { [ $_->{'user'}, &html_escape($_->{'user'}) ] } @ulist ], 10, 1, 0, $text{'gedit_allu'}, $text{'gedit_selu'}, 150)); } else { # Text box print &ui_table_row(&hlink($text{'gedit_members'}, "gmembers"), &ui_textarea("members", join("\n", split(/,/ , $group{'members'})), 5, 30)); } # Primary members (read-only) if ($n ne "") { @upri = grep { $_->{'gid'} == $group{'gid'} } @ulist; if (@upri) { @uprilinks = ( ); foreach $u (@upri) { if (&can_edit_user(\%access, $u)) { push(@uprilinks, "".&html_escape($u->{'user'}).""); } else { push(@uprilinks, $u->{'user'}); } } $upri = &ui_links_row(\@uprilinks); } else { $upri = $text{'gedit_prinone'}; } print &ui_table_row(&hlink($text{'gedit_pri'}, "gpri"), $upri, 3); } print &ui_table_end(); # Section for on-change and on-create events if ($n ne "") { if ($access{'chgid'} == 1 || $access{'mothers'} == 1) { print &ui_table_start($text{'onsave'}, "width=100%", 2, [ "width=30%" ]); # Change file GIDs on save if ($access{'chgid'} == 1) { print &ui_table_row( &hlink($text{'chgid'}, "gchgid"), &ui_radio("chgid", 0, [ [ 0, $text{'no'} ], [ 1, $text{'gedit_homedirs'} ], [ 2, $text{'gedit_allfiles'} ] ])); } # Update in other modules? if ($access{'mothers'} == 1) { print &ui_table_row( &hlink($text{'gedit_mothers'}, "others"), &ui_radio("others", $config{'default_other'}, [ [ 1, $text{'yes'} ], [ 0, $text{'no'} ] ])); } print &ui_table_end(); } } else { if ($access{'cothers'} == 1) { print &ui_table_start($text{'uedit_oncreate'}, "width=100%", 2, [ "width=30%" ]); # Create in other modules? print &ui_table_row( &hlink($text{'gedit_cothers'}, "others"), &ui_radio("others", $config{'default_other'}, [ [ 1, $text{'yes'} ], [ 0, $text{'no'} ] ])); print &ui_table_end(); } } # Save/delete/create buttons if ($n ne "") { print &ui_form_end([ [ undef, $text{'save'} ], $access{'gdelete'} ? ( [ 'delete', $text{'delete'} ] ) : ( ), ]); } else { print &ui_form_end([ [ undef, $text{'create'} ] ]); } &ui_print_footer("index.cgi?mode=groups", $text{'index_return'});