aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Shaw <[email protected]>2002-02-12 04:38:58 +0000
committerDavid Shaw <[email protected]>2002-02-12 04:38:58 +0000
commitdca36f62529a8d5c75778f22602f4bea32dddcf2 (patch)
treecaba6ff8b5866cd1095338a6065b7872287b2e12
parent* random.c (add_randomness): Xor new data into the pool and not (diff)
downloadgnupg-dca36f62529a8d5c75778f22602f4bea32dddcf2.tar.gz
gnupg-dca36f62529a8d5c75778f22602f4bea32dddcf2.zip
Bug fix - properly handle user IDs with colons (":") in them while HKP
searching.
-rw-r--r--g10/ChangeLog5
-rw-r--r--g10/hkp.c36
2 files changed, 36 insertions, 5 deletions
diff --git a/g10/ChangeLog b/g10/ChangeLog
index 79b8a3bd4..02a4f3910 100644
--- a/g10/ChangeLog
+++ b/g10/ChangeLog
@@ -1,3 +1,8 @@
+2002-02-11 David Shaw <[email protected]>
+
+ * hkp.c (parse_hkp_index): Bug fix - properly handle user IDs with
+ colons (":") in them while HKP searching.
+
2002-02-09 David Shaw <[email protected]>
* misc.c (pct_expando): More comments.
diff --git a/g10/hkp.c b/g10/hkp.c
index 494e42f6d..77739e765 100644
--- a/g10/hkp.c
+++ b/g10/hkp.c
@@ -1,4 +1,4 @@
-/* hkp.c - Horrowitz Keyserver Protocol
+/* hkp.c - Horowitz Keyserver Protocol
* Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
*
* This file is part of GnuPG.
@@ -208,6 +208,32 @@ urlencode_filter( void *opaque, int control,
return rc;
}
+static int
+write_quoted(IOBUF a, const char *buf, char delim)
+{
+ char quoted[5];
+
+ sprintf(quoted,"\\x%02X",delim);
+
+ while(*buf)
+ {
+ if(*buf==delim)
+ {
+ if(iobuf_writestr(a,quoted))
+ return -1;
+ }
+ else
+ {
+ if(iobuf_writebyte(a,*buf))
+ return -1;
+ }
+
+ buf++;
+ }
+
+ return 0;
+}
+
/* pub 2048/<a href="/pks/lookup?op=get&search=0x3CB3B415">3CB3B415</a> 1998/04/03 David M. Shaw &lt;<a href="/pks/lookup?op=get&search=0x3CB3B415">[email protected]</a>&gt; */
/* Luckily enough, both the HKP server and NAI HKP interface to their
@@ -238,16 +264,16 @@ parse_hkp_index(IOBUF buffer,char *line)
{
char intstr[11];
- iobuf_writestr(buffer,key);
+ write_quoted(buffer,key,':');
iobuf_writestr(buffer,":");
- iobuf_writestr(buffer,uid);
+ write_quoted(buffer,uid,':');
iobuf_writestr(buffer,":");
iobuf_writestr(buffer,revoked?"1:":":");
sprintf(intstr,"%u",createtime);
- iobuf_writestr(buffer,intstr);
+ write_quoted(buffer,intstr,':');
iobuf_writestr(buffer,"::::");
sprintf(intstr,"%u",bits);
- iobuf_writestr(buffer,intstr);
+ write_quoted(buffer,intstr,':');
iobuf_writestr(buffer,"\n");
ret=1;