2003-04-29  Marcus Brinkmann  <marcus@g10code.de>

	* gpgme.texi (Trust Item Management): Add data members of
	GpgmeTrustItem type.
	(Information About Trust Items): Add note about obsoleteness.
	(Manipulating Trust Items): Add gpgme_trust_item_ref and
	gpgme_trust_item_unref.

gpgme/
2003-04-29  Marcus Brinkmann  <marcus@g10code.de>

	* gpgme.h (struct _gpgme_trust_item): New structure.
	(GpgmeTrustItem): New type.
	(gpgme_trust_item_ref, gpgme_trust_item_unref): New prototypes.
	* context.h (struct trust_queue_item_s): Remove structure.
	(struct gpgme_context_s): Remove trust_queue member.
	* Makefile.am (libgpgme_la_SOURCES): Add trust-item.c.
	* trust-item.c: New file.
	* trustlist.c: Do not include <stdio.h> or <time.h>, but
	"gpgme.h".
	(struct trust_queue_item_s): Change to new type op_data_t.
	(trust_status_handler): Change first argument to void *.
	(trust_colon_handler): Likewise.
	(_gpgme_op_trustlist_event_cb): Use op_data_t type.
	(gpgme_op_trustlist_start): Use op_data_t and rework error
	handling.
	(gpgme_op_trustlist_next): Use op_data_t.
	(gpgme_trust_item_release): Remove function.
	(gpgme_trust_item_get_string_attr): Likewise.
	(gpgme_trust_item_get_int_attr): Likewise.

tests/
2003-04-29  Marcus Brinkmann  <marcus@g10code.de>

	* gpg/t-trustlist.c: Rewritten.
This commit is contained in:
Marcus Brinkmann 2003-04-29 21:53:58 +00:00
parent 26ec59fdbd
commit c476829aba
11 changed files with 263 additions and 249 deletions

12
NEWS
View File

@ -97,6 +97,12 @@ Noteworthy changes in version 0.4.1 (unreleased)
gpgme_get_sig_string_attr and gpgme_get_sig_key are now deprecated, gpgme_get_sig_string_attr and gpgme_get_sig_key are now deprecated,
and gpgme_get_notation is removed. and gpgme_get_notation is removed.
* GpgmeTrustItem objects have now directly accessible data, so the
gpgme_trust_item_get_string_attr and gpgme_trust_item_get_ulong_attr
accessor functions are deprecated. Also, reference counting is
available through gpgme_trust_item_ref and gpgme_trust_item_unref
(the gpgme_trust_item_release alias for the latter is deprecated).
* Interface changes relative to the 0.4.0 release: * Interface changes relative to the 0.4.0 release:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
GpgmeIOCb CHANGED: Return type from void to GpgmeError. GpgmeIOCb CHANGED: Return type from void to GpgmeError.
@ -147,6 +153,12 @@ gpgme_get_sig_ulong_attr DEPRECATED: Use verify result directly.
gpgme_get_sig_string_attr DEPRECATED: Use verify result directly. gpgme_get_sig_string_attr DEPRECATED: Use verify result directly.
GPGME_SIG_STAT_* DEPRECATED: Use error value in sig status. GPGME_SIG_STAT_* DEPRECATED: Use error value in sig status.
gpgme_get_sig_status DEPRECATED: Use verify result directly. gpgme_get_sig_status DEPRECATED: Use verify result directly.
GpgmeTrustItem CHANGED: Now has user accessible data members.
gpgme_trust_item_ref NEW
gpgme_trust_item_unref NEW
gpgme_trust_item_release DEPRECATED: Use gpgme_trust_item_unref.
gpgme_trust_item_get_string_attr DEPRECATED
gpgme_trust_item_get_ulong_attr DEPRECATED
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Noteworthy changes in version 0.4.0 (2002-12-23) Noteworthy changes in version 0.4.0 (2002-12-23)

View File

@ -1,3 +1,11 @@
2003-04-29 Marcus Brinkmann <marcus@g10code.de>
* gpgme.texi (Trust Item Management): Add data members of
GpgmeTrustItem type.
(Information About Trust Items): Add note about obsoleteness.
(Manipulating Trust Items): Add gpgme_trust_item_ref and
gpgme_trust_item_unref.
2003-04-28 Marcus Brinkmann <marcus@g10code.de> 2003-04-28 Marcus Brinkmann <marcus@g10code.de>
* gpgme.texi (Verify): Rewritten to take into account new and * gpgme.texi (Verify): Rewritten to take into account new and

View File

@ -2256,7 +2256,7 @@ the key @var{key}.
@deftypefun void gpgme_key_unref (@w{GpgmeKey @var{key}}) @deftypefun void gpgme_key_unref (@w{GpgmeKey @var{key}})
@deftypefunx void gpgme_key_release (@w{GpgmeKey @var{key}}) @deftypefunx void gpgme_key_release (@w{GpgmeKey @var{key}})
The function @code{gpgme_key_ref} releases a reference for the key The function @code{gpgme_key_unref} releases a reference for the key
@var{key}. If this was the last reference, the key will be destroyed @var{key}. If this was the last reference, the key will be destroyed
and all resources associated to it will be released. and all resources associated to it will be released.
@ -2598,7 +2598,29 @@ started successfully, and @code{GPGME_Invalid_Value} if @var{ctx} or
@strong{Caution:} The trust items interface is experimental. @strong{Caution:} The trust items interface is experimental.
@deftp {Data type} GpgmeTrustItem @deftp {Data type} GpgmeTrustItem
The @code{GpgmeTrustItem} type is a handle for a trust item. The @code{GpgmeTrustItem} type is a pointer to a trust item object.
It has the following members:
@table @code
@item char *keyid
This is a string describing the key to which this trust items belongs.
@item int type
This is the type of the trust item. A value of 1 refers to a key, a
value of 2 refers to a user ID.
@item int level
This is the trust level.
@item char *otrust
The owner trust if @code{type} is 1.
@item char *val
The calculated validity.
@item char *name
The user name if @code{type} is 2.
@end table
@end deftp @end deftp
@menu @menu
@ -2666,6 +2688,10 @@ operation there was not enough memory available.
@cindex trust item, attributes @cindex trust item, attributes
@cindex attributes, of a trust item @cindex attributes, of a trust item
The following interfaces are deprecated and only provided for backward
compatibility. Don't use them. They will be removed in a future
version of @acronym{GPGME}.
Trust items have attributes which can be queried using the interfaces Trust items have attributes which can be queried using the interfaces
below. The attribute identifiers are shared with those for key below. The attribute identifiers are shared with those for key
attributes. @xref{Information About Keys}. attributes. @xref{Information About Keys}.
@ -2701,9 +2727,26 @@ or @var{reserved} not @code{NULL}.
@subsection Manipulating Trust Items @subsection Manipulating Trust Items
@cindex trust item, manipulation @cindex trust item, manipulation
@deftypefun void gpgme_trust_item_ref (@w{GpgmeTrustItem @var{item}})
The function @code{gpgme_trust_item_ref} acquires an additional
reference for the trust item @var{item}.
@end deftypefun
@deftypefun void gpgme_trust_item_unref (@w{GpgmeTrustItem @var{item}})
The function @code{gpgme_trust_item_unref} releases a reference for
the trust item @var{item}. If this was the last reference, the trust
item will be destroyed and all resources associated to it will be
released.
@end deftypefun
The following interface is deprecated and only provided for backward
compatibility. Don't use it. It will be removed in a future version
of @acronym{GPGME}.
@deftypefun void gpgme_trust_item_release (@w{GpgmeTrustItem @var{item}}) @deftypefun void gpgme_trust_item_release (@w{GpgmeTrustItem @var{item}})
The function @code{gpgme_trust_item_release} destroys a The function @code{gpgme_trust_item_release} is an alias for
@code{GpgmeTrustItem} object and releases all associated resources. @code{gpgme_trust_item_unref}.
@end deftypefun @end deftypefun

