* mainproc.c (check_sig_and_print), main.h, keylist.c (show_policy,
authorDavid Shaw <dshaw@jabberwocky.com>
Sat, 31 May 2003 23:23:19 +0000 (23:23 +0000)
committerDavid Shaw <dshaw@jabberwocky.com>
Sat, 31 May 2003 23:23:19 +0000 (23:23 +0000)
show_notation): Collapse the old print_notation_data into show_policy()
and show_notation() so there is only one function to print notations and
policy URLs.

* options.h, main.h, g10.c (main), keyedit.c (print_and_check_one_sig),
keylist.c (list_one, list_keyblock_print), pkclist.c (do_edit_ownertrust),
sign.c (mk_notation_and_policy): New "list-options" and "verify-options"
commands.  These replace the existing --show-photos/--no-show-photos,
--show-notation/--no-show-notation,
--show-policy-url/--no-show-policy-url, and --show-keyring options.  The
new method is more flexible since a user can specify (for example) showing
photos during sig verification, but not in key listings.  The old options
are emulated.

g10/ChangeLog
g10/g10.c
g10/keyedit.c
g10/keylist.c
g10/main.h
g10/mainproc.c
g10/options.h
g10/pkclist.c
g10/sign.c

index ffbbc4c..8968b83 100644 (file)
@@ -1,5 +1,22 @@
 2003-05-31  David Shaw  <dshaw@jabberwocky.com>
 
+       * mainproc.c (check_sig_and_print), main.h, keylist.c
+       (show_policy, show_notation): Collapse the old print_notation_data
+       into show_policy() and show_notation() so there is only one
+       function to print notations and policy URLs.
+
+       * options.h, main.h, g10.c (main), keyedit.c
+       (print_and_check_one_sig), keylist.c (list_one,
+       list_keyblock_print), pkclist.c (do_edit_ownertrust), sign.c
+       (mk_notation_and_policy): New "list-options" and "verify-options"
+       commands.  These replace the existing
+       --show-photos/--no-show-photos,
+       --show-notation/--no-show-notation,
+       --show-policy-url/--no-show-policy-url, and --show-keyring
+       options.  The new method is more flexible since a user can specify
+       (for example) showing photos during sig verification, but not in
+       key listings.  The old options are emulated.
+
        * main.h, misc.c (parse_options): New general option line
        parser. Fix the bug in the old version that did not handle report
        syntax errors after a valid entry.
