aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Shaw <[email protected]>2002-05-27 01:00:11 +0000
committerDavid Shaw <[email protected]>2002-05-27 01:00:11 +0000
commit8d5dad0ac3acee55eaeeddb34deba8abfbdd927b (patch)
tree9fa3bb774837f0183babe56f947f8af3dfbe05d0
parent* g10.c (strusage, build_list): Add compress algorithms to --version list. (diff)
downloadgnupg-8d5dad0ac3acee55eaeeddb34deba8abfbdd927b.tar.gz
gnupg-8d5dad0ac3acee55eaeeddb34deba8abfbdd927b.zip
* sign.c (mk_notation_and_policy): Include secret key to enable %s
expandos, and pass notations through pct_expando as well. * main.h, misc.c (pct_expando): Add %s and %S expandos for signer's keyid.
-rw-r--r--g10/ChangeLog8
-rw-r--r--g10/main.h1
-rw-r--r--g10/misc.c30
-rw-r--r--g10/sign.c24
4 files changed, 54 insertions, 9 deletions
diff --git a/g10/ChangeLog b/g10/ChangeLog
index cc97458b6..1ad1c84bc 100644
--- a/g10/ChangeLog
+++ b/g10/ChangeLog
@@ -1,3 +1,11 @@
+2002-05-26 David Shaw <[email protected]>
+
+ * sign.c (mk_notation_and_policy): Include secret key to enable %s
+ expandos, and pass notations through pct_expando as well.
+
+ * main.h, misc.c (pct_expando): Add %s and %S expandos for
+ signer's keyid.
+
2002-05-25 David Shaw <[email protected]>
* g10.c (strusage, build_list): Add compress algorithms to
diff --git a/g10/main.h b/g10/main.h
index 71842968c..1ce723301 100644
--- a/g10/main.h
+++ b/g10/main.h
@@ -71,6 +71,7 @@ void idea_cipher_warn( int show );
struct expando_args
{
PKT_public_key *pk;
+ PKT_secret_key *sk;
byte imagetype;
};
diff --git a/g10/misc.c b/g10/misc.c
index 6f535c4ff..6a008d5fb 100644
--- a/g10/misc.c
+++ b/g10/misc.c
@@ -455,11 +455,14 @@ pct_expando(const char *string,struct expando_args *args)
{
const char *ch=string;
int idx=0,maxlen=0,done=0;
- u32 keyid[2]={0,0};
+ u32 pk_keyid[2]={0,0},sk_keyid[2]={0,0};
char *ret=NULL;
if(args->pk)
- keyid_from_pk(args->pk,keyid);
+ keyid_from_pk(args->pk,pk_keyid);
+
+ if(args->sk)
+ keyid_from_sk(args->sk,sk_keyid);
while(*ch!='\0')
{
@@ -481,10 +484,29 @@ pct_expando(const char *string,struct expando_args *args)
{
switch(*(ch+1))
{
+ case 's': /* short key id */
+ if(idx+8<maxlen)
+ {
+ sprintf(&ret[idx],"%08lX",(ulong)sk_keyid[1]);
+ idx+=8;
+ done=1;
+ }
+ break;
+
+ case 'S': /* long key id */
+ if(idx+16<maxlen)
+ {
+ sprintf(&ret[idx],"%08lX%08lX",
+ (ulong)sk_keyid[0],(ulong)sk_keyid[1]);
+ idx+=16;
+ done=1;
+ }
+ break;
+
case 'k': /* short key id */
if(idx+8<maxlen)
{
- sprintf(&ret[idx],"%08lX",(ulong)keyid[1]);
+ sprintf(&ret[idx],"%08lX",(ulong)pk_keyid[1]);
idx+=8;
done=1;
}
@@ -494,7 +516,7 @@ pct_expando(const char *string,struct expando_args *args)
if(idx+16<maxlen)
{
sprintf(&ret[idx],"%08lX%08lX",
- (ulong)keyid[0],(ulong)keyid[1]);
+ (ulong)pk_keyid[0],(ulong)pk_keyid[1]);
idx+=16;
done=1;
}
diff --git a/g10/sign.c b/g10/sign.c
index fe6e62312..3b28374c7 100644
--- a/g10/sign.c
+++ b/g10/sign.c
@@ -55,7 +55,8 @@
* NAME=VALUE format.
*/
static void
-mk_notation_and_policy( PKT_signature *sig, PKT_public_key *pk )
+mk_notation_and_policy( PKT_signature *sig,
+ PKT_public_key *pk, PKT_secret_key *sk )
{
const char *string;
char *s=NULL;
@@ -66,6 +67,7 @@ mk_notation_and_policy( PKT_signature *sig, PKT_public_key *pk )
memset(&args,0,sizeof(args));
args.pk=pk;
+ args.sk=sk;
/* notation data */
if(IS_SIG(sig) && opt.sig_notation_data)
@@ -84,13 +86,24 @@ mk_notation_and_policy( PKT_signature *sig, PKT_public_key *pk )
}
for( ; nd; nd = nd->next ) {
+ char *expanded;
+
string = nd->d;
s = strchr( string, '=' );
if( !s )
BUG(); /* we have already parsed this */
n1 = s - string;
s++;
- n2 = strlen(s);
+
+ expanded=pct_expando(s,&args);
+ if(!expanded)
+ {
+ log_error(_("WARNING: unable to %%-expand notation "
+ "(too large). Using unexpanded.\n"));
+ expanded=m_strdup(s);
+ }
+
+ n2 = strlen(expanded);
buf = m_alloc( 8 + n1 + n2 );
buf[0] = 0x80; /* human readable */
buf[1] = buf[2] = buf[3] = 0;
@@ -99,10 +112,11 @@ mk_notation_and_policy( PKT_signature *sig, PKT_public_key *pk )
buf[6] = n2 >> 8;
buf[7] = n2;
memcpy(buf+8, string, n1 );
- memcpy(buf+8+n1, s, n2 );
+ memcpy(buf+8+n1, expanded, n2 );
build_sig_subpkt( sig, SIGSUBPKT_NOTATION
| ((nd->flags & 1)? SIGSUBPKT_FLAG_CRITICAL:0),
buf, 8+n1+n2 );
+ m_free(expanded);
}
if(opt.show_notation)
@@ -536,7 +550,7 @@ write_signature_packets (SK_LIST sk_list, IOBUF out, MD_HANDLE hash,
if (sig->version >= 4)
build_sig_subpkt_from_sig (sig);
- mk_notation_and_policy (sig, NULL);
+ mk_notation_and_policy (sig, NULL, sk);
hash_sigversion_to_magic (md, sig);
md_final (md);
@@ -1165,7 +1179,7 @@ make_keysig_packet( PKT_signature **ret_sig, PKT_public_key *pk,
rc = (*mksubpkt)( sig, opaque );
if( !rc ) {
- mk_notation_and_policy( sig, pk );
+ mk_notation_and_policy( sig, pk, sk );
hash_sigversion_to_magic (md, sig);
md_final(md);