diff options
Diffstat (limited to 'vendor/blueimp/jquery-file-upload/wdio/bin/forward-ports.sh')
-rw-r--r-- | vendor/blueimp/jquery-file-upload/wdio/bin/forward-ports.sh | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/vendor/blueimp/jquery-file-upload/wdio/bin/forward-ports.sh b/vendor/blueimp/jquery-file-upload/wdio/bin/forward-ports.sh new file mode 100644 index 000000000..20bd43282 --- /dev/null +++ b/vendor/blueimp/jquery-file-upload/wdio/bin/forward-ports.sh @@ -0,0 +1,85 @@ +#!/bin/sh + +# +# Adds TCP/UDP port forwarding rules to the pf firewall (MacOS/BSD). +# +# Adds rules for both TCP and UDP in addition to those from /etc/pf.conf. +# Requires an existing rdr-anchor entry in /etc/pf.conf. +# Only adds rules temporarily, without changing any files. +# +# Usage: ./forward-ports.sh [[nic:]port=[ip:]port [...]] +# +# If no network interface is given, forwards from all interfaces. +# If no IP is given, forwards to 127.0.0.1. +# If no port forwarding rule is given, resets to the rules from /etc/pf.conf. +# +# e.g. forwarding ports 80 and 443 on network interface en0 to ports 8080 and +# 8443 on localhost respectively: +# ./forward-ports.sh en0:80=8080 en0:443=8443 +# +# Copyright 2019, Sebastian Tschan +# https://blueimp.net +# +# Licensed under the MIT license: +# https://opensource.org/licenses/MIT +# + +set -e + +RULES= +NEWLINE=' +' + +print_usage_exit() { + if [ -n "$RULES" ]; then + printf '\nError in custom rules:\n%s\n' "$RULES" >&2 + fi + echo "Usage: $0 [[nic:]port=[ip:]port [...]]" >&2 + exit 1 +} + +print_nat_rules() { + echo + echo 'Loaded NAT rules:' + sudo pfctl -s nat 2>/dev/null + echo +} + +# Print usage and exit if option arguments like "-h" are used: +if [ "${1#-}" != "$1" ]; then print_usage_exit; fi + +while test $# -gt 0; do + # Separate the from=to parts: + from=${1%=*} + to=${1#*=} + # If from part has a nic defined, extract it, else forward from all: + case "$from" in + *:*) nic="on ${from%:*}";; + *) nic=;; + esac + # Extract the port to forward from: + from_port=${from##*:} + # If to part has an IP defined, extract it, else forward to 127.0.0.1: + case "$to" in + *:*) to_ip=${to%:*};; + *) to_ip=127.0.0.1;; + esac + # Extract the port to forward to: + to_port=${to##*:} + # Create the packet filter (pf) forwarding rule for both TCP and UDP: + rule=$( + printf \ + 'rdr pass %s inet proto %s from any to any port %s -> %s port %s' \ + "$nic" '{tcp udp}' "$from_port" "$to_ip" "$to_port" + ) + # Add it to the list of rules: + RULES="$RULES$rule$NEWLINE" + shift +done + +# Add the rules after the line matching "rdr-anchor" in /etc/pf.conf, print the +# combined rules to STDOUT and load the rules into pf from STDIN. +# Finally, display the loaded NAT rules or print the script usage on failure: +# shellcheck disable=SC2015 +printf %s "$RULES" | sed -e '/rdr-anchor/r /dev/stdin' /etc/pf.conf | +sudo pfctl -Ef - 2>/dev/null && print_nat_rules || print_usage_exit |