#!/usr/local/bin/perl # edit_user.cgi # Edit a new or existing webmin user require './acl-lib.pl'; &foreign_require("webmin", "webmin-lib.pl"); &ReadParse(); if ($in{'user'}) { # Editing an existing user &can_edit_user($in{'user'}) || &error($text{'edit_euser'}); &ui_print_header(undef, $text{'edit_title'}, ""); foreach $u (&list_users()) { if ($u->{'name'} eq $in{'user'}) { %user = %$u; } if ($u->{'name'} eq $base_remote_user) { $me = $u; } } } else { # Creating a new user $access{'create'} || &error($text{'edit_ecreate'}); &ui_print_header(undef, $text{'edit_title2'}, ""); foreach $u (&list_users()) { if ($u->{'name'} eq $in{'clone'}) { $user{'modules'} = $u->{'modules'}; $user{'lang'} = $u->{'lang'}; } if ($u->{'name'} eq $base_remote_user) { $me = $u; } } $user{'skill'} = $user{'risk'} = 'high' if ($in{'risk'}); } # Give up if readonly if ($user{'readonly'} && !$in{'readwrite'}) { %minfo = &get_module_info($user{'readonly'}); print &text('edit_readonly', $minfo{'desc'}, "edit_user.cgi?user=$in{'user'}&readwrite=1"),"

\n"; &ui_print_footer("", $text{'index_return'}); exit; } print "

