aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaouda Lo <daouda@mandriva.com>2003-06-23 10:41:04 +0000
committerDaouda Lo <daouda@mandriva.com>2003-06-23 10:41:04 +0000
commit6de08d95dd4875798855978f5440d4a823ed38cc (patch)
treea6421343e35c0d788fe00603359e0482865eb4f1
parenteffbb6e71e8fdcc63875ea8e66625960b6b599c0 (diff)
downloaduserdrake-6de08d95dd4875798855978f5440d4a823ed38cc.tar
userdrake-6de08d95dd4875798855978f5440d4a823ed38cc.tar.gz
userdrake-6de08d95dd4875798855978f5440d4a823ed38cc.tar.bz2
userdrake-6de08d95dd4875798855978f5440d4a823ed38cc.tar.xz
userdrake-6de08d95dd4875798855978f5440d4a823ed38cc.zip
- final release
- enable search
-rw-r--r--USER/USER.xs34
-rwxr-xr-xuserdrake2182
2 files changed, 126 insertions, 90 deletions
diff --git a/USER/USER.xs b/USER/USER.xs
index 84ff583..ffd22e1 100644
--- a/USER/USER.xs
+++ b/USER/USER.xs
@@ -613,7 +613,7 @@ Admin_UserSetPass(self, ent, userPasswd)
char *userPasswd
PPCODE:
USER__ERR *error = NULL;
- gboolean crypted = TRUE;
+ gboolean crypted = FALSE;
if (lu_user_setpass(self, ent, userPasswd, crypted, &error) == FALSE) {
croak("Failed to set password %s.\n", error ? error->string : _("unknown error"));
if (error) { lu_error_free(&error); }
@@ -935,7 +935,7 @@ Ent_UserName(self, ssv)
lu_ent_clear(self, LU_USERNAME);
lu_ent_add(self, LU_USERNAME, &val);
} else {
- warn("XS_UserAdd: Cannot make operation on LU_USERNAME attribute");
+ warn("XS_UserName: Cannot make operation on LU_USERNAME attribute");
}
void
@@ -974,7 +974,7 @@ Ent_MemberName(self, rv, AddOrDel)
GValueArray *members;
GValue *value, val;
RETVAL = (AV*)sv_2mortal((SV*)newAV());
- char **member = NULL;
+ char *member = NULL;
int c;
if ( SvIOK(rv) && SvIV(rv) == 1) {
members = lu_ent_get(self, LU_MEMBERNAME);
@@ -986,32 +986,14 @@ Ent_MemberName(self, rv, AddOrDel)
} else if ( SvPOK( rv ) ) {
memset(&val, 0, sizeof(val));
g_value_init(&val, G_TYPE_STRING);
+ member = SvPV(rv, PL_na);
+ g_value_set_string(&val, member);
if (AddOrDel == 1) {
- member = g_strsplit(SvPV(rv, PL_na), ",", 0);
- if (member) {
- for (c = 0; member && member[c]; c++) {
- g_value_set_string(&val, member[c]);
- lu_ent_add(self, LU_MEMBERNAME, &val);
- g_value_reset(&val);
- }
- lu_hup_nscd();
- g_strfreev(member);
- member = NULL;
- }
+ lu_ent_add(self, LU_MEMBERNAME, &val);
} else if (AddOrDel == 2) {
- member = g_strsplit(SvPV(rv, PL_na), ",", 0);
- if (member) {
- for (c = 0; member && member[c]; c++) {
- g_value_set_string(&val, member[c]);
- lu_ent_del(self, LU_MEMBERNAME, &val);
- g_value_reset(&val);
- }
- lu_hup_nscd();
- g_strfreev(member);
- member = NULL;
- }
- g_value_unset(&val);
+ lu_ent_del(self, LU_MEMBERNAME, &val);
}
+ g_value_reset(&val);
} else {
croak("XS_MemberName: Cannot make operation on LU_MEMBERNAME attribute");
};
diff --git a/userdrake2 b/userdrake2
index a468b22..a3b2dcf 100755
--- a/userdrake2
+++ b/userdrake2
@@ -28,7 +28,7 @@ use common;
use any;
use ugtk2 qw(:all);
use interactive;
-
+use POSIX qw(mktime ceil);
use USER;
my $conffile = '/etc/sysconfig/userdrake';
@@ -41,6 +41,7 @@ my $us = {} ;
$us->{VERSION} = 0.91;
my $error = 0;
my $GetValue = -65533;
+my $stringsearch = '';
my %prefs = getVarsFromSh($conffile);
my %sec = getVarsFromSh($secfile);
my $sysfilter = text2bool($prefs{FILTER});
@@ -49,7 +50,7 @@ sub HelpSystem { system("drakhelp Drakxtools-Guide.html/userdrake.html &") };
$us->{wnd} = ugtk2->new(N("Mandrake Linux Users Management Tool") . " " . $us->{VERSION}, center => 1);
gtkset_size_request($us->{wnd}{window}, 660, 460);
-$us->{wnd}{rwindow}->signal_connect(delete_event => \&quit_global);
+$us->{wnd}{rwindow}->signal_connect(delete_event => \&QuitGlobal);
my $utree_model = Gtk2::ListStore->new(Gtk2::GType->STRING, Gtk2::GType->INT, Gtk2::GType->STRING, Gtk2::GType->STRING, Gtk2::GType->STRING, Gtk2::GType->STRING );
my $gtree_model = Gtk2::ListStore->new(Gtk2::GType->STRING, Gtk2::GType->INT, Gtk2::GType->STRING );
my ($usertree, $grouptree);
@@ -57,8 +58,8 @@ $usertree = CreateTree($utree_model); $grouptree = CreateTree($gtree_model);
my ($checkedit, $checkdel, $checkall);
my ($menu, $factory) = create_factory_menu($us->{wnd}{rwindow},
({ path => N("/_File"), type => '<Branch>' },
- { path => N("/_File") . N("/_Refresh"), callback => sub { Refresh($sysfilter)} },
- { path => N("/_File") . N("/_Quit"), callback => \&quit_global },
+ { path => N("/_File") . N("/_Refresh"), callback => sub { Refresh($sysfilter, $stringsearch)} },
+ { path => N("/_File") . N("/_Quit"), callback => \&QuitGlobal },
{ path => N("/_Actions"), type => '<Branch>' },
{ path => N("/_Actions") . N("/_Add User"), callback => \&AddUser },
{ path => N("/_Actions") . N("/Add _Group"), callback => \&AddGroup },
@@ -66,11 +67,11 @@ my ($menu, $factory) = create_factory_menu($us->{wnd}{rwindow},
{ path => N("/_Actions") . N("/_Delete"), callback => \&Delete },
{ path => N("/_Options"), type => '<Branch>' },
{ path => N("/_Options") . N("/_Filter system users"), type => '<CheckItem>',
- callback => sub { $sysfilter = $checkall->active; Refresh($sysfilter) } },
+ callback => sub { $sysfilter = $checkall->active; Refresh($sysfilter, $stringsearch) } },
{ path => N("/_Help"), type => '<Branch>' },
{ path => N("/_Help").N("/_Help"), callback => \&HelpSystem },
{ path => N("/_Help").N("/_Report Bug"), callback => sub { system("drakhelp https://qa.mandrakesoft.com &") } },
- { path => N("/_Help").N("/_About..."), callback => \&about_mdk_userdrake }
+ { path => N("/_Help").N("/_About..."), callback => \&About }
)
);
$checkall = $factory->get_widget("<main>" . N("/Options") . N("/Filter system users"));
@@ -111,13 +112,15 @@ map {
[ N("Add Group"), N("Add a group to the system"), 'group_add', \&AddGroup ],
[ N("Edit"), N("Edit selected row"), 'user_conf', \&Edit ],
[ N("Delete"), N("Delete selected row"), 'user_del', \&Delete ],
- [ N("Refresh"), N("Refresh the list"), 'refresh', sub { Refresh($sysfilter) } ],
+ [ N("Refresh"), N("Refresh the list"), 'refresh', sub { Refresh($sysfilter, $stringsearch) } ],
[ N("Help"), N("Generic help on userdrake"), 'help', \&HelpSystem ]
);
my ($tbuser, $tbgroup, $tbedit, $tbdel, $tbref, $tbhelp) = @toolbwg;
foreach (($tbedit, $tbdel, $checkedit, $checkdel)) { $_->set_sensitive(0) };
my $ctx = USER::ADMIN->new;
-Refresh($sysfilter);
+$fbut->signal_connect('clicked', sub { $stringsearch = $filter->get_text() ; Refresh($sysfilter, $stringsearch) });
+Refresh($sysfilter, $stringsearch);
+my $tmm = ConvTime(19, 06, 2003);
$nb->signal_connect('switch-page' => sub { NotebookSwitch() });
$us->{wnd}{rwindow}->show_all;
Gtk2->main;
@@ -130,27 +133,26 @@ sub TreeUnselect {
}
sub NotebookSwitch {
my $page = $nb->get_current_page();
- $page and TreeUnselect($usertree) or TreeUnselect($grouptree);
+ TreeUnselect($usertree) ; TreeUnselect($grouptree);
}
-sub Refresh_Users_Full {
- my $filterusers = shift;
+sub RefreshUsersFull {
+ my ($filterusers, $strfilt) = @_;
my $users = $ctx->UsersEnumerateFull();
$utree_model->clear();
my @UserReal;
- LOOP: foreach my $l (@$users) { next LOOP if ($filterusers && $l->Uid($GetValue) <= 499 || $l->Uid($GetValue) == 65534) ; push(@UserReal, $l) };
-
+ LOOP: foreach my $l (@$users) { next LOOP if ($filterusers && $l->Uid($GetValue) <= 499 || $l->Uid($GetValue) == 65534) ; push(@UserReal, $l) if $l->UserName($GetValue) =~ /^\Q$strfilt/; };
foreach my $l (@UserReal) {
my $a = $l->Gid($GetValue); my $group = $ctx->LookupGroupById($a);
$utree_model->append_set([ 0 => $l->UserName($GetValue), 1 => $l->Uid($GetValue), 2 => $group->GroupName($GetValue), 3 => $l->Gecos($GetValue), 4 => $l->LoginShell($GetValue), 5 => $l->HomeDir($GetValue) ]);
}
}
-sub Refresh_Groups_Full {
- my $filtergroups = shift;
+sub RefreshGroupsFull {
+ my ($filtergroups, $strfilt) = @_;
my $groups = $ctx->GroupsEnumerateFull();
$gtree_model->clear();
my @GroupReal;
- LOOP:foreach my $g (@$groups) { next LOOP if ($filtergroups && $g->Gid($GetValue) <= 499 || $g->Gid($GetValue) == 65534); push(@GroupReal, $g) };
+ LOOP:foreach my $g (@$groups) { next LOOP if ($filtergroups && $g->Gid($GetValue) <= 499 || $g->Gid($GetValue) == 65534); push(@GroupReal, $g) if $g->GroupName($GetValue) =~ /^\Q$strfilt/ };
foreach my $g (@GroupReal) {
my $a = $g->Gid($GetValue); my $group = $ctx->LookupGroupById($a);
my $u_b_g = $ctx->EnumerateUsersByGroup($g->GroupName($GetValue));
@@ -159,9 +161,9 @@ sub Refresh_Groups_Full {
}
}
sub Refresh {
- my $filt = shift;
- Refresh_Users_Full($filt);
- Refresh_Groups_Full($filt);
+ my ($filt, $strfilt) = @_;
+ RefreshUsersFull($filt, $strfilt);
+ RefreshGroupsFull($filt, $strfilt);
}
sub AddUser {
my $w = ugtk2->new(N("Create New User"), grab => 1);
@@ -186,12 +188,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}) };
+ 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")); $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")) };
- if ($sec{SECURE_LEVEL} > 3 && length($u{passwd}) < 6) { raiseerror(N("This password is too simple. \n Good passwords should be > 6 caracters")) };
+ 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;
@@ -234,9 +236,11 @@ sub AddUser {
if(!$error) {
$u{gecos} = $us->{o}->{fullname}->get_text(); $u{loginshell} = $us->{o}->{shells}->entry->get_text();
$userEnt->Gecos($u{gecos}); $userEnt->LoginShell($u{loginshell}); $userEnt->Gid($u{gid});
+ $userEnt->ShadowMin(-1); $userEnt->ShadowMax(99999);
+ $userEnt->ShadowWarn(-1); $userEnt->ShadowInact(-1);
$ctx->UserAdd($userEnt, $is_system, $dontcreatehomedir);
$ctx->UserSetPass($userEnt, $u{passwd});
- Refresh($sysfilter);
+ Refresh($sysfilter, $stringsearch);
}
}
!$error and Gtk2->main_quit; $error = 0 })
@@ -313,9 +317,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}) };
- my $nm = $ctx->LookupUserByName($g{groupname});
- if ($nm) { raiseerror(N("Group already exists, please choose another Group Name")); $us->{o}->{groupname}->set_text('') };
+ if (!valid($g{groupname})) { RaiseError($us->{error}) };
+ my $nm = $ctx->LookupGroupByName($g{groupname});
+ 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) {
@@ -325,7 +329,7 @@ sub AddGroup {
};
if(!$error) {
$ctx->GroupAdd($groupEnt);
- Refresh($sysfilter);
+ Refresh($sysfilter, $stringsearch);
}
}
!$error and Gtk2->main_quit; $error = 0; })
@@ -346,8 +350,12 @@ sub UpdateOrDelUsersInGroup {
if ($action) {
foreach my $g (@$groups) {
my $members = $g->MemberName(1, 0);
- any { $_ eq $name } @$members and $g->MemberName($name, 2);
- $ctx->GroupModify($g);
+ if (InArray($name, $members)) {
+ eval { $g->MemberName($name, 2) };
+ printf("\nAbout to modify %s\n", $g->GroupName($GetValue));
+ eval { $ctx->GroupModify($g) };
+ printf("\nModified %s\n", $g->GroupName($GetValue));
+ }
}
} else {
print ("Updating MemberName \n");
@@ -372,30 +380,30 @@ sub Delete {
my $page = $nb->get_current_page();
$us->{wnd}{rwindow}->set_sensitive(0);
gtkset_mousecursor_wait(); $error = 0;
- if ($page == 0) {
+ if ($page <= 0) {
my $username = GetNameEntFromIter($usertree, $utree_model, 0);
my $userEnt = $ctx->LookupUserByName($username);
$ctx->UserDel($userEnt);
UpdateOrDelUsersInGroup($username, 1);
#Let's check out the user's primary group
my $usergid = $userEnt->Gid($GetValue);
- my $groupEnt = $ctx->LookupGroupById($usergid); my $member = $groupEnt->MemberName(1, 0);
+ my $groupEnt = $ctx->LookupGroupById($usergid); my $member = $groupEnt->MemberName(1, 0);
if ($groupEnt && (scalar(@$member) == 0)) { $groupEnt->Gid($GetValue) > 499 and $ctx->GroupDel($groupEnt) };
my $removehome = GimmeChoice(N(" Remove Home Directory"), N("Do you want to delete the user's home directory and mail spool?"));
$removehome and $ctx->Clean($userEnt);
- Refresh($sysfilter)
+ Refresh($sysfilter, $stringsearch)
} elsif ($page == 1) {
my $groupname = GetNameEntFromIter($grouptree, $gtree_model, 0);
my $groupEnt = $ctx->LookupGroupByName($groupname);
my $members = $ctx->EnumerateUsersByGroup($groupname);
GLOOP:foreach my $username (@$members) {
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));
+ if ($userEnt && $userEnt->Gid($GetValue) == $groupEnt->Gid($GetValue)) {
+ RaiseError(N("%s is a primary group for user %s\n Remove the user first", $groupname, $username));
last GLOOP
}
}
- if (!$error) { $ctx->GroupDel($groupEnt); Refresh($sysfilter) }
+ if (!$error) { $ctx->GroupDel($groupEnt); Refresh($sysfilter, $stringsearch) }
}
$us->{wnd}{rwindow}->set_sensitive(1);
gtkset_mousecursor_normal();
@@ -453,6 +461,7 @@ sub BuildUui {
$vbox
}
sub BuildGui {
+ my $groupentry = @_;
gtkpack_(my $vbox = Gtk2::VBox->new(0, 2),
1, create_packtable({ homogeneous => 1, col_spacings => 5, row_spacings =>5 },
[ N("Group Name") . " :", $us->{o}->{groupname} = Gtk2::Entry->new() ]
@@ -464,7 +473,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, $primgid);
+ my ($groupname, $username, $groupEnt, $userEnt, $members, $times, $min, $max, $warn, $inact, $primgid, $temp);
my @primgroup;
my @pix = ($pixdir.'selected.png', $pixdir.'unselected.png');
$tree->get_selection->set_mode('browse');
@@ -474,7 +483,7 @@ sub Edit {
my $p = $nb->get_current_page();
print " Page = $p";
my $nbU = Gtk2::Notebook->new; my $nbG = Gtk2::Notebook->new;
- if ($p == 0) {
+ if ($p <= 0) {
gtkappend_page($nbU,
gtkpack_(Gtk2::VBox->new(0, 2),
1, BuildUui(),
@@ -587,19 +596,18 @@ sub Edit {
my $retv = $_->[1];
gtksignal_connect(Gtk2::Button->new($_->[0]), clicked => sub {
if (!$retv) {
- if ($p == 0) {
- $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 ($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($u{username})) { RaiseError($us->{error}) }
if ($u{pw} ne $u{confm}) {
- raiseerror(N("Password Mismatch"));
+ 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")) }
+ 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) {
@@ -613,22 +621,55 @@ sub Edit {
$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);
+ if ($ch == 1) {
+ if (!InArray($username, $m) && $primgid != $ugid){
+ eval { $gEnt->MemberName($username, 1) };
+ $ctx->GroupModify($gEnt);
+ }
} else {
if (InArray($username, $m)) {
- $gEnt->MemberName($username, 2);
+ eval { $gEnt->MemberName($username, 2) };
+ $ctx->GroupModify($gEnt);
}
}
- $ctx->GroupModify($gEnt);
$iter->free;
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_text(); my $mo = $us->{o}->{expm}->get_text();
+ my $dy = $us->{o}->{expd}->get_text();
+ $yr && $dy && $mo or RaiseError(N("Please specify Year, Month and Day \n for Account Expiration "));
+ !$error and $userEnt->ShadowExpire(ConvTime($dy, $mo, $yr));
+ } else { $userEnt->ShadowExpire(-1) }
+ if ($us->{o}->{pcheckexpire}->get_active()) {
+ my $allowed = $us->{o}->{dbca}->get_text(); my $required = $us->{o}->{dbcr}->get_text();
+ my $warning = $us->{o}->{bwbc}->set_text($min); my $inactive = $us->{o}->{dbai}->get_text();
+ $allowed && $required && $warning && $inactive or RaiseError(N("Please specify all field for password aging"));
+ 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) }
+ !$error and Refresh($sysfilter, $stringsearch);
+ }
}
} elsif ($p == 1) {
$g{groupname} = $us->{o}->{groupname}->get_text(); $error = 0;
- if (!valid($g{groupname})) { raiseerror($us->{error}) };
+ 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);
@@ -641,7 +682,9 @@ sub Edit {
if (!InArray($name, $members)) {
$uEnt = $ctx->LookupUserByName($name);
$ugid = $uEnt->Gid($GetValue);
- $ugid != $gid and $groupEnt->MemberName($name,1);
+ if ($ugid != $gid) {
+ eval { $groupEnt->MemberName($name,1) };
+ }
}
} else {
if (InArray($name, $members)) {
@@ -649,9 +692,11 @@ sub Edit {
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));
+ RaiseError(N("You cannot remove user '%s' from their primary group", $name));
+ }
+ if (!$error) {
+ eval { $groupEnt->MemberName($name,2) };
}
- !$error and $groupEnt->MemberName($name,2);
}
}
$iter->free;
@@ -659,7 +704,7 @@ sub Edit {
}, undef);
if (!$error) {
$ctx->GroupModify($groupEnt);
- Refresh($sysfilter);
+ Refresh($sysfilter, $stringsearch);
}
}
}
@@ -680,7 +725,7 @@ sub Edit {
my $item = $model->get($iter, 1);
$model->set($iter, [0 => gtkcreate_pixbuf($pix[$cp])]);
$model->set($iter, [2 => !$cp]);
- if ($p == 0) {
+ if ($p <= 0) {
if (!$cp) {
!InArray($item, \@primgroup) and push(@primgroup, $item)
} else {
@@ -696,6 +741,15 @@ sub Edit {
});
$w->main
}
+sub ConvTime {
+ my ($day, $month, $year) = @_;
+ my ($tm, $days, $mon, $yr);
+ $mon = $month - 1; $yr = $year - 1900;
+ $tm = POSIX::mktime(0, 0, 0, $day, $mon, $yr);
+ print "Time from mktime is $tm\n";
+ $days = ceil($tm / (24 * 60 *60));
+ return $days;
+}
sub TimeOfArray {
my $reltime = shift;
my $h; my $t;
@@ -717,7 +771,7 @@ sub GrayBox {
$v->set_sensitive($m);
$o->signal_connect('clicked' => sub { $m = !$m; $v->set_sensitive($m) });
}
-sub new_dialog {
+sub NewDialog {
my ($title, $no_button) = @_;
my $dialog = gtkset_border_width(Gtk2::Dialog->new(), 10);
$dialog->set_transient_for($us->{wnd}{rwindow});
@@ -729,8 +783,8 @@ sub new_dialog {
0,0,0) unless $no_button;
gtkset_modal($dialog, 1);
}
-sub about_mdk_userdrake {
- my $window_about = new_dialog(N("Userdrake2"));
+sub About {
+ my $window_about = NewDialog(N("Userdrake2"));
my $tree_model = Gtk2::TreeStore->new(Gtk2::GType->STRING, Gtk2::GType->STRING, Gtk2::GType->STRING);
my $list = Gtk2::TreeView->new_with_model($tree_model);
$list->can_focus(0);
@@ -754,7 +808,7 @@ sub valid {
length($_[0]) <= 32 or $us->{error} = N("Name is too long"), return 0;
return 1;
}
-sub raiseerror {
+sub RaiseError {
my $w = ugtk2->new(N("Error"), grab => 1, center => 1, transient => $us->{wnd}->{rwindow});
$error = 1;
gtkadd($w->{window},
@@ -766,7 +820,7 @@ sub raiseerror {
);
$w->main
}
-sub quit_global {
+sub QuitGlobal {
setVarsInSh($conffile, {
FILTER => bool2text($sysfilter),
});