[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#1107371: marked as done (unblock: opensc/0.26.1-2)



Your message dated Fri, 06 Jun 2025 16:01:31 +0000
with message-id <E1uNZVb-008Pz9-1F@respighi.debian.org>
and subject line unblock opensc
has caused the Debian Bug report #1107371,
regarding unblock: opensc/0.26.1-2
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact owner@bugs.debian.org
immediately.)


-- 
1107371: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1107371
Debian Bug Tracking System
Contact owner@bugs.debian.org with problems
--- Begin Message ---
Package: release.debian.org
Severity: normal
X-Debbugs-Cc: opensc@packages.debian.org
Control: affects -1 + src:opensc
User: release.debian.org@packages.debian.org
Usertags: unblock

Please unblock package opensc

This backports an upstream change that fixes a CLI option parsing
problem which fixes a CLI parser to be more flexible. This is required
for the .desktop's Exec invocation to be correct.

[ Reason ]
CLI argument mismatch explained in #1107224.

[ Impact ]
Cannot run the appliction /etc/xdg/autostart/pkcs11-register.desktop

[ Tests ]
Running pkcs11-register the same way as in the .desktop app results in
program returning error 1.

[ Risks ]
New CLI parsing options allow option arguments to be of `--foo bar` or
`--foo=bar` flavour, so it should not break any caller.

[ Checklist ]
  [x] all changes are documented in the d/changelog
  [x] I reviewed all changes and I approve them
  [x] attach debdiff against the package in testing

