AddressBook
view release on metacpan or search on metacpan
lib/AddressBook/DB/LDIF.pm view on Meta::CPAN
}
sub truncate {
my $self = shift;
my $class = ref $self || croak "Not a method call.";
$self->{fh}->truncate(0);
}
sub read {
my $self = shift;
my $class = ref $self || croak "Not a method call.";
if ($self->{mode} eq "w") {
croak "Error: After writing, do a reset before reading";
}
$self->{mode} = "r";
if (my $ldap_entry = $self->{ldif}->read) {
my $ret = AddressBook::Entry->new(config=>$self->{config});
foreach ($ldap_entry->attributes) {
if (exists $self->{config}->{db2generic}->{$self->{db_name}}->{$_}) {
$ret->add(db=>$self->{db_name},attr=>{$_=>[$ldap_entry->get_value($_)]});
}
}
$ret->{timestamp} = $self->_get_timestamp;
return $ret;
} else {
return undef;
}
}
sub write {
my $self = shift;
my $class = ref $self || croak "Not a method call";
$self->{fh}->seek(0,2); # jump to the end of the file
$self->{mode} = "w";
my $entry = shift;
$entry->calculate;
my $dn = $self->_dn_from_entry($entry);
my %attr = %{$entry->get(db=>$self->{db_name},values_only=>'1')};
$attr{objectclass} = [$self->{objectclass}];
my $ldap_entry = Net::LDAP::Entry->new();
$ldap_entry->dn($dn);
$ldap_entry->add(%attr);
$self->{ldif}->write($ldap_entry);
}
sub _dn_from_entry {
my $self = shift;
my $class = ref $self || croak "Not a method call";
my $entry = shift || croak "Need an entry";
my ($dn,$dn_calculate);
my %attr = %{$entry->get(db=>$self->{db_name},values_only=>'1')};
($dn_calculate=$self->{dn_calculate}) =~ s/\$(\w*)/\$attr{$1}->[0]/g;
eval qq{\$dn = $dn_calculate}; warn "Syntax error in dn_calculate: $@" if $@;
$dn .= "," . $self->{base};
return $dn;
}
sub _get_timestamp {
my $self = shift;
my $class = ref $self || croak "Not a method call";
my @stat = stat($self->{filename});
return ParseDateString("epoch $stat[9]");
}
1;
=head2 Timestamps
For syncronization purposes, all records are timestamped with the modification date
of the LDIF file.
=head1 AUTHOR
David L. Leigh, <dleigh@sameasiteverwas.net>
=head1 SEE ALSO
L<AddressBook>,
L<AddressBook::Config>,
L<AddressBook::Entry>.
Net::LDAP
=cut
( run in 0.589 second using v1.01-cache-2.11-cpan-39bf76dae61 )