public
nobgit
read
NobMail
Based on mailcow: dockerized
Languages
Repository composition by tracked source files.
PHP
49%
JavaScript
35%
HTML
9%
CSS
4%
Shell
2%
Python
1%
Lua
0%
Perl
0%
Ruby
0%
SCSS
0%
Create file
Wiki Documentation
Clone
https://nobgit.com/orgs/nobgit/nobmail.git
ssh://[email protected]:2222/orgs/nobgit/nobmail.git
Commit
[Web] Minor fixes
04bd2166
data/web/edit.php | 12 ++++++------
data/web/inc/functions.inc.php | 11 ++++-------
data/web/user.php | 39 ++++++++++++++++++---------------------
3 files changed, 28 insertions(+), 34 deletions(-)
Diff
diff --cc data/web/edit.php
index e3b863c5,141f5100..6087a7c6
--- a/data/web/edit.php
+++ b/data/web/edit.php
@@@ -256,216 -256,184 +256,216 @@@ if (isset($_SESSION['mailcow_cc_role'])
$rlyhosts = relayhost('get');
if (!empty($result)) {
?>
- <h4><?=$lang['edit']['domain'];?></h4>
- <form data-id="editdomain" class="form-horizontal" role="form" method="post">
- <input type="hidden" value="0" name="active">
- <input type="hidden" value="0" name="backupmx">
- <input type="hidden" value="0" name="gal">
- <input type="hidden" value="0" name="relay_all_recipients">
- <input type="hidden" value="0" name="relay_unknown_only">
- <div class="form-group" data-acl="<?=$_SESSION['acl']['domain_desc'];?>">
- <label class="control-label col-sm-2" for="description"><?=$lang['edit']['description'];?></label>
- <div class="col-sm-10">
- <input type="text" class="form-control" name="description" value="<?=htmlspecialchars($result['description']);?>">
+ <ul class="nav nav-tabs">
+ <li class="active"><a data-toggle="tab" href="#dedit"><?=$lang['edit']['domain'];?></a></li>
+ <li><a data-toggle="tab" href="#dratelimit"><?=$lang['edit']['ratelimit'];?></a></li>
+ <li><a data-toggle="tab" href="#dspamfilter"><?=$lang['edit']['spam_filter'];?></a></li>
+ </ul>
+ <hr>
+ <div class="tab-content">
+ <div id="dedit" class="tab-pane in active">
+ <form data-id="editdomain" class="form-horizontal" role="form" method="post">
+ <input type="hidden" value="0" name="active">
+ <input type="hidden" value="0" name="backupmx">
+ <input type="hidden" value="0" name="gal">
+ <input type="hidden" value="0" name="xmpp">
+ <input type="hidden" value="0" name="relay_all_recipients">
+ <input type="hidden" value="0" name="relay_unknown_only">
+ <div class="form-group" data-acl="<?=$_SESSION['acl']['domain_desc'];?>">
+ <label class="control-label col-sm-2" for="description"><?=$lang['edit']['description'];?></label>
+ <div class="col-sm-10">
+ <input type="text" class="form-control" name="description" value="<?=htmlspecialchars($result['description']);?>">
+ </div>
</div>
- </div>
- <?php
- if ($_SESSION['mailcow_cc_role'] == "admin") {
- ?>
- <div class="form-group">
- <label class="control-label col-sm-2" for="aliases"><?=$lang['edit']['max_aliases'];?></label>
- <div class="col-sm-10">
- <input type="number" class="form-control" name="aliases" value="<?=intval($result['max_num_aliases_for_domain']);?>">
+ <?php
+ if ($_SESSION['mailcow_cc_role'] == "admin") {
+ ?>
+ <div class="form-group">
+ <label class="control-label col-sm-2" for="aliases"><?=$lang['edit']['max_aliases'];?></label>
+ <div class="col-sm-10">
+ <input type="number" class="form-control" name="aliases" value="<?=intval($result['max_num_aliases_for_domain']);?>">
+ </div>
</div>
- </div>
- <div class="form-group">
- <label class="control-label col-sm-2" for="mailboxes"><?=$lang['edit']['max_mailboxes'];?></label>
- <div class="col-sm-10">
- <input type="number" class="form-control" name="mailboxes" value="<?=intval($result['max_num_mboxes_for_domain']);?>">
+ <div class="form-group">
+ <label class="control-label col-sm-2" for="mailboxes"><?=$lang['edit']['max_mailboxes'];?></label>
+ <div class="col-sm-10">
+ <input type="number" class="form-control" name="mailboxes" value="<?=intval($result['max_num_mboxes_for_domain']);?>">
+ </div>
</div>
- </div>
- <div class="form-group">
- <label class="control-label col-sm-2" for="defquota"><?=$lang['edit']['mailbox_quota_def'];?></label>
+ <div class="form-group">
+ <label class="control-label col-sm-2" for="defquota"><?=$lang['edit']['mailbox_quota_def'];?></label>
+ <div class="col-sm-10">
+ <input type="number" class="form-control" name="defquota" value="<?=intval($result['def_quota_for_mbox'] / 1048576);?>">
+ </div>
+ </div>
+ <div class="form-group">
+ <label class="control-label col-sm-2" for="maxquota"><?=$lang['edit']['max_quota'];?></label>
<div class="col-sm-10">
- <input type="number" class="form-control" name="defquota" value="<?=intval($result['def_quota_for_mbox'] / 1048576);?>">
+ <input type="number" class="form-control" name="maxquota" value="<?=intval($result['max_quota_for_mbox'] / 1048576);?>">
</div>
- </div>
- <div class="form-group">
- <label class="control-label col-sm-2" for="maxquota"><?=$lang['edit']['max_quota'];?></label>
- <div class="col-sm-10">
- <input type="number" class="form-control" name="maxquota" value="<?=intval($result['max_quota_for_mbox'] / 1048576);?>">
</div>
- </div>
- <div class="form-group">
- <label class="control-label col-sm-2" for="quota"><?=$lang['edit']['domain_quota'];?></label>
- <div class="col-sm-10">
- <input type="number" class="form-control" name="quota" value="<?=intval($result['max_quota_for_domain'] / 1048576);?>">
+ <div class="form-group">
+ <label class="control-label col-sm-2" for="quota"><?=$lang['edit']['domain_quota'];?></label>
+ <div class="col-sm-10">
+ <input type="number" class="form-control" name="quota" value="<?=intval($result['max_quota_for_domain'] / 1048576);?>">
+ </div>
</div>
- </div>
- <div class="form-group">
- <label class="control-label col-sm-2" for="quota"><?=$lang['edit']['relayhost'];?></label>
- <div class="col-sm-10">
- <select data-live-search="true" name="relayhost" class="form-control">
- <?php
- foreach ($rlyhosts as $rlyhost) {
- ?>
- <option value="<?=$rlyhost['id'];?>" <?=($result['relayhost'] == $rlyhost['id']) ? 'selected' : null;?>>ID <?=$rlyhost['id'];?>: <?=$rlyhost['hostname'];?> (<?=$rlyhost['username'];?>)</option>
- <?php
- }
- ?>
- <option value="" <?=($result['relayhost'] == "0") ? 'selected' : null;?>>None</option>
- </select>
+ <div class="form-group">
+ <label class="control-label col-sm-2" for="quota"><?=$lang['edit']['relayhost'];?></label>
+ <div class="col-sm-10">
+ <select data-live-search="true" name="relayhost" class="form-control">
+ <?php
+ foreach ($rlyhosts as $rlyhost) {
+ ?>
+ <option value="<?=$rlyhost['id'];?>" <?=($result['relayhost'] == $rlyhost['id']) ? 'selected' : null;?>>ID <?=$rlyhost['id'];?>: <?=$rlyhost['hostname'];?> (<?=$rlyhost['username'];?>)</option>
+ <?php
+ }
+ ?>
+ <option value="" <?=($result['relayhost'] == "0") ? 'selected' : null;?>>None</option>
+ </select>
+ </div>
</div>
- </div>
- <div class="form-group">
- <label class="control-label col-sm-2"><?=$lang['edit']['backup_mx_options'];?></label>
- <div class="col-sm-10">
- <div class="checkbox">
- <label><input type="checkbox" value="1" name="backupmx" <?=(isset($result['backupmx']) && $result['backupmx']=="1") ? "checked" : null;?>> <?=$lang['edit']['relay_domain'];?></label>
- <br>
- <label><input type="checkbox" value="1" name="relay_all_recipients" <?=(isset($result['relay_all_recipients']) && $result['relay_all_recipients']=="1") ? "checked" : null;?>> <?=$lang['edit']['relay_all'];?></label>
- <p><?=$lang['edit']['relay_all_info'];?></p>
- <label><input type="checkbox" value="1" name="relay_unknown_only" <?=(isset($result['relay_unknown_only']) && $result['relay_unknown_only']=="1") ? "checked" : null;?>> <?=$lang['edit']['relay_unknown_only'];?></label>
- <br>
- <p><?=$lang['edit']['relay_transport_info'];?></p>
- <hr style="margin:25px 0px 0px 0px">
+ <div class="form-group">
+ <label class="control-label col-sm-2"><?=$lang['edit']['backup_mx_options'];?></label>
+ <div class="col-sm-10">
+ <div class="checkbox">
+ <label><input type="checkbox" value="1" name="backupmx" <?=(isset($result['backupmx']) && $result['backupmx']=="1") ? "checked" : null;?>> <?=$lang['edit']['relay_domain'];?></label>
+ <br>
+ <label><input type="checkbox" value="1" name="relay_all_recipients" <?=(isset($result['relay_all_recipients']) && $result['relay_all_recipients']=="1") ? "checked" : null;?>> <?=$lang['edit']['relay_all'];?></label>
+ <p><?=$lang['edit']['relay_all_info'];?></p>
+ <label><input type="checkbox" value="1" name="relay_unknown_only" <?=(isset($result['relay_unknown_only']) && $result['relay_unknown_only']=="1") ? "checked" : null;?>> <?=$lang['edit']['relay_unknown_only'];?></label>
+ <br>
+ <p><?=$lang['edit']['relay_transport_info'];?></p>
+ <hr style="margin:25px 0px 0px 0px">
+ </div>
</div>
</div>
- </div>
- <?php
- }
- ?>
- <div class="form-group">
- <div class="col-sm-offset-2 col-sm-10">
- <div class="checkbox">
- <label><input type="checkbox" value="1" name="gal" <?=(isset($result['gal']) && $result['gal']=="1") ? "checked" : null;?>> <?=$lang['edit']['gal'];?></label>
- <small class="help-block"><?=$lang['edit']['gal_info'];?></small>
+ <?php
+ }
+ ?>
+ <div class="form-group">
+ <div class="col-sm-offset-2 col-sm-10">
+ <div class="checkbox">
+ <label><input type="checkbox" value="1" name="gal" <?=(isset($result['gal']) && $result['gal']=="1") ? "checked" : null;?>> <?=$lang['edit']['gal'];?></label>
+ <small class="help-block"><?=$lang['edit']['gal_info'];?></small>
+ </div>
</div>
</div>
- </div>
- <div class="form-group">
- <div class="col-sm-offset-2 col-sm-10">
- <div class="checkbox">
- <label><input type="checkbox" value="1" name="active" <?=(isset($result['active']) && $result['active']=="1") ? "checked" : null;?> <?=($_SESSION['mailcow_cc_role'] == "admin") ? null : "disabled";?>> <?=$lang['edit']['active'];?></label>
+ <hr>
+ <div class="form-group" data-acl="<?=$_SESSION['acl']['xmpp_mailbox_access'];?>">
+ <div class="col-sm-offset-2 col-sm-10">
+ <div class="checkbox">
+ <label><input type="checkbox" value="1" name="xmpp" <?=(isset($result['xmpp']) && $result['xmpp']=="1") ? "checked" : null;?>> <?=$lang['edit']['xmpp'];?></label>
+ <small class="help-block"><?=$lang['edit']['xmpp_info'];?></small>
+ </div>
</div>
</div>
- </div>
- <div class="form-group">
- <div class="col-sm-offset-2 col-sm-10">
- <button class="btn btn-success" data-action="edit_selected" data-id="editdomain" data-item="<?=$domain;?>" data-api-url='edit/domain' data-api-attr='{}' href="#"><?=$lang['admin']['save'];?></button>
+ <div class="form-group" data-acl="<?=$_SESSION['acl']['xmpp_prefix'];?>">
+ <label class="control-label col-sm-2" for="xmpp_prefix"><?=$lang['edit']['xmpp_prefix'];?></label>
+ <div class="col-md-3">
+ <div class="input-group">
+ <input type="text" class="form-control" name="xmpp_prefix" value="<?=htmlspecialchars($result['xmpp_prefix'], ENT_QUOTES, 'UTF-8');?>" required>
+ <span class="input-group-addon">.<?=htmlspecialchars($domain, ENT_QUOTES, 'UTF-8');?></span>
+ </div>
+ <small class="help-block"><?=sprintf($lang['edit']['xmpp_prefix_info'], getenv('MAILCOW_HOSTNAME'));?></small>
+ </div>
+ </div>
+ <hr>
+ <div class="form-group">
+ <div class="col-sm-offset-2 col-sm-10">
+ <div class="checkbox">
+ <label><input type="checkbox" value="1" name="active" <?=(isset($result['active']) && $result['active']=="1") ? "checked" : null;?> <?=($_SESSION['mailcow_cc_role'] == "admin") ? null : "disabled";?>> <?=$lang['edit']['active'];?></label>
+ </div>
+ </div>
+ </div>
+ <div class="form-group">
+ <div class="col-sm-offset-2 col-sm-10">
+ <button class="btn btn-success" data-action="edit_selected" data-id="editdomain" data-item="<?=$domain;?>" data-api-url='edit/domain' data-api-attr='{}' href="#"><?=$lang['admin']['save'];?></button>
+ </div>
+ </div>
+ </form>
+ <?php
+ if (!empty($dkim = dkim('details', $domain))) {
+ ?>
+ <hr>
+ <div class="row">
+ <div class="col-xs-2">
+ <p>Domain: <strong><?=htmlspecialchars($result['domain_name']);?></strong> (<?=$dkim['dkim_selector'];?>._domainkey)</p>
+ </div>
+ <div class="col-xs-10">
+ <pre><?=$dkim['dkim_txt'];?></pre>
</div>
</div>
- </form>
- <?php
- if (!empty($dkim = dkim('details', $domain))) {
- ?>
- <hr>
- <div class="row">
- <div class="col-xs-2">
- <p>Domain: <strong><?=htmlspecialchars($result['domain_name']);?></strong> (<?=$dkim['dkim_selector'];?>._domainkey)</p>
- </div>
- <div class="col-xs-10">
- <pre><?=$dkim['dkim_txt'];?></pre>
- </div>
- </div>
- <?php
- }
- ?>
- <hr>
- <form data-id="domratelimit" class="form-inline well" method="post">
- <div class="form-group">
- <label class="control-label"><?=$lang['acl']['ratelimit'];?></label>
- <input name="rl_value" type="number" value="<?=(!empty($rl['value'])) ? $rl['value'] : null;?>" autocomplete="off" class="form-control" placeholder="disabled">
- </div>
- <div class="form-group">
- <select name="rl_frame" class="form-control">
- <option value="s" <?=(isset($rl['frame']) && $rl['frame'] == 's') ? 'selected' : null;?>>msgs / second</option>
- <option value="m" <?=(isset($rl['frame']) && $rl['frame'] == 'm') ? 'selected' : null;?>>msgs / minute</option>
- <option value="h" <?=(isset($rl['frame']) && $rl['frame'] == 'h') ? 'selected' : null;?>>msgs / hour</option>
- <option value="d" <?=(isset($rl['frame']) && $rl['frame'] == 'd') ? 'selected' : null;?>>msgs / day</option>
- </select>
- </div>
- <div class="form-group">
- <button data-acl="<?=$_SESSION['acl']['ratelimit'];?>" class="btn btn-default" data-action="edit_selected" data-id="domratelimit" data-item="<?=$domain;?>" data-api-url='edit/rl-domain' data-api-attr='{}' href="#"><?=$lang['admin']['save'];?></button>
- </div>
- </form>
- <hr>
- <div class="row">
- <div class="col-sm-6">
- <h4><?=$lang['user']['spamfilter_wl'];?></h4>
- <p><?=$lang['user']['spamfilter_wl_desc'];?></p>
- <form class="form-inline" data-id="add_wl_policy_domain">
- <div class="input-group" data-acl="<?=$_SESSION['acl']['spam_policy'];?>">
- <input type="text" class="form-control" name="object_from" placeholder="*@example.org" required>
- <span class="input-group-btn">
- <button class="btn btn-default" data-action="add_item" data-id="add_wl_policy_domain" data-api-url='add/domain-policy' data-api-attr='{"domain":"<?= $domain; ?>","object_list":"wl"}' href="#"><?=$lang['user']['spamfilter_table_add'];?></button>
- </span>
- </div>
- </form>
- <div class="mass-actions-user">
- <div class="btn-group" data-acl="<?=$_SESSION['acl']['spam_policy'];?>">
- <a class="btn btn-sm btn-default" id="toggle_multi_select_all" data-id="policy_wl_domain" href="#"><span class="glyphicon glyphicon-check" aria-hidden="true"></span> <?=$lang['mailbox']['toggle_all'];?></a>
- <a class="btn btn-sm btn-danger" data-action="delete_selected" data-id="policy_wl_domain" data-api-url='delete/domain-policy' href="#"><?=$lang['mailbox']['remove'];?></a></li>
- </div>
- </div>
- <div class="table-responsive">
- <table class="table table-striped table-condensed" id="wl_policy_domain_table"></table>
- </div>
- </div>
- <div class="col-sm-6">
- <h4><?=$lang['user']['spamfilter_bl'];?></h4>
- <p><?=$lang['user']['spamfilter_bl_desc'];?></p>
- <form class="form-inline" data-id="add_bl_policy_domain">
- <div class="input-group" data-acl="<?=$_SESSION['acl']['spam_policy'];?>">
- <input type="text" class="form-control" name="object_from" placeholder="*@example.org" required>
- <span class="input-group-btn">
- <button class="btn btn-default" data-action="add_item" data-id="add_bl_policy_domain" data-api-url='add/domain-policy' data-api-attr='{"domain":"<?= $domain; ?>","object_list":"bl"}' href="#"><?=$lang['user']['spamfilter_table_add'];?></button>
- </span>
+ <?php
+ }
+ ?>
</div>
- </form>
- <div class="mass-actions-user">
- <div class="btn-group" data-acl="<?=$_SESSION['acl']['spam_policy'];?>">
- <a class="btn btn-sm btn-default" id="toggle_multi_select_all" data-id="policy_bl_domain" href="#"><span class="glyphicon glyphicon-check" aria-hidden="true"></span> <?=$lang['mailbox']['toggle_all'];?></a>
- <a class="btn btn-sm btn-danger" data-action="delete_selected" data-id="policy_bl_domain" data-api-url='delete/domain-policy' href="#"><?=$lang['mailbox']['remove'];?></a></li>
+ <div id="dratelimit" class="tab-pane">
+ <form data-id="domratelimit" class="form-inline well" method="post">
+ <div class="form-group">
+ <label class="control-label"><?=$lang['edit']['ratelimit'];?></label>
+ <input name="rl_value" type="number" value="<?=(!empty($rl['value'])) ? $rl['value'] : null;?>" autocomplete="off" class="form-control" placeholder="disabled">
+ </div>
+ <div class="form-group">
+ <select name="rl_frame" class="form-control">
+ <option value="s" <?=(isset($rl['frame']) && $rl['frame'] == 's') ? 'selected' : null;?>>msgs / second</option>
+ <option value="m" <?=(isset($rl['frame']) && $rl['frame'] == 'm') ? 'selected' : null;?>>msgs / minute</option>
+ <option value="h" <?=(isset($rl['frame']) && $rl['frame'] == 'h') ? 'selected' : null;?>>msgs / hour</option>
+ <option value="d" <?=(isset($rl['frame']) && $rl['frame'] == 'd') ? 'selected' : null;?>>msgs / day</option>
+ </select>
+ </div>
+ <div class="form-group">
+ <button data-acl="<?=$_SESSION['acl']['ratelimit'];?>" class="btn btn-default" data-action="edit_selected" data-id="domratelimit" data-item="<?=$domain;?>" data-api-url='edit/rl-domain' data-api-attr='{}' href="#"><?=$lang['admin']['save'];?></button>
+ </div>
+ </form>
+ </div>
+ <div id="dspamfilter" class="tab-pane">
+ <div class="row">
+ <div class="col-sm-6">
+ <h4><?=$lang['user']['spamfilter_wl'];?></h4>
+ <p><?=$lang['user']['spamfilter_wl_desc'];?></p>
- <div class="table-responsive">
- <table class="table table-striped table-condensed" id="wl_policy_domain_table"></table>
- </div>
+ <div class="mass-actions-user">
+ <div class="btn-group" data-acl="<?=$_SESSION['acl']['spam_policy'];?>">
+ <a class="btn btn-sm btn-default" id="toggle_multi_select_all" data-id="policy_wl_domain" href="#"><span class="glyphicon glyphicon-check" aria-hidden="true"></span> <?=$lang['mailbox']['toggle_all'];?></a>
+ <a class="btn btn-sm btn-danger" data-action="delete_selected" data-id="policy_wl_domain" data-api-url='delete/domain-policy' href="#"><?=$lang['mailbox']['remove'];?></a></li>
+ </div>
+ </div>
+ <form class="form-inline" data-id="add_wl_policy_domain">
+ <div class="input-group" data-acl="<?=$_SESSION['acl']['spam_policy'];?>">
+ <input type="text" class="form-control" name="object_from" placeholder="*@example.org" required>
+ <span class="input-group-btn">
+ <button class="btn btn-default" data-action="add_item" data-id="add_wl_policy_domain" data-api-url='add/domain-policy' data-api-attr='{"domain":"<?= $domain; ?>","object_list":"wl"}' href="#"><?=$lang['user']['spamfilter_table_add'];?></button>
+ </span>
+ </div>
+ </form>
++ <div class="table-responsive">
++ <table class="table table-striped table-condensed" id="wl_policy_domain_table"></table>
++ </div>
+ </div>
+ <div class="col-sm-6">
+ <h4><?=$lang['user']['spamfilter_bl'];?></h4>
+ <p><?=$lang['user']['spamfilter_bl_desc'];?></p>
- <div class="table-responsive">
- <table class="table table-striped table-condensed" id="bl_policy_domain_table"></table>
- </div>
+ <div class="mass-actions-user">
+ <div class="btn-group" data-acl="<?=$_SESSION['acl']['spam_policy'];?>">
+ <a class="btn btn-sm btn-default" id="toggle_multi_select_all" data-id="policy_bl_domain" href="#"><span class="glyphicon glyphicon-check" aria-hidden="true"></span> <?=$lang['mailbox']['toggle_all'];?></a>
+ <a class="btn btn-sm btn-danger" data-action="delete_selected" data-id="policy_bl_domain" data-api-url='delete/domain-policy' href="#"><?=$lang['mailbox']['remove'];?></a></li>
+ </div>
+ </div>
+ <form class="form-inline" data-id="add_bl_policy_domain">
+ <div class="input-group" data-acl="<?=$_SESSION['acl']['spam_policy'];?>">
+ <input type="text" class="form-control" name="object_from" placeholder="*@example.org" required>
+ <span class="input-group-btn">
+ <button class="btn btn-default" data-action="add_item" data-id="add_bl_policy_domain" data-api-url='add/domain-policy' data-api-attr='{"domain":"<?= $domain; ?>","object_list":"bl"}' href="#"><?=$lang['user']['spamfilter_table_add'];?></button>
+ </span>
+ </div>
+ </form>
++ <div class="table-responsive">
++ <table class="table table-striped table-condensed" id="bl_policy_domain_table"></table>
++ </div>
+ </div>
+ </div>
</div>
</div>
- <div class="table-responsive">
- <table class="table table-striped table-condensed" id="bl_policy_domain_table"></table>
- </div>
- </div>
- </div>
<?php
}
else {
diff --cc data/web/inc/functions.inc.php
index 36bd3e9e,36bd3e9e..db2b3dfd
--- a/data/web/inc/functions.inc.php
+++ b/data/web/inc/functions.inc.php
@@@ -453,7 -453,7 +453,7 @@@ function generate_tlsa_digest($hostname
return 'Error: Cannot read peer certificate';
}
}
--function alertbox_log_parser($_data){
++function alertbox_log_parser($_data) {
global $lang;
if (isset($_data['return'])) {
foreach ($_data['return'] as $return) {
@@@ -483,11 -483,11 +483,10 @@@
}
return false;
}
--function verify_salted_hash($hash, $password, $algo, $salt_length)
--{
++function verify_salted_hash($hash, $password, $algo, $salt_length) {
// Decode hash
$dhash = base64_decode($hash);
-- // Get first 20 bytes of binary which equals a SSHA hash
++ // Get first n bytes of binary which equals a SSHA hash
$ohash = substr($dhash, 0, $salt_length);
// Remove SSHA hash from decoded hash to get original salt string
$osalt = str_replace($ohash, '', $dhash);
@@@ -497,9 -497,9 +496,7 @@@
}
return false;
}
--
--function verify_hash($hash, $password)
--{
++function verify_hash($hash, $password) {
if (preg_match('/^{(.+)}(.+)/i', $hash, $hash_array)) {
$scheme = strtoupper($hash_array[1]);
$hash = $hash_array[2];