Skip to content

Commit 2462593

Browse files
author
Marius Cramer
committed
Merge branch 'master' into 'master'
Master See merge request !158
2 parents 1302aa5 + 610315b commit 2462593

File tree

6 files changed

+86
-15
lines changed

6 files changed

+86
-15
lines changed

interface/web/dns/dns_dkim_edit.php

100755100644
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@ function onSubmit() {
108108
if (!empty($this->dataRecord['data'])) {
109109
$this->dataRecord['data']='v=DKIM1; t=s; p='.$this->dataRecord['data'];
110110
$this->dataRecord['name']=$this->dataRecord['selector'].'._domainkey.'.$this->dataRecord['name'];
111+
$this->dataRecord['ttl']=60;
111112
}
112113
// Update the serial number and timestamp of the RR record
113114
$soa = $app->db->queryOneRecord("SELECT serial FROM dns_rr WHERE id = ?", $this->id);

interface/web/dns/dns_dmarc_edit.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -227,14 +227,14 @@ function onSubmit() {
227227
$domain_name = rtrim($soa['origin'], '.');
228228
// DMARC requieres at least one active dkim-record...
229229
$sql = "SELECT * FROM dns_rr WHERE name LIKE ? AND type='TXT' AND data like 'v=DKIM1;%' AND active='Y'";
230-
$temp = $app->db->queryAllRecords($sql, '%._domainkey.$domain_name'.'.');
231-
if (!is_array($temp)) {
230+
$temp = $app->db->queryAllRecords($sql, '%._domainkey.'.$domain_name.'.');
231+
if (empty($temp)) {
232232
if (isset($app->tform->errorMessage )) $app->tform->errorMessage = '<br/>' . $app->tform->errorMessage;
233233
$app->tform->errorMessage .= $app->tform->wordbook['dmarc_no_dkim_txt'].$email;
234234
}
235235

236236
// ... and an active spf-record (this breaks the current draft but DMARC is useless if you use DKIM or SPF
237-
$sql = "SELECT * FROM dns_rr WHERE name LIKE ? AND type='TXT' AND (data LIKE 'v=spf1;%' AND active = 'y')";
237+
$sql = "SELECT * FROM dns_rr WHERE name LIKE ? AND type='TXT' AND (data LIKE 'v=spf1%' AND active = 'y')";
238238
$temp = $app->db->queryAllRecords($sql, $domain_name.'.');
239239
// abort if more than 1 active spf-records (backward-compatibility)
240240
if (is_array($temp[1])) {

interface/web/dns/dns_spf_edit.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,7 @@ function onSubmit() {
229229
$this->dataRecord["stamp"] = date('Y-m-d H:i:s');
230230

231231
// always update an existing entry
232-
$check=$app->db->queryOneRecord("SELECT * FROM dns_rr WHERE zone = ? AND type = ? AND data LIKE 'v=spf1%' AND name = ?", $this->dataRecord["zone"], $this->dataRecord["type"], $this->dataRecord['name'].'.');
232+
$check=$app->db->queryOneRecord("SELECT * FROM dns_rr WHERE zone = ? AND type = ? AND data LIKE 'v=spf1%' AND name = ?", $this->dataRecord["zone"], $this->dataRecord["type"], $this->dataRecord['name']);
233233
$this->id = $check['id'];
234234

235235
if (!isset($this->dataRecord['active'])) $this->dataRecord['active'] = 'N';

interface/web/dns/form/dns_txt.tform.php

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,10 @@
170170
)
171171
);
172172

173-
174-
173+
if($_SESSION["s"]["user"]["typ"] == 'admin') {
174+
unset($form["tabs"]['dns']['fields']['data']['validators']);
175+
$form["tabs"]['dns']['fields']['data']['validators'][0]['type'] = 'NOTEMPTY';
176+
$form["tabs"]['dns']['fields']['data']['validators'][0]['errmsg'] = 'data_error_empty';
177+
$form["tabs"]['dns']['fields']['data']['maxlength'] = 512;
178+
}
175179
?>
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
<div class='page-header'>
2+
<h1><tmpl_var name="list_head_txt"></h1>
3+
</div>
4+
<p><tmpl_var name="list_desc_txt"></p>
5+
6+
7+
8+
<div class="form-group">
9+
<label for="data" class="col-sm-3 control-label">{tmpl_var name='data_txt'}</label>
10+
<div class="col-sm-9"><input type="text" name="data" id="data" value="{tmpl_var name='data'}" readonly class="form-control" /></div></div>
11+
<div class="form-group">
12+
<label for="spf_mechanism" class="col-sm-3 control-label">{tmpl_var name='spf_mechanism_txt'}</label>
13+
<div class="col-sm-9"><select name="spf_mechanism" id="spf_mechanism" class="form-control">
14+
{tmpl_var name='spf_mechanism'}
15+
</select></div>
16+
</div>
17+
<div class="form-group">
18+
<label class="col-sm-3 control-label">{tmpl_var name='spf_mx_txt'}</label>
19+
<div class="col-sm-9"><input class="form-control" type="checkbox" value="1" id="spf_mx" name="spf_mx" {tmpl_var name = 'spf_mx_active'} /></div>
20+
</div>
21+
<div class="form-group">
22+
<label class="col-sm-3 control-label">{tmpl_var name='spf_a_txt'}</label>
23+
<div class="col-sm-9"><input class="form-control" type="checkbox" value="1" id="spf_a" name="spf_a" {tmpl_var name = 'spf_a_active'} /></div>
24+
</div>
25+
<div class="form-group">
26+
<label for="spf_ip" class="col-sm-3 control-label">{tmpl_var name='spf_ip_txt'}</label>
27+
<div class="col-sm-6"><input type="text" name="spf_ip" id="spf_ip" value="{tmpl_var name='spf_ip'}" class="form-control" /></div><div class="col-sm-3 input-sm">
28+
{tmpl_var name='spf_ip_note_txt'}
29+
</div></div>
30+
<div class="form-group">
31+
<label for="spf_hostname" class="col-sm-3 control-label">{tmpl_var name='spf_hostname_txt'}</label>
32+
<div class="col-sm-6"><input type="text" name="spf_hostname" id="spf_hostname" value="{tmpl_var name='spf_hostname'}" class="form-control" /></div><div class="col-sm-3 input-sm">
33+
{tmpl_var name='spf_hostname_note_txt'}
34+
</div></div>
35+
<div class="form-group">
36+
<label for="spf_domain" class="col-sm-3 control-label">{tmpl_var name='spf_domain_txt'}</label>
37+
<div class="col-sm-6"><input type="text" name="spf_domain" id="spf_domain" value="{tmpl_var name='spf_domain'}" class="form-control" /></div><div class="col-sm-3 input-sm">
38+
{tmpl_var name='spf_domain_note_txt'}
39+
</div></div>
40+
<div class="form-group">
41+
<label for="ttl" class="col-sm-3 control-label">{tmpl_var name='ttl_txt'}</label>
42+
<div class="col-sm-9"><input type="text" name="ttl" id="ttl" value="{tmpl_var name='ttl'}" class="form-control" /></div></div>
43+
44+
<div class="form-group">
45+
<label class="col-sm-3 control-label">{tmpl_var name='active_txt'}</label>
46+
<div class="col-sm-9"><input class="form-control" type="checkbox" value="1" id="active" name="active" {tmpl_var name='active'} /></div>
47+
</div>
48+
49+
50+
<input type="hidden" name="id" value="{tmpl_var name='id'}">
51+
<input type="hidden" name="zone" value="{tmpl_var name='zone'}" id="zone">
52+
<input type="hidden" name="type" value="{tmpl_var name='type'}">
53+
<input type="hidden" name="name" value="{tmpl_var name='name'}">
54+
</div>
55+
56+
<div class="clear"><div class="right">
57+
<button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="dns/dns_spf_edit.php">{tmpl_var name='btn_save_txt'}</button>
58+
<button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='zone'}">{tmpl_var name='btn_cancel_txt'}</button>
59+
</div></div>
60+

interface/web/mail/mail_domain_edit.php

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -296,6 +296,12 @@ function onAfterInsert() {
296296
}
297297
} // endif spamfilter policy
298298

299+
//* create dns-record with dkim-values if the zone exists
300+
if ( $this->dataRecord['active'] == 'y' && $this->dataRecord['dkim'] == 'y' ) {
301+
$soa = $app->db->queryOneRecord("SELECT id AS zone, sys_userid, sys_groupid, sys_perm_user, sys_perm_group, sys_perm_other, server_id, ttl, serial FROM dns_soa WHERE active = 'Y' AND origin = ?", $this->dataRecord['domain'].'.');
302+
if ( isset($soa) && !empty($soa) ) $this->update_dns($this->dataRecord, $soa);
303+
}
304+
299305
}
300306

