diff options
author | Daouda Lo <daouda@mandriva.com> | 2005-01-26 20:44:13 +0000 |
---|---|---|
committer | Daouda Lo <daouda@mandriva.com> | 2005-01-26 20:44:13 +0000 |
commit | 11146921086eea241636fc54ad3d60bb81203ca9 (patch) | |
tree | 47e61763574665f68ed63f834edac80854d1e458 | |
parent | 56c998ec9285bc3714cee405167ff7e0888d6b68 (diff) | |
download | userdrake-11146921086eea241636fc54ad3d60bb81203ca9.tar userdrake-11146921086eea241636fc54ad3d60bb81203ca9.tar.gz userdrake-11146921086eea241636fc54ad3d60bb81203ca9.tar.bz2 userdrake-11146921086eea241636fc54ad3d60bb81203ca9.tar.xz userdrake-11146921086eea241636fc54ad3d60bb81203ca9.zip |
- fix 'About' dialog crash
- cleanups
-rwxr-xr-x | userdrake | 138 | ||||
-rw-r--r-- | userdrake.spec | 6 |
2 files changed, 72 insertions, 72 deletions
@@ -74,7 +74,7 @@ my %prefs = getVarsFromSh($conffile); my %sec = getVarsFromSh($secfile); my $sysfilter = text2bool($prefs{FILTER}); -sub HelpSystem { exec("drakhelp --id userdrake") unless fork() }; +sub HelpSystem { exec("drakhelp --id userdrake") unless fork() } $us->{wnd} = ugtk2->new(N("Mandrakelinux Users Management Tool") . " " . $us->{VERSION}); gtkset_size_request($us->{wnd}{rwindow}, 660, 460); @@ -103,17 +103,15 @@ my ($menu, $factory) = create_factory_menu($::isEmbedded ? $::Plug : $us->{wnd}{ [ N("/_Options"), undef, undef, undef, '<Branch>' ], [ join('', @{$options{filter}}), undef, sub { $sysfilter = $buttorcheck{filter}->get_active; - Refresh($sysfilter, $stringsearch) - }, undef, '<CheckItem>' ], + Refresh($sysfilter, $stringsearch); + }, undef, '<CheckItem>' ], [ N("/_Help"), undef, undef, undef, '<Branch>' ], - [ N("/_Help").N("/_Help"), undef, sub { HelpSystem() }, undef, '<Item>' ], - [ N("/_Help").N("/_Report Bug"), undef, sub { system("$ENV{BROWSER} https://qa.mandrakesoft.com &") }, undef, '<Item>' ], - [ N("/_Help").N("/_About..."), undef, \&About, undef, '<Item>' ] + [ N("/_Help") . N("/_Help"), undef, sub { HelpSystem() }, undef, '<Item>' ], + [ N("/_Help") . N("/_Report Bug"), undef, sub { system("$ENV{BROWSER} https://qa.mandrakesoft.com &") }, undef, '<Item>' ], + [ N("/_Help") . N("/_About..."), undef, \&About, undef, '<Item>' ] ) ); -%buttorcheck = map { - $_ => $factory->get_widget("<main>" . join '', map { s/_//; $_ } @{$options{$_}}) -}('edit', 'delete', 'filter'); +%buttorcheck = map { $_ => $factory->get_widget("<main>" . join '', map { s/_//; $_ } @{$options{$_}}) }('edit', 'delete', 'filter'); if (defined $buttorcheck{filter}) { $buttorcheck{filter}->set_active($sysfilter); @@ -187,12 +185,12 @@ $us->{wnd}->main; ugtk2->exit(0); sub GrayDelEdit { - foreach ($tbedit, $tbdel, $buttorcheck{edit}, $buttorcheck{delete}) { defined $_ and $_->set_sensitive(0) }; + foreach ($tbedit, $tbdel, $buttorcheck{edit}, $buttorcheck{delete}) { defined $_ and $_->set_sensitive(0) } } sub TreeUnselect { my $treev = shift; $treev->get_selection->unselect_all; - GrayDelEdit() + GrayDelEdit(); } sub NotebookSwitch { my $page = $nb->get_current_page; @@ -204,7 +202,7 @@ sub ComputeLockExpire { my $tm = ceil(time()/(24*60*60)); $ep = -1 if int($tm) <= $ep; my $status = $ctx->IsLocked($l) ? N("Locked") : ($ep != -1 ? N("Expired") : ''); - $status + $status; } sub RefreshUsersFull { my ($filterusers, $strfilt) = @_; @@ -212,7 +210,7 @@ sub RefreshUsersFull { defined $ctx and $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) if $l->UserName($GetValue) =~ /^\Q$strfilt/ }; + 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) { $a = $l->Gid($GetValue); $group = $ctx->LookupGroupById($a); $groupnm = ''; $expr = ComputeLockExpire($l); $group and $groupnm = $group->GroupName($GetValue); @@ -225,10 +223,10 @@ sub RefreshGroupsFull { defined $ctx and $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) if $g->GroupName($GetValue) =~ /^\Q$strfilt/ }; + 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 $group = $ctx->LookupGroupById($a); my $a = $g->GroupName($GetValue); - $a and my $u_b_g = $ctx->EnumerateUsersByGroup($a); + my $u_b_g = $a && $ctx->EnumerateUsersByGroup($a); my $listUbyG = join(',', @$u_b_g); my $group_id = $g->Gid($GetValue); $gtree_model->append_set([ 0 => $g->GroupName($GetValue), if_($group_id, 1 => $group_id), if_($listUbyG, 2 => $listUbyG) ]); @@ -238,7 +236,7 @@ sub Refresh { my ($filt, $strfilt) = @_; RefreshUsersFull($filt, $strfilt); RefreshGroupsFull($filt, $strfilt); - GrayDelEdit() + GrayDelEdit(); } sub GetFileMd5 { my @md5; @@ -295,7 +293,7 @@ sub GetFaceIcon { } $set->($us->{o}{iconval} = $icones[$i]); }); - $hb + $hb; } sub AddUser { my $w = NewWindow(N("Create New User"), 1); @@ -323,26 +321,26 @@ sub AddUser { if (!$r) { $u{username} = $us->{o}{login}->get_text; $error = 0; $u{gecos} = $us->{o}{fullname}->get_text; - if (!valid_username($u{username})) { RaiseError($us->{error}) }; - !$error and my $nm = $ctx->LookupUserByName($u{username}); - if ($nm) { RaiseError(N("User already exists, please choose another User Name")); $us->{o}{login}->set_text('') }; + if (!valid_username($u{username})) { RaiseError($us->{error}) } + my $nm = !$error && $ctx->LookupUserByName($u{username}); + 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 characters")) }; - !$error and my $userEnt = $ctx->InitUser($u{username}, $is_system); + 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 characters")) } + my $userEnt = !$error && $ctx->InitUser($u{username}, $is_system); if (!$error && $us->{o}{createhomedir}->get_active) { $dontcreatehomedir = 0; $u{homedir} = $us->{o}{homedir}->get_text; $userEnt and $userEnt->HomeDir($u{homedir}); } else { - $dontcreatehomedir = 1 + $dontcreatehomedir = 1; } if (!$error && $us->{o}{userid}->get_active) { if (($u{uid} = $us->{o}{uid}->get_value) < 500) { my $uidchoice = GimmeChoice(N("User Uid is < 500"), N("Creating a user with a UID less than 500 is not recommended.\n Are you sure you want to do this?\n\n")); $uidchoice and $userEnt->Uid($u{uid}); } else { $userEnt->Uid($u{uid}) } - }; + } if ($us->{o}{privategroup}->get_active) { if (!$error) { #Check if group exist @@ -380,15 +378,15 @@ sub AddUser { Refresh($sysfilter, $stringsearch); } } - !$error and $w->destroy; $error = 0 }) + !$error and $w->destroy; $error = 0 }); } ([ N("Cancel"), 1 ], [ N("Ok"), 0 ])), ) ); - foreach (qw(privategroup createhomedir)) { $us->{o}{$_}->set_active(1) }; + foreach (qw(privategroup createhomedir)) { $us->{o}{$_}->set_active(1) } GrayBox($us->{o}{createhomedir}, $vv, 1); $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); + $us->{o}{homedir}->set_text("/home/" . $us->{o}{login}->get_text); $fullname or $us->{o}{fullname}->set_text($us->{o}{login}->get_text); 0; # Gdk expect focus event handlers to return false }); @@ -420,7 +418,7 @@ sub ChooseGroup() { $w->destroy; Gtk2->main_quit; }), - gtksignal_connect(Gtk2::Button->new(N("Cancel")), clicked => sub { $error = 1; $w->destroy; Gtk2->main_quit; })))); + gtksignal_connect(Gtk2::Button->new(N("Cancel")), clicked => sub { $error = 1; $w->destroy; Gtk2->main_quit })))); $w->show_all; Gtk2->main; $choice; @@ -447,23 +445,23 @@ sub AddGroup { gtksignal_connect(Gtk2::Button->new($_->[0]), clicked => sub { if (!$r) { $g{groupname} = $us->{o}{groupname}->get_text; $error = 0; - if (!valid_groupname($g{groupname})) { RaiseError($us->{error}) }; + if (!valid_groupname($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('') }; + 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) { my $gidchoice = GimmeChoice(N(" Group Gid is < 500"), N("Creating a group with a GID less than 500 is not recommended.\n Are you sure you want to do this?\n\n")); $gidchoice and $groupEnt->Gid($g{gid}); } else { $groupEnt->Gid($g{gid}) } - }; + } if (!$error) { log::explanations(N("Adding group : %s ", $g{groupname})); $ctx->GroupAdd($groupEnt); Refresh($sysfilter, $stringsearch); } } - !$error and $w->destroy; $error = 0 }) + !$error and $w->destroy; $error = 0 }); } ([ N("Cancel"), 1 ], [ N("Ok"), 0 ])), ) ); @@ -492,7 +490,7 @@ sub GetNameEntFromIter { my ($tree, $model, $rank) = @_; my (undef, $iter) = $tree->get_selection->get_selected; my $name = $model->get($iter, $rank); - $name + $name; } sub FillUserInfo { my $ent = shift; @@ -500,7 +498,7 @@ sub FillUserInfo { $us->{o}{passwd}->set_text(' '); $us->{o}{confpasswd}->set_text(' '); $us->{o}{shells}->entry->set_text($ent->LoginShell($GetValue)); - $us->{o}{homedir}->set_text($ent->HomeDir($GetValue)) + $us->{o}{homedir}->set_text($ent->HomeDir($GetValue)); } sub Delete { my $page = $nb->get_current_page; @@ -535,14 +533,14 @@ sub Delete { if ($groupEnt) { my $member = $groupEnt->MemberName(1, 0); if (scalar(@$member) == 0 && $groupEnt->Gid($GetValue) > 499) { - $ctx->GroupDel($groupEnt) + $ctx->GroupDel($groupEnt); } } $checkhome->get_active and $ctx->CleanHome($userEnt); $checkspool->get_active and $ctx->CleanSpool($userEnt); - Refresh($sysfilter, $stringsearch) + Refresh($sysfilter, $stringsearch); } - !$error and $w->destroy; $error = 0 }) + !$error and $w->destroy; $error = 0 }); } ([ N("Cancel"), 1 ], [ N("Delete"), 0 ])), ) ); @@ -566,14 +564,14 @@ sub Delete { my $userEnt = $ctx->LookupUserByName($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 + last GLOOP; } } if (!$error) { log::explanations(N("Removing group: %s", $groupname)); $ctx->GroupDel($groupEnt); Refresh($sysfilter, $stringsearch) } } - !$error and $wg->destroy; $error = 0 }) + !$error and $wg->destroy; $error = 0 }); } ([ N("Cancel"), 1 ], [ N("Delete"), 0 ])), ) ); @@ -598,8 +596,8 @@ sub CreateTree { my %actions; %actions = ( edit => sub { my (undef, $iter) = $tree->get_selection->get_selected; - $iter and Edit() - }, + $iter and Edit(); + }, delete => sub { my (undef, $iter) = $tree->get_selection->get_selected; $iter and Delete(); @@ -611,9 +609,9 @@ sub CreateTree { my (undef, $event) = @_; my (undef, $iter) = $tree->get_selection->get_selected; return unless $iter; - foreach ($tbedit, $tbdel, $buttorcheck{edit}, $buttorcheck{delete}) { $_->set_sensitive(1) }; + foreach ($tbedit, $tbdel, $buttorcheck{edit}, $buttorcheck{delete}) { $_->set_sensitive(1) } Edit() if $event->type eq '2button-press'; - $_[1]->button == 3 and $menu_treeview->popup(undef, undef, undef, undef, $_[1]->button, $_[1]->time) + $_[1]->button == 3 and $menu_treeview->popup(undef, undef, undef, undef, $_[1]->button, $_[1]->time); }); $tree->signal_connect(key_press_event => sub { my (undef, $event) = @_; @@ -621,20 +619,20 @@ sub CreateTree { return unless $iter; Edit() if $event->keyval == $Gtk2::Gdk::Keysyms{Return}; }); - $tree + $tree; } sub GtkEntryHidePass { my ($text) = @_; my $e = Gtk2::Entry->new; $text and $e->set_text($text); $e->set_visibility(0); - $e + $e; } sub GtkEntrySized { my ($i, $spac) = @_; my $e = Gtk2::Entry->new_with_max_length($i); $e->set_size_request($spac, 20); - $e + $e; } sub BuildUui { gtkpack_(my $vbox = Gtk2::VBox->new(0, 2), @@ -648,7 +646,7 @@ sub BuildUui { ); $us->{o}{shells}->set_popdown_strings(@{$ctx->GetUserShells}); $us->{o}{shells}->entry->set_text("/bin/bash"); - $vbox + $vbox; } sub BuildGui { my $groupentry = @_; @@ -657,7 +655,7 @@ sub BuildGui { [ N("Group Name") . " :", $us->{o}{groupname} = Gtk2::Entry->new ] ) ); - $vbox + $vbox; } sub NewWindow { my ($label, $mode) = @_; @@ -666,7 +664,7 @@ sub NewWindow { $w->signal_connect(delete_event => sub { $w->destroy }); $w->set_position('center'); $w->set_modal(1); - $w + $w; } sub Edit { my $w = NewWindow(N("Edit Groups / Users"), 1); @@ -674,7 +672,7 @@ sub Edit { my $tree = Gtk2::TreeView->new_with_model($model); my %g; my %u; my ($groupname, $username, $groupEnt, $userEnt, $members, $times, $min, $max, $warn, $inact, $primgid, $temp, $Gent); my @primgroup; - my @pix = ($pixdir.'selected.png', $pixdir.'unselected.png'); + my @pix = ($pixdir . 'selected.png', $pixdir . 'unselected.png'); $tree->get_selection->set_mode('browse'); $tree->append_column(my $check = Gtk2::TreeViewColumn->new_with_attributes(undef, Gtk2::CellRendererPixbuf->new, 'pixbuf' => 0)); $check->{is_pixbuf_column} = 1; @@ -762,7 +760,7 @@ sub Edit { $primgid = $userEnt->Gid($GetValue); $Gent = $ctx->LookupGroupById($primgid); foreach my $group (@sgroups) { - if (any { $_ eq $group } @$members) { + if (member($group, @$members)) { $model->append_set([ 0 => gtkcreate_pixbuf($pix[0]), 1 => $group, 2 => 1 ]); push(@primgroup, $group); } else { $model->append_set([ 0 => gtkcreate_pixbuf($pix[1]), 1 => $group, 2 => 0 ]) } } @@ -783,7 +781,7 @@ sub Edit { my $users = $ctx->UsersEnumerate; my @susers = sort(@$users); $members = $ctx->EnumerateUsersByGroup($groupname); foreach my $user (@susers) { - if (any { $_ eq $user } @$members) { + if (member($user, @$members)) { $model->append_set([ 0 => gtkcreate_pixbuf($pix[0]), 1 => $user, 2 => 1 ]); } else { $model->append_set([ 0 => gtkcreate_pixbuf($pix[1]), 1 => $user, 2 => 0 ]) } } @@ -872,7 +870,7 @@ sub Edit { } elsif ($p == 1) { $g{groupname} = $us->{o}{groupname}->get_text; $error = 0; - if (!valid_groupname($g{groupname})) { RaiseError($us->{error}) }; + if (!valid_groupname($g{groupname})) { RaiseError($us->{error}) } if (!$error && $groupname ne $g{groupname}) { $groupEnt->GroupName($g{groupname}) } $groupname = $groupEnt->GroupName($GetValue); $members = $ctx->EnumerateUsersByGroup($groupname); @@ -910,7 +908,7 @@ sub Edit { } } } - !$error and $w->destroy; $error = 0 }) + !$error and $w->destroy; $error = 0 }); } ([ N("Cancel"), 1 ], [ N("Ok"), 0 ])), )); $tree->show; @@ -927,9 +925,9 @@ sub Edit { $model->set($iter, 2 => !$cp); if ($p <= 0) { if (!$cp) { - !InArray($item, \@primgroup) and push(@primgroup, $item) + !InArray($item, \@primgroup) and push(@primgroup, $item); } else { - InArray($item, \@primgroup) and @primgroup = RemoveFromArray($item, \@primgroup) + InArray($item, \@primgroup) and @primgroup = RemoveFromArray($item, \@primgroup); } $us->{o}{primgroup}->set_popdown_strings(@primgroup); $Gent and $us->{o}{primgroup}->entry->set_text($Gent->GroupName($GetValue)); @@ -949,9 +947,9 @@ sub Edit { $model->set($iter, 2 => !$cp); if ($p <= 0) { if (!$cp) { - !InArray($item, \@primgroup) and push(@primgroup, $item) + !InArray($item, \@primgroup) and push(@primgroup, $item); } else { - InArray($item, \@primgroup) and @primgroup = RemoveFromArray($item, \@primgroup) + InArray($item, \@primgroup) and @primgroup = RemoveFromArray($item, \@primgroup); } $us->{o}{primgroup}->set_popdown_strings(@primgroup); $Gent and $us->{o}{primgroup}->entry->set_text($Gent->GroupName($GetValue)); @@ -962,7 +960,7 @@ sub Edit { # $w->main } sub ValidInt { - foreach my $i (@_) { $i =~ /\d+/ or return 0 }; + foreach my $i (@_) { $i =~ /\d+/ or return 0 } return 1; } sub ConvTime { @@ -971,7 +969,7 @@ sub ConvTime { $mon = $month - 1; $yr = $year - 1900; $tm = POSIX::mktime(0, 0, 0, $day, $mon, $yr); $days = ceil($tm / (24 * 60 * 60)); - return $days + return $days; } sub TimeOfArray { my ($reltime, $cm) = @_; @@ -979,11 +977,11 @@ sub TimeOfArray { $t = localtime($reltime * 24 * 60 * 60) =~ /(\S+)\s+(\S+)\s+(\d+)\s+(\S+)\s+(\d+)/; $h->{daystr} = $1; $h->{month} = $2; $h->{dayint} = $3; $h->{year} = $5; $cm and $h->{month} = $mth{$2}; - $h + $h; } sub InArray { my ($item, $arr) = @_; - return any { $item eq $_ } @$arr + return any { $item eq $_ } @$arr; } sub RemoveFromArray { my ($item, $arr) = @_; @@ -996,16 +994,17 @@ sub GrayBox { $o->signal_connect('clicked' => sub { $m = !$m; $v->set_sensitive($m) }); } sub NewDialog { - my ($title, $no_button) = @_; + my ($title) = @_; my $dialog = gtkset_border_width(Gtk2::Dialog->new, 10); - $dialog->set_transient_for($us->{wnd}{rwindow}); + $dialog->set_transient_for($us->{wnd}{real_window}); $dialog->set_position('center-on-parent'); $dialog->set_title($title); $dialog->action_area->pack_start(gtkadd(Gtk2::HButtonBox->new, gtksignal_connect(Gtk2::Button->new(N("Close")), clicked => sub { $dialog->destroy }) ), - 0,0,0) unless $no_button; + 0,0,0); gtkset_modal($dialog, 1); + $dialog; } sub About { my $window_about = NewDialog(N("Userdrake")); @@ -1014,7 +1013,7 @@ sub About { $list->can_focus(0); each_index { $list->append_column(Gtk2::TreeViewColumn->new_with_attributes(undef, Gtk2::CellRendererText->new, 'text' => $::i)) } 0..2; $list->set_headers_visible(0); - foreach my $row (['Copyright', '2003,2004', 'MandrakeSoft SA'], [ N("Authors: "), '', '' ], [ '', 'Daouda Lo', '<daouda@mandrakesoft.com>' ], ['', '', '']) { + foreach my $row (['Copyright', '2003-2005', 'MandrakeSoft SA'], [ N("Authors: "), '', '' ], [ '', 'Daouda Lo', '<daouda@mandrakesoft.com>' ], ['', '', '']) { $tree_model->append_set(undef, [ map_index { $::i => $_ } @$row ]); } $list->get_selection->set_mode('none'); @@ -1037,9 +1036,6 @@ sub valid_username { sub valid_groupname { return valid($_[0], 16); } -# UTF8 mess work around -sub validGecos { -} sub RaiseError { my $w = NewWindow(N("Error"), 1); $error = 1; @@ -1050,7 +1046,7 @@ sub RaiseError { 0, gtksignal_connect(Gtk2::Button->new(N("Ok")), clicked => sub { $w->destroy }) ), ); - $w->show_all + $w->show_all; } sub QuitGlobal { setVarsInSh($conffile, { diff --git a/userdrake.spec b/userdrake.spec index 876c626..e613670 100644 --- a/userdrake.spec +++ b/userdrake.spec @@ -7,7 +7,7 @@ Summary: A graphical interface for administering users and groups Name: %{name} Version: %{version} -Release: 2mdk +Release: 3mdk #cvs source # http://www.linuxmandrake.com/en/cvs.php3 Source0: %{name}-%{version}.tar.bz2 @@ -78,6 +78,10 @@ rm -rf %{buildroot} %{_liconsdir}/*.png %changelog +* Wed Jan 26 2005 Daouda LO <daouda@mandrakesoft.com> 1.2-3mdk +- fix 'About' dialog crash +- cleanups + * Fri Jan 21 2005 Daouda LO <daouda@mandrakesoft.com> 1.2-2mdk - main loop fixed - rebuild against new perl (XS) |