[svn] gpgme - r1104 - in trunk: . doc gpgme tests tests/gpg

svn author marcus cvs at cvs.gnupg.org
Fri Sep 30 16:17:54 CEST 2005


Author: marcus
Date: 2005-09-30 16:17:47 +0200 (Fri, 30 Sep 2005)
New Revision: 1104

Added:
   trunk/tests/gpg/t-file-name.c
Modified:
   trunk/NEWS
   trunk/doc/ChangeLog
   trunk/doc/gpgme.texi
   trunk/gpgme/ChangeLog
   trunk/gpgme/data.c
   trunk/gpgme/data.h
   trunk/gpgme/gpgme.h
   trunk/gpgme/libgpgme.vers
   trunk/gpgme/rungpg.c
   trunk/tests/ChangeLog
   trunk/tests/gpg/Makefile.am
Log:
doc/
2005-09-30  Marcus Brinkmann  <marcus at g10code.de>

	* gpgme.texi (Data Buffer I/O Operations, Data Buffer Meta-Data):
	New subsections.

gpgme/
2005-09-30  Marcus Brinkmann  <marcus at g10code.de>

	* data.h (struct gpgme_data): New member file_name.
	* data.c (gpgme_data_set_filename): New function.
	(_gpgme_data_release): Free DH->filename if necessary.
	(gpgme_data_get_filename): New function.
	* rungpg.c (gpg_encrypt): Set filename option.
	(gpg_encrypt_sign): Likewise.
	(gpg_sign): Likewise.
	* libgpgme.vers (GPGME_1.1): Add gpgme_data_set_file_name and
	gpgme_data_get_file_name.

tests/
2005-09-30  Marcus Brinkmann  <marcus at g10code.de>

	* gpg/Makefile.am (TESTS): Add t-filename.
	* gpg/t-filename.c: New file.


Modified: trunk/NEWS
===================================================================
--- trunk/NEWS	2005-09-30 13:24:40 UTC (rev 1103)
+++ trunk/NEWS	2005-09-30 14:17:47 UTC (rev 1104)
@@ -32,6 +32,11 @@
    indicates if a key can be used for qualified signatures according
    to local government regulations.
 
+ * You can associate a filename with a data object using the new
+   gpgme_data_set_filename() function.  This filename will be stored
+   in the output when encrypting or signing the data and will be
+   returned when decrypting or verifying the output data.
+
  * Interface changes relative to the 1.0.3 release:
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 gpgme_set_engine_info		NEW
@@ -40,11 +45,12 @@
 gpgme_recipient_t		NEW
 gpgme_decrypt_result_t		EXTENDED: New field recipients.
 gpgme_verify_result_t		EXTENDED: New fields pubkey_algo, hash_algo.
-gpgme_decrypt_result_t		EXTENDED: New field file_name.
-gpgme_verify_result_t		EXTENDED: New field file_name.
+gpgme_decrypt_result_t		EXTENDED: New field plaintext_filename.
+gpgme_verify_result_t		EXTENDED: New field plaintext_filename.
 GPGME_STATUS_PLAINTEXT		NEW
 gpgme_key_t			EXTENDED: New field is_qualified.
 gpgme_subkey_t			EXTENDED: New field is_qualified.
+gpgme_data_set_filename		NEW
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 

Modified: trunk/doc/ChangeLog
===================================================================
--- trunk/doc/ChangeLog	2005-09-30 13:24:40 UTC (rev 1103)
+++ trunk/doc/ChangeLog	2005-09-30 14:17:47 UTC (rev 1104)
@@ -1,5 +1,8 @@
 2005-09-30  Marcus Brinkmann  <marcus at g10code.de>
 
+	* gpgme.texi (Data Buffer I/O Operations, Data Buffer Meta-Data):
+	New subsections.
+
 	* gpgme.texi: Replace plaintext_filename with file_name.
 
 	* gpgme.texi (Key Management): Document is_qualified.

Modified: trunk/doc/gpgme.texi
===================================================================
--- trunk/doc/gpgme.texi	2005-09-30 13:24:40 UTC (rev 1103)
+++ trunk/doc/gpgme.texi	2005-09-30 14:17:47 UTC (rev 1104)
@@ -153,6 +153,11 @@
 * File Based Data Buffers::       Creating file based data buffers.
 * Callback Based Data Buffers::   Creating callback based data buffers.
 
+Manipulating Data Buffers
+
+* Data Buffer I/O Operations::    I/O operations on data buffers.
+* Data Buffer Meta-Data::         Meta-data manipulation of data buffers.
+
 Contexts
 
 * Creating Contexts::             Creating new @acronym{GPGME} contexts.
