#!/usr/local/bin/perl # edit_user.cgi # Display a form for editing a user, or creating a new user require './cluster-useradmin-lib.pl'; require 'timelocal.pl'; &ReadParse(); &foreign_require("useradmin", "user-lib.pl"); @hosts = &list_useradmin_hosts(); @servers = &list_servers(); if ($in{'host'} ne '') { ($host) = grep { $_->{'id'} == $in{'host'} } @hosts; local ($u) = grep { $_->{'user'} eq $in{'user'} } @{$host->{'users'}}; %uinfo = %$u; } else { foreach $h (@hosts) { local ($u) = grep { $_->{'user'} eq $in{'user'} } @{$h->{'users'}}; if ($u) { $host = $h; %uinfo = %$u; last; } } } ($serv) = grep { $_->{'id'} == $host->{'id'} } @servers; $desc = &text('uedit_host', $serv->{'desc'} ? $serv->{'desc'} : $serv->{'host'}); &ui_print_header(undef, $text{'uedit_title'}, ""); # build list of used shells foreach $h (@hosts) { foreach $u (@{$h->{'users'}}) { push(@shlist, $u->{'shell'}) if ($u->{'shell'}); } } open(SHELLS, "/etc/shells"); while() { s/\r|\n//g; s/#.*$//; push(@shlist, $_) if (/\S/); } close(SHELLS); print "
\n"; print "\n"; print "{'id'}\">\n"; print "\n"; print "\n"; print "
$text{'uedit_details'}
\n"; print "\n"; print "\n"; print "\n"; printf "\n"; if ($uconfig{'extra_real'}) { local @real = split(/,/, $uinfo{'real'}, 5); print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; } else { if (length($uinfo{'real'}) > 20) { $uinfo{'real'} =~ s/,.*$//; } print "\n"; } print "\n"; printf "\n"; print "\n"; printf "\n"; print "\n"; printf "\n"; print "
$text{'user'}
$text{'uid'} %s (%s)\n", $text{'uedit_leave'}, $uinfo{'uid'}; printf " %s\n", $text{'uedit_set'}; print "
$text{'real'} \n"; printf " %s (%s)\n", $text{'uedit_leave'}, $real[0] ? $real[0] : $text{uedit_none}; printf " %s\n", $text{'uedit_set'}; print "
$text{'office'} \n"; printf " %s (%s)\n", $text{'uedit_leave'}, $real[1] ? $real[1] : $text{uedit_none}; printf " %s\n", $text{'uedit_set'}; print "
$text{'workph'} \n"; printf " %s (%s)\n", $text{'uedit_leave'}, $real[2] ? $real[2] : $text{uedit_none}; printf " %s\n", $text{'uedit_set'}; print "
$text{'homeph'} \n"; printf " %s (%s)\n", $text{'uedit_leave'}, $real[3] ? $real[3] : $text{uedit_none}; printf " %s\n", $text{'uedit_set'}; print "
$text{'extra'} \n"; printf " %s (%s)\n", $text{'uedit_leave'}, $real[4] ? $real[4] : $text{uedit_none}; printf " %s\n", $text{'uedit_set'}; print "
$text{'real'} \n"; printf " %s (%s)\n", $text{'uedit_leave'}, $uinfo{'real'} ? $uinfo{'real'} : $text{uedit_none}; printf " %s\n", $text{'uedit_set'}; print "
$text{'home'} %s (%s)\n", $text{'uedit_leave'}, $uinfo{'home'}; if ($uconfig{'home_base'}) { printf " %s\n", $text{'uedit_auto'}; } printf " %s\n", $text{'uedit_set'}; print " ",&file_chooser_button("home", 1), "
$text{'shell'} %s (%s)\n", $text{'uedit_leave'}, $uinfo{'shell'}; printf " %s\n", $text{'uedit_set'}; print "
$text{'pass'} %s (%s)\n", $text{'uedit_leave'}, $uinfo{'pass'}; printf " %s\n", $uconfig{'empty_mode'} ? $text{'none1'} : $text{'none2'}; printf " %s
\n", $text{'nologin'}; printf " %s\n", $text{'clear'}; printf "\n", $uconfig{'passwd_stars'} ? "type=password" : ""; printf " %s\n", $text{'encrypted'}; printf "

