* keylist.c (list_keyblock_print): Show the fingerprint after the key, not
authorDavid Shaw <dshaw@jabberwocky.com>
Thu, 14 Oct 2004 20:13:16 +0000 (20:13 +0000)
committerDavid Shaw <dshaw@jabberwocky.com>
Thu, 14 Oct 2004 20:13:16 +0000 (20:13 +0000)
after the first user ID.

* keyedit.c (show_key_with_all_names): Don't show validity if we're just
printing user IDs for signing.

* armor.c (fake_packet): Properly handle the case where the line is
dash-space (i.e. a blank line that was quoted).  Give a warning for bad
dash escaping.

g10/ChangeLog
g10/armor.c
g10/keyedit.c
g10/keylist.c

index bbae614..b583caf 100644 (file)
@@ -1,3 +1,15 @@
+2004-10-14  David Shaw  <dshaw@jabberwocky.com>
+
+       * keylist.c (list_keyblock_print): Show the fingerprint after the
+       key, not after the first user ID.
+
+       * keyedit.c (show_key_with_all_names): Don't show validity if
+       we're just printing user IDs for signing.
+
+       * armor.c (fake_packet): Properly handle the case where the line
+       is dash-space (i.e. a blank line that was quoted).  Give a warning
+       for bad dash escaping.
+
 2004-10-14  Werner Koch  <wk@g10code.com>
 
        * export.c (do_export_stream) [ENABLE_SELINUX_HACKS]: Don't allow
index 489f73d..1fe73f2 100644 (file)
@@ -518,15 +518,64 @@ fake_packet( armor_filter_context_t *afx, IOBUF a,
        }
        if( !maxlen )
            afx->truncated++;
-       if( !afx->not_dash_escaped ) {
-           int crlf;
-           p = afx->buffer;
-           n = afx->buffer_len;
-           crlf = n > 1 && p[n-2] == '\r' && p[n-1]=='\n';
+
+       p = afx->buffer;
+       n = afx->buffer_len;
+
+       /* Armor header or dash-escaped line? */
+       if(p[0]=='-')
+         {
+           /* 2440bis-10: When reversing dash-escaping, an
+              implementation MUST strip the string "- " if it occurs
+              at the beginning of a line, and SHOULD warn on "-" and
+              any character other than a space at the beginning of a
+              line.  */
+
+           if(p[1]==' ' && !afx->not_dash_escaped)
+             {
+               /* It's a dash-escaped line, so skip over the
+                  escape. */
+               afx->buffer_pos = 2;
+             }
+           else if(p[1]=='-' && p[2]=='-' && p[3]=='-' && p[4]=='-')
+             {
+               /* Five dashes in a row mean it's probably armor
+                  header. */
+               int type = is_armor_header( p, n );
+               if( afx->not_dash_escaped && type != BEGIN_SIGNATURE )
+                 ; /* this is okay */
+               else
+                 {
+                   if( type != BEGIN_SIGNATURE )
+                     {
+                       log_info(_("unexpected armor: "));
+                       print_string( stderr, p, n, 0 );
+                       putc('\n', stderr);
+                     }
+
+                   lastline = 1;
+                   rc = -1;
+                 }
+             }
+           else if(!afx->not_dash_escaped)
+             {
+               /* Bad dash-escaping. */
+               log_info(_("invalid dash escaped line: "));
+               print_string( stderr, p, n, 0 );
+               putc('\n', stderr);
+             }
+         }
+
+       /* Now handle the end-of-line canonicalization */
+       if( !afx->not_dash_escaped )
+         {
+           int crlf = n > 1 && p[n-2] == '\r' && p[n-1]=='\n';
 
            /* PGP2 does not treat a tab as white space character */
-           afx->buffer_len = trim_trailing_chars( p, n,
-                                        afx->pgp2mode ? " \r\n" : " \t\r\n");
+           afx->buffer_len=
+             trim_trailing_chars( &p[afx->buffer_pos], n-afx->buffer_pos,
+                                  afx->pgp2mode ? " \r\n" : " \t\r\n");
+           afx->buffer_len+=afx->buffer_pos;
            /* the buffer is always allocated with enough space to append
             * the removed [CR], LF and a Nul
             * The reason for this complicated procedure is to keep at least
@@ -538,37 +587,9 @@ fake_packet( armor_filter_context_t *afx, IOBUF a,
             * faked packet could do the job).
             */
            if( crlf )
-               afx->buffer[afx->buffer_len++] = '\r';
+             afx->buffer[afx->buffer_len++] = '\r';
            afx->buffer[afx->buffer_len++] = '\n';
-           afx->buffer[afx->buffer_len] = 0;
-       }
-       p = afx->buffer;
-       n = afx->buffer_len;
-
-       if( n > 2 && *p == '-' )
-         {
-           /* check for dash escaped or armor header */
-           if( p[1] == ' ' && !afx->not_dash_escaped )
-             {
-               /* It's a dash-escaped line */
-               afx->buffer_pos = 2; /* skip */
-             }
-           else if( n >= 15 &&  p[1] == '-' && p[2] == '-' && p[3] == '-' )
-             {
-               /* It's armor header */
-               int type = is_armor_header( p, n );
-               if( afx->not_dash_escaped && type != BEGIN_SIGNATURE )
-                 ; /* this is okay */
-               else {
-                 if( type != BEGIN_SIGNATURE ) {
-                   log_info(_("unexpected armor: "));
-                   print_string( stderr, p, n, 0 );
-                   putc('\n', stderr);
-                 }
-                 lastline = 1;
-                 rc = -1;
-               }
-             }
+           afx->buffer[afx->buffer_len] = '\0';
          }
     }
 
index a40ae18..53fbf59 100644 (file)
@@ -915,8 +915,8 @@ sign_uids( KBNODE keyblock, STRLIST locusr, int *ret_modified,
          }
 
        p=get_user_id_native(sk_keyid);
-       tty_printf(_("Are you really sure that you want to sign this key\n"
-                    "with your key \"%s\" (%s)\n"),p,keystr_from_sk(sk));
+       tty_printf(_("Are you sure that you want to sign this key with your\n"
+                    "key \"%s\" (%s)\n"),p,keystr_from_sk(sk));
        m_free(p);
 
        if(selfsig)
@@ -2325,26 +2325,34 @@ show_key_with_all_names( KBNODE keyblock, int only_marked, int with_revoker,
     /* the user ids */
 
     i = 0;
-    for( node = keyblock; node; node = node->next ) {
-       if( node->pkt->pkttype == PKT_USER_ID ) {
+    for( node = keyblock; node; node = node->next )
+      {
+       if( node->pkt->pkttype == PKT_USER_ID )
+         {
            PKT_user_id *uid = node->pkt->pkt.user_id;
            ++i;
-           if( !only_marked || (only_marked && (node->flag & NODFLG_MARK_A))){
-               if(uid->is_revoked)
-                 tty_printf(_("[%8.8s] "),_("revoked"));
-               else if(uid->is_expired)
-                 tty_printf(_("[%8.8s] "),_("expired"));
-               else if(primary)
-                 tty_printf(_("[%8.8s] "),
-                            trust_value_to_string(get_validity(primary,uid)));
+           if( !only_marked || (only_marked && (node->flag & NODFLG_MARK_A)))
+             {
+               if(!only_marked)
+                 {
+                   if(uid->is_revoked)
+                     tty_printf(_("[%8.8s] "),_("revoked"));
+                   else if(uid->is_expired)
+                     tty_printf(_("[%8.8s] "),_("expired"));
+                   else if(primary)
+                     tty_printf(_("[%8.8s] "),
+                                trust_value_to_string(get_validity(primary,
+                                                                   uid)));
+                 }
+
                if( only_marked )
-                  tty_printf("     ");
+                 tty_printf("     ");
                else if( node->flag & NODFLG_SELUID )
-                  tty_printf("(%d)* ", i);
+                 tty_printf("(%d)* ", i);
                else if( uid->is_primary )
-                  tty_printf("(%d). ", i);
+                 tty_printf("(%d). ", i);
                else
-                  tty_printf("(%d)  ", i);
+                 tty_printf("(%d)  ", i);
                tty_print_utf8_string( uid->name, uid->len );
                tty_printf("\n");
                if( with_prefs )
@@ -2372,9 +2380,9 @@ show_key_with_all_names( KBNODE keyblock, int only_marked, int with_revoker,
                      tty_printf(_("There are no preferences on a "
                                   "PGP 2.x-style user ID.\n"));
                  }
-           }
-       }
-    }
+             }
+         }
+      }
 
     if (do_warn)
         tty_printf (_("Please note that the shown key validity "
index f5578c2..39ccb55 100644 (file)
@@ -651,7 +651,6 @@ list_keyblock_print ( KBNODE keyblock, int secret, int fpr, void *opaque )
     KBNODE node;
     PKT_public_key *pk;
     PKT_secret_key *sk;
-    int any=0;
     struct sig_stats *stats=opaque;
     int skip_sigs=0;
 
@@ -735,6 +734,12 @@ list_keyblock_print ( KBNODE keyblock, int secret, int fpr, void *opaque )
        printf("\n");
       }
 
+    if( fpr )
+      print_fingerprint( pk, sk, 0 );
+    print_card_serialno (sk);
+    if( opt.with_key_data )
+      print_key_data( pk );
+
     for( kbctx=NULL; (node=walk_kbnode( keyblock, &kbctx, 0)) ; ) {
        if( node->pkt->pkttype == PKT_USER_ID && !opt.fast_list_mode ) {
            PKT_user_id *uid=node->pkt->pkt.user_id;
@@ -776,14 +781,6 @@ list_keyblock_print ( KBNODE keyblock, int secret, int fpr, void *opaque )
 
             print_utf8_string( stdout, uid->name, uid->len );
            putchar('\n');
-           if( !any ) {
-               if( fpr )
-                   print_fingerprint( pk, sk, 0 );
-                print_card_serialno (sk);
-               if( opt.with_key_data )
-                   print_key_data( pk );
-               any = 1;
-           }
 
            if((opt.list_options&LIST_SHOW_PHOTOS) && uid->attribs!=NULL)
              show_photos(uid->attribs,uid->numattribs,pk,sk);
@@ -801,14 +798,6 @@ list_keyblock_print ( KBNODE keyblock, int secret, int fpr, void *opaque )
            else
              skip_sigs=0;
 
-           if( !any )
-             {
-               putchar('\n');
-               if( fpr )
-                 print_fingerprint( pk, sk, 0 ); /* of the main key */
-               any = 1;
-             }
-
             printf("sub   %4u%c/%s %s",
                   nbits_from_pk( pk2 ),pubkey_letter( pk2->pubkey_algo ),
                   keystr_from_pk(pk2),datestr_from_pk(pk2));
@@ -840,15 +829,6 @@ list_keyblock_print ( KBNODE keyblock, int secret, int fpr, void *opaque )
          {
            PKT_secret_key *sk2 = node->pkt->pkt.secret_key;
 
-           if( !any )
-             {
-               putchar('\n');
-               if( fpr )
-                 print_fingerprint( pk, sk, 0 ); /* of the main key */
-                print_card_serialno (sk);
-               any = 1;
-             }
-
             printf("ssb%c  %4u%c/%s %s",
                    (sk2->protect.s2k.mode==1001)?'#':
                    (sk2->protect.s2k.mode==1002)?'>':' ',
@@ -894,25 +874,6 @@ list_keyblock_print ( KBNODE keyblock, int secret, int fpr, void *opaque )
                sigrc = ' ';
            }
 
-           if( !any ) { /* no user id, (maybe a revocation follows)*/
-             /* Check if the pk is really revoked - there could be a
-                 0x20 sig packet there even if we are not revoked
-                 (say, if a revocation key issued the packet, but the
-                 revocation key isn't present to verify it.) */
-               if( sig->sig_class == 0x20 && pk->is_revoked )
-                   puts("[revoked]");
-               else if( sig->sig_class == 0x18 )
-                   puts("[key binding]");
-               else if( sig->sig_class == 0x28 )
-                   puts("[subkey revoked]");
-               else
-                   putchar('\n');
-               if( fpr )
-                   print_fingerprint( pk, sk, 0 );
-                print_card_serialno (sk);
-               any=1;
-           }
-
            if( sig->sig_class == 0x20 || sig->sig_class == 0x28
                                       || sig->sig_class == 0x30 )
               sigstr = "rev";
@@ -1535,7 +1496,7 @@ print_card_serialno (PKT_secret_key *sk)
   if (!sk->is_protected || sk->protect.s2k.mode != 1002) 
     return; /* Not a card. */
   if (opt.with_colons)
-    return; /* Handled elesewhere. */
+    return; /* Handled elsewhere. */
 
   fputs (_("      Card serial no. ="), stdout);
   putchar (' ');