]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
D-Bus: Split set_cred_properties() into two functions
authorJouni Malinen <j@w1.fi>
Sun, 27 Nov 2022 07:51:58 +0000 (09:51 +0200)
committerJouni Malinen <j@w1.fi>
Sun, 27 Nov 2022 12:18:53 +0000 (14:18 +0200)
Reduce the number of intentation levels here and make this a bit more
readable.

Signed-off-by: Jouni Malinen <j@w1.fi>
wpa_supplicant/dbus/dbus_new_handlers.c

index a8146dd08d00b7ee1ccf791d4fd9a9daf7deabfd..f99aafa4d11ec61dd5687778512014011406e0e8 100644 (file)
@@ -332,6 +332,118 @@ error:
 }
 
 
+static int set_cred_property(struct wpa_cred *cred,
+                            struct wpa_dbus_dict_entry *entry)
+{
+       size_t size;
+       int ret;
+       char *value;
+
+       if (entry->type == DBUS_TYPE_ARRAY &&
+           entry->array_type == DBUS_TYPE_STRING) {
+               dbus_uint32_t i;
+
+               if (entry->array_len <= 0)
+                       return -1;
+
+               for (i = 0; i < entry->array_len; i++) {
+                       if (should_quote_opt(entry->key)) {
+                               size = os_strlen(entry->strarray_value[i]);
+
+                               size += 3;
+                               value = os_zalloc(size);
+                               if (!value)
+                                       return -1;
+
+                               ret = os_snprintf(value, size, "\"%s\"",
+                                                 entry->strarray_value[i]);
+                               if (os_snprintf_error(size, ret)) {
+                                       os_free(value);
+                                       return -1;
+                               }
+                       } else {
+                               value = os_strdup(entry->strarray_value[i]);
+                               if (!value)
+                                       return -1;
+                       }
+
+                       ret = wpa_config_set_cred(cred, entry->key, value, 0);
+                       os_free(value);
+                       if (ret < 0)
+                               return -1;
+               }
+               return 0;
+       }
+
+       if (entry->type == DBUS_TYPE_ARRAY &&
+           entry->array_type == DBUS_TYPE_BYTE) {
+               if (entry->array_len <= 0)
+                       return -1;
+
+               size = entry->array_len * 2 + 1;
+               value = os_zalloc(size);
+               if (!value)
+                       return -1;
+
+               ret = wpa_snprintf_hex(value, size,
+                                      (u8 *) entry->bytearray_value,
+                                      entry->array_len);
+               if (ret <= 0) {
+                       os_free(value);
+                       return -1;
+               }
+       } else if (entry->type == DBUS_TYPE_STRING) {
+               if (should_quote_opt(entry->key)) {
+                       size = os_strlen(entry->str_value);
+
+                       size += 3;
+                       value = os_zalloc(size);
+                       if (!value)
+                               return -1;
+
+                       ret = os_snprintf(value, size, "\"%s\"",
+                                         entry->str_value);
+                       if (os_snprintf_error(size, ret)) {
+                               os_free(value);
+                               return -1;
+                       }
+               } else {
+                       value = os_strdup(entry->str_value);
+                       if (!value)
+                               return -1;
+               }
+       } else if (entry->type == DBUS_TYPE_UINT32) {
+               size = 50;
+               value = os_zalloc(size);
+               if (!value)
+                       return -1;
+
+               ret = os_snprintf(value, size, "%u", entry->uint32_value);
+               if (os_snprintf_error(size, ret)) {
+                       os_free(value);
+                       return -1;
+               }
+       } else if (entry->type == DBUS_TYPE_INT32) {
+               size = 50;
+               value = os_zalloc(size);
+               if (!value)
+                       return -1;
+
+               ret = os_snprintf(value, size, "%d", entry->int32_value);
+               if (os_snprintf_error(size, ret)) {
+                       os_free(value);
+                       return -1;
+               }
+       } else {
+               return -1;
+       }
+
+       ret = wpa_config_set_cred(cred, entry->key, value, 0);
+       os_free(value);
+       return ret;
+}
+
+
 /**
  * set_cred_properties - Set the properties of a configured credential
  * @wpa_s: wpa_supplicant structure for a network interface
@@ -348,125 +460,28 @@ static dbus_bool_t set_cred_properties(struct wpa_supplicant *wpa_s,
 {
        struct wpa_dbus_dict_entry entry = { .type = DBUS_TYPE_STRING };
        DBusMessageIter iter_dict;
-       char *value = NULL;
 
        if (!wpa_dbus_dict_open_read(iter, &iter_dict, error))
                return FALSE;
 
        while (wpa_dbus_dict_has_dict_entry(&iter_dict)) {
-               size_t size = 50;
-               int ret;
-
-               if (!wpa_dbus_dict_get_entry(&iter_dict, &entry))
-                       goto error;
+               int res;
 
-               value = NULL;
-               if (entry.type == DBUS_TYPE_ARRAY &&
-                   entry.array_type == DBUS_TYPE_BYTE) {
-                       if (entry.array_len <= 0)
-                               goto error;
-
-                       size = entry.array_len * 2 + 1;
-                       value = os_zalloc(size);
-                       if (!value)
-                               goto error;
-
-                       ret = wpa_snprintf_hex(value, size,
-                                              (u8 *) entry.bytearray_value,
-                                              entry.array_len);
-                       if (ret <= 0)
-                               goto error;
-               } else if (entry.type == DBUS_TYPE_STRING) {
-                       if (should_quote_opt(entry.key)) {
-                               size = os_strlen(entry.str_value);
-
-                               size += 3;
-                               value = os_zalloc(size);
-                               if (!value)
-                                       goto error;
-
-                               ret = os_snprintf(value, size, "\"%s\"",
-                                                 entry.str_value);
-                               if (os_snprintf_error(size, ret))
-                                       goto error;
-                       } else {
-                               value = os_strdup(entry.str_value);
-                               if (!value)
-                                       goto error;
-                       }
-               } else if (entry.type == DBUS_TYPE_UINT32) {
-                       value = os_zalloc(size);
-                       if (!value)
-                               goto error;
-
-                       ret = os_snprintf(value, size, "%u",
-                                         entry.uint32_value);
-                       if (os_snprintf_error(size, ret))
-                               goto error;
-               } else if (entry.type == DBUS_TYPE_INT32) {
-                       value = os_zalloc(size);
-                       if (!value)
-                               goto error;
-
-                       ret = os_snprintf(value, size, "%d",
-                                         entry.int32_value);
-                       if (os_snprintf_error(size, ret))
-                               goto error;
-               } else if (entry.type == DBUS_TYPE_ARRAY &&
-                          entry.array_type == DBUS_TYPE_STRING) {
-                       dbus_uint32_t i;
-
-                       if (entry.array_len <= 0)
-                               goto error;
-
-                       for (i = 0; i < entry.array_len; i++) {
-                               if (should_quote_opt(entry.key)) {
-                                       size = os_strlen(entry.strarray_value[i]);
-
-                                       size += 3;
-                                       value = os_zalloc(size);
-                                       if (!value)
-                                               goto error;
-
-                                       ret = os_snprintf(value, size, "\"%s\"",
-                                                         entry.strarray_value[i]);
-                                       if (os_snprintf_error(size, ret))
-                                               goto error;
-                               } else {
-                                       value = os_strdup(entry.strarray_value[i]);
-                                       if (!value)
-                                               goto error;
-                               }
-
-                               ret = wpa_config_set_cred(cred, entry.key, value, 0);
-                               if (ret < 0)
-                                       goto error;
-                               os_free(value);
-                               value = NULL;
-                       }
-                       wpa_dbus_dict_entry_clear(&entry);
-                       continue;
+               if (!wpa_dbus_dict_get_entry(&iter_dict, &entry)) {
+                       res = -1;
                } else {
-                       goto error;
+                       res = set_cred_property(cred, &entry);
+                       wpa_dbus_dict_entry_clear(&entry);
                }
 
-               ret = wpa_config_set_cred(cred, entry.key, value, 0);
-               if (ret < 0)
-                       goto error;
-
-               os_free(value);
-               value = NULL;
-               wpa_dbus_dict_entry_clear(&entry);
+               if (res < 0) {
+                       dbus_set_error_const(error, DBUS_ERROR_INVALID_ARGS,
+                                            "invalid message format");
+                       return FALSE;
+               }
        }
 
        return TRUE;
-
-error:
-       os_free(value);
-       wpa_dbus_dict_entry_clear(&entry);
-       dbus_set_error_const(error, DBUS_ERROR_INVALID_ARGS,
-                            "invalid message format");
-       return FALSE;
 }