Apache-Htpasswd
view release on metacpan or search on metacpan
Htpasswd.pm view on Meta::CPAN
}
}
#-----------------------------------------------------------#
sub DESTROY { close(FH); };
#-----------------------------------------------------------#
sub _lock {
my $self = shift;
# Lock if we don't have the lock
flock( FH, LOCK_EX ) if ( $self->{'LOCK'} == 0 );
# We have the lock
$self->{'LOCK'} = 1;
# Seek to head
seek( FH, 0, SEEK_SET );
}
#-----------------------------------------------------------#
sub _unlock {
my $self = shift;
flock( FH, LOCK_UN );
$self->{'LOCK'} = 0;
}
#-----------------------------------------------------------#
sub _open {
my $self = shift;
if ( $self->{'OPEN'} > 0 ) {
$self->{'OPEN'}++;
$self->_lock();
return;
}
my $passwdFile = $self->{'PASSWD'};
if ( $self->{READONLY} ) {
if ( !open( FH, $passwdFile ) ) {
$self->{'ERROR'} =
__PACKAGE__ . "::fetchPass - Cannot open $passwdFile: $!";
croak $self->error();
}
}
else {
if ( !open( FH, "+<$passwdFile" ) ) {
$self->{'ERROR'} =
__PACKAGE__ . "::fetchPass - Cannot open $passwdFile: $!";
croak $self->error();
}
}
binmode(FH);
$self->{'OPEN'}++;
$self->_lock() unless $self->{READONLY}; # No lock on r/o
}
#-----------------------------------------------------------#
sub _close {
my $self = shift;
$self->_unlock() unless $self->{READONLY};
$self->{'OPEN'}--;
if ( $self->{'OPEN'} > 0 ) { return; }
if ( !close(FH) ) {
my $passwdFile = $self->{'PASSWD'};
$self->{'ERROR'} =
__PACKAGE__ . "::htDelete - Cannot close $passwdFile: $!";
carp $self->error();
return undef;
}
}
#-----------------------------------------------------------#
1;
__END__
=head1 NAME
Apache::Htpasswd - Manage Unix crypt-style password file.
=head1 SYNOPSIS
use Apache::Htpasswd;
$foo = new Apache::Htpasswd("path-to-file");
$foo = new Apache::Htpasswd({passwdFile => "path-to-file",
ReadOnly => 1}
);
# Add an entry
$foo->htpasswd("zog", "password");
# Change a password
$foo->htpasswd("zog", "new-password", "old-password");
# Change a password without checking against old password
$foo->htpasswd("zog", "new-password", {'overwrite' => 1});
# Check that a password is correct
$foo->htCheckPassword("zog", "password");
# Fetch an encrypted password
$foo->fetchPass("foo");
# Delete entry
( run in 0.878 second using v1.01-cache-2.11-cpan-cdf2f3d4e48 )