diff options
author | Oliver Tappe | 2007-09-26 13:05:33 +0200 |
---|---|---|
committer | Oliver Tappe | 2007-09-26 13:05:33 +0200 |
commit | b385455b18ec7ada8ec8c9c5cc467fcf46bb5dfc (patch) | |
tree | 604c1a78357c0f4fce70c81ef4254e7b92c3651e /installer/OpenSLX/OSSetup/Distro/Base.pm | |
parent | * reverted changeset 1347, as installPrerequiredPackages() *should* have been (diff) | |
download | core-b385455b18ec7ada8ec8c9c5cc467fcf46bb5dfc.tar.gz core-b385455b18ec7ada8ec8c9c5cc467fcf46bb5dfc.tar.xz core-b385455b18ec7ada8ec8c9c5cc467fcf46bb5dfc.zip |
* fixed problems with respect to installation of prerequired packages
* added support for setting the root-password:
+ slxos-setup now queries for the root-password
+ 'busybox cryptpw' is used to determine the hashed password as required
by the specific distribution (MD5 or Blowfish)
git-svn-id: http://svn.openslx.org/svn/openslx/trunk@1349 95ad53e4-c205-0410-b2fa-d234c58c8868
Diffstat (limited to 'installer/OpenSLX/OSSetup/Distro/Base.pm')
-rw-r--r-- | installer/OpenSLX/OSSetup/Distro/Base.pm | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/installer/OpenSLX/OSSetup/Distro/Base.pm b/installer/OpenSLX/OSSetup/Distro/Base.pm index d87f3d27..23f1e038 100644 --- a/installer/OpenSLX/OSSetup/Distro/Base.pm +++ b/installer/OpenSLX/OSSetup/Distro/Base.pm @@ -18,6 +18,7 @@ use warnings; our $VERSION = 1.01; # API-version . implementation-version +use Fcntl qw(:DEFAULT :flock); use File::Basename; use OpenSLX::Basics; use OpenSLX::Utils; @@ -216,6 +217,56 @@ sub postSystemInstallationHook { } +sub setPasswordForUser +{ + my $self = shift; + my $username = shift; + my $password = shift; + + my $hashedPassword = $self->hashPassword($password); + + my $writePasswordFunction = sub { + # now read, change and write shadow-file in atomic manner: + my $shadowFile = '/etc/shadow'; + slxsystem("cp -r $shadowFile $shadowFile~"); + my $shadowFH; + open($shadowFH, '+<', $shadowFile) + or croak _tr("could not open file '%s'! (%s)", $shadowFile, $!); + flock($shadowFH, LOCK_EX) + or croak _tr("could not lock file '%s'! (%s)", $shadowFile, $!); + my $content = do { local $/; <$shadowFH> }; + if ($content =~ m{^$username:}ims) { + my $lastChanged = int(time()/24/60/60); + my $newEntry + = "$username:$hashedPassword:$lastChanged:0:99999:7:::"; + $content =~ s{^$username:.+?$}{$newEntry}ms; + seek($shadowFH, 0, 0); + print $shadowFH $content; + } else { + warn _tr( + "user '%s' doesn't exist - unable to set password! (%s)", + $username + ); + } + close($shadowFH) + or croak _tr("could not close file '%s'! (%s)", $shadowFile, $!); +# unlink "$shadowFile~"; + }; + $self->{engine}->callChrootedFunctionForVendorOS($writePasswordFunction); +} + +sub hashPassword +{ + my $self = shift; + my $password = shift; + + my $busyboxBin = $self->{engine}->{'busybox-binary'}; + my $hashedPassword = qx{$busyboxBin cryptpw -a md5 $password}; + chomp $hashedPassword; + + return $hashedPassword; +} + 1; ################################################################################ |