mirror of
git://git.gnupg.org/gnupg.git
synced 2024-11-11 21:48:50 +01:00
* g10.c (list_config): New function to dump config options to stdout.
Currently requires --with-colons. (collapse_args): New function to turn argc/argv into a single string. (main): Use it here to pass list_config() more than one argument as a single string. (print_algo_numbers): Helper to print algorithm number for --list-config "pubkey", "cipher", "hash"/"digest", and "compress" config options.
This commit is contained in:
parent
cceda5c9d2
commit
f7447eabea
@ -1,9 +1,21 @@
|
|||||||
2004-01-21 David Shaw <dshaw@jabberwocky.com>
|
2004-01-21 David Shaw <dshaw@jabberwocky.com>
|
||||||
|
|
||||||
|
* g10.c (list_config): New function to dump config options to
|
||||||
|
stdout. Currently requires --with-colons.
|
||||||
|
(collapse_args): New function to turn argc/argv into a single
|
||||||
|
string.
|
||||||
|
(main): Use it here to pass list_config() more than one argument
|
||||||
|
as a single string.
|
||||||
|
(print_algo_numbers): Helper to print algorithm number for
|
||||||
|
--list-config "pubkey", "cipher", "hash"/"digest", and "compress"
|
||||||
|
config options.
|
||||||
|
|
||||||
* packet.h, getkey.c (merge_selfsigs, merge_selfsigs_main),
|
* packet.h, getkey.c (merge_selfsigs, merge_selfsigs_main),
|
||||||
pkclist.c (check_signatures_trust): Indicate who has revoked a key
|
pkclist.c (check_signatures_trust): Indicate who has revoked a key
|
||||||
(the owner or a designated revoker). If a key was revoked by
|
(the owner or a designated revoker). If a key was revoked by
|
||||||
both, prefer the owner.
|
both, prefer the owner. If a subkey is already revoked by the
|
||||||
|
owner, don't allow a designated revokation of the whole key to
|
||||||
|
override this. We're still revoked either way, of course.
|
||||||
|
|
||||||
* keyedit.c (print_and_check_one_sig, keyedit_menu): Use the
|
* keyedit.c (print_and_check_one_sig, keyedit_menu): Use the
|
||||||
COLUMNS environment variable (if any) to hint how wide the
|
COLUMNS environment variable (if any) to hint how wide the
|
||||||
|
164
g10/g10.c
164
g10/g10.c
@ -1,6 +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,
|
* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003
|
||||||
* 2003 Free Software Foundation, Inc.
|
* 2004 Free Software Foundation, Inc.
|
||||||
*
|
*
|
||||||
* This file is part of GnuPG.
|
* This file is part of GnuPG.
|
||||||
*
|
*
|
||||||
@ -93,6 +93,7 @@ enum cmd_and_opt_values
|
|||||||
aLSignKey,
|
aLSignKey,
|
||||||
aNRSignKey,
|
aNRSignKey,
|
||||||
aNRLSignKey,
|
aNRLSignKey,
|
||||||
|
aListConfig,
|
||||||
aListPackets,
|
aListPackets,
|
||||||
aEditKey,
|
aEditKey,
|
||||||
aDeleteKeys,
|
aDeleteKeys,
|
||||||
@ -388,6 +389,7 @@ static ARGPARSE_OPTS opts[] = {
|
|||||||
{ aCardEdit, "card-edit", 256, N_("change data on a card")},
|
{ aCardEdit, "card-edit", 256, N_("change data on a card")},
|
||||||
{ aChangePIN, "change-pin", 256, N_("change a card's PIN")},
|
{ aChangePIN, "change-pin", 256, N_("change a card's PIN")},
|
||||||
#endif
|
#endif
|
||||||
|
{ aListConfig, "list-config", 256, "@"},
|
||||||
{ aListPackets, "list-packets",256, "@"},
|
{ aListPackets, "list-packets",256, "@"},
|
||||||
{ aExportOwnerTrust, "export-ownertrust", 256, "@"},
|
{ aExportOwnerTrust, "export-ownertrust", 256, "@"},
|
||||||
{ aImportOwnerTrust, "import-ownertrust", 256, "@"},
|
{ aImportOwnerTrust, "import-ownertrust", 256, "@"},
|
||||||
@ -907,7 +909,8 @@ set_cmd( enum cmd_and_opt_values *ret_cmd, enum cmd_and_opt_values new_cmd )
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void add_group(char *string)
|
static void
|
||||||
|
add_group(char *string)
|
||||||
{
|
{
|
||||||
char *name,*value;
|
char *name,*value;
|
||||||
struct groupitem *item;
|
struct groupitem *item;
|
||||||
@ -943,11 +946,11 @@ static void add_group(char *string)
|
|||||||
0) The homedir. It must be x00, a directory, and owned by the
|
0) The homedir. It must be x00, a directory, and owned by the
|
||||||
user.
|
user.
|
||||||
|
|
||||||
1) The options file. Okay unless it or its containing directory is
|
1) The options/gpg.conf file. Okay unless it or its containing
|
||||||
group or other writable or not owned by us. disable exec in this
|
directory is group or other writable or not owned by us. Disable
|
||||||
case.
|
exec in this case.
|
||||||
|
|
||||||
2) Extensions. Same as #2.
|
2) Extensions. Same as #1.
|
||||||
|
|
||||||
Returns true if the item is unsafe. */
|
Returns true if the item is unsafe. */
|
||||||
static int
|
static int
|
||||||
@ -1142,6 +1145,133 @@ check_permissions(const char *path,int item)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void
|
||||||
|
print_algo_numbers(int (*checker)(int))
|
||||||
|
{
|
||||||
|
int i,first=1;
|
||||||
|
|
||||||
|
for(i=0;i<=110;i++)
|
||||||
|
{
|
||||||
|
if(!checker(i))
|
||||||
|
{
|
||||||
|
if(first)
|
||||||
|
first=0;
|
||||||
|
else
|
||||||
|
printf(";");
|
||||||
|
printf("%d",i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* In the future, we can do all sorts of interesting configuration
|
||||||
|
output here. For now, just give "group" as the Enigmail folks need
|
||||||
|
it, and pubkey, cipher, hash, and compress as they may be useful
|
||||||
|
for frontends. */
|
||||||
|
static void
|
||||||
|
list_config(char *items)
|
||||||
|
{
|
||||||
|
int show_all=(items==NULL);
|
||||||
|
char *name=NULL;
|
||||||
|
|
||||||
|
if(!opt.with_colons)
|
||||||
|
return;
|
||||||
|
|
||||||
|
while(show_all || (name=strsep(&items," ")))
|
||||||
|
{
|
||||||
|
if(show_all || ascii_strcasecmp(name,"group")==0)
|
||||||
|
{
|
||||||
|
struct groupitem *iter;
|
||||||
|
|
||||||
|
for(iter=opt.grouplist;iter;iter=iter->next)
|
||||||
|
{
|
||||||
|
STRLIST sl;
|
||||||
|
|
||||||
|
printf("cfg:group:");
|
||||||
|
print_string(stdout,iter->name,strlen(iter->name),':');
|
||||||
|
printf(":");
|
||||||
|
|
||||||
|
for(sl=iter->values;sl;sl=sl->next)
|
||||||
|
{
|
||||||
|
print_string2(stdout,sl->d,strlen(sl->d),':',';');
|
||||||
|
if(sl->next)
|
||||||
|
printf(";");
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(show_all || ascii_strcasecmp(name,"version")==0)
|
||||||
|
{
|
||||||
|
printf("cfg:version:");
|
||||||
|
print_string(stdout,VERSION,strlen(VERSION),':');
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
if(show_all || ascii_strcasecmp(name,"pubkey")==0)
|
||||||
|
{
|
||||||
|
printf("cfg:pubkey:");
|
||||||
|
print_algo_numbers(check_pubkey_algo);
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
if(show_all || ascii_strcasecmp(name,"cipher")==0)
|
||||||
|
{
|
||||||
|
printf("cfg:cipher:");
|
||||||
|
print_algo_numbers(check_cipher_algo);
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
if(show_all
|
||||||
|
|| ascii_strcasecmp(name,"digest")==0
|
||||||
|
|| ascii_strcasecmp(name,"hash")==0)
|
||||||
|
{
|
||||||
|
printf("cfg:digest:");
|
||||||
|
print_algo_numbers(check_digest_algo);
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
if(show_all || ascii_strcasecmp(name,"compress")==0)
|
||||||
|
{
|
||||||
|
printf("cfg:compress:");
|
||||||
|
print_algo_numbers(check_compress_algo);
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
if(show_all)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Collapses argc/argv into a single string that must be freed */
|
||||||
|
static char *
|
||||||
|
collapse_args(int argc,char *argv[])
|
||||||
|
{
|
||||||
|
char *str=NULL;
|
||||||
|
int i,first=1,len=0;
|
||||||
|
|
||||||
|
for(i=0;i<argc;i++)
|
||||||
|
{
|
||||||
|
len+=strlen(argv[i])+2;
|
||||||
|
str=m_realloc(str,len);
|
||||||
|
if(first)
|
||||||
|
{
|
||||||
|
str[0]='\0';
|
||||||
|
first=0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
strcat(str," ");
|
||||||
|
|
||||||
|
strcat(str,argv[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int
|
int
|
||||||
main( int argc, char **argv )
|
main( int argc, char **argv )
|
||||||
{
|
{
|
||||||
@ -1413,6 +1543,7 @@ main( int argc, char **argv )
|
|||||||
switch( pargs.r_opt )
|
switch( pargs.r_opt )
|
||||||
{
|
{
|
||||||
case aCheckKeys: set_cmd( &cmd, aCheckKeys); break;
|
case aCheckKeys: set_cmd( &cmd, aCheckKeys); break;
|
||||||
|
case aListConfig: set_cmd( &cmd, aListConfig); break;
|
||||||
case aListPackets: set_cmd( &cmd, aListPackets); break;
|
case aListPackets: set_cmd( &cmd, aListPackets); break;
|
||||||
case aImport: set_cmd( &cmd, aImport); break;
|
case aImport: set_cmd( &cmd, aImport); break;
|
||||||
case aFastImport: set_cmd( &cmd, aFastImport); break;
|
case aFastImport: set_cmd( &cmd, aFastImport); break;
|
||||||
@ -1429,8 +1560,10 @@ main( int argc, char **argv )
|
|||||||
case aListSigs: set_cmd( &cmd, aListSigs); break;
|
case aListSigs: set_cmd( &cmd, aListSigs); break;
|
||||||
case aExportSecret: set_cmd( &cmd, aExportSecret); break;
|
case aExportSecret: set_cmd( &cmd, aExportSecret); break;
|
||||||
case aExportSecretSub: set_cmd( &cmd, aExportSecretSub); break;
|
case aExportSecretSub: set_cmd( &cmd, aExportSecretSub); break;
|
||||||
case aDeleteSecretKeys: set_cmd( &cmd, aDeleteSecretKeys);
|
case aDeleteSecretKeys:
|
||||||
greeting=1; break;
|
set_cmd( &cmd, aDeleteSecretKeys);
|
||||||
|
greeting=1;
|
||||||
|
break;
|
||||||
case aDeleteSecretAndPublicKeys:
|
case aDeleteSecretAndPublicKeys:
|
||||||
set_cmd( &cmd, aDeleteSecretAndPublicKeys);
|
set_cmd( &cmd, aDeleteSecretAndPublicKeys);
|
||||||
greeting=1;
|
greeting=1;
|
||||||
@ -2476,7 +2609,8 @@ main( int argc, char **argv )
|
|||||||
log_error(_("failed to initialize the TrustDB: %s\n"), g10_errstr(rc));
|
log_error(_("failed to initialize the TrustDB: %s\n"), g10_errstr(rc));
|
||||||
|
|
||||||
|
|
||||||
switch (cmd) {
|
switch (cmd)
|
||||||
|
{
|
||||||
case aStore:
|
case aStore:
|
||||||
case aSym:
|
case aSym:
|
||||||
case aSign:
|
case aSign:
|
||||||
@ -2490,7 +2624,8 @@ main( int argc, char **argv )
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch( cmd ) {
|
switch( cmd )
|
||||||
|
{
|
||||||
case aStore: /* only store the file */
|
case aStore: /* only store the file */
|
||||||
if( argc > 1 )
|
if( argc > 1 )
|
||||||
wrong_args(_("--store [filename]"));
|
wrong_args(_("--store [filename]"));
|
||||||
@ -3055,6 +3190,13 @@ main( int argc, char **argv )
|
|||||||
break;
|
break;
|
||||||
#endif /* ENABLE_CARD_SUPPORT*/
|
#endif /* ENABLE_CARD_SUPPORT*/
|
||||||
|
|
||||||
|
case aListConfig:
|
||||||
|
{
|
||||||
|
char *str=collapse_args(argc,argv);
|
||||||
|
list_config(str);
|
||||||
|
m_free(str);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case aListPackets:
|
case aListPackets:
|
||||||
opt.list_packets=2;
|
opt.list_packets=2;
|
||||||
|
Loading…
Reference in New Issue
Block a user