Browse Source

ENGINE-866: Add boolean for whether to set the sticky bit or not with set_own_imported_key. the adapter should filter this out for apps, I guess, according to Volker

Krista Bennett 1 month ago
parent
commit
0ffbdde7b5
5 changed files with 321 additions and 8 deletions
  1. +5
    -3
      src/keymanagement.c
  2. +29
    -2
      src/keymanagement.h
  3. +2
    -2
      test/src/KeyResetMessageTest.cc
  4. +1
    -1
      test/src/StickyBitTest.cc
  5. +284
    -0
      test/test_mails/check_reset_all_own_grouped_sticky.eml

+ 5
- 3
src/keymanagement.c View File

@ -2200,11 +2200,13 @@ DYNAMIC_API PEP_STATUS set_own_key(
return status;
}
// This differs from set_own_key because it sets a manually-imported bit in the trust DB
// This differs from set_own_key because it can set a manually-imported bit in the trust DB
// and tests to see if the key will encrypt
DYNAMIC_API PEP_STATUS set_own_imported_key(
PEP_SESSION session,
pEp_identity* me,
const char* fpr) {
const char* fpr,
bool sticky) {
PEP_STATUS status = PEP_STATUS_OK;
@ -2227,7 +2229,7 @@ DYNAMIC_API PEP_STATUS set_own_imported_key(
if (status != PEP_STATUS_OK)
return status;
status = update_key_sticky_bit_for_user(session, me, fpr, true);
status = update_key_sticky_bit_for_user(session, me, fpr, sticky);
return status;
}


+ 29
- 2
src/keymanagement.h View File

@ -460,11 +460,38 @@ DYNAMIC_API PEP_STATUS set_own_key(
const char *fpr
);
/**
* <!-- set_own_imported_key() -->
*
* @brief Mark a key as an own default key, test to be sure the private key is
* present and can be used, and
*
* @param[in] session session to use
* @param[in,out] me own identity this key is used for
* @param[in] fpr fingerprint of the key to mark as own key
* @param[in] sticky boolean, true if we should set a sticky bit so
* it will not be automatically reset by sync and should
* win sync key elections if no other competing key
* for the same identity has its sticky bit set,
* false otherwise
*
* @warning the key has to be in the key ring already
* me->address, me->user_id and me->username must be set to valid data
* myself() is called by set_own_key() from within this call without key generation
* me->flags are ignored
* me->address must not be an alias
* me->fpr will be ignored and replaced by fpr, but
* caller MUST surrender ownership of the me->fpr reference, because
* it may be freed and replaced within the myself call. caller owns
* me->fpr memory again upon return.
* CAN GENERATE A PASSPHRASE REQUEST
*
*/
DYNAMIC_API PEP_STATUS set_own_imported_key(
PEP_SESSION session,
pEp_identity* me,
const char* fpr
const char* fpr,
bool sticky
);
//


+ 2
- 2
test/src/KeyResetMessageTest.cc View File

@ -1138,14 +1138,14 @@ TEST_F(KeyResetMessageTest, check_reset_all_own_grouped_with_sticky) {
// sticky - true
alex_id2->me = true;
status = set_own_imported_key(session, alex_id2, pubkey2);
status = set_own_imported_key(session, alex_id2, pubkey2, true);
ASSERT_EQ(status, PEP_STATUS_OK);
status = set_identity_flags(session, alex_id2, alex_id2->flags | PEP_idf_not_for_sync);
ASSERT_EQ(status , PEP_STATUS_OK);
// sticky - true
alex_id3->me = true;
status = set_own_imported_key(session, alex_id3, pubkey3);
status = set_own_imported_key(session, alex_id3, pubkey3, true);
ASSERT_EQ(status, PEP_STATUS_OK);
status = set_identity_flags(session, alex_id3, alex_id3->flags | PEP_idf_devicegroup);
ASSERT_EQ(status , PEP_STATUS_OK);


+ 1
- 1
test/src/StickyBitTest.cc View File

@ -87,7 +87,7 @@ TEST_F(StickyBitTest, check_set_sticky_bit_normal) {
const char* bob_name = "STOP MESSING WITH ME ALICE";
const char* bob_fpr = "BFCDB7F301DEEEBBF947F29659BFF488C9C2EE39";
pEp_identity* me = new_identity("pep.test.bob@pep-project.org", NULL, PEP_OWN_USERID, bob_name);
status = set_own_imported_key(session, me, bob_fpr);
status = set_own_imported_key(session, me, bob_fpr, true);
ASSERT_EQ(status , PEP_STATUS_OK);
status = myself(session, me);
ASSERT_EQ(status , PEP_STATUS_OK);


+ 284
- 0
test/test_mails/check_reset_all_own_grouped_sticky.eml View File

@ -0,0 +1,284 @@
Message-ID: <pEp.QP5355.1W4QUU5JRAI1W.316593C7-BE65-469A-A4CA-4AD8D282BF64@darthmama.org>
From: Alexander Braithwaite <pep.test.alexander@darthmama.org>
To: Alexander Braithwaite <pep.test.alexander@darthmama.org>
Subject: =?utf-8?Q?p=E2=89=A1p?=
In-Reply-To: <pEp-auto-consume@pEp.foundation>
X-pEp-Version: 2.1
pEp-auto-consume: yes
MIME-Version: 1.0
Content-Type: multipart/encrypted; boundary="238e1f2946e87ccd3d1b58ba507ed7ab";
protocol="application/pgp-encrypted"
--238e1f2946e87ccd3d1b58ba507ed7ab
Content-Type: application/pgp-encrypted
Version: 1
--238e1f2946e87ccd3d1b58ba507ed7ab
Content-Type: application/octet-stream
Content-Transfer-Encoding: 7bit
Content-Disposition: inline; filename="msg.asc"
-----BEGIN PGP MESSAGE-----
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
bqdpyL2HSQgEQF3FHgMpYnLto8BuI5mVGr0/vUg=
=ZYYo
-----END PGP MESSAGE-----
--238e1f2946e87ccd3d1b58ba507ed7ab--

Loading…
Cancel
Save