1
0
mirror of git://git.gnupg.org/gnupg.git synced 2024-12-22 10:19:57 +01:00

gpg: Change armor Version header to emit only the major version.

* g10/options.h (opt): Rename field no_version to emit_version.
* g10/gpg.c (main): Init opt.emit_vesion to 1.  Change --emit-version
to bump up opt.emit_version.
* g10/armor.c (armor_filter): Implement different --emit-version
values.
--

GnuPG-bug-id: 1572
Signed-off-by: Werner Koch <wk@gnupg.org>
(cherry picked from commit e951782e937ce290be0d89d83e84b3daea997587)

Resolved conflicts:
	NEWS
	g10/armor.c
	g10/gpg.c
This commit is contained in:
Werner Koch 2013-11-27 09:20:02 +01:00
parent cad8216f9a
commit b135372176
5 changed files with 51 additions and 24 deletions

3
NEWS
View File

@ -3,6 +3,9 @@ Noteworthy changes in version 1.4.16 (unreleased)
* Do not create a trustdb file if --trust-model=always is used. * Do not create a trustdb file if --trust-model=always is used.
* Only the major version number is by default included in the armored
output.
Noteworthy changes in version 1.4.15 (2013-10-04) Noteworthy changes in version 1.4.15 (2013-10-04)
------------------------------------------------- -------------------------------------------------

View File

@ -2408,8 +2408,12 @@ protected by the signature.
@item --emit-version @item --emit-version
@itemx --no-emit-version @itemx --no-emit-version
@opindex emit-version @opindex emit-version
Force inclusion of the version string in ASCII armored output. Force inclusion of the version string in ASCII armored output. If
@option{--no-emit-version} disables this option. given once only the name of the program and the major number is
emitted (default), given twice the minor is also emitted, given triple
the micro is added, and given quad an operating system identification
is also emitted. @option{--no-emit-version} disables the version
line.
@item --sig-notation @code{name=value} @item --sig-notation @code{name=value}
@itemx --cert-notation @code{name=value} @itemx --cert-notation @code{name=value}

View File

