aboutsummaryrefslogtreecommitdiffstats
path: root/g10
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--g10/ChangeLog20
-rw-r--r--g10/armor.c2
-rw-r--r--g10/g10.c9
-rw-r--r--g10/g10maint.c9
-rw-r--r--g10/mainproc.c31
-rw-r--r--g10/ringedit.c31
-rw-r--r--g10/sig-check.c4
-rw-r--r--g10/sign.c45
8 files changed, 111 insertions, 40 deletions
diff --git a/g10/ChangeLog b/g10/ChangeLog
index d558e148a..56c825119 100644
--- a/g10/ChangeLog
+++ b/g10/ChangeLog
@@ -1,3 +1,23 @@
+Fri Feb 27 18:14:03 1998 Werner Koch ([email protected])
+
+ * armor.c (find_header): Removed trailing CR on headers.
+
+Fri Feb 27 18:02:48 1998 Werner Koch ([email protected])
+
+ * 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 ([email protected])
+
+ * 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 ([email protected])
+
+ * g10.c (main): Make use of GNUPGHOME envvar.
+ * g10main.c (main): Ditto.
+
Wed Feb 25 11:40:04 1998 Werner Koch ([email protected])
* plaintext.c (ask_for_detached_datafile): add opt.verbose to
diff --git a/g10/armor.c b/g10/armor.c
index 80de65551..142e0bd82 100644
--- a/g10/armor.c
+++ b/g10/armor.c
@@ -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 );
diff --git a/g10/g10.c b/g10/g10.c
index fc441fe46..867bb5a43 100644
--- a/g10/g10.c
+++ b/g10/g10.c
@@ -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;
diff --git a/g10/g10maint.c b/g10/g10maint.c
index ed0f90e56..b35106c0d 100644
--- a/g10/g10maint.c
+++ b/g10/g10maint.c
@@ -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;
diff --git a/g10/mainproc.c b/g10/mainproc.c
index e2c0b703d..153496f60 100644
--- a/g10/mainproc.c
+++ b/g10/mainproc.c
@@ -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 );
}
diff --git a/g10/ringedit.c b/g10/ringedit.c
index b5d6ec8b1..ba71f0e67 100644
--- a/g10/ringedit.c
+++ b/g10/ringedit.c
@@ -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;
diff --git a/g10/sig-check.c b/g10/sig-check.c
index 299fedc83..32371b359 100644
--- a/g10/sig-check.c
+++ b/g10/sig-check.c
@@ -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;
diff --git a/g10/sign.c b/g10/sign.c
index a3ad4ba80..e3af619e2 100644
--- a/g10/sign.c
+++ b/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;
-
- 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;
+ 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;
+
+ 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;
+ }
}
}