Skip to content

Commit a8fdf8a

Browse files
Merge pull request #295 from Martinski4GitHub/dev
More improvements for detecting WebGUI access rules
2 parents d244e3e + 80bb5d0 commit a8fdf8a

File tree

1 file changed

+79
-14
lines changed

1 file changed

+79
-14
lines changed

MerlinAU.sh

Lines changed: 79 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
#
55
# Original Creation Date: 2023-Oct-01 by @ExtremeFiretop.
66
# Official Co-Author: @Martinski W. - Date: 2023-Nov-01
7-
# Last Modified: 2024-Aug-16
7+
# Last Modified: 2024-Aug-18
88
###################################################################
99
set -u
1010

@@ -113,13 +113,22 @@ else cronListCmd="crontab -l"
113113
fi
114114

115115
##----------------------------------------##
116-
## Modified by Martinski W. [2024-May-31] ##
116+
## Modified by Martinski W. [2024-Aug-17] ##
117117
##----------------------------------------##
118118
inMenuMode=true
119119
isInteractive=false
120120
FlashStarted=false
121121

122+
# Main LAN Network Info #
123+
readonly mainLAN_IFname="$(nvram get lan_ifname)"
122124
readonly mainLAN_IPaddr="$(nvram get lan_ipaddr)"
125+
readonly mainNET_IPaddr="$(ip route show | grep -E "[[:blank:]]+dev[[:blank:]]+${mainLAN_IFname}[[:blank:]]+proto[[:blank:]]+" | awk -F ' ' '{print $1}')"
126+
127+
# RegExp for IPv4 address #
128+
readonly IPv4octet_RegEx="([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])"
129+
readonly IPv4addrs_RegEx="(${IPv4octet_RegEx}\.){3}${IPv4octet_RegEx}"
130+
readonly IPv4privt_RegEx="(^10\.|^172\.1[6-9]\.|^172\.2[0-9]\.|^172\.3[0-1]\.|^192\.168\.)"
131+
123132
readonly fwInstalledBaseVers="$(nvram get firmver | sed 's/\.//g')"
124133
readonly fwInstalledBuildVers="$(nvram get buildno)"
125134
readonly fwInstalledExtendNum="$(nvram get extendno)"
@@ -2588,28 +2597,89 @@ _GetPasswordInput_()
25882597
}
25892598