View File

@ -1,5 +1,25 @@
2003-04-29 Marcus Brinkmann <marcus@g10code.de> 2003-04-29 Marcus Brinkmann <marcus@g10code.de>
* gpgme.h (struct _gpgme_trust_item): New structure.
(GpgmeTrustItem): New type.
(gpgme_trust_item_ref, gpgme_trust_item_unref): New prototypes.
* context.h (struct trust_queue_item_s): Remove structure.
(struct gpgme_context_s): Remove trust_queue member.
* Makefile.am (libgpgme_la_SOURCES): Add trust-item.c.
* trust-item.c: New file.
* trustlist.c: Do not include <stdio.h> or <time.h>, but
"gpgme.h".
(struct trust_queue_item_s): Change to new type op_data_t.
(trust_status_handler): Change first argument to void *.
(trust_colon_handler): Likewise.
(_gpgme_op_trustlist_event_cb): Use op_data_t type.
(gpgme_op_trustlist_start): Use op_data_t and rework error
handling.
(gpgme_op_trustlist_next): Use op_data_t.
(gpgme_trust_item_release): Remove function.
(gpgme_trust_item_get_string_attr): Likewise.
(gpgme_trust_item_get_int_attr): Likewise.
* verify.c (calc_sig_summary): Do not set GPGME_SIGSUM_SYS_ERROR * verify.c (calc_sig_summary): Do not set GPGME_SIGSUM_SYS_ERROR
for bad signatures. for bad signatures.

View File

@ -77,7 +77,7 @@ libgpgme_la_SOURCES = \
op-support.c \ op-support.c \
encrypt.c encrypt-sign.c decrypt.c decrypt-verify.c verify.c \ encrypt.c encrypt-sign.c decrypt.c decrypt-verify.c verify.c \
sign.c passphrase.c progress.c \ sign.c passphrase.c progress.c \
key.h key.c key-cache.c keylist.c trustlist.c \ key.c key-cache.c keylist.c trust-item.c trustlist.c \
import.c export.c genkey.c delete.c edit.c \ import.c export.c genkey.c delete.c edit.c \
engine.h engine-backend.h engine.c rungpg.c status-table.h \ engine.h engine-backend.h engine.c rungpg.c status-table.h \
${gpgsm_components} sema.h io.h ${system_components} \ ${gpgsm_components} sema.h io.h ${system_components} \

View File

@ -63,13 +63,6 @@ struct key_queue_item_s
}; };
struct trust_queue_item_s
{
struct trust_queue_item_s *next;
GpgmeTrustItem item;
};
/* Currently we need it at several places, so we put the definition /* Currently we need it at several places, so we put the definition
into this header file. */ into this header file. */
struct gpgme_context_s struct gpgme_context_s
@ -111,7 +104,6 @@ struct gpgme_context_s
/* Something new is available. */ /* Something new is available. */
volatile int key_cond; volatile int key_cond;
struct key_queue_item_s *key_queue; struct key_queue_item_s *key_queue;
struct trust_queue_item_s *trust_queue;
/* The user provided passphrase callback and its hook value. */ /* The user provided passphrase callback and its hook value. */
GpgmePassphraseCb passphrase_cb; GpgmePassphraseCb passphrase_cb;

View File