@@ -1716,8 +1721,25 @@
 
 @node Manipulating Data Buffers
 @section Manipulating Data Buffers
- at cindex data buffere, manipulation
+ at cindex data buffer, manipulation
 
+Data buffers contain data and meta-data.  The following operations can
+be used to manipulate both.
+
+
+ at menu
+* Data Buffer I/O Operations::    I/O operations on data buffers.
+* Data Buffer Meta-Data::         Meta-data manipulation of data buffers.
+ at end menu
+
+
+ at node Data Buffer I/O Operations
+ at subsection Data Buffer I/O Operations
+ at cindex data buffer, I/O operations
+ at cindex data buffer, read
+ at cindex data buffer, write
+ at cindex data buffer, seek
+
 @deftypefun ssize_t gpgme_data_read (@w{gpgme_data_t @var{dh}}, @w{void *@var{buffer}}, @w{size_t @var{length}})
 The function @code{gpgme_data_read} reads up to @var{length} bytes
 from the data object with the handle @var{dh} into the space starting
@@ -1783,9 +1805,39 @@
 @end example
 @end deftypefun
 
- at c
- at c  gpgme_data_encoding_t
- at c
+
+
+
+ at node Data Buffer Meta-Data
+ at subsection Data Buffer Meta-Data
+ at cindex data buffer, meta-data
+ at cindex data buffer, file name
+ at cindex data buffer, encoding
+
+ at deftypefun char *gpgme_data_get_file_name (@w{gpgme_data_t @var{dh}})
+The function @code{gpgme_data_get_file_name} returns a pointer to a
+string containing the file name associated with the data object.  The
+file name will be stored in the output when encrypting or signing the
+data and will be returned to the user when decrypting or verifying the
+output data.
+
+If no error occurs, the string containing the file name is returned.
+Otherwise, @code{NULL} will be returned.
+ at end deftypefun
+
+
+ at deftypefun gpgme_error_t gpgme_data_set_file_name (@w{gpgme_data_t @var{dh}}, @w{const char *@var{file_name}})
+The function @code{gpgme_data_set_file_name} sets the file name
+associated with the data object.  The file name will be stored in the
+output when encrypting or signing the data and will be returned to the
+user when decrypting or verifying the output data.
+
+The function returns the error code @code{GPG_ERR_INV_VALUE} if
+ at var{dh} is not a valid pointer and @code{GPG_ERR_ENOMEM} if not
+enough memory is available.
+ at end deftypefun
+
+
 @deftp {Data type} {enum gpgme_data_encoding_t}
 @tindex gpgme_data_encoding_t
 The @code{gpgme_data_encoding_t} type specifies the encoding of a

Modified: trunk/gpgme/ChangeLog
===================================================================
--- trunk/gpgme/ChangeLog	2005-09-30 13:24:40 UTC (rev 1103)
+++ trunk/gpgme/ChangeLog	2005-09-30 14:17:47 UTC (rev 1104)
@@ -1,5 +1,15 @@
 2005-09-30  Marcus Brinkmann  <marcus at g10code.de>
 
+	* data.h (struct gpgme_data): New member file_name.
+	* data.c (gpgme_data_set_filename): New function.
+	(_gpgme_data_release): Free DH->filename if necessary.
+	(gpgme_data_get_filename): New function.
+	* rungpg.c (gpg_encrypt): Set filename option.
+	(gpg_encrypt_sign): Likewise.
+	(gpg_sign): Likewise.
+	* libgpgme.vers (GPGME_1.1): Add gpgme_data_set_file_name and
+	gpgme_data_get_file_name.
+
 	* decrpyt.c, verify.c, gpgme.h: Replace plaintext_filename with
 	file_name.
 

Modified: trunk/gpgme/data.c
===================================================================
--- trunk/gpgme/data.c	2005-09-30 13:24:40 UTC (rev 1103)
+++ trunk/gpgme/data.c	2005-09-30 14:17:47 UTC (rev 1104)
@@ -57,8 +57,12 @@
 void
 _gpgme_data_release (gpgme_data_t dh)
 {
-  if (dh)
-    free (dh);
+  if (!dh)
+    return;
+
+  if (dh->file_name)
+    free (dh->file_name);
+  free (dh);
 }
 
 
@@ -167,6 +171,36 @@
   return 0;
 }
 
