aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--g10/ChangeLog11
-rw-r--r--g10/hkp.c8
-rw-r--r--g10/keylist.c2
-rw-r--r--g10/keyserver.c25
4 files changed, 30 insertions, 16 deletions
diff --git a/g10/ChangeLog b/g10/ChangeLog
index 2232ba285..930dc84cd 100644
--- a/g10/ChangeLog
+++ b/g10/ChangeLog
@@ -1,3 +1,14 @@
+2002-09-19 David Shaw <[email protected]>
+
+ * keylist.c (list_keyblock_colon): Show 1F direct key signatures
+ in --with-colons listing.
+
+ * keyserver.c (keyserver_spawn): Properly handle line truncation.
+ Don't leak memory (~10-20 bytes) on searches.
+ (keyserver_search_prompt): Cleanup.
+
+ * hkp.c (hkp_search): Properly handle line truncation.
+
2002-09-16 David Shaw <[email protected]>
* keyedit.c (menu_addrevoker): The direct key signature for
diff --git a/g10/hkp.c b/g10/hkp.c
index 7423e99e7..142b3a0f2 100644
--- a/g10/hkp.c
+++ b/g10/hkp.c
@@ -475,7 +475,6 @@ parse_hkp_index(IOBUF buffer,char *line)
int hkp_search(STRLIST tokens)
{
int rc=0,len=0,max,first=1;
- unsigned int maxlen=1024,buflen=0;
#ifndef __riscos__
unsigned char *searchstr=NULL,*searchurl;
unsigned char *request;
@@ -485,7 +484,6 @@ int hkp_search(STRLIST tokens)
#endif
struct http_context hd;
unsigned int hflags=opt.keyserver_options.honor_http_proxy?HTTP_FLAG_TRY_PROXY:0;
- byte *line=NULL;
/* Glue the tokens together to make a search string */
@@ -569,13 +567,17 @@ int hkp_search(STRLIST tokens)
{
IOBUF buffer;
int count=1;
- int ret;
+ int ret=0; /* gcc wants me to initialize this */
+ unsigned int buflen;
+ byte *line=NULL;
buffer=iobuf_temp();
rc=1;
while(rc!=0)
{
+ unsigned int maxlen=1024;
+
/* This is a judgement call. Is it better to slurp up all
the results before prompting the user? On the one hand,
it probably makes the keyserver happier to not be blocked
diff --git a/g10/keylist.c b/g10/keylist.c
index 307735184..829b81249 100644
--- a/g10/keylist.c
+++ b/g10/keylist.c
@@ -837,6 +837,8 @@ list_keyblock_colon( KBNODE keyblock, int secret, int fpr )
sigstr = "sig";
else if( sig->sig_class == 0x18 )
sigstr = "sig";
+ else if( sig->sig_class == 0x1F )
+ sigstr = "sig";
else {
printf ("sig::::::::::%02x%c:\n",
sig->sig_class, sig->flags.exportable?'x':'l');
diff --git a/g10/keyserver.c b/g10/keyserver.c
index eff486b0b..1dc938a5a 100644
--- a/g10/keyserver.c
+++ b/g10/keyserver.c
@@ -335,7 +335,7 @@ keyserver_spawn(int action,STRLIST list,
{
int ret=0,i,gotversion=0,outofband=0;
STRLIST temp;
- unsigned int maxlen=256,buflen;
+ unsigned int maxlen,buflen;
char *command=NULL,*searchstr=NULL;
byte *line=NULL;
struct kopts *kopts;
@@ -545,6 +545,7 @@ keyserver_spawn(int action,STRLIST list,
char *ptr;
int plen;
+ maxlen=1024;
if(iobuf_read_line(spawn->fromchild,&line,&buflen,&maxlen)==0)
{
ret=G10ERR_READ_FILE;
@@ -583,8 +584,6 @@ keyserver_spawn(int action,STRLIST list,
outofband=1; /* Currently the only OPTION */
}
- m_free(line);
-
if(!gotversion)
{
log_error(_("keyserver did not send VERSION\n"));
@@ -600,12 +599,12 @@ keyserver_spawn(int action,STRLIST list,
stats_handle=import_new_stats_handle();
- /* Slurp up all the key data. In the future, it might be nice
- to look for KEY foo OUTOFBAND and FAILED indicators. It's
- harmless to ignore them, but ignoring them does make gpg
- complain about "no valid OpenPGP data found". One way to
- do this could be to continue parsing this line-by-line and
- make a temp iobuf for each key. */
+ /* Slurp up all the key data. In the future, it might be
+ nice to look for KEY foo OUTOFBAND and FAILED indicators.
+ It's harmless to ignore them, but ignoring them does make
+ gpg complain about "no valid OpenPGP data found". One
+ way to do this could be to continue parsing this
+ line-by-line and make a temp iobuf for each key. */
import_keys_stream(spawn->fromchild,0,stats_handle,
opt.keyserver_options.import_options);
@@ -622,12 +621,10 @@ keyserver_spawn(int action,STRLIST list,
case SEARCH:
{
- line=NULL;
- buflen = 0;
- maxlen = 80;
/* Look for the COUNT line */
do
{
+ maxlen=1024;
if(iobuf_read_line(spawn->fromchild,&line,&buflen,&maxlen)==0)
{
ret=G10ERR_READ_FILE;
@@ -647,6 +644,8 @@ keyserver_spawn(int action,STRLIST list,
}
fail:
+ m_free(line);
+
*prog=exec_finish(spawn);
return ret;
@@ -1003,7 +1002,7 @@ void
keyserver_search_prompt(IOBUF buffer,int count,const char *searchstr)
{
int i=0,validcount=1;
- unsigned int maxlen=256,buflen=0;
+ unsigned int maxlen,buflen;
KEYDB_SEARCH_DESC *desc;
byte *line=NULL;
char *answer;