\n"; $pft = &foreign_call("useradmin", "passfiles_type"); if ($pft == 1 || $pft == 6) { # This is a BSD system.. a few extra password options are supported print "\n"; print "\n"; print "
$text{'uedit_passopts'}
\n"; print "\n"; print "\n"; print "\n"; print "
$text{'change2'} \n"; printf " %s (%s)\n", $text{'uedit_leave'}, $uinfo{'change'} ? scalar(localtime($uinfo{'change'})) : $text{'uedit_none'}; printf " %s\n", $text{'uedit_set'}; &date_input("", "", "", 'change'); print "   "; print ":
$text{'expire2'} \n"; printf " %s (%s)\n", $text{'uedit_leave'}, $uinfo{'expire'} ? scalar(localtime($uinfo{'expire'})) : $text{'uedit_none'}; printf " %s\n", $text{'uedit_set'}; &date_input("", "", "", 'expire'); print "   "; print ":
$text{'class'} \n"; printf " %s (%s)\n", $text{'uedit_leave'}, $uinfo{'class'} ? $uinfo{'class'} : $text{'uedit_none'}; printf " %s\n", $text{'uedit_set'}; print "

\n"; } elsif ($pft == 2) { # System has a shadow password file as well.. which means it supports # password expiry and so on print "\n"; print "\n"; print "
$text{'uedit_passopts'}
\n"; print "\n"; print "\n"; print "\n"; printf "\n"; print "\n"; printf "\n"; print "\n"; printf "\n"; print "\n"; print "
$text{'change'} \n"; if ($uinfo{'change'}) { @tm = localtime(timelocal(gmtime($uinfo{'change'} * 60*60*24))); printf "%s/%s/%s\n", $tm[3], $text{"smonth_".($tm[4]+1)}, $tm[5]+1900; } else { print "$text{'uedit_unknown'}\n"; } if ($uinfo{'max'}) { print " ", "$text{'uedit_forcechange'}\n"; } print "
$text{'expire'} \n"; if ($uinfo{'expire'}) { @tm = localtime($uinfo{'expire'} * 60*60*24); $eday = $tm[3]; $emon = $tm[4]+1; $eyear = $tm[5]+1900; } printf " %s (%s)\n", $text{'uedit_leave'}, $uinfo{'expire'} ? "$eday/$emon/$eyear" : $text{'uedit_none'}; printf " %s\n", $text{'uedit_set'}; &date_input(undef, undef, undef, 'expire'); print "
$text{'min'} %s (%s)\n", $text{'uedit_leave'}, $uinfo{'min'} ? $uinfo{'min'} : $text{'uedit_none'}; printf " %s\n", $text{'uedit_set'}; print "
$text{'max'} %s (%s)\n", $text{'uedit_leave'}, $uinfo{'max'} ? $uinfo{'max'} : $text{'uedit_none'}; printf " %s\n", $text{'uedit_set'}; print "
$text{'warn'} %s (%s)\n", $text{'uedit_leave'}, $uinfo{'warn'} ? $uinfo{'warn'} : $text{'uedit_none'}; printf " %s\n", $text{'uedit_set'}; print "
$text{'inactive'} \n"; printf " %s (%s)\n", $text{'uedit_leave'}, $uinfo{'inactive'} ? $uinfo{'inactive'} : $text{'uedit_none'}; printf " %s\n", $text{'uedit_set'}; print "

