[svn] GnuPG - r4053 - trunk/g10

svn author dshaw cvs at cvs.gnupg.org
Thu Mar 9 04:35:27 CET 2006


Author: dshaw
Date: 2006-03-09 04:35:26 +0100 (Thu, 09 Mar 2006)
New Revision: 4053

Modified:
   trunk/g10/ChangeLog
   trunk/g10/keylist.c
   trunk/g10/mainproc.c
Log:
* mainproc.c (get_pka_address), keylist.c (show_notation): Remove
duplicate code by using notation functions.


Modified: trunk/g10/ChangeLog
===================================================================
--- trunk/g10/ChangeLog	2006-03-09 03:31:28 UTC (rev 4052)
+++ trunk/g10/ChangeLog	2006-03-09 03:35:26 UTC (rev 4053)
@@ -1,5 +1,8 @@
 2006-03-08  David Shaw  <dshaw at 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.

Modified: trunk/g10/keylist.c
===================================================================
--- trunk/g10/keylist.c	2006-03-09 03:31:28 UTC (rev 4052)
+++ trunk/g10/keylist.c	2006-03-09 03:35:26 UTC (rev 4053)
@@ -332,71 +332,55 @@
 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;
 
+  notations=sig_to_notation(sig);
+
   /* 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,'@');
 
-  while((p=enum_sig_subpkt(sig->hashed,SIGSUBPKT_NOTATION,&len,&seq,&crit)))
-    if(len>=8)
-      {
-	int n1,n2;
+	  if((which&1 && !has_at) || (which&2 && has_at))
+	    {
+	      int i;
+	      const char *str;
 
-	n1=(p[4]<<8)|p[5];
-	n2=(p[6]<<8)|p[7];
+	      for(i=0;i<indent;i++)
+		putchar(' ');
 
-	if(8+n1+n2!=len)
-	  {
-	    log_info(_("WARNING: invalid notation data found\n"));
-	    continue;
-	  }
+	      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(mode!=2)
-	  {
-	    int has_at=!!memchr(p+8,'@',n1);
+      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((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, 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

Modified: trunk/g10/mainproc.c
===================================================================
--- trunk/g10/mainproc.c	2006-03-09 03:31:28 UTC (rev 4052)
+++ trunk/g10/mainproc.c	2006-03-09 03:35:26 UTC (rev 4053)
@@ -1334,47 +1334,32 @@
 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 at gnupg.org", 21))
+      if(strcmp(nd->name,"pka-address at 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;
 }
 




More information about the Gnupg-commits mailing list