git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 4/8] gpg-interface: introduce an abstraction for multiple gpg formats

From
Henning Schild <henning.schild@siemens.com>
Date
Jul 5, 2018, 13:21 UTC
Message-ID
<20180705152158.6f661c85@md1pvb1c.ad001.siemens.net>
In-Reply-To
<CAN0heSrXpLCDRjnZC80QXBG27gd6m5reBn1hfNd_KXxnPVkA2g@mail.gmail.com>

Am Wed, 4 Jul 2018 09:10:17 +0200 schrieb Martin Ågren <martin.agren@gmail.com>:

Show 12 quoted lines
> Hi Henning,
> 
> On 3 July 2018 at 14:38, Henning Schild <henning.schild@siemens.com>
> wrote:
> > Create a struct that holds the format details for the supported
> > formats. At the moment that is still just "PGP". This commit
> > prepares for the introduction of more formats, that might use other
> > programs and match other signatures.
> >
> > Signed-off-by: Henning Schild <henning.schild@siemens.com>  
> 
> Welcome to the mailing list! :-)
Thanks!
Show 29 quoted lines
> I'll just comment on a few thoughts I had while skimming this.
> 
> >  static char *configured_signing_key;
> > -static const char *gpg_format = "PGP";
> > -static const char *gpg_program = "gpg";
> > +struct gpg_format_data {
> > +       const char *format;
> > +       const char *program;
> > +       const char *extra_args_verify[1];
> > +       const char *sigs[2];
> > +};
> >
> >  #define PGP_SIGNATURE "-----BEGIN PGP SIGNATURE-----"
> >  #define PGP_MESSAGE "-----BEGIN PGP MESSAGE-----"
> >
> > +enum gpgformats { PGP_FMT };
> > +struct gpg_format_data gpg_formats[] = {
> > +       { .format = "PGP", .program = "gpg",
> > +         .extra_args_verify = { "--keyid-format=long", },
> > +         .sigs = { PGP_SIGNATURE, PGP_MESSAGE, },
> > +       },
> > +};  
> 
> I think those trailing commas are ok now, but I'm not sure...
> 
> I had the same thought about designated initializers. Those should be
> ok now, c.f. cbc0f81d96 (strbuf: use designated initializers in
> STRBUF_INIT, 2017-07-10) and a73b3680c4 (Add and use generic name->id
> mapping code for color slot parsing, 2018-05-26).

Ok, i did not actually check coding style yet. I could run it through a tool, given there is a suggestion. Or i could address issues someone points out in the review. What i get from your comment is that it might be ok to leave the code as is, others have introduces similar constructs before me.

Show 15 quoted lines
> > +static const char *gpg_format = "PGP";
> > +
> > +static struct gpg_format_data *get_format_data(void)
> > +{
> > +       int i;
> > +       for (i = 0; i < ARRAY_SIZE(gpg_formats); i++)
> > +               if (!strcmp(gpg_formats[i].format, gpg_format))
> > +                       return gpg_formats + i;
> > +       assert(0);  
> 
> This might be better written as `BUG("bad gpg_format '%s'",
> gpg_format);` or something like that.
> 
> (It's not supposed to be triggered, not even by invalid data from the
> user, right?)

Yes that is code that can not (should not) be reached. I agree that an assert(0) is not very expressive and will fix that in v2.

Show 10 quoted lines
> 
> >         if (!strcmp(var, "gpg.format")) {
> > -               if (!strcmp(value, "PGP"))  
> 
> This line was added in patch 3. It errors out precisely when
> gpg.format is "PGP", no? That this doesn't break the whole series is
> explained by 1) it being removed in this patch 4, and 2) there being
> no tests. It makes me wonder if something like patch 5 (test
> gpg.format) could be part of patch 3, both with negative ("=
> malformed") and positive ("= PGP") tests?

I will pull the tests from patch 5 before touching that code and fix up issues inbetween. The whole series saw a "make test" inbetween all commits.

Show 18 quoted lines
> > +               j = 0;
> > +               for (i = 0; i < ARRAY_SIZE(gpg_formats); i++)
> > +                       if (!strcmp(value, gpg_formats[i].format)) {
> > +                               j++;
> > +                               break;
> > +                       }
> > +               if (!j)
> >                         return error("malformed value for %s: %s",
> > var, value);  
> 
> `if (i == ARRAY_SIZE(gpg_formats))` and drop `j`?
> 
> Or check whether `get_format_data()` returns NULL? Hmm, well you
> can't, since it takes its "input" from a global variable...
> 
> If you want to keep that global nature, the duplication of
> search-logic could perhaps be avoided by having a helper function for
> returning the index of a gpg_format (or -1).
True, the two are almost the same and should be merged. Will do in v2.
Henning
> >                 return git_config_string(&gpg_format, var, value);
> >         }  
> 
> Martin
Previous: Martin ÅgrenNext: Junio C Hamano
Message 23 of 36 in “X509 (gpgsm) commit signing support”
  1. 0/8 X509 (gpgsm) commit signing supportHenning Schild, Jul 3, 2018
  2. 2/8 gpg-interface: make parse_gpg_output static and remove from interface headerHenning Schild, Jul 3, 2018
  3. 1/8 builtin/receive-pack: use check_signature from gpg-interfaceHenning Schild, Jul 3, 2018
  4. Junio C HamanoJul 6, 2018
  5. Junio C HamanoJul 6, 2018
  6. Henning SchildJul 9, 2018
  7. Junio C HamanoJul 9, 2018
  8. 5/8 t/t7510: check the validation of the new config gpg.formatHenning Schild, Jul 3, 2018
  9. Junio C HamanoJul 6, 2018
  10. Henning SchildJul 9, 2018
  11. 6/8 gpg-interface: do not hardcode the key string len anymoreHenning Schild, Jul 3, 2018
  12. Junio C HamanoJul 6, 2018
  13. 3/8 gpg-interface: add new config to select how to sign a commitHenning Schild, Jul 3, 2018
  14. brian m. carlsonJul 6, 2018
  15. Henning SchildJul 6, 2018
  16. Junio C HamanoJul 6, 2018
  17. 7/8 gpg-interface: introduce new signature format "X509" using gpgsmHenning Schild, Jul 3, 2018
  18. brian m. carlsonJul 6, 2018
  19. Henning SchildJul 6, 2018
  20. Junio C HamanoJul 6, 2018
  21. 4/8 gpg-interface: introduce an abstraction for multiple gpg formatsHenning Schild, Jul 3, 2018
  22. Martin ÅgrenJul 4, 2018
  23. Henning SchildJul 5, 2018
  24. Junio C HamanoJul 6, 2018
  25. Henning SchildJul 9, 2018
  26. Eric SunshineJul 9, 2018
  27. Junio C HamanoJul 9, 2018
  28. Jeff KingJul 10, 2018
  29. Junio C HamanoJul 10, 2018
  30. Junio C HamanoJul 10, 2018
  31. Jeff KingJul 10, 2018
  32. 8/8 gpg-interface t: extend the existing GPG tests with GPGSMHenning Schild, Jul 3, 2018
  33. brian m. carlsonJul 6, 2018
  34. Henning SchildJul 6, 2018
  35. brian m. carlsonJul 6, 2018
  36. Henning SchildJul 6, 2018

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.