\n"; } elsif ($pft == 4) { # This is an AIX system print "\n"; print "\n"; print "
$text{'uedit_passopts'}
\n"; print "\n"; if ($uinfo{'change'}) { @tm = localtime($uinfo{'change'}); printf "\n", $tm[3], $text{"smonth_".($tm[4]+1)}, $tm[5]+1900, $tm[2], $tm[1], $tm[0]; } else { print "\n"; } print "\n"; print "\n"; printf "\n"; print "\n"; printf "\n"; print "\n"; printf "\n"; print "\n"; print "
$text{'change'}%s/%s/%s %2.2d:%2.2d:%2.2d
$text{'uedit_unknown'}
$text{'expire'} \n"; if ($uinfo{'expire'}) { $uinfo{'expire'} =~ /^(\d\d)(\d\d)(\d\d)(\d\d)(\d\d)/; $emon = $1; $eday = $2; $ehour = $3; $emin = $4; $eyear = $5; if ($eyear > 38) { $eyear += 1900; } else { $eyear += 2000; } } $emon =~ s/0(\d)/$1/; # strip leading 0 printf " %s (%s)\n", $text{'uedit_leave'}, $uinfo{'expire'} ? "$eday/$emon/$eyear $ehour:$emin" : $text{'uedit_none'}; printf " %s\n", $text{'uedit_set'}; &date_input(undef, undef, undef, 'expire'); print "   "; print ":
$text{'min_weeks'} %s (%s)\n", $text{'uedit_leave'}, $uinfo{'min'} ? $uinfo{'min'} : $text{'uedit_none'}; printf " %s\n", $text{'uedit_set'}; print "
$text{'max_weeks'} %s (%s)\n", $text{'uedit_leave'}, $uinfo{'max'} ? $uinfo{'max'} : $text{'uedit_none'}; printf " %s\n", $text{'uedit_set'}; print "
$text{'warn'} %s (%s)\n", $text{'uedit_leave'}, $uinfo{'warn'} ? $uinfo{'warn'} : $text{'uedit_none'}; printf " %s\n", $text{'uedit_set'}; print "
$text{'flags'} \n"; printf " %s\n", $text{'uedit_leave'}; printf " %s\n", $text{'uedit_set'}; printf " %s
\n", $text{'uedit_admin'}; printf " %s
\n", $text{'uedit_admchg'}; printf " %s\n", $text{'uedit_nocheck'}; print "

\n"; } # Output group memberships print "\n"; print "\n"; print "
$text{'uedit_gmem'}
\n"; print "\n"; printf "\n"; foreach $g (@{$host->{'groups'}}) { @mems = split(/,/ , $g->{'members'}); push(@ugroups, $g->{'group'}) if (&indexof($uinfo{'user'}, @mems) >= 0); } print "\n", &group_chooser_button("sgiddel", 1); print "
$text{'group'} %s (%s)\n", $text{'uedit_leave'}, scalar(getgrgid($uinfo{'gid'})); printf " %s\n", $text{'uedit_set'}; printf "\n"; print "
$text{'uedit_2nd'} \n"; printf " %s (%s)
\n", $text{'uedit_leave'}, @ugroups ? join(", ", @ugroups) : $text{'uedit_none'}; printf " %s\n", $text{'uedit_addto'}; printf " %s
\n", &group_chooser_button("sgidadd", 1); printf " %s\n", $text{'uedit_delfrom'}; printf " %s

\n"; print "\n"; print "\n"; print "
$text{'onsave'}
\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "
$text{'uedit_movehome'} $text{'yes'} $text{'no'}
$text{'uedit_chuid'} $text{'no'} ", "$text{'home'} ", "$text{'uedit_allfiles'}
$text{'chgid'} $text{'no'} ". "$text{'home'} ", "$text{'uedit_allfiles'}
$text{'uedit_servs'} $text{'uedit_mall'} $text{'uedit_mthis'}
$text{'uedit_mothers'} $text{'yes'} $text{'no'}

\n"; print "\n"; print "\n"; # Find the servers this user is on foreach $h (@hosts) { local ($ou) = grep { $_->{'user'} eq $in{'user'} } @{$h->{'users'}}; if ($ou) { local ($s) = grep { $_->{'id'} == $h->{'id'} } @servers; push(@icons, "/servers/images/$s->{'type'}.gif"); push(@links, "edit_host.cgi?id=$h->{'id'}"); push(@titles, $s->{'desc'} ? $s->{'desc'} : $s->{'host'}); } } if (@icons < @hosts) { # Offer to create on all servers print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; } print "\n"; print "\n"; print "\n"; print "

\n"; print &ui_hr(); print &ui_subheading($text{'uedit_hosts'}); &icons_table(\@links, \@titles, \@icons); &ui_print_footer("", $text{'index_return'}); # date_input(day, month, year, prefix) sub date_input { print ""; print "/"; print "/"; print &date_chooser_button("$_[3]d", "$_[3]m", "$_[3]y"); }