301307
function onBeforeUpdate() {
@@ -407,17 +413,17 @@ function onAfterUpdate() {
407413
$selector = @($this->dataRecord['dkim_selector'] != $this->oldDataRecord['dkim_selector']) ? true : false;
408414
$dkim_private = @($this->dataRecord['dkim_private'] != $this->oldDataRecord['dkim_private']) ? true : false;
409415

410-
$soa = $app->db->queryOneRecord("SELECT id AS zone, sys_userid, sys_groupid, sys_perm_user, sys_perm_group, sys_perm_other, server_id, ttl, serial FROM dns_soa WHERE active = 'Y' AND origin = ?", $this->dataRecord['domain']);
416+
$soa = $app->db->queryOneRecord("SELECT id AS zone, sys_userid, sys_groupid, sys_perm_user, sys_perm_group, sys_perm_other, server_id, ttl, serial FROM dns_soa WHERE active = 'Y' AND origin = ?", $this->dataRecord['domain'].'.');
411417

412418
if ( ($selector || $dkim_private || $dkim_active) && $dkim_active )
413419
//* create a new record only if the dns-zone exists
414420
if ( isset($soa) && !empty($soa) ) {
415421
$this->update_dns($this->dataRecord, $soa);
416422
}
417-
elseif ( !isset($this->dataRecord['dkim']) ) {
423+
if (! $dkim_active) {
418424
// updated existing dmarc-record to policy 'none'
419-
$sql = "SELECT * from dns_rr WHERE name ='_dmarc.?.' AND data LIKE 'v=DMARC1%' AND ?";
420-
$rec = $app->db->queryOneRecord($sql, $this->dataRecord['domain'], $app->tform->getAuthSQL('r'));
425+
$sql = "SELECT * from dns_rr WHERE name = ? AND data LIKE 'v=DMARC1%' AND ?";
426+
$rec = $app->db->queryOneRecord($sql, '_dmarc.'.$this->dataRecord['domain'].'.', $app->tform->getAuthSQL('r'));
421427
if (is_array($rec))
422428
if (strpos($rec['data'], 'p=none=') === false) {
423429
$rec['data'] = str_replace(array('quarantine', 'reject'), 'none', $rec['data']);
@@ -435,15 +441,15 @@ private function update_dns($dataRecord, $new_rr) {
435441
global $app, $conf;
436442

437443
// purge old rr-record(s)
438-
$sql = "SELECT * FROM dns_rr WHERE name LIKE '%._domainkey.?.' AND data LIKE 'v=DKIM1%' AND ? ORDER BY serial DESC";
439-
$rec = $app->db->queryAllRecords($sql, $dataRecord['domain'], $app->tform->getAuthSQL('r'));
444+
$sql = "SELECT * FROM dns_rr WHERE name LIKE ? AND data LIKE 'v=DKIM1%' AND ? ORDER BY serial DESC";
445+
$rec = $app->db->queryAllRecords($sql, '%._domainkey.'.$dataRecord['domain'].'.', $app->tform->getAuthSQL('r'));
440446
if (is_array($rec[1])) {
441447
for ($i=1; $i < count($rec); ++$i)
442448
$app->db->datalogDelete('dns_rr', 'id', $rec[$i]['id']);
443449
}
444450
// also delete a dsn-records with same selector
445-
$sql = "SELECT * from dns_rr WHERE name ='?._domainkey.?.' AND data LIKE 'v=DKIM1%' AND ?";
446-
$rec = $app->db->queryAllRecords($sql, $dataRecord['dkim_selector'], $dataRecord['domain'], $app->tform->getAuthSQL('r'));
451+
$sql = "SELECT * from dns_rr WHERE name ? AND data LIKE 'v=DKIM1%' AND ?";
452+
$rec = $app->db->queryAllRecords($sql, '.._domainkey.'.$dataRecord['dkim_selector'].'.', $dataRecord['domain'], $app->tform->getAuthSQL('r'));
447453
if (is_array($rec))
448454
foreach ($rec as $del)
449455
$app->db->datalogDelete('dns_rr', 'id', $del['id']);
@@ -456,7 +462,7 @@ private function update_dns($dataRecord, $new_rr) {
456462
$new_rr['stamp'] = date('Y-m-d H:i:s');
457463
$new_rr['serial'] = $app->validate_dns->increase_serial($new_rr['serial']);
458464
$app->db->datalogInsert('dns_rr', $new_rr, 'id', $new_rr['zone']);
459-
$zone = $app->db->queryOneRecord("SELECT id, serial FROM dns_soa WHERE active = 'Y' AND id = ".$app->functions->intval($new_rr['zone']));
465+
$zone = $app->db->queryOneRecord("SELECT id, serial FROM dns_soa WHERE active = 'Y' AND id = ?", $new_rr['zone']);
460466
$new_serial = $app->validate_dns->increase_serial($zone['serial']);
461467
$app->db->datalogUpdate('dns_soa', "serial = '".$new_serial."'", 'id', $zone['id']);
462468
}

0 commit comments

Comments
 (0)