mirror of
git://git.gnupg.org/gnupg.git
synced 2025-07-02 22:46:30 +02:00
bug fixes
This commit is contained in:
parent
4e8c3794b3
commit
b13e238a19
24 changed files with 466 additions and 260 deletions
|
@ -1,3 +1,23 @@
|
|||
Fri Feb 27 18:14:03 1998 Werner Koch (wk@isil.d.shuttle.de)
|
||||
|
||||
* armor.c (find_header): Removed trailing CR on headers.
|
||||
|
||||
Fri Feb 27 18:02:48 1998 Werner Koch (wk@isil.d.shuttle.de)
|
||||
|
||||
* ringedit.c (keyring_search) [MINGW32]: Open and close file here
|
||||
because rename does not work on open files. Chnaged callers.
|
||||
|
||||
Fri Feb 27 16:43:11 1998 Werner Koch (wk@isil.d.shuttle.de)
|
||||
|
||||
* sig-check.c (do_check): Add an md_enable.
|
||||
* mainproc.c (do_check_sig): Use md_open in case of detached sig
|
||||
(proc_tree): Take detached sigs into account.
|
||||
|
||||
Fri Feb 27 15:22:46 1998 Werner Koch (wk@isil.d.shuttle.de)
|
||||
|
||||
* g10.c (main): Make use of GNUPGHOME envvar.
|
||||
* g10main.c (main): Ditto.
|
||||
|
||||
Wed Feb 25 11:40:04 1998 Werner Koch (wk@isil.d.shuttle.de)
|
||||
|
||||
* plaintext.c (ask_for_detached_datafile): add opt.verbose to
|
||||
|
|
|
@ -318,6 +318,8 @@ find_header( fhdr_state_t state, byte *buf, size_t *r_buflen,
|
|||
if( n < buflen || c == '\n' ) {
|
||||
if( n && buf[0] != '\r') { /* maybe a header */
|
||||
if( strchr( buf, ':') ) { /* yes */
|
||||
if( buf[n-1] == '\r' )
|
||||
buf[--n] = 0;
|
||||
if( opt.verbose ) {
|
||||
log_info("armor header: ");
|
||||
print_string( stderr, buf, n );
|
||||
|
|
|
@ -326,7 +326,14 @@ main( int argc, char **argv )
|
|||
opt.def_digest_algo = DIGEST_ALGO_RMD160;
|
||||
opt.completes_needed = 1;
|
||||
opt.marginals_needed = 3;
|
||||
opt.homedir = "~/.gnupg";
|
||||
opt.homedir = getenv("GNUPGHOME");
|
||||
if( !opt.homedir || !*opt.homedir ) {
|
||||
#ifdef __MINGW32__
|
||||
opt.homedir = "c:/gnupg";
|
||||
#else
|
||||
opt.homedir = "~/.gnupg";
|
||||
#endif
|
||||
}
|
||||
|
||||
/* check wether we have a config file on the commandline */
|
||||
orig_argc = argc;
|
||||
|
|
|
@ -258,7 +258,14 @@ main( int argc, char **argv )
|
|||
opt.def_digest_algo = DIGEST_ALGO_RMD160;
|
||||
opt.completes_needed = 1;
|
||||
opt.marginals_needed = 3;
|
||||
opt.homedir = "~/.gnupg";
|
||||
opt.homedir = getenv("GNUPGHOME");
|
||||
if( !opt.homedir || !*opt.homedir ) {
|
||||
#ifdef __MINGW32__
|
||||
opt.homedir = "c:/gnupg";
|
||||
#else
|
||||
opt.homedir = "~/.gnupg";
|
||||
#endif
|
||||
}
|
||||
|
||||
/* check wether we have a config file on the commandline */
|
||||
orig_argc = argc;
|
||||
|
|
|
@ -272,12 +272,18 @@ do_check_sig( CTX c, KBNODE node )
|
|||
return rc;
|
||||
|
||||
if( sig->sig_class == 0x00 ) {
|
||||
md = md_copy( c->mfx.md );
|
||||
if( c->mfx.md )
|
||||
md = md_copy( c->mfx.md );
|
||||
else /* detached signature */
|
||||
md = md_open( 0, 0 ); /* signature_check() will enable the md*/
|
||||
}
|
||||
else if( sig->sig_class == 0x01 ) {
|
||||
/* how do we know that we have to hash the (already hashed) text
|
||||
* in canonical mode ??? (calculating both modes???) */
|
||||
md = md_copy( c->mfx.md );
|
||||
if( c->mfx.md )
|
||||
md = md_copy( c->mfx.md );
|
||||
else /* detached signature */
|
||||
md = md_open( 0, 0 ); /* signature_check() will enable the md*/
|
||||
}
|
||||
else if( (sig->sig_class&~3) == 0x10
|
||||
|| sig->sig_class == 0x20
|
||||
|
@ -620,19 +626,18 @@ proc_tree( CTX c, KBNODE node )
|
|||
else if( node->pkt->pkttype == PKT_SIGNATURE ) {
|
||||
PKT_signature *sig = node->pkt->pkt.signature;
|
||||
|
||||
if( !c->have_data && (sig->sig_class&~3) == 0x10 ) {
|
||||
log_info("old style signature\n");
|
||||
if( !c->have_data ) {
|
||||
free_md_filter_context( &c->mfx );
|
||||
c->mfx.md = md_open(digest_algo_from_sig(sig), 0);
|
||||
rc = ask_for_detached_datafile( &c->mfx,
|
||||
iobuf_get_fname(c->iobuf));
|
||||
if( rc ) {
|
||||
log_error("can't hash datafile: %s\n", g10_errstr(rc));
|
||||
return;
|
||||
}
|
||||
if( !c->have_data ) {
|
||||
free_md_filter_context( &c->mfx );
|
||||
c->mfx.md = md_open(digest_algo_from_sig(sig), 0);
|
||||
rc = ask_for_detached_datafile( &c->mfx,
|
||||
iobuf_get_fname(c->iobuf));
|
||||
if( rc ) {
|
||||
log_error("can't hash datafile: %s\n", g10_errstr(rc));
|
||||
return;
|
||||
}
|
||||
}
|
||||
else
|
||||
log_info("old style signature\n");
|
||||
|
||||
check_sig_and_print( c, node );
|
||||
}
|
||||
|
|
|
@ -73,7 +73,8 @@ static RESTBL resource_table[MAX_RESOURCES];
|
|||
static int search( PACKET *pkt, KBPOS *kbpos, int secret );
|
||||
|
||||
|
||||
static int keyring_search( PACKET *pkt, KBPOS *kbpos, IOBUF iobuf );
|
||||
static int keyring_search( PACKET *pkt, KBPOS *kbpos, IOBUF iobuf,
|
||||
const char *fname );
|
||||
static int keyring_search2( PUBKEY_FIND_INFO info, KBPOS *kbpos,
|
||||
const char *fname);
|
||||
static int keyring_read( KBPOS *kbpos, KBNODE *ret_root );
|
||||
|
@ -113,9 +114,13 @@ add_keyblock_resource( const char *filename, int force, int secret )
|
|||
if( i == MAX_RESOURCES )
|
||||
return G10ERR_RESOURCE_LIMIT;
|
||||
|
||||
#if __MINGW32__
|
||||
iobuf = NULL;
|
||||
#else
|
||||
iobuf = iobuf_open( filename );
|
||||
if( !iobuf && !force )
|
||||
return G10ERR_OPEN_FILE;
|
||||
#endif
|
||||
resource_table[i].used = 1;
|
||||
resource_table[i].secret = !!secret;
|
||||
resource_table[i].fname = m_strdup(filename);
|
||||
|
@ -211,7 +216,8 @@ search( PACKET *pkt, KBPOS *kbpos, int secret )
|
|||
if( resource_table[i].used && !resource_table[i].secret == !secret ) {
|
||||
/* note: here we have to add different search functions,
|
||||
* depending on the type of the resource */
|
||||
rc = keyring_search( pkt, kbpos, resource_table[i].iobuf );
|
||||
rc = keyring_search( pkt, kbpos, resource_table[i].iobuf,
|
||||
resource_table[i].fname );
|
||||
if( !rc ) {
|
||||
kbpos->resno = i;
|
||||
kbpos->fp = NULL;
|
||||
|
@ -469,7 +475,7 @@ update_keyblock( KBPOS *kbpos, KBNODE root )
|
|||
* search one keyring, return 0 if found, -1 if not found or an errorcode.
|
||||
*/
|
||||
static int
|
||||
keyring_search( PACKET *req, KBPOS *kbpos, IOBUF iobuf )
|
||||
keyring_search( PACKET *req, KBPOS *kbpos, IOBUF iobuf, const char *fname )
|
||||
{
|
||||
int rc;
|
||||
PACKET pkt;
|
||||
|
@ -482,11 +488,21 @@ keyring_search( PACKET *req, KBPOS *kbpos, IOBUF iobuf )
|
|||
init_packet(&pkt);
|
||||
save_mode = set_packet_list_mode(0);
|
||||
|
||||
#if __MINGW32__
|
||||
assert(!iobuf);
|
||||
iobuf = iobuf_open( fname );
|
||||
if( !iobuf ) {
|
||||
log_error("%s: can't open keyring file\n", fname);
|
||||
rc = G10ERR_KEYRING_OPEN;
|
||||
goto leave;
|
||||
}
|
||||
#else
|
||||
if( iobuf_seek( iobuf, 0 ) ) {
|
||||
log_error("can't rewind keyring file\n");
|
||||
rc = G10ERR_KEYRING_OPEN;
|
||||
goto leave;
|
||||
}
|
||||
#endif
|
||||
|
||||
while( !(rc=search_packet(iobuf, &pkt, pkttype, &offset)) ) {
|
||||
if( pkt.pkttype == PKT_SECRET_CERT ) {
|
||||
|
@ -539,6 +555,9 @@ keyring_search( PACKET *req, KBPOS *kbpos, IOBUF iobuf )
|
|||
leave:
|
||||
free_packet(&pkt);
|
||||
set_packet_list_mode(save_mode);
|
||||
#if __MINGW32__
|
||||
iobuf_close(iobuf);
|
||||
#endif
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
@ -872,7 +891,11 @@ keyring_copy( KBPOS *kbpos, int mode, KBNODE root )
|
|||
}
|
||||
|
||||
/* close both files */
|
||||
iobuf_close(fp);
|
||||
if( iobuf_close(fp) ) {
|
||||
log_error("%s: close failed: %s\n", rentry->fname, strerror(errno) );
|
||||
rc = G10ERR_CLOSE_FILE;
|
||||
goto leave;
|
||||
}
|
||||
if( iobuf_close(newfp) ) {
|
||||
log_error("%s: close failed: %s\n", tmpfname, strerror(errno) );
|
||||
rc = G10ERR_CLOSE_FILE;
|
||||
|
|
|
@ -68,6 +68,9 @@ do_check( PKT_public_cert *pkc, PKT_signature *sig, MD_HANDLE digest )
|
|||
|
||||
if( (rc=check_digest_algo(sig->d.elg.digest_algo)) )
|
||||
goto leave;
|
||||
/* make sure the digest algo is enabled (in case of a detached
|
||||
* signature */
|
||||
md_enable( digest, sig->d.elg.digest_algo );
|
||||
/* complete the digest */
|
||||
md_putc( digest, sig->sig_class );
|
||||
{ u32 a = sig->timestamp;
|
||||
|
@ -124,6 +127,7 @@ do_check( PKT_public_cert *pkc, PKT_signature *sig, MD_HANDLE digest )
|
|||
|
||||
if( (rc=check_digest_algo(sig->d.rsa.digest_algo)) )
|
||||
goto leave; /* unsupported algo */
|
||||
md_enable( digest, sig->d.rsa.digest_algo );
|
||||
asn = md_asn_oid( sig->d.rsa.digest_algo, &asnlen, &mdlen );
|
||||
|
||||
for(i=mdlen,j=asnlen-1; (c=mpi_getbyte(result, i)) != -1 && j >= 0;
|
||||
|
|
41
g10/sign.c
41
g10/sign.c
|
@ -163,27 +163,30 @@ sign_file( STRLIST filenames, int detached, STRLIST locusr,
|
|||
iobuf_push_filter( out, encrypt_filter, &efx );
|
||||
}
|
||||
|
||||
/* loop over the secret certificates and build headers */
|
||||
for( skc_rover = skc_list; skc_rover; skc_rover = skc_rover->next ) {
|
||||
PKT_secret_cert *skc;
|
||||
PKT_onepass_sig *ops;
|
||||
if( !detached ) {
|
||||
/* loop over the secret certificates and build headers */
|
||||
for( skc_rover = skc_list; skc_rover; skc_rover = skc_rover->next ) {
|
||||
PKT_secret_cert *skc;
|
||||
PKT_onepass_sig *ops;
|
||||
|
||||
skc = skc_rover->skc;
|
||||
ops = m_alloc_clear( sizeof *ops );
|
||||
ops->sig_class = opt.textmode && !outfile ? 0x01 : 0x00;
|
||||
ops->digest_algo = DIGEST_ALGO_RMD160;
|
||||
ops->pubkey_algo = skc->pubkey_algo;
|
||||
keyid_from_skc( skc, ops->keyid );
|
||||
ops->last = !skc_rover->next;
|
||||
skc = skc_rover->skc;
|
||||
ops = m_alloc_clear( sizeof *ops );
|
||||
ops->sig_class = opt.textmode && !outfile ? 0x01 : 0x00;
|
||||
ops->digest_algo = DIGEST_ALGO_RMD160;
|
||||
ops->pubkey_algo = skc->pubkey_algo;
|
||||
keyid_from_skc( skc, ops->keyid );
|
||||
ops->last = !skc_rover->next;
|
||||
|
||||
init_packet(&pkt);
|
||||
pkt.pkttype = PKT_ONEPASS_SIG;
|
||||
pkt.pkt.onepass_sig = ops;
|
||||
rc = build_packet( out, &pkt );
|
||||
free_packet( &pkt );
|
||||
if( rc ) {
|
||||
log_error("build onepass_sig packet failed: %s\n", g10_errstr(rc));
|
||||
goto leave;
|
||||
init_packet(&pkt);
|
||||
pkt.pkttype = PKT_ONEPASS_SIG;
|
||||
pkt.pkt.onepass_sig = ops;
|
||||
rc = build_packet( out, &pkt );
|
||||
free_packet( &pkt );
|
||||
if( rc ) {
|
||||
log_error("build onepass_sig packet failed: %s\n",
|
||||
g10_errstr(rc));
|
||||
goto leave;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue