X-Git-Url: https://git.proxmox.com/?p=pve-access-control.git;a=blobdiff_plain;f=PVE%2FAuth%2FPAM.pm;h=d016f834f9e3ec92b87e86ffc36a6ea42d45f15c;hp=42feba8cae9092b81ca79a2b35c69675164f2257;hb=HEAD;hpb=54d312f350a90cf2cb6c62cdc43009881e9c7cf3 diff --git a/PVE/Auth/PAM.pm b/PVE/Auth/PAM.pm deleted file mode 100755 index 42feba8..0000000 --- a/PVE/Auth/PAM.pm +++ /dev/null @@ -1,76 +0,0 @@ -package PVE::Auth::PAM; - -use strict; -use warnings; - -use PVE::Tools qw(run_command); -use PVE::Auth::Plugin; -use Authen::PAM qw(:constants); - -use base qw(PVE::Auth::Plugin); - -sub type { - return 'pam'; -} - -sub options { - return { - default => { optional => 1 }, - comment => { optional => 1 }, - tfa => { optional => 1 }, - }; -} - -sub authenticate_user { - my ($class, $config, $realm, $username, $password) = @_; - - # user (www-data) need to be able to read /etc/passwd /etc/shadow - die "no password\n" if !$password; - - my $pamh = new Authen::PAM('common-auth', $username, sub { - my @res; - while(@_) { - my $msg_type = shift; - my $msg = shift; - push @res, (0, $password); - } - push @res, 0; - return @res; - }); - - if (!ref ($pamh)) { - my $err = $pamh->pam_strerror($pamh); - die "error during PAM init: $err"; - } - - my $res; - - if (($res = $pamh->pam_authenticate(0)) != PAM_SUCCESS) { - my $err = $pamh->pam_strerror($res); - die "$err\n"; - } - - if (($res = $pamh->pam_acct_mgmt (0)) != PAM_SUCCESS) { - my $err = $pamh->pam_strerror($res); - die "$err\n"; - } - - $pamh = 0; # call destructor - - return 1; -} - - -sub store_password { - my ($class, $config, $realm, $username, $password) = @_; - - my $cmd = ['usermod']; - - my $epw = PVE::Tools::encrypt_pw($password); - - push @$cmd, '-p', $epw, $username; - - run_command($cmd, errmsg => 'change password failed'); -} - -1;