Skip to content

Commit 86f8f38

Browse files
author
Thom Pol
committed
Add client limits for SMTP relay settings (#6088)
1 parent 07dcf84 commit 86f8f38

File tree

8 files changed

+81
-40
lines changed

8 files changed

+81
-40
lines changed

interface/web/client/form/client.tform.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -938,6 +938,13 @@
938938
'rows' => '',
939939
'cols' => ''
940940
),
941+
'limit_relayhost' => array (
942+
'datatype' => 'VARCHAR',
943+
'formtype' => 'CHECKBOX',
944+
'default' => 'n',
945+
'valuelimit' => 'client:limit_relayhost',
946+
'value' => array(0 => 'n', 1 => 'y')
947+
),
941948
'default_xmppserver' => array (
942949
'datatype' => 'INTEGER',
943950
'formtype' => 'SELECT',

interface/web/client/form/client_template.tform.php

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -353,7 +353,15 @@
353353
'maxlength' => '10',
354354
'rows' => '',
355355
'cols' => ''
356-
),/*
356+
),
357+
'limit_relayhost' => array (
358+
'datatype' => 'VARCHAR',
359+
'formtype' => 'CHECKBOX',
360+
'default' => 'n',
361+
'valuelimit' => 'client:limit_relayhost',
362+
'value' => array(0 => 'n', 1 => 'y')
363+
),
364+
/*
357365
'default_xmppserver' => array (
358366
'datatype' => 'INTEGER',
359367
'formtype' => 'SELECT',

interface/web/client/form/reseller.tform.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -936,6 +936,12 @@
936936
'rows' => '',
937937
'cols' => ''
938938
),
939+
'limit_relayhost' => array (
940+
'datatype' => 'VARCHAR',
941+
'formtype' => 'CHECKBOX',
942+
'default' => 'n',
943+
'value' => array(0 => 'n', 1 => 'y')
944+
),
939945
'default_xmppserver' => array (
940946
'datatype' => 'INTEGER',
941947
'formtype' => 'SELECT',

interface/web/client/templates/client_edit_limits.htm

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,12 @@ <h4 class="panel-title">
235235
<label for="limit_spamfilter_policy" class="col-sm-3 control-label">{tmpl_var name='limit_spamfilter_policy_txt'}</label>
236236
<div class="col-sm-9"><input type="text" name="limit_spamfilter_policy" id="limit_spamfilter_policy" value="{tmpl_var name='limit_spamfilter_policy'}" class="form-control" /></div>
237237
</div>
238+
<div class="form-group">
239+
<label class="col-sm-3 control-label">{tmpl_var name='limit_relayhost_txt'}</label>
240+
<div class="col-sm-9">
241+
{tmpl_var name='limit_relayhost'}
242+
</div>
243+
</div>
238244
</div>
239245
</div>
240246
</div>

interface/web/client/templates/client_template_edit_limits.htm

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,12 @@ <h4 class="panel-title">
192192
<label for="limit_spamfilter_policy" class="col-sm-3 control-label">{tmpl_var name='limit_spamfilter_policy_txt'}</label>
193193
<div class="col-sm-9"><input type="text" name="limit_spamfilter_policy" id="limit_spamfilter_policy" value="{tmpl_var name='limit_spamfilter_policy'}" class="form-control" /></div>
194194
</div>
195+
<div class="form-group">
196+
<label class="col-sm-3 control-label">{tmpl_var name='limit_relayhost_txt'}</label>
197+
<div class="col-sm-9">
198+
{tmpl_var name='limit_relayhost'}
199+
</div>
200+
</div>
195201
</div>
196202
</div>
197203
</div>

interface/web/client/templates/reseller_edit_limits.htm

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,12 @@ <h4 class="panel-title">
236236
<label for="limit_spamfilter_policy" class="col-sm-3 control-label">{tmpl_var name='limit_spamfilter_policy_txt'}</label>
237237
<div class="col-sm-9"><input type="text" name="limit_spamfilter_policy" id="limit_spamfilter_policy" value="{tmpl_var name='limit_spamfilter_policy'}" class="form-control" /></div>
238238
</div>
239+
<div class="form-group">
240+
<label class="col-sm-3 control-label">{tmpl_var name='limit_relayhost_txt'}</label>
241+
<div class="col-sm-9">
242+
{tmpl_var name='limit_relayhost'}
243+
</div>
244+
</div>
239245
</div>
240246
</div>
241247
</div>

interface/web/mail/mail_domain_edit.php

Lines changed: 27 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -216,23 +216,25 @@ function onShowEnd() {
216216
}
217217

218218
// load relayhost-values
219-
$sql = "SELECT relay_host, relay_user, relay_pass FROM mail_domain WHERE domain_id = ?";
220-
$rec = $app->db->queryOneRecord($sql, $app->functions->intval($_GET['id']));
221-
$app->tpl->setVar('relay_host', $rec['relay_host'], true);
222-
$app->tpl->setVar('relay_user', $rec['relay_user'], true);
223-
$app->tpl->setVar('relay_pass', $rec['relay_pass'], true);
219+
if ($client["limit_relayhost"] == 'y') {
220+
$sql = "SELECT relay_host, relay_user, relay_pass FROM mail_domain WHERE domain_id = ?";
221+
$rec = $app->db->queryOneRecord($sql, $app->functions->intval($_GET['id']));
222+
$app->tpl->setVar('relay_host', $rec['relay_host'], true);
223+
$app->tpl->setVar('relay_user', $rec['relay_user'], true);
224+
$app->tpl->setVar('relay_pass', $rec['relay_pass'], true);
225+
}
224226

225227
// load dkim-values
226228
$sql = "SELECT domain, dkim_private, dkim_public, dkim_selector FROM mail_domain WHERE domain_id = ?";
227229
$rec = $app->db->queryOneRecord($sql, $app->functions->intval($_GET['id']));
228230
$dns_key = str_replace(array('-----BEGIN PUBLIC KEY-----','-----END PUBLIC KEY-----',"\r","\n"),'',$rec['dkim_public']);
229-
231+
230232
$keyparts = str_split('v=DKIM1; t=s; p=' . $dns_key, 200);
231233
array_walk($keyparts, function(&$value, $key) { $value = '"'.$value.'"'; } );
232234
$dkim_txt = implode('', $keyparts);
233235

234236
$dns_record = $rec['dkim_selector'] . '._domainkey.' . $rec['domain'] . '. 3600 IN TXT '.$dkim_txt;
235-
237+
236238
$app->tpl->setVar('dkim_selector', $rec['dkim_selector'], true);
237239
$app->tpl->setVar('dkim_private', $rec['dkim_private'], true);
238240
$app->tpl->setVar('dkim_public', $rec['dkim_public'], true);
@@ -263,7 +265,7 @@ function onSubmit() {
263265
if($_SESSION["s"]["user"]["typ"] != 'admin') {
264266
// Get the limits of the client
265267
$client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]);
266-
$client = $app->db->queryOneRecord("SELECT client.mail_servers, limit_maildomain, default_mailserver FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
268+
$client = $app->db->queryOneRecord("SELECT client.mail_servers, limit_maildomain, default_mailserver, limit_relayhost FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
267269
// When the record is updated
268270
if($this->id > 0) {
269271
// restore the server ID if the user is not admin and record is edited
@@ -296,7 +298,7 @@ function onSubmit() {
296298
$this->dataRecord["domain"] = $app->functions->idn_encode($this->dataRecord["domain"]);
297299
$this->dataRecord["domain"] = strtolower($this->dataRecord["domain"]);
298300
}
299-
301+
300302
//* server_id must be > 0
301303
if(isset($this->dataRecord["server_id"]) && $this->dataRecord["server_id"] < 1) $app->tform->errorMessage .= $app->lng("server_id_0_error_txt");
302304

@@ -305,7 +307,7 @@ function onSubmit() {
305307

306308
function onAfterInsert() {
307309
global $app, $conf;
308-
310+
309311
$domain = $app->functions->idn_encode($this->dataRecord["domain"]);
310312

311313
// Spamfilter policy
@@ -319,10 +321,10 @@ function onAfterInsert() {
319321
$tmp_domain = $app->db->queryOneRecord("SELECT sys_groupid FROM mail_domain WHERE domain_id = ?", $this->id);
320322
// We create a new record
321323
$insert_data = array(
322-
"sys_userid" => $_SESSION["s"]["user"]["userid"],
324+
"sys_userid" => $_SESSION["s"]["user"]["userid"],
323325
"sys_groupid" => $tmp_domain["sys_groupid"],
324-
"sys_perm_user" => 'riud',
325-
"sys_perm_group" => 'riud',
326+
"sys_perm_user" => 'riud',
327+
"sys_perm_group" => 'riud',
326328
"sys_perm_other" => '',
327329
"server_id" => $this->dataRecord["server_id"],
328330
"priority" => 5,
@@ -350,7 +352,7 @@ function onAfterInsert() {
350352

351353
function onBeforeUpdate() {
352354
global $app, $conf;
353-
355+
354356
$domain = $app->functions->idn_encode($this->dataRecord["domain"]);
355357

356358
//* Check if the server has been changed
@@ -381,7 +383,7 @@ function onAfterUpdate() {
381383
global $app, $conf;
382384

383385
$domain = $app->functions->idn_encode($this->dataRecord["domain"]);
384-
386+
385387
// Spamfilter policy
386388
$policy_id = $app->functions->intval($this->dataRecord["policy"]);
387389
$tmp_user = $app->db->queryOneRecord("SELECT id FROM spamfilter_users WHERE email = ?", '@' . $domain);
@@ -393,10 +395,10 @@ function onAfterUpdate() {
393395
$tmp_domain = $app->db->queryOneRecord("SELECT sys_groupid FROM mail_domain WHERE domain_id = ?", $this->id);
394396
// We create a new record
395397
$insert_data = array(
396-
"sys_userid" => $_SESSION["s"]["user"]["userid"],
398+
"sys_userid" => $_SESSION["s"]["user"]["userid"],
397399
"sys_groupid" => $tmp_domain["sys_groupid"],
398-
"sys_perm_user" => 'riud',
399-
"sys_perm_group" => 'riud',
400+
"sys_perm_user" => 'riud',
401+
"sys_perm_group" => 'riud',
400402
"sys_perm_other" => '',
401403
"server_id" => $this->dataRecord["server_id"],
402404
"priority" => 5,
@@ -447,7 +449,7 @@ function onAfterUpdate() {
447449

448450
//* Update the mailinglist
449451
$app->db->query("UPDATE mail_mailinglist SET sys_userid = ?, sys_groupid = ? WHERE domain = ?", $client_user_id, $sys_groupid, $this->oldDataRecord['domain']);
450-
452+
451453
//* Update fetchmail accounts
452454
$fetchmail = $app->db->queryAllRecords("SELECT * FROM mail_get WHERE destination like ?", '%@' . $this->oldDataRecord['domain']);
453455
if(is_array($fetchmail)) {
@@ -456,7 +458,7 @@ function onAfterUpdate() {
456458
$app->db->datalogUpdate('mail_get', array("destination" => $destination, "sys_userid" => $client_user_id, "sys_groupid" => $sys_groupid), 'mailget_id', $rec['mailget_id']);
457459
}
458460
}
459-
461+
460462
//* Delete the old spamfilter record
461463
$tmp = $app->db->queryOneRecord("SELECT id FROM spamfilter_users WHERE email = ?", '@' . $this->oldDataRecord["domain"]);
462464
$app->db->datalogDelete('spamfilter_users', 'id', $tmp["id"]);
@@ -467,10 +469,10 @@ function onAfterUpdate() {
467469
//* update dns-record when the dkim record was changed
468470
// NOTE: only if the domain-name was not changed
469471
if ( $this->dataRecord['active'] == 'y' && $domain == $this->oldDataRecord['domain'] ) {
470-
$dkim_active = @($this->dataRecord['dkim'] == 'y') ? true : false;
472+
$dkim_active = @($this->dataRecord['dkim'] == 'y') ? true : false;
471473
$selector = @($this->dataRecord['dkim_selector'] != $this->oldDataRecord['dkim_selector']) ? true : false;
472474
$dkim_private = @($this->dataRecord['dkim_private'] != $this->oldDataRecord['dkim_private']) ? true : false;
473-
475+
474476
$soaDomain = $domain.'.';
475477
while ((!isset($soa) && (substr_count($soaDomain,'.') > 1))) {
476478
$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 = ?", $soaDomain);
@@ -493,7 +495,7 @@ function onAfterUpdate() {
493495
$soa_id = $app->functions->intval($soa['zone']);
494496
$serial = $app->validate_dns->increase_serial($soa["serial"]);
495497
$app->db->datalogUpdate('dns_soa', array("serial" => $serial), 'id', $soa_id);
496-
}
498+
}
497499
}
498500
}
499501

@@ -510,8 +512,8 @@ private function update_dns($dataRecord, $new_rr) {
510512
$app->db->datalogDelete('dns_rr', 'id', $r['id']);
511513
}
512514
}
513-
514-
// also delete a dsn-records with same selector
515+
516+
// also delete a dsn-records with same selector
515517
$sql = "SELECT * from dns_rr WHERE name ? AND data LIKE 'v=DKIM1%' AND " . $app->tform->getAuthSQL('r');
516518
$rec = $app->db->queryAllRecords($sql, '._domainkey.'.$dataRecord['dkim_selector'].'.', $dataRecord['domain']);
517519
if (is_array($rec))

interface/web/mail/templates/mail_domain_edit.htm

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -75,24 +75,26 @@
7575
{tmpl_var name='policy'}
7676
</select></div>
7777
</div>
78-
<div class="form-group">
78+
<tmpl_if name="limit_relayhost" op="==" value="y">
79+
<div class="form-group">
7980
<label for="relay_host" class="col-sm-3 control-label">{tmpl_var name='relayhost_txt'}</label>
8081
<div class="col-sm-9">
81-
<input type="text" name="relay_host" id="relay_host" value="{tmpl_var name='relay_host'}" class="form-control" />
82+
<input type="text" name="relay_host" id="relay_host" value="{tmpl_var name='relay_host'}" class="form-control" />
8283
</div>
83-
</div>
84-
<div class="form-group">
84+
</div>
85+
<div class="form-group">
8586
<label for="relay_user" class="col-sm-3 control-label">{tmpl_var name='relayhost_user_txt'}</label>
8687
<div class="col-sm-9">
87-
<input type="text" name="relay_user" id="relay_user" value="{tmpl_var name='relay_user'}" class="form-control" />
88+
<input type="text" name="relay_user" id="relay_user" value="{tmpl_var name='relay_user'}" class="form-control" />
8889
</div>
89-
</div>
90-
<div class="form-group">
90+
</div>
91+
<div class="form-group">
9192
<label for="relay_pass" class="col-sm-3 control-label">{tmpl_var name='relayhost_password_txt'}</label>
9293
<div class="col-sm-9">
93-
<input type="text" name="relay_pass" id="relay_pass" value="{tmpl_var name='relay_pass'}" class="form-control" />
94+
<input type="text" name="relay_pass" id="relay_pass" value="{tmpl_var name='relay_pass'}" class="form-control" />
9495
</div>
95-
</div>
96+
</div>
97+
</tmpl_if>
9698
<div class="form-group">
9799
<label class="col-sm-3 control-label">{tmpl_var name='active_txt'}</label>
98100
<div class="col-sm-9">
@@ -131,7 +133,7 @@
131133

132134
</div>
133135

134-
136+
135137

136138
<input type="hidden" name="id" value="{tmpl_var name='id'}">
137139
<input type="hidden" name="type" value="local">
@@ -150,17 +152,15 @@
150152
domain_id : domain_id,
151153
dkim_public : dkim_public,
152154
dkim_selector : dkim_selector,
153-
type : "create_dkim"
155+
type : "create_dkim"
154156
}, function(data) {
155157
var dkim_txt = 'v=DKIM1; t=s; p=' + data['dns_record'].replace(/(\r\n|\n|\r)/gm, "");
156158
var dns=data['dkim_selector'] + '._domainkey.' + data['domain'] + '. 3600 IN TXT ' + dkim_txt.match(new RegExp('.{1,' + '200' + '}', 'g')).map(chunk => '"' + chunk + '"').join('');
157-
159+
158160
$("#dkim_selector").val(data.dkim_selector);
159161
$("#dkim_public").val(data.dkim_public);
160162
$("#dkim_private").val(data.dkim_private);
161163
$("#dns_record").val(dns);
162164
});
163165
};
164166
</script>
165-
166-

0 commit comments

Comments
 (0)