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 )