diff --git a/ldap-useradmin/edit_user.cgi b/ldap-useradmin/edit_user.cgi index 04ce37dd3..0dfe6449c 100755 --- a/ldap-useradmin/edit_user.cgi +++ b/ldap-useradmin/edit_user.cgi @@ -62,6 +62,7 @@ else { &can_edit_user(\%uinfo) || &error($text{'uedit_eedit'}); &ui_print_header(undef, $text{'uedit_title'}, ""); } +@tds = ( "width=30%" ); # build a list of used shells and uids @shlist = ($mconfig{'default_shell'} ? ( $mconfig{'default_shell'} ) : ( )); @@ -83,47 +84,40 @@ if ($shells{'shells'}) { push(@shlist, $shell) if ($shell); @shlist = &unique(@shlist); -print "
\n"; -print "\n"; -print "\n"; -print "\n"; - -print "\n"; -print "\n"; -print "
$text{'uedit_details'}
\n"; +# Start of the form +print &ui_form_start("save_user.cgi", "post"); +print &ui_hidden("new", $in{'new'}); +print &ui_hidden("dn", $in{'dn'}); +print &ui_table_start($text{'uedit_details'}, "width=100%", 2, \@tds); +# DN and classes if (!$in{'new'}) { - print "\n"; - print "\n"; + print &ui_table_row($text{'uedit_dn'}, + "$in{'dn'}", 3); - print "\n"; - print "\n"; + print &ui_table_row($text{'uedit_classes'}, + ,join(" , ", map { "$_" } + $uinfo->get_value('objectClass')), 3); } # Show username input -print "\n"; -if (@users > 1) { - print "\n"; - } -else { - print "\n"; - } +print &ui_table_row($text{'user'}, + @users > 1 ? &ui_textarea("user", join("\n", @users), 2, 10) + : &ui_textbox("user", $user, 20)); # Show UID input, filled in with a default for new users -print "\n"; if ($in{'new'}) { # Find the first free UID above the base $newuid = $mconfig{'base_uid'}; while(&check_uid_used($ldap, $newuid)) { $newuid++; } - print "\n"; + $uidfield = &ui_textbox("uid", $newuid, 10); } else { - print "\n"; + $uidfield = &ui_textbox("uid", $uid, 10); } +print &ui_table_row($text{'uid'}, $uidfield); if ($config{'given'}) { # Show Full name inputs @@ -137,49 +131,39 @@ if ($config{'given'}) { $onch = "onChange='form.real.value = form.lastname.value+\", \"+form.firstname.value'"; } } - print "\n"; - print "\n"; + print &ui_table_row($text{'uedit_firstname'}, + &ui_textbox("firstname", $firstname, 20, 0, undef, $onch)); - print "\n"; - print "\n"; + print &ui_table_row($text{'uedit_lastname'}, + &ui_textbox("lastname", $lastname, 20, 0, undef, $onch)); } # Show real name input -print "\n"; -print "\n"; +print &ui_table_row($text{'real'}, + &ui_textbox("real", $real, 40)); # Show home directory input, with an 'automatic' option -print "\n"; -print "\n"; +print &ui_table_row(&hlink($text{'home'}, "home"), $homefield); # Show shell selection menu -print "\n"; -print "\n"; +print &ui_table_row($text{'shell'}, + &ui_select("shell", $uinfo{'shell'}, \@shlist, 1, 0, 0, 0, + "onChange='form.othersh.disabled = form.shell.value != \"*\"'"). + &ui_filebox("othersh", undef, 40, 1)); -# Show password fields +# Generate password if needed if ($in{'new'} && $mconfig{'random_password'}) { &seed_random(); foreach (1 .. 15) { @@ -187,7 +171,9 @@ if ($in{'new'} && $mconfig{'random_password'}) { rand(scalar(@random_password_chars))]; } } -if (%uinfo && $pass ne $config{'lock_string'} && $pass ne "") { + +# Check if temporary locking is supported +if (!$in{'new'} && $pass ne $mconfig{'lock_string'} && $pass ne "") { # Can disable if not already locked, or if a new account $can_disable = 1; if ($pass =~ /^\Q$useradmin::disable_string\E/) { @@ -195,69 +181,52 @@ if (%uinfo && $pass ne $config{'lock_string'} && $pass ne "") { $pass =~ s/^\Q$useradmin::disable_string\E//; } } -elsif (!%uinfo) { +elsif ($in{'new'}) { $can_disable = 1; } -print "\n"; - -# Show alternate shell field -print "\n"; -print "\n"; -print "\n"; - -print "
$text{'uedit_dn'}$in{'dn'}
$text{'uedit_classes'}",join(" , ", map { "$_" } - $uinfo->get_value('objectClass')),"
$text{'user'}$text{'uid'}
$text{'uedit_firstname'}$text{'uedit_lastname'}
$text{'real'}$text{'home'}\n"; if ($mconfig{'home_base'}) { local $hb = $in{'new'} || &auto_home_dir($mconfig{'home_base'}, $user) eq $home; - printf " %s\n", - $hb ? "checked" : "", $text{'uedit_auto'}; - printf "\n", - $hb ? "" : "checked"; - printf " %s\n", - $hb ? "" : $home, - &file_chooser_button("home", 1); + $homefield = &ui_radio("home_base", $hb ? 1 : 0, + [ [ 1, $text{'uedit_auto'} ], + [ 0, &ui_filebox("home", $hb ? "" : $home, + 25, 0, undef, undef, 1) ] + ]); } else { - print "\n", - &file_chooser_button("home", 1); + $homefield = &ui_filebox("home", $home, 25, 0, undef, undef, 1); } -print "
$text{'shell'}$text{'pass'}", - " \n"; -printf" %s
\n", - $pass eq "" && $random_password eq "" ? "checked" : "", - $mconfig{'empty_mode'} ? $text{'none1'} : $text{'none2'}; -printf" $text{'nologin'}
\n", - $pass eq $mconfig{'lock_string'} && $random_password eq "" ? "checked" : ""; -printf " $text{'clear'}\n", - $random_password ne "" ? "checked" : ""; -printf "
\n", - $mconfig{'passwd_stars'} ? "type=password" : "", - $mconfig{'random_password'} && $n eq "" ? $random_password : ""; +# Show password field +$passmode = $pass eq "" && $random_password eq "" ? 0 : + $pass eq $mconfig{'lock_string'} && $random_password eq "" ? 1 : + $random_password ne "" ? 3 : + $pass && $pass ne $mconfig{'lock_string'} && + $random_password eq "" ? 2 : -1; +$pffunc = $mconfig{'passwd_stars'} ? \&ui_password : \&ui_textbox; +print &ui_table_row(&hlink($text{'pass'}, "pass"), + &ui_radio_table("passmode", $passmode, + [ [ 0, $mconfig{'empty_mode'} ? $text{'none1'} : $text{'none2'} ], + [ 1, $text{'nologin'} ], + [ 3, $text{'clear'}, + &$pffunc("pass", $mconfig{'random_password'} && $n eq "" ? + $random_password : "", 15) ], + $access{'nocrypt'} ? ( [ 2, $text{'nochange'}, + &ui_hidden("encpass", $pass) ] ) : + ( [ 2, $text{'encrypted'}, + &ui_textbox("encpass", $passmode == 2 ? $pass : "", 40) ] ) + ]). + ($can_disable ? "  ".&ui_checkbox("disable", 1, + $text{'uedit_disabled'}, $disabled) : "") + ); -printf " $text{'encrypted'}\n", - $pass && $pass ne $mconfig{'lock_string'} ? "checked" : ""; -printf "\n", - $pass && $pass ne $mconfig{'lock_string'} ? $pass : ""; - -# Show password lock checkbox -if ($can_disable) { - printf "
   ". - " %s\n", - $disabled ? "checked" : "", $text{'uedit_disabled'}; - } - -print "
