aboutsummaryrefslogtreecommitdiffstats
path: root/g10
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>1999-07-26 07:44:46 +0000
committerWerner Koch <[email protected]>1999-07-26 07:44:46 +0000
commit4dbfb24dbb3652b3b73d97d3fee3df5c968aa358 (patch)
tree6841adaa29b9aa8803f9b5ea746690f35c1a4a45 /g10
parent. (diff)
downloadgnupg-4dbfb24dbb3652b3b73d97d3fee3df5c968aa358.tar.gz
gnupg-4dbfb24dbb3652b3b73d97d3fee3df5c968aa358.zip
See ChangeLog: Mon Jul 26 09:34:46 CEST 1999 Werner Koch
Diffstat (limited to 'g10')
-rw-r--r--g10/ChangeLog22
-rw-r--r--g10/encode.c144
-rw-r--r--g10/g10.c23
-rw-r--r--g10/getkey.c12
-rw-r--r--g10/import.c4
-rw-r--r--g10/options.h2
-rw-r--r--g10/pkclist.c2
-rw-r--r--g10/sign.c66
-rw-r--r--g10/trustdb.c2
9 files changed, 196 insertions, 81 deletions
diff --git a/g10/ChangeLog b/g10/ChangeLog
index 08ef6b11d..87647369f 100644
--- a/g10/ChangeLog
+++ b/g10/ChangeLog
@@ -1,3 +1,25 @@
+Mon Jul 26 09:34:46 CEST 1999 Werner Koch <[email protected]>
+
+
+ * pkclist.c (build_pk_list): Fixed typo in format string.
+
+ * trustdb.c (create_shadow_dir): Don't translate the error string.
+
+ * g10.c (main): Fixed spelling of user-id.
+ * getkey.c (find_by_name_pk,find_by_name_sk,
+ find_by_keyid,find_by_keyid_sk): Ditto and translate it.
+ * import.c (mark_non_selfsigned_uids_valid,delete_inv_parts): Ditto.
+
+
+Mon Jul 26 01:01:39 CEST 1999 Michael Roth <[email protected]>
+
+ * g10.c, options.h: New options --no-literal and --set-filesize
+
+ * encode.c (encode_simple, encode_crypt): Support for the options
+ --no-literal and --set-filesize.
+
+ * sign.c (sign_file): ditto.
+
Fri Jul 23 13:53:03 CEST 1999 Werner Koch <[email protected]>
diff --git a/g10/encode.c b/g10/encode.c
index 147607b31..5ee999665 100644
--- a/g10/encode.c
+++ b/g10/encode.c
@@ -70,7 +70,7 @@ encode_simple( const char *filename, int mode )
{
IOBUF inp, out;
PACKET pkt;
- PKT_plaintext *pt;
+ PKT_plaintext *pt = NULL;
STRING2KEY *s2k = NULL;
int rc = 0;
u32 filesize;
@@ -144,18 +144,22 @@ encode_simple( const char *filename, int mode )
m_free(enc);
}
- /* setup the inner packet */
- if( filename || opt.set_filename ) {
- char *s = make_basename( opt.set_filename ? opt.set_filename : filename );
- pt = m_alloc( sizeof *pt + strlen(s) - 1 );
- pt->namelen = strlen(s);
- memcpy(pt->name, s, pt->namelen );
- m_free(s);
- }
- else { /* no filename */
- pt = m_alloc( sizeof *pt - 1 );
- pt->namelen = 0;
+ if (!opt.no_literal) {
+ /* setup the inner packet */
+ if( filename || opt.set_filename ) {
+ char *s = make_basename( opt.set_filename ? opt.set_filename
+ : filename );
+ pt = m_alloc( sizeof *pt + strlen(s) - 1 );
+ pt->namelen = strlen(s);
+ memcpy(pt->name, s, pt->namelen );
+ m_free(s);
+ }
+ else { /* no filename */
+ pt = m_alloc( sizeof *pt - 1 );
+ pt->namelen = 0;
+ }
}
+
/* pgp5 has problems to decrypt symmetrically encrypted data from
* GnuPG if the filelength is in the inner packet. It works
* when only partial length headers are use. Until we have
@@ -167,14 +171,19 @@ encode_simple( const char *filename, int mode )
log_info(_("%s: WARNING: empty file\n"), filename );
}
else
- filesize = 0; /* stdin */
- pt->timestamp = make_timestamp();
- pt->mode = opt.textmode? 't' : 'b';
- pt->len = filesize;
- pt->buf = inp;
- pkt.pkttype = PKT_PLAINTEXT;
- pkt.pkt.plaintext = pt;
- cfx.datalen = filesize && !do_compress ? calc_packet_length( &pkt ) : 0;
+ filesize = opt.set_filesize ? opt.set_filesize : 0; /* stdin */
+
+ if (!opt.no_literal) {
+ pt->timestamp = make_timestamp();
+ pt->mode = opt.textmode? 't' : 'b';
+ pt->len = filesize;
+ pt->buf = inp;
+ pkt.pkttype = PKT_PLAINTEXT;
+ pkt.pkt.plaintext = pt;
+ cfx.datalen = filesize && !do_compress ? calc_packet_length( &pkt ) : 0;
+ }
+ else
+ cfx.datalen = filesize && !do_compress ? filesize : 0;
/* register the cipher filter */
if( mode )
@@ -184,13 +193,32 @@ encode_simple( const char *filename, int mode )
iobuf_push_filter( out, compress_filter, &zfx );
/* do the work */
- if( (rc = build_packet( out, &pkt )) )
- log_error("build_packet failed: %s\n", g10_errstr(rc) );
+ if (!opt.no_literal) {
+ if( (rc = build_packet( out, &pkt )) )
+ log_error("build_packet failed: %s\n", g10_errstr(rc) );
+ }
+ else {
+ /* user requested not to create a literal packet,
+ * so we copy the plain data */
+ byte copy_buffer[4096];
+ int bytes_copied;
+ while ((bytes_copied = iobuf_read(inp, copy_buffer, 4096)) != -1)
+ if (iobuf_write(out, copy_buffer, bytes_copied) == -1) {
+ rc = G10ERR_WRITE_FILE;
+ log_error("copying input to output failed: %s\n", g10_errstr(rc) );
+ break;
+ }
+ memset(copy_buffer, 0, 4096); /* burn buffer */
+ }
/* finish the stuff */
iobuf_close(inp);
- iobuf_close(out); /* fixme: check returncode */
- pt->buf = NULL;
+ if (rc)
+ iobuf_cancel(out);
+ else
+ iobuf_close(out); /* fixme: check returncode */
+ if (pt)
+ pt->buf = NULL;
free_packet(&pkt);
m_free(cfx.dek);
m_free(s2k);
@@ -270,35 +298,43 @@ encode_crypt( const char *filename, STRLIST remusr )
if( rc )
goto leave;
- /* setup the inner packet */
- if( filename || opt.set_filename ) {
- char *s = make_basename( opt.set_filename ? opt.set_filename : filename );
- pt = m_alloc( sizeof *pt + strlen(s) - 1 );
- pt->namelen = strlen(s);
- memcpy(pt->name, s, pt->namelen );
- m_free(s);
- }
- else { /* no filename */
- pt = m_alloc( sizeof *pt - 1 );
- pt->namelen = 0;
- }
+ if (!opt.no_literal)
+ /* setup the inner packet */
+ if( filename || opt.set_filename ) {
+ char *s = make_basename( opt.set_filename ? opt.set_filename : filename );
+ pt = m_alloc( sizeof *pt + strlen(s) - 1 );
+ pt->namelen = strlen(s);
+ memcpy(pt->name, s, pt->namelen );
+ m_free(s);
+ }
+ else { /* no filename */
+ pt = m_alloc( sizeof *pt - 1 );
+ pt->namelen = 0;
+ }
+
if( filename && !opt.textmode ) {
if( !(filesize = iobuf_get_filelength(inp)) )
log_info(_("%s: WARNING: empty file\n"), filename );
}
else
- filesize = 0; /* stdin */
- pt->timestamp = make_timestamp();
- pt->mode = opt.textmode ? 't' : 'b';
- pt->len = filesize;
- pt->new_ctb = !pt->len && !opt.rfc1991;
- pt->buf = inp;
- pkt.pkttype = PKT_PLAINTEXT;
- pkt.pkt.plaintext = pt;
- cfx.datalen = filesize && !do_compress? calc_packet_length( &pkt ) : 0;
+ filesize = opt.set_filesize ? opt.set_filesize : 0; /* stdin */
+
+ if (!opt.no_literal) {
+ pt->timestamp = make_timestamp();
+ pt->mode = opt.textmode ? 't' : 'b';
+ pt->len = filesize;
+ pt->new_ctb = !pt->len && !opt.rfc1991;
+ pt->buf = inp;
+ pkt.pkttype = PKT_PLAINTEXT;
+ pkt.pkt.plaintext = pt;
+ cfx.datalen = filesize && !do_compress? calc_packet_length( &pkt ) : 0;
+ }
+ else
+ cfx.datalen = filesize && !do_compress ? filesize : 0;
/* register the cipher filter */
iobuf_push_filter( out, cipher_filter, &cfx );
+
/* register the compress filter */
if( do_compress ) {
int compr_algo = select_algo_from_prefs( pk_list, PREFTYPE_COMPR );
@@ -312,8 +348,22 @@ encode_crypt( const char *filename, STRLIST remusr )
}
/* do the work */
- if( (rc = build_packet( out, &pkt )) )
- log_error("build_packet failed: %s\n", g10_errstr(rc) );
+ if (!opt.no_literal) {
+ if( (rc = build_packet( out, &pkt )) )
+ log_error("build_packet failed: %s\n", g10_errstr(rc) );
+ }
+ else {
+ /* user requested not to create a literal packet, so we copy the plain data */
+ byte copy_buffer[4096];
+ int bytes_copied;
+ while ((bytes_copied = iobuf_read(inp, copy_buffer, 4096)) != -1)
+ if (iobuf_write(out, copy_buffer, bytes_copied) == -1) {
+ rc = G10ERR_WRITE_FILE;
+ log_error("copying input to output failed: %s\n", g10_errstr(rc) );
+ break;
+ }
+ memset(copy_buffer, 0, 4096); /* burn buffer */
+ }
/* finish the stuff */
leave:
diff --git a/g10/g10.c b/g10/g10.c
index c169420b2..02d720290 100644
--- a/g10/g10.c
+++ b/g10/g10.c
@@ -175,6 +175,8 @@ enum cmd_and_opt_values { aNull = 0,
oDisableCipherAlgo,
oDisablePubkeyAlgo,
oAllowNonSelfsignedUID,
+ oNoLiteral,
+ oSetFilesize,
aTest };
@@ -334,6 +336,8 @@ static ARGPARSE_OPTS opts[] = {
{ oDisableCipherAlgo, "disable-cipher-algo", 2, "@" },
{ oDisablePubkeyAlgo, "disable-pubkey-algo", 2, "@" },
{ oAllowNonSelfsignedUID, "allow-non-selfsigned-uid", 0, "@" },
+ { oNoLiteral, "no-literal", 0, "@" },
+ { oSetFilesize, "set-filesize", 20, "@" },
{0} };
@@ -848,6 +852,12 @@ main( int argc, char **argv )
case oAllowNonSelfsignedUID:
opt.allow_non_selfsigned_uid = 1;
break;
+ case oNoLiteral:
+ opt.no_literal = 1;
+ break;
+ case oSetFilesize:
+ opt.set_filesize = pargs.r.ret_ulong;
+ break;
default : pargs.err = configfp? 1:2; break;
}
@@ -878,6 +888,17 @@ main( int argc, char **argv )
" the OpenPGP WG has not yet aggreed on MDCs\n");
opt.force_mdc = 0;
}
+ if (opt.no_literal) {
+ log_info(_("NOTE: %s is not for normal use!\n"), "--no-literal");
+ if (opt.textmode)
+ log_error(_("%s not allowed with %s!\n"),
+ "--textmode", "--no-literal" );
+ if (opt.set_filename)
+ log_error(_("%s makes no sense with %s!\n"),
+ "--set-filename", "--no-literal" );
+ }
+ if (opt.set_filesize)
+ log_info(_("NOTE: %s is not for normal use!\n"), "--set-filesize");
if( opt.batch )
tty_batchmode( 1 );
@@ -1158,7 +1179,7 @@ main( int argc, char **argv )
}
}
else
- wrong_args(_("-k[v][v][v][c] [userid] [keyring]") );
+ wrong_args(_("-k[v][v][v][c] [user-id] [keyring]") );
break;
case aKeygen: /* generate a key (interactive) */
diff --git a/g10/getkey.c b/g10/getkey.c
index a847d413f..4e325e0ac 100644
--- a/g10/getkey.c
+++ b/g10/getkey.c
@@ -1286,9 +1286,9 @@ find_by_name( KBNODE keyblock, PKT_public_key *pk, const char *name,
return kk;
}
else if( is_RSA(pk->pubkey_algo) )
- log_error("RSA key cannot be used in this version\n");
+ log_error(_("RSA key cannot be used in this version\n"));
else
- log_error("No key for userid\n");
+ log_error(_("No key for user-id\n"));
}
}
return NULL;
@@ -1325,9 +1325,9 @@ find_by_name_sk( KBNODE keyblock, PKT_secret_key *sk, const char *name,
return kk;
}
else if( is_RSA(sk->pubkey_algo) )
- log_error("RSA key cannot be used in this version\n");
+ log_error(_("RSA key cannot be used in this version\n"));
else
- log_error("No key for userid\n");
+ log_error(_("No key for user-id\n"));
}
}
return NULL;
@@ -1366,7 +1366,7 @@ find_by_keyid( KBNODE keyblock, PKT_public_key *pk, u32 *keyid, int mode )
if( kk )
cache_user_id( kk->pkt->pkt.user_id, aki );
else
- log_error("No userid for key\n");
+ log_error(_("No user-id for key\n"));
return k; /* found */
}
}
@@ -1406,7 +1406,7 @@ find_by_keyid_sk( KBNODE keyblock, PKT_secret_key *sk, u32 *keyid, int mode )
if( kk )
cache_user_id( kk->pkt->pkt.user_id, aki );
else
- log_error("No userid for key\n");
+ log_error(_("No user-id for key\n"));
return k; /* found */
}
}
diff --git a/g10/import.c b/g10/import.c
index 023ce2964..9da71fbaf 100644
--- a/g10/import.c
+++ b/g10/import.c
@@ -766,7 +766,7 @@ mark_non_selfsigned_uids_valid( KBNODE keyblock, u32 *kid )
if( node->pkt->pkttype == PKT_USER_ID && !(node->flag & 1) ) {
if( node->next && node->next->pkt->pkttype == PKT_SIGNATURE ) {
node->flag |= 1;
- log_info( _("key %08lX: accepted non self-signed userid '"),
+ log_info( _("key %08lX: accepted non self-signed user-id '"),
(ulong)kid[1]);
print_string( log_stream(), node->pkt->pkt.user_id->name,
node->pkt->pkt.user_id->len, 0 );
@@ -795,7 +795,7 @@ delete_inv_parts( const char *fname, KBNODE keyblock, u32 *keyid )
uid_seen = 1;
if( (node->flag & 2) || !(node->flag & 1) ) {
if( opt.verbose ) {
- log_info( _("key %08lX: skipped userid '"),
+ log_info( _("key %08lX: skipped user-id '"),
(ulong)keyid[1]);
print_string( stderr, node->pkt->pkt.user_id->name,
node->pkt->pkt.user_id->len, 0 );
diff --git a/g10/options.h b/g10/options.h
index 4278ff374..02613e3cc 100644
--- a/g10/options.h
+++ b/g10/options.h
@@ -81,6 +81,8 @@ struct {
const char *set_policy_url;
int use_embedded_filename;
int allow_non_selfsigned_uid;
+ int no_literal;
+ ulong set_filesize;
} opt;
diff --git a/g10/pkclist.c b/g10/pkclist.c
index 6dff74219..310874421 100644
--- a/g10/pkclist.c
+++ b/g10/pkclist.c
@@ -765,7 +765,7 @@ build_pk_list( STRLIST remusr, PK_LIST *ret_pk_list, unsigned use )
pk->pubkey_usage = use;
rc = get_pubkey_byname( NULL, pk, def_rec, NULL );
if( rc )
- log_error(_("unknown default recipient `s'\n"), def_rec );
+ log_error(_("unknown default recipient `%s'\n"), def_rec );
else if( !(rc=check_pubkey_algo2(pk->pubkey_algo, use)) ) {
PK_LIST r = m_alloc( sizeof *r );
r->pk = pk; pk = NULL;
diff --git a/g10/sign.c b/g10/sign.c
index 14c63f143..090c12b7a 100644
--- a/g10/sign.c
+++ b/g10/sign.c
@@ -385,17 +385,19 @@ sign_file( STRLIST filenames, int detached, STRLIST locusr,
}
}
else {
- if( fname || opt.set_filename ) {
- char *s = make_basename( opt.set_filename ? opt.set_filename : fname );
- pt = m_alloc( sizeof *pt + strlen(s) - 1 );
- pt->namelen = strlen(s);
- memcpy(pt->name, s, pt->namelen );
- m_free(s);
- }
- else { /* no filename */
- pt = m_alloc( sizeof *pt - 1 );
- pt->namelen = 0;
- }
+ if (!opt.no_literal)
+ if( fname || opt.set_filename ) {
+ char *s = make_basename( opt.set_filename ? opt.set_filename : fname );
+ pt = m_alloc( sizeof *pt + strlen(s) - 1 );
+ pt->namelen = strlen(s);
+ memcpy(pt->name, s, pt->namelen );
+ m_free(s);
+ }
+ else { /* no filename */
+ pt = m_alloc( sizeof *pt - 1 );
+ pt->namelen = 0;
+ }
+
if( fname ) {
if( !(filesize = iobuf_get_filelength(inp)) )
log_info(_("WARNING: `%s' is an empty file\n"), fname );
@@ -409,20 +411,38 @@ sign_file( STRLIST filenames, int detached, STRLIST locusr,
filesize = 0;
}
else
- filesize = 0; /* stdin */
- pt->timestamp = make_timestamp();
- pt->mode = opt.textmode && !outfile ? 't':'b';
- pt->len = filesize;
- pt->new_ctb = !pt->len && !opt.rfc1991;
- pt->buf = inp;
- pkt.pkttype = PKT_PLAINTEXT;
- pkt.pkt.plaintext = pt;
- /*cfx.datalen = filesize? calc_packet_length( &pkt ) : 0;*/
- if( (rc = build_packet( out, &pkt )) )
- log_error("build_packet(PLAINTEXT) failed: %s\n", g10_errstr(rc) );
- pt->buf = NULL;
+ filesize = opt.set_filesize ? opt.set_filesize : 0; /* stdin */
+
+ if (!opt.no_literal) {
+ pt->timestamp = make_timestamp();
+ pt->mode = opt.textmode && !outfile ? 't':'b';
+ pt->len = filesize;
+ pt->new_ctb = !pt->len && !opt.rfc1991;
+ pt->buf = inp;
+ pkt.pkttype = PKT_PLAINTEXT;
+ pkt.pkt.plaintext = pt;
+ /*cfx.datalen = filesize? calc_packet_length( &pkt ) : 0;*/
+ if( (rc = build_packet( out, &pkt )) )
+ log_error("build_packet(PLAINTEXT) failed: %s\n", g10_errstr(rc) );
+ pt->buf = NULL;
+ }
+ else {
+ byte copy_buffer[4096];
+ int bytes_copied;
+ while ((bytes_copied = iobuf_read(inp, copy_buffer, 4096)) != -1)
+ if (iobuf_write(out, copy_buffer, bytes_copied) == -1) {
+ rc = G10ERR_WRITE_FILE;
+ log_error("copying input to output failed: %s\n", g10_errstr(rc));
+ break;
+ }
+ memset(copy_buffer, 0, 4096); /* burn buffer */
+ }
}
+ /* catch errors from above blocks */
+ if (rc)
+ goto leave;
+
/* loop over the secret certificates */
for( sk_rover = sk_list; sk_rover; sk_rover = sk_rover->next ) {
PKT_secret_key *sk;
diff --git a/g10/trustdb.c b/g10/trustdb.c
index 7357b762a..0e60dfc25 100644
--- a/g10/trustdb.c
+++ b/g10/trustdb.c
@@ -799,7 +799,7 @@ create_shadow_dir( PKT_signature *sig )
/* first see whether we already have such a record */
rc = tdbio_search_sdir( sig->keyid, sig->pubkey_algo, &sdir );
if( rc && rc != -1 ) {
- log_error(_("tdbio_search_sdir failed: %s\n"), g10_errstr(rc));
+ log_error("tdbio_search_sdir failed: %s\n", g10_errstr(rc));
tdbio_invalid();
}
if( rc == -1 ) { /* not found: create */