diff options
| author | Andre Heinecke <[email protected]> | 2019-12-13 17:06:00 +0000 |
|---|---|---|
| committer | Andre Heinecke <[email protected]> | 2019-12-13 17:06:00 +0000 |
| commit | 194272dbc3e326cc32c1464bc6fda0c0d10b5559 (patch) | |
| tree | a89b7d93b3e192a4f548a19ec9b47316ad1277fa /lang/cpp/src/gpgsignkeyeditinteractor.cpp | |
| parent | core: Extend gpgme_user_id_t with uidhash member. (diff) | |
| download | gpgme-194272dbc3e326cc32c1464bc6fda0c0d10b5559.tar.gz gpgme-194272dbc3e326cc32c1464bc6fda0c0d10b5559.zip | |
cpp, qt: Use uidhash to select uids for signing
* lang/cpp/src/gpgsignkeyeditinteractor.cpp (action):
Use uidhash instead of number.
(GpgSignKeyEditInteractor::setKey): New.
* lang/cpp/src/gpgsignkeyeditinteractor.h: Update accordingly.
* lang/cpp/src/key.h, lang/cpp/src/key.cpp: Wrap uidhash.
* lang/qt/src/qgpgmesignkeyjob.cpp: Set the key.
--
Using the uidhash avoids problems when the user ids
on --edit-key are different ones then the uids
captured by gpgme when listing keys. Or if
they are in a different order. This can happen
with cached keys or keys with user attributes.
Diffstat (limited to 'lang/cpp/src/gpgsignkeyeditinteractor.cpp')
| -rw-r--r-- | lang/cpp/src/gpgsignkeyeditinteractor.cpp | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/lang/cpp/src/gpgsignkeyeditinteractor.cpp b/lang/cpp/src/gpgsignkeyeditinteractor.cpp index bf21cbc1..33ffbcfc 100644 --- a/lang/cpp/src/gpgsignkeyeditinteractor.cpp +++ b/lang/cpp/src/gpgsignkeyeditinteractor.cpp @@ -65,6 +65,7 @@ public: std::vector<unsigned int>::const_iterator currentId, nextId; unsigned int checkLevel; bool dupeOk; + Key key; const char *command() const { @@ -259,7 +260,17 @@ const char *GpgSignKeyEditInteractor::action(Error &err) const default: if (st >= UIDS_LIST_SEPARATELY && st < UIDS_LIST_SEPARATELY_DONE) { std::stringstream ss; - ss << d->nextUserID(); + auto nextID = d->nextUserID(); + const char *hash; + assert (nextID); + if (!d->key.isNull() && (hash = d->key.userID(nextID - 1).uidhash())) { + /* Prefer uidhash if it is available as it might happen + * that uidattrs break the ordering of the uids in the + * edit-key interface */ + ss << "uid " << hash; + } else { + ss << nextID; + } d->scratch = ss.str(); return d->scratch.c_str(); } @@ -318,6 +329,10 @@ unsigned int GpgSignKeyEditInteractor::nextState(unsigned int status, const char err = GENERAL_ERROR; return ERROR; } +void GpgSignKeyEditInteractor::setKey(const Key &key) +{ + d->key = key; +} void GpgSignKeyEditInteractor::setCheckLevel(unsigned int checkLevel) { |
