#!/usr/bin/perl -I/home/kdeugau/dnsbl/ # Delist a URI use strict; use warnings; use DBI; use URIdb; my $uridb = new URIdb; # default DB info - all other settings should be loaded from the DB. my $dbhost = "localhost"; my $dbname = "dnsbl"; my $dbuser = "dnsbl"; my $dbpass = "spambgone"; die "Usage: delist-uri \n" if !$ARGV[0]; # Load a config ref containing DB host, name, user, and pass info based on # from the server name + full script web path. This allows us to host # multiple instances without having to duplicate the code. # This file is a Perl fragment to be processed inline. if (-e "/etc/uridb/uridb.conf") { my $cfg = `cat /etc/uridb/uridb.conf`; ($cfg) = ($cfg =~ /^(.+)$/s); # avoid warnings, failures, and general nastiness with taint mode eval $cfg; } my $dbh = $uridb->connect($dbhost, $dbname, $dbuser, $dbpass); my %config; my $sth = $dbh->prepare("SELECT key,value FROM misc"); $sth->execute; while (my ($key,$value) = $sth->fetchrow_array) { $config{$key} = $value; } my $removeme = $ARGV[0]; $sth = $dbh->prepare("SELECT uri,list,count,added,comment FROM urilist WHERE uri=?"); $sth->execute($removeme); my ($uri,$list,$count,$added,$comment) = $sth->fetchrow_array; die "URI $removeme not found. Exiting.\n" if !$uri; # need to do the next in a single transaction local $dbh->{AutoCommit} = 0; local $dbh->{RaiseError} = 1; eval { $sth = $dbh->prepare("INSERT INTO waslisted (uri,list,count,origadded,comment) VALUES (?,?,?,?,?)"); $sth->execute($uri,$list,$count,$added,$comment); $sth = $dbh->prepare("DELETE FROM urilist WHERE uri=?"); $sth->execute($uri); $dbh->commit; }; if ($@) { my $msg = $@; eval { $dbh->rollback; }; print "Failed to move record from urilist to waslisted: $msg\n"; }