From: Chris F. <cf...@vi...> - 2003-01-09 21:40:45
|
I'm trying to do a mass delete from a directory. The code below is a frag from a system that used to work. After upgrading OpenLDAP to 2.0.27 the code blocks here: Convert::ASN1::asn_read(/usr/local/lib/perl5/site_perl/5.8.0/Convert/ASN1/IO.pm: 157): 157: sysread($_[0],$_[1],$n,length $_[1]) or 158: goto READ_ERR; Is there some other technique I should be using to do this kind of conditional delete? -- Chris Fedde -- #!/bin/perl use strict; use warnings; use Net::LDAP; use Time::Local; my $search; my $prune; my $server = 'bender.area31.viawest.net'; my $prunebase = 'ou=access,ou=SendmailMaps,ou=Applications,dc=viawest,dc=net'; my $binddn = 'cn=root,dc=ldapusers,dc=viawest,dc=net'; my $passwd = 'axaxotif'; my $timeout = 10; # # 20020411013841Z # YYYYMMDDHHmmss # 0....+....1....+ # sub timestamp_to_epoch { my $ts = shift; my ( $year, $month, $day, $hour, $minute, $sec ) = ( substr( $ts, 0, 4 ), substr( $ts, 4, 2 ), substr( $ts, 6, 2 ), substr( $ts, 8, 2 ), substr( $ts, 10, 2 ), substr( $ts, 12, 2 ) ); return timegm( $sec, $minute, $hour, $day, $month - 1, $year - 1900 ); } sub prune { my $result; warn("prune starting"); $search = Net::LDAP->new( $server, ) or die "$0: $@"; $prune = Net::LDAP->new( $server, ) or die "$0: $@"; $search->bind( dn => $binddn, password => $passwd, ) or die "$0: $@"; $prune->bind( dn => $binddn, password => $passwd, ) or die "$0: $@"; my $msg = $search->search( base => $prunebase, filter => '(&(objectClass=vwSendmailMap)(vwMapDynamicEntry=*))', attrs => [ '*', 'modifyTimestamp' ], callback => \&prune_each, ); $search->unbind; $prune->unbind; } sub prune_each { my $msg = shift; my $entry = shift; return unless ( defined $entry ); my $ts = $entry->get_value('modifyTimestamp'); my $epoch = timestamp_to_epoch($ts); my $dynamic = $entry->get_value('vwMapDynamicEntry'); my $dn = $entry->dn; my $key = $entry->get_value('vwMapKey'); warn("prune_each $key"); if ( time() > $epoch + $timeout and defined $dynamic ) { my $result = $prune->delete($entry); warn( "prune_each: delete $key, ldapcode: " . $result->code ); } $msg->pop_entry; } prune(); |