Skip to content

Commit

Permalink
Fixed: 10_named_override_default_rr.pl: Cannot override default www C…
Browse files Browse the repository at this point in the history
…NAME record

Removed: Check for CNAME conflict (Custom DNS records)
Updated: domain_dns.domain_dns_status column length (VARCHAR toTEXT)
Small fixes + CS fixes
  • Loading branch information
nuxwin committed May 11, 2017
1 parent 98f98cd commit 35d8b4b
Show file tree
Hide file tree
Showing 9 changed files with 134 additions and 85 deletions.
5 changes: 5 additions & 0 deletions CHANGELOG
Expand Up @@ -15,6 +15,9 @@ BACKEND
CONFIG
Added: 'CMD_SYSCTL` and 'SYSCTL_CONF_DIR` parameters for sysctl(8)

DATABASE
Updated: domain_dns.domain_dns_status column length (VARCHAR toTEXT)

CRON
Fixed: Cron tasks for traffic accounting are never executed due to wrong command in /etc/cron.d/imscp cron file

Expand All @@ -26,9 +29,11 @@ FRONTEND
Fixed: Allow lower value than `post_max_size' for `memory_limit' (PHP Editor)
Fixed: Integrity constraint violation: 1052 Column 'fname' in where clause is ambiguous when searching user by name
Fixed: Non well formed numeric value encountered in utils_getPhpValueInBytes() function
Removed: Check for CNAME conflict (Custom DNS records)

LISTENERS
Added: 10_backup_storage_outsourcing.pl: Allows storage of customer backup directories elsewhere on the file system
Fixed: 10_named_override_default_rr.pl: Cannot override default www CNAME record
Added: 10_proftpd_auth_unix.pl listener file: Enable unix authentication
Added: 10_proftpd_serverident.pl file: Set custom server identification message (replace 10_proftpd_tuning.pl)
Added: 10_proftpd_tls.pl file: Enforce TLS (replace 10_proftpd_tuning.pl)
Expand Down
4 changes: 2 additions & 2 deletions configs/debian/database/database.sql
Expand Up @@ -82,7 +82,7 @@ INSERT IGNORE INTO `config` (`name`, `value`) VALUES
('PREVENT_EXTERNAL_LOGIN_ADMIN', '1'),
('PREVENT_EXTERNAL_LOGIN_RESELLER', '1'),
('PREVENT_EXTERNAL_LOGIN_CLIENT', '1'),
('DATABASE_REVISION', '252');
('DATABASE_REVISION', '253');

-- --------------------------------------------------------