+
+/* Set the file name associated with the data object with handle DH to
+   FILE_NAME.  */
+gpgme_error_t
+gpgme_data_set_file_name (gpgme_data_t dh, const char *file_name)
+{
+  if (!dh)
+    return gpg_error (GPG_ERR_INV_VALUE);
+
+  if (dh->file_name)
+    free (dh->file_name);
+
+  dh->file_name = strdup (file_name);
+  if (!dh->file_name)
+    return gpg_error_from_errno (errno);
+
+  return 0;
+}
+
+/* Get the file name associated with the data object with handle DH,
+   or NULL if there is none.  */
+char *
+gpgme_data_get_file_name (gpgme_data_t dh)
+{
+  if (!dh)
+    return NULL;
+
+  return dh->file_name;
+}
+
 
 /* Functions to support the wait interface.  */
 

Modified: trunk/gpgme/data.h
===================================================================
--- trunk/gpgme/data.h	2005-09-30 13:24:40 UTC (rev 1103)
+++ trunk/gpgme/data.h	2005-09-30 14:17:47 UTC (rev 1104)
@@ -77,6 +77,9 @@
   char pending[BUFFER_SIZE];
   int pending_len;
 
+  /* File name of the data object.  */
+  char *file_name;
+
   union
   {
     /* For gpgme_data_new_from_fd.  */

Modified: trunk/gpgme/gpgme.h
===================================================================
--- trunk/gpgme/gpgme.h	2005-09-30 13:24:40 UTC (rev 1103)
+++ trunk/gpgme/gpgme.h	2005-09-30 14:17:47 UTC (rev 1104)
@@ -952,8 +952,16 @@
 gpgme_error_t gpgme_data_set_encoding (gpgme_data_t dh,
 				       gpgme_data_encoding_t enc);
 
+/* Get the filename associated with the data object with handle DH, or
+   NULL if there is none.  */
+char *gpgme_data_get_file_name (gpgme_data_t dh);
 
+/* Set the filename associated with the data object with handle DH to
+   FILE_NAME.  */
+gpgme_error_t gpgme_data_set_file_name (gpgme_data_t dh,
+					const char *file_name);
 
+
 /* Create a new data buffer which retrieves the data from the callback
    function READ_CB.  Deprecated, please use gpgme_data_new_from_cbs
    instead.  */

Modified: trunk/gpgme/libgpgme.vers
===================================================================
--- trunk/gpgme/libgpgme.vers	2005-09-30 13:24:40 UTC (rev 1103)
+++ trunk/gpgme/libgpgme.vers	2005-09-30 14:17:47 UTC (rev 1104)
@@ -27,6 +27,9 @@
 
     gpgme_ctx_get_engine_info;
     gpgme_ctx_set_engine_info;
+
+    gpgme_data_set_file_name;
+    gpgme_data_get_file_name;
 };
 
 

Modified: trunk/gpgme/rungpg.c
===================================================================
--- trunk/gpgme/rungpg.c	2005-09-30 13:24:40 UTC (rev 1103)
+++ trunk/gpgme/rungpg.c	2005-09-30 14:17:47 UTC (rev 1104)
@@ -1339,6 +1339,13 @@
     err = add_arg (gpg, "-");
   if (!err)
     err = add_data (gpg, ciph, 1, 1);
+  if (gpgme_data_get_file_name (plain))
+    {
+      if (!err)
+	err = add_arg (gpg, "--set-filename");
+      if (!err)
+	err = add_arg (gpg, gpgme_data_get_file_name (plain));
+    }
   if (!err)
     err = add_arg (gpg, "--");
   if (!err)
@@ -1384,6 +1391,13 @@
     err = add_arg (gpg, "-");
   if (!err)
     err = add_data (gpg, ciph, 1, 1);
+  if (gpgme_data_get_file_name (plain))
+    {
+      if (!err)
+	err = add_arg (gpg, "--set-filename");
+      if (!err)
+	err = add_arg (gpg, gpgme_data_get_file_name (plain));
+    }
   if (!err)
     err = add_arg (gpg, "--");
   if (!err)
@@ -1595,6 +1609,14 @@
   if (!err)
     err = append_args_from_signers (gpg, ctx);
 
+  if (gpgme_data_get_file_name (in))
+    {
+      if (!err)
+	err = add_arg (gpg, "--set-filename");
+      if (!err)
+	err = add_arg (gpg, gpgme_data_get_file_name (in));
+    }
+
   /* Tell the gpg object about the data.  */
   if (!err)
     err = add_data (gpg, in, 0, 0);