$text{'uedit_other'}\n"; -print &file_chooser_button("othersh", 0),"

\n"; +print &ui_table_end(); +# Show shadow password options if (&in_schema($schema, "shadowLastChange")) { - # Show shadow password options - print "\n"; - print "\n"; - print "
$text{'uedit_passopts'}
\n"; - print "\n"; - print "\n"; + print &ui_table_start($text{'uedit_passopts'}, "width=100%", 4, \@tds); - print "\n"; - if ($in{'new'}) { - if ($mconfig{'default_expire'} =~ - /^(\d+)\/(\d+)\/(\d+)$/) { - $eday = $1; - $emon = $2; - $eyear = $3; - } + # Last change date + print &ui_table_row($text{'change'}, + ($uinfo{'change'} ? &make_date(timelocal( + gmtime($change * 60*60*24)),1) : + $n eq "" ? $text{'uedit_never'} : + $text{'uedit_unknown'})); + + # Expiry date + if ($in{'new'} && + $mconfig{'default_expire'} =~ /^(\d+)\/(\d+)\/(\d+)$/) { + $eday = $1; + $emon = $2; + $eyear = $3; } elsif ($expire) { @tm = localtime(timelocal(gmtime($expire * 60*60*24))); @@ -265,40 +234,40 @@ if (&in_schema($schema, "shadowLastChange")) { $emon = $tm[4]+1; $eyear = $tm[5]+1900; } - print "\n"; + print &ui_table_row(&hlink($text{'expire'}, "expire"), + &date_input($eday, $emon, $eyear, 'expire')); - print "\n"; - printf "\n", - $in{'new'} ? $mconfig{'default_min'} : $min; + # Minimum and maximum days for changing + print &ui_table_row($text{'min'}, + &ui_textbox("min", $in{'new'} ? $mconfig{'default_min'} + : $min, 5)); + print &ui_table_row($text{'max'}, + &ui_textbox("max", $in{'new'} ? $mconfig{'default_max'} + : $max, 5)); - print "\n"; - printf "\n", - $in{'new'} ? $mconfig{'default_max'} : $max; + # Password warning days + print &ui_table_row($text{'warn'}, + &ui_textbox("warn", $in{'new'} ? $mconfig{'default_warn'} + : $warn, 5)); - print "\n"; - printf "\n", - $in{'new'} ? $mconfig{'default_warn'} : $warn; - - print "\n"; - printf "\n", - $in{'new'} ? $mconfig{'default_inactive'} : $inactive; - - print "
$text{'change'}"; - if ($change) { - @tm = localtime(timelocal(gmtime($change * 60*60*24))); - printf "%s/%s/%s\n", - $tm[3], $text{"smonth_".($tm[4]+1)}, $tm[5]+1900; - } - elsif ($in{'new'}) { print "$text{'uedit_never'}\n"; } - else { print "$text{'uedit_unknown'}\n"; } - print "$text{'expire'}"; - &useradmin::date_input($eday, $emon, $eyear, 'expire'); - print "
$text{'min'}$text{'max'}
$text{'warn'}$text{'inactive'}

\n"; + # Inactive dats + print &ui_table_row($text{'inactive'}, + &ui_textbox("inactive", $in{'new'} ?$mconfig{'default_inactive'} + : $inactive, 5)); + print &ui_table_end(); } -# Show primary group -print "\n"; -print "\n"; -print "
$text{'uedit_gmem'}
\n"; -print "\n", - $in{'new'} ? $mconfig{'default_group'} - : ($x=&all_getgrgid($gid)) || $gid, - &group_chooser_button("gid"); +# Group memberships section +print &ui_table_start($text{'uedit_gmem'}, "width=100%", 4, \@tds); +# Primary group +print &ui_table_row($text{'group'}, + &ui_textbox("gid", $in{'new'} ? $mconfig{'default_group'} + : ($x=&all_getgrgid($gid)) || $gid, 13). + " ".&group_chooser_button("gid")); + +# XXXX if ($config{'secmode'} != 1) { # Work out which secondary groups the user is in @defsecs = &split_quoted_string($mconfig{'default_secs'}); @@ -346,7 +315,7 @@ else { } print "\n"; -print "
$text{'group'} \n"; -printf " %s

\n"; +print &ui_table_end(); # Show extra fields (if any) &extra_fields_input($config{'fields'}, $uinfo);