@ -67,10 +67,6 @@ typedef struct gpgme_recipients_s *GpgmeRecipients;
struct gpgme_key_s; struct gpgme_key_s;
typedef struct gpgme_key_s *GpgmeKey; typedef struct gpgme_key_s *GpgmeKey;
/* A trust item. */
struct gpgme_trust_item_s;
typedef struct gpgme_trust_item_s *GpgmeTrustItem;
/* The error numbers used by GPGME. */ /* The error numbers used by GPGME. */
typedef enum typedef enum
@ -729,21 +725,6 @@ unsigned long gpgme_key_sig_get_ulong_attr (GpgmeKey key, int uid_idx,
GpgmeAttr what, GpgmeAttr what,
const void *reserved, int idx); const void *reserved, int idx);
/* Release the trust item ITEM. */
void gpgme_trust_item_release (GpgmeTrustItem item);
/* Return the value of the attribute WHAT of ITEM, which has to be
representable by a string. */
const char *gpgme_trust_item_get_string_attr (GpgmeTrustItem item,
GpgmeAttr what,
const void *reserved, int idx);
/* Return the value of the attribute WHAT of KEY, which has to be
representable by an integer. IDX specifies a running index if the
attribute appears more than once in the key. */
int gpgme_trust_item_get_int_attr (GpgmeTrustItem item, GpgmeAttr what,
const void *reserved, int idx);
/* Crypto Operations. */ /* Crypto Operations. */
@ -1082,6 +1063,42 @@ GpgmeError gpgme_op_keylist_next (GpgmeCtx ctx, GpgmeKey *r_key);
/* Terminate a pending keylist operation within CTX. */ /* Terminate a pending keylist operation within CTX. */
GpgmeError gpgme_op_keylist_end (GpgmeCtx ctx); GpgmeError gpgme_op_keylist_end (GpgmeCtx ctx);
/* Trust items and operations. */
struct _gpgme_trust_item
{
/* Internal to GPGME, do not use. */
unsigned int _refs;
/* The key ID to which the trust item belongs. */
char *keyid;
/* Internal to GPGME, do not use. */
char _keyid[16 + 1];
/* The type of the trust item, 1 refers to a key, 2 to a user ID. */
int type;
/* The trust level. */
int level;
/* The owner trust if TYPE is 1. */
char *otrust;
/* Internal to GPGME, do not use. */
char _otrust[2];
/* The calculated validity. */
char *val;
/* Internal to GPGME, do not use. */
char _val[2];
/* The user name if TYPE is 2. */
char *name;
};
typedef struct _gpgme_trust_item *GpgmeTrustItem;
/* Start a trustlist operation within CTX, searching for trust items /* Start a trustlist operation within CTX, searching for trust items
which match PATTERN. */ which match PATTERN. */
@ -1094,7 +1111,29 @@ GpgmeError gpgme_op_trustlist_next (GpgmeCtx ctx, GpgmeTrustItem *r_item);
/* Terminate a pending trustlist operation within CTX. */ /* Terminate a pending trustlist operation within CTX. */
GpgmeError gpgme_op_trustlist_end (GpgmeCtx ctx); GpgmeError gpgme_op_trustlist_end (GpgmeCtx ctx);
/* Acquire a reference to ITEM. */
void gpgme_trust_item_ref (GpgmeTrustItem item);
/* Release a reference to ITEM. If this was the last one the trust
item is destroyed. */
void gpgme_trust_item_unref (GpgmeTrustItem item);
/* Release the trust item ITEM. */
void gpgme_trust_item_release (GpgmeTrustItem item);
/* Return the value of the attribute WHAT of ITEM, which has to be
representable by a string. */
const char *gpgme_trust_item_get_string_attr (GpgmeTrustItem item,
GpgmeAttr what,
const void *reserved, int idx);
/* Return the value of the attribute WHAT of KEY, which has to be
representable by an integer. IDX specifies a running index if the
attribute appears more than once in the key. */
int gpgme_trust_item_get_int_attr (GpgmeTrustItem item, GpgmeAttr what,
const void *reserved, int idx);
/* Various functions. */ /* Various functions. */
/* Check that the library fulfills the version requirement. */ /* Check that the library fulfills the version requirement. */

View File

