diff --git a/lib/LDV/LDAP.pm b/lib/LDV/LDAP.pm index a17d221..e69e8ee 100644 --- a/lib/LDV/LDAP.pm +++ b/lib/LDV/LDAP.pm @@ -6,6 +6,7 @@ use utf8; use Net::LDAP; use Net::LDAP::Util qw(ldap_error_name); +use Crypt::SaltedHash; sub new { my ($class, $opts) = @_; @@ -65,6 +66,15 @@ sub auth { return 1; } +sub chpass { + my ($self, $uid, $newpass) = @_; + + my $csh = Crypt::SaltedHash->new(algorithm => 'SHA-1'); + $csh->add($newpass); + + return $self->update($uid, {userPassword => $csh->generate()}); +} + sub create { my ($self, $uid) = @_; my $conn = $self->_connect(); @@ -186,6 +196,14 @@ LDV::LDAP -- ldap routines Check user/pass pair against ldap server. Returns 1 on success or undef on auth failure/error; +=head2 C + + my $ldap = LDV::LDAP->new(\%opts); + my $result = $ldap->chpass($username, $password); + +Changes user password. +Returns nothing on success or scalar with text on error. + =head2 C my $ldap = LDV::LDAP->new(\%opts); diff --git a/t/LDAP.t b/t/LDAP.t index a882953..26947e0 100644 --- a/t/LDAP.t +++ b/t/LDAP.t @@ -7,12 +7,12 @@ use utf8; use LDV::LDAP; use File::Slurp; use Data::Dumper; -use Test::More tests => 13; +use Test::More tests => 16; my $hash = read_file('conf/ldv.conf'); my $config = eval "$hash"; SKIP: { - skip "Can't load config", 13 unless (ref($config) eq 'HASH'); + skip "Can't load config", 16 unless (ref($config) eq 'HASH'); my $ldap = LDV::LDAP->new($config->{ldap}); isa_ok($ldap, "LDV::LDAP", "LDV::LDAP->new"); @@ -36,6 +36,10 @@ SKIP: { is($ldap->auth("test20", "test1"), undef, "check auth falure (wrong pass)"); is($ldap->auth("test20", undef), undef, "check auth falure (empty pass)"); + is($ldap->chpass("test20", "test2"), undef, "change password"); + is($ldap->auth("test20", "test2"), 1, "check auth success (new pass)"); + is($ldap->auth("test20", "test"), undef, "check auth falure (old pass)"); + is($ldap->delete("test20"), undef, "deleting user"); };