aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--g10/ChangeLog14
-rw-r--r--g10/g10.c62
-rw-r--r--g10/keyedit.c5
-rw-r--r--g10/keylist.c13
-rw-r--r--g10/mainproc.c13
-rw-r--r--g10/packet.h2
6 files changed, 75 insertions, 34 deletions
diff --git a/g10/ChangeLog b/g10/ChangeLog
index 3e1de617e..25f20014c 100644
--- a/g10/ChangeLog
+++ b/g10/ChangeLog
@@ -1,3 +1,17 @@
+2004-01-30 David Shaw <[email protected]>
+
+ * g10.c (main, rm_group): Add --ungroup command to remove a
+ particular group.
+ (add_group): When adding a group with the same name as an already
+ existing group, merge the two groups.
+ (list_config): Show an error message when listing a config item
+ that doesn't exist.
+ (main): Replace -z0 trick for no compression.
+
+ * packet.h, keyedit.c (show_key_with_all_names_colon), keylist.c
+ (list_keyblock_colon), mainproc.c (list_node, proc_tree): Minor
+ cleanup to remove local_id, which is no longer used.
+
2004-01-27 David Shaw <[email protected]>
* getkey.c: Set MAX_PK_CACHE_ENTRIES and MAX_UID_CACHE_ENTRIES to
diff --git a/g10/g10.c b/g10/g10.c
index 0799aaa35..3b537710b 100644
--- a/g10/g10.c
+++ b/g10/g10.c
@@ -323,6 +323,7 @@ enum cmd_and_opt_values
oLCctype,
oLCmessages,
oGroup,
+ oUnGroup,
oNoGroups,
oStrict,
oNoStrict,
@@ -647,6 +648,7 @@ static ARGPARSE_OPTS opts[] = {
{ oLCctype, "lc-ctype", 2, "@" },
{ oLCmessages, "lc-messages", 2, "@" },
{ oGroup, "group", 2, "@" },
+ { oUnGroup, "ungroup", 2, "@" },
{ oNoGroups, "no-groups", 0, "@" },
{ oStrict, "strict", 0, "@" },
{ oNoStrict, "no-strict", 0, "@" },
@@ -939,7 +941,6 @@ add_group(char *string)
{
char *name,*value;
struct groupitem *item;
- STRLIST values=NULL;
/* Break off the group name */
name=strsep(&string,"=");
@@ -951,21 +952,52 @@ add_group(char *string)
trim_trailing_ws(name,strlen(name));
+ /* Does this group already exist? */
+ for(item=opt.grouplist;item;item=item->next)
+ if(strcasecmp(item->name,name)==0)
+ break;
+
+ if(!item)
+ {
+ item=m_alloc(sizeof(struct groupitem));
+ item->name=name;
+ item->next=opt.grouplist;
+ item->values=NULL;
+ opt.grouplist=item;
+ }
+
/* Break apart the values */
while ((value= strsep(&string," \t")))
{
if (*value)
- add_to_strlist2 (&values,value,utf8_strings);
+ add_to_strlist2(&item->values,value,utf8_strings);
}
+}
+
+
+static void
+rm_group(char *name)
+{
+ struct groupitem *item,*last=NULL;
+
+ trim_trailing_ws(name,strlen(name));
- item=m_alloc(sizeof(struct groupitem));
- item->name=name;
- item->values=values;
- item->next=opt.grouplist;
+ for(item=opt.grouplist;item;last=item,item=item->next)
+ {
+ if(strcasecmp(item->name,name)==0)
+ {
+ if(last)
+ last->next=item->next;
+ else
+ opt.grouplist=item->next;
- opt.grouplist=item;
+ free_strlist(item->values);
+ m_free(item);
+ }
+ }
}
+
/* We need to check three things.
0) The homedir. It must be x00, a directory, and owned by the
@@ -1205,6 +1237,8 @@ list_config(char *items)
while(show_all || (name=strsep(&items," ")))
{
+ int any=0;
+
if(show_all || ascii_strcasecmp(name,"group")==0)
{
struct groupitem *iter;
@@ -1226,6 +1260,8 @@ list_config(char *items)
printf("\n");
}
+
+ any=1;
}
if(show_all || ascii_strcasecmp(name,"version")==0)
@@ -1233,6 +1269,7 @@ list_config(char *items)
printf("cfg:version:");
print_string(stdout,VERSION,strlen(VERSION),':');
printf("\n");
+ any=1;
}
if(show_all || ascii_strcasecmp(name,"pubkey")==0)
@@ -1240,6 +1277,7 @@ list_config(char *items)
printf("cfg:pubkey:");
print_algo_numbers(check_pubkey_algo);
printf("\n");
+ any=1;
}
if(show_all || ascii_strcasecmp(name,"cipher")==0)
@@ -1247,6 +1285,7 @@ list_config(char *items)
printf("cfg:cipher:");
print_algo_numbers(check_cipher_algo);
printf("\n");
+ any=1;
}
if(show_all
@@ -1256,6 +1295,7 @@ list_config(char *items)
printf("cfg:digest:");
print_algo_numbers(check_digest_algo);
printf("\n");
+ any=1;
}
if(show_all || ascii_strcasecmp(name,"compress")==0)
@@ -1263,10 +1303,14 @@ list_config(char *items)
printf("cfg:compress:");
print_algo_numbers(check_compress_algo);
printf("\n");
+ any=1;
}
if(show_all)
break;
+
+ if(!any)
+ log_error(_("unknown configuration item \"%s\"\n"),name);
}
}
@@ -2202,6 +2246,7 @@ main( int argc, char **argv )
case oLCctype: opt.lc_ctype = pargs.r.ret_str; break;
case oLCmessages: opt.lc_messages = pargs.r.ret_str; break;
case oGroup: add_group(pargs.r.ret_str); break;
+ case oUnGroup: rm_group(pargs.r.ret_str); break;
case oNoGroups:
while(opt.grouplist)
{
@@ -2496,6 +2541,9 @@ main( int argc, char **argv )
if( log_get_errorcount(0) )
g10_exit(2);
+ if(opt.compress_level==0)
+ opt.compress_algo=COMPRESS_ALGO_NONE;
+
/* Check our chosen algorithms against the list of legal
algorithms. */
diff --git a/g10/keyedit.c b/g10/keyedit.c
index 21607737b..45b097c8b 100644
--- a/g10/keyedit.c
+++ b/g10/keyedit.c
@@ -1880,15 +1880,12 @@ show_key_with_all_names_colon (KBNODE keyblock)
putchar (trust);
}
- printf (":%u:%d:%08lX%08lX:%lu:%lu:",
+ printf (":%u:%d:%08lX%08lX:%lu:%lu::",
nbits_from_pk (pk),
pk->pubkey_algo,
(ulong)keyid[0], (ulong)keyid[1],
(ulong)pk->timestamp,
(ulong)pk->expiredate );
- if (pk->local_id)
- printf ("%lu", pk->local_id);
- putchar (':');
if (node->pkt->pkttype==PKT_PUBLIC_KEY
&& !(opt.fast_list_mode || opt.no_expensive_trust_checks ))
putchar(get_ownertrust_info (pk));
diff --git a/g10/keylist.c b/g10/keylist.c
index 29cf9462d..5983e9656 100644
--- a/g10/keylist.c
+++ b/g10/keylist.c
@@ -949,15 +949,12 @@ list_keyblock_colon( KBNODE keyblock, int secret, int fpr )
ulti_hack = 1;
putchar(trustletter);
}
- printf(":%u:%d:%08lX%08lX:%s:%s:",
+ printf(":%u:%d:%08lX%08lX:%s:%s::",
nbits_from_pk( pk ),
pk->pubkey_algo,
(ulong)keyid[0],(ulong)keyid[1],
colon_datestr_from_pk( pk ),
colon_strtime (pk->expiredate) );
- if( pk->local_id )
- printf("%lu", pk->local_id );
- putchar(':');
if( !opt.fast_list_mode && !opt.no_expensive_trust_checks )
putchar( get_ownertrust_info(pk) );
putchar(':');
@@ -1079,7 +1076,7 @@ list_keyblock_colon( KBNODE keyblock, int secret, int fpr )
if(trustletter)
printf("%c", trustletter );
}
- printf(":%u:%d:%08lX%08lX:%s:%s:",
+ printf(":%u:%d:%08lX%08lX:%s:%s:::::",
nbits_from_pk( pk2 ),
pk2->pubkey_algo,
(ulong)keyid2[0],(ulong)keyid2[1],
@@ -1087,12 +1084,6 @@ list_keyblock_colon( KBNODE keyblock, int secret, int fpr )
colon_strtime (pk2->expiredate)
/* fixme: add LID and ownertrust here */
);
- if( pk->local_id ) /* use the local_id of the main key??? */
- printf("%lu", pk->local_id );
- putchar(':');
- putchar(':');
- putchar(':');
- putchar(':');
print_capabilities (pk2, NULL, NULL);
putchar('\n');
if( fpr > 1 )
diff --git a/g10/mainproc.c b/g10/mainproc.c
index 4062ab95a..1f95d80b9 100644
--- a/g10/mainproc.c
+++ b/g10/mainproc.c
@@ -70,7 +70,6 @@ struct mainproc_context {
int have_data;
IOBUF iobuf; /* used to get the filename etc. */
int trustletter; /* temp usage in list_node */
- ulong local_id; /* ditto */
ulong symkeys;
struct kidlist_item *pkenc_list; /* list of encryption packets */
struct {
@@ -843,23 +842,18 @@ list_node( CTX c, KBNODE node )
if( opt.with_colons ) {
u32 keyid[2];
keyid_from_pk( pk, keyid );
- if( mainkey ) {
- c->local_id = pk->local_id;
- c->trustletter = opt.fast_list_mode?
+ if( mainkey )
+ c->trustletter = opt.fast_list_mode?
0 : get_validity_info( pk, NULL );
- }
printf("%s:", mainkey? "pub":"sub" );
if( c->trustletter )
putchar( c->trustletter );
- printf(":%u:%d:%08lX%08lX:%s:%s:",
+ printf(":%u:%d:%08lX%08lX:%s:%s::",
nbits_from_pk( pk ),
pk->pubkey_algo,
(ulong)keyid[0],(ulong)keyid[1],
colon_datestr_from_pk( pk ),
colon_strtime (pk->expiredate) );
- if( c->local_id )
- printf("%lu", c->local_id );
- putchar(':');
if( mainkey && !opt.fast_list_mode )
putchar( get_ownertrust_info (pk) );
putchar(':');
@@ -1658,7 +1652,6 @@ proc_tree( CTX c, KBNODE node )
if (!node)
return;
- c->local_id = 0;
c->trustletter = ' ';
if( node->pkt->pkttype == PKT_PUBLIC_KEY
|| node->pkt->pkttype == PKT_PUBLIC_SUBKEY ) {
diff --git a/g10/packet.h b/g10/packet.h
index e5e4a2a03..da7e2dce2 100644
--- a/g10/packet.h
+++ b/g10/packet.h
@@ -122,7 +122,6 @@ struct revocation_key {
};
typedef struct {
- ulong local_id; /* internal use, valid if > 0 */
struct {
unsigned checked:1; /* signature has been checked */
unsigned valid:1; /* signature is good (if checked is set) */
@@ -211,7 +210,6 @@ typedef struct {
without the key to check it */
int is_valid; /* key (especially subkey) is valid */
int dont_cache; /* do not cache this */
- ulong local_id; /* internal use, valid if > 0 */
u32 main_keyid[2]; /* keyid of the primary key */
u32 keyid[2]; /* calculated by keyid_from_pk() */
byte is_primary;