public inbox for network@lists.ipfire.org
 help / color / mirror / Atom feed
* [PATCH] wireless-networks: change encryption-mode to modes
@ 2017-08-24  9:37 Jonatan Schlag
  0 siblings, 0 replies; only message in thread
From: Jonatan Schlag @ 2017-08-24  9:37 UTC (permalink / raw)
  To: network

[-- Attachment #1: Type: text/plain, Size: 4000 bytes --]

We also use now our great +/- syntax.

Fixes: #11471

Signed-off-by: Jonatan Schlag <jonatan.schlag(a)ipfire.org>
---
 src/functions/functions.wireless-networks | 104 ++++++++++++++++++++++++++----
 1 file changed, 91 insertions(+), 13 deletions(-)

diff --git a/src/functions/functions.wireless-networks b/src/functions/functions.wireless-networks
index c1cf06a..feca20d 100644
--- a/src/functions/functions.wireless-networks
+++ b/src/functions/functions.wireless-networks
@@ -49,7 +49,7 @@ cli_wireless_network() {
 			local handle="$(wireless_network_hash "${ssid}")"
 
 			case "${key}" in
-				encryption_mode|pre_shared_key|priority)
+				modes|pre_shared_key|priority)
 					wireless_network_${key} "${handle}" "$@"
 					;;
 				show)
@@ -251,16 +251,29 @@ wireless_network_destroy() {
 	return ${EXIT_OK}
 }
 
-wireless_network_encryption_mode() {
-	if [ ! $# -eq 2 ]; then
+wireless_networks_mode_is_valid() {
+	assert [ $# -eq 1 ]
+	local mode=${1}
+
+	if isoneof mode ${WIRELESS_NETWORK_SUPPORTED_MODES}; then
+		return ${EXIT_TRUE}
+	else
+		return ${EXIT_FALSE}
+	fi
+
+}
+
+# WIRELESS_NETWORK_SUPPORTED_MODES
+wireless_network_modes() {
+	if [ ! $# -ge 2 ]; then
 		log ERROR "Not enough arguments"
 		return ${EXIT_ERROR}
 	fi
 	local handle="${1}"
-	local mode="${2}"
+	shift
 
-	if ! isoneof mode ${WIRELESS_VALID_ENCRYPTION_MODES}; then
-		log ERROR "Encryption mode '${mode}' is invalid"
+	if [ $# -eq 0 ]; then
+		log ERROR "You must pass at least one value after mode"
 		return ${EXIT_ERROR}
 	fi
 
@@ -270,15 +283,80 @@ wireless_network_encryption_mode() {
 		return ${EXIT_ERROR}
 	fi
 
-	# Validate the PSK when changing mode and reset if needed
-	if isset PSK && [ "${mode}" != "NONE" ] && \
-			! wireless_pre_shared_key_is_valid "${mode}" "${PSK}"; then
-		log WARNING "The configured pre-shared-key is incompatible with this encryption mode and has been reset"
-		PSK=""
+	# Remove duplicated entries to proceed the list safely
+	MODES="$(list_unique ${MODES})"
+
+	local modes_added
+	local modes_removed
+	local modes_set
+
+	while [ $# -gt 0 ]; do
+		local arg="${1}"
+
+		case "${arg}" in
+			+*)
+				list_append modes_added "${arg:1}"
+				;;
+			-*)
+				list_append modes_removed "${arg:1}"
+				;;
+			[A-Z0-9]*)
+				list_append modes_set "${arg}"
+				;;
+			*)
+				error "Invalid argument: ${arg}"
+				return ${EXIT_ERROR}
+				;;
+		esac
+		shift
+	done
+
+	# Check if the user is trying a mixed operation
+	if ! list_is_empty modes_set && (! list_is_empty modes_added || ! list_is_empty modes_removed); then
+		error "You cannot reset the modes list and add or remove modes at the same time"
+		return ${EXIT_ERROR}
 	fi
 
-	# Save new encryption mode
-	ENCRYPTION_MODE="${mode}"
+	# Set new modes list
+	if ! list_is_empty modes_set; then
+		# Check if all modes are valid
+		local mode
+		for mode in ${modes_set}; do
+			if ! wireless_networks_mode_is_valid ${mode}; then
+				error "Unsupported mode: ${mode}"
+				return ${EXIT_ERROR}
+			fi
+		done
+
+		MODES="${modes_set}"
+
+	# Perform incremental updates
+	else
+		local modes
+
+		# Perform all removals
+		for mode in ${modes_removed}; do
+			if ! list_remove MODES ${mode}; then
+				warning "${mode} was not on the list and could not be removed"
+			fi
+		done
+
+		for mode in ${modes_added}; do
+			if wireless_networks_mode_is_valid ${mode}; then
+				if ! list_append_unique MODES ${mode}; then
+					warning "${mode} is already on the modes list"
+				fi
+			else
+				warning "${mode} is unknown or unsupported and could not be added"
+			fi
+		done
+	fi
+
+	# Check if the list contain at least one valid mode
+	if list_is_empty MODES; then
+		error "Cannot save an empty mode list"
+		return ${EXIT_ERROR}
+	fi
 
 	if ! wireless_network_write_config "${handle}"; then
 		log ERROR "Could not write configuration settings"
-- 
2.6.3


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2017-08-24  9:37 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-08-24  9:37 [PATCH] wireless-networks: change encryption-mode to modes Jonatan Schlag

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox