* mainproc.c (get_pka_address), keylist.c (show_notation): Remove
authorDavid Shaw <dshaw@jabberwocky.com>
Thu, 9 Mar 2006 03:35:26 +0000 (03:35 +0000)
committerDavid Shaw <dshaw@jabberwocky.com>
Thu, 9 Mar 2006 03:35:26 +0000 (03:35 +0000)
duplicate code by using notation functions.

g10/ChangeLog
g10/keylist.c
g10/mainproc.c

index 345dfdd..2fd0b80 100644 (file)
@@ -1,5 +1,8 @@
 2006-03-08  David Shaw  <dshaw@jabberwocky.com>
 
+       * 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.
index 295e6dc..19f3d3f 100644 (file)
@@ -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
index 36f1509..336ad94 100644 (file)
@@ -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, "pka-address@gnupg.org", 21))
+      if(strcmp(nd->name,"pka-address@gnupg.org")!=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;
 }