Skip to content

Commit 240cdd7

Browse files
authored
Merge pull request #2632 from SimonFair/ZFS-reserved-name-check-
Add checks on reserved names
2 parents 90d3729 + e77e0d2 commit 240cdd7

2 files changed

Lines changed: 46 additions & 2 deletions

File tree

emhttp/plugins/dynamix/CacheDevices.page

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,13 +78,33 @@ if (count($devs) > 1) {
7878
}
7979
?>
8080
<script>
81+
function isReservedPoolName(poolname, reserved) {
82+
var name = (poolname || '').trim().toLowerCase();
83+
var reservedPrefixes = ['mirror', 'raidz', 'draid', 'spare'];
84+
85+
if (!name) return false;
86+
87+
return reserved.some(function(entry) {
88+
var reservedName = (entry || '').toLowerCase();
89+
if (!reservedName) return false;
90+
if (reservedName.endsWith('*')) {
91+
return name.startsWith(reservedName.slice(0, -1));
92+
}
93+
if (reservedPrefixes.includes(reservedName)) {
94+
return name === reservedName || name.startsWith(reservedName);
95+
}
96+
return name === reservedName;
97+
});
98+
}
99+
81100
function validate(poolname) {
82101
var valid = /^[a-z]([a-z0-9~._-]*[a-z_-])*$/;
83102
var reserved = [<?=makeList(explode(',',_var($var,'reservedNames')))?>];
84103
var shares = [<?=makeList(array_map('sharename',glob('boot/config/shares/*.cfg',GLOB_NOSORT)))?>];
85104
var pools = [<?=makeList($pools)?>];
105+
poolname = (poolname || '').trim();
86106
if (!poolname.trim()) return false;
87-
if (reserved.includes(poolname)) {
107+
if (isReservedPoolName(poolname, reserved)) {
88108
swal({title:"_(Invalid pool name)_",text:"_(Do not use reserved names)_",html:true,type:'error',confirmButtonText:"_(Ok)_"});
89109
return false;
90110
} else if (shares.includes(poolname)) {

emhttp/plugins/dynamix/DeviceInfo.page

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,25 @@ function is_upgraded_ZFS_pool($pool_name)
195195

196196
String.prototype.celsius = function(){return Math.round((parseInt(this)-32)*5/9).toString();}
197197

198+
function isReservedPoolName(poolname, reserved) {
199+
var name = (poolname || '').trim().toLowerCase();
200+
var reservedPrefixes = ['mirror', 'raidz', 'draid', 'spare'];
201+
202+
if (!name) return false;
203+
204+
return reserved.some(function(entry) {
205+
var reservedName = (entry || '').toLowerCase();
206+
if (!reservedName) return false;
207+
if (reservedName.endsWith('*')) {
208+
return name.startsWith(reservedName.slice(0, -1));
209+
}
210+
if (reservedPrefixes.includes(reservedName)) {
211+
return name === reservedName || name.startsWith(reservedName);
212+
}
213+
return name === reservedName;
214+
});
215+
}
216+
198217
function setFloor() {
199218
if ($('#shareFloor').length==0) return;
200219
const fsSize = {<?=fsSize()?>};
@@ -711,8 +730,9 @@ function validate(poolname) {
711730
var reserved = [<?=makeList(explode(',', _var($var, 'reservedNames')))?>];
712731
var shares = [<?=makeList(array_map('sharename', glob('boot/config/shares/*.cfg', GLOB_NOSORT)))?>];
713732
var pools = [<?=makeList($pools)?>];
733+
poolname = (poolname || '').trim();
714734
if (!poolname.trim()) return false;
715-
if (reserved.includes(poolname)) {
735+
if (isReservedPoolName(poolname, reserved)) {
716736
swal({title:"_(Invalid pool name)_",text:"_(Do not use reserved names)_",type:'error',html:true,confirmButtonText:"_(Ok)_"});
717737
return false;
718738
} else if (shares.includes(poolname)) {
@@ -1035,6 +1055,7 @@ _(Critical disk utilization threshold)_ (%):
10351055

10361056
<?if (fsType('btrfs')):?>
10371057
<?if (_var($disk,'fsStatus')=="Mounted"):?>
1058+
<?if (isPool($name)):?>
10381059
<div id="poolsummary" class="title nocontrol">
10391060
<span class="left">
10401061
<i class="title fa fa-hdd-o"></i> _(Pool Status)_
@@ -1059,6 +1080,7 @@ if (!empty($poolstatus['pools'][$poolName])) {
10591080
?>
10601081
_(pool status)_:
10611082
: <span class="<?=$statusClass?>"><?=$status?><?=$statusLink?></span>
1083+
<?endif;?>
10621084

10631085
</form>
10641086

@@ -1398,6 +1420,7 @@ _(btrfs check status)_:
13981420
<?endif;?>
13991421
<?if (fsType('zfs') && !isSubpool($name)):?>
14001422
<?if (_var($disk,'fsStatus')=="Mounted"):?>
1423+
<?if (isPool($name)):?>
14011424
<div id="poolsummary" class="title nocontrol">
14021425
<span class="left">
14031426
<i class="title fa fa-info-circle"></i>_(Pool Status Summary)_
@@ -1422,6 +1445,7 @@ if (!empty($poolstatus['pools'][$poolName])) {
14221445
?>
14231446
_(pool status)_:
14241447
: <span class="<?=$statusClass?>"><?=$status?><?=$statusLink?></span>
1448+
<?endif;?>
14251449

14261450
</form>
14271451
<?endif;?>

0 commit comments

Comments
 (0)