From c0d9470f7a2c338363109840ea6e5db37b6a5e77 Mon Sep 17 00:00:00 2001 From: Thierry Vignaud Date: Tue, 2 Feb 2010 08:43:46 +0000 Subject: (UserEdit_valid) split it out of Edit() --- userdrake | 176 ++++++++++++++++++++++++++++++++++---------------------------- 1 file changed, 98 insertions(+), 78 deletions(-) (limited to 'userdrake') diff --git a/userdrake b/userdrake index 33a7955..396b75f 100755 --- a/userdrake +++ b/userdrake @@ -748,11 +748,101 @@ sub Xguest() { RefreshXguest(); } +sub UserEdit_valid { + my ($userEnt, $model, $primgid) = @_; + my ($Exp, $gEnt, $ugid); + my $error = 0; + my %u = ( + username => $us->{o}{login}->get_text, gecos => $us->{o}{fullname}->get_text, + homedir => $us->{o}{homedir}->get_text, pw => $us->{o}{passwd}->get_text, + confm => $us->{o}{confpasswd}->get_text, shell => $us->{o}{shells}->entry->get_text + ); + if (!valid_username($u{username})) { + RaiseError($us->{error}); + } + if ($u{pw} ne $u{confm}) { + RaiseError(N("Password Mismatch")); + } elsif ($u{pw} eq $u{confm} && $u{pw} ne ' ') { + if ($sec{SECURE_LEVEL} > 3 && length($u{pw}) < 6) { + RaiseError(N("This password is too simple. \n Good passwords should be > 6 characters")); + } + !$error and $ctx->UserSetPass($userEnt, $u{pw}); + } + if (!$error) { + $userEnt->UserName($u{username}); + $userEnt->Gecos($u{gecos}); + $userEnt->HomeDir($u{homedir}); + $userEnt->LoginShell($u{shell}); + my $username = $userEnt->UserName($GetValue); + $model->foreach(sub { + my ($mod, $_path, $iter) = @_; + my $ch = $mod->get($iter, 2); + my $name = $mod->get($iter, 1); + $gEnt = $ctx->LookupGroupByName($name); + $ugid = $gEnt->Gid($GetValue); + my $m = $gEnt->MemberName(1,0); + if ($ch == 1) { + if (!InArray($username, $m) && $primgid != $ugid) { + eval { $gEnt->MemberName($username, 1) }; + $ctx->GroupModify($gEnt); + } + } else { + if (InArray($username, $m)) { + eval { $gEnt->MemberName($username, 2) }; + $ctx->GroupModify($gEnt); + } + } + return 0; + }, undef); + if ($us->{o}{primgroup}->entry->get_text eq '') { + RaiseError(N("Please select at least one group for the user")); + } elsif (!$error) { + my $ent = $ctx->LookupGroupByName($us->{o}{primgroup}->entry->get_text); + $ugid = $ent->Gid($GetValue); + $userEnt->Gid($ugid); + if ($us->{o}{acheckexpire}->get_active) { + my $yr = $us->{o}{expy}->get_value; + my $mo = $us->{o}{expm}->get_value; + my $dy = $us->{o}{expd}->get_value; + ValidInt($yr, $dy, $mo) + or RaiseError(N("Please specify Year, Month and Day \n for Account Expiration ")); + if (!$error) { $Exp = ConvTime($dy, $mo, $yr); + $userEnt->ShadowExpire($Exp) } + } else { $userEnt->ShadowExpire(ceil(-1)) } + if ($us->{o}{pcheckexpire}->get_active) { + my $allowed = int($us->{o}{dbca}->get_text); + my $required = int($us->{o}{dbcr}->get_text); + my $warning = int($us->{o}{bwbc}->get_text); + my $inactive = int($us->{o}{dbai}->get_text); + $allowed && $required && $warning && $inactive + or RaiseError(N("Please fill up all fields in password aging\n")); + if (!$error) { + $userEnt->ShadowMin($allowed); + $userEnt->ShadowMax($required); + $userEnt->ShadowWarn($warning); + $userEnt->ShadowInact($inactive); + } + } else { + $userEnt->ShadowMin(-1); + $userEnt->ShadowMax(99999); + $userEnt->ShadowWarn(-1); + $userEnt->ShadowInact(-1); + } + !$error and $ctx->UserModify($userEnt); + if ($us->{o}{lockuser}->get_active) { + !$ctx->IsLocked($userEnt) and $ctx->Lock($userEnt); + } else { $ctx->IsLocked($userEnt) and $ctx->UnLock($userEnt) } + defined $us->{o}{iconval} and any::addKdmIcon($u{username}, $us->{o}{iconval}); + !$error and Refresh($sysfilter, $stringsearch); + } + } +} + sub Edit() { my $w = NewWindow(N("Edit Groups / Users")); my $model = Gtk2::ListStore->new("Gtk2::Gdk::Pixbuf", "Glib::String", "Glib::Int"); - my $tree = Gtk2::TreeView->new_with_model($model); my %g; my %u; - my ($groupname, $username, $groupEnt, $userEnt, $members, $times, $min, $max, $warn, $inact, $primgid, $Gent); + my $tree = Gtk2::TreeView->new_with_model($model); my %g; + my ($groupname, $groupEnt, $userEnt, $members, $times, $min, $max, $warn, $inact, $primgid, $Gent); my @primgroup; $tree->get_selection->set_mode('browse'); $tree->append_column(my $check = Gtk2::TreeViewColumn->new_with_attributes(undef, Gtk2::CellRendererPixbuf->new, 'pixbuf' => 0)); @@ -807,7 +897,7 @@ sub Edit() { 1, $us->{o}{primgroup} = Gtk2::OptionMenu->new, ) ), gtkshow(Gtk2::Label->new(N("Groups")))); - $username = GetNameEntFromIter($usertree, $utree_model,0); $us->{o}{login}->set_text($username); + my $username = GetNameEntFromIter($usertree, $utree_model,0); $us->{o}{login}->set_text($username); $userEnt = $ctx->LookupUserByName($username); FillUserInfo($userEnt); my $Uid = $userEnt->Uid($GetValue); my $expire = $userEnt->ShadowExpire($GetValue); @@ -862,7 +952,7 @@ sub Edit() { } else { $model->append_set([ 0 => gtkcreate_pixbuf($pix[1]), 1 => $user, 2 => 0 ]) } } } - my ($ch, $name, $uEnt, $gEnt, $ugid, $Exp); + my ($uEnt); gtkpack_($w->vbox, 1, !$p ? $nbU : $nbG); gtkadd($w->action_area, @@ -871,77 +961,7 @@ sub Edit() { gtksignal_connect(Gtk2::Button->new($_->[0]), clicked => sub { if (!$retv) { if ($p <= 0) { - $error = 0; - %u = ( - username => $us->{o}{login}->get_text, gecos => $us->{o}{fullname}->get_text, - homedir => $us->{o}{homedir}->get_text, pw => $us->{o}{passwd}->get_text, - confm => $us->{o}{confpasswd}->get_text, shell => $us->{o}{shells}->entry->get_text - ); - if (!valid_username($u{username})) { RaiseError($us->{error}) } - if ($u{pw} ne $u{confm}) { - RaiseError(N("Password Mismatch")); - } elsif ($u{pw} eq $u{confm} && $u{pw} ne ' ') { - if ($sec{SECURE_LEVEL} > 3 && length($u{pw}) < 6) { RaiseError(N("This password is too simple. \n Good passwords should be > 6 characters")) } - !$error and $ctx->UserSetPass($userEnt, $u{pw}); - } - if (!$error) { - $userEnt->UserName($u{username}); $userEnt->Gecos($u{gecos}); - $userEnt->HomeDir($u{homedir}); $userEnt->LoginShell($u{shell}); - $username = $userEnt->UserName($GetValue); - $model->foreach(sub { - my ($mod, $_path, $iter) = @_; - $ch = $mod->get($iter, 2); - $name = $mod->get($iter, 1); - $gEnt = $ctx->LookupGroupByName($name); - $ugid = $gEnt->Gid($GetValue); - my $m = $gEnt->MemberName(1,0); - if ($ch == 1) { - if (!InArray($username, $m) && $primgid != $ugid) { - eval { $gEnt->MemberName($username, 1) }; - $ctx->GroupModify($gEnt); - } - } else { - if (InArray($username, $m)) { - eval { $gEnt->MemberName($username, 2) }; - $ctx->GroupModify($gEnt); - } - } - return 0; - }, undef); - if ($us->{o}{primgroup}->entry->get_text eq '') { - RaiseError(N("Please select at least one group for the user")); - } elsif (!$error) { - my $ent = $ctx->LookupGroupByName($us->{o}{primgroup}->entry->get_text); - $ugid = $ent->Gid($GetValue); - $userEnt->Gid($ugid); - if ($us->{o}{acheckexpire}->get_active) { - my $yr = $us->{o}{expy}->get_value; - my $mo = $us->{o}{expm}->get_value; - my $dy = $us->{o}{expd}->get_value; - ValidInt($yr, $dy, $mo) or RaiseError(N("Please specify Year, Month and Day \n for Account Expiration ")); - if (!$error) { $Exp = ConvTime($dy, $mo, $yr); $userEnt->ShadowExpire($Exp) } - } else { $userEnt->ShadowExpire(ceil(-1)) } - if ($us->{o}{pcheckexpire}->get_active) { - my $allowed = int($us->{o}{dbca}->get_text); my $required = int($us->{o}{dbcr}->get_text); - my $warning = int($us->{o}{bwbc}->get_text); my $inactive = int($us->{o}{dbai}->get_text); - $allowed && $required && $warning && $inactive or RaiseError(N("Please fill up all fields in password aging\n")); - if (!$error) { - $userEnt->ShadowMin($allowed); $userEnt->ShadowMax($required); - $userEnt->ShadowWarn($warning); $userEnt->ShadowInact($inactive); - } - } else { - $userEnt->ShadowMin(-1); $userEnt->ShadowMax(99999); - $userEnt->ShadowWarn(-1); $userEnt->ShadowInact(-1); - } - !$error and $ctx->UserModify($userEnt); - if ($us->{o}{lockuser}->get_active) { - !$ctx->IsLocked($userEnt) and $ctx->Lock($userEnt); - } else { $ctx->IsLocked($userEnt) and $ctx->UnLock($userEnt) } - defined $us->{o}{iconval} and any::addKdmIcon($u{username}, $us->{o}{iconval}); - !$error and Refresh($sysfilter, $stringsearch); - } - } - + UserEdit_valid($userEnt, $model, $primgid); } elsif ($p == 1) { $g{groupname} = $us->{o}{groupname}->get_text; $error = 0; if (!valid_groupname($g{groupname})) { RaiseError($us->{error}) } @@ -951,12 +971,12 @@ sub Edit() { my $gid = $groupEnt->Gid($GetValue); !$error and $model->foreach(sub { my ($mod, $_path, $iter) = @_; - $ch = $mod->get($iter, 2); - $name = $mod->get($iter, 1); + my $ch = $mod->get($iter, 2); + my $name = $mod->get($iter, 1); if ($ch == 1) { if (!InArray($name, $members)) { $uEnt = $ctx->LookupUserByName($name); - $ugid = $uEnt->Gid($GetValue); + my $ugid = $uEnt->Gid($GetValue); if ($ugid != $gid) { eval { $groupEnt->MemberName($name,1) }; } -- cgit v1.2.1