ZigBee Green Power: fix loading of keys during runtime

Register a post update calback to ensure that the keys are loaded
for all entries and not only the ones last edited

Bug: 13031
Change-Id: Ib670f9e1c702546631df5fe6094b02484806dd00
Reviewed-on: https://code.wireshark.org/review/18416
Petri-Dish: Pascal Quantin <pascal.quantin@gmail.com>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Peter Wu <peter@lekensteyn.nl>
Reviewed-by: Pascal Quantin <pascal.quantin@gmail.com>
This commit is contained in:
Pascal Quantin 2016-10-23 18:51:09 +02:00
parent 3c3f592ebc
commit a3a20531b1
1 changed files with 18 additions and 2 deletions

View File

@ -335,6 +335,10 @@ typedef struct {
guint8 key[ZBEE_SEC_CONST_KEYSIZE];
} uat_key_record_t;
static const guint8 empty_key[ZBEE_SEC_CONST_KEYSIZE] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
static uat_key_record_t *gp_uat_key_records = NULL;
static uat_t *zbee_gp_sec_key_table_uat;
@ -657,6 +661,18 @@ uat_key_record_update_cb(void *r, char **err)
return TRUE;
}
static void uat_key_record_post_update_cb(void) {
guint i;
for (i = 0; i < num_uat_key_records; i++) {
if (memcmp(gp_uat_key_records[i].key, empty_key, ZBEE_SEC_CONST_KEYSIZE) == 0) {
/* key was not loaded from string yet */
zbee_gp_security_parse_key(gp_uat_key_records[i].string, gp_uat_key_records[i].key,
gp_uat_key_records[i].byte_order);
}
}
}
/**
*Dissector for ZigBee Green Power commissioning.
*
@ -1483,7 +1499,7 @@ gp_init_zbee_security(void)
for (i = 0; gp_uat_key_records && (i < num_uat_key_records); i++) {
key_record.frame_num = 0;
key_record.label = g_strdup(gp_uat_key_records[i].label);
memcpy(&key_record.key, &gp_uat_key_records[i].key, ZBEE_SEC_CONST_KEYSIZE);
memcpy(key_record.key, gp_uat_key_records[i].key, ZBEE_SEC_CONST_KEYSIZE);
zbee_gp_keyring = g_slist_prepend(zbee_gp_keyring, g_memdup(&key_record, sizeof(key_record_t)));
}
}
@ -1841,7 +1857,7 @@ proto_register_zbee_nwk_gp(void)
zbee_gp_sec_key_table_uat = uat_new("ZigBee GP Security Keys", sizeof(uat_key_record_t), "zigbee_gp_keys", TRUE,
&gp_uat_key_records, &num_uat_key_records, UAT_AFFECTS_DISSECTION, NULL, uat_key_record_copy_cb,
uat_key_record_update_cb, uat_key_record_free_cb, NULL, key_uat_fields);
uat_key_record_update_cb, uat_key_record_free_cb, uat_key_record_post_update_cb, key_uat_fields);
prefs_register_uat_preference(gp_zbee_prefs, "gp_key_table", "Pre-configured GP Security Keys",
"Pre-configured GP Security Keys.", zbee_gp_sec_key_table_uat);