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)  {  | 