@ -21,48 +21,34 @@
#if HAVE_CONFIG_H #if HAVE_CONFIG_H
#include <config.h> #include <config.h>
#endif #endif
#include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <time.h>
#include <assert.h> #include <assert.h>
#include "gpgme.h"
#include "util.h" #include "util.h"
#include "context.h" #include "context.h"
#include "ops.h" #include "ops.h"
struct gpgme_trust_item_s
struct trust_queue_item_s
{ {
int level; struct trust_queue_item_s *next;
char keyid[16+1]; GpgmeTrustItem item;
int type;
char ot[2];
char val[2];
char *name;
}; };
typedef struct
static GpgmeTrustItem
trust_item_new (void)
{ {
GpgmeTrustItem item; /* Something new is available. */
int trust_cond;
item = calloc (1, sizeof *item); struct trust_queue_item_s *trust_queue;
return item; } *op_data_t;
}
static GpgmeError static GpgmeError
trustlist_status_handler (GpgmeCtx ctx, GpgmeStatusCode code, char *args) trustlist_status_handler (void *priv, GpgmeStatusCode code, char *args)
{ {
switch (code)
{
case GPGME_STATUS_EOF:
break;
default:
break;
}
return 0; return 0;
} }
@ -79,8 +65,10 @@ trustlist_status_handler (GpgmeCtx ctx, GpgmeStatusCode code, char *args)
complete count NAME ist the username and only printed on U complete count NAME ist the username and only printed on U
lines. */ lines. */
static GpgmeError static GpgmeError
trustlist_colon_handler (GpgmeCtx ctx, char *line) trustlist_colon_handler (void *priv, char *line)
{ {
GpgmeCtx ctx = (GpgmeCtx) priv;
GpgmeError err;
char *p, *pend; char *p, *pend;
int field = 0; int field = 0;
GpgmeTrustItem item = NULL; GpgmeTrustItem item = NULL;
@ -98,9 +86,9 @@ trustlist_colon_handler (GpgmeCtx ctx, char *line)
switch (field) switch (field)
{ {
case 1: /* level */ case 1: /* level */
item = trust_item_new (); err = _gpgme_trust_item_new (&item);
if (!item) if (err)
return GPGME_Out_Of_Core; return err;
item->level = atoi (p); item->level = atoi (p);
break; break;
case 2: /* long keyid */ case 2: /* long keyid */
@ -111,17 +99,15 @@ trustlist_colon_handler (GpgmeCtx ctx, char *line)
item->type = *p == 'K'? 1 : *p == 'U'? 2 : 0; item->type = *p == 'K'? 1 : *p == 'U'? 2 : 0;
break; break;
case 5: /* owner trust */ case 5: /* owner trust */
item->ot[0] = *p; item->_otrust[0] = *p;
item->ot[1] = 0;
break; break;
case 6: /* validity */ case 6: /* validity */
item->val[0] = *p; item->_val[0] = *p;
item->val[1] = 0;
break; break;
case 9: /* user ID */ case 9: /* user ID */
item->name = strdup (p); item->name = strdup (p);
if (!item->name) { if (!item->name) {
gpgme_trust_item_release (item); gpgme_trust_item_unref (item);
return GPGME_Out_Of_Core; return GPGME_Out_Of_Core;
} }
break; break;
@ -138,25 +124,31 @@ void
_gpgme_op_trustlist_event_cb (void *data, GpgmeEventIO type, void *type_data) _gpgme_op_trustlist_event_cb (void *data, GpgmeEventIO type, void *type_data)
{ {
GpgmeCtx ctx = (GpgmeCtx) data; GpgmeCtx ctx = (GpgmeCtx) data;
GpgmeError err;
op_data_t opd;
GpgmeTrustItem item = (GpgmeTrustItem) type_data; GpgmeTrustItem item = (GpgmeTrustItem) type_data;
struct trust_queue_item_s *q, *q2; struct trust_queue_item_s *q, *q2;
assert (type == GPGME_EVENT_NEXT_TRUSTITEM); assert (type == GPGME_EVENT_NEXT_TRUSTITEM);
err = _gpgme_op_data_lookup (ctx, OPDATA_TRUSTLIST, (void **) &opd,
-1, NULL);
if (err)
return;
q = malloc (sizeof *q); q = malloc (sizeof *q);
if (!q) if (!q)
{ {
gpgme_trust_item_release (item); gpgme_trust_item_unref (item);
/* FIXME */ /* FIXME: GPGME_Out_Of_Core; */
/* ctx->error = GPGME_Out_Of_Core; */
return; return;
} }
q->item = item; q->item = item;
q->next = NULL; q->next = NULL;
/* FIXME: lock queue, keep a tail pointer */ /* FIXME: Use a tail pointer */
q2 = ctx->trust_queue; q2 = opd->trust_queue;
if (!q2) if (!q2)
ctx->trust_queue = q; opd->trust_queue = q;
else else
{ {
while (q2->next) while (q2->next)
@ -164,7 +156,7 @@ _gpgme_op_trustlist_event_cb (void *data, GpgmeEventIO type, void *type_data)
q2->next = q; q2->next = q;
} }
/* FIXME: unlock queue */ /* FIXME: unlock queue */
ctx->key_cond = 1; opd->trust_cond = 1;
} }
@ -172,36 +164,36 @@ GpgmeError
gpgme_op_trustlist_start (GpgmeCtx ctx, const char *pattern, int max_level) gpgme_op_trustlist_start (GpgmeCtx ctx, const char *pattern, int max_level)
{ {
GpgmeError err = 0; GpgmeError err = 0;
op_data_t opd;
if (!pattern || !*pattern) if (!pattern || !*pattern)
return GPGME_Invalid_Value; return GPGME_Invalid_Value;
err = _gpgme_op_reset (ctx, 2); err = _gpgme_op_reset (ctx, 2);
if (err) if (err)
goto leave; return err;
err = _gpgme_op_data_lookup (ctx, OPDATA_TRUSTLIST, (void **) &opd,
sizeof (*opd), NULL);
if (err)
return err;
_gpgme_engine_set_status_handler (ctx->engine, _gpgme_engine_set_status_handler (ctx->engine,
trustlist_status_handler, ctx); trustlist_status_handler, ctx);
err = _gpgme_engine_set_colon_line_handler (ctx->engine, err = _gpgme_engine_set_colon_line_handler (ctx->engine,
trustlist_colon_handler, ctx); trustlist_colon_handler, ctx);
if (err) if (err)
goto leave;
err =_gpgme_engine_op_trustlist (ctx->engine, pattern);
leave:
if (err)
{
_gpgme_engine_release (ctx->engine);
ctx->engine = NULL;
}
return err; return err;
return _gpgme_engine_op_trustlist (ctx->engine, pattern);
} }
GpgmeError GpgmeError
gpgme_op_trustlist_next (GpgmeCtx ctx, GpgmeTrustItem *r_item) gpgme_op_trustlist_next (GpgmeCtx ctx, GpgmeTrustItem *r_item)
{ {
GpgmeError err;
op_data_t opd;
struct trust_queue_item_s *q; struct trust_queue_item_s *q;
if (!r_item) if (!r_item)
@ -210,18 +202,23 @@ gpgme_op_trustlist_next (GpgmeCtx ctx, GpgmeTrustItem *r_item)
if (!ctx) if (!ctx)
return GPGME_Invalid_Value; return GPGME_Invalid_Value;
if (!ctx->trust_queue) err = _gpgme_op_data_lookup (ctx, OPDATA_TRUSTLIST, (void **) &opd,
{ -1, NULL);
GpgmeError err = _gpgme_wait_on_condition (ctx, &ctx->key_cond);
if (err) if (err)
return err; return err;
if (!ctx->key_cond)
if (!opd->trust_queue)
{
err = _gpgme_wait_on_condition (ctx, &opd->trust_cond);
if (err)
return err;
if (!opd->trust_cond)
return GPGME_EOF; return GPGME_EOF;
ctx->key_cond = 0; opd->trust_cond = 0;
assert (ctx->trust_queue); assert (opd->trust_queue);
} }
q = ctx->trust_queue; q = opd->trust_queue;
ctx->trust_queue = q->next; opd->trust_queue = q->next;
*r_item = q->item; *r_item = q->item;
free (q); free (q);
@ -229,13 +226,7 @@ gpgme_op_trustlist_next (GpgmeCtx ctx, GpgmeTrustItem *r_item)
} }
/** /* Terminate a pending trustlist operation within CTX. */
* gpgme_op_trustlist_end:
* @c: Context
*
* Ends the trustlist operation and allows to use the context for some
* other operation next.
**/
GpgmeError GpgmeError
gpgme_op_trustlist_end (GpgmeCtx ctx) gpgme_op_trustlist_end (GpgmeCtx ctx)
{ {
@ -244,76 +235,3 @@ gpgme_op_trustlist_end (GpgmeCtx ctx)
return 0; return 0;
} }
void
gpgme_trust_item_release (GpgmeTrustItem item)
{
if (!item)
return;
if (item->name)
free (item->name);
free (item);
}
const char *
gpgme_trust_item_get_string_attr (GpgmeTrustItem item, GpgmeAttr what,
const void *reserved, int idx)
{
const char *val = NULL;
if (!item)
return NULL;
if (reserved)
return NULL;
if (idx)
return NULL;
switch (what)
{
case GPGME_ATTR_KEYID:
val = item->keyid;
break;
case GPGME_ATTR_OTRUST:
val = item->ot;
break;
case GPGME_ATTR_VALIDITY:
val = item->val;
break;
case GPGME_ATTR_USERID:
val = item->name;
break;
default:
break;
}
return val;
}
int
gpgme_trust_item_get_int_attr (GpgmeTrustItem item, GpgmeAttr what,
const void *reserved, int idx)
{
int val = 0;
if (!item)
return 0;
if (reserved)
return 0;
if (idx)
return 0;
switch (what)
{
case GPGME_ATTR_LEVEL:
val = item->level;
break;
case GPGME_ATTR_TYPE:
val = item->type;
break;
default:
break;
}
return val;
}

View File

@ -1,5 +1,7 @@
2003-04-29 Marcus Brinkmann <marcus@g10code.de> 2003-04-29 Marcus Brinkmann <marcus@g10code.de>
* gpg/t-trustlist.c: Rewritten.
* gpg/t-verify.c (main): Rewritten. * gpg/t-verify.c (main): Rewritten.
* gpg/t-decrypt-verify.c: Rewritten. * gpg/t-decrypt-verify.c: Rewritten.
* gpgsm/t-verify.c (main): Rewritten. * gpgsm/t-verify.c (main): Rewritten.

View File

@ -25,7 +25,7 @@
#include <gpgme.h> #include <gpgme.h>
#define fail_if_err(err) \ #define fail_if_err(err) \
do \ do \
{ \ { \

View File

@ -1,90 +1,70 @@
/* t-trustlist.c - regression test /* t-trustlist.c - Regression test.
* Copyright (C) 2000 Werner Koch (dd9jn) Copyright (C) 2000 Werner Koch (dd9jn)
* Copyright (C) 2001 g10 Code GmbH Copyright (C) 2001, 2003 g10 Code GmbH
*
* This file is part of GPGME. This file is part of GPGME.
*
* GPGME is free software; you can redistribute it and/or modify GPGME is free software; you can redistribute it and/or modify it
* it under the terms of the GNU General Public License as published by 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 2 of the License, or
* (at your option) any later version. (at your option) any later version.
*
* GPGME is distributed in the hope that it will be useful, GPGME is distributed in the hope that it will be useful, but
* but WITHOUT ANY WARRANTY; without even the implied warranty of WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* GNU General Public License for more details. General Public License for more details.
*
* You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software along with GPGME; if not, write to the Free Software Foundation,
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
*/
#include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <stdio.h>
#include <string.h> #include <string.h>
#include <assert.h>
#include <gpgme.h> #include <gpgme.h>
#define fail_if_err(a) do { if(a) { \
#define fail_if_err(err) \
do \
{ \
if (err) \
{ \
fprintf (stderr, "%s:%d: GpgmeError %s\n", \ fprintf (stderr, "%s:%d: GpgmeError %s\n", \
__FILE__, __LINE__, gpgme_strerror(a)); \ __FILE__, __LINE__, gpgme_strerror (err)); \
exit (1); } \ exit (1); \
} while(0) } \
} \
static void while (0)
doit ( GpgmeCtx ctx, const char *pattern )
{
GpgmeError err;
GpgmeTrustItem item;
err = gpgme_op_trustlist_start (ctx, pattern, 0 );
fail_if_err (err);
while ( !(err = gpgme_op_trustlist_next ( ctx, &item )) ) {
printf ("l=%d k=%s t=%d o=%s v=%s u=%s\n",
gpgme_trust_item_get_int_attr (item, GPGME_ATTR_LEVEL, NULL, 0 ),
gpgme_trust_item_get_string_attr (item, GPGME_ATTR_KEYID, NULL, 0 ),
gpgme_trust_item_get_int_attr (item, GPGME_ATTR_TYPE, NULL, 0 ),
gpgme_trust_item_get_string_attr (item, GPGME_ATTR_OTRUST, NULL, 0 ),
gpgme_trust_item_get_string_attr (item, GPGME_ATTR_VALIDITY, NULL, 0 ),
gpgme_trust_item_get_string_attr (item, GPGME_ATTR_USERID, NULL, 0 )
);
gpgme_trust_item_release (item);
}
if ( err != GPGME_EOF )
fail_if_err (err);
}
int int
main (int argc, char **argv ) main (int argc, char *argv[])
{ {
GpgmeCtx ctx; GpgmeCtx ctx;
GpgmeError err; GpgmeError err;
int loop = 0; GpgmeTrustItem item;
const char *pattern;
if( argc ) {
argc--; argv++;
}
if (argc && !strcmp( *argv, "--loop" ) ) {
loop = 1;
argc--; argv++;
}
pattern = argc? *argv : "alice";
err = gpgme_new (&ctx); err = gpgme_new (&ctx);
fail_if_err (err); fail_if_err (err);
do {
fprintf (stderr, "** pattern=`%s'\n", pattern );
doit ( ctx, pattern );
} while ( loop );
gpgme_release (ctx);
err = gpgme_op_trustlist_start (ctx, "alice", 0);
fail_if_err (err);
while (!(err = gpgme_op_trustlist_next (ctx, &item)))
{
printf ("l=%d k=%s t=%d o=%s v=%s u=%s\n",
gpgme_trust_item_get_int_attr (item, GPGME_ATTR_LEVEL, NULL, 0),
gpgme_trust_item_get_string_attr (item, GPGME_ATTR_KEYID, NULL, 0),
gpgme_trust_item_get_int_attr (item, GPGME_ATTR_TYPE, NULL, 0),
gpgme_trust_item_get_string_attr (item, GPGME_ATTR_OTRUST, NULL, 0),
gpgme_trust_item_get_string_attr (item, GPGME_ATTR_VALIDITY, NULL, 0),
gpgme_trust_item_get_string_attr (item, GPGME_ATTR_USERID, NULL, 0));
gpgme_trust_item_release (item);
}
if (err != GPGME_EOF)
fail_if_err (err);
gpgme_release (ctx);
return 0; return 0;
} }