Skip to content

Commit 75d2a63

Browse files
author
Thom
committed
Fix BIND file modification (#4202)
1 parent 00c8adf commit 75d2a63

File tree

1 file changed

+22
-17
lines changed

1 file changed

+22
-17
lines changed

server/lib/classes/letsencrypt.inc.php

Lines changed: 22 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -445,10 +445,11 @@ public function request_certificates($data, $server_type = 'apache') {
445445
}
446446
foreach ($queryDomains as $queryDomain) {
447447
$sql = "SELECT * FROM dns_soa WHERE active = 'y' AND origin = '" . $queryDomain . ".'";
448-
if (is_array($app->dbmaster->queryOneRecord($sql))) {
448+
$soa = $app->dbmaster->queryOneRecord($sql);
449+
if (is_array($soa)) {
449450
$zoneExists = true;
450451
$zonedomain = $queryDomain;
451-
$dns_server_id = $sql['server_id'];
452+
$dns_server_id = $soa['server_id'];
452453
break;
453454
}
454455
}
@@ -500,25 +501,29 @@ public function request_certificates($data, $server_type = 'apache') {
500501
$app->log("Let's Encrypt SSL Cert domains: $cli_domain_arg", LOGLEVEL_DEBUG);
501502

502503
if ($use_acme && $global_sites_config['acme_dns_user'] != '' && $dns_server_id == $conf["server_id"]) {
504+
$firstrun = true;
503505
$dns_config = $app->getconf->get_server_config($conf["server_id"], 'dns');
504506
$zonefile = $dns_config['bind_zonefiles_dir'].'/'. "pri." . $zonedomain;
505507
$datalogfound = false;
506-
while ($success = $app->system->_exec($letsencrypt_cmd, $allow_return_codes)) {
507-
while (!$datalogfound) {
508-
$sql = "SELECT data FROM sys_datalog WHERE dbtable = 'dns_rr' AND data LIKE '%_acme-challenge%' AND status = 'pending'";
509-
$datalogs = $app->dbmaster->queryAllRecords($sql);
510-
if (is_array($datalogs)) {
511-
foreach ($datalogs as $datalog) {
512-
$datalog = unserialize($datalog);
513-
$hostname = $datalog['new']['name'];
514-
$data = $datalog['new']['data'];
515-
$record = "\n" . $hostname . "." . $zonedomain . "." . " 3600 TXT \"" . $data . "\"";
516-
file_put_contents($zonefile, $record, FILE_APPEND | LOCK_EX);
517-
}
518-
$app->services->restartService('named', 'restart');
519-
$datalogfound = true;
520-
break;
508+
while (!$datalogfound) {
509+
if ($firstrun == true) {
510+
$success = $app->system->_exec($letsencrypt_cmd, $allow_return_codes);
511+
$firstrun = false;
512+
}
513+
$sql = "SELECT data FROM sys_datalog WHERE dbtable = 'dns_rr' AND data LIKE '%_acme-challenge%' AND status = 'pending'";
514+
$datalogs = $app->dbmaster->queryAllRecords($sql);
515+
if (is_array($datalogs)) {
516+
foreach ($datalogs as $datalog) {
517+
$datalog = unserialize($datalog);
518+
$hostname = $datalog['new']['name'];
519+
$data = $datalog['new']['data'];
520+
$record = "\n" . $hostname . "." . $zonedomain . "." . " 3600 TXT \"" . $data . "\"";
521+
file_put_contents($zonefile, $record, FILE_APPEND | LOCK_EX);
521522
}
523+
$app->services->registerService('bind', 'dns_module', 'restartBind');
524+
$app->services->restartService('bind', 'restart');
525+
$datalogfound = true;
526+
break;
522527
}
523528
}
524529
} else {

0 commit comments

Comments
 (0)