Authen-SimplePam

 view release on metacpan or  search on metacpan

SimplePam.pm  view on Meta::CPAN


  if (defined ($old_password))
  {
    $self->password($old_password);
  }

  if (defined ($new_password))
  {
    $self->new_password($new_password);
  }

  unless ($self->service)
  {
    $self->service('passwd');
  }

  $self->{used_old_password} = 0;
  $self->_abort_on_error(0);
  $self->_call_type("change_password");
  $self->{conv_failure} = 0;

  print "DEBUG: change_password:\n" .
    "username: " . $self->username . ", old password: " . $self->password if $DEBUG;
  print " new password: " .  $self->new_password if $DEBUG;
  print " service: " . $self->service .	"\n" if $DEBUG;

  $pam = new Authen::PAM ($self->service,
			  $self->username,
			  sub {
			    return $self->_general_pam_conv ( @_ );
			  }
			 );
  return 0
    unless ref($pam);

  $pam_result = $pam->pam_chauthtok();

  $self->{_pam_result} = $pam_result;

  print "DEBUG: RESULT is $pam_result\n" if $DEBUG;

  $self->{_module_result} =  _pam2result($pam_result);
  return $self->{_module_result};
}

sub result2string {
  my ($self, $result) = @_;
  $result = $self->{_module_result}
    unless (defined ($result));

  if    ( $result == 0  ) { return "Authen::PAM error"                       }
  elsif ( $result == 1  ) { return "success"                                 }
  elsif ( $result == 2  ) { return "failure"                                 }
  elsif ( $result == 3  ) { return "insuficient credentials"                 }
  elsif ( $result == 4  ) { return "authentication information unavailable"  }
  elsif ( $result == 5  ) { return "user unknown"                            }
  elsif ( $result == 6  ) { return "maximum tries"                           }
  elsif ( $result == 7  ) { return "unknown error"                           }
  elsif ( $result == 8  ) { return "authentication error"                    }
  elsif ( $result == 9  ) { return "authentication information cannot be recovered" }
  elsif ( $result == 10 ) { return "authentication locked busy"              }
  elsif ( $result == 11 ) { return "authentication aging disable"            }
  elsif ( $result == 12 ) { return "permission denied"                       }
  elsif ( $result == 13 ) { return "try again"                               }
  elsif ( $result == 14 ) { return "dlopen error"                            }
  elsif ( $result == 15 ) { return "symbol not found"                        }
  elsif ( $result == 16 ) { return "memory buffer error"                     }
  elsif ( $result == 17 ) { return "the password should be changed"          }
  elsif ( $result == 18 ) { return "user account has expired"                }
  elsif ( $result == 19 ) { return "cannot make/remove an entry for the specified session" }
  elsif ( $result == 20 ) { return "cannot retrieve users credentials"       }
  elsif ( $result == 21 ) { return "user credentials expired"                }
  elsif ( $result == 22 ) { return "no pam module specific data is present"  }
  elsif ( $result == 23 ) { return "conversation error"                      }
  elsif ( $result == 24 ) { return "ignore underlying account module"        }
  elsif ( $result == 25 ) { return "critical error"                          }
  elsif ( $result == 26 ) { return "user authentication has expired"         }
  elsif ( $result == 27 ) { return "pam module is unknown"                   }
  elsif ( $result == 28 ) { return "bad item passed to pam"                  }
  elsif ( $result == 29 ) { return "conversation function is event driven and data is not available yet" }
  elsif ( $result == 30 ) { return "call this function again to complete authentication stack"           }
  elsif ( $result == 31 ) { return "error in service module"                 }
  elsif ( $result == 32 ) { return "system error"                            }
  elsif ( $result == 33 ) { return "failure setting user credential"         }
  else                    { return "invalid result number: $result"          }
}


#returns the EUID that is running this module
sub _get_username {
  #we use the EFECTIVE USER ID (EUID),
  #not the REAL USER ID ( UID )
  my $name = getpwuid($<);
  return $name;
}

#checks the meaning os a message
#Returns the state of a message:
#undef means a unknown message.
#0: old password
#1: new password (1st time)
#2: new password (2nsd time)
sub _check_msg {
  my ($message) = @_;

  unless (defined ($PAM_MESSAGES->{$message})) {
    warn __PACKAGE__ . " warning!\n";
    warn "Unclassified message: '$message' .\n";
    warn "Please contact the author at <raul\@dias.com.br> in order to improve SimplePam.\n";
    warn "Version used: $VERSION .\n";
    return undef;
  }
  return $PAM_MESSAGES->{$message};
}


#Converts a error message to its code.
sub _check_error_msg {
  my ($message) = @_;

  $message =~ s/^BAD PASSWORD: //;



( run in 0.884 second using v1.01-cache-2.11-cpan-39bf76dae61 )