g10: Always save standard revocation certificate in file.
authorMarcus Brinkmann <marcus.brinkmann@ruhr-uni-bochum.de>
Tue, 1 Aug 2017 15:41:03 +0000 (17:41 +0200)
committerMarcus Brinkmann <marcus.brinkmann@ruhr-uni-bochum.de>
Tue, 1 Aug 2017 15:41:03 +0000 (17:41 +0200)
* g10/main.h (open_outfile): New parameter NO_OUTFILE.
* g10/openfile.c (open_outfile): New parameter NO_OUTFILE.  If given,
never use opt.outfile.
* g10/revoke.c (create_revocation): If FILENAME is true, also set
NO_OUTFILE to true (for standard revocation certificates).
* g10/dearmor.c, g10/encrypt.c, g10/export.c, g10/revoke.c,
g10/sign.c: Adjust all other callers.

Signed-off-by: Marcus Brinkmann <mb@g10code.com>
GnuPG-bug-id: 3015

g10/dearmor.c
g10/encrypt.c
g10/export.c
g10/main.h
g10/openfile.c
g10/revoke.c
g10/sign.c

index 92239cc..839227a 100644 (file)
@@ -63,7 +63,7 @@ dearmor_file( const char *fname )
 
     push_armor_filter ( afx, inp );
 
 
     push_armor_filter ( afx, inp );
 
-    if( (rc = open_outfile (-1, fname, 0, 0, &out)) )
+    if( (rc = open_outfile (-1, fname, 0, 0, &out, 0)) )
        goto leave;
 
     while( (c = iobuf_get(inp)) != -1 )
        goto leave;
 
     while( (c = iobuf_get(inp)) != -1 )
@@ -109,7 +109,7 @@ enarmor_file( const char *fname )
     }
 
 
     }
 
 
-    if( (rc = open_outfile (-1, fname, 1, 0, &out )) )
+    if( (rc = open_outfile (-1, fname, 1, 0, &out, 0 )) )
        goto leave;
 
     afx->what = 4;
        goto leave;
 
     afx->what = 4;
index c68d6d5..6495280 100644 (file)
@@ -276,7 +276,7 @@ encrypt_simple (const char *filename, int mode, int use_seskey)
       do_compress = 0;
     }
 
       do_compress = 0;
     }
 
