[rt-users] Shredder API questions

Mathew Snyder theillien at yahoo.com
Sun Jan 7 02:25:28 EST 2007


Ruslan Zakirov wrote:
> On 12/30/06, Mathew Snyder <theillien at yahoo.com> wrote:
>> I'm rewriting a script that will eliminate all spam users accrued over
>> the
>> course of a day.  Presently, it is using the least efficient way of
>> executing
>> the wipeout by performing a system call to rtx-shredder.  I would
>> prefer to run
>> the wipeout by way of the Shredder API.  I'm guessing along the lines
>> of this:
>>
>> # load plugin by preformatted string
>> my $pluginString =
>> "'Users=status,any;email,$email;replace_relations,Nobody'";
>> my $plugin = new RTx::Shredder::Plugin;
>> my( $status, $msg ) = $plugin->LoadByString( $pluginString );
>> unless( $status ) {
>>     print STDERR "Couldn't load plugin: $msg\n";
>>     exit(1);
>>     }
>> }
>>
>> Another question is in regards to the sql dump.  I've looked at
>> rtx-shredder and
>> have seen referrence to the SetFile method but haven't seen anything
>> about the
>> DumpSQl method that is mentioned in Shredder.pm.  Is this automatically
>> accounted for when if I use my ($fname, $fh) = $shredder-SetFile;?
>>
>> The portion of my script this relates to is below.
>>
>> <snip>
>> foreach my $email (sort(@emails)){
>>         print $email . "\n";
>> }
>>
>> print "\nDelete the email addresses from the RT database [y/N]: ";
>> chomp($ans = <STDIN>);
>>
>> if ($ans =~ m/^(y|yes)$/i){
>>         my $email;
>>         foreach $email (@emails){
>> #       system "/usr/local/rt-3.6.1/local/sbin/rtx-shredder --force
>> --plugin \
>> 'Users=status,any;email,$email;replace_relations,Nobody'";
>>         # load plugin by preformatted string
>>                 my $pluginString = \
>> "'Users=status,any;email,$email;replace_relations,Nobody'";
>>                 my $plugin = new RTx::Shredder::Plugin;
>>                 my( $status, $msg ) = $plugin->LoadByString(
>> $pluginString );
>>                 unless( $status ) {
>>                         print STDERR "Couldn't load plugin: $msg\n";
>>                         exit(1);
>>                 }
>>         }
>> }
>> else{
>>         exit;
>> }
>> </snip>
>>
>> One problem I can already see with the above snippet is that Shredder
>> is called
>> seperately for each email address.  How do I set this up to run as one
>> continuous execution for the entire array of addresses?
> You can use $shredder->PutObject and put sever users' objects into
> shredder and then $shredder->WipeoutAll.
> 
I've tried
foreach my $email (@emails) {
	$shredder->PutObject (User => $email);
}

$shredder->PutObject (User::LoadByEmail => $email);
$shredder->PutObject (RT::User::LoadByEmail => $email);
and
$shredder->PutObject ($email);

I'm getting
Odd number of elements in anonymous hash at
/usr/local/rt-3.6.1/local/lib/RTx/Shredder.pm line 177, <STDIN> line 1.
Use of uninitialized value in anonymous hash ({}) at
/usr/local/rt-3.6.1/local/lib/RTx/Shredder.pm line 177, <STDIN> line 1.
Odd number of elements in hash assignment at
/usr/local/rt-3.6.1/local/lib/RTx/Shredder.pm line 287, <STDIN> line 1.
Unsupported type '(undef)'

Trace begun at /usr/local/rt-3.6.1/local/lib/RTx/Shredder.pm line 290
RTx::Shredder::PutObject('RTx::Shredder=HASH(0xa283e64)',
'kusare.com at focalsecurity.com') called at delete_spam_users.pl line 65

I looked at line 177 in Shredder and couldn't figure out what I was looking at.
 I also looked at the perldoc for Shredder.pm, User.pm, Users.pm and Record.pm.

I don't know what I'm missing.

Mathew




More information about the rt-users mailing list