3 Commits

Author SHA1 Message Date
4427f42e63 Implement CAA record
Docs say caa_property but implementation uses caa_tag (support both)

Ref: #3
2021-06-12 17:31:33 +01:00
401db7bda8 Support SRV records
Closes #1
2021-06-12 17:15:22 +01:00
dc1a90014a Enable support for simple types 2021-06-12 17:06:28 +01:00

View File

@ -33,12 +33,12 @@ sub _notice {
my %supported_types = ( my %supported_types = (
A => "yes", A => "yes",
AAAA => "yes", AAAA => "yes",
CAA => "not yet implemented", CAA => "yes",
CNAME => "yes", CNAME => "yes",
DNAME => "not yet implemented", DNAME => "yes",
MX => "yes", MX => "yes",
NS => "yes", NS => "yes",
PTR => "not yet implemented", PTR => "yes",
SSHFP => "not yet implemented", SSHFP => "not yet implemented",
SRV => "yes", SRV => "yes",
TLSA => "not yet implemented", TLSA => "not yet implemented",
@ -120,6 +120,19 @@ sub format_record($$$$) {
my ($pri, $data) = split(/\s+/, $value); my ($pri, $data) = split(/\s+/, $value);
$record->{mx_priority} = $pri; $record->{mx_priority} = $pri;
$record->{data} = $data; $record->{data} = $data;
} elsif ($type eq 'SRV') {
# pri weight port data
my ($pri, $weight, $port, $data) = split(/\s+/, $value);
$record->{srv_priority} = $pri;
$record->{srv_weight} = $weight;
$record->{srv_port} = $port;
$record->{data} = $data;
} elsif ($type eq 'CAA') {
my ($flags, $property, $data) = split(/\s+/, $value);
$record->{caa_flags} = $flags;
$record->{caa_property} = $property;
$record->{caa_tag} = $property;
$record->{data} = $data;
} }
return $record; return $record;
@ -129,6 +142,19 @@ sub reformat_data($$) {
my ($type, $data) = @_; my ($type, $data) = @_;
if($type eq 'MX') { if($type eq 'MX') {
return sprintf('%d %s', $data->{mx_priority}, $data->{data}); return sprintf('%d %s', $data->{mx_priority}, $data->{data});
} elsif($type eq 'SRV') {
return sprintf('%d %d %d %s',
$data->{srv_priority},
$data->{srv_weight},
$data->{srv_port},
$data->{data}
);
} elsif($type eq 'CAA') {
return sprintf('%d %s %s',
$data->{caa_flags},
$data->{caa_property} || $data->{caa_tag},
$data->{data}
);
} }
return $data->{data}; return $data->{data};
@ -163,6 +189,7 @@ sub check_and_update_record($$$$$) {
# Create new record # Create new record
my $new = format_record($zone, $type, $host, $value); my $new = format_record($zone, $type, $host, $value);
_notice("Created new record: %s %s %s", $host, $type, $value); _notice("Created new record: %s %s %s", $host, $type, $value);
_debug($new);
my $res = $ua->post( my $res = $ua->post(
$url, $url,
"Content-Type" => "application/json", "Content-Type" => "application/json",
@ -217,6 +244,7 @@ foreach my $z (keys %{$in->[0]->{zones}}) {
unless (defined $seen{$record}) { unless (defined $seen{$record}) {
# _info("Considering %s %s", $record->{host}, $record->{type}); # _info("Considering %s %s", $record->{host}, $record->{type});
my $skip; my $skip;
$skip = 1 if is_unsupported($record->{type});
if ($in->[0]->{ignore}->{$z}->{$record->{host}}) { if ($in->[0]->{ignore}->{$z}->{$record->{host}}) {
# check if type is specified # check if type is specified
if(keys %{$in->[0]->{ignore}->{$z}->{$record->{host}}}) { if(keys %{$in->[0]->{ignore}->{$z}->{$record->{host}}}) {