Message ID | 20191216153204.8906-1-hji@dyntopia.com (mailing list archive) |
---|---|
Headers | show |
Series | gpg-interface: add minTrustLevel as a configuration option | expand |
Hans Jerry Illikainen <hji@dyntopia.com> writes: > I think it makes sense to refactor the processing of TRUST_ status lines > such that users can configure a minimum trust level that is enforced > globally, rather than have individual parts of git (e.g. merge) do it > themselves. OK. > I also think it makes sense to not store the trust level in the same > struct member as the key/signature status. While the presence of a > TRUST_ status code does imply that the signature is good (see the first > paragraph in the included snippet above), as far as I can tell, the > order of the status lines from GPG isn't well-defined; thus it would > seem plausible that the trust level could be overwritten with the > key/signature status if they were stored in the same member of the > signature_check structure. I agree that this is a good move---ever since gpg-interface.c was written, I have found it disturbing that the order of the lines in the output can affect the result we store and return to our callers > This patch introduces a new configuration option: gpg.minTrustLevel. It > consolidates trust-level verification to gpg-interface.c and adds a new > `trust_level` member to the signature_check structure. Nice. > Unfortunately, it breaks backward-compatibility in two ways: > > 1. The default trust level is TRUST_UNDEFINED. This is compatible with > the old behavior of every code path *except* for > verify_merge_signature() (since, again, it used to die()s on trust > levels below TRUST_MARGINAL). This might be a bit problematic. If we can keep the default behaviour identical to the code before this patch, while allowing the configuration to tweak the behaviour, that would have been more easily acceptable. That is, can we rearrange this patch so that each user of the verification code define its default minimum trust level (and verify-merge-signature would have a bit higher standard than everybody else), so that the uneven trust requirement is kept by default? And when the user explicitly sets the gpg.minTrustLevel configuration, these uneven default would all set to the given value. Later when the code gets a bit more mature, we would declare that we'd break the backward compatibility and set the default trust level for all codepaths even (either by raising everybody to marginal-or-better, or lowering everybody to undefined). > 2. The %G? format specifier no longer includes 'U' for signatures made > with a key that is either TRUST_UNDEFINED or TRUST_NEVER. Hmm, I can sort-of-see why you want to introduce a new placeholder "%GT" to disambiguate two sources of 'U', but why would this change to "%G?" necessary? > Instead, a > new %GT format specifier is introduced that outputs the trust level > (as a complete string to avoid ambiguity with TRUST_UNDEFINED and > TRUST_ULTIMATE).
On Mon, Dec 16 2019, Junio C Hamano wrote: >> Unfortunately, it breaks backward-compatibility in two ways: >> >> 1. The default trust level is TRUST_UNDEFINED. This is compatible with >> the old behavior of every code path *except* for >> verify_merge_signature() (since, again, it used to die()s on trust >> levels below TRUST_MARGINAL). > > This might be a bit problematic. If we can keep the default > behaviour identical to the code before this patch, while allowing > the configuration to tweak the behaviour, that would have been > more easily acceptable. Done in v1. >> 2. The %G? format specifier no longer includes 'U' for signatures made >> with a key that is either TRUST_UNDEFINED or TRUST_NEVER. > > Hmm, I can sort-of-see why you want to introduce a new placeholder > "%GT" to disambiguate two sources of 'U', but why would this change > to "%G?" necessary? U is re-introduced in v1. %GT is still there (since %G? doesn't print all trust levels) but I don't mind removing it (I added it for completeness sake when breaking backward-compatibility in v0).