Browse Source

Improve openFirewall()

bryan 2 years ago
parent
commit
13a3b20221
1 changed files with 50 additions and 65 deletions
  1. 50 65
      installJRMC

+ 50 - 65
installJRMC

@@ -415,10 +415,13 @@ installPackage() {
     debug "Running: ${FUNCNAME[0]}" "$@"
 
     declare -a pkg_array install_flags pkg_install_cmd
-    declare input pkg skip_check_installed silent refresh allow_downgrades no_gpg_check
+    declare long_opts input pkg 
+    declare skip_check_installed allow_downgrades silent refresh no_gpg_check
     declare -A pkg_aliases
 
-    if input=$(getopt -o +s -l skip-check-installed,allow-downgrades,no-gpg-check,refresh,silent -- "$@"); then
+    long_opts="skip-check-installed,allow-downgrades,no-gpg-check,refresh,silent"
+
+    if input=$(getopt -o +s -l "$long_opts" -- "$@"); then
         eval set -- "$input"
         while true; do
             case "$1" in
@@ -463,7 +466,9 @@ installPackage() {
         if [[ -v pkg_aliases[$pkg] ]]; then
             pkg=${pkg_aliases[$pkg]}
         fi
-        if (( skip_check_installed )) || ! (hash "$pkg" &>/dev/null || pkg_query "$pkg" &>/dev/null); then
+        if (( skip_check_installed )) || 
+        ! (hash "$pkg" &>/dev/null || 
+        pkg_query "$pkg" &>/dev/null); then
             pkg_array+=("$pkg")
         else
             debug "$pkg already installed, skipping installation"
@@ -723,7 +728,7 @@ buildRPM() {
 
 		Provides: mediacenter$MVERSION
 
-		License: Copyright 1998-2022, JRiver, Inc.  All rights reserved.  Protected by U.S. patents #7076468 and #7062468
+		License: Copyright 1998-2023, JRiver, Inc.  All rights reserved.  Protected by U.S. patents #7076468 and #7062468
 		URL: http://www.jriver.com/
 
 		%define __provides_exclude_from ^%{_libdir}/jriver/.*/.*\\.so.*$
@@ -1005,65 +1010,45 @@ restoreLicense() {
 #######################################
 # Opens ports using the system firewall tool
 # Arguments:
-#   Pre-defined service to enable
+#   1. Service name
+#   2. List of ports in firewall-cmd format
 #######################################
 openFirewall() {
     debug "Running: ${FUNCNAME[0]}" "$@"
 
-    # Create OS-specific port rules based on argument (service) name
-    declare -a f_ports # for firewall-cmd
-    declare u_ports # for ufw
-    #declare -a n_ports # for nftables
     declare port
-    if [[ "$1" == "jriver-mediacenter" ]]; then
-        f_ports=(52100-52200/tcp 1900/udp)
-        u_ports="52100:52200/tcp|1900/udp"
-        #n_ports=("tcp dport 52100-52200 accept" "udp dport 1900 accept")
-    elif [[ "$1" =~ ^(jriver-x11vnc|jriver-xvnc)$ ]]; then
-        f_ports=("$PORT"/tcp 1900/udp)
-        u_ports="$PORT/tcp|1900/udp"
-        #n_ports=("tcp dport $PORT accept" "udp dport 1900 accept")
-    fi
+    declare service="$1"
+    shift
+    # for firewall-cmd
+    declare -a f_ports=("$@")
+    # for ufw
+    declare u_ports="${*// /|}" # concatenate
+    u_ports="${u_ports//-/\//}"
 
-    # Open the ports
-    if ! case "$ID" in
-        fedora|centos|suse)
-            hash firewall-cmd 2>/dev/null || installPackage firewalld
-            if ! sudo firewall-cmd --get-services | grep -q "$1"; then
-                sudo firewall-cmd --permanent --new-service="$1" &>/dev/null
-                sudo firewall-cmd --permanent --service="$1" --set-description="$1 installed by installJRMC" &>/dev/null
-                sudo firewall-cmd --permanent --service="$1" --set-short="$1" &>/dev/null
-                for port in "${f_ports[@]}"; do
-                    sudo firewall-cmd --permanent --service="$1" --add-port="$port" &>/dev/null
-                done
-                sudo firewall-cmd --add-service "$1" --permanent &>/dev/null
-                sudo firewall-cmd --reload &>/dev/null
-            fi
-            ;;
-        debian|ubuntu)
-            # Debian ufw package state is broken on fresh installations
-            hash ufw 2>/dev/null || installPackage ufw
-            if [[ ! -f "/etc/ufw/applications.d/$1" ]]; then
-                sudo bash -c "cat <<-EOF > /etc/ufw/applications.d/$1
-					[$1]
-					title=$1
-					description=$1 installed by installJRMC
-					ports=$u_ports
-				EOF"
-            fi
-            sudo ufw app update "$1" &>/dev/null
-            sudo ufw allow "$1" &>/dev/null
-            ;;
-        arch)
-            # sysctl -w net.ipv4.ip_forward = 1
-            # sudo nft create table inet "jriver"
-            # sudo nft create chain inet "jriver" "$1" '{ type filter hook input priority 0; policy accept; }'
-            # for port in "${n_ports[@]}"; do
-            #     sudo nft add rule inet jriver "$1" handle tcp dport "$port"
-            # done
-            ;;
-    esac; then
-        err "Firewall ports could not be opened"
+    if hash firewall-cmd 2>/dev/null; then
+        if ! sudo firewall-cmd --get-services | grep -q "$service"; then
+            execute "sudo firewall-cmd --permanent --new-service=$service"
+            execute "sudo firewall-cmd --permanent --service=$service --set-description=$service installed by installJRMC"
+            execute "sudo firewall-cmd --permanent --service=$service --set-short=$service"
+            for port in "${f_ports[@]}"; do
+                execute "sudo firewall-cmd --permanent --service=$service --add-port=$port"
+            done
+            execute "sudo firewall-cmd --add-service $service --permanent"
+            execute "sudo firewall-cmd --reload"
+        fi
+    elif hash ufw 2>/dev/null; then
+        if [[ ! -f "/etc/ufw/applications.d/$service" ]]; then
+            sudo bash -c "cat <<-EOF > /etc/ufw/applications.d/$service
+				[$service]
+				title=$service
+				description=$service installed by installJRMC
+				ports=$u_ports
+			EOF"
+        fi
+        execute "sudo ufw app update $service"
+        execute "sudo ufw allow $service"
+    else
+        err "Please install firewall-cmd or ufw to open firewall ports"
         return 1
     fi
 }
@@ -1085,7 +1070,7 @@ setVNCPass() {
     if [[ -f "$vncpassfile" ]]; then
         if [[ ! -v VNCPASS ]]; then
             err "Refusing to overwrite existing $vncpassfile with an empty password"
-            err "Remove existing $vncpassfile or set --vncpass to use an empty password"
+            err "Remove existing $vncpassfile or use --vncpass ''"
             exit 1
         else
             rm -f "$vncpassfile"
@@ -1117,7 +1102,7 @@ setDisplay() {
 
     declare -g DISPLAY DISPLAYNUM NEXT_DISPLAY NEXT_DISPLAYNUM
 
-    # Check USER_DISPLAY, else environment DISPLAY, else set to :0 by default
+    # Check USER_DISPLAY, else environment DISPLAY, else set to :0
     DISPLAY="${USER_DISPLAY:-${DISPLAY:-0}}"
     DISPLAYNUM="${DISPLAY#*:}" # strip prefix
     DISPLAYNUM="${DISPLAYNUM%%.*}" # strip suffix
@@ -1222,7 +1207,7 @@ service_jriver-mediacenter() {
 
     systemctl_reload_cmd &&
     systemctl_enable_cmd "$SERVICE_NAME" &&
-    openFirewall "jriver-mediacenter"
+    openFirewall "jriver-mediacenter" "52100-52200/tcp" "1900/udp"
 }
 
 
@@ -1304,8 +1289,8 @@ service_jriver-xvnc() {
         return
     fi
     echo "Xvnc running on localhost:$PORT"
-    openFirewall "jriver-xvnc"
-    openFirewall "jriver-mediacenter"
+    openFirewall "jriver-xvnc" "$PORT/tcp"
+    openFirewall "jriver-mediacenter" "52100-52200/tcp" "1900/udp"
 }
 
 
@@ -1369,7 +1354,7 @@ service_jriver-x11vnc() {
     systemctl_reload_cmd &&
     systemctl_enable_cmd "$SERVICE_NAME" &&
     echo "x11vnc running on localhost:$PORT" &&
-    openFirewall "jriver-x11vnc"
+    openFirewall "jriver-x11vnc" "$PORT/tcp"
 }
 
 
@@ -1686,7 +1671,7 @@ main() {
             symlinkCerts
             migrateLibrary
             restoreLicense
-            openFirewall "jriver-mediacenter"
+            openFirewall "jriver-mediacenter" "52100-52200/tcp" "1900/udp"
             disableCoW
         else
             err "JRiver Media Center installation from repo failed"
@@ -1713,7 +1698,7 @@ main() {
         symlinkCerts
         migrateLibrary
         restoreLicense
-        openFirewall "jriver-mediacenter"
+        openFirewall "jriver-mediacenter" "52100-52200/tcp" "1900/udp"
         disableCoW
     fi