[svn] GnuPG - r4839 - in trunk: . agent g10 jnlib scd sm
svn author wk
cvs at cvs.gnupg.org
Mon Sep 29 17:02:56 CEST 2008
Author: wk
Date: 2008-09-29 17:02:55 +0200 (Mon, 29 Sep 2008)
New Revision: 4839
Modified:
trunk/ChangeLog
trunk/NEWS
trunk/TODO
trunk/agent/ChangeLog
trunk/agent/agent.h
trunk/agent/command.c
trunk/agent/divert-scd.c
trunk/agent/pksign.c
trunk/configure.ac
trunk/g10/ChangeLog
trunk/g10/gpg.c
trunk/g10/options.skel
trunk/g10/seskey.c
trunk/g10/sign.c
trunk/g10/skclist.c
trunk/jnlib/ChangeLog
trunk/jnlib/argparse.c
trunk/jnlib/argparse.h
trunk/jnlib/libjnlib-config.h
trunk/scd/ChangeLog
trunk/scd/app-p15.c
trunk/scd/scdaemon.h
trunk/sm/ChangeLog
trunk/sm/certcheck.c
trunk/sm/certreqgen-ui.c
trunk/sm/gpgsm.c
trunk/sm/sign.c
Log:
Remove hacks which are not anymore needed since we now require Libgcrypt 1.4
Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog 2008-09-28 12:48:41 UTC (rev 4838)
+++ trunk/ChangeLog 2008-09-29 15:02:55 UTC (rev 4839)
@@ -1,3 +1,7 @@
+2008-09-29 Werner Koch <wk at g10code.com>
+
+ * configure.ac: Require libgcrypt 1.4.
+
2008-08-27 David Shaw <dshaw at jabberwocky.com>
* configure.ac: Use printf for the most portable SVN version
Modified: trunk/agent/ChangeLog
===================================================================
--- trunk/agent/ChangeLog 2008-09-28 12:48:41 UTC (rev 4838)
+++ trunk/agent/ChangeLog 2008-09-29 15:02:55 UTC (rev 4839)
@@ -1,3 +1,9 @@
+2008-09-29 Werner Koch <wk at g10code.com>
+
+ * agent.h (GCRY_MD_USER): Rename to GCRY_MODULE_ID_USER.
+ (GCRY_MD_USER_TLS_MD5SHA1): Rename to MD_USER_TLS_MD5SHA1 and
+ change all users.
+
2008-09-25 Werner Koch <wk at g10code.com>
* divert-scd.c (getpin_cb): Support a Reset Code style PINs..
Modified: trunk/g10/ChangeLog
===================================================================
--- trunk/g10/ChangeLog 2008-09-28 12:48:41 UTC (rev 4838)
+++ trunk/g10/ChangeLog 2008-09-29 15:02:55 UTC (rev 4839)
@@ -1,3 +1,14 @@
+2008-09-29 Werner Koch <wk at g10code.com>
+
+ * gpg.c (main): Remove -sat kludge. Note that we printed a
+ warning for two years.
+
+ * seskey.c (encode_md_value): Remove extra gcry_md_test_algo since
+ it is not needed with Libgcrypt 1.4.
+ * skclist.c (random_is_faked): Simplify.
+ * sign.c (match_dsa_hash): Remove runtime check for SHA224.
+ * gpg.c (print_mds): Use GCRY_MD_SHA224 constant.
+
2008-09-25 David Shaw <dshaw at jabberwocky.com>
* keyedit.c (keyedit_menu): Fix bug where a modified keyring loses
Modified: trunk/jnlib/ChangeLog
===================================================================
--- trunk/jnlib/ChangeLog 2008-09-28 12:48:41 UTC (rev 4838)
+++ trunk/jnlib/ChangeLog 2008-09-29 15:02:55 UTC (rev 4839)
@@ -1,3 +1,10 @@
+2008-09-29 Werner Koch <wk at g10code.com>
+
+ * argparse.c (ARGERR_): Use constants for error values.
+ (optfile_parse): Prettify. Replace xmalloc and xrealloc by malloc
+ and realloc.
+ * libjnlib-config.h (jnlib_strdup, jnlib_realloc): New.
+
2008-06-26 Werner Koch <wk at g10code.com>
* stringhelp.c (print_sanitized_buffer2): Loose check for control
Modified: trunk/scd/ChangeLog
===================================================================
--- trunk/scd/ChangeLog 2008-09-28 12:48:41 UTC (rev 4838)
+++ trunk/scd/ChangeLog 2008-09-29 15:02:55 UTC (rev 4839)
@@ -1,3 +1,9 @@
+2008-09-29 Werner Koch <wk at g10code.com>
+
+ * scdaemon.h (GCRY_MD_USER): Rename to GCRY_MODULE_ID_USER.
+ (GCRY_MD_USER_TLS_MD5SHA1): Rename to MD_USER_TLS_MD5SHA1 and
+ change all users.
+
2008-09-28 Marcus Brinkmann <marcus at g10code.com>
* apdu.c (pcsc_get_status): Fix last change.
Modified: trunk/sm/ChangeLog
===================================================================
--- trunk/sm/ChangeLog 2008-09-28 12:48:41 UTC (rev 4838)
+++ trunk/sm/ChangeLog 2008-09-29 15:02:55 UTC (rev 4839)
@@ -1,3 +1,10 @@
+2008-09-29 Werner Koch <wk at g10code.com>
+
+ * certcheck.c (MY_GCRY_PK_ECDSA): Remove. Change users to
+ GCRY_PK_ECDSA.
+ * gpgsm.c (MY_GCRY_PK_ECDSA): Ditto.
+ * sign.c (MY_GCRY_MD_SHA224): Remove change users to GCRY_MD_SHA224.
+
2008-09-04 Werner Koch <wk at g10code.com>
* certdump.c (gpgsm_format_keydesc): Work around a mingw32 bug.
Modified: trunk/NEWS
===================================================================
--- trunk/NEWS 2008-09-28 12:48:41 UTC (rev 4838)
+++ trunk/NEWS 2008-09-29 15:02:55 UTC (rev 4839)
@@ -16,6 +16,8 @@
* [gpg] New options --with-sig-list and --with-sig-check.
+ * [gpg] The option "-sat" is no longer an alias for --clearsign.
+
* [gpgsm] Made --output option work with --export-secret-key-p12.
* gpg-connect-agent accepts commands given as command line arguments.
@@ -33,7 +35,9 @@
* Support for version 2 OpenPGP cards.
+ * Libgcrypt 1.4 is now required.
+
Noteworthy changes in version 2.0.9 (2008-03-26)
------------------------------------------------
Modified: trunk/TODO
===================================================================
--- trunk/TODO 2008-09-28 12:48:41 UTC (rev 4838)
+++ trunk/TODO 2008-09-29 15:02:55 UTC (rev 4839)
@@ -51,7 +51,7 @@
* sm/export.c
** Return an error code or a status info per user ID.
-* scd/tlv.c
+* common/tlv.c
The parse_sexp function should not go into this file. Check whether
we can change all S-expression handling code to make use of this
function.
@@ -85,33 +85,13 @@
Replace by an estream based implementation.
* jnlib/
-** provide jnlib_malloc and try to remove all jnlib_xmalloc.
+** Try to remove all jnlib_xmalloc.
* g10/
** issue a NO_SECKEY xxxx if a -u key was not found.
-
-* When switching to libgcrypt 1.4
-** scd#encode_md_for_card, g10#encode_md_value, sm at do_encode_md
- Remove the extra test for a valid algorithm as libgcrypt will do it
- then in gcry_md_algo_info.
-** skclist.c
- Remove the hard coded constant in random_is_faked.
-** g10/ Replace DIGEST_ALGO_SHA224
- We can't do that right now because it is only defined by newer
- versions of libgcrypt.
-** GCRY_MD_USER
- Remove these definitions.
-** MY_GCRY_PK_ECDSA
- Remove this.
-** MY_GCRY_MD_SHA224
- Remove this.
-
-
* Extend selinux support to other modules
-* Remove -sat PGP2 compatibility hack
-
* UTF-8 specific TODOs
None.
Modified: trunk/agent/agent.h
===================================================================
--- trunk/agent/agent.h 2008-09-28 12:48:41 UTC (rev 4838)
+++ trunk/agent/agent.h 2008-09-29 15:02:55 UTC (rev 4839)
@@ -36,10 +36,10 @@
/* To convey some special hash algorithms we use algorithm numbers
reserved for application use. */
-#ifndef GCRY_MD_USER
-#define GCRY_MD_USER 1024
+#ifndef GCRY_MODULE_ID_USER
+#define GCRY_MODULE_ID_USER 1024
#endif
-#define GCRY_MD_USER_TLS_MD5SHA1 (GCRY_MD_USER+1)
+#define MD_USER_TLS_MD5SHA1 (GCRY_MODULE_ID_USER+1)
/* Maximum length of a digest. */
#define MAX_DIGEST_LEN 36
Modified: trunk/agent/command.c
===================================================================
--- trunk/agent/command.c 2008-09-28 12:48:41 UTC (rev 4838)
+++ trunk/agent/command.c 2008-09-29 15:02:55 UTC (rev 4839)
@@ -597,7 +597,7 @@
else if (has_option (line, "--hash=md5"))
algo = GCRY_MD_MD5;
else if (has_option (line, "--hash=tls-md5sha1"))
- algo = GCRY_MD_USER_TLS_MD5SHA1;
+ algo = MD_USER_TLS_MD5SHA1;
else
return set_error (GPG_ERR_ASS_PARAMETER, "invalid hash algorithm");
}
@@ -622,7 +622,7 @@
if (rc)
return rc;
n /= 2;
- if (algo == GCRY_MD_USER_TLS_MD5SHA1 && n == 36)
+ if (algo == MD_USER_TLS_MD5SHA1 && n == 36)
;
else if (n != 16 && n != 20 && n != 24 && n != 32)
return set_error (GPG_ERR_ASS_PARAMETER, "unsupported length of hash");
Modified: trunk/agent/divert-scd.c
===================================================================
--- trunk/agent/divert-scd.c 2008-09-28 12:48:41 UTC (rev 4838)
+++ trunk/agent/divert-scd.c 2008-09-29 15:02:55 UTC (rev 4839)
@@ -335,7 +335,7 @@
if (rc)
return rc;
- if (algo == GCRY_MD_USER_TLS_MD5SHA1)
+ if (algo == MD_USER_TLS_MD5SHA1)
{
int save = ctrl->use_auth_call;
ctrl->use_auth_call = 1;
Modified: trunk/agent/pksign.c
===================================================================
--- trunk/agent/pksign.c 2008-09-28 12:48:41 UTC (rev 4838)
+++ trunk/agent/pksign.c 2008-09-29 15:02:55 UTC (rev 4839)
@@ -181,7 +181,7 @@
gcry_sexp_t s_hash = NULL;
/* Put the hash into a sexp */
- if (ctrl->digest.algo == GCRY_MD_USER_TLS_MD5SHA1)
+ if (ctrl->digest.algo == MD_USER_TLS_MD5SHA1)
rc = do_encode_raw_pkcs1 (ctrl->digest.value,
ctrl->digest.valuelen,
gcry_pk_get_nbits (s_skey),
Modified: trunk/configure.ac
===================================================================
--- trunk/configure.ac 2008-09-28 12:48:41 UTC (rev 4838)
+++ trunk/configure.ac 2008-09-29 15:02:55 UTC (rev 4839)
@@ -39,7 +39,7 @@
NEED_GPG_ERROR_VERSION=1.4
NEED_LIBGCRYPT_API=1
-NEED_LIBGCRYPT_VERSION=1.2.2
+NEED_LIBGCRYPT_VERSION=1.4.0
NEED_LIBASSUAN_API=1
NEED_LIBASSUAN_VERSION=1.0.4
Modified: trunk/g10/gpg.c
===================================================================
--- trunk/g10/gpg.c 2008-09-28 12:48:41 UTC (rev 4838)
+++ trunk/g10/gpg.c 2008-09-29 15:02:55 UTC (rev 4839)
@@ -1,6 +1,6 @@
/* gpg.c - The GnuPG utility (main for gpg)
* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
- * 2006, 2007 Free Software Foundation, Inc.
+ * 2006, 2007, 2008 Free Software Foundation, Inc.
*
* This file is part of GnuPG.
*
@@ -3285,15 +3285,6 @@
set_cmd( &cmd, aListKeys);
}
- /* kludge to let -sat generate a clear text signature */
- if( opt.textmode == 2 && !detached_sig && opt.armor && cmd == aSign )
- {
- log_info ("compatibility note:\n");
- log_info ("\"-sat\" won't generate clear signed messages in "
- "future versions\n");
- log_info ("Use \"--clearsign\" instead of \"-sat\"\n");
- cmd = aClearsign;
- }
if( opt.verbose > 1 )
set_packet_list_mode(1);
@@ -4155,8 +4146,8 @@
gcry_md_enable (md, GCRY_MD_MD5);
gcry_md_enable (md, GCRY_MD_SHA1);
gcry_md_enable (md, GCRY_MD_RMD160);
- if (!openpgp_md_test_algo (DIGEST_ALGO_SHA224))
- gcry_md_enable (md, DIGEST_ALGO_SHA224);
+ if (!openpgp_md_test_algo (GCRY_MD_SHA224))
+ gcry_md_enable (md, GCRY_MD_SHA224);
if (!openpgp_md_test_algo (GCRY_MD_SHA256))
gcry_md_enable (md, GCRY_MD_SHA256);
if (!openpgp_md_test_algo (GCRY_MD_SHA384))
@@ -4178,8 +4169,8 @@
print_hashline( md, GCRY_MD_MD5, fname );
print_hashline( md, GCRY_MD_SHA1, fname );
print_hashline( md, GCRY_MD_RMD160, fname );
- if (!gcry_md_test_algo (DIGEST_ALGO_SHA224))
- print_hashline (md, DIGEST_ALGO_SHA224, fname);
+ if (!gcry_md_test_algo (GCRY_MD_SHA224))
+ print_hashline (md, GCRY_MD_SHA224, fname);
if (!gcry_md_test_algo (GCRY_MD_SHA256))
print_hashline( md, GCRY_MD_SHA256, fname );
if (!gcry_md_test_algo (GCRY_MD_SHA384))
@@ -4195,8 +4186,8 @@
print_hex( md, GCRY_MD_MD5, fname );
print_hex( md, GCRY_MD_SHA1, fname );
print_hex( md, GCRY_MD_RMD160, fname );
- if (!gcry_md_test_algo (DIGEST_ALGO_SHA224))
- print_hex (md, DIGEST_ALGO_SHA224, fname);
+ if (!gcry_md_test_algo (GCRY_MD_SHA224))
+ print_hex (md, GCRY_MD_SHA224, fname);
if (!gcry_md_test_algo (GCRY_MD_SHA256))
print_hex( md, GCRY_MD_SHA256, fname );
if (!gcry_md_test_algo (GCRY_MD_SHA384))
Modified: trunk/g10/options.skel
===================================================================
--- trunk/g10/options.skel 2008-09-28 12:48:41 UTC (rev 4838)
+++ trunk/g10/options.skel 2008-09-29 15:02:55 UTC (rev 4839)
@@ -128,6 +128,7 @@
# the "--keyserver-options debug".
keyserver hkp://keys.gnupg.net
+#keyserver http://http-keys.gnupg.net
#keyserver mailto:pgp-public-keys at keys.nl.pgp.net
#keyserver ldap://pgp.surfnet.nl:11370
#keyserver ldap://keyserver.pgp.com
Modified: trunk/g10/seskey.c
===================================================================
--- trunk/g10/seskey.c 2008-09-28 12:48:41 UTC (rev 4838)
+++ trunk/g10/seskey.c 2008-09-29 15:02:55 UTC (rev 4839)
@@ -265,11 +265,9 @@
byte *asn;
size_t asnlen;
- rc = gcry_md_test_algo (hash_algo);
- if (!rc)
- rc = gcry_md_algo_info (hash_algo, GCRYCTL_GET_ASNOID, NULL, &asnlen);
+ rc = gcry_md_algo_info (hash_algo, GCRYCTL_GET_ASNOID, NULL, &asnlen);
if (rc)
- log_fatal ("can't get OID of algo %d: %s\n",
+ log_fatal ("can't get OID of digest algorithm %d: %s\n",
hash_algo, gpg_strerror (rc));
asn = xmalloc (asnlen);
if ( gcry_md_algo_info (hash_algo, GCRYCTL_GET_ASNOID, asn, &asnlen) )
Modified: trunk/g10/sign.c
===================================================================
--- trunk/g10/sign.c 2008-09-28 12:48:41 UTC (rev 4838)
+++ trunk/g10/sign.c 2008-09-29 15:02:55 UTC (rev 4839)
@@ -346,9 +346,7 @@
if (qbytes <= 20)
return DIGEST_ALGO_SHA1;
- /* SHA244 is only available with libgcrypt 1.4 - thus do a runtime
- test. */
- if (qbytes <= 28 && !gcry_md_test_algo (DIGEST_ALGO_SHA224))
+ if (qbytes <= 28)
return DIGEST_ALGO_SHA224;
if (qbytes <= 32)
Modified: trunk/g10/skclist.c
===================================================================
--- trunk/g10/skclist.c 2008-09-28 12:48:41 UTC (rev 4838)
+++ trunk/g10/skclist.c 2008-09-29 15:02:55 UTC (rev 4839)
@@ -41,18 +41,7 @@
int
random_is_faked (void)
{
- /* We use a runtime check to allow for slow migrattion of libgcrypt.
- We can't use the constant becuase that one is actually an enum
- value. */
- gpg_error_t err = gcry_control ( 51 /*GCRYCTL_FAKED_RANDOM_P*/, 0);
-
- if (!err)
- return 0;
- if (gpg_err_code (err) != GPG_ERR_INV_OP)
- return 1;
- log_info ("WARNING: libgcrypt too old.\n");
- log_info (" can't check whether we are in faked RNG mode\n");
- return 0; /* Need to return false. */
+ return !!gcry_control ( GCRYCTL_FAKED_RANDOM_P, 0);
}
Modified: trunk/jnlib/argparse.c
===================================================================
--- trunk/jnlib/argparse.c 2008-09-28 12:48:41 UTC (rev 4838)
+++ trunk/jnlib/argparse.c 2008-09-29 15:02:55 UTC (rev 4839)
@@ -34,6 +34,7 @@
#include "argparse.h"
+
/*********************************
* @Summary arg_parse
* #include <wk/lib.h>
@@ -172,18 +173,20 @@
if (filename)
{
- if ( arg->r_opt == -6 )
+ if ( arg->r_opt == ARGPARSE_UNEXPECTED_ARG )
s = _("argument not expected");
- else if ( arg->r_opt == -5 )
+ else if ( arg->r_opt == ARGPARSE_READ_ERROR )
s = _("read error");
- else if ( arg->r_opt == -4 )
+ else if ( arg->r_opt == ARGPARSE_KEYWORD_TOO_LONG )
s = _("keyword too long");
- else if ( arg->r_opt == -3 )
+ else if ( arg->r_opt == ARGPARSE_MISSING_ARG )
s = _("missing argument");
- else if ( arg->r_opt == -7 )
+ else if ( arg->r_opt == ARGPARSE_INVALID_COMMAND )
s = _("invalid command");
- else if ( arg->r_opt == -10 )
+ else if ( arg->r_opt == ARGPARSE_INVALID_ALIAS )
s = _("invalid alias definition");
+ else if ( arg->r_opt == ARGPARSE_OUT_OF_CORE )
+ s = _("out of core");
else
s = _("invalid option");
jnlib_log_error ("%s:%u: %s\n", filename, *lineno, s);
@@ -192,17 +195,19 @@
{
s = arg->internal.last? arg->internal.last:"[??]";
- if ( arg->r_opt == -3 )
+ if ( arg->r_opt == ARGPARSE_MISSING_ARG )
jnlib_log_error (_("missing argument for option \"%.50s\"\n"), s);
- else if ( arg->r_opt == -6 )
+ else if ( arg->r_opt == ARGPARSE_UNEXPECTED_ARG )
jnlib_log_error (_("option \"%.50s\" does not expect an "
"argument\n"), s );
- else if ( arg->r_opt == -7 )
+ else if ( arg->r_opt == ARGPARSE_INVALID_COMMAND )
jnlib_log_error (_("invalid command \"%.50s\"\n"), s);
- else if ( arg->r_opt == -8 )
+ else if ( arg->r_opt == ARGPARSE_AMBIGUOUS_OPTION )
jnlib_log_error (_("option \"%.50s\" is ambiguous\n"), s);
- else if ( arg->r_opt == -9 )
+ else if ( arg->r_opt == ARGPARSE_AMBIGUOUS_OPTION )
jnlib_log_error (_("command \"%.50s\" is ambiguous\n"),s );
+ else if ( arg->r_opt == ARGPARSE_OUT_OF_CORE )
+ jnlib_log_error ("%s\n", _("out of core\n"));
else
jnlib_log_error (_("invalid option \"%.50s\"\n"), s);
}
@@ -251,181 +256,246 @@
* Note: Abbreviation of options is here not allowed.
*/
int
-optfile_parse( FILE *fp, const char *filename, unsigned *lineno,
+optfile_parse (FILE *fp, const char *filename, unsigned *lineno,
ARGPARSE_ARGS *arg, ARGPARSE_OPTS *opts)
{
- int state, i, c;
- int idx=0;
- char keyword[100];
- char *buffer = NULL;
- size_t buflen = 0;
- int inverse=0;
- int in_alias=0;
+ int state, i, c;
+ int idx=0;
+ char keyword[100];
+ char *buffer = NULL;
+ size_t buflen = 0;
+ int in_alias=0;
+
+ if (!fp) /* Divert to to arg_parse() in this case. */
+ return arg_parse (arg, opts);
+
+ initialize (arg, filename, lineno);
- if( !fp ) /* same as arg_parse() in this case */
- return arg_parse( arg, opts );
+ /* Find the next keyword. */
+ state = i = 0;
+ for (;;)
+ {
+ c = getc (fp);
+ if (c == '\n' || c== EOF )
+ {
+ if ( c != EOF )
+ ++*lineno;
+ if (state == -1)
+ break;
+ else if (state == 2)
+ {
+ keyword[i] = 0;
+ for (i=0; opts[i].short_opt; i++ )
+ {
+ if (opts[i].long_opt && !strcmp (opts[i].long_opt, keyword))
+ break;
+ }
+ idx = i;
+ arg->r_opt = opts[idx].short_opt;
+ if (!opts[idx].short_opt )
+ arg->r_opt = ((opts[idx].flags & 256)
+ ? ARGPARSE_INVALID_COMMAND
+ : ARGPARSE_INVALID_OPTION);
+ else if (!(opts[idx].flags & 7))
+ arg->r_type = 0; /* Does not take an arg. */
+ else if ((opts[idx].flags & 8) )
+ arg->r_type = 0; /* Arg is optional. */
+ else
+ arg->r_opt = ARGPARSE_MISSING_ARG;
- initialize( arg, filename, lineno );
+ break;
+ }
+ else if (state == 3)
+ {
+ /* No argument found. */
+ if (in_alias)
+ arg->r_opt = ARGPARSE_MISSING_ARG;
+ else if (!(opts[idx].flags & 7))
+ arg->r_type = 0; /* Does not take an arg. */
+ else if ((opts[idx].flags & 8))
+ arg->r_type = 0; /* No optional argument. */
+ else
+ arg->r_opt = ARGPARSE_MISSING_ARG;
- /* find the next keyword */
- state = i = 0;
- for(;;) {
- c=getc(fp);
- if( c == '\n' || c== EOF ) {
- if( c != EOF )
- ++*lineno;
- if( state == -1 )
- break;
- else if( state == 2 ) {
- keyword[i] = 0;
- for(i=0; opts[i].short_opt; i++ )
- if( opts[i].long_opt && !strcmp( opts[i].long_opt, keyword) )
- break;
- idx = i;
- arg->r_opt = opts[idx].short_opt;
- if( inverse ) /* this does not have an effect, hmmm */
- arg->r_opt = -arg->r_opt;
- if( !opts[idx].short_opt ) /* unknown command/option */
- arg->r_opt = (opts[idx].flags & 256)? -7:-2;
- else if( !(opts[idx].flags & 7) ) /* does not take an arg */
- arg->r_type = 0; /* okay */
- else if( (opts[idx].flags & 8) ) /* argument is optional */
- arg->r_type = 0; /* okay */
- else /* required argument */
- arg->r_opt = -3; /* error */
- break;
+ break;
}
- else if( state == 3 ) { /* no argument found */
- if( in_alias )
- arg->r_opt = -3; /* error */
- else if( !(opts[idx].flags & 7) ) /* does not take an arg */
- arg->r_type = 0; /* okay */
- else if( (opts[idx].flags & 8) ) /* no optional argument */
- arg->r_type = 0; /* okay */
- else /* no required argument */
- arg->r_opt = -3; /* error */
- break;
- }
- else if( state == 4 ) { /* have an argument */
- if( in_alias ) {
- if( !buffer )
- arg->r_opt = -6;
- else {
- char *p;
-
- buffer[i] = 0;
- p = strpbrk( buffer, " \t" );
- if( p ) {
- *p++ = 0;
- trim_spaces( p );
+ else if (state == 4)
+ {
+ /* Has an argument. */
+ if (in_alias)
+ {
+ if (!buffer)
+ arg->r_opt = ARGPARSE_UNEXPECTED_ARG;
+ else
+ {
+ char *p;
+
+ buffer[i] = 0;
+ p = strpbrk (buffer, " \t");
+ if (p)
+ {
+ *p++ = 0;
+ trim_spaces (p);
}
- if( !p || !*p ) {
- jnlib_free( buffer );
- arg->r_opt = -10;
- }
- else {
- store_alias( arg, buffer, p );
- }
+ if (!p || !*p)
+ {
+ jnlib_free (buffer);
+ arg->r_opt = ARGPARSE_INVALID_ALIAS;
+ }
+ else
+ {
+ store_alias (arg, buffer, p);
+ }
}
}
- else if( !(opts[idx].flags & 7) ) /* does not take an arg */
- arg->r_opt = -6; /* error */
- else {
- char *p;
- if( !buffer ) {
- keyword[i] = 0;
- buffer = jnlib_xstrdup(keyword);
- }
- else
- buffer[i] = 0;
+ else if (!(opts[idx].flags & 7))
+ arg->r_opt = ARGPARSE_UNEXPECTED_ARG;
+ else
+ {
+ char *p;
- trim_spaces( buffer );
- p = buffer;
- if( *p == '"' ) { /* remove quotes */
- p++;
- if( *p && p[strlen(p)-1] == '"' )
- p[strlen(p)-1] = 0;
+ if (!buffer)
+ {
+ keyword[i] = 0;
+ buffer = jnlib_strdup (keyword);
+ if (!buffer)
+ arg->r_opt = ARGPARSE_OUT_OF_CORE;
}
- if( !set_opt_arg(arg, opts[idx].flags, p) )
+ else
+ buffer[i] = 0;
+
+ if (buffer)
+ {
+ trim_spaces (buffer);
+ p = buffer;
+ if (*p == '"')
+ {
+ /* Remove quotes. */
+ p++;
+ if (*p && p[strlen(p)-1] == '\"' )
+ p[strlen(p)-1] = 0;
+ }
+ if (!set_opt_arg (arg, opts[idx].flags, p))
jnlib_free(buffer);
- }
- break;
- }
- else if( c == EOF ) {
- if( ferror(fp) )
- arg->r_opt = -5; /* read error */
- else
- arg->r_opt = 0; /* eof */
- break;
- }
- state = 0;
- i = 0;
- }
- else if( state == -1 )
- ; /* skip */
- else if( !state && isspace(c) )
- ; /* skip leading white space */
- else if( !state && c == '#' )
- state = 1; /* start of a comment */
- else if( state == 1 )
- ; /* skip comments */
- else if( state == 2 && isspace(c) ) {
- keyword[i] = 0;
- for(i=0; opts[i].short_opt; i++ )
- if( opts[i].long_opt && !strcmp( opts[i].long_opt, keyword) )
- break;
- idx = i;
- arg->r_opt = opts[idx].short_opt;
- if( !opts[idx].short_opt ) {
- if( !strcmp( keyword, "alias" ) ) {
- in_alias = 1;
- state = 3;
- }
- else {
- arg->r_opt = (opts[idx].flags & 256)? -7:-2;
- state = -1; /* skip rest of line and leave */
- }
- }
- else
- state = 3;
- }
- else if( state == 3 ) { /* skip leading spaces of the argument */
- if( !isspace(c) ) {
- i = 0;
- keyword[i++] = c;
- state = 4;
- }
- }
- else if( state == 4 ) { /* collect the argument */
- if( buffer ) {
- if( i < buflen-1 )
- buffer[i++] = c;
- else {
- buflen += 50;
- buffer = jnlib_xrealloc(buffer, buflen);
- buffer[i++] = c;
- }
- }
- else if( i < DIM(keyword)-1 )
- keyword[i++] = c;
- else {
- buflen = DIM(keyword)+50;
- buffer = jnlib_xmalloc(buflen);
- memcpy(buffer, keyword, i);
- buffer[i++] = c;
- }
- }
- else if( i >= DIM(keyword)-1 ) {
- arg->r_opt = -4; /* keyword to long */
- state = -1; /* skip rest of line and leave */
- }
- else {
- keyword[i++] = c;
- state = 2;
- }
+ }
+ }
+ break;
+ }
+ else if (c == EOF)
+ {
+ if (ferror (fp))
+ arg->r_opt = ARGPARSE_READ_ERROR;
+ else
+ arg->r_opt = 0; /* EOF. */
+ break;
+ }
+ state = 0;
+ i = 0;
+ }
+ else if (state == -1)
+ ; /* Skip. */
+ else if (state == 0 && isascii (c) && isspace(c))
+ ; /* Skip leading white space. */
+ else if (state == 0 && c == '#' )
+ state = 1; /* Start of a comment. */
+ else if (state == 1)
+ ; /* Skip comments. */
+ else if (state == 2 && isascii (c) && isspace(c))
+ {
+ /* Check keyword. */
+ keyword[i] = 0;
+ for (i=0; opts[i].short_opt; i++ )
+ if (opts[i].long_opt && !strcmp (opts[i].long_opt, keyword))
+ break;
+ idx = i;
+ arg->r_opt = opts[idx].short_opt;
+ if (!opts[idx].short_opt)
+ {
+ if (!strcmp (keyword, "alias"))
+ {
+ in_alias = 1;
+ state = 3;
+ }
+ else
+ {
+ arg->r_opt = ((opts[idx].flags & 256)
+ ? ARGPARSE_INVALID_COMMAND
+ : ARGPARSE_INVALID_OPTION);
+ state = -1; /* Skip rest of line and leave. */
+ }
+ }
+ else
+ state = 3;
+ }
+ else if (state == 3)
+ {
+ /* Skip leading spaces of the argument. */
+ if (!isascii (c) || !isspace(c))
+ {
+ i = 0;
+ keyword[i++] = c;
+ state = 4;
+ }
+ }
+ else if (state == 4)
+ {
+ /* Collect the argument. */
+ if (buffer)
+ {
+ if (i < buflen-1)
+ buffer[i++] = c;
+ else
+ {
+ char *tmp;
+ size_t tmplen = buflen + 50;
+
+ tmp = jnlib_realloc (buffer, tmplen);
+ if (tmp)
+ {
+ buflen = tmplen;
+ buffer = tmp;
+ buffer[i++] = c;
+ }
+ else
+ {
+ jnlib_free (buffer);
+ arg->r_opt = ARGPARSE_OUT_OF_CORE;
+ break;
+ }
+ }
+ }
+ else if (i < DIM(keyword)-1)
+ keyword[i++] = c;
+ else
+ {
+ size_t tmplen = DIM(keyword) + 50;
+ buffer = jnlib_malloc (tmplen);
+ if (buffer)
+ {
+ buflen = tmplen;
+ memcpy(buffer, keyword, i);
+ buffer[i++] = c;
+ }
+ else
+ {
+ arg->r_opt = ARGPARSE_OUT_OF_CORE;
+ break;
+ }
+ }
+ }
+ else if (i >= DIM(keyword)-1)
+ {
+ arg->r_opt = ARGPARSE_KEYWORD_TOO_LONG;
+ state = -1; /* Skip rest of line and leave. */
+ }
+ else
+ {
+ keyword[i++] = c;
+ state = 2;
+ }
}
-
- return arg->r_opt;
+
+ return arg->r_opt;
}
@@ -504,7 +574,7 @@
arg->internal.last = s;
if( arg->internal.stopped && (arg->flags & (1<<1)) ) {
- arg->r_opt = -1; /* not an option but a argument */
+ arg->r_opt = ARGPARSE_IS_ARG; /* Not an option but an argument. */
arg->r_type = 2;
arg->r.ret_str = s;
argc--; argv++; idx++; /* set to next one */
@@ -551,10 +621,10 @@
exit(0);
}
- if( i == -2 ) /* ambiguous option */
- arg->r_opt = -8;
+ if( i == -2 )
+ arg->r_opt = ARGPARSE_AMBIGUOUS_OPTION;
else if( i == -1 ) {
- arg->r_opt = -2;
+ arg->r_opt = ARGPARSE_INVALID_OPTION;
arg->r.ret_str = s+2;
}
else
@@ -573,7 +643,7 @@
arg->r_type = 0; /* because it is optional */
}
else if( !s2 ) {
- arg->r_opt = -3; /* missing argument */
+ arg->r_opt = ARGPARSE_MISSING_ARG;
}
else if( !argpos && *s2 == '-' && (opts[i].flags & 8) ) {
/* the argument is optional and the next seems to be
@@ -622,7 +692,8 @@
arg->r_opt = opts[i].short_opt;
if( !opts[i].short_opt ) {
- arg->r_opt = (opts[i].flags & 256)? -7:-2;
+ arg->r_opt = (opts[i].flags & 256)?
+ ARGPARSE_INVALID_COMMAND:ARGPARSE_INVALID_OPTION;
arg->internal.inarg++; /* point to the next arg */
arg->r.ret_str = s;
}
@@ -637,7 +708,7 @@
arg->r_type = 0; /* because it is optional */
}
else if( !s2 ) {
- arg->r_opt = -3; /* missing argument */
+ arg->r_opt = ARGPARSE_MISSING_ARG;
}
else if( *s2 == '-' && s2[1] && (opts[i].flags & 8) ) {
/* the argument is optional and the next seems to be
@@ -662,7 +733,7 @@
}
}
else if( arg->flags & (1<<2) ) {
- arg->r_opt = -1; /* not an option but a argument */
+ arg->r_opt = ARGPARSE_IS_ARG;
arg->r_type = 2;
arg->r.ret_str = s;
argc--; argv++; idx++; /* set to next one */
Modified: trunk/jnlib/argparse.h
===================================================================
--- trunk/jnlib/argparse.h 2008-09-28 12:48:41 UTC (rev 4838)
+++ trunk/jnlib/argparse.h 2008-09-29 15:02:55 UTC (rev 4839)
@@ -55,7 +55,20 @@
} ARGPARSE_OPTS;
+/* Error values. */
+#define ARGPARSE_IS_ARG (-1)
+#define ARGPARSE_INVALID_OPTION (-2)
+#define ARGPARSE_MISSING_ARG (-3)
+#define ARGPARSE_KEYWORD_TOO_LONG (-4)
+#define ARGPARSE_READ_ERROR (-5)
+#define ARGPARSE_UNEXPECTED_ARG (-6)
+#define ARGPARSE_INVALID_COMMAND (-7)
+#define ARGPARSE_AMBIGUOUS_OPTION (-8)
+#define ARGPARSE_AMBIGUOUS_COMMAND (-9)
+#define ARGPARSE_INVALID_ALIAS (-10)
+#define ARGPARSE_OUT_OF_CORE (-11)
+
int arg_parse( ARGPARSE_ARGS *arg, ARGPARSE_OPTS *opts);
int optfile_parse( FILE *fp, const char *filename, unsigned *lineno,
ARGPARSE_ARGS *arg, ARGPARSE_OPTS *opts);
Modified: trunk/jnlib/libjnlib-config.h
===================================================================
--- trunk/jnlib/libjnlib-config.h 2008-09-28 12:48:41 UTC (rev 4838)
+++ trunk/jnlib/libjnlib-config.h 2008-09-29 15:02:55 UTC (rev 4839)
@@ -65,13 +65,15 @@
/* Malloc functions to be used by jnlib. */
#define jnlib_malloc(a) gcry_malloc( (a) )
#define jnlib_calloc(a,b) gcry_calloc( (a), (b) )
+#define jnlib_realloc(a,b) gcry_realloc( (a), (b) )
+#define jnlib_strdup(a) gcry_strdup( (a) )
#define jnlib_xmalloc(a) gcry_xmalloc( (a) )
#define jnlib_xcalloc(a,b) gcry_xcalloc( (a), (b) )
#define jnlib_xrealloc(a,n) gcry_xrealloc( (a), (n) )
#define jnlib_xstrdup(a) gcry_xstrdup( (a) )
#define jnlib_free(a) gcry_free( (a) )
-/* Logging functions to be jused by jnlib. */
+/* Logging functions to be used by jnlib. */
#define jnlib_log_debug log_debug
#define jnlib_log_info log_info
#define jnlib_log_error log_error
Modified: trunk/scd/app-p15.c
===================================================================
--- trunk/scd/app-p15.c 2008-09-28 12:48:41 UTC (rev 4838)
+++ trunk/scd/app-p15.c 2008-09-29 15:02:55 UTC (rev 4839)
@@ -2948,7 +2948,7 @@
mse[0] = 4; /* Length of the template. */
mse[1] = 0x80; /* Algorithm reference tag. */
- if (hashalgo == GCRY_MD_USER_TLS_MD5SHA1)
+ if (hashalgo == MD_USER_TLS_MD5SHA1)
mse[2] = 0x01; /* Let card do pkcs#1 0xFF padding. */
else
mse[2] = 0x02; /* RSASSA-PKCS1-v1.5 using SHA1. */
@@ -3124,7 +3124,7 @@
if (indatalen == 36)
{
/* No ASN.1 container used. */
- if (hashalgo != GCRY_MD_USER_TLS_MD5SHA1)
+ if (hashalgo != MD_USER_TLS_MD5SHA1)
return gpg_error (GPG_ERR_UNSUPPORTED_ALGORITHM);
memcpy (data, indata, indatalen);
}
@@ -3187,7 +3187,7 @@
return err;
}
- if (hashalgo == GCRY_MD_USER_TLS_MD5SHA1)
+ if (hashalgo == MD_USER_TLS_MD5SHA1)
err = iso7816_compute_ds (app->slot, data, 36, outdata, outdatalen);
else if (no_data_padding)
err = iso7816_compute_ds (app->slot, data+15, 20, outdata, outdatalen);
@@ -3226,7 +3226,7 @@
return gpg_error (GPG_ERR_WRONG_KEY_USAGE);
}
- algo = indatalen == 36? GCRY_MD_USER_TLS_MD5SHA1 : GCRY_MD_SHA1;
+ algo = indatalen == 36? MD_USER_TLS_MD5SHA1 : GCRY_MD_SHA1;
return do_sign (app, keyidstr, algo, pincb, pincb_arg,
indata, indatalen, outdata, outdatalen);
}
Modified: trunk/scd/scdaemon.h
===================================================================
--- trunk/scd/scdaemon.h 2008-09-28 12:48:41 UTC (rev 4838)
+++ trunk/scd/scdaemon.h 2008-09-29 15:02:55 UTC (rev 4839)
@@ -33,10 +33,10 @@
/* To convey some special hash algorithms we use algorithm numbers
reserved for application use. */
-#ifndef GCRY_MD_USER
-#define GCRY_MD_USER 1024
+#ifndef GCRY_MODULE_ID_USER
+#define GCRY_MODULE_ID_USER 1024
#endif
-#define GCRY_MD_USER_TLS_MD5SHA1 (GCRY_MD_USER+1)
+#define MD_USER_TLS_MD5SHA1 (GCRY_MODULE_ID_USER+1)
/* Maximum length of a digest. */
#define MAX_DIGEST_LEN 36
Modified: trunk/sm/certcheck.c
===================================================================
--- trunk/sm/certcheck.c 2008-09-28 12:48:41 UTC (rev 4838)
+++ trunk/sm/certcheck.c 2008-09-29 15:02:55 UTC (rev 4839)
@@ -34,10 +34,6 @@
#include "i18n.h"
-/* Remove this if libgcrypt 1.3.0 is required. */
-#define MY_GCRY_PK_ECDSA 301
-
-
/* Return the number of bits of the Q parameter from the DSA key
KEY. */
static unsigned int
@@ -75,11 +71,11 @@
size_t nframe;
unsigned char *frame;
- if (pkalgo == GCRY_PK_DSA || pkalgo == MY_GCRY_PK_ECDSA)
+ if (pkalgo == GCRY_PK_DSA || pkalgo == GCRY_PK_ECDSA)
{
unsigned int qbits;
- if ( pkalgo == MY_GCRY_PK_ECDSA )
+ if ( pkalgo == GCRY_PK_ECDSA )
qbits = gcry_pk_get_nbits (pkey);
else
qbits = get_dsa_qbits (pkey);
@@ -214,7 +210,7 @@
/* Because this function is called only for verification we can
assume that ECC actually means ECDSA. */
else if (n==3 && !memcmp (name, "ecc", 3))
- algo = MY_GCRY_PK_ECDSA;
+ algo = GCRY_PK_ECDSA;
else if (n==13 && !memcmp (name, "ambiguous-rsa", 13))
algo = GCRY_PK_RSA;
else
Modified: trunk/sm/certreqgen-ui.c
===================================================================
--- trunk/sm/certreqgen-ui.c 2008-09-28 12:48:41 UTC (rev 4838)
+++ trunk/sm/certreqgen-ui.c 2008-09-29 15:02:55 UTC (rev 4839)
@@ -300,7 +300,7 @@
goto leave;
mem_error:
- log_error (_("resource problem: out or core\n"));
+ log_error (_("resource problem: out of core\n"));
leave:
es_fclose (fp);
xfree (keytype);
Modified: trunk/sm/gpgsm.c
===================================================================
--- trunk/sm/gpgsm.c 2008-09-28 12:48:41 UTC (rev 4838)
+++ trunk/sm/gpgsm.c 2008-09-29 15:02:55 UTC (rev 4839)
@@ -500,17 +500,13 @@
static estream_t open_es_fwrite (const char *filename);
static void run_protect_tool (int argc, char **argv);
-/* Remove this if libgcrypt 1.3.0 is required. */
-#define MY_GCRY_PK_ECDSA 301
-
-
static int
our_pk_test_algo (int algo)
{
switch (algo)
{
case GCRY_PK_RSA:
- case MY_GCRY_PK_ECDSA:
+ case GCRY_PK_ECDSA:
return gcry_pk_test_algo (algo);
default:
return 1;
Modified: trunk/sm/sign.c
===================================================================
--- trunk/sm/sign.c 2008-09-28 12:48:41 UTC (rev 4838)
+++ trunk/sm/sign.c 2008-09-29 15:02:55 UTC (rev 4839)
@@ -33,10 +33,7 @@
#include "keydb.h"
#include "i18n.h"
-/* Remove this if libgcrypt 1.4 is required. */
-#define MY_GCRY_MD_SHA224 11
-
static void
hash_data (int fd, gcry_md_hd_t md)
{
@@ -411,7 +408,7 @@
{
case GCRY_MD_SHA1: oid = "1.3.14.3.2.26"; break;
case GCRY_MD_RMD160: oid = "1.3.36.3.2.1"; break;
- case MY_GCRY_MD_SHA224: oid = "2.16.840.1.101.3.4.2.4"; break;
+ case GCRY_MD_SHA224: oid = "2.16.840.1.101.3.4.2.4"; break;
case GCRY_MD_SHA256: oid = "2.16.840.1.101.3.4.2.1"; break;
case GCRY_MD_SHA384: oid = "2.16.840.1.101.3.4.2.2"; break;
case GCRY_MD_SHA512: oid = "2.16.840.1.101.3.4.2.3"; break;
More information about the Gnupg-commits
mailing list