aboutsummaryrefslogtreecommitdiffstats
path: root/keyserver/gpgkeys_hkp.c
diff options
context:
space:
mode:
Diffstat (limited to 'keyserver/gpgkeys_hkp.c')
-rw-r--r--keyserver/gpgkeys_hkp.c24
1 files changed, 16 insertions, 8 deletions
diff --git a/keyserver/gpgkeys_hkp.c b/keyserver/gpgkeys_hkp.c
index a9cbf0350..b6da64b65 100644
--- a/keyserver/gpgkeys_hkp.c
+++ b/keyserver/gpgkeys_hkp.c
@@ -73,7 +73,7 @@ int
send_key(int *eof)
{
CURLcode res;
- char request[MAX_URL];
+ char request[MAX_URL+15];
int begin=0,end=0,ret=KEYSERVER_INTERNAL_ERROR;
char keyid[17];
char line[MAX_LINE];
@@ -162,6 +162,10 @@ send_key(int *eof)
strcat(request,opt->port);
else
strcat(request,"11371");
+ if(opt->path)
+ strcat(request,opt->path);
+ /* request is MAX_URL+15 bytes long - MAX_URL covers the whole URL,
+ including any supplied path. The 15 covers /pks/add. */
strcat(request,"/pks/add");
if(opt->verbose>2)
@@ -197,7 +201,7 @@ static int
get_key(char *getkey)
{
CURLcode res;
- char request[MAX_URL+100];
+ char request[MAX_URL+60];
char *offset;
struct curl_writer_ctx ctx;
@@ -218,9 +222,6 @@ get_key(char *getkey)
return KEYSERVER_NOT_SUPPORTED;
}
- /* Note that the size of request is MAX_URL which already implies a
- 1024 byte PATH. MAX_URL+100 is absurdly safe. */
-
strcpy(request,"http://");
strcat(request,opt->host);
strcat(request,":");
@@ -228,6 +229,11 @@ get_key(char *getkey)
strcat(request,opt->port);
else
strcat(request,"11371");
+ if(opt->path)
+ strcat(request,opt->path);
+ /* request is MAX_URL+55 bytes long - MAX_URL covers the whole URL,
+ including any supplied path. The 60 overcovers this /pks/... etc
+ string plus the 8 bytes of key id */
strcat(request,"/pks/lookup?op=get&options=mr&search=0x");
/* fingerprint or long key id. Take the last 8 characters and treat
@@ -278,9 +284,7 @@ search_key(char *searchkey)
searchkey_encoded=curl_escape(searchkey,0);
- /* Note that MAX_URL already implies a 1024 byte PATH, so this is
- safe. */
- request=malloc(MAX_URL+strlen(searchkey_encoded));
+ request=malloc(MAX_URL+50+strlen(searchkey_encoded));
if(!request)
{
fprintf(console,"gpgkeys: out of memory\n");
@@ -297,6 +301,8 @@ search_key(char *searchkey)
strcat(request,opt->port);
else
strcat(request,"11371");
+ if(opt->path)
+ strcat(request,opt->path);
strcat(request,"/pks/lookup?op=index&options=mr&search=");
strcat(request,searchkey_encoded);
@@ -593,6 +599,8 @@ main(int argc,char *argv[])
fprintf(console,"Host:\t\t%s\n",opt->host);
if(opt->port)
fprintf(console,"Port:\t\t%s\n",opt->port);
+ if(opt->path)
+ fprintf(console,"Path:\t\t%s\n",opt->path);
fprintf(console,"Command:\t%s\n",ks_action_to_string(opt->action));
}