http://www.perlmonks.org?node_id=9034
Category: CGI programming
Author/Contact Info T.R. Fullhart, kayos@kayos.org
Description:

If you have a "membership" area that uses HTTP Basic Auth, then you probably have to edit the .htpasswd file pretty often. This module let's you treat the .htpasswd file as a Tied hash.

This module uses Apache::Htpasswd.

Example:

use Tie::Htpasswd; tie %htpasswd, 'Tie::Htpasswd', "/home/httpd/htdocs/.htpasswd"; $htpasswd{username} = "password"; # assignment automatically crypt() +s delete $htpasswd{username}; # removed from .htpasswd untie %htpasswd; # save the file
# $Id: Htpasswd.pm,v 1.3 2000/05/24 20:27:48 kayos Exp $
package Tie::Htpasswd;

use strict;
use vars qw($VERSION);
use Apache::Htpasswd;

$VERSION = sprintf("%d.%02d",q$Revision: 1.3 $ =~ /(\d+)\.(\d+)/);

my $F_FILENAME = 0;
my $F_DATA = 1;

sub TIEHASH {
        my ($pkg, $filename) = @_;
        my $obj = [];

        $obj->[$F_FILENAME] = $filename;
        $obj->[$F_DATA] = new Apache::Htpasswd($filename);

        return (bless $obj, $pkg);      
}

sub FETCH {
        my ($self,$key) = @_;
        return $self->[$F_DATA]->fetchPass($key);
}

sub STORE {
        my ($self,$key,$value) = @_;
        if($self->[$F_DATA]->fetchPass($key)) {
                $self->[$F_DATA]->htpasswd($key,$value,1);
        } else {
                $self->[$F_DATA]->htpasswd($key,$value);
        }
        return $self->[$F_DATA]->fetchPass($key);
}

sub DELETE {
        my ($self,$key) = @_;
        my $prev_value = $self->[$F_DATA]->fetchPass($key);
        $self->[$F_DATA]->htDelete($key);
        return $prev_value;
}

sub EXISTS {
        my ($self,$key) = @_;
        my $result = $self->[$F_DATA]->fetchPass($key);
        return ( $result );
}

sub DESTROY {
        my ($self) = @_;
        undef $self->[$F_DATA];
}

1;