diff --git a/emhttp/plugins/dynamix/include/Wrappers.php b/emhttp/plugins/dynamix/include/Wrappers.php
index 9a9adf114..d969236d8 100644
--- a/emhttp/plugins/dynamix/include/Wrappers.php
+++ b/emhttp/plugins/dynamix/include/Wrappers.php
@@ -86,7 +86,7 @@ function port_name($port) {
return substr($port,-2)!='n1' ? $port : substr($port,0,-2);
}
function exceed($value, $limit, $top=100) {
- return $limit>0 ? ($value>$limit && $value<=$top) : false;
+ return is_numeric($value) && $limit>0 ? ($value>$limit && $value<=$top) : false;
}
function ipaddr($ethX='eth0', $prot=4) {
global $$ethX;
diff --git a/emhttp/plugins/dynamix/nchan/update_2 b/emhttp/plugins/dynamix/nchan/update_2
index c0d0a6a65..ccb68565f 100755
--- a/emhttp/plugins/dynamix/nchan/update_2
+++ b/emhttp/plugins/dynamix/nchan/update_2
@@ -163,7 +163,7 @@ function device_status(&$disk, &$error, &$warning) {
function device_temp(&$disk, &$red, &$orange) {
global $display;
$spin = strpos(_var($disk,'color'),'blink')===false;
- $temp = _var($disk,'temp','*');
+ $temp = _var($disk,'temp');
$dev = _var($disk,'device');
$nvme = _var($disk,'transport')=='nvme';
[$hotNVME,$maxNVME] = $nvme ? get_nvme_info($dev,'temp') : [-1,-1];
@@ -171,12 +171,12 @@ function device_temp(&$disk, &$red, &$orange) {
$max = _var($disk,'maxTemp',-1)>=0 ? $disk['maxTemp'] : ($maxNVME>=0 ? $maxNVME : (_var($disk,'rotational',1)==0 && $display['maxssd']>=0 ? $display['maxssd'] : $display['max']));
$top = $display['top'] ?? 120;
$color= 'green';
- if (exceed($temp,$max,$top)) {
+ if (exceed($temp,$max,$top) || (is_numeric($temp) && $temp<0)) {
$color = 'red'; $red++;
} elseif (exceed($temp,$hot,$top)) {
$color = 'orange'; $orange++;
}
- return (($spin && $temp>0) ? "".my_temp($temp)."" : "*").($nvme ? my_power($dev) : "");
+ return ($spin ? "".my_temp($temp)."" : "*").($nvme ? my_power($dev) : "");
}
function device_smart(&$disk, &$fail, &$smart) {
global $numbers,$saved;
@@ -192,7 +192,8 @@ function device_smart(&$disk, &$fail, &$smart) {
$text = _('healthy');
$color = 'green';
$file = "state/smart/$name";
- if (file_exists("$file") && exec("grep -Pom1 '^SMART.*: \K[A-Z]+' ".escapeshellarg($file)." |tr -d '\n' 2>/dev/null", $ssa) && in_array("$ssa",$failed)) {
+ $ssa = file_exists($file) ? exec("grep -Pom1 '^SMART.+: \K[A-Z]+' ".escapeshellarg($file)) : "";
+ if (in_array($ssa,$failed)) {
$title = _('SMART health-check failed')."\n"; $thumb = 'thumbs-o-down'; $color = 'red'; $text = 'fail'; $fail++;
} else {
if (empty($saved["smart"]["$named.ack"])) {
diff --git a/etc/rc.d/rc.inet1 b/etc/rc.d/rc.inet1
index fe73721a1..62241f160 100755
--- a/etc/rc.d/rc.inet1
+++ b/etc/rc.d/rc.inet1
@@ -66,7 +66,10 @@
# - added interface carrier check before assigning IP address (DHCP or static)
# - added "status" command
-# Bergware - modified for Unraid OS, October 2023
+# Adapted by Bergware for use in Unraid OS - December 2023
+# - added functions to remove leading zeros in IPv4 and IPv6 addresses
+
+# Bergware - modified for Unraid OS, December 2023
###########
# LOGGING #
@@ -137,6 +140,19 @@ lo_down(){
# INTERFACE FUNCTIONS #
#######################
+# function to remove leading zeros in IPv4 address
+unzero(){
+ local M Q
+ echo -n $(for Q in ${1//./ }; do printf "$M%x" "0x$Q"; M=.; done)
+}
+
+# function to remove leading zeros in IPv6 address
+unzero6(){
+ local A M Q
+ A=${1/::/:-:}
+ echo -n $(for Q in ${A//:/ }; do [[ $Q != - ]] && printf "$M%x" "0x$Q" || printf ":"; M=:; done)
+}
+
# function to get link mtu size
get_mtu(){
ip link show $1 | grep -Po 'mtu \K\d+'
@@ -377,14 +393,14 @@ ipaddr_up(){
[[ $j -eq 0 ]] && ADDR=${IPADDR[$i]} || ADDR=${IPADDR[$i,$j]}
if [[ -n $ADDR ]]; then
[[ $j -eq 0 ]] && MASK=${NETMASK[$i]} || MASK=${NETMASK[$i,$j]}
- [[ -n $MASK ]] && run ip -4 addr add $ADDR/$MASK dev $IFACE metric 1
+ [[ -n $MASK ]] && run ip -4 addr add $(unzero $ADDR)/$MASK dev $IFACE metric 1
fi
fi
if [[ $IP != ipv4 ]]; then
[[ $j -eq 0 ]] && ADDR6=${IPADDR6[$i]} || ADDR6=${IPADDR6[$i,$j]}
if [[ -n $ADDR6 ]]; then
[[ $j -eq 0 ]] && MASK6=${NETMASK6[$i]} || MASK6=${NETMASK6[$i,$j]}
- [[ -n $MASK6 ]] && run ip -6 addr add $ADDR6/$MASK6 dev $IFACE metric 1
+ [[ -n $MASK6 ]] && run ip -6 addr add $(unzero6 $ADDR6)/$MASK6 dev $IFACE metric 1
[[ -n $PRIV6 && -d $CONF6/$IFACE ]] && echo 0 >$CONF6/$IFACE/use_tempaddr
fi
fi
diff --git a/etc/rc.d/rc.libvirt b/etc/rc.d/rc.libvirt
index 41236c822..c6a3935a7 100755
--- a/etc/rc.d/rc.libvirt
+++ b/etc/rc.d/rc.libvirt
@@ -181,14 +181,15 @@ libvirtd_start(){
return 1
fi
# convert libvirt 1.3.1 w/ eric's hyperv vendor id patch to how libvirt does it in libvirt 1.3.3+
- sed -ri "s///g" /etc/libvirt/qemu/*.xml &>/dev/null
+ sed -ri "s///g" /etc/libvirt/qemu/*.xml 2>/dev/null
# remove from xml because libvirt + virlogd + virlockd has an issue with locked
- sed -ri "//d" /etc/libvirt/qemu/*.xml &>/dev/null
+ sed -ri "//d" /etc/libvirt/qemu/*.xml 2>/dev/null
# Remove "" if reverting from later release.
. /etc/unraid-version
- [[ $(version $version) -le $(version "6.12") ]] && sed -ri "//d" /etc/libvirt/qemu/*.xml &>/dev/null
+ [[ $(version $version) -le $(version "6.12") ]] && sed -ri "//d" /etc/libvirt/qemu/*.xml 2>/dev/null
# update interface section((s) of VM configuration files
for XML in /etc/libvirt/qemu/*.xml; do
+ [[ -f "$XML" ]] || continue
# get all interface sections
ROW=($(grep -nhP '