mirror of
git://git.gnupg.org/gnupg.git
synced 2025-01-05 12:31:50 +01:00
g10/
* g10.c, options.h: New options --display, --ttyname, --ttytype, --lc-ctype, --lc-messages to be used with future versions of the gpg-agent. * passphrase.c (agent_send_option,agent_send_all_options): New. (agent_open): Send options to the agent. * trustdb.c (update_ownertrust, clear_ownertrust): Do an explicit do_sync because revalidation_mark does it only if when the timestamp actually changes. / * configure.ac: Check for locale.h and setlocale
This commit is contained in:
parent
bf2c77073d
commit
ecbf6f4d46
@ -1,3 +1,7 @@
|
|||||||
|
2002-04-25 Werner Koch <wk@gnupg.org>
|
||||||
|
|
||||||
|
* configure.ac: Check for locale.h and setlocale
|
||||||
|
|
||||||
2002-04-24 David Shaw <dshaw@jabberwocky.com>
|
2002-04-24 David Shaw <dshaw@jabberwocky.com>
|
||||||
|
|
||||||
* Update NEWS with recent changes.
|
* Update NEWS with recent changes.
|
||||||
|
3
TODO
3
TODO
@ -109,6 +109,9 @@
|
|||||||
packet (See bug report 817). This is not easy to do as we don't
|
packet (See bug report 817). This is not easy to do as we don't
|
||||||
store the one-pass packets.
|
store the one-pass packets.
|
||||||
|
|
||||||
|
* cat foo | gpg --sign | gpg --list-packets
|
||||||
|
Does not list the signature packet.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Things we won't do
|
Things we won't do
|
||||||
|
@ -449,8 +449,7 @@ AC_SUBST(DYNLINK_MOD_CFLAGS)
|
|||||||
|
|
||||||
dnl Checks for header files.
|
dnl Checks for header files.
|
||||||
AC_HEADER_STDC
|
AC_HEADER_STDC
|
||||||
AC_CHECK_HEADERS(unistd.h langinfo.h termio.h)
|
AC_CHECK_HEADERS(unistd.h langinfo.h termio.h locale.h)
|
||||||
|
|
||||||
|
|
||||||
dnl Checks for typedefs, structures, and compiler characteristics.
|
dnl Checks for typedefs, structures, and compiler characteristics.
|
||||||
AC_C_CONST
|
AC_C_CONST
|
||||||
@ -485,7 +484,7 @@ AC_FUNC_VPRINTF
|
|||||||
AC_FUNC_FORK
|
AC_FUNC_FORK
|
||||||
AC_CHECK_FUNCS(strerror stpcpy strsep strlwr stricmp tcgetattr strtoul mmap)
|
AC_CHECK_FUNCS(strerror stpcpy strsep strlwr stricmp tcgetattr strtoul mmap)
|
||||||
AC_CHECK_FUNCS(memmove gettimeofday getrusage setrlimit clock_gettime)
|
AC_CHECK_FUNCS(memmove gettimeofday getrusage setrlimit clock_gettime)
|
||||||
AC_CHECK_FUNCS(memicmp atexit raise getpagesize strftime nl_langinfo)
|
AC_CHECK_FUNCS(memicmp atexit raise getpagesize strftime nl_langinfo setlocale)
|
||||||
AC_CHECK_FUNCS(waitpid wait4 sigaction sigprocmask rand pipe stat)
|
AC_CHECK_FUNCS(waitpid wait4 sigaction sigprocmask rand pipe stat)
|
||||||
AC_REPLACE_FUNCS(mkdtemp)
|
AC_REPLACE_FUNCS(mkdtemp)
|
||||||
|
|
||||||
|
@ -1,3 +1,15 @@
|
|||||||
|
2002-04-25 Werner Koch <wk@gnupg.org>
|
||||||
|
|
||||||
|
* g10.c, options.h: New options --display, --ttyname, --ttytype,
|
||||||
|
--lc-ctype, --lc-messages to be used with future versions of the
|
||||||
|
gpg-agent.
|
||||||
|
* passphrase.c (agent_send_option,agent_send_all_options): New.
|
||||||
|
(agent_open): Send options to the agent.
|
||||||
|
|
||||||
|
* trustdb.c (update_ownertrust, clear_ownertrust): Do an explicit
|
||||||
|
do_sync because revalidation_mark does it only if when the
|
||||||
|
timestamp actually changes.
|
||||||
|
|
||||||
2002-04-23 David Shaw <dshaw@jabberwocky.com>
|
2002-04-23 David Shaw <dshaw@jabberwocky.com>
|
||||||
|
|
||||||
* main.h, keygen.c (do_generate_keypair), keylist.c
|
* main.h, keygen.c (do_generate_keypair), keylist.c
|
||||||
|
15
g10/g10.c
15
g10/g10.c
@ -274,6 +274,11 @@ enum cmd_and_opt_values { aNull = 0,
|
|||||||
oPreferenceList,
|
oPreferenceList,
|
||||||
oEmu3DESS2KBug, /* will be removed in 1.1 */
|
oEmu3DESS2KBug, /* will be removed in 1.1 */
|
||||||
oEmuMDEncodeBug,
|
oEmuMDEncodeBug,
|
||||||
|
oDisplay,
|
||||||
|
oTTYname,
|
||||||
|
oTTYtype,
|
||||||
|
oLCctype,
|
||||||
|
oLCmessages,
|
||||||
aTest };
|
aTest };
|
||||||
|
|
||||||
|
|
||||||
@ -537,6 +542,11 @@ static ARGPARSE_OPTS opts[] = {
|
|||||||
{ oPreferenceList, "preference-list", 2, "@"},
|
{ oPreferenceList, "preference-list", 2, "@"},
|
||||||
{ oEmu3DESS2KBug, "emulate-3des-s2k-bug", 0, "@"},
|
{ oEmu3DESS2KBug, "emulate-3des-s2k-bug", 0, "@"},
|
||||||
{ oEmuMDEncodeBug, "emulate-md-encode-bug", 0, "@"},
|
{ oEmuMDEncodeBug, "emulate-md-encode-bug", 0, "@"},
|
||||||
|
{ oDisplay, "display", 2, "@" },
|
||||||
|
{ oTTYname, "ttyname", 2, "@" },
|
||||||
|
{ oTTYtype, "ttytype", 2, "@" },
|
||||||
|
{ oLCctype, "lc-ctype", 2, "@" },
|
||||||
|
{ oLCmessages, "lc-messages", 2, "@" },
|
||||||
{0} };
|
{0} };
|
||||||
|
|
||||||
|
|
||||||
@ -1277,6 +1287,11 @@ main( int argc, char **argv )
|
|||||||
case oNoAutoCheckTrustDB: opt.no_auto_check_trustdb=1; break;
|
case oNoAutoCheckTrustDB: opt.no_auto_check_trustdb=1; break;
|
||||||
case oPreservePermissions: opt.preserve_permissions=1; break;
|
case oPreservePermissions: opt.preserve_permissions=1; break;
|
||||||
case oPreferenceList: preference_list = pargs.r.ret_str; break;
|
case oPreferenceList: preference_list = pargs.r.ret_str; break;
|
||||||
|
case oDisplay: opt.display = pargs.r.ret_str; break;
|
||||||
|
case oTTYname: opt.ttyname = pargs.r.ret_str; break;
|
||||||
|
case oTTYtype: opt.ttytype = pargs.r.ret_str; break;
|
||||||
|
case oLCctype: opt.lc_ctype = pargs.r.ret_str; break;
|
||||||
|
case oLCmessages: opt.lc_messages = pargs.r.ret_str; break;
|
||||||
default : pargs.err = configfp? 1:2; break;
|
default : pargs.err = configfp? 1:2; break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -75,6 +75,13 @@ struct {
|
|||||||
int completes_needed;
|
int completes_needed;
|
||||||
int max_cert_depth;
|
int max_cert_depth;
|
||||||
const char *homedir;
|
const char *homedir;
|
||||||
|
|
||||||
|
char *display; /* 5 options to be passed to the gpg-agent */
|
||||||
|
char *ttyname;
|
||||||
|
char *ttytype;
|
||||||
|
char *lc_ctype;
|
||||||
|
char *lc_messages;
|
||||||
|
|
||||||
int skip_verify;
|
int skip_verify;
|
||||||
int compress_keys;
|
int compress_keys;
|
||||||
int compress_sigs;
|
int compress_sigs;
|
||||||
|
120
g10/passphrase.c
120
g10/passphrase.c
@ -33,6 +33,9 @@
|
|||||||
# include <windows.h>
|
# include <windows.h>
|
||||||
#endif
|
#endif
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
#ifdef HAVE_LOCALE_H
|
||||||
|
#include <locale.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
#include "memory.h"
|
#include "memory.h"
|
||||||
@ -309,6 +312,115 @@ readline (int fd, char *buf, size_t buflen)
|
|||||||
|
|
||||||
|
|
||||||
#if !defined (__riscos__)
|
#if !defined (__riscos__)
|
||||||
|
|
||||||
|
#if !defined (__MINGW32__) && !defined (__CYGWIN32__)
|
||||||
|
/* For the new Assuan protocol we may have to send options */
|
||||||
|
static int
|
||||||
|
agent_send_option (int fd, const char *name, const char *value)
|
||||||
|
{
|
||||||
|
char buf[200];
|
||||||
|
int nread;
|
||||||
|
char *line;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
line = m_alloc (7 + strlen (name) + 1 + strlen (value) + 2);
|
||||||
|
strcpy (stpcpy (stpcpy (stpcpy (
|
||||||
|
stpcpy (line, "OPTION "), name), "="), value), "\n");
|
||||||
|
i = writen (fd, line, strlen (line));
|
||||||
|
m_free (line);
|
||||||
|
if (i)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
/* get response */
|
||||||
|
nread = readline (fd, buf, DIM(buf)-1);
|
||||||
|
if (nread < 3)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
if (buf[0] == 'O' && buf[1] == 'K' && (buf[2] == ' ' || buf[2] == '\n'))
|
||||||
|
return 0; /* okay */
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
agent_send_all_options (int fd)
|
||||||
|
{
|
||||||
|
char *dft_display = NULL;
|
||||||
|
char *dft_ttyname = NULL;
|
||||||
|
char *dft_ttytype = NULL;
|
||||||
|
char *old_lc = NULL;
|
||||||
|
char *dft_lc = NULL;
|
||||||
|
int rc = 0;
|
||||||
|
|
||||||
|
dft_display = getenv ("DISPLAY");
|
||||||
|
if (opt.display || dft_display)
|
||||||
|
{
|
||||||
|
if (agent_send_option (fd, "display",
|
||||||
|
opt.display ? opt.display : dft_display))
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!opt.ttyname && ttyname (1))
|
||||||
|
dft_ttyname = ttyname (1);
|
||||||
|
if (opt.ttyname || dft_ttyname)
|
||||||
|
{
|
||||||
|
if (agent_send_option (fd, "ttyname",
|
||||||
|
opt.ttyname ? opt.ttyname : dft_ttyname))
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
dft_ttytype = getenv ("TERM");
|
||||||
|
if (opt.ttytype || (dft_ttyname && dft_ttytype))
|
||||||
|
{
|
||||||
|
if (agent_send_option (fd, "ttytype",
|
||||||
|
opt.ttyname ? opt.ttytype : dft_ttytype))
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined(HAVE_SETLOCALE) && defined(LC_CTYPE)
|
||||||
|
old_lc = setlocale (LC_CTYPE, NULL);
|
||||||
|
if (old_lc)
|
||||||
|
old_lc = m_strdup (old_lc);
|
||||||
|
dft_lc = setlocale (LC_CTYPE, "");
|
||||||
|
#endif
|
||||||
|
if (opt.lc_ctype || (dft_ttyname && dft_lc))
|
||||||
|
{
|
||||||
|
rc = agent_send_option (fd, "lc-ctype",
|
||||||
|
opt.lc_ctype ? opt.lc_ctype : dft_lc);
|
||||||
|
}
|
||||||
|
#if defined(HAVE_SETLOCALE) && defined(LC_CTYPE)
|
||||||
|
if (old_lc)
|
||||||
|
{
|
||||||
|
setlocale (LC_CTYPE, old_lc);
|
||||||
|
m_free (old_lc);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
if (rc)
|
||||||
|
return rc;
|
||||||
|
|
||||||
|
#if defined(HAVE_SETLOCALE) && defined(LC_MESSAGES)
|
||||||
|
old_lc = setlocale (LC_MESSAGES, NULL);
|
||||||
|
if (old_lc)
|
||||||
|
old_lc = m_strdup (old_lc);
|
||||||
|
dft_lc = setlocale (LC_MESSAGES, "");
|
||||||
|
#endif
|
||||||
|
if (opt.lc_messages || (dft_ttyname && dft_lc))
|
||||||
|
{
|
||||||
|
rc = agent_send_option (fd, "lc-messages",
|
||||||
|
opt.lc_messages ? opt.lc_messages : dft_lc);
|
||||||
|
}
|
||||||
|
#if defined(HAVE_SETLOCALE) && defined(LC_MESSAGES)
|
||||||
|
if (old_lc)
|
||||||
|
{
|
||||||
|
setlocale (LC_MESSAGES, old_lc);
|
||||||
|
m_free (old_lc);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
#endif /*!__MINGW32__ && !__CYGWIN32__*/
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Open a connection to the agent and send the magic string
|
* Open a connection to the agent and send the magic string
|
||||||
* Returns: -1 on error or an filedescriptor for urther processing
|
* Returns: -1 on error or an filedescriptor for urther processing
|
||||||
@ -445,6 +557,13 @@ agent_open (int *ret_prot)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (agent_send_all_options (fd)) {
|
||||||
|
log_error (_("problem with the agent - disabling agent use\n"));
|
||||||
|
close (fd);
|
||||||
|
opt.use_agent = 0;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -465,6 +584,7 @@ agent_close ( int fd )
|
|||||||
#endif /* !__riscos__ */
|
#endif /* !__riscos__ */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Ask the GPG Agent for the passphrase.
|
* Ask the GPG Agent for the passphrase.
|
||||||
* Mode 0: Allow cached passphrase
|
* Mode 0: Allow cached passphrase
|
||||||
|
@ -593,6 +593,7 @@ update_ownertrust (PKT_public_key *pk, unsigned int new_trust )
|
|||||||
rec.r.trust.ownertrust = new_trust;
|
rec.r.trust.ownertrust = new_trust;
|
||||||
write_record( &rec );
|
write_record( &rec );
|
||||||
revalidation_mark ();
|
revalidation_mark ();
|
||||||
|
do_sync ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (rc == -1)
|
else if (rc == -1)
|
||||||
@ -609,6 +610,7 @@ update_ownertrust (PKT_public_key *pk, unsigned int new_trust )
|
|||||||
rec.r.trust.ownertrust = new_trust;
|
rec.r.trust.ownertrust = new_trust;
|
||||||
write_record (&rec);
|
write_record (&rec);
|
||||||
revalidation_mark ();
|
revalidation_mark ();
|
||||||
|
do_sync ();
|
||||||
rc = 0;
|
rc = 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -635,6 +637,7 @@ clear_ownertrust (PKT_public_key *pk)
|
|||||||
rec.r.trust.ownertrust = 0;
|
rec.r.trust.ownertrust = 0;
|
||||||
write_record( &rec );
|
write_record( &rec );
|
||||||
revalidation_mark ();
|
revalidation_mark ();
|
||||||
|
do_sync ();
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user