aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Shaw <[email protected]>2004-05-20 18:04:33 +0000
committerDavid Shaw <[email protected]>2004-05-20 18:04:33 +0000
commitcc383b6432f33b868597268b0b028c4f8b2bc307 (patch)
treee0ebb31f51e12e4052b4f0a7a1261b441a118a74
parent* longlong.h: Typo. (diff)
downloadgnupg-cc383b6432f33b868597268b0b028c4f8b2bc307.tar.gz
gnupg-cc383b6432f33b868597268b0b028c4f8b2bc307.zip
* options.h (ctrl): New for member IN_AUTO_KEY_RETRIEVE.
* mainproc.c (check_sig_and_print): track whether we are retrieving a key. * status.c (status_currently_allowed): New. (write_status_text, write_status_text_and_buffer): Use it here. * g10.c: New command --gpgconf-list. (gpgconf_list): New. From Werner on stable branch.
-rw-r--r--g10/ChangeLog8
-rw-r--r--g10/mainproc.c7
-rw-r--r--g10/options.h9
-rw-r--r--g10/status.c44
4 files changed, 62 insertions, 6 deletions
diff --git a/g10/ChangeLog b/g10/ChangeLog
index 2eb39ed9b..4e10c08f9 100644
--- a/g10/ChangeLog
+++ b/g10/ChangeLog
@@ -1,5 +1,13 @@
2004-05-20 David Shaw <[email protected]>
+ * options.h (ctrl): New for member IN_AUTO_KEY_RETRIEVE.
+
+ * mainproc.c (check_sig_and_print): track whether we are
+ retrieving a key.
+
+ * status.c (status_currently_allowed): New.
+ (write_status_text, write_status_text_and_buffer): Use it here.
+
* g10.c: New command --gpgconf-list.
(gpgconf_list): New. From Werner on stable branch.
diff --git a/g10/mainproc.c b/g10/mainproc.c
index db15b0b5a..7c760b1a3 100644
--- a/g10/mainproc.c
+++ b/g10/mainproc.c
@@ -1348,7 +1348,12 @@ check_sig_and_print( CTX c, KBNODE node )
if( rc == G10ERR_NO_PUBKEY && opt.keyserver
&& (opt.keyserver_options.options&KEYSERVER_AUTO_KEY_RETRIEVE))
{
- if( keyserver_import_keyid ( sig->keyid )==0 )
+ int res;
+
+ ctrl.in_auto_key_retrieve++;
+ res=keyserver_import_keyid ( sig->keyid );
+ ctrl.in_auto_key_retrieve--;
+ if(!res)
rc = do_check_sig(c, node, NULL, &is_expkey, &is_revkey );
}
diff --git a/g10/options.h b/g10/options.h
index c2a68b7b5..d8ed34b3e 100644
--- a/g10/options.h
+++ b/g10/options.h
@@ -201,6 +201,15 @@ struct
} opt;
+/* CTRL is used to keep some global variables we currently can't
+ avoid. Future concurrent versions of gpg will put it into a per
+ request structure CTRL. */
+EXTERN_UNLESS_MAIN_MODULE
+struct {
+ int in_auto_key_retrieve; /* True if we are doing an
+ auto_key_retrieve. */
+} ctrl;
+
#define DBG_PACKET_VALUE 1 /* debug packet reading/writing */
#define DBG_MPI_VALUE 2 /* debug mpi details */
#define DBG_CIPHER_VALUE 4 /* debug cipher handling */
diff --git a/g10/status.c b/g10/status.c
index 5506e25a4..91443a10a 100644
--- a/g10/status.c
+++ b/g10/status.c
@@ -1,5 +1,6 @@
/* status.c
- * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+ * Copyright (C) 1998, 1999, 2000, 2001, 2002,
+ * 2004 Free Software Foundation, Inc.
*
* This file is part of GnuPG.
*
@@ -157,6 +158,39 @@ get_status_string ( int no )
return s;
}
+
+/* Return true if the status message NO may currently be issued. We
+ need this to avoid syncronisation problem while auto retrieving a
+ key. There it may happen that a status NODATA is issued for a non
+ available key and the user may falsely interpret this has a missing
+ signature. */
+static int
+status_currently_allowed (int no)
+{
+ if (!ctrl.in_auto_key_retrieve)
+ return 1; /* Yes. */
+
+ /* We allow some statis anyway, so that import statistics are
+ correct and to avoid problems if the retriebval subsystem will
+ prompt the user. */
+ switch (no)
+ {
+ case STATUS_GET_BOOL:
+ case STATUS_GET_LINE:
+ case STATUS_GET_HIDDEN:
+ case STATUS_GOT_IT:
+ case STATUS_IMPORTED:
+ case STATUS_IMPORT_OK:
+ case STATUS_IMPORT_CHECK:
+ case STATUS_IMPORT_RES:
+ return 1; /* Yes. */
+ default:
+ break;
+ }
+ return 0; /* No. */
+}
+
+
void
set_status_fd ( int fd )
{
@@ -202,8 +236,8 @@ write_status ( int no )
void
write_status_text ( int no, const char *text)
{
- if( !statusfp )
- return; /* not enabled */
+ if( !statusfp || !status_currently_allowed (no) )
+ return; /* Not enabled or allowed. */
fputs ( "[GNUPG:] ", statusfp );
fputs ( get_status_string (no), statusfp );
@@ -238,8 +272,8 @@ write_status_text_and_buffer ( int no, const char *string,
int lower_limit = ' ';
size_t n, count, dowrap;
- if( !statusfp )
- return; /* not enabled */
+ if( !statusfp || !status_currently_allowed (no) )
+ return; /* Not enabled or allowed. */
if (wrap == -1) {
lower_limit--;