aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaouda Lo <daouda@mandriva.com>2003-06-11 17:46:14 +0000
committerDaouda Lo <daouda@mandriva.com>2003-06-11 17:46:14 +0000
commit5f0c41f1cd42ca8de75e9b5af5f0107b1e77eb1c (patch)
tree5cda68b9171c12e705c0b02c59896ef03f76a7f5
parent4fc0bd6ba58cd7a614cb8eb83e77d0f573a69727 (diff)
downloaduserdrake-5f0c41f1cd42ca8de75e9b5af5f0107b1e77eb1c.tar
userdrake-5f0c41f1cd42ca8de75e9b5af5f0107b1e77eb1c.tar.gz
userdrake-5f0c41f1cd42ca8de75e9b5af5f0107b1e77eb1c.tar.bz2
userdrake-5f0c41f1cd42ca8de75e9b5af5f0107b1e77eb1c.tar.xz
userdrake-5f0c41f1cd42ca8de75e9b5af5f0107b1e77eb1c.zip
- password aging
- add group to users - use Pixbuf Cell instead of Toggle
-rwxr-xr-xuserdrake2127
1 files changed, 87 insertions, 40 deletions
diff --git a/userdrake2 b/userdrake2
index c2c093f..aaa3f50 100755
--- a/userdrake2
+++ b/userdrake2
@@ -137,6 +137,7 @@ sub Refresh_Users_Full {
$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) };
+
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) ]);
@@ -243,10 +244,10 @@ sub AddUser {
);
map { $us->{o}->{$_}->set_active } (qw(privategroup createhomedir));
$us->{o}->{login}->signal_connect('focus_out_event' => sub {
- my $fullname = $us->{o}->{fullname}->get_text();
- $us->{o}->{homedir}->set_text("/home/".$us->{o}->{login}->get_text());
- $fullname or $us->{o}->{fullname}->set_text($us->{o}->{login}->get_text())
- });
+ my $fullname = $us->{o}->{fullname}->get_text();
+ $us->{o}->{homedir}->set_text("/home/".$us->{o}->{login}->get_text());
+ $fullname or $us->{o}->{fullname}->set_text($us->{o}->{login}->get_text())
+ });
$us->{o}->{uid} = Gtk2::SpinButton->new(Gtk2::Adjustment->new(500, 1, 65000, 1, 10, 10), 1, 0);
$h->pack_end($us->{o}->{uid}, 0, 0, 4);
$h->pack_end(Gtk2::Label->new(N("UID: ")), 0, 0, 4);
@@ -351,29 +352,45 @@ sub UpdateOrDelUsersInGroup {
print ("Updating MemberName \n");
}
}
+sub GetNameEntFromIter {
+ my ($tree, $model, $rank) = @_;
+ my (undef, $iter) = $tree->get_selection->get_selected;
+ my $name = $model->get($iter, $rank);
+ $iter->free;
+ $name
+}
sub Delete {
my $page = $nb->get_current_page();
+ $us->{wnd}{rwindow}->set_sensitive(0);
+ gtkset_mousecursor_wait(); $error = 0;
if ($page == 0) {
- my (undef, $iter) = $usertree->get_selection->get_selected;
- my $username = $utree_model->get($iter, 0);
- $iter->free;
+ 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);
- if (!$groupEnt && @$member) { $groupEnt->Gid($GetValue) > 500 and $ctx->GroupDel($groupEnt) };
- my $removehome = GimmeChoice(N(" Remove Home Directory"), N("Do you want to delete the user's home directory?"));
+ 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)
} elsif ($page == 1) {
- my (undef, $iter) = $grouptree->get_selection->get_selected;
- my $groupname = $gtree_model->get($iter,0);
+ my $groupname = GetNameEntFromIter($grouptree, $gtree_model, 0);
my $groupEnt = $ctx->LookupGroupByName($groupname);
-
- $iter->free
+ 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));
+ $error = 1;
+ last GLOOP
+ }
+ }
+ if (!$error) { $ctx->GroupDel($groupEnt); Refresh($sysfilter) }
}
+ $us->{wnd}{rwindow}->set_sensitive(1);
+ gtkset_mousecursor_normal();
}
# Gtk Facilities
sub CreateTree {
@@ -388,14 +405,14 @@ sub CreateTree {
my (undef, $iter) = $tree->get_selection->get_selected;
return unless $iter;
foreach (($tbedit, $tbdel, $checkedit, $checkdel)) { $_->set_sensitive(1) };
- Edit($iter) if $event->type eq '2button-press';
+ Edit() if $event->type eq '2button-press';
$iter->free;
});
$tree->signal_connect(key_press_event => sub {
my (undef, $event) = @_;
my (undef, $iter) = $tree->get_selection->get_selected;
return unless $iter;
- Edit($iter) if ($event->keyval == Gtk2::Gdk::Event::Key->Sym_Return);
+ Edit() if ($event->keyval == Gtk2::Gdk::Event::Key->Sym_Return);
$iter->free;
});
$tree
@@ -436,19 +453,14 @@ sub BuildGui {
$vbox
}
sub Edit {
- my $iter = shift;
my $w = ugtk2->new('userdrake', grab => 1);
- map {
- my $tr = $_->[0]; my $ch = $_->[1]; my $co = $_->[2];
- my $tree_model = Gtk2::ListStore->new(Gtk2::GType->BOOLEAN, Gtk2::GType->STRING);
- $us->{$tr} = Gtk2::TreeView->new_with_model($tree_model);
- $us->{$tr}->get_selection->set_mode('browse');
- $us->{$ch} = Gtk2::TreeViewColumn->new_with_attributes(undef, Gtk2::CellRendererToggle->new, 'active' => 0);
- $us->{$co} = Gtk2::TreeViewColumn->new_with_attributes(undef, Gtk2::CellRendererText->new, 'text' => 0);
- $us->{$tr}->append_column($us->{$ch});
- $us->{$tr}->append_column($us->{$co});
- $us->{$tr}->set_headers_visible(0);
- } (["utree", "ucheck", "ucol"], ["gtree", "gcheck", "gcol"]);
+ 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;
+ my @pix = ($pixdir.'selected.png', $pixdir.'unselected.png');
+ $tree->get_selection->set_mode('single');
+ $tree->append_column(my $check = Gtk2::TreeViewColumn->new_with_attributes(undef, Gtk2::CellRendererPixbuf->new, 'pixbuf' => 0));
+ $tree->append_column(my $col = Gtk2::TreeViewColumn->new_with_attributes(undef, Gtk2::CellRendererText->new, 'text' => 1));
+ $tree->set_headers_visible(0);
my $p = $nb->get_current_page();
print " Page = $p";
my $nbU = Gtk2::Notebook->new; my $nbG = Gtk2::Notebook->new;
@@ -486,18 +498,27 @@ sub Edit {
)
)), gtkshow(Gtk2::Label->new(N("Password Info"))));
GrayBox($us->{o}->{pcheckexpire}, $v, 0);
- gtkappend_page($nbU,
+ gtkappend_page($nbU,
gtkpack_(Gtk2::VBox->new(0, 2),
0, Gtk2::Label->new(N("Select the groups that the user will be a member of:")),
- 1, $us->{utree}
+ 1, $tree
), gtkshow(Gtk2::Label->new(N("Account Info"))));
- } else {
+ } 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"))));
gtkappend_page($nbG,
gtkpack_(Gtk2::VBox->new(0, 1),
0, Gtk2::Label->new(N("Select the users to join this group :")),
- 1, $us->{gtree}), gtkshow(Gtk2::Label->new(N("Group Users"))));
+ 1, create_scrolled_window($tree)), gtkshow(Gtk2::Label->new(N("Group Users"))));
+ $groupname = GetNameEntFromIter($grouptree, $gtree_model, 0); $us->{o}->{groupname}->set_text($groupname);
+ my $groupEnt = $ctx->LookupGroupByName($groupname);
+ my $users = $ctx->UsersEnumerate(); #sort(@$users);
+ my $members = $ctx->EnumerateUsersByGroup($groupname);
+ foreach my $user (@$users) {
+ if (any { $_ eq $user } @$members) {
+ $model->append_set([ 0 => gtkcreate_pixbuf($pixdir.'selected.png'), 1 => $user, 2 => 1]);
+ } else { $model->append_set([ 0 => gtkcreate_pixbuf($pixdir.'unselected.png'), 1 => $user, 2 => 0]); }
+ }
}
gtkadd($w->{window},
gtkpack_(Gtk2::VBox->new(0,5),
@@ -508,19 +529,45 @@ sub Edit {
my $retv = $_->[1];
gtksignal_connect(Gtk2::Button->new($_->[0]), clicked => sub {
if (!$retv) {
- #my ($model, $iter) = $tree->get_selection->get_selected;
- #$model and $w->{retval} = { sel => $model->get($iter, 0) };
- #$iter and $iter->free;
+ if ($p == 0) {
+ $u{username} = $us->{o}->{log}->get_text();
+ } elsif ($p == 1) {
+ $g{groupname} = $us->{o}->{groupname}->get_text(); $error = 0;
+ if (!valid($g{groupname})) { raiseerror($us->{error}); $error = 1 };
+ if (!$error && $groupname ne $g{groupname}) {$ctx->GroupName($g{groupname})}
+ my $val;
+ $model->foreach(sub {
+ my ($mod, $path, $iter) = @_;
+ my $ch = $mod->get($iter, 2);
+ my $name = $mod->get($iter, 1);
+ print "\n~~~$name : $ch ~~~\t";
+ $iter->free;
+ return 0,
+ }, $val);
+ }
}
- Gtk2->main_quit })
+ !$error and Gtk2->main_quit; $error = 0; })
} ([ N("Cancel"), 1 ], [ N("Ok"), 0 ])),
));
- my %roots;
- # $tree_model->append_set($roots{$_->{land}} ||= $tree_model->append_set(undef, [ 0 => $_->{land} ]),
- # [ 0 => $_->{url} ])->free foreach @mirrors;
-
- # $w->{window}->set_size_request(400, 300);
+ $tree->show;
$w->{rwindow}->show_all;
+ $tree->signal_connect(button_press_event => sub {
+ printf "button pressed on treeview, coordinates x:%d y:%d\n", $_[1]->x, $_[1]->y;
+ my ($returns, $path, $column) = $tree->get_path_at_pos($_[1]->x, $_[1]->y);
+ print "####### $returns ########";
+ if ($returns) {
+ if (Gtk2->equals($column, $check)) {
+ $tree->get_selection->select_path($path);
+ Gtk2->update_ui;
+ my (undef, $iter) = $tree->get_selection->get_selected;
+ my $cp = $model->get($iter, 2);
+ $model->set($iter, [0 => gtkcreate_pixbuf($pix[!$cp])]);
+ $model->set($iter, [2 => !$cp]);
+ $iter and $iter->free;
+ }
+ $path->free;
+ }
+ });
$w->main
}
sub GrayBox {