aboutsummaryrefslogtreecommitdiffstats
path: root/dirmngr/ldapserver.c
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2022-09-28 13:40:22 +0000
committerWerner Koch <[email protected]>2022-09-28 13:43:48 +0000
commit536b5cd6630506bb4bece61eb34b1d0a1c611231 (patch)
tree8dc622eebf65d87f71019dd4f16dee47ad84c178 /dirmngr/ldapserver.c
parentgpg: Silence some diagnostics. (diff)
downloadgnupg-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/ldapserver.c')
-rw-r--r--dirmngr/ldapserver.c31
1 files changed, 17 insertions, 14 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;
}