aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xuserdrake2124
1 files changed, 80 insertions, 44 deletions
diff --git a/userdrake2 b/userdrake2
index ce23209..a468b22 100755
--- a/userdrake2
+++ b/userdrake2
@@ -42,6 +42,7 @@ $us->{VERSION} = 0.91;
my $error = 0;
my $GetValue = -65533;
my %prefs = getVarsFromSh($conffile);
+my %sec = getVarsFromSh($secfile);
my $sysfilter = text2bool($prefs{FILTER});
sub HelpSystem { system("drakhelp Drakxtools-Guide.html/userdrake.html &") };
@@ -165,7 +166,7 @@ sub Refresh {
sub AddUser {
my $w = ugtk2->new(N("Create New User"), grab => 1);
my $dontcreatehomedir = 0; my $is_system = 0;
- my %u; my %sec = getVarsFromSh($secfile);
+ my %u;
gtkadd($w->{window},
gtkpack_(Gtk2::VBox->new(0, 2),
0, BuildUui(),
@@ -185,12 +186,12 @@ sub AddUser {
gtksignal_connect(Gtk2::Button->new($_->[0]), clicked => sub {
if (!$r) {
$u{username} = $us->{o}->{login}->get_text(); $error = 0;
- if (!valid($u{username})) { raiseerror($us->{error}); $error = 1 };
+ if (!valid($u{username})) { raiseerror($us->{error}) };
my $nm = $ctx->LookupUserByName($u{username});
- if ($nm) { raiseerror(N("User already exists, please choose another User Name")); $error = 1 ; $us->{o}->{login}->set_text('') };
+ if ($nm) { raiseerror(N("User already exists, please choose another User Name")); $us->{o}->{login}->set_text('') };
$u{passwd} = $us->{o}->{passwd}->get_text();
- if ($u{passwd} ne $us->{o}->{confpasswd}->get_text()) { raiseerror(N("Password Mismatch")); $error = 1 };
- if ($sec{SECURE_LEVEL} > 3 && length($u{passwd}) < 6) { raiseerror(N("This password is too simple. \n Good passwords should be > 6 caracters")); $error = 1 };
+ if ($u{passwd} ne $us->{o}->{confpasswd}->get_text()) { raiseerror(N("Password Mismatch")) };
+ if ($sec{SECURE_LEVEL} > 3 && length($u{passwd}) < 6) { raiseerror(N("This password is too simple. \n Good passwords should be > 6 caracters")) };
my $userEnt = $ctx->InitUser($u{username}, $is_system);
if ($us->{o}->{createhomedir}->get_active) {
$dontcreatehomedir = 0;
@@ -312,9 +313,9 @@ sub AddGroup {
gtksignal_connect(Gtk2::Button->new($_->[0]), clicked => sub {
if (!$r) {
$g{groupname} = $us->{o}->{groupname}->get_text(); $error = 0;
- if (!valid($g{groupname})) { raiseerror($us->{error}); $error = 1 };
+ if (!valid($g{groupname})) { raiseerror($us->{error}) };
my $nm = $ctx->LookupUserByName($g{groupname});
- if ($nm) { raiseerror(N("Group already exists, please choose another Group Name")); $error = 1 ; $us->{o}->{groupname}->set_text('') };
+ if ($nm) { raiseerror(N("Group already exists, please choose another Group Name")); $us->{o}->{groupname}->set_text('') };
my $groupEnt = $ctx->InitGroup($g{groupname}, $is_system);
if ($us->{o}->{groupid}->get_active) {
if (($g{gid} = $us->{o}->{gid}->get_value) < 500) {
@@ -391,7 +392,6 @@ sub Delete {
my $userEnt = $ctx->LookupUserByName($username);
if ($userEnt->Gid($GetValue) == $groupEnt->Gid($GetValue)) {
raiseerror(N("%s is a primary group for user %s\n Remove the user first", $groupname, $username));
- $error = 1;
last GLOOP
}
}
@@ -464,7 +464,7 @@ sub Edit {
my $w = ugtk2->new('userdrake', grab => 1);
my $model = Gtk2::ListStore->new(Gtk2::GType->OBJECT, Gtk2::GType->STRING, Gtk2::GType->INT);
my $tree = Gtk2::TreeView->new_with_model($model); my %g; my %u;
- my ($groupname, $username, $groupEnt, $userEnt, $members, $times, $min, $max, $warn, $inact);
+ my ($groupname, $username, $groupEnt, $userEnt, $members, $times, $min, $max, $warn, $inact, $primgid);
my @primgroup;
my @pix = ($pixdir.'selected.png', $pixdir.'unselected.png');
$tree->get_selection->set_mode('browse');
@@ -534,19 +534,21 @@ sub Edit {
}
#root account should never be locked
!$Uid and $us->{o}->{lockuser}->set_sensitive(0);
+ # Check if user account is locked
+ $ctx->IsLocked($userEnt) and $us->{o}->{lockuser}->set_active(1);
my $lastchg = $userEnt->ShadowLastChange($GetValue);
if ($lastchg) { $times = TimeOfArray($lastchg);
- $dayStr->set_text($times->{daystr}); $month->set_text($times->{month}); $dayInt->set_text($times->{dayint}); $year->set_text($times->{year}) ;
+ $dayStr->set_text($times->{daystr}); $month->set_text($times->{month}); $dayInt->set_text($times->{dayint}); $year->set_text($times->{year});
}
$min = $userEnt->ShadowMin($GetValue); $max =$userEnt->ShadowMax($GetValue); $warn = $userEnt->ShadowWarn($GetValue); $inact = $userEnt->ShadowInact($GetValue);
- if ($min && $min != -1 || $max && $max != -1 || $warn && $warn != -1 || $inact && $inact != -1) {
+ if ($min && $min != -1 || $max && $max != 99999 || $warn && $warn != -1 || $inact && $inact != -1) {
$us->{o}->{pcheckexpire}->set_active(1); $v->set_sensitive(1);
}
$min && $min != -1 and $us->{o}->{dbca}->set_text($min); $max && $max != -1 and $us->{o}->{dbcr}->set_text($max);
$warn && $warn != -1 and $us->{o}->{bwbc}->set_text($warn); $inact && $inact != -1 and $us->{o}->{dbai}->set_text($inact);
my $grps = $ctx->GroupsEnumerate(); my @sgroups = sort(@$grps);
$members = $ctx->EnumerateGroupsByUser($username);
- my $primgid = $userEnt->Gid($GetValue);
+ $primgid = $userEnt->Gid($GetValue);
my $Gent = $ctx->LookupGroupById($primgid);
foreach my $group (@sgroups) {
if (any { $_ eq $group } @$members) {
@@ -555,8 +557,7 @@ sub Edit {
}
$us->{o}->{primgroup}->set_popdown_strings(@primgroup);
$Gent and $us->{o}->{primgroup}->entry->set_text($Gent->GroupName($GetValue));
-
-
+
} elsif ($p == 1) {
$nbG->set_size_request(300, 200);
gtkappend_page($nbG, gtkpack_(Gtk2::VBox->new(0, 2), 1, BuildGui()), gtkshow(Gtk2::Label->new(N("Group Data"))));
@@ -576,6 +577,7 @@ sub Edit {
} else { $model->append_set([ 0 => gtkcreate_pixbuf($pix[1]), 1 => $user, 2 => 0]); }
}
}
+ my ($ch, $name, $uEnt, $gEnt, $ugid);
gtkadd($w->{window},
gtkpack_(Gtk2::VBox->new(0,5),
1, !$p ? $nbU : $nbG,
@@ -586,42 +588,75 @@ sub Edit {
gtksignal_connect(Gtk2::Button->new($_->[0]), clicked => sub {
if (!$retv) {
if ($p == 0) {
- $u{username} = $us->{o}->{login}->get_text();
+ $u{username} = $us->{o}->{login}->get_text(); $error = 0;
+ if(!valid($u{username})) { raiseerror($us->{error}) }
+ $u{gecos} = $us->{o}->{fullname}->get_text();
+ $u{homedir} = $us->{o}->{homedir}->get_text();
+ $u{pw} = $us->{o}->{passwd}->get_text();
+ $u{confm} = $us->{o}->{confpasswd}->get_text();
+ $u{shell} = $us->{o}->{shells}->entry->get_text();
+ $u{primgroup} = $userEnt->Gid($GetValue);
+ 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 caracters")) }
+ !$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 && !InArray($username, $m) && $primgid != $ugid) {
+ $gEnt->MemberName($username, 1);
+ } else {
+ if (InArray($username, $m)) {
+ $gEnt->MemberName($username, 2);
+ }
+ }
+ $ctx->GroupModify($gEnt);
+ $iter->free;
+ return 0;
+ }, undef);
+ }
+
} elsif ($p == 1) {
$g{groupname} = $us->{o}->{groupname}->get_text(); $error = 0;
- if (!valid($g{groupname})) { raiseerror($us->{error}); $error = 1 };
- printf("Old Groupname = $groupname \t\t New groupname = %s\n",$g{groupname});
+ if (!valid($g{groupname})) { raiseerror($us->{error}) };
if (!$error && $groupname ne $g{groupname}) {$groupEnt->GroupName($g{groupname})}
$groupname = $groupEnt->GroupName($GetValue);
$members = $ctx->EnumerateUsersByGroup($groupname);
my $gid = $groupEnt->Gid($GetValue);
- my ($ch, $name, $userEnt, $ugid);
- $model->foreach(sub {
- my ($mod, $path, $iter) = @_;
- $ch = $mod->get($iter, 2);
- $name = $mod->get($iter, 1);
- if ($ch == 1) {
- if (!any { $_ eq $name } @$members) {
- print "\n******* $name ****\n";
- $userEnt = $ctx->LookupUserByName($name);
- $ugid = $userEnt->Gid($GetValue);
- $ugid != $gid and $groupEnt->MemberName($name,1);
- }
- } else {
- if (any { $_ eq $name } @$members) {
- $userEnt = $ctx->LookupUserByName($name);
- if ($userEnt->Gid($GetValue) == $groupEnt->Gid($GetValue)) {
- $model->set($iter, [0 => gtkcreate_pixbuf($pix[0])]);
- $model->set($iter, [2 => 1]);
- raiseerror(N("You cannot remove user '%s' from their primary group", $name));
- $error = 1;
- }
- !$error and $groupEnt->MemberName($name,2);
- }
- }
- $iter->free;
- return 0;
- }, undef);
+ !$error and $model->foreach(sub {
+ my ($mod, $path, $iter) = @_;
+ $ch = $mod->get($iter, 2);
+ $name = $mod->get($iter, 1);
+ if ($ch == 1) {
+ if (!InArray($name, $members)) {
+ $uEnt = $ctx->LookupUserByName($name);
+ $ugid = $uEnt->Gid($GetValue);
+ $ugid != $gid and $groupEnt->MemberName($name,1);
+ }
+ } else {
+ if (InArray($name, $members)) {
+ $uEnt = $ctx->LookupUserByName($name);
+ if ($uEnt->Gid($GetValue) == $groupEnt->Gid($GetValue)) {
+ $model->set($iter, [0 => gtkcreate_pixbuf($pix[0])]);
+ $model->set($iter, [2 => 1]);
+ raiseerror(N("You cannot remove user '%s' from their primary group", $name));
+ }
+ !$error and $groupEnt->MemberName($name,2);
+ }
+ }
+ $iter->free;
+ return 0;
+ }, undef);
if (!$error) {
$ctx->GroupModify($groupEnt);
Refresh($sysfilter);
@@ -721,6 +756,7 @@ sub valid {
}
sub raiseerror {
my $w = ugtk2->new(N("Error"), grab => 1, center => 1, transient => $us->{wnd}->{rwindow});
+ $error = 1;
gtkadd($w->{window},
gtkpack_(Gtk2::VBox->new,
1, Gtk2::Label->new($_[0]),