Modified: trunk/tests/ChangeLog
===================================================================
--- trunk/tests/ChangeLog	2005-09-30 13:24:40 UTC (rev 1103)
+++ trunk/tests/ChangeLog	2005-09-30 14:17:47 UTC (rev 1104)
@@ -1,3 +1,8 @@
+2005-09-30  Marcus Brinkmann  <marcus at g10code.de>
+
+	* gpg/Makefile.am (TESTS): Add t-filename.
+	* gpg/t-filename.c: New file.
+
 2005-09-23  Werner Koch  <wk at g10code.com>
 
 	* gpg/t-support.h (init_gpgme) [W32]: Don't use LC_MESSAGES.

Modified: trunk/tests/gpg/Makefile.am
===================================================================
--- trunk/tests/gpg/Makefile.am	2005-09-30 13:24:40 UTC (rev 1103)
+++ trunk/tests/gpg/Makefile.am	2005-09-30 14:17:47 UTC (rev 1104)
@@ -28,7 +28,8 @@
 TESTS = t-encrypt t-encrypt-sym t-encrypt-sign t-sign t-signers	\
 	t-decrypt t-verify t-decrypt-verify \
 	t-export t-import t-trustlist t-eventloop t-edit \
-	t-keylist t-keylist-sig t-thread1 t-wait t-encrypt-large
+	t-keylist t-keylist-sig t-thread1 t-wait t-encrypt-large \
+	t-file-name
 
 CLEANFILES = secring.gpg pubring.gpg trustdb.gpg
 DISTCLEANFILES = pubring.gpg~ random_seed

Added: trunk/tests/gpg/t-file-name.c
===================================================================
--- trunk/tests/gpg/t-file-name.c	2005-09-30 13:24:40 UTC (rev 1103)
+++ trunk/tests/gpg/t-file-name.c	2005-09-30 14:17:47 UTC (rev 1104)
@@ -0,0 +1,99 @@
+/* t-file-name.c - Regression test.
+   Copyright (C) 2000 Werner Koch (dd9jn)
+   Copyright (C) 2001, 2002, 2003, 2004 g10 Code GmbH
+
+   This file is part of GPGME.
+ 
+   GPGME is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of
+   the License, or (at your option) any later version.
+   
+   GPGME is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+   
+   You should have received a copy of the GNU Lesser General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+   02111-1307, USA.  */
+
+/* We need to include config.h so that we know whether we are building
+   with large file system (LFS) support. */
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include <gpgme.h>
+
+#include "t-support.h"
+
+#define TESTNAME "abcde12345"
+
+
+int 
+main (int argc, char *argv[])
+{
+  gpgme_ctx_t ctx;
+  gpgme_error_t err;
+  gpgme_data_t in, out;
+  gpgme_key_t key[2] = { NULL, NULL };
+  gpgme_decrypt_result_t result;
+  char *agent_info;
+
+  init_gpgme (GPGME_PROTOCOL_OpenPGP);
+    
+  err = gpgme_new (&ctx);
+  fail_if_err (err);
+  gpgme_set_armor (ctx, 1);
+
+  agent_info = getenv("GPG_AGENT_INFO");
+  if (!(agent_info && strchr (agent_info, ':')))
+    gpgme_set_passphrase_cb (ctx, passphrase_cb, NULL);
+
+  err = gpgme_data_new_from_mem (&in, "Hallo Leute\n", 12, 0);
+  fail_if_err (err);
+
+  err = gpgme_data_set_file_name (in, TESTNAME);
+  fail_if_err (err);
+
+  err = gpgme_data_new (&out);
+  fail_if_err (err);
+
+  err = gpgme_get_key (ctx, "A0FF4590BB6122EDEF6E3C542D727CC768697734",
+		       &key[0], 0);
+  fail_if_err (err);
+
+  err = gpgme_op_encrypt (ctx, key, GPGME_ENCRYPT_ALWAYS_TRUST, in, out);
+  fail_if_err (err);
+
+  gpgme_data_release (in);
+  err = gpgme_data_new (&in);
+  fail_if_err (err);
+
+  err = gpgme_data_seek (out, 0, SEEK_SET);
+  fail_if_err (err);
+
+  err = gpgme_op_decrypt (ctx, out, in);
+  fail_if_err (err);
+  result = gpgme_op_decrypt_result (ctx);
+
+  if (strcmp (TESTNAME, result->file_name))
+    {
+      fprintf (stderr, "%s:%i: Unexpected result file name: %s\n",
+               __FILE__, __LINE__,
+	       result->file_name ? "(null)" : result->file_name);
+      exit (1);
+    }
+
+  gpgme_key_unref (key[0]);
+  gpgme_data_release (in);
+  gpgme_data_release (out);
+  gpgme_release (ctx);
+  return 0;
+}




More information about the Gnupg-commits mailing list