diff options
author | Werner Koch <[email protected]> | 2022-09-28 13:40:22 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2022-09-28 13:43:48 +0000 |
commit | 536b5cd6630506bb4bece61eb34b1d0a1c611231 (patch) | |
tree | 8dc622eebf65d87f71019dd4f16dee47ad84c178 /dirmngr | |
parent | gpg: Silence some diagnostics. (diff) | |
download | gnupg-536b5cd6630506bb4bece61eb34b1d0a1c611231.tar.gz gnupg-536b5cd6630506bb4bece61eb34b1d0a1c611231.zip |
dirmngr: Fix lost flags during LDAP upload
* dirmngr/ldapserver.c (ldapserver_parse_one): Turn LINE into a const.
Use strtokenize instead of strtok style parsing.
--
This fixes a problem with resulted in a General Error for the second
key to be uploaded in the same session. But only if the colon format
to specify a keyserver with flags was used.
Diffstat (limited to 'dirmngr')
-rw-r--r-- | dirmngr/ldapserver.c | 31 | ||||
-rw-r--r-- | dirmngr/ldapserver.h | 2 |
2 files changed, 18 insertions, 15 deletions
diff --git a/dirmngr/ldapserver.c b/dirmngr/ldapserver.c index 14f87efb1..ed38c7101 100644 --- a/dirmngr/ldapserver.c +++ b/dirmngr/ldapserver.c @@ -69,18 +69,17 @@ ldapserver_list_free (ldap_server_t servers) * FILENAME and LINENO are used for diagnostic purposes only. */ ldap_server_t -ldapserver_parse_one (char *line, +ldapserver_parse_one (const char *line, const char *filename, unsigned int lineno) { char *p; - char *endp; const char *s; ldap_server_t server; int fieldno; int fail = 0; int i; + char **fields = NULL; - /* Parse the colon separated fields. */ server = xtrycalloc (1, sizeof *server); if (!server) { @@ -88,32 +87,35 @@ ldapserver_parse_one (char *line, goto leave; } - for (fieldno = 1, p = line; p; p = endp, fieldno++ ) + fields = strtokenize (line, ":"); + if (!fields) + { + fail = 1; + goto leave; + } + + for (fieldno=0; (p = fields[fieldno]); fieldno++) { - endp = strchr (p, ':'); - if (endp) - *endp++ = '\0'; - trim_spaces (p); switch (fieldno) { - case 1: + case 0: server->host = xtrystrdup (p); if (!server->host) fail = 1; break; - case 2: + case 1: if (*p) server->port = atoi (p); break; - case 3: + case 2: server->user = xtrystrdup (p); if (!server->user) fail = 1; break; - case 4: + case 3: if (*p && !server->user) { if (filename) @@ -131,7 +133,7 @@ ldapserver_parse_one (char *line, } break; - case 5: + case 4: if (*p) { server->base = xtrystrdup (p); @@ -140,7 +142,7 @@ ldapserver_parse_one (char *line, } break; - case 6: + case 5: { char **flags = NULL; @@ -211,6 +213,7 @@ ldapserver_parse_one (char *line, ldapserver_list_free (server); server = NULL; } + xfree (fields); return server; } diff --git a/dirmngr/ldapserver.h b/dirmngr/ldapserver.h index c62f5a939..4cd765c28 100644 --- a/dirmngr/ldapserver.h +++ b/dirmngr/ldapserver.h @@ -26,7 +26,7 @@ void ldapserver_list_free (ldap_server_t servers); -ldap_server_t ldapserver_parse_one (char *line, +ldap_server_t ldapserver_parse_one (const char *line, const char *filename, unsigned int lineno); |