#!/usr/bin/perl use strict; use warnings; use Martnet::DDNS; use Regexp::Common qw/net/; use Getopt::Long qw/GetOptions/; use JSON::PP qw/encode_json true false/; sub usage { die "Usage: add-slave [--enable-dnssec|--disable-dnssec] --master \n"; } my $master; my $enable_dnssec = 0; my $disable_dnssec = 0; GetOptions( 'master|m=s' => \$master, 'enable-dnssec' => \$enable_dnssec, 'disable-dnssec' => \$disable_dnssec, ) or usage(); usage() unless defined $master; die "Cannot specify both --enable-dnssec and --disable-dnssec\n" if ($enable_dnssec && $disable_dnssec); my $host = shift || die "No zonename provided\n"; my $ddns = Martnet::DDNS->new(); die "Zonename must end in a dot\n" unless ($host =~ /^[a-zA-Z0-9\.\-\_]+\.$/); my $regex = $RE{net}{IPv4} . '|' . $RE{net}{IPv6}; die "Master must be an IPv4 or IPv6 address\n" unless ($master =~ /^$regex$/); my $payload = { master => $master }; if ($enable_dnssec) { $payload->{dnssec} = true; } elsif ($disable_dnssec) { $payload->{dnssec} = false; } $ddns->add($host, encode_json($payload), '_pureslave');