* configure.ac: Define SAFE_VERSION_DASH and SAFE_VERSION_DOT>

* g10.c: New options --gpgconf-list, --debug-level and --log-file
(set_debug): Add arg DEBUG_LEVEL.
(main): Look at less and less version specific config files.  From
gnupg 1.3.
This commit is contained in:
Werner Koch 2004-03-23 13:03:09 +00:00
parent fc584a063d
commit a40cbf1c33
4 changed files with 132 additions and 17 deletions

View File

@ -1,3 +1,7 @@
2004-03-23 Werner Koch <wk@gnupg.org>
* configure.ac: Define SAFE_VERSION_DASH and SAFE_VERSION_DOT>
2004-03-09 Werner Koch <wk@gnupg.org> 2004-03-09 Werner Koch <wk@gnupg.org>
* configure.ac (NEED_GPG_ERROR_VERSION): Set to 0.7. * configure.ac (NEED_GPG_ERROR_VERSION): Set to 0.7.

View File

@ -258,8 +258,12 @@ AH_BOTTOM([
#endif #endif
/* This is the same as VERSION, but should be overridden if the /* This is the same as VERSION, but should be overridden if the
platform cannot handle things like dots '.' in filenames. */ platform cannot handle things like dots '.' in filenames. Set
SAFE_VERSION_DOT and SAFE_VERSION_DASH to whatever SAFE_VERSION
uses for dots and dashes. */
#define SAFE_VERSION VERSION #define SAFE_VERSION VERSION
#define SAFE_VERSION_DOT '.'
#define SAFE_VERSION_DASH '-'
/* For some systems (DOS currently), we hardcode the path here. For /* For some systems (DOS currently), we hardcode the path here. For
POSIX systems the values are constructed by the Makefiles, so that POSIX systems the values are constructed by the Makefiles, so that

View File

@ -1,3 +1,10 @@
2004-03-23 Werner Koch <wk@gnupg.org>
* g10.c: New options --gpgconf-list, --debug-level and --log-file
(set_debug): Add arg DEBUG_LEVEL.
(main): Look at less and less version specific config files. From
gnupg 1.3.
2004-02-17 Werner Koch <wk@gnupg.org> 2004-02-17 Werner Koch <wk@gnupg.org>
* call-agent.c (start_agent): Ignore an empty GPG_AGENT_INFO. * call-agent.c (start_agent): Ignore an empty GPG_AGENT_INFO.

132
g10/g10.c
View File

@ -1,5 +1,6 @@
/* g10.c - The GnuPG utility (main for gpg) /* g10.c - The GnuPG utility (main for gpg)
* Copyright (C) 1998,1999,2000,2001,2002,2003 Free Software Foundation, Inc. * Copyright (C) 1998,1999,2000,2001,2002,2003
* 2004 Free Software Foundation, Inc.
* *
* This file is part of GnuPG. * This file is part of GnuPG.
* *
@ -74,6 +75,7 @@ enum cmd_and_opt_values { aNull = 0,
oCompress = 'z', oCompress = 'z',
oSetNotation = 'N', oSetNotation = 'N',
oBatch = 500, oBatch = 500,
aGPGConfList,
oSigNotation, oSigNotation,
oCertNotation, oCertNotation,
oShowNotation, oShowNotation,
@ -153,6 +155,7 @@ enum cmd_and_opt_values { aNull = 0,
oNoDefRecipient, oNoDefRecipient,
oOptions, oOptions,
oDebug, oDebug,
oDebugLevel,
oDebugAll, oDebugAll,
oStatusFD, oStatusFD,
#ifdef __riscos__ #ifdef __riscos__
@ -260,6 +263,7 @@ enum cmd_and_opt_values { aNull = 0,
oEncryptTo, oEncryptTo,
oHiddenEncryptTo, oHiddenEncryptTo,
oNoEncryptTo, oNoEncryptTo,
oLogFile,
oLoggerFD, oLoggerFD,
#ifdef __riscos__ #ifdef __riscos__
oLoggerFile, oLoggerFile,
@ -383,6 +387,7 @@ static ARGPARSE_OPTS opts[] = {
{ aPrintMD, "print-md" , 256, N_("|algo [files]|print message digests")}, { aPrintMD, "print-md" , 256, N_("|algo [files]|print message digests")},
{ aPrimegen, "gen-prime" , 256, "@" }, { aPrimegen, "gen-prime" , 256, "@" },
{ aGenRandom, "gen-random" , 256, "@" }, { aGenRandom, "gen-random" , 256, "@" },
{ aGPGConfList, "gpgconf-list", 256, "@" },
{ 301, NULL, 0, N_("@\nOptions:\n ") }, { 301, NULL, 0, N_("@\nOptions:\n ") },
@ -414,6 +419,7 @@ static ARGPARSE_OPTS opts[] = {
{ oVerbose, "verbose", 0, N_("verbose") }, { oVerbose, "verbose", 0, N_("verbose") },
{ oQuiet, "quiet", 0, "@" }, { oQuiet, "quiet", 0, "@" },
{ oNoTTY, "no-tty", 0, "@" }, { oNoTTY, "no-tty", 0, "@" },
{ oLogFile, "log-file" ,2, "@" },
{ oForceV3Sigs, "force-v3-sigs", 0, "@" }, { oForceV3Sigs, "force-v3-sigs", 0, "@" },
{ oNoForceV3Sigs, "no-force-v3-sigs", 0, "@" }, { oNoForceV3Sigs, "no-force-v3-sigs", 0, "@" },
{ oForceV4Certs, "force-v4-certs", 0, "@" }, { oForceV4Certs, "force-v4-certs", 0, "@" },
@ -445,6 +451,7 @@ static ARGPARSE_OPTS opts[] = {
{ oOptions, "options" , 2, "@"}, { oOptions, "options" , 2, "@"},
{ oDebug, "debug" ,4|16, "@"}, { oDebug, "debug" ,4|16, "@"},
{ oDebugLevel, "debug-level" ,2, "@"},
{ oDebugAll, "debug-all" ,0, "@"}, { oDebugAll, "debug-all" ,0, "@"},
{ oStatusFD, "status-fd" ,1, "@" }, { oStatusFD, "status-fd" ,1, "@" },
#ifdef __riscos__ #ifdef __riscos__
@ -835,9 +842,32 @@ add_to_strlist2 ( STRLIST *list, const char *string, int is_utf8)
} }
/* Setup the debugging. With a LEVEL of NULL only the active debug
flags are propagated to the subsystems. With LEVEL set, a specific
set of debug flags is set; thus overriding all flags already
set. */
static void static void
set_debug(void) set_debug (const char *level)
{ {
if (!level)
;
else if (!strcmp (level, "none"))
opt.debug = 0;
else if (!strcmp (level, "basic"))
opt.debug = DBG_MEMSTAT_VALUE;
else if (!strcmp (level, "advanced"))
opt.debug = DBG_MEMSTAT_VALUE|DBG_TRUST_VALUE|DBG_EXTPROG_VALUE;
else if (!strcmp (level, "expert"))
opt.debug = (DBG_MEMSTAT_VALUE|DBG_TRUST_VALUE|DBG_EXTPROG_VALUE
|DBG_CACHE_VALUE|DBG_FILTER_VALUE|DBG_PACKET_VALUE);
else if (!strcmp (level, "guru"))
opt.debug = ~0;
else
{
log_error (_("invalid debug-level `%s' given\n"), level);
g10_exit (2);
}
if (opt.debug & DBG_MEMORY_VALUE ) if (opt.debug & DBG_MEMORY_VALUE )
memory_debug_mode = 1; memory_debug_mode = 1;
if (opt.debug & DBG_MEMSTAT_VALUE ) if (opt.debug & DBG_MEMSTAT_VALUE )
@ -1141,14 +1171,17 @@ main( int argc, char **argv )
int detached_sig = 0; int detached_sig = 0;
FILE *configfp = NULL; FILE *configfp = NULL;
char *configname = NULL; char *configname = NULL;
const char *config_filename = NULL;
unsigned configlineno; unsigned configlineno;
int parse_debug = 0; int parse_debug = 0;
int default_config = 1; int default_config = 1;
int default_keyring = 1; int default_keyring = 1;
int greeting = 0; int greeting = 0;
int nogreeting = 0; int nogreeting = 0;
char *logfile = NULL;
int use_random_seed = 1; int use_random_seed = 1;
enum cmd_and_opt_values cmd = 0; enum cmd_and_opt_values cmd = 0;
const char *debug_level = NULL;
const char *trustdb_name = NULL; const char *trustdb_name = NULL;
char *def_cipher_string = NULL; char *def_cipher_string = NULL;
char *def_digest_string = NULL; char *def_digest_string = NULL;
@ -1294,22 +1327,34 @@ main( int argc, char **argv )
set_native_charset (NULL); /* Try to auto set the character set */ set_native_charset (NULL); /* Try to auto set the character set */
/* Try for a version specific config file first */
if( default_config ) if( default_config )
{ {
/* Try for a version specific config file first but strip our char *name = xstrdup ("gpg" EXTSEP_S "conf-" SAFE_VERSION);
usual cvs suffix. That suffix indicates that it is not yet char *ver = name + strlen("gpg" EXTSEP_S "conf-");
the given version but we already want this config file. */
configname = make_filename(opt.homedir,
"gpg" EXTSEP_S "conf-" SAFE_VERSION, NULL );
if (!strcmp (configname + strlen (configname) - 4, "-cvs"))
configname[strlen (configname)-4] = 0;
if(access(configname,R_OK)) do
{ {
xfree (configname); if(configname)
configname = make_filename(opt.homedir, {
"gpg" EXTSEP_S "conf", NULL ); char *tok;
xfree (configname);
configname=NULL;
if((tok=strrchr (ver,SAFE_VERSION_DASH)))
*tok='\0';
else if((tok=strrchr (ver,SAFE_VERSION_DOT)))
*tok='\0';
else
break;
}
configname = make_filename (opt.homedir, name, NULL);
} }
while ( access(configname,R_OK) );
xfree(name);
if (!access (configname, R_OK)) if (!access (configname, R_OK))
{ /* Print a warning when both config files are present. */ { /* Print a warning when both config files are present. */
char *p = make_filename(opt.homedir, "options", NULL ); char *p = make_filename(opt.homedir, "options", NULL );
@ -1436,6 +1481,10 @@ main( int argc, char **argv )
case aCardStatus: set_cmd (&cmd, aCardStatus); break; case aCardStatus: set_cmd (&cmd, aCardStatus); break;
case aCardEdit: set_cmd (&cmd, aCardEdit); break; case aCardEdit: set_cmd (&cmd, aCardEdit); break;
case aChangePIN: set_cmd (&cmd, aChangePIN); break; case aChangePIN: set_cmd (&cmd, aChangePIN); break;
case aGPGConfList:
set_cmd (&cmd, aGPGConfList);
nogreeting = 1;
break;
case oArmor: opt.armor = 1; opt.no_armor=0; break; case oArmor: opt.armor = 1; opt.no_armor=0; break;
case oOutput: opt.outfile = pargs.r.ret_str; break; case oOutput: opt.outfile = pargs.r.ret_str; break;
@ -1446,6 +1495,8 @@ main( int argc, char **argv )
case oVerbose: g10_opt_verbose++; case oVerbose: g10_opt_verbose++;
opt.verbose++; opt.list_sigs=1; break; opt.verbose++; opt.list_sigs=1; break;
case oLogFile: logfile = pargs.r.ret_str; break;
case oBatch: opt.batch = 1; nogreeting = 1; break; case oBatch: opt.batch = 1; nogreeting = 1; break;
case oUseAgent: case oUseAgent:
#ifndef __riscos__ #ifndef __riscos__
@ -1467,6 +1518,7 @@ main( int argc, char **argv )
case oShowKeyring: opt.list_options|=LIST_SHOW_KEYRING; break; case oShowKeyring: opt.list_options|=LIST_SHOW_KEYRING; break;
case oDebug: opt.debug |= pargs.r.ret_ulong; break; case oDebug: opt.debug |= pargs.r.ret_ulong; break;
case oDebugAll: opt.debug = ~0; break; case oDebugAll: opt.debug = ~0; break;
case oDebugLevel: debug_level = pargs.r.ret_str; break;
case oStatusFD: case oStatusFD:
set_status_fd( iobuf_translate_file_handle (pargs.r.ret_int, 1) ); set_status_fd( iobuf_translate_file_handle (pargs.r.ret_int, 1) );
break; break;
@ -1962,7 +2014,9 @@ main( int argc, char **argv )
if( configfp ) { if( configfp ) {
fclose( configfp ); fclose( configfp );
configfp = NULL; configfp = NULL;
xfree (configname); configname = NULL; config_filename = configname; /* Keep a copy of the config
file name. */
configname = NULL;
goto next_pass; goto next_pass;
} }
xfree ( configname ); configname = NULL; xfree ( configname ); configname = NULL;
@ -1984,6 +2038,15 @@ main( int argc, char **argv )
} }
#endif #endif
/* FIXME: We should use the lggging to a file only in server mode;
however we have not yet implemetyed that thus we try to get
away with --batch as indication for logging to file required. */
if (logfile && opt.batch)
{
log_set_file (logfile);
log_set_prefix (NULL, 1|2|4);
}
if (opt.verbose > 2) if (opt.verbose > 2)
log_info ("using character set `%s'\n", get_native_charset ()); log_info ("using character set `%s'\n", get_native_charset ());
@ -2015,7 +2078,7 @@ main( int argc, char **argv )
tty_batchmode( 1 ); tty_batchmode( 1 );
gcry_control (GCRYCTL_RESUME_SECMEM_WARN); gcry_control (GCRYCTL_RESUME_SECMEM_WARN);
set_debug(); set_debug (debug_level);
/* Do these after the switch(), so they can override settings. */ /* Do these after the switch(), so they can override settings. */
if(PGP2) if(PGP2)
@ -2309,7 +2372,7 @@ main( int argc, char **argv )
avoid adding the secret keyring for a couple of commands to avoid adding the secret keyring for a couple of commands to
avoid unneeded access in case the secrings are stored on a avoid unneeded access in case the secrings are stored on a
floppy */ floppy */
if( cmd != aDeArmor && cmd != aEnArmor ) if( cmd != aDeArmor && cmd != aEnArmor && cmd != aGPGConfList )
{ {
if (cmd != aCheckKeys && cmd != aListSigs && cmd != aListKeys if (cmd != aCheckKeys && cmd != aListSigs && cmd != aListKeys
&& cmd != aVerify && cmd != aSym) && cmd != aVerify && cmd != aSym)
@ -2344,6 +2407,7 @@ main( int argc, char **argv )
case aCardStatus: case aCardStatus:
case aCardEdit: case aCardEdit:
case aChangePIN: case aChangePIN:
case aGPGConfList:
break; break;
case aExportOwnerTrust: rc = setup_trustdb( 0, trustdb_name ); break; case aExportOwnerTrust: rc = setup_trustdb( 0, trustdb_name ); break;
case aListTrustDB: rc = setup_trustdb( argc? 1:0, trustdb_name ); break; case aListTrustDB: rc = setup_trustdb( argc? 1:0, trustdb_name ); break;
@ -2869,6 +2933,42 @@ main( int argc, char **argv )
wrong_args ("--change-pin [no]"); wrong_args ("--change-pin [no]");
break; break;
case aGPGConfList:
{ /* List options and default values in the GPG Conf format. */
/* The following list is taken from gnupg/tools/gpgconf-comp.c. */
/* Option flags. YOU MUST NOT CHANGE THE NUMBERS OF THE EXISTING
FLAGS, AS THEY ARE PART OF THE EXTERNAL INTERFACE. */
#define GC_OPT_FLAG_NONE 0UL
/* The RUNTIME flag for an option indicates that the option can be
changed at runtime. */
#define GC_OPT_FLAG_RUNTIME (1UL << 3)
/* The DEFAULT flag for an option indicates that the option has a
default value. */
#define GC_OPT_FLAG_DEFAULT (1UL << 4)
/* The DEF_DESC flag for an option indicates that the option has a
default, which is described by the value of the default field. */
#define GC_OPT_FLAG_DEF_DESC (1UL << 5)
/* The NO_ARG_DESC flag for an option indicates that the argument has
a default, which is described by the value of the ARGDEF field. */
#define GC_OPT_FLAG_NO_ARG_DESC (1UL << 6)
printf ("gpgconf-gpg.conf:%lu:\"%s\n",
GC_OPT_FLAG_DEFAULT,
config_filename?config_filename:"/dev/null");
printf ("verbose:%lu:\n"
"quiet:%lu:\n"
"debug-level:%lu:\"none:\n"
"log-file:%lu:\n",
GC_OPT_FLAG_NONE,
GC_OPT_FLAG_NONE,
GC_OPT_FLAG_DEFAULT,
GC_OPT_FLAG_NONE );
}
break;
case aListPackets: case aListPackets:
opt.list_packets=2; opt.list_packets=2;
default: default: