Use macros for iobuf ioctls.
[gnupg.git] / g10 / revoke.c
index 29f4b8d..5e22a70 100644 (file)
@@ -6,7 +6,7 @@
  *
  * GnuPG is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
+ * the Free Software Foundation; either version 3 of the License, or
  * (at your option) any later version.
  *
  * GnuPG is distributed in the hope that it will be useful,
@@ -15,9 +15,7 @@
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
- * USA.
+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <config.h>
@@ -31,7 +29,7 @@
 #include "gpg.h"
 #include "options.h"
 #include "packet.h"
-#include "errors.h"
+#include "status.h"
 #include "keydb.h"
 #include "util.h"
 #include "main.h"
@@ -200,9 +198,9 @@ int
 gen_desig_revoke( const char *uname, strlist_t locusr )
 {
     int rc = 0;
-    armor_filter_context_t afx;
+    armor_filter_context_t *afx;
     PKT_public_key *pk = NULL;
-    PKT_secret_key *sk = NULL;
+    PKT_public_key *pk2 = NULL;
     PKT_signature *sig = NULL;
     IOBUF out = NULL;
     struct revocation_reason_info *reason = NULL;
@@ -219,11 +217,12 @@ gen_desig_revoke( const char *uname, strlist_t locusr )
        return G10ERR_GENERAL;
       }
 
-    memset( &afx, 0, sizeof afx);
+    afx = new_armor_context ();
 
     kdbhd = keydb_new (0);
