typo fix
[gnupg.git] / g10 / sign.c
index 493bfb4..cd7615c 100644 (file)
@@ -55,12 +55,12 @@ void __stdcall Sleep(ulong);
 static int recipient_digest_algo=0;
 
 /****************
- * Create a notation.  It is assumed that the stings in STRLIST
- * are already checked to contain only printable data and have a valid
- * NAME=VALUE format.
+ * Create a notation.  We assume thIt is assumed that the strings in
+ * the STRLISTs of the opt struct are already checked to contain only
+ * printable data and have a valid NAME=VALUE format.
  */
 static void
-mk_notation_and_policy( PKT_signature *sig,
+mk_notation_policy_etc( PKT_signature *sig,
                        PKT_public_key *pk, PKT_secret_key *sk )
 {
     const char *string;
@@ -74,18 +74,25 @@ mk_notation_and_policy( PKT_signature *sig,
     args.pk=pk;
     args.sk=sk;
 
+    /* It is actually impossible to get here when making a v3 key
+       signature since keyedit.c:sign_uids will automatically bump a
+       signature with a notation or policy url up to v4, but it is
+       good to do these checks anyway. */
+
     /* notation data */
     if(IS_SIG(sig) && opt.sig_notation_data)
       {
        if(sig->version<4)
-         log_info("can't put notation data into v3 signatures\n");
+         log_error(_("can't put notation data into v3 (PGP 2.x style) "
+                     "signatures\n"));
        else
          nd=opt.sig_notation_data;
       }
     else if( IS_CERT(sig) && opt.cert_notation_data )
       {
        if(sig->version<4)
-         log_info("can't put notation data into v3 key signatures\n");
+         log_error(_("can't put notation data into v3 (PGP 2.x style) "
+                     "key signatures\n"));
        else
          nd=opt.cert_notation_data;
       }
@@ -125,21 +132,20 @@ mk_notation_and_policy( PKT_signature *sig,
        xfree (buf);
     }
 
-    if(opt.list_options&LIST_SHOW_NOTATION)
-      show_notation(sig,0,0);
-
     /* set policy URL */
     if( IS_SIG(sig) && opt.sig_policy_url )
       {
        if(sig->version<4)
-         log_info("can't put a policy URL into v3 signatures\n");
+         log_error(_("can't put a policy URL into v3 (PGP 2.x style) "
+                     "signatures\n"));
        else
          pu=opt.sig_policy_url;
       }
     else if( IS_CERT(sig) && opt.cert_policy_url )
       {
        if(sig->version<4)
-         log_info("can't put a policy URL into v3 key signatures\n");
+         log_error(_("can't put a policy URL into v3 key (PGP 2.x style) "
+                     "signatures\n"));
        else
          pu=opt.cert_policy_url;
       }
@@ -163,8 +169,34 @@ mk_notation_and_policy( PKT_signature *sig,
        xfree (s);
       }
 
-    if(opt.list_options&LIST_SHOW_POLICY)
-      show_policy_url(sig,0,0);
+    /* preferred keyserver URL */
+    if( IS_SIG(sig) && opt.sig_keyserver_url )
+      {
+       if(sig->version<4)
+         log_info (_("can't put a preferred keyserver URL "
+                      "into v3 signatures\n"));
+       else
+         pu=opt.sig_keyserver_url;
+      }
+
+    for(;pu;pu=pu->next)
+      {
+        string = pu->d;
+
+       s=pct_expando(string,&args);
+       if(!s)
+         {
+           log_error(_("WARNING: unable to %%-expand preferred keyserver URL"
+                       " (too large).  Using unexpanded.\n"));
+           s=xstrdup(string);
+         }
+
+       build_sig_subpkt(sig,SIGSUBPKT_PREF_KS|
+                        ((pu->flags & 1)?SIGSUBPKT_FLAG_CRITICAL:0),
+                        s,strlen(s));
+
+       xfree(s);
+      }
 }
 
 
@@ -275,43 +307,7 @@ do_sign( PKT_secret_key *sk, PKT_signature *sig,
   sig->digest_algo = digest_algo;
   sig->digest_start[0] = dp[0];
   sig->digest_start[1] = dp[1];
-#if 0
-  if (sk->is_protected && sk->protect.s2k.mode == 1002 && !sk->is_primary)
-    {  /* Temporary hack  to test tey auth command. */
-      char *rbuf;
-      size_t rbuflen;
-      char *snbuf;
-      char *tmpbuf;
-      size_t tmp_n;
-
-      frame = encode_md_value( sk->pubkey_algo, md,
-                               digest_algo, mpi_get_nbits(sk->skey[0]), 0 );
-      if (!frame)
-        return GPG_ERR_GENERAL;
-
-      if (gcry_mpi_aprint (GCRYMPI_FMT_USG, (void **)&tmpbuf, &tmp_n, frame ))
-        BUG ();
-      for (; tmp_n && *tmpbuf; tmp_n--, tmpbuf++)
-        ;
-      assert (tmp_n);
-      tmp_n--;
-      tmpbuf++;
-
-      snbuf = serialno_and_fpr_from_sk (sk->protect.iv, sk->protect.ivlen, sk);
-      rc = agent_scd_pksign (snbuf, 0,
-                             tmpbuf, tmp_n,
-                             &rbuf, &rbuflen);
-      xfree (snbuf);
-      if (!rc)
-        {
-          if (gcry_mpi_scan (&sig->data[0], GCRYMPI_FMT_USG,
-                             rbuf, rbuflen, NULL ))
-            BUG ();
-        }
-    }
-  else
-#endif 
-      if (sk->is_protected && sk->protect.s2k.mode == 1002)
+  if (sk->is_protected && sk->protect.s2k.mode == 1002)
     { /* FIXME: Note that we do only support RSA for now. */
       char *rbuf;
       size_t rbuflen;
@@ -621,7 +617,8 @@ write_signature_packets (SK_LIST sk_list, iobuf_t out, MD_HANDLE hash,
        sig = xcalloc (1,sizeof *sig);
        if(opt.force_v3_sigs || RFC1991)
          sig->version=3;
-       else if(duration || opt.sig_policy_url || opt.sig_notation_data)
+       else if(duration || opt.sig_policy_url
+               || opt.sig_notation_data || opt.sig_keyserver_url)
          sig->version=4;
        else
          sig->version=sk->version;
@@ -640,7 +637,7 @@ write_signature_packets (SK_LIST sk_list, iobuf_t out, MD_HANDLE hash,
 
        if (sig->version >= 4)
            build_sig_subpkt_from_sig (sig);
-       mk_notation_and_policy (sig, NULL, sk);
+       mk_notation_policy_etc (sig, NULL, sk);
 
         hash_sigversion_to_magic (md, sig);
        gcry_md_final (md);
@@ -1308,7 +1305,7 @@ make_keysig_packet( PKT_signature **ret_sig, PKT_public_key *pk,
     sig->sig_class = sigclass;
     if( sig->version >= 4 )
        build_sig_subpkt_from_sig( sig );
-    mk_notation_and_policy( sig, pk, sk );
+    mk_notation_policy_etc ( sig, pk, sk );
 
     /* Crucial that the call to mksubpkt comes LAST before the calls
        to finalize the sig as that makes it possible for the mksubpkt