diff options
author | Luiz Augusto von Dentz <luiz.von.dentz@intel.com> | 2022-04-15 13:48:39 -0700 |
---|---|---|
committer | Luiz Augusto von Dentz <luiz.von.dentz@intel.com> | 2022-04-18 16:52:56 -0700 |
commit | 5fb27418e7decc30000f57f2f7911dd25c24cb59 (patch) | |
tree | f1fa4f30d395ab676f69b42c1717a778b62ecafb /src/adapter.c | |
parent | 180cf09933b2d8eb03972c8638063429fe5fece5 (diff) | |
download | bluez-5fb27418e7decc30000f57f2f7911dd25c24cb59.tar.gz |
storage: Add support for STATE_DIRECTORY environment variable
When running as a systemd service the STATE_DIRECTORY environment
variable maybe set:
https://www.freedesktop.org/software/systemd/man/systemd.exec.html
Diffstat (limited to 'src/adapter.c')
-rw-r--r-- | src/adapter.c | 123 |
1 files changed, 63 insertions, 60 deletions
diff --git a/src/adapter.c b/src/adapter.c index f1197684e..db2624c60 100644 --- a/src/adapter.c +++ b/src/adapter.c @@ -535,9 +535,8 @@ static void store_adapter_info(struct btd_adapter *adapter) g_key_file_set_string(key_file, "General", "Alias", adapter->stored_alias); - snprintf(filename, PATH_MAX, STORAGEDIR "/%s/settings", + create_filename(filename, PATH_MAX, "/%s/settings", btd_adapter_get_storage_dir(adapter)); - create_file(filename, 0600); str = g_key_file_to_data(key_file, &length, NULL); @@ -3982,7 +3981,7 @@ static int load_irk(struct btd_adapter *adapter, uint8_t *irk) char *str_irk; int ret; - snprintf(filename, PATH_MAX, STORAGEDIR "/%s/identity", + create_filename(filename, PATH_MAX, "/%s/identity", btd_adapter_get_storage_dir(adapter)); key_file = g_key_file_new(); @@ -4653,8 +4652,8 @@ static void load_devices(struct btd_adapter *adapter) DIR *dir; struct dirent *entry; - snprintf(dirname, PATH_MAX, STORAGEDIR "/%s", - btd_adapter_get_storage_dir(adapter)); + create_filename(dirname, PATH_MAX, "/%s", + btd_adapter_get_storage_dir(adapter)); dir = opendir(dirname); if (!dir) { @@ -4682,7 +4681,7 @@ static void load_devices(struct btd_adapter *adapter) if (entry->d_type != DT_DIR || bachk(entry->d_name) < 0) continue; - snprintf(filename, PATH_MAX, STORAGEDIR "/%s/%s/info", + create_filename(filename, PATH_MAX, "/%s/%s/info", btd_adapter_get_storage_dir(adapter), entry->d_name); @@ -5669,7 +5668,7 @@ static void convert_names_entry(char *key, char *value, void *user_data) if (bachk(str) != 0) return; - snprintf(filename, PATH_MAX, STORAGEDIR "/%s/cache/%s", address, str); + create_filename(filename, PATH_MAX, "/%s/cache/%s", address, str); create_file(filename, 0600); key_file = g_key_file_new(); @@ -5894,7 +5893,7 @@ static void convert_entry(char *key, char *value, void *user_data) struct stat st; int err; - snprintf(filename, PATH_MAX, STORAGEDIR "/%s/%s", + create_filename(filename, PATH_MAX, "/%s/%s", converter->address, key); err = stat(filename, &st); @@ -5902,7 +5901,7 @@ static void convert_entry(char *key, char *value, void *user_data) return; } - snprintf(filename, PATH_MAX, STORAGEDIR "/%s/%s/info", + create_filename(filename, PATH_MAX, "/%s/%s/info", converter->address, key); key_file = g_key_file_new(); @@ -5938,7 +5937,7 @@ static void convert_file(char *file, char *address, char filename[PATH_MAX]; struct device_converter converter; - snprintf(filename, PATH_MAX, STORAGEDIR "/%s/%s", address, file); + create_filename(filename, PATH_MAX, "/%s/%s", address, file); converter.address = address; converter.cb = cb; @@ -6009,7 +6008,7 @@ static void store_sdp_record(char *local, char *peer, int handle, char *value) char *data; gsize length = 0; - snprintf(filename, PATH_MAX, STORAGEDIR "/%s/cache/%s", local, peer); + create_filename(filename, PATH_MAX, "/%s/cache/%s", local, peer); key_file = g_key_file_new(); if (!g_key_file_load_from_file(key_file, filename, 0, &gerr)) { @@ -6066,7 +6065,7 @@ static void convert_sdp_entry(char *key, char *value, void *user_data) /* Check if the device directory has been created as records should * only be converted for known devices */ - snprintf(filename, PATH_MAX, STORAGEDIR "/%s/%s", src_addr, dst_addr); + create_filename(filename, PATH_MAX, "/%s/%s", src_addr, dst_addr); err = stat(filename, &st); if (err || !S_ISDIR(st.st_mode)) @@ -6092,7 +6091,7 @@ static void convert_sdp_entry(char *key, char *value, void *user_data) if (!gatt_parse_record(rec, &uuid, &psm, &start, &end)) goto failed; - snprintf(filename, PATH_MAX, STORAGEDIR "/%s/%s/attributes", src_addr, + create_filename(filename, PATH_MAX, "/%s/%s/attributes", src_addr, dst_addr); key_file = g_key_file_new(); @@ -6153,8 +6152,8 @@ static void convert_primaries_entry(char *key, char *value, void *user_data) sdp_uuid16_create(&uuid, GATT_PRIM_SVC_UUID); prim_uuid = bt_uuid2string(&uuid); - snprintf(filename, PATH_MAX, STORAGEDIR "/%s/%s/attributes", address, - key); + create_filename(filename, PATH_MAX, "/%s/%s/attributes", address, key); + key_file = g_key_file_new(); if (!g_key_file_load_from_file(key_file, filename, 0, &gerr)) { error("Unable to load key file from %s: (%s)", filename, @@ -6193,7 +6192,7 @@ static void convert_primaries_entry(char *key, char *value, void *user_data) g_free(data); g_key_file_free(key_file); - snprintf(filename, PATH_MAX, STORAGEDIR "/%s/%s/info", address, key); + create_filename(filename, PATH_MAX, "/%s/%s/info", address, key); key_file = g_key_file_new(); if (!g_key_file_load_from_file(key_file, filename, 0, &gerr)) { @@ -6243,14 +6242,14 @@ static void convert_ccc_entry(char *key, char *value, void *user_data) /* Check if the device directory has been created as records should * only be converted for known devices */ - snprintf(filename, PATH_MAX, STORAGEDIR "/%s/%s", src_addr, dst_addr); + create_filename(filename, PATH_MAX, "/%s/%s", src_addr, dst_addr); err = stat(filename, &st); if (err || !S_ISDIR(st.st_mode)) return; - snprintf(filename, PATH_MAX, STORAGEDIR "/%s/%s/ccc", src_addr, - dst_addr); + create_filename(filename, PATH_MAX, "/%s/%s/ccc", src_addr, dst_addr); + key_file = g_key_file_new(); if (!g_key_file_load_from_file(key_file, filename, 0, &gerr)) { error("Unable to load key file from %s: (%s)", filename, @@ -6299,14 +6298,14 @@ static void convert_gatt_entry(char *key, char *value, void *user_data) /* Check if the device directory has been created as records should * only be converted for known devices */ - snprintf(filename, PATH_MAX, STORAGEDIR "/%s/%s", src_addr, dst_addr); + create_filename(filename, PATH_MAX, "/%s/%s", src_addr, dst_addr); err = stat(filename, &st); if (err || !S_ISDIR(st.st_mode)) return; - snprintf(filename, PATH_MAX, STORAGEDIR "/%s/%s/gatt", src_addr, - dst_addr); + create_filename(filename, PATH_MAX, "/%s/%s/gatt", src_addr, dst_addr); + key_file = g_key_file_new(); if (!g_key_file_load_from_file(key_file, filename, 0, &gerr)) { error("Unable to load key file from %s: (%s)", filename, @@ -6354,14 +6353,14 @@ static void convert_proximity_entry(char *key, char *value, void *user_data) /* Check if the device directory has been created as records should * only be converted for known devices */ - snprintf(filename, PATH_MAX, STORAGEDIR "/%s/%s", src_addr, key); + create_filename(filename, PATH_MAX, "/%s/%s", src_addr, key); err = stat(filename, &st); if (err || !S_ISDIR(st.st_mode)) return; - snprintf(filename, PATH_MAX, STORAGEDIR "/%s/%s/proximity", src_addr, - key); + create_filename(filename, PATH_MAX, "/%s/%s/proximity", src_addr, key); + key_file = g_key_file_new(); if (!g_key_file_load_from_file(key_file, filename, 0, &gerr)) { error("Unable to load key file from %s: (%s)", filename, @@ -6393,7 +6392,7 @@ static void convert_device_storage(struct btd_adapter *adapter) ba2str(&adapter->bdaddr, address); /* Convert device's name cache */ - snprintf(filename, PATH_MAX, STORAGEDIR "/%s/names", address); + create_filename(filename, PATH_MAX, "/%s/names", address); textfile_foreach(filename, convert_names_entry, address); /* Convert aliases */ @@ -6409,7 +6408,7 @@ static void convert_device_storage(struct btd_adapter *adapter) convert_file("profiles", address, convert_profiles_entry, TRUE); /* Convert primaries */ - snprintf(filename, PATH_MAX, STORAGEDIR "/%s/primaries", address); + create_filename(filename, PATH_MAX, "/%s/primaries", address); textfile_foreach(filename, convert_primaries_entry, address); /* Convert linkkeys */ @@ -6425,22 +6424,22 @@ static void convert_device_storage(struct btd_adapter *adapter) convert_file("did", address, convert_did_entry, FALSE); /* Convert sdp */ - snprintf(filename, PATH_MAX, STORAGEDIR "/%s/sdp", address); + create_filename(filename, PATH_MAX, "/%s/sdp", address); textfile_foreach(filename, convert_sdp_entry, address); /* Convert ccc */ - snprintf(filename, PATH_MAX, STORAGEDIR "/%s/ccc", address); + create_filename(filename, PATH_MAX, "/%s/ccc", address); textfile_foreach(filename, convert_ccc_entry, address); /* Convert appearances */ convert_file("appearances", address, convert_appearances_entry, FALSE); /* Convert gatt */ - snprintf(filename, PATH_MAX, STORAGEDIR "/%s/gatt", address); + create_filename(filename, PATH_MAX, "/%s/gatt", address); textfile_foreach(filename, convert_gatt_entry, address); /* Convert proximity */ - snprintf(filename, PATH_MAX, STORAGEDIR "/%s/proximity", address); + create_filename(filename, PATH_MAX, "/%s/proximity", address); textfile_foreach(filename, convert_proximity_entry, address); } @@ -6457,7 +6456,7 @@ static void convert_config(struct btd_adapter *adapter, const char *filename, GError *gerr = NULL; ba2str(&adapter->bdaddr, address); - snprintf(config_path, PATH_MAX, STORAGEDIR "/%s/config", address); + create_filename(config_path, PATH_MAX, "/%s/config", address); if (read_pairable_timeout(address, &timeout) == 0) g_key_file_set_integer(key_file, "General", @@ -6495,7 +6494,8 @@ static void fix_storage(struct btd_adapter *adapter) ba2str(&adapter->bdaddr, address); - snprintf(filename, PATH_MAX, STORAGEDIR "/%s/config", address); + create_filename(filename, PATH_MAX, "/%s/config", address); + converted = textfile_get(filename, "converted"); if (!converted) return; @@ -6504,49 +6504,49 @@ static void fix_storage(struct btd_adapter *adapter) textfile_del(filename, "converted"); - snprintf(filename, PATH_MAX, STORAGEDIR "/%s/names", address); + create_filename(filename, PATH_MAX, "/%s/names", address); textfile_del(filename, "converted"); - snprintf(filename, PATH_MAX, STORAGEDIR "/%s/aliases", address); + create_filename(filename, PATH_MAX, "/%s/aliases", address); textfile_del(filename, "converted"); - snprintf(filename, PATH_MAX, STORAGEDIR "/%s/trusts", address); + create_filename(filename, PATH_MAX, "/%s/trusts", address); textfile_del(filename, "converted"); - snprintf(filename, PATH_MAX, STORAGEDIR "/%s/blocked", address); + create_filename(filename, PATH_MAX, "/%s/blocked", address); textfile_del(filename, "converted"); - snprintf(filename, PATH_MAX, STORAGEDIR "/%s/profiles", address); + create_filename(filename, PATH_MAX, "/%s/profiles", address); textfile_del(filename, "converted"); - snprintf(filename, PATH_MAX, STORAGEDIR "/%s/primaries", address); + create_filename(filename, PATH_MAX, "/%s/primaries", address); textfile_del(filename, "converted"); - snprintf(filename, PATH_MAX, STORAGEDIR "/%s/linkkeys", address); + create_filename(filename, PATH_MAX, "/%s/linkkeys", address); textfile_del(filename, "converted"); - snprintf(filename, PATH_MAX, STORAGEDIR "/%s/longtermkeys", address); + create_filename(filename, PATH_MAX, "/%s/longtermkeys", address); textfile_del(filename, "converted"); - snprintf(filename, PATH_MAX, STORAGEDIR "/%s/classes", address); + create_filename(filename, PATH_MAX, "/%s/classes", address); textfile_del(filename, "converted"); - snprintf(filename, PATH_MAX, STORAGEDIR "/%s/did", address); + create_filename(filename, PATH_MAX, "/%s/did", address); textfile_del(filename, "converted"); - snprintf(filename, PATH_MAX, STORAGEDIR "/%s/sdp", address); + create_filename(filename, PATH_MAX, "/%s/sdp", address); textfile_del(filename, "converted"); - snprintf(filename, PATH_MAX, STORAGEDIR "/%s/ccc", address); + create_filename(filename, PATH_MAX, "/%s/ccc", address); textfile_del(filename, "converted"); - snprintf(filename, PATH_MAX, STORAGEDIR "/%s/appearances", address); + create_filename(filename, PATH_MAX, "/%s/appearances", address); textfile_del(filename, "converted"); - snprintf(filename, PATH_MAX, STORAGEDIR "/%s/gatt", address); + create_filename(filename, PATH_MAX, "/%s/gatt", address); textfile_del(filename, "converted"); - snprintf(filename, PATH_MAX, STORAGEDIR "/%s/proximity", address); + create_filename(filename, PATH_MAX, "/%s/proximity", address); textfile_del(filename, "converted"); } @@ -6559,7 +6559,7 @@ static void load_config(struct btd_adapter *adapter) key_file = g_key_file_new(); - snprintf(filename, PATH_MAX, STORAGEDIR "/%s/settings", + create_filename(filename, PATH_MAX, "/%s/settings", btd_adapter_get_storage_dir(adapter)); if (stat(filename, &st) < 0) { @@ -8226,7 +8226,7 @@ static void store_link_key(struct btd_adapter *adapter, ba2str(device_get_address(device), device_addr); - snprintf(filename, PATH_MAX, STORAGEDIR "/%s/%s/info", + create_filename(filename, PATH_MAX, "/%s/%s/info", btd_adapter_get_storage_dir(adapter), device_addr); create_file(filename, 0600); @@ -8321,7 +8321,7 @@ static void store_ltk_group(struct btd_adapter *adapter, const bdaddr_t *peer, ba2str(peer, device_addr); - snprintf(filename, PATH_MAX, STORAGEDIR "/%s/%s/info", + create_filename(filename, PATH_MAX, "/%s/%s/info", btd_adapter_get_storage_dir(adapter), device_addr); key_file = g_key_file_new(); if (!g_key_file_load_from_file(key_file, filename, 0, &gerr)) { @@ -8486,7 +8486,7 @@ static void store_csrk(struct btd_adapter *adapter, const bdaddr_t *peer, ba2str(peer, device_addr); - snprintf(filename, PATH_MAX, STORAGEDIR "/%s/%s/info", + create_filename(filename, PATH_MAX, "/%s/%s/info", btd_adapter_get_storage_dir(adapter), device_addr); key_file = g_key_file_new(); @@ -8566,7 +8566,7 @@ static void store_irk(struct btd_adapter *adapter, const bdaddr_t *peer, ba2str(peer, device_addr); - snprintf(filename, PATH_MAX, STORAGEDIR "/%s/%s/info", + create_filename(filename, PATH_MAX, "/%s/%s/info", btd_adapter_get_storage_dir(adapter), device_addr); create_file(filename, 0600); @@ -8665,7 +8665,7 @@ static void store_conn_param(struct btd_adapter *adapter, const bdaddr_t *peer, DBG(""); - snprintf(filename, PATH_MAX, STORAGEDIR "/%s/%s/info", + create_filename(filename, PATH_MAX, "/%s/%s/info", btd_adapter_get_storage_dir(adapter), device_addr); key_file = g_key_file_new(); if (!g_key_file_load_from_file(key_file, filename, 0, &gerr)) { @@ -9324,8 +9324,9 @@ static void remove_keys(struct btd_adapter *adapter, ba2str(device_get_address(device), device_addr); - snprintf(filename, PATH_MAX, STORAGEDIR "/%s/%s/info", + create_filename(filename, PATH_MAX, "/%s/%s/info", btd_adapter_get_storage_dir(adapter), device_addr); + key_file = g_key_file_new(); if (!g_key_file_load_from_file(key_file, filename, 0, &gerr)) { error("Unable to load key file from %s: (%s)", filename, @@ -9419,6 +9420,7 @@ static bool get_static_addr(struct btd_adapter *adapter) struct bt_crypto *crypto; GKeyFile *file; GError *gerr = NULL; + char filename[PATH_MAX]; char **addrs; char mfg[7]; char *str; @@ -9427,11 +9429,12 @@ static bool get_static_addr(struct btd_adapter *adapter) snprintf(mfg, sizeof(mfg), "0x%04x", adapter->manufacturer); + create_filename(filename, PATH_MAX, "/addresses"); + file = g_key_file_new(); - if (!g_key_file_load_from_file(file, STORAGEDIR "/addresses", 0, - &gerr)) { + if (!g_key_file_load_from_file(file, filename, 0, &gerr)) { error("Unable to load key file from %s: (%s)", - STORAGEDIR "/addresses", gerr->message); + filename, gerr->message); g_clear_error(&gerr); } addrs = g_key_file_get_string_list(file, "Static", mfg, &len, NULL); @@ -9487,9 +9490,9 @@ static bool get_static_addr(struct btd_adapter *adapter) (const char **)addrs, len); str = g_key_file_to_data(file, &len, NULL); - if (!g_file_set_contents(STORAGEDIR "/addresses", str, len, &gerr)) { + if (!g_file_set_contents(filename, str, len, &gerr)) { error("Unable set contents for %s: (%s)", - STORAGEDIR "/addresses", gerr->message); + filename, gerr->message); g_error_free(gerr); } g_free(str); |