@ -148,11 +148,11 @@ release_armor_context (armor_filter_context_t *afx)
int int
push_armor_filter (armor_filter_context_t *afx, iobuf_t iobuf) push_armor_filter (armor_filter_context_t *afx, iobuf_t iobuf)
{ {
int rc; int rc;
if (!afx->refcount) if (!afx->refcount)
return iobuf_push_filter (iobuf, armor_filter, afx); return iobuf_push_filter (iobuf, armor_filter, afx);
afx->refcount++; afx->refcount++;
rc = iobuf_push_filter (iobuf, armor_filter, afx); rc = iobuf_push_filter (iobuf, armor_filter, afx);
if (rc) if (rc)
@ -801,7 +801,7 @@ radix64_read( armor_filter_context_t *afx, IOBUF a, size_t *retn,
goto again; goto again;
} }
} }
if (!n) if (!n)
onlypad = 1; onlypad = 1;
@ -985,7 +985,7 @@ armor_filter( void *opaque, int control,
/* We need some space for the faked packet. The minmum /* We need some space for the faked packet. The minmum
* required size is the PARTIAL_CHUNK size plus a byte for the * required size is the PARTIAL_CHUNK size plus a byte for the
* length itself */ * length itself */
if( size < PARTIAL_CHUNK+1 ) if( size < PARTIAL_CHUNK+1 )
BUG(); /* supplied buffer too short */ BUG(); /* supplied buffer too short */
if( afx->faked ) if( afx->faked )
@ -1004,7 +1004,7 @@ armor_filter( void *opaque, int control,
unsigned int hashes = afx->hashes; unsigned int hashes = afx->hashes;
const byte *sesmark; const byte *sesmark;
size_t sesmarklen; size_t sesmarklen;
sesmark = get_session_marker( &sesmarklen ); sesmark = get_session_marker( &sesmarklen );
if ( sesmarklen > 20 ) if ( sesmarklen > 20 )
BUG(); BUG();
@ -1026,7 +1026,7 @@ armor_filter( void *opaque, int control,
buf[n++] = 0xff; /* new format, type 63, 1 length byte */ buf[n++] = 0xff; /* new format, type 63, 1 length byte */
n++; /* see below */ n++; /* see below */
memcpy(buf+n, sesmark, sesmarklen ); n+= sesmarklen; memcpy(buf+n, sesmark, sesmarklen ); n+= sesmarklen;
buf[n++] = CTRLPKT_CLEARSIGN_START; buf[n++] = CTRLPKT_CLEARSIGN_START;
buf[n++] = afx->not_dash_escaped? 0:1; /* sigclass */ buf[n++] = afx->not_dash_escaped? 0:1; /* sigclass */
if( hashes & 1 ) if( hashes & 1 )
buf[n++] = DIGEST_ALGO_RMD160; buf[n++] = DIGEST_ALGO_RMD160;
@ -1080,10 +1080,25 @@ armor_filter( void *opaque, int control,
iobuf_writestr(a, head_strings[afx->what] ); iobuf_writestr(a, head_strings[afx->what] );
iobuf_writestr(a, "-----" ); iobuf_writestr(a, "-----" );
iobuf_writestr(a,afx->eol); iobuf_writestr(a,afx->eol);
if( !opt.no_version ) if (opt.emit_version)
{ {
iobuf_writestr(a, "Version: GnuPG v" VERSION " (" iobuf_writestr (a, "Version: GnuPG v");
PRINTABLE_OS_NAME ")" ); for (s=VERSION; *s && *s != '.'; s++)
iobuf_writebyte (a, *s);
if (opt.emit_version > 1 && *s)
{
iobuf_writebyte (a, *s++);
for (; *s && *s != '.'; s++)
iobuf_writebyte (a, *s);
if (opt.emit_version > 2)
{
for (; *s && *s != '-' && !spacep (s); s++)
iobuf_writebyte (a, *s);
if (opt.emit_version > 3)
iobuf_writestr (a, " (" PRINTABLE_OS_NAME ")");
}
}
iobuf_writestr(a,afx->eol); iobuf_writestr(a,afx->eol);
} }
@ -1287,7 +1302,7 @@ make_radix64_string( const byte *data, size_t len )
/*********************************************** /***********************************************
* For the pipemode command we can't use the armor filter for various * For the pipemode command we can't use the armor filter for various
* reasons, so we use this new unarmor_pump stuff to remove the armor * reasons, so we use this new unarmor_pump stuff to remove the armor
*/ */
enum unarmor_state_e { enum unarmor_state_e {
@ -1295,7 +1310,7 @@ enum unarmor_state_e {
STA_bypass, STA_bypass,
STA_wait_newline, STA_wait_newline,
STA_wait_dash, STA_wait_dash,
STA_first_dash, STA_first_dash,
STA_compare_header, STA_compare_header,
STA_found_header_wait_newline, STA_found_header_wait_newline,
STA_skip_header_lines, STA_skip_header_lines,
@ -1334,12 +1349,12 @@ unarmor_pump_release (UnarmorPump x)
xfree (x); xfree (x);
} }
/* /*
* Get the next character from the ascii armor taken from the IOBUF * Get the next character from the ascii armor taken from the IOBUF
* created earlier by unarmor_pump_new(). * created earlier by unarmor_pump_new().
* Return: c = Character * Return: c = Character
* 256 = ignore this value * 256 = ignore this value
* -1 = End of current armor * -1 = End of current armor
* -2 = Premature EOF (not used) * -2 = Premature EOF (not used)
* -3 = Invalid armor * -3 = Invalid armor
*/ */
@ -1350,9 +1365,9 @@ unarmor_pump (UnarmorPump x, int c)
switch (x->state) { switch (x->state) {
case STA_init: case STA_init:
{ {
byte tmp[1]; byte tmp[1];
tmp[0] = c; tmp[0] = c;
if ( is_armored (tmp) ) if ( is_armored (tmp) )
x->state = c == '-'? STA_first_dash : STA_wait_newline; x->state = c == '-'? STA_first_dash : STA_wait_newline;
else { else {
@ -1375,10 +1390,10 @@ unarmor_pump (UnarmorPump x, int c)
x->state = STA_compare_header; x->state = STA_compare_header;
case STA_compare_header: case STA_compare_header:
if ( "-----BEGIN PGP SIGNATURE-----"[++x->pos] == c ) { if ( "-----BEGIN PGP SIGNATURE-----"[++x->pos] == c ) {
if ( x->pos == 28 ) if ( x->pos == 28 )
x->state = STA_found_header_wait_newline; x->state = STA_found_header_wait_newline;
} }
else else
x->state = c == '\n'? STA_wait_dash : STA_wait_newline; x->state = c == '\n'? STA_wait_dash : STA_wait_newline;
break; break;
case STA_found_header_wait_newline: case STA_found_header_wait_newline:
@ -1425,7 +1440,7 @@ unarmor_pump (UnarmorPump x, int c)
break; break;
} }
} }
switch(x->pos) { switch(x->pos) {
case 0: case 0:
x->val = c << 2; x->val = c << 2;
@ -1466,7 +1481,7 @@ unarmor_pump (UnarmorPump x, int c)
x->state = STA_ready; /* not sure whether this is correct */ x->state = STA_ready; /* not sure whether this is correct */
break; break;
} }
switch(x->pos) { switch(x->pos) {
case 0: case 0:
x->val = c << 2; x->val = c << 2;

View File

@ -1908,6 +1908,7 @@ main (int argc, char **argv )
opt.def_cert_expire="0"; opt.def_cert_expire="0";
set_homedir ( default_homedir () ); set_homedir ( default_homedir () );
opt.passwd_repeat=1; opt.passwd_repeat=1;
opt.emit_version = 1; /* Limit to the major number. */
#ifdef ENABLE_CARD_SUPPORT #ifdef ENABLE_CARD_SUPPORT
#if defined(_WIN32) || defined(__CYGWIN__) #if defined(_WIN32) || defined(__CYGWIN__)
@ -2245,8 +2246,8 @@ main (int argc, char **argv )
case oNoVerbose: g10_opt_verbose = 0; case oNoVerbose: g10_opt_verbose = 0;
opt.verbose = 0; opt.list_sigs=0; break; opt.verbose = 0; opt.list_sigs=0; break;
case oQuickRandom: quick_random_gen(1); break; case oQuickRandom: quick_random_gen(1); break;
case oEmitVersion: opt.no_version=0; break; case oEmitVersion: opt.emit_version++; break;
case oNoEmitVersion: opt.no_version=1; break; case oNoEmitVersion: opt.emit_version=0; break;
case oCompletesNeeded: opt.completes_needed = pargs.r.ret_int; break; case oCompletesNeeded: opt.completes_needed = pargs.r.ret_int; break;
case oMarginalsNeeded: opt.marginals_needed = pargs.r.ret_int; break; case oMarginalsNeeded: opt.marginals_needed = pargs.r.ret_int; break;
case oMaxCertDepth: opt.max_cert_depth = pargs.r.ret_int; break; case oMaxCertDepth: opt.max_cert_depth = pargs.r.ret_int; break;

View File

@ -79,7 +79,11 @@ struct
int def_cert_level; int def_cert_level;
int min_cert_level; int min_cert_level;
int ask_cert_level; int ask_cert_level;
int no_version; int emit_version; /* 0 = none,
1 = major only,
2 = major and minor,
3 = full version,
4 = full version plus OS string. */
int marginals_needed; int marginals_needed;
int completes_needed; int completes_needed;
int max_cert_depth; int max_cert_depth;