25902599
##-------------------------------------##
2591-
## Added by Martinski W. [2024-Aug-16] ##
2600+
## Added by Martinski W. [2024-Aug-18] ##
25922601
##-------------------------------------##
2602+
_CIDR_IPaddrBlockContainsIPaddr_()
2603+
{
2604+
if [ $# -lt 2 ] || [ -z "$1" ] || [ -z "$2" ]
2605+
then return 1 ; fi
2606+
2607+
local lastNETIPaddr4thOctet cidrIPRangeMax=0
2608+
2609+
local thisLANIPaddr="$2"
2610+
local cidrNETIPaddr="${1%/*}"
2611+
local cidrNETIPmask="${1#*/}"
2612+
local NETIPaddr4thOctet="${cidrNETIPaddr##*.}"
2613+
local LANIPaddr4thOctet="${thisLANIPaddr##*.}"
2614+
2615+
# Assumes the host segment has a maximum of 8 bits #
2616+
# and the network segment has a minimum of 24 bits #
2617+
case "$cidrNETIPmask" in
2618+
31) cidrIPRangeMax=1 ;;
2619+
30) cidrIPRangeMax=3 ;;
2620+
29) cidrIPRangeMax=7 ;;
2621+
28) cidrIPRangeMax=15 ;;
2622+
27) cidrIPRangeMax=31 ;;
2623+
26) cidrIPRangeMax=63 ;;
2624+
25) cidrIPRangeMax=127 ;;
2625+
24) cidrIPRangeMax=255 ;;
2626+
esac
2627+
lastNETIPaddr4thOctet="$((NETIPaddr4thOctet + cidrIPRangeMax))"
2628+
[ "$lastNETIPaddr4thOctet" -gt 255 ] && lastNETIPaddr4thOctet=255
2629+
2630+
if [ "$LANIPaddr4thOctet" -ge "$NETIPaddr4thOctet" ] && \
2631+
[ "$LANIPaddr4thOctet" -le "$lastNETIPaddr4thOctet" ]
2632+
then return 0
2633+
else return 1
2634+
fi
2635+
}
2636+
2637+
##----------------------------------------##
2638+
## Modified by Martinski W. [2024-Aug-18] ##
2639+
##----------------------------------------##
25932640
_CheckWebGUILoginAccessOK_()
25942641
{
2595-
local accessRestriction restrictRuleList netIPv4Addr
2642+
local accessRestriction restrictRuleList
25962643
local lanIPaddrRegEx1 lanIPaddrRegEx2 lanIPaddrRegEx3
2644+
local cidrIPaddrEntry cidrIPaddrBlock cidrIPaddrRegEx
2645+
local mainLANIPaddrRegEx netwkIPv4AddrRegEx netwkIPv4AddrX
25972646

25982647
accessRestriction="$(nvram get enable_acc_restriction)"
25992648
if [ -z "$accessRestriction" ] || [ "$accessRestriction" -eq 0 ]
26002649
then return 0 ; fi
26012650

26022651
restrictRuleList="$(nvram get restrict_rulelist)"
2603-
netIPv4Addr="${mainLAN_IPaddr%.*}.0"
2652+
if [ -n "$mainNET_IPaddr" ]
2653+
then
2654+
netwkIPv4AddrX="${mainNET_IPaddr%/*}"
2655+
netwkIPv4AddrX="${netwkIPv4AddrX%.*}"
2656+
else
2657+
netwkIPv4AddrX="${mainLAN_IPaddr%.*}"
2658+
fi
2659+
netwkIPv4AddrX="${netwkIPv4AddrX}.${IPv4octet_RegEx}"
2660+
netwkIPv4AddrRegEx="$(echo "$netwkIPv4AddrX" | sed 's/\./\\./g')"
2661+
mainLANIPaddrRegEx="$(echo "$mainLAN_IPaddr" | sed 's/\./\\./g')"
26042662

26052663
# Router IP address MUST have access to WebGUI #
2606-
lanIPaddrRegEx1=">${mainLAN_IPaddr}>[13]"
2607-
lanIPaddrRegEx2=">${mainLAN_IPaddr}/32>[13]"
2608-
lanIPaddrRegEx3=">${netIPv4Addr}/(2[4-9]|3[0-1])>[13]"
2664+
cidrIPaddrRegEx="${netwkIPv4AddrRegEx}/(2[4-9]|3[0-1])"
2665+
lanIPaddrRegEx1=">${mainLANIPaddrRegEx}>[13]"
2666+
lanIPaddrRegEx2=">${mainLANIPaddrRegEx}/(2[4-9]|3[0-2])>[13]"
2667+
lanIPaddrRegEx3=">${cidrIPaddrRegEx}>[13]"
26092668

2610-
if echo "$restrictRuleList" | grep -qE "$lanIPaddrRegEx1|$lanIPaddrRegEx2|$lanIPaddrRegEx3"
2669+
if echo "$restrictRuleList" | grep -qE "$lanIPaddrRegEx1|$lanIPaddrRegEx2"
26112670
then return 0 ; fi
26122671

2672+
cidrIPaddrEntry="$(echo "$restrictRuleList" | grep -oE "$lanIPaddrRegEx3")"
2673+
if [ -n "$cidrIPaddrEntry" ]
2674+
then
2675+
cidrIPaddrBlock="$(echo "$cidrIPaddrEntry" | grep -oE "$cidrIPaddrRegEx")"
2676+
for cidrIPblock in $cidrIPaddrBlock
2677+
do
2678+
if _CIDR_IPaddrBlockContainsIPaddr_ "$cidrIPblock" "$mainLAN_IPaddr"
2679+
then return 0 ; fi
2680+
done
2681+
fi
2682+
26132683
printf "\n${REDct}*WARNING*: The \"Enable Access Restrictions\" option is currently active.${NOct}"
26142684
printf "\nTo allow webGUI login access you must add the router IP address ${GRNct}${mainLAN_IPaddr}${NOct}
26152685
with the \"${GRNct}Web UI${NOct}\" access type on the \"Access restriction list\" panel."
@@ -6477,11 +6547,6 @@ _SetSecondaryEMailAddress_()
64776547
_WaitForEnterKey_ "$advnMenuReturnPromptStr"
64786548
}
64796549

6480-
# RegExp for IPv4 address #
6481-
readonly IPv4octet_RegEx="([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])"
6482-
readonly IPv4addrs_RegEx="(${IPv4octet_RegEx}\.){3}${IPv4octet_RegEx}"
6483-
readonly IPv4privt_RegEx="(^10\.|^172\.1[6-9]\.|^172\.2[0-9]\.|^172\.3[0-1]\.|^192\.168\.)"
6484-
64856550
##----------------------------------------##
64866551
## Modified by Martinski W. [2024-Apr-06] ##
64876552
##----------------------------------------##

0 commit comments

Comments
 (0)