index bdf0ce9..13fb11d 100644 (file)
--- a/g10/g10.c
+++ b/g10/g10.c
@@ -250,6 +250,8 @@ enum cmd_and_opt_values { aNull = 0,
     oKeyServerOptions,
     oImportOptions,
     oExportOptions,
+    oListOptions,
+    oVerifyOptions,
     oTempDir,
     oExecPath,
     oEncryptTo,
@@ -434,6 +436,7 @@ static ARGPARSE_OPTS opts[] = {
     { oKeyServerOptions, "keyserver-options",2,"@"},
     { oImportOptions, "import-options",2,"@"},
     { oExportOptions, "export-options",2,"@"},
+    { oListOptions, "list-options",2,"@"},
     { oCharset, "charset"   , 2, N_("|NAME|set terminal charset to NAME") },
     { oOptions, "options"   , 2, N_("read options from file")},
 
@@ -478,9 +481,9 @@ static ARGPARSE_OPTS opts[] = {
     { oCompressAlgo,"compress-algo",2,N_("|NAME|use compression algorithm NAME")},
     { oThrowKeyid, "throw-keyid", 0, N_("throw keyid field of encrypted packets")},
     { oNoThrowKeyid, "no-throw-keyid", 0, "@" },
-    { oShowPhotos,   "show-photos", 0, N_("Show Photo IDs")},
-    { oNoShowPhotos, "no-show-photos", 0, N_("Don't show Photo IDs")},
-    { oPhotoViewer,  "photo-viewer", 2, N_("Set command line to view Photo IDs")},
+    { oShowPhotos,   "show-photos", 0, "@" },
+    { oNoShowPhotos, "no-show-photos", 0, "@" },
+    { oPhotoViewer,  "photo-viewer", 2, "@" },
     { oNotation,   "notation-data", 2, "@" },
     { oSigNotation,   "sig-notation", 2, "@" },
     { oCertNotation,  "cert-notation", 2, "@" },
@@ -1403,7 +1406,7 @@ main( int argc, char **argv )
            sl=append_to_strlist( &nrings, pargs.r.ret_str);
            sl->flags=2;
            break;
-         case oShowKeyring: opt.show_keyring = 1; break;
+         case oShowKeyring: opt.list_options|=LIST_SHOW_KEYRING; break;
          case oDebug: opt.debug |= pargs.r.ret_ulong; break;
          case oDebugAll: opt.debug = ~0; break;
          case oStatusFD:
@@ -1576,15 +1579,27 @@ main( int argc, char **argv )
            break;
          case oSigPolicyURL: add_policy_url(pargs.r.ret_str,0); break;
          case oCertPolicyURL: add_policy_url(pargs.r.ret_str,1); break;
-          case oShowPolicyURL: opt.show_policy_url=1; break;
-         case oNoShowPolicyURL: opt.show_policy_url=0; break;
+          case oShowPolicyURL:
+           opt.list_options|=LIST_SHOW_POLICY;
+           opt.verify_options|=VERIFY_SHOW_POLICY;
+           break;
+         case oNoShowPolicyURL:
+           opt.list_options&=~LIST_SHOW_POLICY;
+           opt.verify_options&=~VERIFY_SHOW_POLICY;
+           break;
          case oUseEmbeddedFilename: opt.use_embedded_filename = 1; break;
          case oComment: opt.comment_string = pargs.r.ret_str; break;
          case oDefaultComment: opt.comment_string = NULL; break;
          case oThrowKeyid: opt.throw_keyid = 1; break;
          case oNoThrowKeyid: opt.throw_keyid = 0; break;
-         case oShowPhotos: opt.show_photos = 1; break;
-         case oNoShowPhotos: opt.show_photos = 0; break;
+         case oShowPhotos: 
+           opt.list_options|=LIST_SHOW_PHOTOS;
+           opt.verify_options|=VERIFY_SHOW_PHOTOS;
+           break;
+         case oNoShowPhotos:
+           opt.list_options&=~LIST_SHOW_PHOTOS;
+           opt.verify_options&=~VERIFY_SHOW_PHOTOS;
+           break;
          case oPhotoViewer: opt.photo_viewer = pargs.r.ret_str; break;
          case oForceV3Sigs: opt.force_v3_sigs = 1; break;
          case oNoForceV3Sigs: opt.force_v3_sigs = 0; break;
@@ -1720,6 +1735,47 @@ main( int argc, char **argv )
                  log_error(_("invalid export options\n"));
              }
            break;
+         case oListOptions:
+           {
+             struct parse_options lopts[]=
+               {
+                 {"show-photos",LIST_SHOW_PHOTOS},
+                 {"show-policy-url",LIST_SHOW_POLICY},
+                 {"show-notation",LIST_SHOW_NOTATION},
+                 {"show-keyring",LIST_SHOW_KEYRING},
+                 {NULL,0}
+               };
+
+             if(!parse_options(pargs.r.ret_str,&opt.list_options,lopts))
+               {
+                 if(configname)
+                   log_error(_("%s:%d: invalid list options\n"),
+                             configname,configlineno);
+                 else
+                   log_error(_("invalid list options\n"));
+               }
+           }
+           break;
+         case oVerifyOptions:
+           {
+             struct parse_options vopts[]=
+               {
+                 {"show-photos",VERIFY_SHOW_PHOTOS},
+                 {"show-policy-url",VERIFY_SHOW_POLICY},
+                 {"show-notation",VERIFY_SHOW_NOTATION},
+                 {NULL,0}
+               };
+
+             if(!parse_options(pargs.r.ret_str,&opt.verify_options,vopts))
+               {
+                 if(configname)
+                   log_error(_("%s:%d: invalid verify options\n"),
+                             configname,configlineno);
+                 else
+                   log_error(_("invalid verify options\n"));
+               }
+           }
+           break;
          case oTempDir: opt.temp_dir=pargs.r.ret_str; break;
          case oExecPath:
            if(set_exec_path(pargs.r.ret_str,0))
@@ -1733,8 +1789,14 @@ main( int argc, char **argv )
            break;
          case oSigNotation: add_notation_data( pargs.r.ret_str, 0 ); break;
          case oCertNotation: add_notation_data( pargs.r.ret_str, 1 ); break;
-         case oShowNotation: opt.show_notation=1; break;
-         case oNoShowNotation: opt.show_notation=0; break;
+         case oShowNotation:
+           opt.list_options|=LIST_SHOW_NOTATION;
+           opt.verify_options|=VERIFY_SHOW_NOTATION;
+           break;
+         case oNoShowNotation:
+           opt.list_options&=~LIST_SHOW_NOTATION;
+           opt.verify_options&=~VERIFY_SHOW_NOTATION;
+           break;
          case oUtf8Strings: utf8_strings = 1; break;
          case oNoUtf8Strings: utf8_strings = 0; break;
          case oDisableCipherAlgo:
index e1a0ab8..d36623a 100644 (file)
@@ -161,11 +161,11 @@ print_and_check_one_sig( KBNODE keyblock, KBNODE node,
        }
        tty_printf("\n");
 
-       if(sig->flags.policy_url && opt.show_policy_url)
-         show_policy_url(sig,3);
+       if(sig->flags.policy_url && (opt.list_options&LIST_SHOW_POLICY))
+         show_policy_url(sig,3,0);
 
-       if(sig->flags.notation && opt.show_notation)
-         show_notation(sig,3);
+       if(sig->flags.notation && (opt.list_options&LIST_SHOW_NOTATION))
+         show_notation(sig,3,0);
     }
 
     return (sigrc == '!');
index 68d7257..312c8de 100644 (file)
@@ -116,35 +116,43 @@ print_pubkey_info (PKT_public_key *pk)
 
 
 void
-show_policy_url(PKT_signature *sig,int indent)
+show_policy_url(PKT_signature *sig,int indent,int mode)
 {
   const byte *p;
   size_t len;
   int seq=0,crit;
+  FILE *fp=mode?log_stream():stdout;
 
   while((p=enum_sig_subpkt(sig->hashed,SIGSUBPKT_POLICY,&len,&seq,&crit)))
     {
       int i;
+      char *str;
 
       for(i=0;i<indent;i++)
        putchar(' ');
 
       /* This isn't UTF8 as it is a URL(?) */
       if(crit)
-       printf(_("Critical signature policy: "));
+       str=_("Critical signature policy: ");
       else
-       printf(_("Signature policy: "));
-      print_string(stdout,p,len,0);
-      printf("\n");
+       str=_("Signature policy: ");
+      if(mode)
+       log_info("%s",str);
+      else
+       printf("%s",str);
+      print_string(fp,p,len,0);
+      fprintf(fp,"\n");
+      write_status_buffer ( STATUS_POLICY_URL, p, len, 0 );
     }
 }
 
 void
-show_notation(PKT_signature *sig,int indent)
+show_notation(PKT_signature *sig,int indent,int mode)
 {
   const byte *p;
   size_t len;
   int seq=0,crit;
+  FILE *fp=mode?log_stream():stdout;
 
   /* There may be multiple notations in the same sig. */
 
@@ -152,6 +160,7 @@ show_notation(PKT_signature *sig,int indent)
     if(len>=8)
       {
        int n1,n2,i;
+       char *str;
 
        n1=(p[4]<<8)|p[5];
        n2=(p[6]<<8)|p[7];
@@ -167,18 +176,28 @@ show_notation(PKT_signature *sig,int indent)
 
        /* This is UTF8 */
        if(crit)
-         printf(_("Critical signature notation: "));
+         str=_("Critical signature notation: ");
+       else
+         str=_("Signature notation: ");
+       if(mode)
+         log_info("%s",str);
        else
-         printf(_("Signature notation: "));
-       print_utf8_string(stdout,p+8,n1);
-       printf("=");
+         printf("%s",str);
+       print_utf8_string(fp,p+8,n1);
+       fprintf(fp,"=");
 
        if(*p&0x80)
-         print_utf8_string(stdout,p+8+n1,n2);
+         print_utf8_string(fp,p+8+n1,n2);
        else
-         printf("[ %s ]",_("not human readable"));
+         fprintf(fp,"[ %s ]",_("not human readable"));
+
+       fprintf(fp,"\n");
 
-       printf("\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"));
@@ -292,7 +311,7 @@ list_one( STRLIST names, int secret )
            return;
        }
        do {
-           if (opt.show_keyring && !opt.with_colons) {
+           if ((opt.list_options&LIST_SHOW_KEYRING) && !opt.with_colons) {
                resname = keydb_get_resource_name (get_ctx_handle(ctx));
                printf("%s: %s\n", keyring_str, resname);
                for(i = strlen(resname) + strlen(keyring_str) + 2; i; i-- )
@@ -312,7 +331,7 @@ list_one( STRLIST names, int secret )
            return;
        }
        do {
-         if (opt.show_keyring && !opt.with_colons) {
+         if ((opt.list_options&LIST_SHOW_KEYRING) && !opt.with_colons) {
                resname = keydb_get_resource_name (get_ctx_handle(ctx));
                printf("%s: %s\n", keyring_str, resname);
                for(i = strlen(resname) + strlen(keyring_str) + 2; i; i-- )
@@ -525,7 +544,8 @@ list_keyblock_print ( KBNODE keyblock, int secret, int fpr, void *opaque )
                any = 1;
            }
 
-           if(opt.show_photos && node->pkt->pkt.user_id->attribs!=NULL)
+           if((opt.list_options&LIST_SHOW_PHOTOS)
+              && node->pkt->pkt.user_id->attribs!=NULL)
              show_photos(node->pkt->pkt.user_id->attribs,
                          node->pkt->pkt.user_id->numattribs,pk,sk);
        }
@@ -656,11 +676,11 @@ list_keyblock_print ( KBNODE keyblock, int secret, int fpr, void *opaque )
            }
            putchar('\n');
 
-           if(sig->flags.policy_url && opt.show_policy_url)
-             show_policy_url(sig,3);
+           if(sig->flags.policy_url && (opt.list_options&LIST_SHOW_POLICY))
+             show_policy_url(sig,3,0);
 
-           if(sig->flags.notation && opt.show_notation)
-             show_notation(sig,3);
+           if(sig->flags.notation && (opt.list_options&LIST_SHOW_NOTATION))
+             show_notation(sig,3,0);
 
            /* fixme: check or list other sigs here */
        }
index e27f78d..bb1ac8d 100644 (file)
@@ -213,13 +213,18 @@ struct revocation_reason_info *
 void release_revocation_reason_info( struct revocation_reason_info *reason );
 
 /*-- keylist.c --*/
+#define LIST_SHOW_PHOTOS   1
+#define LIST_SHOW_POLICY   2
+#define LIST_SHOW_NOTATION 4
+#define LIST_SHOW_KEYRING  8
+
 void public_key_list( STRLIST list );
 void secret_key_list( STRLIST list );
 void reorder_keyblock (KBNODE keyblock);
 void list_keyblock( KBNODE keyblock, int secret, int fpr, void *opaque );
 void print_fingerprint (PKT_public_key *pk, PKT_secret_key *sk, int mode);
-void show_policy_url(PKT_signature *sig,int indent);
-void show_notation(PKT_signature *sig,int indent);
+void show_policy_url(PKT_signature *sig,int indent,int mode);
+void show_notation(PKT_signature *sig,int indent,int mode);
 void dump_attribs(const PKT_user_id *uid,
                  PKT_public_key *pk,PKT_secret_key *sk);
 void set_attrib_fd(int fd);
@@ -227,6 +232,10 @@ void print_seckey_info (PKT_secret_key *sk);
 void print_pubkey_info (PKT_public_key *pk);
 
 /*-- verify.c --*/
+#define VERIFY_SHOW_PHOTOS   1
+#define VERIFY_SHOW_POLICY   2
+#define VERIFY_SHOW_NOTATION 4
+
 void print_file_status( int status, const char *name, int what );
 int verify_signatures( int nfiles, char **files );
 int verify_files( int nfiles, char **files );
index b1158a5..faba197 100644 (file)
@@ -757,52 +757,6 @@ print_userid( PACKET *pkt )
 }
 
 
-static void
-print_notation_data( PKT_signature *sig )
-{
-    size_t n, n1, n2;
-    const byte *p;
-    int seq = 0;
-
-    while((p=enum_sig_subpkt(sig->hashed,SIGSUBPKT_NOTATION,&n,&seq,NULL))) {
-       if( n < 8 ) {
-           log_info(_("WARNING: invalid notation data found\n"));
-           return;
-       }
-       if( !(*p & 0x80) )
-           return; /* not human readable */
-       n1 = (p[4] << 8) | p[5];
-       n2 = (p[6] << 8) | p[7];
-       p += 8;
-       if( 8+n1+n2 != n ) {
-           log_info(_("WARNING: invalid notation data found\n"));
-           return;
-       }
-       log_info(_("Notation: ") );
-       print_string( log_stream(), p, n1, 0 );
-       putc( '=', log_stream() );
-       print_string( log_stream(), p+n1, n2, 0 );
-       putc( '\n', log_stream() );
-        write_status_buffer ( STATUS_NOTATION_NAME, p   , n1, 0 );
-        write_status_buffer ( STATUS_NOTATION_DATA, p+n1, n2, 50 );
-    }
-
-    seq=0;
-
-    while((p=enum_sig_subpkt(sig->hashed,SIGSUBPKT_POLICY,&n,&seq,NULL))) {
-       log_info(_("Policy: ") );
-       print_string( log_stream(), p, n, 0 );
-       putc( '\n', log_stream() );
-        write_status_buffer ( STATUS_POLICY_URL, p, n, 0 );
-    }
-
-    /* Now check whether the key of this signature has some
-     * notation data */
-
-    /* TODO */
-}
-
-
 /****************
  * List the certificate in a user friendly way
  */
@@ -1433,7 +1387,7 @@ check_sig_and_print( CTX c, KBNODE node )
                  {
                    dump_attribs(un->pkt->pkt.user_id,pk,NULL);
 
-                   if(opt.show_photos)
+                   if(opt.verify_options&VERIFY_SHOW_PHOTOS)
                      show_photos(un->pkt->pkt.user_id->attribs,
                                  un->pkt->pkt.user_id->numattribs,pk,NULL);
                  }
@@ -1447,7 +1401,10 @@ check_sig_and_print( CTX c, KBNODE node )
        release_kbnode( keyblock );
 
        if( !rc )
-           print_notation_data( sig );
+         {
+           show_notation(sig,0,1);
+           show_policy_url(sig,0,1);
+         }
 
        if( !rc && is_status_enabled() ) {
            /* print a status response with the fingerprint */
index 2bdbde3..44ac6e0 100644 (file)
@@ -103,7 +103,6 @@ struct {
     const char *set_filename;
     const char *comment_string;
     int throw_keyid;
-    int show_photos;
     const char *photo_viewer;
     int s2k_mode;
     int s2k_digest_algo;
@@ -139,6 +138,8 @@ struct {
     int exec_path_set;
     unsigned int import_options;
     unsigned int export_options;
+    unsigned int list_options;
+    unsigned int verify_options;
     char *def_preference_list;
     prefitem_t *personal_cipher_prefs;
     prefitem_t *personal_digest_prefs;
@@ -150,10 +151,8 @@ struct {
     int interactive;
     STRLIST sig_notation_data;
     STRLIST cert_notation_data;
-    int show_notation;
     STRLIST sig_policy_url;
     STRLIST cert_policy_url;
-    int show_policy_url;
     int use_embedded_filename;
     int allow_non_selfsigned_uid;
     int allow_freeform_uid;
@@ -178,7 +177,6 @@ struct {
     int no_auto_check_trustdb;
     int preserve_permissions;
     int no_homedir_creation;
-    int show_keyring;
     struct groupitem *grouplist;
     int strict;
     int mangle_dos_filenames; 
index 803c6f6..e6c8269 100644 (file)
@@ -294,7 +294,8 @@ do_edit_ownertrust (PKT_public_key *pk, int mode,
                    !un->pkt->pkt.user_id->attrib_data )
                    continue;
                 
-               if(opt.show_photos && un->pkt->pkt.user_id->attrib_data)
+               if((opt.verify_options&VERIFY_SHOW_PHOTOS)
+                  && un->pkt->pkt.user_id->attrib_data)
                     show_photos(un->pkt->pkt.user_id->attribs,
                                 un->pkt->pkt.user_id->numattribs,pk,NULL);
                 
index edefa21..73286fc 100644 (file)
@@ -123,8 +123,8 @@ mk_notation_and_policy( PKT_signature *sig,
        m_free(buf);
     }
 
-    if(opt.show_notation)
-      show_notation(sig,0);
+    if(opt.list_options&LIST_SHOW_NOTATION)
+      show_notation(sig,0,0);
 
     /* set policy URL */
     if( IS_SIG(sig) && opt.sig_policy_url )
@@ -161,8 +161,8 @@ mk_notation_and_policy( PKT_signature *sig,
        m_free(s);
       }
 
-    if(opt.show_policy_url)
-      show_policy_url(sig,0);
+    if(opt.list_options&LIST_SHOW_POLICY)
+      show_policy_url(sig,0,0);
 }