diff options
author | Guilhem Moulin <guilhem.moulin@fripost.org> | 2013-01-21 23:18:05 +0100 |
---|---|---|
committer | Guilhem Moulin <guilhem.moulin@fripost.org> | 2013-01-21 23:18:05 +0100 |
commit | b21010c13d8725a69a152aeb920952f659749dd9 (patch) | |
tree | 6a6b99e8e7dc8996f96e4cbdb18b5f4deb807f82 /misc | |
parent | 6ebe4849dd75ec01197bf465ea20b6aa74e770a1 (diff) |
Added a service to delete expired pending entries.
Diffstat (limited to 'misc')
-rwxr-xr-x | misc/deleteExpiredEntries.pl | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/misc/deleteExpiredEntries.pl b/misc/deleteExpiredEntries.pl new file mode 100755 index 0000000..d4de6b6 --- /dev/null +++ b/misc/deleteExpiredEntries.pl @@ -0,0 +1,83 @@ +#!/usr/bin/perl + +use 5.010_000; +use strict; +use warnings; + +our $VERSION = '0.01'; + +=head1 NAME + +deleteExpiredEntries.pl - Clean the LDAP directory out of expired entries. + +=head1 SYNOPSIS + +B<deleteExpiredEntries.pl> [maximum age in seconds] + +=cut + + +####################################################################### +# + +use Pod::Usage; +use Config::Auto; +use lib 'lib'; +use Fripost::Schema; +use POSIX 'strftime'; + +# TODO: put that in a config file +my $config = { ldap_bind_dn => [ 'cn=DeletePendingEntries','ou=services','o=mailHosting','dc=fripost,dc=dev' ] + , ldap_uri => 'ldap://127.0.0.1:389/' + , ldap_suffix => [ 'ou=virtual','o=mailHosting','dc=fripost,dc=dev' ] + }; + +my $fp = Fripost::Schema::->auth( undef, 'deletependingentries', %$config ); + + +my $maxage = $ARGV[0] // 86400; # 24h by default +my $now = int(strftime "%s", gmtime); + +my $maxdate = Net::LDAP::Util::escape_filter_value( + strftime ("%Y%m%d%H%M%SZ", localtime($now - $maxage)) ); +my $entries = $fp->ldap->search ( + base => Fripost::Schema::Util::canonical_dn(@{$fp->suffix}), + scope => 'subtree', + deref => 'never', + filter => "(&(fripostPendingToken=*) + (createTimestamp<=$maxdate))", + attrs => [], + callback => \&delete_entry + ); +die $entries->error."\n" if $entries->code; +$fp->done; + +sub delete_entry { + shift; + my $obj = shift; + if (defined $obj and $obj->isa('Net::LDAP::Entry')) { +# print STDERR "Deleting DN ".$obj->dn."\n"; + $obj->delete; + my $mesg = $obj->update($fp->ldap); + die $mesg->error."\n" if $mesg->code; + } +} + + +####################################################################### +# + +=head1 AUTHOR + +Guilhem Moulin C<< <guilhem at fripost.org> >> + +=head1 COPYRIGHT + +Copyright 2013 Guilhem Moulin. + +=head1 LICENSE + +This program is free software; you can redistribute it and/or modify it +under the same terms as perl itself. + +=cut |