-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathvirtualmin-powerdns-lib.pl
More file actions
executable file
·91 lines (83 loc) · 2 KB
/
Copy pathvirtualmin-powerdns-lib.pl
File metadata and controls
executable file
·91 lines (83 loc) · 2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
use strict;
use warnings;
our (%config);
our $module_config_directory;
our $module_root_directory;
BEGIN { push(@INC, ".."); };
eval "use WebminCore;";
&init_config();
# clean_powerdns_database_error(error)
# Remove Perl source locations from errors before displaying them to users.
sub clean_powerdns_database_error
{
my ($err) = @_;
$err ||= "Unknown error";
$err =~ s/\s+at\s+(?:\(eval\s+\d+\)|\S+)\s+line\s+\d+.*$//s;
return $err;
}
# connect_to_database()
sub connect_to_database
{
eval "use DBI;";
if ($@) {
my $err = &clean_powerdns_database_error($@);
return wantarray ? (undef, $err) : undef;
}
my ($dbh, $err, $drh);
eval {
$drh = DBI->install_driver("mysql");
$dbh = $drh->connect("database=$config{'db'}".
($config{'host'} ? ";host=$config{'host'}" : ""),
$config{'user'}, $config{'pass'},
{ 'PrintError' => 1 });
};
my $eval_err = $@;
if ($eval_err || !$dbh) {
my $driver_err = $drh ? $drh->errstr : undef;
$err = $eval_err || $driver_err || "Unknown error";
}
$err = &clean_powerdns_database_error($err) if ($err);
return wantarray ? ($dbh, $err) : $dbh;
}
our $template_file = "$module_config_directory/template";
# get_template()
# Returns an array of current record templates
sub get_template
{
my @rv;
open(my $FILE, "<", -r $template_file ? $template_file
: "$module_root_directory/default-template");
while(<$FILE>) {
s/\r|\n//g;
my @f = split(/\t+/, $_);
if (@f == 4) {
push(@rv, { 'name' => $f[0],
'type' => $f[1],
'ttl' => $f[2],
'value' => $f[3] });
}
}
close($FILE);
return @rv;
}
# save_template(value, ...)
# Updates the template file
sub save_template
{
open(my $FILE, ">", "$template_file");
foreach my $f (@_) {
print $FILE join("\t", $f->{'name'}, $f->{'type'},
$f->{'ttl'}, $f->{'value'}),"\n";
}
close($FILE);
}
# domain_id(&dbh, name)
sub domain_id
{
my $idcmd = $_[0]->prepare("select id from domains where name = ? and type = 'NATIVE'");
$idcmd->execute($_[1]);
my ($id) = $idcmd->fetchrow();
$idcmd->finish();
return $id;
}
1;