1 $ˆl–Ãa¾”êeJq@?q±\ ÊbÑ¿Ç „ž}ïÆÀÉ2b#!/usr/local/cpanel/3rdparty/bin/perl # cpanel - scripts/setupnameserver Copyright 2022 cPanel, L.L.C. # All rights reserved. # copyright@cpanel.net http://cpanel.net # This code is subject to the cPanel license. Unauthorized copying is prohibited use strict; use warnings; use Config::Tiny (); use Cpanel::Config::LoadCpConf (); use Cpanel::Config::CpConfGuard (); use Cpanel::ServerTasks (); use Cpanel::Chkservd::Manage (); use Cpanel::Chkservd::Tiny (); use Cpanel::Pkgr (); use Cpanel::RPM::Versions::File (); use Cpanel::RPM::Versions::Directory (); use Cpanel::Services::Enabled (); use Cpanel::Services::Restart (); use Cpanel::Init (); use Cpanel::OS (); use Cpanel::NameServer::Utils::Enabled (); use Cpanel::Usage (); use Cpanel::PID (); use Cpanel::Encoder::Tiny (); use Cpanel::RestartSrv::Systemd (); use Cpanel::ServerTasks (); use Cpanel::SafeDir::MK (); use Cpanel::Slurper (); my $force = 0; my $current = 0; my $html = 0; delete $ENV{'cp_security_token'}; delete $ENV{'HTTP_REFERER'}; # Argument processing my %opts = ( 'force' => \$force, 'current' => \$current, 'html' => \$html, ); Cpanel::Usage::wrap_options( \@ARGV, \&usage, \%opts ); local @ARGV = ( grep( !/^--/, @ARGV ) ); my $dnstype = shift; usage() unless ( $dnstype || $current ); if ( $> != 0 ) { die "Conversion process must be performed as root"; } my $cpconf_ref = Cpanel::Config::LoadCpConf::loadcpconf_not_copy(); $cpconf_ref->{'local_nameserver_type'} ||= 'powerdns'; my $current_nameserver = Cpanel::Services::Enabled::is_enabled('dns') ? $cpconf_ref->{'local_nameserver_type'} : 'disabled'; if ($current) { print "Current nameserver type: $current_nameserver\n"; exit 0; } if ( !$force && $current_nameserver eq $dnstype ) { print "Already configured.\n"; exit 0; } my $valid_dnstypes = { map { $_ => 1 } qw(bind powerdns disabled) }; unless ( $valid_dnstypes->{$dnstype} ) { print "Unknown nameserver type specified.\nTry $0 --help\n"; exit 1; } my ( $valid, $reason ) = Cpanel::NameServer::Utils::Enabled::valid_nameserver_type($dnstype); unless ($valid) { print "The specified nameserver type is not available for your system:\n"; print $reason, "\n"; exit 1; } if ( !$force && $current_nameserver eq 'powerdns' && $dnstype ne 'powerdns' && -t STDIN ) { print "WARNING: If you switch your nameserver away from PowerDNS, your DNS server will no longer serve DNSSEC records.\n"; print "You must ensure that the following records are not configured on your domains to avoid DNS resolution issues:\n"; print "- An ALIAS record.\n"; print "- A DS record at the domain's registrar.\n\n"; my $msg = qq{Are you sure you want to switch to "$dnstype" [y/n]? }; print $msg; my $count = 0; while ( my $read = ) { $count++; exit if ( $count >= 5 ); exit if ( $read =~ m/^n/i ); last if ( $read =~ m/^y/i ); print $msg; } } # Check if the target service is currently unmanaged # WARNING: GLOBAL VARIABLE if ( !$force && $dnstype =~ m/^(powerdns)$/ ) { my $dir = Cpanel::RPM::Versions::Directory->new( { 'dont_set_legacy' => 1 } ); my $target_state = $dir->fetch( { 'section' => 'target_settings', 'key' => $dnstype } ); if ( $target_state && $target_state =~ m/^(unmanaged|uninstalled)$/ ) { print "WARNING: You are attempting to switch to $dnstype, but it has explicitly been set to $target_state in /var/cpanel/rpm.versions.d/\n"; print "This means its packages have been flagged to be left alone by cPanel. " if ( $target_state eq 'unmanaged' ); pr