105 lines
3.8 KiB
Diff
105 lines
3.8 KiB
Diff
commit d2f137cce5e6efb123842509352c7c49f889c67f
|
|
Author: Ingo Franzki <ifranzki@linux.ibm.com>
|
|
Date: Thu Jul 22 15:55:02 2021 +0200
|
|
|
|
pkcstok_migrate: Rework string quoting for opencryptoki.conf migration
|
|
|
|
Due to the way the parser works, a slot description like
|
|
'description = "slot"' works, but not without quotes ('description = slot').
|
|
The word 'slot' is treated as a keyword if not quoted (besides other keywords,
|
|
too), so if the word 'slot' would appear in an unquoted string, the
|
|
configuration file would fail to parse.
|
|
|
|
Always quote the value of 'description' and 'manufacturer'. Quote the
|
|
value of 'stdll', 'confname', and 'tokname' if it contains spaces, and
|
|
never quote the value of 'hwversion', 'firmwareversion', and 'tokversion'.
|
|
|
|
Signed-off-by: Ingo Franzki <ifranzki@linux.ibm.com>
|
|
|
|
diff --git a/usr/sbin/pkcstok_migrate/pkcstok_migrate.c b/usr/sbin/pkcstok_migrate/pkcstok_migrate.c
|
|
index a29dc8f7..853986e8 100644
|
|
--- a/usr/sbin/pkcstok_migrate/pkcstok_migrate.c
|
|
+++ b/usr/sbin/pkcstok_migrate/pkcstok_migrate.c
|
|
@@ -2060,7 +2060,7 @@ done:
|
|
*/
|
|
static int parseupdate_ockversion(void *private, const char *version)
|
|
{
|
|
- struct parseupdate *u = (struct parseupdate *)private;
|
|
+ struct parseupdate *u = (struct parseupdate *)private;
|
|
|
|
fprintf(u->f, "version %s", version);
|
|
return 0;
|
|
@@ -2075,14 +2075,14 @@ static void parseupdate_disab_event_supp(void *private)
|
|
|
|
static void parseupdate_eol(void *private)
|
|
{
|
|
- struct parseupdate *u = (struct parseupdate *)private;
|
|
+ struct parseupdate *u = (struct parseupdate *)private;
|
|
|
|
fputc('\n', u->f);
|
|
}
|
|
|
|
static int parseupdate_begin_slot(void *private, int slot, int nl_before_begin)
|
|
{
|
|
- struct parseupdate *u = (struct parseupdate *)private;
|
|
+ struct parseupdate *u = (struct parseupdate *)private;
|
|
|
|
u->activeslot = (slot == u->slotnum);
|
|
if (nl_before_begin)
|
|
@@ -2094,7 +2094,7 @@ static int parseupdate_begin_slot(void *private, int slot, int nl_before_begin)
|
|
|
|
static int parseupdate_end_slot(void *private)
|
|
{
|
|
- struct parseupdate *u = (struct parseupdate *)private;
|
|
+ struct parseupdate *u = (struct parseupdate *)private;
|
|
|
|
if (u->activeslot)
|
|
fprintf(u->f, " tokversion = 3.12\n");
|
|
@@ -2105,19 +2105,32 @@ static int parseupdate_end_slot(void *private)
|
|
|
|
static int parseupdate_key_str(void *private, int tok, const char *val)
|
|
{
|
|
- struct parseupdate *u = (struct parseupdate *)private;
|
|
+ struct parseupdate *u = (struct parseupdate *)private;
|
|
|
|
- if (tok != KW_HWVERSION && tok != KW_FWVERSION &&
|
|
- strchr(val, ' ') != NULL)
|
|
+ switch (tok) {
|
|
+ case KW_SLOTDESC:
|
|
+ case KW_MANUFID:
|
|
fprintf(u->f, " %s = \"%s\"", keyword_token_to_str(tok), val);
|
|
- else if (tok != KW_TOKVERSION)
|
|
+ break;
|
|
+ case KW_STDLL:
|
|
+ case KW_CONFNAME:
|
|
+ case KW_TOKNAME:
|
|
+ if (strchr(val, ' ') != NULL)
|
|
+ fprintf(u->f, " %s = \"%s\"", keyword_token_to_str(tok), val);
|
|
+ else
|
|
+ fprintf(u->f, " %s = %s", keyword_token_to_str(tok), val);
|
|
+ break;
|
|
+ case KW_HWVERSION:
|
|
+ case KW_FWVERSION:
|
|
fprintf(u->f, " %s = %s", keyword_token_to_str(tok), val);
|
|
+ break;
|
|
+ }
|
|
return 0;
|
|
}
|
|
|
|
static int parseupdate_key_vers(void *private, int tok, unsigned int vers)
|
|
{
|
|
- struct parseupdate *u = (struct parseupdate *)private;
|
|
+ struct parseupdate *u = (struct parseupdate *)private;
|
|
|
|
if (tok == KW_TOKVERSION && !u->activeslot)
|
|
fprintf(u->f, " %s = %d.%d", keyword_token_to_str(tok),
|
|
@@ -2127,7 +2140,7 @@ static int parseupdate_key_vers(void *private, int tok, unsigned int vers)
|
|
|
|
static void parseupdate_eolcomment(void *private, const char *comment)
|
|
{
|
|
- struct parseupdate *u = (struct parseupdate *)private;
|
|
+ struct parseupdate *u = (struct parseupdate *)private;
|
|
|
|
fprintf(u->f, "#%s", comment);
|
|
}
|