Expand Down Expand Up @@ -187,7 +187,7 @@ CREATE TABLE IF NOT EXISTS `domain_dns` (
`domain_type` enum('A','AAAA','CERT','CNAME','DNAME','GPOS','KEY','KX','MX','NAPTR','NSAP','NS','NXT','PTR','PX','SIG','SRV','TXT','SPF') collate utf8_unicode_ci NOT NULL DEFAULT 'A',
`domain_text` text collate utf8_unicode_ci NOT NULL,
`owned_by` varchar(255) collate utf8_unicode_ci NOT NULL DEFAULT 'custom_dns_feature',
`domain_dns_status` varchar(255) collate utf8_unicode_ci NOT NULL DEFAULT 'ok',
`domain_dns_status` text collate utf8_unicode_ci NOT NULL,
PRIMARY KEY (`domain_dns_id`),
UNIQUE KEY `domain_id` (`domain_id`,`alias_id`,`domain_dns`(255),`domain_class`,`domain_type`,`domain_text`(255))
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
Expand Down
31 changes: 21 additions & 10 deletions contrib/Listeners/Named/10_named_override_default_rr.pl
Expand Up @@ -37,24 +37,33 @@ package Listener::Named::OverrideDefaultRecords;

return 0 unless @{$data->{'DNS_RECORDS'}};

my $domainIP = iMSCP::Net->getInstance( )->isRoutableAddr( $data->{'DOMAIN_IP'} )
? $data->{'DOMAIN_IP'} : $data->{'BASE_SERVER_PUBLIC_IP'};

for(@{$data->{'DNS_RECORDS'}}) {
my ($name, $class, $type, $rdata) = @{$_};
if ($name =~ /^\Q$data->{'DOMAIN_NAME'}.\E(?:\s+\d+)?/
&& $class eq 'IN'
&& ($type eq 'A' || $type eq 'AAAA')
&& $rdata ne $data->{'DOMAIN_IP'}
&& $rdata ne $domainIP
) {
# Remove default A or AAAA record for $data->{'DOMAIN_NAME'}
$$wrkDbFileContent =~ s/
^(?:\@|\Q$data->{'DOMAIN_NAME'}.\E)(?:\s+\d+)?\s+IN\s+$type\s+\Q$data->{'DOMAIN_IP'}\E\n
${$wrkDbFileContent} =~ s/
^(?:\@|\Q$data->{'DOMAIN_NAME'}.\E)(?:\s+\d+)?\s+IN\s+$type\s+\Q$domainIP\E\n
//gmx;
} elsif ($name =~ /^www\Q.$data->{'DOMAIN_NAME'}.\E(?:\s+\d+)?/

next;
};

if ($name =~ /^www\Q.$data->{'DOMAIN_NAME'}.\E(?:\s+\d+)?/
&& $class eq 'IN'
&& $type eq 'CNAME'
&& $rdata ne $data->{'DOMAIN_NAME'}
) {
# Delete default www CNAME record for $data->{'DOMAIN_NAME'}
$$wrkDbFileContent =~ s/^www\s+IN\s+CNAME\s+(?:\@|\Q$data->{'DOMAIN_NAME'}.\E)\n//gm;
${$wrkDbFileContent} =~ s/
^www(?:\Q.$data->{'DOMAIN_NAME'}.\E)?\s+IN\s+CNAME\s+(?:\@|\Q$data->{'DOMAIN_NAME'}.\E)\n
//gmx;
}
}

Expand All @@ -71,16 +80,18 @@ package Listener::Named::OverrideDefaultRecords;
my ($wrkDbFileContent, $data) = @_;

my $net = iMSCP::Net->getInstance();
my $rrType = $net->getAddrVersion( $data->{'DOMAIN_IP'} ) eq 'ipv4' ? 'A' : 'AAAA';
my $domainIP = $net->isRoutableAddr( $data->{'DOMAIN_IP'} )
? $data->{'DOMAIN_IP'} : $data->{'BASE_SERVER_PUBLIC_IP'};
my $rrType = $net->getAddrVersion( $domainIP ) eq 'ipv4' ? 'A' : 'AAAA';

# Re-add default A or AAAA record for $data->{'DOMAIN_NAME'}
if ($$wrkDbFileContent !~ /^\Q$data->{'DOMAIN_NAME'}.\E(?:\s+\d+)?\s+IN\s+$rrType\s+/m) {
$$wrkDbFileContent .= "$data->{'DOMAIN_NAME'}.\t\tIN\t$rrType\t$data->{'DOMAIN_IP'}\n";
if (${$wrkDbFileContent} !~ /^\Q$data->{'DOMAIN_NAME'}.\E(?:\s+\d+)?\s+IN\s+$rrType\s+/m) {
${$wrkDbFileContent} .= "$data->{'DOMAIN_NAME'}.\t\tIN\t$rrType\t$domainIP\n";
}

# Re-add default www CNAME record for $data->{'DOMAIN_NAME'}
if ($$wrkDbFileContent !~ /^www\Q.$data->{'DOMAIN_NAME'}.\E(?:\s+\d+)?\s+IN\s+CNAME\s+/m) {
$$wrkDbFileContent .= "www.$data->{'DOMAIN_NAME'}.\t\tIN\tCNAME\t$data->{'DOMAIN_NAME'}.\n";
if (${$wrkDbFileContent} !~ /^www\Q.$data->{'DOMAIN_NAME'}.\E(?:\s+\d+)?\s+IN\s+CNAME\s+/m) {
${$wrkDbFileContent} .= "www.$data->{'DOMAIN_NAME'}.\t\tIN\tCNAME\t$data->{'DOMAIN_NAME'}.\n";
}

0;
Expand Down
9 changes: 5 additions & 4 deletions engine/PerlLib/Modules/CustomDNS.pm
Expand Up @@ -226,10 +226,11 @@ sub _getData

$self->{'_data'} = do {
{
ACTION => $action,
DOMAIN_NAME => $self->{'domain_name'},
DOMAIN_IP => $self->{'domain_ip'},
DNS_RECORDS => [ @{$self->{'dns_records'}} ]
ACTION => $action,
BASE_SERVER_PUBLIC_IP => $main::imscpConfig{'BASE_SERVER_PUBLIC_IP'},
DOMAIN_NAME => $self->{'domain_name'},
DOMAIN_IP => $self->{'domain_ip'},
DNS_RECORDS => [ @{$self->{'dns_records'}} ]
}
} unless %{$self->{'_data'}};

Expand Down

0 comments on commit 35d8b4b

Please sign in to comment.