1
0
mirror of git://git.gnupg.org/gnupg.git synced 2024-06-11 23:59:50 +02:00

* g10.c (main): Add --no-throw-keyid.

* keydb.h, encode.c (write_pubkey_enc_from_list), g10.c (main), pkclist.c
(build_pk_list): Add --hidden-recipient (-R) and --hidden-encrypt-to,
which do a single-user variation on --throw-keyid.  The "hide this key"
flag is carried in bit 0 of the pk_list flags field.

* keyserver.c (parse_keyrec): Fix shadowing warning.
This commit is contained in:
David Shaw 2002-11-01 16:15:45 +00:00
parent 7b4ad0f64c
commit bdf0e306df
6 changed files with 69 additions and 12 deletions

View File

@ -1,3 +1,15 @@
2002-11-01 David Shaw <dshaw@jabberwocky.com>
* g10.c (main): Add --no-throw-keyid.
* keydb.h, encode.c (write_pubkey_enc_from_list), g10.c (main),
pkclist.c (build_pk_list): Add --hidden-recipient (-R) and
--hidden-encrypt-to, which do a single-user variation on
--throw-keyid. The "hide this key" flag is carried in bit 0 of
the pk_list flags field.
* keyserver.c (parse_keyrec): Fix shadowing warning.
2002-10-31 Stefan Bellon <sbellon@sbellon.de> 2002-10-31 Stefan Bellon <sbellon@sbellon.de>
* compress.c (init_compress) [__riscos__]: Use * compress.c (init_compress) [__riscos__]: Use

View File