-    classify_user_id (uname, &desc);
-    rc = desc.mode? keydb_search (kdbhd, &desc, 1) : G10ERR_INV_USER_ID;
+    rc = classify_user_id (uname, &desc);
+    if (!rc)
+      rc = keydb_search (kdbhd, &desc, 1);
     if (rc) {
        log_error (_("key \"%s\" not found: %s\n"),uname, g10_errstr (rc));
        goto leave;
@@ -263,8 +262,8 @@ gen_desig_revoke( const char *uname, strlist_t locusr )
       {
        SK_LIST list;
 
-       if(sk)
-         free_secret_key(sk);
+       if (pk2)
+         free_public_key (pk2);
 
        if(sk_list)
          {
@@ -273,7 +272,7 @@ gen_desig_revoke( const char *uname, strlist_t locusr )
                byte fpr[MAX_FINGERPRINT_LEN];
                size_t fprlen;
 
-               fingerprint_from_sk(list->sk,fpr,&fprlen);
+               fingerprint_from_pk (list->pk, fpr, &fprlen);
 
                /* Don't get involved with keys that don't have 160
                   bit fingerprints */
@@ -284,18 +283,19 @@ gen_desig_revoke( const char *uname, strlist_t locusr )
                  break;
              }
 
-           if(list)
-             sk=copy_secret_key(NULL,list->sk);
+           if (list)
+             pk2 = copy_public_key (NULL, list->pk);
            else
              continue;
          }
        else
          {
-           sk=xmalloc_secure_clear(sizeof(*sk));
-           rc=get_seckey_byfprint(sk,pk->revkey[i].fpr,MAX_FINGERPRINT_LEN);
+           pk2 = xmalloc_clear (sizeof *pk2);
+           rc = get_pubkey_byfprint (pk2,
+                                      pk->revkey[i].fpr, MAX_FINGERPRINT_LEN);
          }
 
-       /* We have the revocation key */
+       /* We have the revocation key */
        if(!rc)
          {
            PKT_signature *revkey = NULL;
@@ -306,7 +306,7 @@ gen_desig_revoke( const char *uname, strlist_t locusr )
            tty_printf ("\n");
 
            tty_printf (_("To be revoked by:\n"));
-            print_seckey_info (sk);
+            print_seckey_info (pk2);
 
            if(pk->revkey[i].class&0x40)
              tty_printf(_("(This is a sensitive revocation key)\n"));
@@ -321,23 +321,23 @@ gen_desig_revoke( const char *uname, strlist_t locusr )
            if( !reason )
              continue;
 
-           rc = check_secret_key( sk, 0 );
-           if( rc )
+           rc = -1;/*FIXME: check_secret_key (pk2, 0 );*/
+           if (rc)
              continue;
 
            if( !opt.armor )
              tty_printf(_("ASCII armored output forced.\n"));
 
-           if( (rc = open_outfile( NULL, 0, &out )) )
+           if( (rc = open_outfile (GNUPG_INVALID_FD, NULL, 0, &out )) )
              goto leave;
 
-           afx.what = 1;
-           afx.hdrlines = "Comment: A designated revocation certificate"
+           afx->what = 1;
+           afx->hdrlines = "Comment: A designated revocation certificate"
              " should follow\n";
-           iobuf_push_filter( out, armor_filter, &afx );
+           push_armor_filter (afx, out);
 
            /* create it */
-           rc = make_keysig_packet( &sig, pk, NULL, NULL, sk, 0x20, 0,
+           rc = make_keysig_packet( &sig, pk, NULL, NULL, pk2, 0x20, 0,
                                     0, 0, 0,
                                     revocation_reason_build_cb, reason );
            if( rc ) {
@@ -415,8 +415,8 @@ gen_desig_revoke( const char *uname, strlist_t locusr )
   leave:
     if( pk )
        free_public_key( pk );
-    if( sk )
-       free_secret_key( sk );
+    if (pk2)
+       free_public_key (pk2);
     if( sig )
        free_seckey_enc( sig );
 
@@ -427,6 +427,7 @@ gen_desig_revoke( const char *uname, strlist_t locusr )
     else
        iobuf_close(out);
     release_revocation_reason_info( reason );
+    release_armor_context (afx);
     return rc;
 }
 
@@ -438,7 +439,7 @@ int
 gen_revoke( const char *uname )
 {
     int rc = 0;
-    armor_filter_context_t afx;
+    armor_filter_context_t *afx;
     PACKET pkt;
     PKT_secret_key *sk; /* used as pointer into a kbnode */
     PKT_public_key *pk = NULL;
@@ -457,15 +458,16 @@ gen_revoke( const char *uname )
        return G10ERR_GENERAL;
       }
 
-    memset( &afx, 0, sizeof afx);
+    afx = new_armor_context ();
     init_packet( &pkt );
 
     /* search the userid: 
      * We don't want the whole getkey stuff here but the entire keyblock
      */
     kdbhd = keydb_new (1);
-    classify_user_id (uname, &desc);
-    rc = desc.mode? keydb_search (kdbhd, &desc, 1) : G10ERR_INV_USER_ID;
+    rc = classify_user_id (uname, &desc);
+    if (!rc)
+      rc = keydb_search (kdbhd, &desc, 1);
     if (rc)
       {
        log_error (_("secret key \"%s\" not found: %s\n"),
@@ -490,8 +492,6 @@ gen_revoke( const char *uname )
     keyid_from_sk( sk, sk_keyid );
     print_seckey_info (sk);
 
-    pk = xmalloc_clear( sizeof *pk );
-
     /* FIXME: We should get the public key direct from the secret one */
 
     pub_keyblock=get_pubkeyblock(sk_keyid);
@@ -553,12 +553,12 @@ gen_revoke( const char *uname )
     if( !opt.armor )
        tty_printf(_("ASCII armored output forced.\n"));
 
-    if( (rc = open_outfile( NULL, 0, &out )) )
+    if( (rc = open_outfile (GNUPG_INVALID_FD, NULL, 0, &out )) )
        goto leave;
 
-    afx.what = 1;
-    afx.hdrlines = "Comment: A revocation certificate should follow\n";
-    iobuf_push_filter( out, armor_filter, &afx );
+    afx->what = 1;
+    afx->hdrlines = "Comment: A revocation certificate should follow\n";
+    push_armor_filter (afx, out);
 
     /* create it */
     rc = make_keysig_packet( &sig, pk, NULL, NULL, sk, 0x20, 0,
@@ -609,6 +609,7 @@ gen_revoke( const char *uname )
     else
        iobuf_close(out);
     release_revocation_reason_info( reason );
+    release_armor_context (afx);
     return rc;
 }