-  if ( rc || (rc = open_outfile (-1, filename, opt.armor? 1:0, 0, &out )))
+  if ( rc || (rc = open_outfile (-1, filename, opt.armor? 1:0, 0, &out, 0 )))
     {
       iobuf_cancel (inp);
       xfree (cfx.dek);
     {
       iobuf_cancel (inp);
       xfree (cfx.dek);
@@ -574,7 +574,7 @@ encrypt_crypt (ctrl_t ctrl, int filefd, const char *filename,
   if (opt.textmode)
     iobuf_push_filter (inp, text_filter, &tfx);
 
   if (opt.textmode)
     iobuf_push_filter (inp, text_filter, &tfx);
 
-  rc = open_outfile (outputfd, filename, opt.armor? 1:0, 0, &out);
+  rc = open_outfile (outputfd, filename, opt.armor? 1:0, 0, &out, 0);
   if (rc)
     goto leave;
 
   if (rc)
     goto leave;
 
index 8f6371b..b194a2a 100644 (file)
@@ -352,7 +352,7 @@ do_export (ctrl_t ctrl, strlist_t users, int secret, unsigned int options,
 
   memset( &zfx, 0, sizeof zfx);
 
 
   memset( &zfx, 0, sizeof zfx);
 
-  rc = open_outfile (-1, NULL, 0, !!secret, &out );
+  rc = open_outfile (-1, NULL, 0, !!secret, &out, 0 );
   if (rc)
     return rc;
 
   if (rc)
     return rc;
 
index 87417ee..5862cdf 100644 (file)
@@ -324,7 +324,7 @@ int overwrite_filep( const char *fname );
 char *make_outfile_name( const char *iname );
 char *ask_outfile_name( const char *name, size_t namelen );
 int open_outfile (int inp_fd, const char *iname, int mode,
 char *make_outfile_name( const char *iname );
 char *ask_outfile_name( const char *name, size_t namelen );
 int open_outfile (int inp_fd, const char *iname, int mode,
-                  int restrictedperm, iobuf_t *a);
+                  int restrictedperm, iobuf_t *a, int no_outfile);
 char *get_matching_datafile (const char *sigfilename);
 iobuf_t open_sigfile (const char *sigfilename, progress_filter_context_t *pfx);
 void try_make_homedir( const char *fname );
 char *get_matching_datafile (const char *sigfilename);
 iobuf_t open_sigfile (const char *sigfilename, progress_filter_context_t *pfx);
 void try_make_homedir( const char *fname );
index 78f4dbb..03b114d 100644 (file)
@@ -174,13 +174,15 @@ ask_outfile_name( const char *name, size_t namelen )
  * If INP_FD is not -1 the function simply creates an IOBUF for that
  * file descriptor and ignore INAME and MODE.  Note that INP_FD won't
  * be closed if the returned IOBUF is closed.  With RESTRICTEDPERM a
  * If INP_FD is not -1 the function simply creates an IOBUF for that
  * file descriptor and ignore INAME and MODE.  Note that INP_FD won't
  * be closed if the returned IOBUF is closed.  With RESTRICTEDPERM a
- * file will be created with mode 700 if possible.
+ * file will be created with mode 700 if possible.  If NO_OUTFILE is
+ * true, don't use the outfile option even if it is set.
  */
 int
 open_outfile (int inp_fd, const char *iname, int mode, int restrictedperm,
  */
 int
 open_outfile (int inp_fd, const char *iname, int mode, int restrictedperm,
-              iobuf_t *a)
+              iobuf_t *a, int no_outfile)
 {
   int rc = 0;
 {
   int rc = 0;
+  const char outfile = no_outfile ? NULL : opt.outfile;
 
   *a = NULL;
   if (inp_fd != -1)
 
   *a = NULL;
   if (inp_fd != -1)
@@ -200,7 +202,7 @@ open_outfile (int inp_fd, const char *iname, int mode, int restrictedperm,
           log_info (_("writing to '%s'\n"), xname);
         }
     }
           log_info (_("writing to '%s'\n"), xname);
         }
     }
-  else if (iobuf_is_pipe_filename (iname) && !opt.outfile)
+  else if (iobuf_is_pipe_filename (iname) && !outfile)
     {
       *a = iobuf_create (NULL, 0);
       if ( !*a )
     {
       *a = iobuf_create (NULL, 0);
       if ( !*a )
@@ -218,8 +220,8 @@ open_outfile (int inp_fd, const char *iname, int mode, int restrictedperm,
 
       if (opt.dry_run)
         name = NAME_OF_DEV_NULL;
 
       if (opt.dry_run)
         name = NAME_OF_DEV_NULL;
-      else if (opt.outfile)
-        name = opt.outfile;
+      else if (outfile)
+        name = outfile;
       else
         {
 #ifdef USE_ONLY_8DOT3
       else
         {
 #ifdef USE_ONLY_8DOT3
index 1dea6ae..db3c495 100644 (file)
@@ -334,7 +334,7 @@ gen_desig_revoke (ctrl_t ctrl, const char *uname, strlist_t locusr)
            if( !opt.armor )
              tty_printf(_("ASCII armored output forced.\n"));
 
            if( !opt.armor )
              tty_printf(_("ASCII armored output forced.\n"));
 
-           if( (rc = open_outfile (-1, NULL, 0, 1, &out )) )
+           if( (rc = open_outfile (-1, NULL, 0, 1, &out, 0 )) )
              goto leave;
 
            afx->what = 1;
              goto leave;
 
            afx->what = 1;
@@ -461,7 +461,7 @@ create_revocation (ctrl_t ctrl,
 
   afx = new_armor_context ();
 
 
   afx = new_armor_context ();
 
-  if ((rc = open_outfile (-1, filename, suffix, 1, &out)))
+  if ((rc = open_outfile (-1, filename, suffix, 1, &out, !!filename)))
     goto leave;
 
   if (leadintext )
     goto leave;
 
   if (leadintext )
index 4cf0cd3..0e379bc 100644 (file)
@@ -889,7 +889,7 @@ sign_file (ctrl_t ctrl, strlist_t filenames, int detached, strlist_t locusr,
            log_info(_("writing to '%s'\n"), outfile );
     }
     else if( (rc = open_outfile (-1, fname,
            log_info(_("writing to '%s'\n"), outfile );
     }
     else if( (rc = open_outfile (-1, fname,
-                                 opt.armor? 1: detached? 2:0, 0, &out)))
+                                 opt.armor? 1: detached? 2:0, 0, &out, 0)))
        goto leave;
 
     /* prepare to calculate the MD over the input */
        goto leave;
 
     /* prepare to calculate the MD over the input */
@@ -1191,7 +1191,7 @@ clearsign_file (ctrl_t ctrl,
        else if( opt.verbose )
            log_info(_("writing to '%s'\n"), outfile );
     }
        else if( opt.verbose )
            log_info(_("writing to '%s'\n"), outfile );
     }
-    else if ((rc = open_outfile (-1, fname, 1, 0, &out)))
+    else if ((rc = open_outfile (-1, fname, 1, 0, &out, 0)))
        goto leave;
 
     iobuf_writestr(out, "-----BEGIN PGP SIGNED MESSAGE-----" LF );
        goto leave;
 
     iobuf_writestr(out, "-----BEGIN PGP SIGNED MESSAGE-----" LF );
@@ -1340,7 +1340,7 @@ sign_symencrypt_file (ctrl_t ctrl, const char *fname, strlist_t locusr)
     cfx.dek->use_mdc = use_mdc (NULL, cfx.dek->algo);
 
     /* now create the outfile */
     cfx.dek->use_mdc = use_mdc (NULL, cfx.dek->algo);
 
     /* now create the outfile */
-    rc = open_outfile (-1, fname, opt.armor? 1:0, 0, &out);
+    rc = open_outfile (-1, fname, opt.armor? 1:0, 0, &out, 0);
     if (rc)
        goto leave;
 
     if (rc)
        goto leave;