# $Id: DBM.pm,v 1.1.1.1 1997/12/23 11:14:48 lstein Exp $
package HTTPD::GroupAdmin::DBM;
use vars qw(@ISA $DLM $VERSION);
use strict;
use Carp ();
@ISA = qw(HTTPD::GroupAdmin);
$VERSION = (qw$Revision: 1.1.1.1 $)[1];
$DLM = " ";
my %Default = (PATH => ".",
DB => ".htgroup",
DBMF => "NDBM",
NAME => "",
FLAGS => "rwc",
MODE => 0644,
);
sub new {
my($class) = shift;
my $self = bless {%Default, @_}, $class;
$self->_dbm_init;
$self->db($self->{DB});
return $self;
}
DESTROY {
local($^W)=0;
$_[0]->_untie('_HASH');
$_[0]->unlock;
}
sub add {
my($self, $username, $group) = @_;
$group = $self->{NAME} unless defined $group;
return(0, "No group name!") unless defined $group;
unless ($self->{'_HASH'}) {
$self->_tie('_HASH', $self->{DB});
}
if ($self->{'_HASH'}{$group}) {
return (0, "'$username' already in '$group'") if
$self->{'_HASH'}{$group} =~ /(^|[$DLM]+)$username([$DLM]+|$)/;
}
#for that old .= bug, should be fixed now
my $val = "";
if(defined $self->{'_HASH'}{$group}) {
$val = $self->{'_HASH'}{$group} . $DLM;
}
$val .= $username;
$self->{'_HASH'}{$group} = $val;
}
sub remove {
my($self,$group) = @_;
$group = $self->{NAME} unless defined $group;
delete $self->{'_HASH'}{$group};
if($self->{NAME} eq $group) {
delete $self->{NAME};
}
1;
}
sub list {
return split(/[$DLM]+/, $_[0]->{'_HASH'}{$_[1]}) if $_[1];
keys %{$_[0]->{'_HASH'}};
}
package HTTPD::GroupAdmin::DBM::_generic;
use vars qw(@ISA);
@ISA = qw(HTTPD::GroupAdmin::DBM);
1;
__END__