From dca36f62529a8d5c75778f22602f4bea32dddcf2 Mon Sep 17 00:00:00 2001 From: David Shaw Date: Tue, 12 Feb 2002 04:38:58 +0000 Subject: Bug fix - properly handle user IDs with colons (":") in them while HKP searching. --- g10/ChangeLog | 5 +++++ g10/hkp.c | 36 +++++++++++++++++++++++++++++++----- 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 + + * hkp.c (parse_hkp_index): Bug fix - properly handle user IDs with + colons (":") in them while HKP searching. + 2002-02-09 David Shaw * 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/3CB3B415 1998/04/03 David M. Shaw <dshaw@jabberwocky.com> */ /* 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; -- cgit v1.2.3