diff options
Diffstat (limited to 'perl-install/standalone/adduserdrake')
| -rwxr-xr-x | perl-install/standalone/adduserdrake | 96 |
1 files changed, 13 insertions, 83 deletions
diff --git a/perl-install/standalone/adduserdrake b/perl-install/standalone/adduserdrake index 1ce283f8c..b449ef52b 100755 --- a/perl-install/standalone/adduserdrake +++ b/perl-install/standalone/adduserdrake @@ -2,94 +2,24 @@ use lib qw(/usr/lib/libDrakX); -use common qw(:common :functional :system :file); +use standalone; #- warning, standalone must be loaded very first, for 'explanations' + +use common; use interactive; +use security::level; +use authentication; use any; -local $_ = join '', @ARGV; - -/-h/ and die "usage: adduserdrake [--beginner] [--expert] [<users...>]\n"; - -$::beginner = /-beginner/; -$::expert = /-expert/; -$::isStandalone = 1; - -my @etc_pass_fields = qw(name pw uid gid realname home shell); -my @shells = grep { -x $_ } map { "/bin/$_" } qw(bash tcsh zsh ash ksh); -my $isMD5 = cat_("/etc/pam.d/passwd") =~ /md5/; -my $isShadow = cat_("/etc/pam.d/passwd") =~ /shadow/; -my $security = $ENV{SECURE_LEVEL}; - - +my $users = []; +my $in; if (my @l = grep { ! /^-/ } @ARGV) { - addusers(map {{ name => $_, realname => $_ }} @l); - exit 0; -} - -my $in = interactive->vnew('su'); -my @users; - -new: -$u = { icon => translate('automagic') }; -if ($in->ask_from_entries_refH( - [ _("Add user"), _("Accept user"), _("Done") ], - _("Enter a user\n%s", $users ? _("(already added %s)", join(", ", map { $_->{realname} || $_->{name} } @users)) : ''), - [ - _("Real name") => \$u->{realname}, - _("User name") => \$u->{name}, - $security < 2 ? () : ( - _("Password") => {val => \$u->{password}, hidden => 1}, - _("Password (again)") => {val => \$u->{password2}, hidden => 1}, - ), $::beginner ? () : ( - _("Shell") => {val => \$u->{shell}, list => \@shells, not_edit => !$::expert} - ), $security > 3 ? () : ( - _("Icon") => {val => \$u->{icon}, list => [ any::facesnames() ], icon2f => \&any::face2xpm }, - ), - ], - focus_out => sub { - if ($_[0] eq 0) { - $u->{name} ||= lc first($u->{realname} =~ /((\w|-)+)/); - } - }, - complete => sub { - $u->{password} eq $u->{password2} or $in->ask_warn('', [ _("The passwords do not match"), _("Please try again") ]), return (1,3); - $security > 3 && length($u->{password}) < 6 and $in->ask_warn('', _("This password is too simple")), return (1,2); - $u->{name} or $in->ask_warn('', _("Please give a user name")), return (1,0); - $u->{name} =~ /^[a-z0-9_-]+$/ or $in->ask_warn('', _("The user name must contain only lower cased letters, numbers, `-' and `_'")), return (1,0); - member($u->{name}, map { $_->{name} } @users) and $in->ask_warn('', _("This user name is already added")), return (1,0); - print $u->{icon}, "\n"; - return 0; - }, -)) { - push @users, $u; - goto new; + $users = [ map { { name => $_, realname => $_ } } @l ]; +} else { + $in = 'interactive'->vnew('su'); + any::ask_user($in, $users, security::level::get(), needauser => 1); } -addusers(@users); - -sub addusers { - my @u = map { $_->{name} } my @users = @_; - - foreach (@users) { - $_->{pw} = any::crypt($_->{password}, $isMD5); - $_->{shell} ||= "/bin/bash"; - } - - system("adduser $_") foreach @u; - any::addUsers('', @_); - - substInFile { - foreach my $u (@users) { - if (/^$u->{name}:/) { - chomp; - my %l; @l{@etc_pass_fields} = split ':'; - add2hash($u, \%l); - $_ = join(':', @$u{@etc_pass_fields}) . "\n"; - } - } - } "/etc/passwd"; - system("pwconv") if $isShadow; -} +any::add_users($users, authentication::get()); -$in->exit(0); +$in->exit(0) if $in; |
