aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--g10/ChangeLog3
-rw-r--r--g10/keylist.c98
-rw-r--r--g10/mainproc.c55
3 files changed, 64 insertions, 92 deletions
diff --git a/g10/ChangeLog b/g10/ChangeLog
index 345dfdda8..2fd0b8078 100644
--- a/g10/ChangeLog
+++ b/g10/ChangeLog
@@ -1,5 +1,8 @@
2006-03-08 David Shaw <[email protected]>
+ * mainproc.c (get_pka_address), keylist.c (show_notation): Remove
+ duplicate code by using notation functions.
+
* packet.h, build-packet.c (sig_to_notation), keygen.c
(keygen_add_notations): Provide printable text for
non-human-readable notation values.
diff --git a/g10/keylist.c b/g10/keylist.c
index 295e6dca5..19f3d3f62 100644
--- a/g10/keylist.c
+++ b/g10/keylist.c
@@ -332,71 +332,55 @@ show_keyserver_url(PKT_signature *sig,int indent,int mode)
void
show_notation(PKT_signature *sig,int indent,int mode,int which)
{
- const byte *p;
- size_t len;
- int seq=0,crit;
FILE *fp=mode?log_stream():stdout;
+ struct notation *nd,*notations;
if(which==0)
which=3;
- /* There may be multiple notations in the same sig. */
-
- while((p=enum_sig_subpkt(sig->hashed,SIGSUBPKT_NOTATION,&len,&seq,&crit)))
- if(len>=8)
- {
- int n1,n2;
-
- n1=(p[4]<<8)|p[5];
- n2=(p[6]<<8)|p[7];
+ notations=sig_to_notation(sig);
- if(8+n1+n2!=len)
- {
- log_info(_("WARNING: invalid notation data found\n"));
- continue;
- }
-
- if(mode!=2)
- {
- int has_at=!!memchr(p+8,'@',n1);
+ /* There may be multiple notations in the same sig. */
+ for(nd=notations;nd;nd=nd->next)
+ {
+ if(mode!=2)
+ {
+ int has_at=!!strchr(nd->name,'@');
+
+ if((which&1 && !has_at) || (which&2 && has_at))
+ {
+ int i;
+ const char *str;
+
+ for(i=0;i<indent;i++)
+ putchar(' ');
+
+ if(nd->flags.critical)
+ str=_("Critical signature notation: ");
+ else
+ str=_("Signature notation: ");
+ if(mode)
+ log_info("%s",str);
+ else
+ printf("%s",str);
+ /* This is all UTF8 */
+ print_utf8_string(fp,nd->name,strlen(nd->name));
+ fprintf(fp,"=");
+ print_utf8_string(fp,nd->value,strlen(nd->value));
+ fprintf(fp,"\n");
+ }
+ }
- if((which&1 && !has_at) || (which&2 && has_at))
- {
- int i;
- const char *str;
-
- for(i=0;i<indent;i++)
- putchar(' ');
-
- /* This is UTF8 */
- if(crit)
- str=_("Critical signature notation: ");
- else
- str=_("Signature notation: ");
- if(mode)
- log_info("%s",str);
- else
- printf("%s",str);
- print_utf8_string(fp,p+8,n1);
- fprintf(fp,"=");
-
- if(*p&0x80)
- print_utf8_string(fp,p+8+n1,n2);
- else
- fprintf(fp,"[ %s ]",_("not human readable"));
-
- fprintf(fp,"\n");
- }
- }
+ if(mode)
+ {
+ write_status_buffer(STATUS_NOTATION_NAME,
+ nd->name,strlen(nd->name),0);
+ write_status_buffer(STATUS_NOTATION_DATA,
+ nd->value,strlen(nd->value),50);
+ }
+ }
- if(mode)
- {
- write_status_buffer ( STATUS_NOTATION_NAME, p+8 , n1, 0 );
- write_status_buffer ( STATUS_NOTATION_DATA, p+8+n1, n2, 50 );
- }
- }
- else
- log_info(_("WARNING: invalid notation data found\n"));
+ free_notation(notations);
}
static void
diff --git a/g10/mainproc.c b/g10/mainproc.c
index 36f15097b..336ad948d 100644
--- a/g10/mainproc.c
+++ b/g10/mainproc.c
@@ -1334,47 +1334,32 @@ do_proc_packets( CTX c, IOBUF a )
static pka_info_t *
get_pka_address (PKT_signature *sig)
{
- const unsigned char *p;
- size_t len, n1, n2;
- int seq = 0;
pka_info_t *pka = NULL;
+ struct notation *nd,*notation;
- while ((p = enum_sig_subpkt (sig->hashed, SIGSUBPKT_NOTATION,
- &len, &seq, NULL)))
+ notation=sig_to_notation(sig);
+
+ for(nd=notation;nd;nd=nd->next)
{
- if (len < 8)
- continue; /* Notation packet is too short. */
- n1 = (p[4]<<8)|p[5];
- n2 = (p[6]<<8)|p[7];
- if (8 + n1 + n2 != len)
- continue; /* Length fields of notation packet are inconsistent. */
- p += 8;
- if (n1 != 21 || memcmp (p, "[email protected]", 21))
+ if(strcmp(nd->name,"[email protected]")!=0)
continue; /* Not the notation we want. */
- p += n1;
- if (n2 < 3)
- continue; /* Impossible email address. */
-
- if (pka)
- break; /* For now we only use the first valid PKA notation. In
- future we might want to keep additional PKA
- notations in a linked list. */
-
- pka = xmalloc (sizeof *pka + n2);
- pka->valid = 0;
- pka->checked = 0;
- pka->uri = NULL;
- memcpy (pka->email, p, n2);
- pka->email[n2] = 0;
-
- if (!is_valid_mailbox (pka->email))
- {
- /* We don't accept invalid mail addresses. */
- xfree (pka);
- pka = NULL;
- }
+
+ /* For now we only use the first valid PKA notation. In future
+ we might want to keep additional PKA notations in a linked
+ list. */
+ if (is_valid_mailbox (pka->email))
+ {
+ pka = xmalloc (sizeof *pka + strlen(nd->value));
+ pka->valid = 0;
+ pka->checked = 0;
+ pka->uri = NULL;
+ strcpy (pka->email, nd->value);
+ break;
+ }
}
+ free_notation(notation);
+
return pka;
}