#!/usr/local/bin/perl # edit_group.cgi # Display a form for editing or creating a group require './ldap-useradmin-lib.pl'; &ReadParse(); $ldap = &ldap_connect(); if ($in{'new'}) { $access{'gcreate'} || &error($text{'gedit_ecreate'}); &ui_print_header(undef, $text{'gedit_title2'}, ""); } else { $rv = $ldap->search(base => $in{'dn'}, scope => 'base', filter => &group_filter()); ($ginfo) = $rv->all_entries; $group = $ginfo->get_value('cn'); $gid = $ginfo->get_value('gidNumber'); $pass = $ginfo->get_value('userPassword'); $desc = $ginfo->get_value('description'); @members = $ginfo->get_value('memberUid'); foreach $oc ($ginfo->get_value('objectClass')) { $oclass{$oc} = 1; } %ginfo = &dn_to_hash($ginfo); &can_edit_group(\%ginfo) || &error($text{'gedit_eedit'}); &ui_print_header(undef, $text{'gedit_title'}, ""); } # Build list of all possible users @ulist = &useradmin::list_users(); %ulistdone = map { $_->{'user'}, 1 } @ulist; push(@ulist, grep { !$ulistdone{$_->{'user'}} } &list_users()); # Start of form print &ui_form_start("save_group.cgi", "post"); print &ui_hidden("new", $in{'new'}); print &ui_hidden("dn", $in{'dn'}); print &ui_table_start($text{'gedit_details'}, "width=100%", 2, [ "width=30%" ]); # Current DN and classes if (!$in{'new'}) { print &ui_table_row($text{'gedit_dn'}, "$in{'dn'}"); print &ui_table_row($text{'uedit_classes'}, join(" , ", map { "$_" } $ginfo->get_value('objectClass'))); } # Group name print &ui_table_row($text{'gedit_group'}, &ui_textbox("group", $group, 20)); # Group ID if ($in{'new'}) { # Next GID comes from LDAP only $newgid = $mconfig{'base_gid'}; while(&check_gid_used($ldap, $newgid)) { $newgid++; } $gidfield = &ui_textbox("gid", $newgid, 10); } else { $gidfield = &ui_textbox("gid", $gid, 10); } print &ui_table_row($text{'gedit_gid'}, $gidfield); # Description print &ui_table_row($text{'gedit_desc'}, &ui_textbox("desc", $desc, 40)); # Group password (rarely used, but..) print &ui_table_row($text{'pass'}, &ui_radio_table("passmode", $pass eq "" ? 0 : 1, [ [ 0, $text{'none2'} ], [ 1, $text{'encrypted'}, &ui_textbox("encpass", $pass, 20) ], [ 2, $text{'clear'}, &ui_textbox("pass", undef, 15) ] ])); # Member chooser if ($config{'membox'} == 0) { # Nicer left/right chooser print &ui_table_row($text{'gedit_members'}, &ui_multi_select("members", [ map { [ $_, $_ ] } @members ], [ map { [ $_->{'user'}, $_->{'user'} ] } @ulist ], 10, 1, 0, $text{'gedit_allu'}, $text{'gedit_selu'}, 150)); } else { # Text box print &ui_table_row($text{'gedit_members'}, &ui_textarea("members", join("\n", @members), 5, 30)); } print &ui_table_end(); # Show extra fields (if any) &extra_fields_input($config{'group_fields'}, $ginfo, \@tds); # Show capabilties section print &ui_table_start($text{'gedit_cap'}, "width=100%", 4, [ "width=30%" ]); # Samba group? print &ui_table_row($text{'gedit_samba'}, &ui_yesno_radio("samba", $oclass{$samba_group_class})); print &ui_table_end(); # Show section for on-save or on-creation options if (!$in{'new'}) { print &ui_table_start($text{'onsave'}, "width=100%", 2, [ "width=30%" ]); # Change GID on save print &ui_table_row($text{'chgid'}, &ui_radio("chgid", 0, [ [ 0, $text{'no'} ], [ 1, $text{'gedit_homedirs'} ], [ 2, $text{'gedit_allfiles'} ] ])); # Update in other modules? print &ui_table_row($text{'gedit_mothers'}, &ui_radio("others", $mconfig{'default_other'}, [ [ 1, $text{'yes'} ], [ 0, $text{'no'} ] ])); print &ui_table_end(); } else { print &ui_table_start($text{'uedit_oncreate'}, "width=100%", 2, [ "width=30%" ]); # Create in other modules? print &ui_table_row($text{'gedit_cothers'}, &ui_radio("others", $mconfig{'default_other'}, [ [ 1, $text{'yes'} ], [ 0, $text{'no'} ] ])); print &ui_table_end(); } # Save/delete/create buttons if (!$in{'new'}) { print &ui_form_end([ [ undef, $text{'save'} ], [ 'raw', $text{'uedit_raw'} ], [ 'delete', $text{'delete'} ], ]); } else { print &ui_form_end([ [ undef, $text{'create'} ] ]); } &ui_print_footer("index.cgi?mode=groups", $text{'index_greturn'});