3 # Copyright (c) 2012, 2013, The Trusted Domain Project. All rights reserved.
5 # Script to apply manual changes to DMARC reporting parameters.
24 my $progname = basename
($0);
25 my $version = "1.3.1";
31 my $def_dbhost = "localhost";
32 my $def_dbname = "opendmarc";
33 my $def_dbuser = "opendmarc";
34 my $def_dbpasswd = "opendmarc";
35 my $def_dbport = "3306";
42 my $dbscheme = "mysql";
61 ($name, $table, $column) = @_;
63 if (!defined($name) || !defined($table))
68 if (!defined($column))
73 $dbi_t = $dbi_h->prepare("SELECT id FROM $table WHERE $column = ?");
74 if (!$dbi_t->execute($name))
76 print STDERR
"$progname: failed to retrieve table ID: " . $dbi_h->errstr . "\n";
81 while ($dbi_a = $dbi_t->fetchrow_arrayref())
83 if (defined($dbi_a->[0]))
93 $dbi_t = $dbi_h->prepare("INSERT INTO $table ($column) VALUES(?)");
94 if (!$dbi_t->execute($name))
96 print STDERR
"$progname: failed to create table ID: " . $dbi_h->errstr . "\n";
100 $dbi_t = $dbi_h->prepare("SELECT LAST_INSERT_ID()");
101 if (!$dbi_t->execute())
103 print STDERR
"$progname: failed to retrieve created table ID: " . $dbi_h->errstr . "\n";
107 while ($dbi_a = $dbi_t->fetchrow_arrayref())
109 if (defined($dbi_a->[0]))
119 print STDERR
"$progname: failed to retrieve created table ID: " . $dbi_h->errstr . "\n";
129 print STDERR
"$progname: usage: $progname [options] domain\n";
130 print STDERR
"\t--dbhost=host database host [$def_dbhost]\n";
131 print STDERR
"\t--dbname=name database name [$def_dbname]\n";
132 print STDERR
"\t--dbpasswd=passwd database password [$def_dbpasswd]\n";
133 print STDERR
"\t--dbport=port database port [$def_dbport]\n";
134 print STDERR
"\t--dbuser=user database user [$def_dbuser]\n";
135 print STDERR
"\t--rua=string aggregate report URI(s)\n";
136 print STDERR
"\t--help print help and exit\n";
137 print STDERR
"\t--unlock unlocks named record\n";
138 print STDERR
"\t--verbose verbose output\n";
139 print STDERR
"\t--version print version and exit\n";
142 # parse command line arguments
143 my $opt_retval = &Getopt
::Long
::GetOptions
('dbhost=s' => \
$dbhost,
144 'dbname=s' => \
$dbname,
145 'dbpasswd=s' => \
$dbpasswd,
146 'dbport=s' => \
$dbport,
147 'dbuser=s' => \
$dbuser,
148 'help!' => \
$helponly,
150 'unlock!' => \
$unlock,
151 'verbose!' => \
$verbose,
152 'version!' => \
$showversion,
157 if (!$opt_retval || $helponly || !defined($domain))
173 print STDOUT
"$progname v$version\n";
178 if (!defined($dbhost))
180 if (defined($ENV{'OPENDMARC_DBHOST'}))
182 $dbhost = $ENV{'OPENDMARC_DBHOST'};
186 $dbhost = $def_dbhost;
190 if (!defined($dbname))
192 if (defined($ENV{'OPENDMARC_DB'}))
194 $dbname = $ENV{'OPENDMARC_DB'};
198 $dbname = $def_dbname;
202 if (!defined($dbpasswd))
204 if (defined($ENV{'OPENDMARC_PASSWORD'}))
206 $dbpasswd = $ENV{'OPENDMARC_PASSWORD'};
210 $dbpasswd = $def_dbpasswd;
214 if (!defined($dbport))
216 if (defined($ENV{'OPENDMARC_PORT'}))
218 $dbport = $ENV{'OPENDMARC_PORT'};
222 $dbport = $def_dbport;
226 if (!defined($dbuser))
228 if (defined($ENV{'OPENDMARC_USER'}))
230 $dbuser = $ENV{'OPENDMARC_USER'};
234 $dbuser = $def_dbuser;
240 print STDERR
"$progname: started at " . localtime() . "\n";
243 my $dbi_dsn = "DBI:" . $dbscheme . ":database=" . $dbname .
244 ";host=" . $dbhost . ";port=" . $dbport;
246 $dbi_h = DBI
->connect($dbi_dsn, $dbuser, $dbpasswd, { PrintError
=> 0 });
247 if (!defined($dbi_h))
249 print STDERR
"$progname: unable to connect to database: $DBI::errstr\n";
255 print STDERR
"$progname: connected to database\n";
258 $domainid = get_table_id
($domain, "domains", "name");
259 $requestid = get_table_id
($domainid, "requests", "domain");
263 $dbi_t = $dbi_h->prepare("UPDATE requests SET locked = 0 WHERE id = ?");
264 if (!$dbi_t->execute($requestid))
266 print STDERR
"$progname: failed to update requests table for $domain: " . $dbi_h->errstr . "\n";
271 $dbi_t = $dbi_h->prepare("UPDATE requests SET locked = 1, repuri = ? WHERE id = ?");
272 if (!$dbi_t->execute($rua, $requestid))
274 print STDERR
"$progname: failed to update requests table for $domain: " . $dbi_h->errstr . "\n";