Eric Blake
2020-Aug-10 16:05 UTC
[Libguestfs] [nbdkit PATCH] server: Permit - and _ in plugin names
Neither - nor _ need shell quoting, and as long as they are not the first character, permitting them in a plugin or filter name may make the command line easier to read. A restriction against a leading digit is new, but hopefully does not break any existing plugins. Signed-off-by: Eric Blake <eblake@redhat.com> --- It turns out I can't name a filter 'tls-fallback' without a slight tweak. Our code for is_short_name() already accepts such names, but our documentation and backend_load did not. I'm undecided on whether rejecting a plugin beginning with a digit is a good idea; as written, this patch would forbid a plugin named '9p', but it is a one-line tweak to allow it (ascii_isalnum instead of ascii_isalpha). docs/nbdkit-filter.pod | 3 ++- docs/nbdkit-plugin.pod | 3 ++- server/backend.c | 10 ++++++++-- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/docs/nbdkit-filter.pod b/docs/nbdkit-filter.pod index 3c7527d4..361a70f1 100644 --- a/docs/nbdkit-filter.pod +++ b/docs/nbdkit-filter.pod @@ -201,7 +201,8 @@ methods. const char *name; This field (a string) is required, and B<must> contain only ASCII -alphanumeric characters and be unique amongst all filters. +alphanumeric characters as well as dash or underscore, must begin with +a letter, and be unique amongst all filters. =head2 C<.longname> diff --git a/docs/nbdkit-plugin.pod b/docs/nbdkit-plugin.pod index 3d573b33..c961c116 100644 --- a/docs/nbdkit-plugin.pod +++ b/docs/nbdkit-plugin.pod @@ -471,7 +471,8 @@ an indication of failure. It has the following prototype: const char *name; This field (a string) is required, and B<must> contain only ASCII -alphanumeric characters and be unique amongst all plugins. +alphanumeric characters as well as dash or underscore, must begin with +a letter, and be unique amongst all filters. =head2 C<.version> diff --git a/server/backend.c b/server/backend.c index 8f4fed9d..046aacb4 100644 --- a/server/backend.c +++ b/server/backend.c @@ -98,10 +98,16 @@ backend_load (struct backend *b, const char *name, void (*load) (void)) program_name, b->filename, b->type); exit (EXIT_FAILURE); } - for (i = 0; i < len; ++i) { + if (! ascii_isalpha (*name)) { + fprintf (stderr, + "%s: %s: %s.name ('%s') field must begin with an ASCII letter\n", + program_name, b->filename, b->type, name); + exit (EXIT_FAILURE); + } + for (i = 1; i < len; ++i) { unsigned char c = name[i]; - if (! ascii_isalnum (c)) { + if (! ascii_isalnum (c) && c != '-' && c != '_') { fprintf (stderr, "%s: %s: %s.name ('%s') field " "must contain only ASCII alphanumeric characters\n", -- 2.28.0
Reasonably Related Threads
- [nbdkit PATCH v2] server: Permit - in plugin names
- [PATCH libnbd v2 3/4] generator: Add APIs to get/set the socket activation socket name
- [libnbd PATCH v3 18/19] generator: Add APIs to get/set the socket activation socket name
- [libnbd PATCH v5 3/4] generator: Add APIs to get/set the socket activation socket name
- [PATCH libnbd v2 0/4] Pass LISTEN_FDNAMES with systemd socket activation