Lines Matching defs:key
51 struct spdk_key *key;
53 TAILQ_FOREACH(key, &g_keyring.keys, tailq) {
54 if (strcmp(keyring_get_key_name(key->name),
56 return key;
64 keyring_free_key(struct spdk_key *key)
66 assert(key->refcnt == 0);
68 free(key->name);
69 free(key);
73 keyring_put_key(struct spdk_key *key)
75 assert(key->refcnt > 0);
76 key->refcnt--;
78 if (key->refcnt == 0) {
79 assert(key->removed);
80 TAILQ_REMOVE(&g_keyring.removed_keys, key, tailq);
81 keyring_free_key(key);
86 return key->refcnt;
92 struct spdk_key *key = NULL;
100 SPDK_ERRLOG("Couldn't add key '%s' to the keyring: keyring doesn't exist\n",
112 key = calloc(1, sizeof(*key) + module->get_ctx_size());
113 if (key == NULL) {
118 key->name = strdup(opts->name);
119 if (key->name == NULL) {
124 rc = module->add_key(key, opts->ctx);
126 SPDK_ERRLOG("Failed to add key '%s' to the keyring\n", opts->name);
130 key->module = module;
131 key->refcnt = 1;
132 TAILQ_INSERT_TAIL(&g_keyring.keys, key, tailq);
135 if (rc != 0 && key != NULL) {
136 keyring_free_key(key);
143 keyring_remove_key(struct spdk_key *key)
145 assert(!key->removed);
146 key->removed = true;
147 key->module->remove_key(key);
148 TAILQ_REMOVE(&g_keyring.keys, key, tailq);
149 TAILQ_INSERT_TAIL(&g_keyring.removed_keys, key, tailq);
150 keyring_put_key(key);
156 struct spdk_key *key;
160 key = keyring_find_key(name);
161 if (key == NULL) {
167 if (key->module != module) {
173 keyring_remove_key(key);
183 struct spdk_key *key = NULL;
193 key = keyring_find_key(name);
194 if (key == NULL) {
195 SPDK_ERRLOG("Successfully probed key '%s' using module '%s', but "
196 "the key is unavailable\n", name, module->name);
200 key->probed = true;
203 /* The module is aware of the key but couldn't instantiate it */
205 SPDK_ERRLOG("Failed to probe key '%s' using module '%s': %s\n",
211 return key;
217 struct spdk_key *key;
220 key = keyring_find_key(name);
221 if (key == NULL) {
222 key = keyring_probe_key(name);
223 if (key == NULL) {
228 key->refcnt++;
232 return key;
236 spdk_keyring_put_key(struct spdk_key *key)
240 if (key == NULL) {
245 refcnt = keyring_put_key(key);
246 if (refcnt == 1 && key->probed && !key->removed) {
247 keyring_remove_key(key);
253 spdk_key_dup(struct spdk_key *key)
256 key->refcnt++;
259 return key;
263 spdk_key_get_name(struct spdk_key *key)
265 return key->name;
269 spdk_key_get_key(struct spdk_key *key, void *buf, int len)
271 struct spdk_keyring_module *module = key->module;
273 if (key->removed) {
277 return module->get_key(key, buf, len);
281 spdk_key_get_ctx(struct spdk_key *key)
283 return key + 1;
288 spdk_key_get_module(struct spdk_key *key)
290 return key->module;
307 void *ctx, void (*fn)(void *ctx, struct spdk_key *key), uint32_t flags)
309 struct spdk_key *key, *tmp;
313 TAILQ_FOREACH_SAFE(key, &g_keyring.keys, tailq, tmp) {
314 fn(ctx, key);
318 TAILQ_FOREACH_SAFE(key, &g_keyring.removed_keys, tailq, tmp) {
319 fn(ctx, key);
332 keyring_dump_key_info(struct spdk_key *key, struct spdk_json_write_ctx *w)
334 struct spdk_keyring_module *module = key->module;
336 spdk_json_write_named_string(w, "name", key->name);
338 spdk_json_write_named_bool(w, "removed", key->removed);
339 spdk_json_write_named_bool(w, "probed", key->probed);
340 spdk_json_write_named_int32(w, "refcnt", key->refcnt);
342 if (!key->removed && module->dump_info != NULL) {
343 module->dump_info(key, w);
413 struct spdk_key *key;
416 key = TAILQ_FIRST(&g_keyring.keys);
417 keyring_remove_key(key);
421 key = TAILQ_FIRST(&g_keyring.removed_keys);
422 SPDK_WARNLOG("Key '%s' still has %d references\n", key->name, key->refcnt);
423 key->refcnt = 0;
424 TAILQ_REMOVE(&g_keyring.removed_keys, key, tailq);
425 keyring_free_key(key);