Browse Source

Extended ctrl_iface SET_NETWORK to allow variables to be unset

Setting the value of the SET_NETWORK command to NULL (without quotation)
unsets the variable, i.e., removes it from configuration file. This is
needed to allow GUI programs to clear variables, e.g., identity for
EAP-AKA/SIM.
Jouni Malinen 16 years ago
parent
commit
b56c0546b7
1 changed files with 17 additions and 0 deletions
  1. 17 0
      wpa_supplicant/config.c

+ 17 - 0
wpa_supplicant/config.c

@@ -95,6 +95,14 @@ static int wpa_config_parse_str(const struct parse_data *data,
 	size_t res_len, *dst_len;
 	char **dst, *tmp;
 
+	if (os_strcmp(value, "NULL") == 0) {
+		wpa_printf(MSG_DEBUG, "Unset configuration string '%s'",
+			   data->name);
+		tmp = NULL;
+		res_len = 0;
+		goto set;
+	}
+
 	tmp = wpa_config_parse_string(value, &res_len);
 	if (tmp == NULL) {
 		wpa_printf(MSG_ERROR, "Line %d: failed to parse %s '%s'.",
@@ -127,6 +135,7 @@ static int wpa_config_parse_str(const struct parse_data *data,
 		return -1;
 	}
 
+set:
 	dst = (char **) (((u8 *) ssid) + (long) data->param1);
 	dst_len = (size_t *) (((u8 *) ssid) + (long) data->param2);
 	os_free(*dst);
@@ -1007,6 +1016,14 @@ static int wpa_config_parse_password(const struct parse_data *data,
 {
 	u8 *hash;
 
+	if (os_strcmp(value, "NULL") == 0) {
+		wpa_printf(MSG_DEBUG, "Unset configuration string 'password'");
+		os_free(ssid->eap.password);
+		ssid->eap.password = NULL;
+		ssid->eap.password_len = 0;
+		return 0;
+	}
+
 	if (os_strncmp(value, "hash:", 5) != 0) {
 		char *tmp;
 		size_t res_len;