aboutsummaryrefslogtreecommitdiffstats
path: root/g10/keyserver.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--g10/keyserver.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/g10/keyserver.c b/g10/keyserver.c
index b153bc49a..4947293d8 100644
--- a/g10/keyserver.c
+++ b/g10/keyserver.c
@@ -862,12 +862,26 @@ keyserver_spawn(int action,STRLIST list,
case PKT_USER_ID:
{
PKT_user_id *uid=node->pkt->pkt.user_id;
+ int r;
if(uid->attrib_data)
continue;
- fprintf(spawn->tochild,"uid:%s:%u:%u:",
- uid->name,uid->created,uid->expiredate);
+ fprintf(spawn->tochild,"uid:");
+
+ /* Quote ':', '%', and any 8-bit
+ characters */
+ for(r=0;r<uid->len;r++)
+ {
+ if(uid->name[r]==':' || uid->name[r]=='%'
+ || uid->name[r]&0x80)
+ fprintf(spawn->tochild,"%%%02X",uid->name[r]);
+ else
+ fprintf(spawn->tochild,"%c",uid->name[r]);
+ }
+
+ fprintf(spawn->tochild,":%u:%u:",
+ uid->created,uid->expiredate);
if(uid->is_revoked)
fprintf(spawn->tochild,"r");