|
4 | 4 | # |
5 | 5 | # Original Creation Date: 2023-Oct-01 by @ExtremeFiretop. |
6 | 6 | # Official Co-Author: @Martinski W. - Date: 2023-Nov-01 |
7 | | -# Last Modified: 2024-Aug-16 |
| 7 | +# Last Modified: 2024-Aug-18 |
8 | 8 | ################################################################### |
9 | 9 | set -u |
10 | 10 |
|
@@ -113,13 +113,22 @@ else cronListCmd="crontab -l" |
113 | 113 | fi |
114 | 114 |
|
115 | 115 | ##----------------------------------------## |
116 | | -## Modified by Martinski W. [2024-May-31] ## |
| 116 | +## Modified by Martinski W. [2024-Aug-17] ## |
117 | 117 | ##----------------------------------------## |
118 | 118 | inMenuMode=true |
119 | 119 | isInteractive=false |
120 | 120 | FlashStarted=false |
121 | 121 |
|
| 122 | +# Main LAN Network Info # |
| 123 | +readonly mainLAN_IFname="$(nvram get lan_ifname)" |
122 | 124 | 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 | + |
123 | 132 | readonly fwInstalledBaseVers="$(nvram get firmver | sed 's/\.//g')" |
124 | 133 | readonly fwInstalledBuildVers="$(nvram get buildno)" |
125 | 134 | readonly fwInstalledExtendNum="$(nvram get extendno)" |
@@ -2588,28 +2597,89 @@ _GetPasswordInput_() |
2588 | 2597 | } |
2589 | 2598 |
|
2590 | 2599 | ##-------------------------------------## |
2591 | | -## Added by Martinski W. [2024-Aug-16] ## |
| 2600 | +## Added by Martinski W. [2024-Aug-18] ## |
2592 | 2601 | ##-------------------------------------## |
| 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 | +##----------------------------------------## |
2593 | 2640 | _CheckWebGUILoginAccessOK_() |
2594 | 2641 | { |
2595 | | - local accessRestriction restrictRuleList netIPv4Addr |
| 2642 | + local accessRestriction restrictRuleList |
2596 | 2643 | local lanIPaddrRegEx1 lanIPaddrRegEx2 lanIPaddrRegEx3 |
| 2644 | + local cidrIPaddrEntry cidrIPaddrBlock cidrIPaddrRegEx |
| 2645 | + local mainLANIPaddrRegEx netwkIPv4AddrRegEx netwkIPv4AddrX |
2597 | 2646 |
|
2598 | 2647 | accessRestriction="$(nvram get enable_acc_restriction)" |
2599 | 2648 | if [ -z "$accessRestriction" ] || [ "$accessRestriction" -eq 0 ] |
2600 | 2649 | then return 0 ; fi |
2601 | 2650 |
|
2602 | 2651 | 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')" |
2604 | 2662 |
|
2605 | 2663 | # 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]" |
2609 | 2668 |
|
2610 | | - if echo "$restrictRuleList" | grep -qE "$lanIPaddrRegEx1|$lanIPaddrRegEx2|$lanIPaddrRegEx3" |
| 2669 | + if echo "$restrictRuleList" | grep -qE "$lanIPaddrRegEx1|$lanIPaddrRegEx2" |
2611 | 2670 | then return 0 ; fi |
2612 | 2671 |
|
| 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 | + |
2613 | 2683 | printf "\n${REDct}*WARNING*: The \"Enable Access Restrictions\" option is currently active.${NOct}" |
2614 | 2684 | printf "\nTo allow webGUI login access you must add the router IP address ${GRNct}${mainLAN_IPaddr}${NOct} |
2615 | 2685 | with the \"${GRNct}Web UI${NOct}\" access type on the \"Access restriction list\" panel." |
@@ -6477,11 +6547,6 @@ _SetSecondaryEMailAddress_() |
6477 | 6547 | _WaitForEnterKey_ "$advnMenuReturnPromptStr" |
6478 | 6548 | } |
6479 | 6549 |
|
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 | | - |
6485 | 6550 | ##----------------------------------------## |
6486 | 6551 | ## Modified by Martinski W. [2024-Apr-06] ## |
6487 | 6552 | ##----------------------------------------## |
|
0 commit comments