hciconfig: Retrieve linkey from device info file
Subsystems (2)
PATCH 1/1 hciconfig: Retrieve linkey from device info file
Skip 2 first bytes of Key entry as it begins with "0x"
--- Makefile.tools | 2 +- tools/hciconfig.c | 37 ++++++++++++++++++++++++++++--------- 2 files changed, 29 insertions(+), 10 deletions(-)
Makefile.tools +1 -1
@@ -23,7 +23,7 @@ tools_hciattach_LDADD = lib/libbluetooth-private.la tools_hciconfig_SOURCES = tools/hciconfig.c tools/csr.h tools/csr.c \ src/textfile.h src/textfile.c -tools_hciconfig_LDADD = lib/libbluetooth-private.la +tools_hciconfig_LDADD = lib/libbluetooth-private.la @GLIB_LIBS@ tools_hcitool_SOURCES = tools/hcitool.c src/oui.h src/oui.c \ src/textfile.h src/textfile.c
tools/hciconfig.c +28 -9
@@ -38,6 +38,8 @@#include <sys/ioctl.h> #include <sys/socket.h> +#include <glib.h> +#include <bluetooth/bluetooth.h> #include <bluetooth/hci.h> #include <bluetooth/hci_lib.h>
@@ -1018,26 +1020,43 @@ static void cmd_voice(int ctl, int hdev, char *opt)static int get_link_key (const bdaddr_t *local,const bdaddr_t *peer,uint8_t *key) { -char filename[PATH_MAX +1 ], addr[18 ], tmp[3 ], *str; +char filename[PATH_MAX +1 ]; +char local_addr[18 ], peer_addr[18 ]; +GKeyFile *key_file; +char tmp[3 ], *str;int i; +int err =0 ; + +ba2str (local, local_addr); +ba2str (peer, peer_addr); +snprintf (filename,PATH_MAX ,STORAGEDIR "/%s/%s/info" , local_addr, + peer_addr); + filename[PATH_MAX ] ='\0' ; + key_file =g_key_file_new (); -ba2str (local, addr); -create_name (filename,PATH_MAX ,STORAGEDIR , addr,"linkkeys" ); +if (!g_key_file_load_from_file (key_file, filename,0 ,NULL )) { + err = -EIO ; + goto failed; + } -ba2str (peer, addr); - str =textfile_get (filename, addr); -if (!str) -return -EIO ; + str =g_key_file_get_string (key_file,"LinkKey" ,"Key" ,NULL ); +if (!str) { + err = -EIO ; + goto failed; + }memset (tmp,0 ,sizeof (tmp));for (i =0 ; i <16 ; i++) { -memcpy (tmp, str + (i *2 ),2 ); +memcpy (tmp, str +2 + (i *2 ),2 ); key[i] = (uint8_t )strtol (tmp,NULL ,16 ); }free (str); -return 0 ; +failed: +g_key_file_free (key_file); + +return err; }static void cmd_putkey (int ctl,int hdev,char *opt)
Signature · 1 line
1.7.9.5
Marcel Holtmann
maintainerHi Fred,
Quoted 5 lines
Skip 2 first bytes of Key entry as it begins with "0x"
--- Makefile.tools | 2 +- tools/hciconfig.c | 37 ++++++++++++++++++++++++++++--------- 2 files changed, 29 insertions(+), 10 deletions(-)
this is not worth it. I rather have the feature in hciconfig removed.
Regards
Marcel
PATCH v2 1/1 hciconfig: Remove putkey command
--- tools/hciconfig.c | 64 ----------------------------------------------------- 1 file changed, 64 deletions(-)
tools/hciconfig.c +0 -64
@@ -1015,69 +1015,6 @@ static void cmd_voice(int ctl, int hdev, char *opt) } } -static int get_link_key (const bdaddr_t *local,const bdaddr_t *peer, -uint8_t *key) -{ -char filename[PATH_MAX +1 ], addr[18 ], tmp[3 ], *str; -int i; - -ba2str (local, addr); -create_name (filename,PATH_MAX ,STORAGEDIR , addr,"linkkeys" ); - -ba2str (peer, addr); - str =textfile_get (filename, addr); -if (!str) -return -EIO ; - -memset (tmp,0 ,sizeof (tmp)); -for (i =0 ; i <16 ; i++) { -memcpy (tmp, str + (i *2 ),2 ); - key[i] = (uint8_t )strtol (tmp,NULL ,16 ); - } - -free (str); - -return 0 ; -} - -static void cmd_putkey (int ctl,int hdev,char *opt) -{ -struct hci_dev_info di; -bdaddr_t bdaddr; -uint8_t key[16 ]; -int dd; - -if (!opt) -return ; - - dd =hci_open_dev (hdev); -if (dd <0 ) { -fprintf (stderr,"Can't open device hci%d: %s (%d)\n" , - hdev,strerror (errno), errno); -exit (1 ); - } - -if (hci_devinfo (hdev, &di) <0 ) { -fprintf (stderr,"Can't get device info for hci%d: %s (%d)\n" , - hdev,strerror (errno), errno); -exit (1 ); - } - -str2ba (opt, &bdaddr); -if (get_link_key (&di.bdaddr, &bdaddr, key) <0 ) { -fprintf (stderr,"Can't find link key for %s on hci%d\n" , opt, hdev); -exit (1 ); - } - -if (hci_write_stored_link_key (dd, &bdaddr, key,1000 ) <0 ) { -fprintf (stderr,"Can't write stored link key on hci%d: %s (%d)\n" , - hdev,strerror (errno), errno); -exit (1 ); - } - -hci_close_dev (dd); -} -static void cmd_delkey (int ctl,int hdev,char *opt) {bdaddr_t bdaddr;
@@ -1984,7 +1921,6 @@ static struct { { "sspmode", cmd_ssp_mode, "[mode]", "Get/Set Simple Pairing Mode" }, { "aclmtu", cmd_aclmtu, "<mtu:pkt>", "Set ACL MTU and number of packets" }, { "scomtu", cmd_scomtu, "<mtu:pkt>", "Set SCO MTU and number of packets" }, - { "putkey", cmd_putkey, "<bdaddr>", "Store link key on the device" }, { "delkey", cmd_delkey, "<bdaddr>", "Delete link key from the device" }, { "oobdata", cmd_oob_data, 0, "Get local OOB data" }, { "commands", cmd_commands, 0, "Display supported commands" },
Signature · 1 line
1.7.9.5
Marcel Holtmann
maintainerRe: [PATCH v2] hciconfig: Remove putkey command
Hi Fred,
Quoted 2 lines
tools/hciconfig.c | 64 ----------------------------------------------------- 1 file changed, 64 deletions(-)
that command does have a manpage entry.
Regards
Marcel
Re: [PATCH v2] hciconfig: Remove putkey command
Hi,
Quoted 4 lines · Marcel Holtmann
Quoted 2 lines
tools/hciconfig.c | 64 ----------------------------------------------------- 1 file changed, 64 deletions(-)that command does have a manpage entry.
And I'd appreciate an explanation in the commit message body for *why* the command is removed. It's not like it's going to be obvious for anybody looking at the commit history, at least not a more than a year from now.
Johan
PATCH v3 1/1 hciconfig: Remove putkey command
In reply to Marcel HoltmannWith new storage architecture legacy storage "linkkeys" file doesn't exist anymore.
--- tools/hciconfig.8 | 5 ----- tools/hciconfig.c | 64 ----------------------------------------------------- 2 files changed, 69 deletions(-)
tools/hciconfig.8 +0 -5
@@ -212,11 +212,6 @@ bytes and SCO buffer size to .I pkt packets. .TP -.BI putkey " <bdaddr>" -This command stores the link key for -.I bdaddr -on the device. -.TP .BI delkey " <bdaddr>" This command deletes the stored link key for .I bdaddr
tools/hciconfig.c +0 -64
76 lines not on this page · raw message
Signature · 1 line
1.7.9.5
Johan Hedberg
AppliedRe: [PATCH v3] hciconfig: Remove putkey command
Hi Frederic,
Quoted 6 lines · Frédéric Danis
With new storage architecture legacy storage "linkkeys" file doesn't exist anymore.
--- tools/hciconfig.8 | 5 ----- tools/hciconfig.c | 64 ----------------------------------------------------- 2 files changed, 69 deletions(-)
Applied. Thanks.
Johan