\n"; if ($in{'user'}) { print "\n"; print "\n"; } if ($in{'clone'}) { print "\n"; } print "\n"; print "\n"; print "
$text{'edit_rights'}
\n"; print "\n"; if ($access{'rename'} || !$in{'user'}) { print "\n"; } else { print "\n"; } # Find and show parent group @glist = &list_groups(); @mcan = $access{'gassign'} eq '*' ? ( ( map { $_->{'name'} } @glist ), '_none' ) : split(/\s+/, $access{'gassign'}); map { $gcan{$_}++ } @mcan; if (@glist && %gcan && !$in{'risk'} && !$user{'risk'}) { print "\n"; print "\n"; } print "\n"; # Show password type menu and current password $passmode = !$in{'user'} ? 0 : $user{'pass'} eq 'x' ? 3 : $user{'sync'} ? 2 : $user{'pass'} eq 'e' ? 5 : $user{'pass'} eq '*LK*' ? 4 : 1; print "\n"; if ($access{'chcert'}) { # SSL certificate name print "\n"; } if ($access{'lang'}) { # Current language print "\n"; } if ($access{'cats'}) { # Show categorized modules? print "\n", $user{'notabs'} == 0 ? 'checked' : '', $text{'default'}; } if ($access{'logouttime'}) { # Show logout time print "\n"; } if ($access{'theme'}) { # Current theme print "\n"; } if ($access{'ips'}) { # Allowed IP addresses print "\n"; print "\n"; } if (&supports_rbac() && $access{'mode'} == 0) { # Deny access to modules not managed by RBAC? print "\n"; } if ($access{'times'}) { # Show allowed days of the week %days = map { $_, 1 } split(/,/, $user{'days'}); print "\n"; print "\n"; # Show allow hour/minute range ($hf, $mf) = split(/\./, $user{'hoursfrom'}); ($ht, $mt) = split(/\./, $user{'hoursto'}); print "\n"; print "\n"; } if ($user{'risk'} || $in{'risk'}) { # Creating or editing a risk-level user print "\n"; print "\n"; } else { # Creating or editing a normal user @mcan = $access{'mode'} == 1 ? @{$me->{'modules'}} : $access{'mode'} == 2 ? split(/\s+/, $access{'mods'}) : &list_modules(); map { $mcan{$_}++ } @mcan; map { $has{$_}++ } @{$user{'modules'}}; map { $has{$_} = 0 } $group ? @{$group->{'modules'}} : (); # Show all modules, under categories @mlist = grep { $access{'others'} || $has{$_->{'dir'}} || $mcan{$_->{'dir'}} } &list_module_infos(); print "\n"; print "\n"; } print "
$text{'edit_user'}$user{'name'}$text{'edit_group'}
$text{'edit_pass'} \n"; print "\n"; if ($passmode == 1) { # Show temporary lock option print &ui_checkbox("lock", 1, $text{'edit_templock'}, $user{'pass'} =~ /^\!/ ? 1 : 0); } print "
$text{'edit_cert'} \n"; print &ui_opt_textbox("cert", $user{'cert'}, 50, $text{'edit_none'}), "
$text{'edit_lang'} \n"; printf " %s\n", $user{'lang'} ? '' : 'checked', $text{'default'}; printf "\n", $user{'lang'} ? 'checked' : ''; print "
$text{'edit_notabs'} \n"; printf " %s\n", $user{'notabs'} == 1 ? 'checked' : '', $text{'yes'}; printf " %s\n", $user{'notabs'} == 2 ? 'checked' : '', $text{'no'}; printf " %s
$text{'edit_logout'} \n"; print &ui_opt_textbox("logouttime", $user{'logouttime'}, 5, $text{'default'})," $text{'edit_mins'}
$text{'edit_theme'} \n"; printf " %s\n", defined($user{'theme'}) ? "" : "checked", $text{'edit_themeglobal'}; printf "\n", defined($user{'theme'}) ? "checked" : ""; print "
",&hlink("$text{'edit_ips'}", "ips"),"\n"; printf "\n"; print "
%s
\n", $user{'allow'} || $user{'deny'} ? '' : 'checked', $text{'edit_all'}; printf " %s
\n", $user{'allow'} ? 'checked' : '', $text{'edit_allow'}; printf " %s
\n", $user{'deny'} ? 'checked' : '', $text{'edit_deny'}; print "
$text{'edit_rbacdeny'} \n"; print &ui_radio("rbacdeny", $user{'rbacdeny'} ? 1 : 0, [ [ 0, $text{'edit_rbacdeny0'} ], [ 1, $text{'edit_rbacdeny1'} ] ]); print "
$text{'edit_days'}\n"; print &ui_radio("days_def", $user{'days'} eq '' ? 1 : 0, [ [ 1, $text{'edit_alldays'} ], [ 0, $text{'edit_seldays'} ] ]),"
\n"; for(my $i=0; $i<7; $i++) { print &ui_checkbox("days", $i, $text{'day_'.$i}, $days{$i}); } print "
$text{'edit_hours'}\n"; print &ui_radio("hours_def", $user{'hoursfrom'} eq '' ? 1 : 0, [ [ 1, $text{'edit_allhours'} ], [ 0, &text('edit_selhours', &ui_textbox("hours_hfrom", $hf, 2), &ui_textbox("hours_mfrom", $mf, 2), &ui_textbox("hours_hto", $ht, 2), &ui_textbox("hours_mto", $mt, 2)) ] ]); print "
$text{'edit_risk'} \n"; foreach $s ('high', 'medium', 'low') { printf " %s\n", $s, $user{'risk'} eq $s ? 'checked' : '', $text{"edit_risk_$s"}; } print "
$text{'edit_skill'} \n"; foreach $s ('high', 'medium', 'low') { printf " %s\n", $s, $user{'skill'} eq $s ? 'checked' : '', $text{"skill_$s"}; } print "
$text{'edit_modules'}
", "$text{'edit_groupmods'}
\n"; print &select_all_link("mod", 0, $text{'edit_selall'})," \n"; print &select_invert_link("mod", 0, $text{'edit_invert'}),"
\n"; @cats = &unique(map { $_->{'category'} } @mlist); &read_file("$config_directory/webmin.catnames", \%catnames); print "\n"; foreach $c (sort { $b cmp $a } @cats) { @cmlist = grep { $_->{'category'} eq $c } @mlist; print "\n"; $sw = 0; foreach $m (@cmlist) { local $md = $m->{'dir'}; if (!$sw) { print "\n"; } print ""; if ($sw) { print "\n"; } $sw = !$sw; } } if ($access{'acl'}) { print "\n"; print "\n"; print "\n"; print "\n"; } print "
", $catnames{$c} || $text{'category_'.$c}, "
"; if ($mcan{$md}) { printf"\n", $has{$md} ? "checked" : ""; if ($access{'acl'} && $in{'user'}) { # Show link for editing ACL printf "". "%s\n", &urlize($m->{'dir'}), "user", &urlize($in{'user'}), $m->{'desc'}; } else { print "$m->{'desc'}\n"; } } else { printf " %s\n", $has{$md} ? 'tick' : 'empty', $m->{'desc'}; } print "
", $text{'edit_special'},"
",$text{'index_global'},"
\n"; print &select_all_link("mod", 0, $text{'edit_selall'})," \n"; print &select_invert_link("mod", 0, $text{'edit_invert'}),"\n"; print "
\n"; print "\n"; print "\n"; if ($in{'user'}) { if (!$group) { print "\n"; print "\n"; print "\n"; } else { print "\n"; } if ($access{'create'} && !$group) { print "\n"; print "\n"; print "\n"; } else { print "\n"; } &read_acl(\%acl); if (&foreign_check("webminlog") && $acl{$base_remote_user,'webminlog'}) { print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; } else { print "\n"; } if ($access{'switch'} && $main::session_id) { print "\n"; print "\n"; print "\n"; } else { print "\n"; } if ($access{'delete'}) { print "\n"; print "\n"; print "\n"; } else { print "\n"; } } print "
", "
", "", "
", "", "
", "", "
", "
\n"; &ui_print_footer("", $text{'index_return'});