core: Support all keylist modes and fix possible overrun
* src/gpgme-tool.c (gt_get_keylist_mode): Increase NR_KEYLIST_MODES to number of keylist modes. Add support for GPGME_KEYLIST_MODE_WITH_TOFU, GPGME_KEYLIST_MODE_WITH_KEYGRIP, GPGME_KEYLIST_MODE_WITH_V5FPR. Write all modes. (hlp_keylist_mode): List all supported keylist modes. (cmd_keylist_mode): Add support for GPGME_KEYLIST_MODE_WITH_TOFU, GPGME_KEYLIST_MODE_WITH_KEYGRIP, GPGME_KEYLIST_MODE_WITH_V5FPR. -- This fixes the possible overrun reported by Michal Hlavinka and adds support for all keylist modes.
This commit is contained in:
parent
e46748a0d1
commit
aa15a664b3
@ -1440,7 +1440,7 @@ gt_set_keylist_mode (gpgme_tool_t gt, gpgme_keylist_mode_t keylist_mode)
|
|||||||
gpg_error_t
|
gpg_error_t
|
||||||
gt_get_keylist_mode (gpgme_tool_t gt)
|
gt_get_keylist_mode (gpgme_tool_t gt)
|
||||||
{
|
{
|
||||||
#define NR_KEYLIST_MODES 6
|
#define NR_KEYLIST_MODES 11
|
||||||
const char *modes[NR_KEYLIST_MODES + 1];
|
const char *modes[NR_KEYLIST_MODES + 1];
|
||||||
int idx = 0;
|
int idx = 0;
|
||||||
gpgme_keylist_mode_t mode = gpgme_get_keylist_mode (gt->ctx);
|
gpgme_keylist_mode_t mode = gpgme_get_keylist_mode (gt->ctx);
|
||||||
@ -1455,16 +1455,23 @@ gt_get_keylist_mode (gpgme_tool_t gt)
|
|||||||
modes[idx++] = "sig_notations";
|
modes[idx++] = "sig_notations";
|
||||||
if (mode & GPGME_KEYLIST_MODE_WITH_SECRET)
|
if (mode & GPGME_KEYLIST_MODE_WITH_SECRET)
|
||||||
modes[idx++] = "with_secret";
|
modes[idx++] = "with_secret";
|
||||||
|
if (mode & GPGME_KEYLIST_MODE_WITH_TOFU)
|
||||||
|
modes[idx++] = "with_tofu";
|
||||||
|
if (mode & GPGME_KEYLIST_MODE_WITH_KEYGRIP)
|
||||||
|
modes[idx++] = "with_keygrip";
|
||||||
if (mode & GPGME_KEYLIST_MODE_EPHEMERAL)
|
if (mode & GPGME_KEYLIST_MODE_EPHEMERAL)
|
||||||
modes[idx++] = "ephemeral";
|
modes[idx++] = "ephemeral";
|
||||||
if (mode & GPGME_KEYLIST_MODE_VALIDATE)
|
if (mode & GPGME_KEYLIST_MODE_VALIDATE)
|
||||||
modes[idx++] = "validate";
|
modes[idx++] = "validate";
|
||||||
if (mode & GPGME_KEYLIST_MODE_FORCE_EXTERN)
|
if (mode & GPGME_KEYLIST_MODE_FORCE_EXTERN)
|
||||||
modes[idx++] = "force_extern";
|
modes[idx++] = "force_extern";
|
||||||
|
if (mode & GPGME_KEYLIST_MODE_WITH_V5FPR)
|
||||||
|
modes[idx++] = "with_v5fpr";
|
||||||
modes[idx++] = NULL;
|
modes[idx++] = NULL;
|
||||||
|
|
||||||
gt_write_status (gt, STATUS_KEYLIST_MODE, modes[0], modes[1], modes[2],
|
gt_write_status (gt, STATUS_KEYLIST_MODE, modes[0], modes[1], modes[2],
|
||||||
modes[3], modes[4], modes[5], modes[6], NULL);
|
modes[3], modes[4], modes[5], modes[6], modes[7], modes[8],
|
||||||
|
modes[9], modes[10], NULL);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -2188,7 +2195,8 @@ cmd_include_certs (assuan_context_t ctx, char *line)
|
|||||||
|
|
||||||
static const char hlp_keylist_mode[] =
|
static const char hlp_keylist_mode[] =
|
||||||
"KEYLIST_MODE [local] [extern] [sigs] [sig_notations]\n"
|
"KEYLIST_MODE [local] [extern] [sigs] [sig_notations]\n"
|
||||||
" [ephemeral] [validate]\n"
|
" [with_secret] [with_tofu] [with_keygrip] [ephemeral]\n"
|
||||||
|
" [validate] [force_extern] [with_v5fpr]\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Set the mode for the next KEYLIST command.";
|
"Set the mode for the next KEYLIST command.";
|
||||||
static gpg_error_t
|
static gpg_error_t
|
||||||
@ -2210,12 +2218,18 @@ cmd_keylist_mode (assuan_context_t ctx, char *line)
|
|||||||
mode |= GPGME_KEYLIST_MODE_SIG_NOTATIONS;
|
mode |= GPGME_KEYLIST_MODE_SIG_NOTATIONS;
|
||||||
if (strstr (line, "with_secret"))
|
if (strstr (line, "with_secret"))
|
||||||
mode |= GPGME_KEYLIST_MODE_WITH_SECRET;
|
mode |= GPGME_KEYLIST_MODE_WITH_SECRET;
|
||||||
|
if (strstr (line, "with_tofu"))
|
||||||
|
mode |= GPGME_KEYLIST_MODE_WITH_TOFU;
|
||||||
|
if (strstr (line, "with_keygrip"))
|
||||||
|
mode |= GPGME_KEYLIST_MODE_WITH_KEYGRIP;
|
||||||
if (strstr (line, "ephemeral"))
|
if (strstr (line, "ephemeral"))
|
||||||
mode |= GPGME_KEYLIST_MODE_EPHEMERAL;
|
mode |= GPGME_KEYLIST_MODE_EPHEMERAL;
|
||||||
if (strstr (line, "validate"))
|
if (strstr (line, "validate"))
|
||||||
mode |= GPGME_KEYLIST_MODE_VALIDATE;
|
mode |= GPGME_KEYLIST_MODE_VALIDATE;
|
||||||
if (strstr (line, "force_extern"))
|
if (strstr (line, "force_extern"))
|
||||||
mode |= GPGME_KEYLIST_MODE_FORCE_EXTERN;
|
mode |= GPGME_KEYLIST_MODE_FORCE_EXTERN;
|
||||||
|
if (strstr (line, "with_v5fpr"))
|
||||||
|
mode |= GPGME_KEYLIST_MODE_WITH_V5FPR;
|
||||||
|
|
||||||
return gt_set_keylist_mode (server->gt, mode);
|
return gt_set_keylist_mode (server->gt, mode);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user