MCPcopy Create free account
hub / github.com/ceph/ceph / create

Method create

src/client/FSCrypt.cc:454–493  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

452}
453
454int FSCryptKeyStore::create(const char *k, int klen, FSCryptKeyHandlerRef& key_handler, int user)
455{
456 auto key = std::make_shared<FSCryptKey>();
457
458 int r = key->init(k, klen);
459 if (r < 0) {
460 return r;
461 }
462 std::unique_lock wl{lock};
463
464 const auto& id = key->get_identifier();
465 auto iter = m.find(id);
466 if (iter != m.end()) {
467 /* found a key handler entry, check that there is a key there */
468 key_handler = iter->second;
469
470 auto& users = key_handler->get_users();
471 r = maybe_add_user(&users, user);
472
473 if (r == -EEXIST) {
474 return 0; //returns 0 regardless
475 }
476 key_handler->reset(++epoch, key);
477 } else {
478 key_handler = std::make_shared<FSCryptKeyHandler>(++epoch, key);
479
480 auto& users = key_handler->get_users();
481 r = maybe_add_user(&users, user);
482 if (r == -EEXIST) {
483 return 0; //returns 0 regardless
484 }
485 key_handler->present = true;
486
487 auto di = new FSCryptDecryptedInodes();
488 key_handler->di = std::shared_ptr<FSCryptDecryptedInodes>((FSCryptDecryptedInodes *)di);
489 m[id] = key_handler;
490 }
491
492 return 0;
493}
494
495int FSCryptKeyStore::_find(const struct ceph_fscrypt_key_identifier& id, FSCryptKeyHandlerRef& kh)
496{

Callers 3

uninline_dataMethod · 0.45
check_pool_permMethod · 0.45
add_fscrypt_keyMethod · 0.45

Calls 4

initMethod · 0.45
findMethod · 0.45
endMethod · 0.45
resetMethod · 0.45

Tested by

no test coverage detected