@ -699,7 +699,7 @@ write_pubkey_enc_from_list( PK_LIST pk_list, DEK *dek, IOBUF out )
enc = m_alloc_clear( sizeof *enc ); enc = m_alloc_clear( sizeof *enc );
enc->pubkey_algo = pk->pubkey_algo; enc->pubkey_algo = pk->pubkey_algo;
keyid_from_pk( pk, enc->keyid ); keyid_from_pk( pk, enc->keyid );
enc->throw_keyid = opt.throw_keyid; enc->throw_keyid = (opt.throw_keyid || (pk_list->flags&1));
if(opt.throw_keyid && (opt.pgp2 || opt.pgp6 || opt.pgp7)) if(opt.throw_keyid && (opt.pgp2 || opt.pgp6 || opt.pgp7))
{ {

View File

@ -65,6 +65,7 @@ enum cmd_and_opt_values { aNull = 0,
oOutput = 'o', oOutput = 'o',
oQuiet = 'q', oQuiet = 'q',
oRecipient = 'r', oRecipient = 'r',
oHiddenRecipient = 'R',
aSign = 's', aSign = 's',
oTextmodeShort= 't', oTextmodeShort= 't',
oUser = 'u', oUser = 'u',
@ -218,6 +219,7 @@ enum cmd_and_opt_values { aNull = 0,
oComment, oComment,
oDefaultComment, oDefaultComment,
oThrowKeyid, oThrowKeyid,
oNoThrowKeyid,
oShowPhotos, oShowPhotos,
oNoShowPhotos, oNoShowPhotos,
oPhotoViewer, oPhotoViewer,
@ -247,6 +249,7 @@ enum cmd_and_opt_values { aNull = 0,
oTempDir, oTempDir,
oExecPath, oExecPath,
oEncryptTo, oEncryptTo,
oHiddenEncryptTo,
oNoEncryptTo, oNoEncryptTo,
oLoggerFD, oLoggerFD,
#ifdef __riscos__ #ifdef __riscos__
@ -372,6 +375,7 @@ static ARGPARSE_OPTS opts[] = {
{ oArmor, "armor", 0, N_("create ascii armored output")}, { oArmor, "armor", 0, N_("create ascii armored output")},
{ oArmor, "armour", 0, "@" }, { oArmor, "armour", 0, "@" },
{ oRecipient, "recipient", 2, N_("|NAME|encrypt for NAME")}, { oRecipient, "recipient", 2, N_("|NAME|encrypt for NAME")},
{ oHiddenRecipient, "hidden-recipient", 2, "@" },
{ oRecipient, "remote-user", 2, "@"}, /* old option name */ { oRecipient, "remote-user", 2, "@"}, /* old option name */
{ oDefRecipient, "default-recipient" ,2, { oDefRecipient, "default-recipient" ,2,
N_("|NAME|use NAME as default recipient")}, N_("|NAME|use NAME as default recipient")},
@ -381,6 +385,7 @@ static ARGPARSE_OPTS opts[] = {
{ oTempDir, "temp-directory", 2, "@" }, { oTempDir, "temp-directory", 2, "@" },
{ oExecPath, "exec-path", 2, "@" }, { oExecPath, "exec-path", 2, "@" },
{ oEncryptTo, "encrypt-to", 2, "@" }, { oEncryptTo, "encrypt-to", 2, "@" },
{ oHiddenEncryptTo, "hidden-encrypt-to", 2, "@" },
{ oNoEncryptTo, "no-encrypt-to", 0, "@" }, { oNoEncryptTo, "no-encrypt-to", 0, "@" },
{ oUser, "local-user",2, N_("use this user-id to sign or decrypt")}, { oUser, "local-user",2, N_("use this user-id to sign or decrypt")},
{ oCompress, NULL, 1, N_("|N|set compress level N (0 disables)") }, { oCompress, NULL, 1, N_("|N|set compress level N (0 disables)") },
@ -460,6 +465,7 @@ static ARGPARSE_OPTS opts[] = {
{ oCertDigestAlgo, "cert-digest-algo", 2 , "@" }, { oCertDigestAlgo, "cert-digest-algo", 2 , "@" },
{ oCompressAlgo, "compress-algo", 1 , N_("|N|use compress algorithm N")}, { oCompressAlgo, "compress-algo", 1 , N_("|N|use compress algorithm N")},
{ oThrowKeyid, "throw-keyid", 0, N_("throw keyid field of encrypted packets")}, { oThrowKeyid, "throw-keyid", 0, N_("throw keyid field of encrypted packets")},
{ oNoThrowKeyid, "no-throw-keyid", 0, "@" },
{ oShowPhotos, "show-photos", 0, N_("Show Photo IDs")}, { oShowPhotos, "show-photos", 0, N_("Show Photo IDs")},
{ oNoShowPhotos, "no-show-photos", 0, N_("Don't show Photo IDs")}, { oNoShowPhotos, "no-show-photos", 0, N_("Don't show Photo IDs")},
{ oPhotoViewer, "photo-viewer", 2, N_("Set command line to view Photo IDs")}, { oPhotoViewer, "photo-viewer", 2, N_("Set command line to view Photo IDs")},
@ -1515,6 +1521,7 @@ main( int argc, char **argv )
case oComment: opt.comment_string = pargs.r.ret_str; break; case oComment: opt.comment_string = pargs.r.ret_str; break;
case oDefaultComment: opt.comment_string = NULL; break; case oDefaultComment: opt.comment_string = NULL; break;
case oThrowKeyid: opt.throw_keyid = 1; break; case oThrowKeyid: opt.throw_keyid = 1; break;
case oNoThrowKeyid: opt.throw_keyid = 0; break;
case oShowPhotos: opt.show_photos = 1; break; case oShowPhotos: opt.show_photos = 1; break;
case oNoShowPhotos: opt.show_photos = 0; break; case oNoShowPhotos: opt.show_photos = 0; break;
case oPhotoViewer: opt.photo_viewer = pargs.r.ret_str; break; case oPhotoViewer: opt.photo_viewer = pargs.r.ret_str; break;
@ -1535,10 +1542,19 @@ main( int argc, char **argv )
sl = add_to_strlist2( &remusr, pargs.r.ret_str, utf8_strings ); sl = add_to_strlist2( &remusr, pargs.r.ret_str, utf8_strings );
sl->flags = 1; sl->flags = 1;
break; break;
case oHiddenEncryptTo: /* store the recipient in the second list */
sl = add_to_strlist2( &remusr, pargs.r.ret_str, utf8_strings );
sl->flags = 1|2;
break;
case oRecipient: /* store the recipient */ case oRecipient: /* store the recipient */
add_to_strlist2( &remusr, pargs.r.ret_str, utf8_strings ); add_to_strlist2( &remusr, pargs.r.ret_str, utf8_strings );
any_explicit_recipient = 1; any_explicit_recipient = 1;
break; break;
case oHiddenRecipient: /* store the recipient with a flag */
sl = add_to_strlist2( &remusr, pargs.r.ret_str, utf8_strings );
sl->flags = 2;
any_explicit_recipient = 1;
break;
case oTextmodeShort: opt.textmode = 2; break; case oTextmodeShort: opt.textmode = 2; break;
case oTextmode: opt.textmode=1; break; case oTextmode: opt.textmode=1; break;
case oExpert: opt.expert = 1; break; case oExpert: opt.expert = 1; break;

View File

@ -89,7 +89,7 @@ typedef struct pk_list *PK_LIST;
struct pk_list { struct pk_list {
PK_LIST next; PK_LIST next;
PKT_public_key *pk; PKT_public_key *pk;
int mark; int flags; /* flag bit 1==throw_keyid */
}; };
/* structure to hold a couple of secret key certificates */ /* structure to hold a couple of secret key certificates */
@ -97,7 +97,7 @@ typedef struct sk_list *SK_LIST;
struct sk_list { struct sk_list {
SK_LIST next; SK_LIST next;
PKT_secret_key *sk; PKT_secret_key *sk;
int mark; int mark; /* not used */
}; };
/* structure to collect all information which can be used to /* structure to collect all information which can be used to

View File

@ -304,7 +304,7 @@ parse_keyrec(char *keystring)
{ {
static struct keyrec *work=NULL; static struct keyrec *work=NULL;
struct keyrec *ret=NULL; struct keyrec *ret=NULL;
char *record,*tok; char *record;
int i; int i;
if(keystring==NULL) if(keystring==NULL)
@ -342,6 +342,8 @@ parse_keyrec(char *keystring)
if(ascii_strcasecmp("pub",record)==0) if(ascii_strcasecmp("pub",record)==0)
{ {
char *tok;
if(work->desc.mode) if(work->desc.mode)
{ {
ret=work; ret=work;
@ -415,7 +417,6 @@ parse_keyrec(char *keystring)
else if(ascii_strcasecmp("uid",record)==0 && work->desc.mode) else if(ascii_strcasecmp("uid",record)==0 && work->desc.mode)
{ {
char *userid,*tok,*decoded; char *userid,*tok,*decoded;
int i=0;
if((tok=strsep(&keystring,":"))==NULL) if((tok=strsep(&keystring,":"))==NULL)
return ret; return ret;
@ -428,6 +429,8 @@ parse_keyrec(char *keystring)
/* By definition, de-%-encoding is always smaller than the /* By definition, de-%-encoding is always smaller than the
original string so we can decode in place. */ original string so we can decode in place. */
i=0;
while(*tok) while(*tok)
if(tok[0]=='%' && tok[1] && tok[2]) if(tok[0]=='%' && tok[1] && tok[2])
{ {

View File

@ -808,7 +808,21 @@ build_pk_list( STRLIST rcpts, PK_LIST *ret_pk_list, unsigned use )
* list of the encrypt-to ones (we always trust them) */ * list of the encrypt-to ones (we always trust them) */
for( rov = remusr; rov; rov = rov->next ) { for( rov = remusr; rov; rov = rov->next ) {
if( !(rov->flags & 1) ) if( !(rov->flags & 1) )
{
any_recipients = 1; any_recipients = 1;
if((rov->flags&2) && (opt.pgp2 || opt.pgp6 || opt.pgp7))
{
log_info(_("you may not use %s while in %s mode\n"),
"--hidden-recipient",
opt.pgp2?"--pgp2":opt.pgp6?"--pgp6":"--pgp7");
log_info(_("this message may not be usable by %s\n"),
opt.pgp2?"PGP 2.x":opt.pgp6?"PGP 6.x":"PGP 7.x");
opt.pgp2=opt.pgp6=opt.pgp7=0;
}
}
else if( (use & PUBKEY_USAGE_ENC) && !opt.no_encrypt_to ) { else if( (use & PUBKEY_USAGE_ENC) && !opt.no_encrypt_to ) {
pk = m_alloc_clear( sizeof *pk ); pk = m_alloc_clear( sizeof *pk );
pk->req_usage = use; pk->req_usage = use;
@ -832,8 +846,20 @@ build_pk_list( STRLIST rcpts, PK_LIST *ret_pk_list, unsigned use )
r = m_alloc( sizeof *r ); r = m_alloc( sizeof *r );
r->pk = pk; pk = NULL; r->pk = pk; pk = NULL;
r->next = pk_list; r->next = pk_list;
r->mark = 0; r->flags = (rov->flags&2)?1:0;
pk_list = r; pk_list = r;
if(r->flags&1 && (opt.pgp2 || opt.pgp6 || opt.pgp7))
{
log_info(_("you may not use %s while in %s mode\n"),
"--hidden-encrypt-to",
opt.pgp2?"--pgp2":opt.pgp6?"--pgp6":"--pgp7");
log_info(_("this message may not be usable by %s\n"),
opt.pgp2?"PGP 2.x":opt.pgp6?"PGP 6.x":"PGP 7.x");
opt.pgp2=opt.pgp6=opt.pgp7=0;
}
} }
} }
else { else {
@ -896,7 +922,7 @@ build_pk_list( STRLIST rcpts, PK_LIST *ret_pk_list, unsigned use )
PK_LIST r = m_alloc( sizeof *r ); PK_LIST r = m_alloc( sizeof *r );
r->pk = pk; pk = NULL; r->pk = pk; pk = NULL;
r->next = pk_list; r->next = pk_list;
r->mark = 0; r->flags = 0; /* no throwing default ids */
pk_list = r; pk_list = r;
} }
any_recipients = 1; any_recipients = 1;
@ -936,7 +962,7 @@ build_pk_list( STRLIST rcpts, PK_LIST *ret_pk_list, unsigned use )
r = m_alloc( sizeof *r ); r = m_alloc( sizeof *r );
r->pk = pk; pk = NULL; r->pk = pk; pk = NULL;
r->next = pk_list; r->next = pk_list;
r->mark = 0; r->flags = 0; /* no throwing interactive ids */
pk_list = r; pk_list = r;
} }
any_recipients = 1; any_recipients = 1;
@ -970,7 +996,7 @@ build_pk_list( STRLIST rcpts, PK_LIST *ret_pk_list, unsigned use )
PK_LIST r = m_alloc( sizeof *r ); PK_LIST r = m_alloc( sizeof *r );
r->pk = pk; pk = NULL; r->pk = pk; pk = NULL;
r->next = pk_list; r->next = pk_list;
r->mark = 0; r->flags = 0; /* no throwing default ids */
pk_list = r; pk_list = r;
} }
} }
@ -1030,7 +1056,7 @@ build_pk_list( STRLIST rcpts, PK_LIST *ret_pk_list, unsigned use )
r = m_alloc( sizeof *r ); r = m_alloc( sizeof *r );
r->pk = pk; pk = NULL; r->pk = pk; pk = NULL;
r->next = pk_list; r->next = pk_list;
r->mark = 0; r->flags = (remusr->flags&2)?1:0;
pk_list = r; pk_list = r;
} }
} }
@ -1266,7 +1292,7 @@ select_algo_from_prefs(PK_LIST pk_list, int preftype, int request, void *hint)
* algorithm 1 is also available (the ordering is not relevant * algorithm 1 is also available (the ordering is not relevant
* in this case). */ * in this case). */
if( bits[0] & (1<<1) ) if( bits[0] & (1<<1) )
i = 1; /* yep; we can use compression algo 1 */ i = 1; /* yep; we can use compression algo 1 */
} }
/* "If you are building an authentication system, the recipient /* "If you are building an authentication system, the recipient
@ -1274,7 +1300,7 @@ select_algo_from_prefs(PK_LIST pk_list, int preftype, int request, void *hint)
would be foolish to use a weak algorithm simply because the would be foolish to use a weak algorithm simply because the
recipient requests it." RFC2440:13. If we settle on MD5, and recipient requests it." RFC2440:13. If we settle on MD5, and
SHA1 is also available, use SHA1 instead. Of course, if the SHA1 is also available, use SHA1 instead. Of course, if the
user intentinally chose MD5 (by putting it in their personal user intentionally chose MD5 (by putting it in their personal
prefs), then we should do what they say. */ prefs), then we should do what they say. */
if(preftype==PREFTYPE_HASH && if(preftype==PREFTYPE_HASH &&