cpp: Fix handling of lsig promotion

* src/gpgsignkeyeditinteractor.cpp (SignKeyState): Add second
CONFIRM state.
(makeTable): Properly handle local_promote_okay.
(action): Handle CONFIRM2.

--
This fixes changing a local signature to a "public" signature.

GnuPG-Bug-Id: T1649
This commit is contained in:
Andre Heinecke 2017-12-07 16:21:01 +01:00
parent 5ba1cbdf39
commit 1458adaea4
No known key found for this signature in database
GPG Key ID: 2978E9D40CBABA5C

View File

@ -158,6 +158,7 @@ enum SignKeyState {
SET_TRUST_DEPTH,
SET_TRUST_REGEXP,
CONFIRM,
CONFIRM2,
QUIT,
SAVE,
ERROR = EditInteractor::ErrorState
@ -182,6 +183,7 @@ static GpgSignKeyEditInteractor_Private::TransitionMap makeTable()
addEntry(START, GET_LINE, "keyedit.prompt", COMMAND);
addEntry(COMMAND, GET_BOOL, "keyedit.sign_all.okay", UIDS_ANSWER_SIGN_ALL);
addEntry(COMMAND, GET_BOOL, "sign_uid.okay", CONFIRM);
addEntry(COMMAND, GET_BOOL, "sign_uid.local_promote_okay", CONFIRM2);
addEntry(UIDS_ANSWER_SIGN_ALL, GET_BOOL, "sign_uid.okay", CONFIRM);
addEntry(UIDS_ANSWER_SIGN_ALL, GET_LINE, "sign_uid.expire", SET_EXPIRE);
addEntry(UIDS_ANSWER_SIGN_ALL, GET_LINE, "sign_uid.class", SET_CHECK_LEVEL);
@ -192,6 +194,7 @@ static GpgSignKeyEditInteractor_Private::TransitionMap makeTable()
addEntry(SET_EXPIRE, GET_BOOL, "sign_uid.class", SET_CHECK_LEVEL);
addEntry(CONFIRM, GET_BOOL, "sign_uid.local_promote_okay", CONFIRM);
addEntry(CONFIRM, GET_BOOL, "sign_uid.okay", CONFIRM);
addEntry(CONFIRM2, GET_BOOL, "sign_uid.okay", CONFIRM);
addEntry(CONFIRM, GET_LINE, "keyedit.prompt", COMMAND);
addEntry(CONFIRM, GET_LINE, "trustsign_prompt.trust_value", SET_TRUST_VALUE);
addEntry(CONFIRM, GET_LINE, "sign_uid.expire", SET_EXPIRE);
@ -233,6 +236,7 @@ const char *GpgSignKeyEditInteractor::action(Error &err) const
return 0;
case SET_CHECK_LEVEL:
return check_level_strings[d->checkLevel];
case CONFIRM2:
case CONFIRM:
return answer(true);
case QUIT: