@@ -372,7 +375,7 @@ foreach ($ports as $port) {
-_(VPN)_ _(Active tunnels)_: =$up?> _(Inactive tunnels)_: =$down?>
+_(VPN)_ _(Active tunnels)_: =$up?> _(Inactive tunnels)_: =$down?>
@@ -389,7 +392,7 @@ foreach ($ports as $port) {
_(Power)_
- _(UPS Model)_:
+ _(UPS Model)_:
_(UPS status)_:
@@ -403,7 +406,7 @@ foreach ($ports as $port) {
-_(Airflow)_ _(Fan count)_: =$fans?>
+_(Airflow)_ _(Fan count)_: =$fans?>
@@ -443,27 +446,25 @@ echo " ";
-
-_(Docker Containers)_
+
+_(Docker Containers)_
+
-
-
-_(Virtual Machines)_
+
+_(Virtual Machines)_
+
-
-
-_(Shares)_
-
-=sprintf(_("Share count: %s with %s cache only and %s encrypted"),count($shares),$cache_only,$encrypted)?>
+ class="mixed">
+_(Shares)_
@@ -474,6 +475,10 @@ echo "
";
+
+=sprintf(_("Share count: %s with %s cache only and %s encrypted"),count($shares),$cache_only,$encrypted)?>
+
+
@@ -516,10 +521,22 @@ if (!$group) {
?>
-
-_(Users)_
+ class="mixed">
+_(Users)_
+
+
+
+=mk_option("", "0", "SMB")?>
+
+
+=mk_option("", "2", "NFS")?>
+
+
+
+
+=sprintf(_("User count: %s with %s unprotected"),count($users),$nopass)?>
+
-=sprintf(_("User count: %s with %s unprotected"),count($users),$nopass)?>
@@ -584,15 +601,19 @@ if (!$group) {
-_(Parity)_
-
+_(Parity)_
+
+
+
+
-_(Array)_ (_(stopped)_)
-=sprintf(_("%s used of %s (%s %%)"),my_scale($array_used*1024,$unit)." $unit",my_scale($array_size*1024,$unit,-1,-1)." $unit",$array_percent)?>
+ _(Array)_ (_(stopped)_)
+=sprintf(_("%s used of %s (%s %%)"),my_scale($array_used*1024,$unit)." $unit",my_scale($array_size*1024,$unit,-1,-1)." $unit",$array_percent)?>
+
@@ -601,8 +622,9 @@ if (!$group) {
$i=0?>
-=ucfirst($pool)?> (_(stopped)_)
-=sprintf(_("%s used of %s (%s %%)"),my_scale($cache_used[$pool]*1024,$unit)." $unit",my_scale($cache_size[$pool]*1024,$unit,-1,-1)." $unit",$cache_rate[$pool])?>
+ =ucfirst($pool)?> (_(stopped)_)
+=sprintf(_("%s used of %s (%s %%)"),my_scale($cache_used[$pool]*1024,$unit)." $unit",my_scale($cache_size[$pool]*1024,$unit,-1,-1)." $unit",$cache_rate[$pool])?>
+
@@ -611,7 +633,10 @@ if (!$group) {
-_(Unassigned)_
+_(Unassigned)_ (_(stopped)_)
+
+
+
@@ -678,18 +703,84 @@ function hideShow() {
Number.prototype.pad = function(size){var s=String(this);while(s.length<(size||2)){s='0'+s;}return s;}
Array.prototype.tail = function(t){return this.slice(-t).map(function(o){return o.y;}).join(';');}
String.prototype.build = function(){return this.replace(/\n()\n/g,'');}
-String.prototype.marker = function(){return this.substr(0,12).replace(/ /g,'').toLowerCase();}
+String.prototype.md5 = function() {
+ // Original copyright (c) Paul Johnston & Greg Holt.
+ var hc = '0123456789abcdef';
+ function rh(n){var j,s='';for(j=0;j<=3;j++) s+=hc.charAt((n>>(j*8+4))&0x0F)+hc.charAt((n>>(j*8))&0x0F);return s;}
+ function ad(x,y){var l=(x&0xFFFF)+(y&0xFFFF);var m=(x>>16)+(y>>16)+(l>>16);return (m<<16)|(l&0xFFFF);}
+ function rl(n,c){return (n<>>(32-c));}
+ function cm(q,a,b,x,s,t){return ad(rl(ad(ad(a,q),ad(x,t)),s),b);}
+ function ff(a,b,c,d,x,s,t){return cm((b&c)|((~b)&d),a,b,x,s,t);}
+ function gg(a,b,c,d,x,s,t){return cm((b&d)|(c&(~d)),a,b,x,s,t);}
+ function hh(a,b,c,d,x,s,t){return cm(b^c^d,a,b,x,s,t);}
+ function ii(a,b,c,d,x,s,t){return cm(c^(b|(~d)),a,b,x,s,t);}
+ function sb(x) {
+ var i;var nblk=((x.length+8)>>6)+1;var blks=new Array(nblk*16);for(i=0;i>2]|=x.charCodeAt(i)<<((i%4)*8);
+ blks[i>>2]|=0x80<<((i%4)*8);blks[nblk*16-2]=x.length*8;return blks;
+ }
+ var i,x=sb(''+this),a=1732584193,b=-271733879,c=-1732584194,d=271733878,olda,oldb,oldc,oldd;
+ for(i=0;i=0) this.find('tr:gt(0)').hide();
+}
+jQuery.prototype.mixedView = function(s) {
+ if (s==0) {
+ this.find('tr:gt(0)').hide();
+ return;
+ }
+ this.find('tr:gt(0)').show();
+ if (this.attr('data')) {
+ setTimeout(this.attr('data'));
+ }
+ if (this.hasClass('mixed')) {
+ var select = this.find('select[name^="enter"]');
+ select = parseInt(select.val())+1;
+ this.find('tr:gt(0)').each(function(){
+ var names = ($(this).attr('class')||'').split(' ');
+ for (var n=0,name; name=names[n]; n++) if (/[0-9]/.test(name.slice(-1)) && name.slice(-1)!=select) $(this).hide();
+ });
+ }
+}
-var ports = [=implode(',',array_map('escapestring',$ports))?>];
-var cpu = [];
-var rxd = [];
-var txd = [];
-var cputime = 0;
-var nettime = 0;
-var cpuline = $.cookie('cpuline')||30;
-var netline = $.cookie('netline')||30;
-var update2 = true;
-var box = null;
+var ports = [=implode(',',array_map('escapestring',$ports))?>];
+var cpu = [];
+var rxd = [];
+var txd = [];
+var cputime = 0;
+var nettime = 0;
+var cpuline = $.cookie('cpuline')||30;
+var netline = $.cookie('netline')||30;
+var update2 = true;
+var box = null;
+var startup = true;
var options_cpu = {
series:[{name:'load', data:cpu.slice()}],
@@ -879,8 +970,8 @@ function noVMs() {
}
function loadlist(init) {
if (init) {
- $('#apps').switchButton({labels_placement:'left', off_label:"_(All Apps)_", on_label:"_(Started only)_", checked:$.cookie('my_apps')=='startedOnly'});
- $('#vms').switchButton({labels_placement:'left', off_label:"_(All VMs)_", on_label:"_(Started only)_", checked:$.cookie('my_vms')=='startedOnly'});
+ $('#apps').switchButton({labels_placement:'right', off_label:"_(All Apps)_", on_label:"_(Started only)_", checked:$.cookie('my_apps')=='startedOnly'});
+ $('#vms').switchButton({labels_placement:'right', off_label:"_(All VMs)_", on_label:"_(Started only)_", checked:$.cookie('my_vms')=='startedOnly'});
$('#apps').change(function(){
$('span.outer.apps.stopped').finish().toggle('fast',function(){noApps();})
$('#apps').is(':checked') ? $.cookie('my_apps','startedOnly',{expires:3650}) : $.removeCookie('my_apps');
@@ -893,9 +984,9 @@ function loadlist(init) {
$.post('/webGui/include/DashboardApps.php',{display:'=$display['dashapps']?>',docker:'=$dockerd?>',vms:'=$libvirtd?>'},function(d) {
var data = d.split('\0');
$('#docker_view tr.updated').remove();
- $('#docker_view').append(data[0]);
+ $('#docker_view').append(data[0]).hideMe();
$('#vm_view tr.updated').remove();
- $('#vm_view').append(data[1]);
+ $('#vm_view').append(data[1]).hideMe();
if ($.cookie('my_apps')!=null) $('span.apps.stopped').hide(0,noApps());
if ($.cookie('my_vms')!=null) $('span.vms.stopped').hide(0,noVMs());
});
@@ -915,13 +1006,22 @@ function getCase() {
function changeMode(item) {
if (item==0) $.removeCookie('enter_share'); else $.cookie('enter_share',item,{expires:3650});
- if (item==0) $('.smb.user1').show(); else $('.smb.user1').hide();
- if (item==0) $('.smb.share1').show(); else $('.smb.share1').hide();
+ if (startup || $('.smb.share1').parent().find('tr:eq(1)').is(':visible')) {
+ if (item==0) $('.smb.share1').show(); else $('.smb.share1').hide();
+ }
+ if (startup || $('.smb.user1').parent().find('tr:eq(1)').is(':visible')) {
+ if (item==0) $('.smb.user1').show(); else $('.smb.user1').hide();
+ }
- if (item==2) $('.nfs.user3').show(); else $('.nfs.user3').hide();
- if (item==2) $('.nfs.share3').show(); else $('.nfs.share3').hide();
+ if ($('.nfs.share3').parent().find('tr:eq(1)').is(':visible')) {
+ if (item==2) $('.nfs.share3').show(); else $('.nfs.share3').hide();
+ }
+ if ($('.nfs.user3').parent().find('tr:eq(1)').is(':visible')) {
+ if (item==2) $('.nfs.user3').show(); else $('.nfs.user3').hide();
+ }
+ $('select[name="enter_user"]').val(item);
}
function changeView(item) {
if (item==0) $.removeCookie('enter_view'); else $.cookie('enter_view',item,{expires:3650});
@@ -1016,7 +1116,7 @@ function dropdown(menu) {
var select = 'select[name="'+menu+'"]';
var size = $(select+' option').length;
var option = $.cookie(menu)||0;
- if (option >= size) option = size - 1;
+ if (option >= size) option = 0;
$(select+' option')[option].selected = true;
$(select).change();
}
@@ -1036,8 +1136,15 @@ function toggleChart(init) {
$('#cpu_main').removeClass('last');
$('.cpu_open:last').removeClass('last');
if ($.cookie('cpu-chart')==null) {
- $('#cpu_chart').show();
- $('#cpuline').show();
+ var hidden = $.cookie('hidden_content');
+ hidden = hidden==null ? [] : hidden.split(';');
+ if (hidden.indexOf($('#cpu_main').parent().attr('sort'))==-1) {
+ $('#cpu_chart').show();
+ $('#cpuline').show();
+ } else {
+ $('#cpu_chart').hide();
+ $('#cpuline').hide();
+ }
} else {
$('#cpu_chart').hide();
$('#cpuline').hide();
@@ -1124,24 +1231,47 @@ function sortTables() {
});
}
function addProperties() {
- $('div.frame').find('tbody.system').addClass('sortable').attr('sort','_system_information_');
- $('div.frame').find('tbody').not('.system').each(function(){
- $(this).addClass('sortable').attr('sort',$(this).attr('title').marker());
+ $('div.frame tbody.system').addClass('sortable').attr('sort','_system_information_'.md5());
+ $('div.frame tbody.system').find('td:first').prepend(" ");
+ $('div.frame tbody').each(function(){
+ $(this).find('td:first').prepend(" ");
+ });
+ $('div.frame tbody').not('.system').each(function(){
+ $(this).addClass('sortable').attr('sort',$(this).attr('title').md5());
$(this).find('td:first').prepend(" ");
});
+ $('div.frame tr').attr('title','');
+ $('tr#var0').hover(function(){$.post('/webGui/include/DashboardApps.php',{sys:0},function(val){$('.sys0').text(val);})});
+
+ $('tr#var1').show().hover(function(){$.post('/webGui/include/DashboardApps.php',{sys:1},function(val){$('.sys1').text(val);})});
+
+ $('tr#var2').hover(function(){$.post('/webGui/include/DashboardApps.php',{sys:2},function(val){$('.sys2').text(val);})});
+ $('tr#var3').hover(function(){$.post('/webGui/include/DashboardApps.php',{sys:3},function(val){$('.sys3').text(val);})});
+
+ $('tr#var4').show().hover(function(){$.post('/webGui/include/DashboardApps.php',{sys:4},function(val){$('.sys4').text(val);})});
+
}
function showContent() {
var count = {'db-box1':$('table#db-box1 tbody').length, 'db-box2':$('table#db-box2 tbody').length, 'db-box3':$('table#db-box3 tbody').length}
var inactive = $.cookie('inactive_content');
if (inactive) {
inactive = inactive.split(';');
- for (var n=0,x; x=inactive[n]; n++) {
- var tbody = $('table.dashboard tbody[sort="'+x+'"]');
+ for (var n=0,md5; md5=inactive[n]; n++) {
+ var tbody = $('table.dashboard tbody[sort="'+md5+'"]');
var id = tbody.parent().prop('id');
count[id]--;
tbody.hide();
}
}
+ var hidden = $.cookie('hidden_content');
+ if (hidden) {
+ hidden = hidden.split(';');
+ for (var n=0,md5; md5=hidden[n]; n++) {
+ var tbody = $('div.frame tbody[sort="'+md5+'"]');
+ tbody.find('.openclose').removeClass('fa-chevron-up fa-chevron-down').addClass('fa-chevron-down');
+ tbody.find('tr:gt(0)').hide();
+ }
+ }
if (count['db-box1']>0) $('div#tile1').show();
if (count['db-box2']>0) $('div#tile2').show();
if (count['db-box3']>0) $('div#tile3').show();
@@ -1152,8 +1282,42 @@ function setColor(l, t1, t2) {
case (t2 > 0 && l >= t2): return 'orangebar';
default: return '';}
}
-function dismiss(close) {
- var tbody = close.closest('tbody');
+function openClose(button) {
+ var hidden = $.cookie('hidden_content');
+ hidden = hidden==null ? [] : hidden.split(';');
+ if (button) {
+ // show/hide single tile content
+ var tbody = button.closest('tbody');
+ if (button.hasClass('fa-chevron-up')) {
+ button.removeClass('fa-chevron-up fa-chevron-down').addClass('fa-chevron-down');
+ tbody.mixedView(0);
+ hidden.push(tbody.attr('sort'));
+ } else {
+ button.removeClass('fa-chevron-up fa-chevron-down').addClass('fa-chevron-up');
+ tbody.mixedView(1);
+ hidden.splice(hidden.indexOf(tbody.attr('sort')),1);
+ }
+ $.cookie('hidden_content',hidden.join(';'),{expires:3650});
+ } else {
+ // show/hide all tiles content
+ if (hidden.length==0) {
+ $('div.frame tbody').each(function(){
+ $(this).find('.openclose').removeClass('fa-chevron-up fa-chevron-down').addClass('fa-chevron-down');
+ $(this).mixedView(0);
+ hidden.push($(this).attr('sort'));
+ });
+ $.cookie('hidden_content',hidden.join(';'),{expires:3650});
+ } else {
+ $('div.frame tbody').each(function(){
+ $(this).find('.openclose').removeClass('fa-chevron-up fa-chevron-down').addClass('fa-chevron-up');
+ $(this).mixedView(1);
+ });
+ $.removeCookie('hidden_content');
+ }
+ }
+}
+function dismiss(button) {
+ var tbody = button.closest('tbody');
var table = tbody.parent();
var tile = table.parent();
var inactive = $.cookie('inactive_content');
@@ -1167,7 +1331,7 @@ function contentMgmt() {
box = $("#iframe-popup");
box.html($("#templateContentMgmt").html().build());
box.dialog({
- title: "_(Content Management)_",
+ title: "_(Tile Management)_",
height: 350,
width: 900,
resizable: false,
@@ -1180,8 +1344,9 @@ function contentMgmt() {
$.removeCookie('db-box2');
$.removeCookie('db-box3');
$.removeCookie('inactive_content');
+ $.removeCookie('hidden_content');
box.dialog('close');
- refresh();
+ location.reload();
},
"_(All)_": function(){
$('input.checker').each(function(){$(this).prop('checked',true);});
@@ -1267,7 +1432,7 @@ dashboard.on('message',function(msg,meta) {
// memory & disk load
$.each(part[0].split('\0'),function(k,v) {
var load = v.slice(0,-1);
- var color = setColor(load,=_var($display,'critical',0)?>,=_var($display,'warning',0)?>);
+ var color = k==1 ? '' : setColor(load,=_var($display,'critical',0)?>,=_var($display,'warning',0)?>);
$('.sys'+k).text(v);
$('#sys'+k).finish().animate({width:v},{step:function(){$('#sys'+k).css('overflow','visible').removeClass().addClass(color);}});
});
@@ -1288,7 +1453,7 @@ dashboard.on('message',function(msg,meta) {
var info = moreInfo(data,"_(Array)_");
// array devices
$('#array_list tr.updated').remove();
- $('#array_list').append(data[0]);
+ $('#array_list').append(data[0]).hideMe();
$('#array_info').parent().css('display',info?'':'none');
$('#array_info').html(info);
smartMenu('#array_list');
@@ -1298,7 +1463,7 @@ dashboard.on('message',function(msg,meta) {
var data = t.split('\0');
var info = moreInfo(data,"_(Pool)_");
$('#pool_list'+i+' tr.updated').remove();
- $('#pool_list'+i).append(t);
+ $('#pool_list'+i).append(t).hideMe();
$('#pool_info'+i).parent().css('display',info?'':'none');
$('#pool_info'+i).html(info);
smartMenu('#pool_list'+i);
@@ -1308,13 +1473,13 @@ dashboard.on('message',function(msg,meta) {
var data = part[2].split('\0');
var info = moreInfo(data,"_(Unassigned)_");
$('#devs_list tr.updated').remove();
- $('#devs_list').append(data[0]);
+ $('#devs_list').append(data[0]).hideMe();
$('#devs_info').parent().css('display',info?'':'none');
$('#devs_info').html(info);
smartMenu('#devs_list');
// parity status
- $('span.info.title').html(part[3]);
+ $('span.parity').html(part[3]);
// parity schedule
var data = part[4].split('\0');
$('#parity').html(data[0]);
@@ -1383,13 +1548,11 @@ $(function() {
cpuchart.render();
netchart.render();
addProperties();
-
- $('tr#zfs').show();
-
dropdown('enter_share');
dropdown('enter_view');
+ startup = false;
dashboard.start();
apcups.start();
diff --git a/emhttp/plugins/dynamix/DeviceInfo.page b/emhttp/plugins/dynamix/DeviceInfo.page
index 1641cf727..589c52ac3 100644
--- a/emhttp/plugins/dynamix/DeviceInfo.page
+++ b/emhttp/plugins/dynamix/DeviceInfo.page
@@ -31,6 +31,7 @@ function sanitize(&$val) {
$data = explode('.',str_replace([' ',','],['','.'],$val));
$last = array_pop($data);
$val = count($data) ? implode($data).".$last" : $last;
+ $val = preg_replace('/[^0-9.]/','',$val);
}
function presetSpace($val) {
global $disk,$display;
@@ -38,13 +39,10 @@ function presetSpace($val) {
sanitize($val);
$size = _var($disk,'fsSize',0);
$size = $size>0 ? round(100*$val/$size,1) : 0;
- $unit = '%';
- if ($size < 1) {
- $units = ['KB','MB','GB','TB','PB','EB','ZB','YB'];
- $base = $val>0 ? floor(log($val,1000)) : 0;
- $size = round($val/pow(1000,$base),1);
- $unit = _var($units,$base);
- }
+ $units = ['KB','MB','GB','TB','PB','EB','ZB','YB'];
+ $base = $val>0 ? floor(log($val,1000)) : 0;
+ $size = round($val/pow(1000,$base),1);
+ $unit = _var($units,$base);
[$dot,$comma] = str_split(_var($display,'number','.,'));
return $size>0 ? number_format($size,$size-floor($size)?1:0,$dot,$comma).' '.$unit : '';
}
diff --git a/emhttp/plugins/dynamix/Eth0.page b/emhttp/plugins/dynamix/Eth0.page
index e1add9194..f7e197681 100644
--- a/emhttp/plugins/dynamix/Eth0.page
+++ b/emhttp/plugins/dynamix/Eth0.page
@@ -225,7 +225,7 @@ function selectProtocol(form,port,index) {
}
if ($(form).find('select[name="USE_DHCP:'+i+'"]').val()) more4.show(); else more4.hide();
if ($(form).find('select[name="USE_DHCP6:'+i+'"]').val()) more6.show(); else more6.hide();
- checkNetworkSettings(form,i,true);
+ checkNetworkSettings(form,i);
});
} else {
var protocol = $(form).find('select[name="PROTOCOL:'+index+'"]').val() || 'ipv4';
@@ -241,16 +241,12 @@ function selectProtocol(form,port,index) {
if ($(form).find('select[name="USE_DHCP:'+index+'"]').val()) more4.show(); else more4.hide();
if ($(form).find('select[name="USE_DHCP6:'+index+'"]').val()) more6.show(); else more6.hide();
checkNetworkSettings(form,index);
- if (index==0) {
- checkDNSSettings(form);
- checkDNSSettings6(form);
- }
}
}
-function checkNetworkSettings(form,index,start) {
+function checkNetworkSettings(form,index) {
var disabled4 = $(form).find('select[name="USE_DHCP:'+index+'"]').val()!='no';
var disabled6 = $(form).find('select[name="USE_DHCP6:'+index+'"]').val()!='no';
- var protocol = $(form).find('select[name="PROTOCOL:'+index+'"]').val() || 'ipv4';
+ var protocol = $(form).find('select[name="PROTOCOL:'+index+'"]').val() || 'ipv4';
if (protocol != 'ipv6') {
$(form).find('input[name="IPADDR:'+index+'"]').prop('disabled',disabled4).prop('required',!disabled4);
$(form).find('select[name="NETMASK:'+index+'"]').prop('disabled',disabled4);
@@ -264,19 +260,17 @@ function checkNetworkSettings(form,index,start) {
privacy.prop('disabled',!disabled6);
}
if (index==0) {
- if (form.DHCP_KEEPRESOLV !== undefined) {
- if (!start) form.DHCP_KEEPRESOLV.value = disabled4 ? 'no' : 'yes';
- form.DHCP_KEEPRESOLV.disabled = !disabled4;
- checkDNSSettings(form);
- }
- if (form.DHCP6_KEEPRESOLV !== undefined) {
- if (!start) form.DHCP6_KEEPRESOLV.value = disabled6 ? 'no' : 'yes';
- form.DHCP6_KEEPRESOLV.disabled = !disabled6;
- checkDNSSettings6(form);
- }
+ if (form.DHCP_KEEPRESOLV !== undefined) checkDNSSettings(form);
+ if (form.DHCP6_KEEPRESOLV !== undefined) checkDNSSettings6(form);
}
}
function checkDNSSettings(form) {
+ if ($(form).find('select[name="USE_DHCP:0"]').val()=='no') {
+ form.DHCP_KEEPRESOLV.value = 'yes';
+ form.DHCP_KEEPRESOLV.disabled = true;
+ } else {
+ form.DHCP_KEEPRESOLV.disabled = false;
+ }
var disabled = form.DHCP_KEEPRESOLV.value=='no';
var protocol = $(form).find('select[name="PROTOCOL:0"]').val() || 'ipv4';
if (protocol != 'ipv6') {
@@ -289,6 +283,12 @@ function checkDNSSettings(form) {
}
}
function checkDNSSettings6(form) {
+ if ($(form).find('select[name="USE_DHCP6:0"]').val()=='no') {
+ form.DHCP6_KEEPRESOLV.value = 'yes';
+ form.DHCP6_KEEPRESOLV.disabled = true;
+ } else {
+ form.DHCP6_KEEPRESOLV.disabled = false;
+ }
var disabled = form.DHCP6_KEEPRESOLV.value=='no';
var protocol = $(form).find('select[name="PROTOCOL:0"]').val() || 'ipv4';
if (protocol != 'ipv4') {
diff --git a/emhttp/plugins/dynamix/ManagementAccess.page b/emhttp/plugins/dynamix/ManagementAccess.page
index 9836f1a89..5fbf01ab4 100644
--- a/emhttp/plugins/dynamix/ManagementAccess.page
+++ b/emhttp/plugins/dynamix/ManagementAccess.page
@@ -54,7 +54,7 @@ function acceptableCert($certFile, $hostname, $expectedURL) {
$tasks = find_tasks();
$nginx = @parse_ini_file('/var/local/emhttp/nginx.ini') ?: [];
$addr = _var($nginx,'NGINX_LANIP') ?: _var($nginx,'NGINX_LANIP6');
-$keyfile = @file_get_contents(_var($var,'regFILE'));
+$keyfile = empty(_var($var,'regFILE')) ? false : @file_get_contents(_var($var,'regFILE'));
$cert2Issuer = '';
$isLEcert = false;
if ($keyfile !== false) $keyfile = base64_encode($keyfile);
diff --git a/emhttp/plugins/dynamix/NetworkExtra.page b/emhttp/plugins/dynamix/NetworkExtra.page
index 6b16987a8..b898ac218 100644
--- a/emhttp/plugins/dynamix/NetworkExtra.page
+++ b/emhttp/plugins/dynamix/NetworkExtra.page
@@ -96,7 +96,7 @@ $(function(){
_(Current listening interfaces)_:
-: =exec("$docroot/webGui/scripts/show_interfaces")?:_('Any')?>
+: =exec("$docroot/webGui/scripts/show_interfaces")?:_('Any')?>=exec("$docroot/webGui/scripts/error_interfaces")?>
_(Include listening interfaces)_:
diff --git a/emhttp/plugins/dynamix/SecurityNFS.page b/emhttp/plugins/dynamix/SecurityNFS.page
index f5ba05846..c79bc2a4d 100644
--- a/emhttp/plugins/dynamix/SecurityNFS.page
+++ b/emhttp/plugins/dynamix/SecurityNFS.page
@@ -76,7 +76,7 @@ _(Security)_: