From d67cea92cba119605cf9a966441067f654f422f7 Mon Sep 17 00:00:00 2001 From: Jorj Bauer Date: Sun, 1 Feb 2026 15:16:52 -0500 Subject: [PATCH] add foreign registry; remove slave setups --- DDNS.pm | 2 +- Makefile.PL | 6 +-- bin/add-foreign | 31 ++++++++++++++ bin/add-slave | 69 ------------------------------- bin/{del-slave => del-foreign} | 6 +-- bin/{list-slaves => list-foreign} | 2 +- 6 files changed, 39 insertions(+), 77 deletions(-) create mode 100755 bin/add-foreign delete mode 100755 bin/add-slave rename bin/{del-slave => del-foreign} (60%) rename bin/{list-slaves => list-foreign} (85%) diff --git a/DDNS.pm b/DDNS.pm index 0fae7ee..8bbe6e9 100644 --- a/DDNS.pm +++ b/DDNS.pm @@ -29,7 +29,7 @@ sub new { sub _validateTypeOrDie { my ($t) = @_; die "Invalid type" - unless ($t =~ /^_(vhosts|pureslave|custom|config)$/); + unless ($t =~ /^_(vhosts|custom|config|foreign)$/); } sub _fqdn { diff --git a/Makefile.PL b/Makefile.PL index 95e6aae..29b0603 100644 --- a/Makefile.PL +++ b/Makefile.PL @@ -11,9 +11,9 @@ WriteMakefile( 'bin/del-vhost', 'bin/list-vhosts', 'bin/sync-master-vhosts', - 'bin/add-slave', - 'bin/del-slave', - 'bin/list-slaves', + 'bin/add-foreign', + 'bin/del-foreign', + 'bin/list-foreign', 'bin/add-custom', 'bin/del-custom', 'bin/list-custom', diff --git a/bin/add-foreign b/bin/add-foreign new file mode 100755 index 0000000..e14b7b2 --- /dev/null +++ b/bin/add-foreign @@ -0,0 +1,31 @@ +#!/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-foreign \n"; +} + +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 $payload = { }; + +my $txt = encode_json($payload); + +if ($edit) { + $ddns->set($host, $txt, '_foreign'); +} else { + $ddns->add($host, $txt, '_foreign'); +} + +exit 0; diff --git a/bin/add-slave b/bin/add-slave deleted file mode 100755 index 66fc2c9..0000000 --- a/bin/add-slave +++ /dev/null @@ -1,69 +0,0 @@ -#!/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 [--edit] [--enable-dnssec|--disable-dnssec] --master " + - ("") + - "[--ddns-keyname ...] \n"; -} - -my $master; -my $edit = 0; -my $enable_dnssec = 0; -my $disable_dnssec = 0; -my @ddns_keynames; -my $webserver_ip; - -GetOptions( - 'master|m=s' => \$master, - 'edit' => \$edit, - 'enable-dnssec' => \$enable_dnssec, - 'disable-dnssec' => \$disable_dnssec, - 'ddns-keyname=s@' => \@ddns_keynames, -) 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; -} - -if (@ddns_keynames) { - # Preserve order but de-dupe - my %seen; - my @uniq = grep { !$seen{$_}++ } @ddns_keynames; - $payload->{ddns_keys} = \@uniq; -} - -my $txt = encode_json($payload); - -if ($edit) { - $ddns->set($host, $txt, '_pureslave'); -} else { - $ddns->add($host, $txt, '_pureslave'); -} - -exit 0; diff --git a/bin/del-slave b/bin/del-foreign similarity index 60% rename from bin/del-slave rename to bin/del-foreign index 4c0459e..12b0cc9 100755 --- a/bin/del-slave +++ b/bin/del-foreign @@ -5,10 +5,10 @@ use warnings; use Martnet::DDNS; use Regexp::Common qw/net/; -my $host = shift || die "No zonename provided"; +my $host = shift || die "No foreign host provided"; -die "Zonename must end in a dot" +die "Hostname must end in a dot" unless ($host =~ /^[a-zA-Z0-9\-\_\.]+\.$/); my $ddns = Martnet::DDNS->new(); -$ddns->del($host, '_pureslave'); +$ddns->del($host, '_foreign'); diff --git a/bin/list-slaves b/bin/list-foreign similarity index 85% rename from bin/list-slaves rename to bin/list-foreign index 6dfaa80..a27a55e 100755 --- a/bin/list-slaves +++ b/bin/list-foreign @@ -6,7 +6,7 @@ use Martnet::DDNS; my $ddns = Martnet::DDNS->new(); -my @vh = $ddns->get('_pureslave'); +my @vh = $ddns->get('_foreign'); foreach my $i (sort {$a->{zone} cmp $b->{zone}} @vh) { print $i->{zone}, ". master: ", $i->{master},"\n"; }