tools/mesh-cfgclient: Add support for Static OOB key 50/228950/1
authorBrian Gix <brian.gix@intel.com>
Wed, 11 Mar 2020 22:59:40 +0000 (15:59 -0700)
committerAnupam Roy <anupam.r@samsung.com>
Thu, 26 Mar 2020 10:36:15 +0000 (16:06 +0530)
This fixes a bug that didn't allow 16 octet Static OOB strings during
provisioning.

Change-Id: I08c04784d920b4cf4dcff0e172e9095d00be7bc7
Signed-off-by: Anupam Roy <anupam.r@samsung.com>
tools/mesh-cfgclient.c
tools/mesh/agent.c

index 81b87e0..cfeb64a 100644 (file)
@@ -374,12 +374,11 @@ static void agent_input_done(oob_type_t type, void *buf, uint16_t len,
        struct l_dbus_message *reply = NULL;
        struct l_dbus_message_builder *builder;
        uint32_t val_u32;
-       uint8_t ascii[16];
+       uint8_t oob_data[16];
 
        switch (type) {
        case NONE:
        case OUTPUT:
-       case HEXADECIMAL:
        default:
                break;
 
@@ -388,12 +387,18 @@ static void agent_input_done(oob_type_t type, void *buf, uint16_t len,
                        bt_shell_printf("Bad input length\n");
                        break;
                }
+               /* Fall Through */
 
-               memset(ascii, 0, 16);
-               memcpy(ascii, buf, len);
+       case HEXADECIMAL:
+               if (len > 16) {
+                       bt_shell_printf("Bad input length\n");
+                       break;
+               }
+               memset(oob_data, 0, 16);
+               memcpy(oob_data, buf, len);
                reply = l_dbus_message_new_method_return(msg);
                builder = l_dbus_message_builder_new(reply);
-               append_byte_array(builder, ascii, 16);
+               append_byte_array(builder, oob_data, 16);
                l_dbus_message_builder_finalize(builder);
                l_dbus_message_builder_destroy(builder);
                break;
@@ -541,12 +546,16 @@ static struct l_dbus_message *prompt_static_call(struct l_dbus *dbus,
                return l_dbus_message_new_error(msg, dbus_err_fail, NULL);
        }
 
-       if (!strcmp(str, "in-alpha") && !strcmp(str, "out-alpha"))
-               return l_dbus_message_new_error(msg, dbus_err_support, NULL);
-
-       l_dbus_message_ref(msg);
-       agent_input_request(ASCII, 8, "Enter displayed Ascii code",
+       if (!strcmp(str, "in-alpha") || !strcmp(str, "out-alpha")) {
+               l_dbus_message_ref(msg);
+               agent_input_request(ASCII, 8, "Enter displayed Ascii code",
                                                        agent_input_done, msg);
+       } else if (!strcmp(str, "static-oob")) {
+               l_dbus_message_ref(msg);
+               agent_input_request(HEXADECIMAL, 16, "Enter Static Key",
+                                                       agent_input_done, msg);
+       } else
+               return l_dbus_message_new_error(msg, dbus_err_support, NULL);
 
        return NULL;
 }
index 1f83347..0258a38 100644 (file)
@@ -81,15 +81,16 @@ static bool str2hex(const char *str, uint16_t in_len, uint8_t *out,
 static void response_hexadecimal(const char *input, void *user_data)
 {
        uint8_t buf[MAX_HEXADECIMAL_OOB_LEN];
+       uint16_t len = pending_request.len;
 
        if (!str2hex(input, strlen(input), buf, pending_request.len) ) {
                bt_shell_printf("Incorrect input: expecting %d hex octets\n",
                          pending_request.len);
-               return;
+               len = 0;
        }
 
        if (pending_request.cb)
-               pending_request.cb(HEXADECIMAL, buf, pending_request.len,
+               pending_request.cb(HEXADECIMAL, buf, len,
                                        pending_request.user_data);
 
        reset_input_request();
@@ -98,14 +99,15 @@ static void response_hexadecimal(const char *input, void *user_data)
 static void response_decimal(const char *input, void *user_data)
 {
        uint8_t buf[DECIMAL_OOB_LEN];
+       uint16_t len = DECIMAL_OOB_LEN;
 
        if (strlen(input) > pending_request.len)
-               return;
+               len = 0;
 
        bt_put_be32(atoi(input), buf);
 
        if (pending_request.cb)
-               pending_request.cb(DECIMAL, buf, DECIMAL_OOB_LEN,
+               pending_request.cb(DECIMAL, buf, len,
                                        pending_request.user_data);
 
        reset_input_request();