unblock opensc/0.26.1-2
diff -Nru opensc-0.26.1/debian/changelog opensc-0.26.1/debian/changelog
--- opensc-0.26.1/debian/changelog	2025-03-22 16:23:26.000000000 +0100
+++ opensc-0.26.1/debian/changelog	2025-06-06 12:10:29.000000000 +0200
@@ -1,3 +1,10 @@
+opensc (0.26.1-2) unstable; urgency=medium
+
+  * Team upload
+  * pkcs11-register: allow explicitly specifying an app to configure (Closes: #1107224)
+
+ -- Bastian Germann <bage@debian.org>  Fri, 06 Jun 2025 12:10:29 +0200
+
 opensc (0.26.1-1) unstable; urgency=medium
 
   * Team upload
diff -Nru opensc-0.26.1/debian/patches/0003-pkcs11-register-app-config.patch opensc-0.26.1/debian/patches/0003-pkcs11-register-app-config.patch
--- opensc-0.26.1/debian/patches/0003-pkcs11-register-app-config.patch	1970-01-01 01:00:00.000000000 +0100
+++ opensc-0.26.1/debian/patches/0003-pkcs11-register-app-config.patch	2025-06-06 12:07:55.000000000 +0200
@@ -0,0 +1,366 @@
+Origin: upstream, a2af26974bd33f1556b109f27932f02780b934df
+From: Frank Morgner <frankmorgner@gmail.com>
+Date: Thu, 22 May 2025 15:41:53 +0200
+Subject: pkcs11-register: allow explicitly specifying an app to configure
+
+fixes https://github.com/OpenSC/OpenSC/issues/3404
+---
+--- a/src/tools/pkcs11-register-cmdline.c
++++ b/src/tools/pkcs11-register-cmdline.c
+@@ -34,20 +34,20 @@ const char *gengetopt_args_info_versiontext = "";
+ const char *gengetopt_args_info_description = "Install a PKCS#11 module to known applications.";
+ 
+ const char *gengetopt_args_info_help[] = {
+-  "  -h, --help              Print help and exit",
+-  "  -V, --version           Print version and exit",
+-  "  -m, --module=FILENAME   Specify the module to load  (default=`OpenSC's\n                            PKCS#11 module')",
+-  "      --skip-chrome       Don't install module to Chrome  (default=on)",
+-  "      --skip-firefox      Don't install module to Firefox  (default=on)",
+-  "      --skip-thunderbird  Don't install module to Thunderbird  (default=off)",
+-  "      --skip-seamonkey    Don't install module to SeaMonkey  (default=off)",
++  "  -h, --help                   Print help and exit",
++  "  -V, --version                Print version and exit",
++  "  -m, --module=FILENAME        Specify the module to load  (default=`OpenSC's\n                                 PKCS#11 module')",
++  "      --skip-chrome=ENUM       Don't install module to Chrome  (possible\n                                 values=\"on\", \"off\" default=`on')",
++  "      --skip-firefox=ENUM      Don't install module to Firefox  (possible\n                                 values=\"on\", \"off\" default=`on')",
++  "      --skip-thunderbird=ENUM  Don't install module to Thunderbird  (possible\n                                 values=\"on\", \"off\" default=`off')",
++  "      --skip-seamonkey=ENUM    Don't install module to SeaMonkey  (possible\n                                 values=\"on\", \"off\" default=`off')",
+   "\nReport bugs to https://github.com/OpenSC/OpenSC/issues\n\nWritten by Frank Morgner <frankmorgner@gmail.com>",
+     0
+ };
+ 
+ typedef enum {ARG_NO
+-  , ARG_FLAG
+   , ARG_STRING
++  , ARG_ENUM
+ } cmdline_parser_arg_type;
+ 
+ static
+@@ -60,6 +60,11 @@ cmdline_parser_internal (int argc, char **argv, struct gengetopt_args_info *args
+                         struct cmdline_parser_params *params, const char *additional_error);
+ 
+ 
++const char *cmdline_parser_skip_chrome_values[] = {"on", "off", 0}; /*< Possible values for skip-chrome. */
++const char *cmdline_parser_skip_firefox_values[] = {"on", "off", 0}; /*< Possible values for skip-firefox. */
++const char *cmdline_parser_skip_thunderbird_values[] = {"on", "off", 0}; /*< Possible values for skip-thunderbird. */
++const char *cmdline_parser_skip_seamonkey_values[] = {"on", "off", 0}; /*< Possible values for skip-seamonkey. */
++
+ static char *
+ gengetopt_strdup (const char *s);
+ 
+@@ -81,10 +86,14 @@ void clear_args (struct gengetopt_args_info *args_info)
+   FIX_UNUSED (args_info);
+   args_info->module_arg = gengetopt_strdup ("OpenSC's PKCS#11 module");
+   args_info->module_orig = NULL;
+-  args_info->skip_chrome_flag = 1;
+-  args_info->skip_firefox_flag = 1;
+-  args_info->skip_thunderbird_flag = 0;
+-  args_info->skip_seamonkey_flag = 0;
++  args_info->skip_chrome_arg = skip_chrome_arg_on;
++  args_info->skip_chrome_orig = NULL;
++  args_info->skip_firefox_arg = skip_firefox_arg_on;
++  args_info->skip_firefox_orig = NULL;
++  args_info->skip_thunderbird_arg = skip_thunderbird_arg_off;
++  args_info->skip_thunderbird_orig = NULL;
++  args_info->skip_seamonkey_arg = skip_seamonkey_arg_off;
++  args_info->skip_seamonkey_orig = NULL;
+   
+ }
+ 
+@@ -191,19 +200,64 @@ cmdline_parser_release (struct gengetopt_args_info *args_info)
+ 
+   free_string_field (&(args_info->module_arg));
+   free_string_field (&(args_info->module_orig));
++  free_string_field (&(args_info->skip_chrome_orig));
++  free_string_field (&(args_info->skip_firefox_orig));
++  free_string_field (&(args_info->skip_thunderbird_orig));
++  free_string_field (&(args_info->skip_seamonkey_orig));
+   
+   
+ 
+   clear_given (args_info);
+ }
+ 
++/**
++ * @param val the value to check
++ * @param values the possible values
++ * @return the index of the matched value:
++ * -1 if no value matched,
++ * -2 if more than one value has matched
++ */
++static int
++check_possible_values(const char *val, const char *values[])
++{
++  int i, found, last;
++  size_t len;
++
++  if (!val)   /* otherwise strlen() crashes below */
++    return -1; /* -1 means no argument for the option */
++
++  found = last = 0;
++
++  for (i = 0, len = strlen(val); values[i]; ++i)
++    {
++      if (strncmp(val, values[i], len) == 0)
++        {
++          ++found;
++          last = i;
++          if (strlen(values[i]) == len)
++            return i; /* exact macth no need to check more */
++        }
++    }
++
++  if (found == 1) /* one match: OK */
++    return last;
++
++  return (found ? -2 : -1); /* return many values or none matched */
++}
++
+ 
+ static void
+ write_into_file(FILE *outfile, const char *opt, const char *arg, const char *values[])
+ {
+-  FIX_UNUSED (values);
++  int found = -1;
+   if (arg) {
+-    fprintf(outfile, "%s=\"%s\"\n", opt, arg);
++    if (values) {
++      found = check_possible_values(arg, values);      
++    }
++    if (found >= 0)
++      fprintf(outfile, "%s=\"%s\" # %s\n", opt, arg, values[found]);
++    else
++      fprintf(outfile, "%s=\"%s\"\n", opt, arg);
+   } else {
+     fprintf(outfile, "%s\n", opt);
+   }
+@@ -228,13 +282,13 @@ cmdline_parser_dump(FILE *outfile, struct gengetopt_args_info *args_info)
+   if (args_info->module_given)
+     write_into_file(outfile, "module", args_info->module_orig, 0);
+   if (args_info->skip_chrome_given)
+-    write_into_file(outfile, "skip-chrome", 0, 0 );
++    write_into_file(outfile, "skip-chrome", args_info->skip_chrome_orig, cmdline_parser_skip_chrome_values);
+   if (args_info->skip_firefox_given)
+-    write_into_file(outfile, "skip-firefox", 0, 0 );
++    write_into_file(outfile, "skip-firefox", args_info->skip_firefox_orig, cmdline_parser_skip_firefox_values);
+   if (args_info->skip_thunderbird_given)
+-    write_into_file(outfile, "skip-thunderbird", 0, 0 );
++    write_into_file(outfile, "skip-thunderbird", args_info->skip_thunderbird_orig, cmdline_parser_skip_thunderbird_values);
+   if (args_info->skip_seamonkey_given)
+-    write_into_file(outfile, "skip-seamonkey", 0, 0 );
++    write_into_file(outfile, "skip-seamonkey", args_info->skip_seamonkey_orig, cmdline_parser_skip_seamonkey_values);
+   
+ 
+   i = EXIT_SUCCESS;
+@@ -389,7 +443,18 @@ int update_arg(void *field, char **orig_field,
+       return 1; /* failure */
+     }
+ 
+-  FIX_UNUSED (default_value);
++  if (possible_values && (found = check_possible_values((value ? value : default_value), possible_values)) < 0)
++    {
++      if (short_opt != '-')
++        fprintf (stderr, "%s: %s argument, \"%s\", for option `--%s' (`-%c')%s\n", 
++          package_name, (found == -2) ? "ambiguous" : "invalid", value, long_opt, short_opt,
++          (additional_error ? additional_error : ""));
++      else
++        fprintf (stderr, "%s: %s argument, \"%s\", for option `--%s'%s\n", 
++          package_name, (found == -2) ? "ambiguous" : "invalid", value, long_opt,
++          (additional_error ? additional_error : ""));
++      return 1; /* failure */
++    }
+     
+   if (field_given && *field_given && ! override)
+     return 0;
+@@ -401,8 +466,8 @@ int update_arg(void *field, char **orig_field,
+     val = possible_values[found];
+ 
+   switch(arg_type) {
+-  case ARG_FLAG:
+-    *((int *)field) = !*((int *)field);
++  case ARG_ENUM:
++    if (val) *((int *)field) = found;
+     break;
+   case ARG_STRING:
+     if (val) {
+@@ -421,7 +486,6 @@ int update_arg(void *field, char **orig_field,
+   /* store the original value */
+   switch(arg_type) {
+   case ARG_NO:
+-  case ARG_FLAG:
+     break;
+   default:
+     if (value && orig_field) {
+@@ -485,10 +549,10 @@ cmdline_parser_internal (
+         { "help",	0, NULL, 'h' },
+         { "version",	0, NULL, 'V' },
+         { "module",	1, NULL, 'm' },
+-        { "skip-chrome",	0, NULL, 0 },
+-        { "skip-firefox",	0, NULL, 0 },
+-        { "skip-thunderbird",	0, NULL, 0 },
+-        { "skip-seamonkey",	0, NULL, 0 },
++        { "skip-chrome",	1, NULL, 0 },
++        { "skip-firefox",	1, NULL, 0 },
++        { "skip-thunderbird",	1, NULL, 0 },
++        { "skip-seamonkey",	1, NULL, 0 },
+         { 0,  0, 0, 0 }
+       };
+ 
+@@ -527,9 +591,11 @@ cmdline_parser_internal (
+           {
+           
+           
+-            if (update_arg((void *)&(args_info->skip_chrome_flag), 0, &(args_info->skip_chrome_given),
+-                &(local_args_info.skip_chrome_given), optarg, 0, 0, ARG_FLAG,
+-                check_ambiguity, override, 1, 0, "skip-chrome", '-',
++            if (update_arg( (void *)&(args_info->skip_chrome_arg), 
++                 &(args_info->skip_chrome_orig), &(args_info->skip_chrome_given),
++                &(local_args_info.skip_chrome_given), optarg, cmdline_parser_skip_chrome_values, "on", ARG_ENUM,
++                check_ambiguity, override, 0, 0,
++                "skip-chrome", '-',
+                 additional_error))
+               goto failure;
+           
+@@ -539,9 +605,11 @@ cmdline_parser_internal (
+           {
+           
+           
+-            if (update_arg((void *)&(args_info->skip_firefox_flag), 0, &(args_info->skip_firefox_given),
+-                &(local_args_info.skip_firefox_given), optarg, 0, 0, ARG_FLAG,
+-                check_ambiguity, override, 1, 0, "skip-firefox", '-',
++            if (update_arg( (void *)&(args_info->skip_firefox_arg), 
++                 &(args_info->skip_firefox_orig), &(args_info->skip_firefox_given),
++                &(local_args_info.skip_firefox_given), optarg, cmdline_parser_skip_firefox_values, "on", ARG_ENUM,
++                check_ambiguity, override, 0, 0,
++                "skip-firefox", '-',
+                 additional_error))
+               goto failure;
+           
+@@ -551,9 +619,11 @@ cmdline_parser_internal (
+           {
+           
+           
+-            if (update_arg((void *)&(args_info->skip_thunderbird_flag), 0, &(args_info->skip_thunderbird_given),
+-                &(local_args_info.skip_thunderbird_given), optarg, 0, 0, ARG_FLAG,
+-                check_ambiguity, override, 1, 0, "skip-thunderbird", '-',
++            if (update_arg( (void *)&(args_info->skip_thunderbird_arg), 
++                 &(args_info->skip_thunderbird_orig), &(args_info->skip_thunderbird_given),
++                &(local_args_info.skip_thunderbird_given), optarg, cmdline_parser_skip_thunderbird_values, "off", ARG_ENUM,
++                check_ambiguity, override, 0, 0,
++                "skip-thunderbird", '-',
+                 additional_error))
+               goto failure;
+           
+@@ -563,9 +633,11 @@ cmdline_parser_internal (
+           {
+           
+           
+-            if (update_arg((void *)&(args_info->skip_seamonkey_flag), 0, &(args_info->skip_seamonkey_given),
+-                &(local_args_info.skip_seamonkey_given), optarg, 0, 0, ARG_FLAG,
+-                check_ambiguity, override, 1, 0, "skip-seamonkey", '-',
++            if (update_arg( (void *)&(args_info->skip_seamonkey_arg), 
++                 &(args_info->skip_seamonkey_orig), &(args_info->skip_seamonkey_given),
++                &(local_args_info.skip_seamonkey_given), optarg, cmdline_parser_skip_seamonkey_values, "off", ARG_ENUM,
++                check_ambiguity, override, 0, 0,
++                "skip-seamonkey", '-',
+                 additional_error))
+               goto failure;
+           
+--- a/src/tools/pkcs11-register-cmdline.h
++++ b/src/tools/pkcs11-register-cmdline.h
+@@ -34,6 +34,11 @@ extern "C" {
+ #define CMDLINE_PARSER_VERSION VERSION
+ #endif
+ 
++enum enum_skip_chrome { skip_chrome__NULL = -1, skip_chrome_arg_on = 0, skip_chrome_arg_off };
++enum enum_skip_firefox { skip_firefox__NULL = -1, skip_firefox_arg_on = 0, skip_firefox_arg_off };
++enum enum_skip_thunderbird { skip_thunderbird__NULL = -1, skip_thunderbird_arg_on = 0, skip_thunderbird_arg_off };
++enum enum_skip_seamonkey { skip_seamonkey__NULL = -1, skip_seamonkey_arg_on = 0, skip_seamonkey_arg_off };
++
+ /** @brief Where the command line options are stored */
+ struct gengetopt_args_info
+ {
+@@ -42,13 +47,17 @@ struct gengetopt_args_info
+   char * module_arg;	/**< @brief Specify the module to load (default='OpenSC's PKCS#11 module').  */
+   char * module_orig;	/**< @brief Specify the module to load original value given at command line.  */
+   const char *module_help; /**< @brief Specify the module to load help description.  */
+-  int skip_chrome_flag;	/**< @brief Don't install module to Chrome (default=on).  */
++  enum enum_skip_chrome skip_chrome_arg;	/**< @brief Don't install module to Chrome (default='on').  */
++  char * skip_chrome_orig;	/**< @brief Don't install module to Chrome original value given at command line.  */
+   const char *skip_chrome_help; /**< @brief Don't install module to Chrome help description.  */
+-  int skip_firefox_flag;	/**< @brief Don't install module to Firefox (default=on).  */
++  enum enum_skip_firefox skip_firefox_arg;	/**< @brief Don't install module to Firefox (default='on').  */
++  char * skip_firefox_orig;	/**< @brief Don't install module to Firefox original value given at command line.  */
+   const char *skip_firefox_help; /**< @brief Don't install module to Firefox help description.  */
+-  int skip_thunderbird_flag;	/**< @brief Don't install module to Thunderbird (default=off).  */
++  enum enum_skip_thunderbird skip_thunderbird_arg;	/**< @brief Don't install module to Thunderbird (default='off').  */
++  char * skip_thunderbird_orig;	/**< @brief Don't install module to Thunderbird original value given at command line.  */
+   const char *skip_thunderbird_help; /**< @brief Don't install module to Thunderbird help description.  */
+-  int skip_seamonkey_flag;	/**< @brief Don't install module to SeaMonkey (default=off).  */
++  enum enum_skip_seamonkey skip_seamonkey_arg;	/**< @brief Don't install module to SeaMonkey (default='off').  */
++  char * skip_seamonkey_orig;	/**< @brief Don't install module to SeaMonkey original value given at command line.  */
+   const char *skip_seamonkey_help; /**< @brief Don't install module to SeaMonkey help description.  */
+   
+   unsigned int help_given ;	/**< @brief Whether help was given.  */
+@@ -182,6 +191,11 @@ void cmdline_parser_free (struct gengetopt_args_info *args_info);
+ int cmdline_parser_required (struct gengetopt_args_info *args_info,
+   const char *prog_name);
+ 
++extern const char *cmdline_parser_skip_chrome_values[];  /**< @brief Possible values for skip-chrome. */
++extern const char *cmdline_parser_skip_firefox_values[];  /**< @brief Possible values for skip-firefox. */
++extern const char *cmdline_parser_skip_thunderbird_values[];  /**< @brief Possible values for skip-thunderbird. */
++extern const char *cmdline_parser_skip_seamonkey_values[];  /**< @brief Possible values for skip-seamonkey. */
++
+ 
+ #ifdef __cplusplus
+ }
+--- a/src/tools/pkcs11-register.c
++++ b/src/tools/pkcs11-register.c
+@@ -332,13 +332,13 @@ main(int argc, char **argv)
+ 		return 1;
+ 	}
+ 
+-	if (!cmdline.skip_chrome_flag)
++	if (cmdline.skip_chrome_arg != skip_chrome_arg_on)
+ 		add_module_chrome(module_path, module_name, exclude_module_path);
+-	if (!cmdline.skip_firefox_flag)
++	if (cmdline.skip_firefox_arg != skip_firefox_arg_on)
+ 		add_module_firefox(module_path, module_name, exclude_module_path);
+-	if (!cmdline.skip_thunderbird_flag)
++	if (cmdline.skip_thunderbird_arg != skip_thunderbird_arg_on)
+ 		add_module_thunderbird(module_path, module_name, exclude_module_path);
+-	if (!cmdline.skip_seamonkey_flag)
++	if (cmdline.skip_seamonkey_arg != skip_seamonkey_arg_on)
+ 		add_module_seamonkey(module_path, module_name, exclude_module_path);
+ 
+ 	cmdline_parser_free (&cmdline);
+--- a/src/tools/pkcs11-register.ggo.in
++++ b/src/tools/pkcs11-register.ggo.in
+@@ -8,19 +8,23 @@ option "module" m
+ 
+ option "skip-chrome" -
+     "Don't install module to Chrome"
+-    flag @PKCS11_REGISTER_SKIP_FIREFOX@
++    enum values="on","off" optional
++    default="@PKCS11_REGISTER_SKIP_FIREFOX@"
+ 
+ option "skip-firefox" -
+     "Don't install module to Firefox"
+-    flag @PKCS11_REGISTER_SKIP_FIREFOX@
++    enum values="on","off" optional
++    default="@PKCS11_REGISTER_SKIP_FIREFOX@"
+ 
+ option "skip-thunderbird" -
+     "Don't install module to Thunderbird"
+-    flag off
++    enum values="on","off" optional
++    default="off"
+ 
+ option "skip-seamonkey" -
+     "Don't install module to SeaMonkey"
+-    flag off
++    enum values="on","off" optional
++    default="off"
+ 
+ text "
+ Report bugs to @PACKAGE_BUGREPORT@
diff -Nru opensc-0.26.1/debian/patches/series opensc-0.26.1/debian/patches/series
--- opensc-0.26.1/debian/patches/series	2025-03-22 16:23:26.000000000 +0100
+++ opensc-0.26.1/debian/patches/series	2025-06-06 12:09:05.000000000 +0200
@@ -1,2 +1,3 @@
 0001-Use-sysconfdir-opensc-for-opensc.conf.patch
 0002-Drop-non-functional-ENABLE_AUTOSTART.patch
+0003-pkcs11-register-app-config.patch

--- End Message ---
--- Begin Message ---
Unblocked opensc.

--- End Message ---

Reply to: