From cvs at cvs.gnupg.org Tue May 2 10:20:18 2006 From: cvs at cvs.gnupg.org (svn author wk) Date: Tue May 2 09:49:03 2006 Subject: [svn] GnuPG - r4131 - branches/GNUPG-1-9-BRANCH/tests/pkits Message-ID: Author: wk Date: 2006-05-02 10:19:59 +0200 (Tue, 02 May 2006) New Revision: 4131 Added: branches/GNUPG-1-9-BRANCH/tests/pkits/PKITS_data.tar.bz2 Removed: branches/GNUPG-1-9-BRANCH/tests/pkits/PKITS_data.tar.bz2 Modified: branches/GNUPG-1-9-BRANCH/tests/pkits/ChangeLog branches/GNUPG-1-9-BRANCH/tests/pkits/README branches/GNUPG-1-9-BRANCH/tests/pkits/inittests Log: Repackaged PKITS_data.tar.bz2 Modified: branches/GNUPG-1-9-BRANCH/tests/pkits/ChangeLog =================================================================== --- branches/GNUPG-1-9-BRANCH/tests/pkits/ChangeLog 2006-04-28 14:32:13 UTC (rev 4130) +++ branches/GNUPG-1-9-BRANCH/tests/pkits/ChangeLog 2006-05-02 08:19:59 UTC (rev 4131) @@ -1,3 +1,8 @@ +2006-05-02 Werner Koch + + * PKITS_data.tar.bz2: Repackaged new copy becuase the old one got + corrupted by the conversion fromCVS to SVN. + 2004-08-16 Werner Koch Started implementing PKITS based tests. Deleted: branches/GNUPG-1-9-BRANCH/tests/pkits/PKITS_data.tar.bz2 Added: branches/GNUPG-1-9-BRANCH/tests/pkits/PKITS_data.tar.bz2 =================================================================== (Binary files differ) Property changes on: branches/GNUPG-1-9-BRANCH/tests/pkits/PKITS_data.tar.bz2 ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Modified: branches/GNUPG-1-9-BRANCH/tests/pkits/README =================================================================== --- branches/GNUPG-1-9-BRANCH/tests/pkits/README 2006-04-28 14:32:13 UTC (rev 4130) +++ branches/GNUPG-1-9-BRANCH/tests/pkits/README 2006-05-02 08:19:59 UTC (rev 4131) @@ -1,7 +1,7 @@ tests/pkits/README These are tests based on NIST's Public Key Interoperability Test Suite -(PKITS) as downloaded on 2004-08-16 from +(PKITS) as downloaded on 2006-05-02 from http://csrc.nist.gov/pki/testing/x509paths.html . README - this file. Modified: branches/GNUPG-1-9-BRANCH/tests/pkits/inittests =================================================================== --- branches/GNUPG-1-9-BRANCH/tests/pkits/inittests 2006-04-28 14:32:13 UTC (rev 4130) +++ branches/GNUPG-1-9-BRANCH/tests/pkits/inittests 2006-05-02 08:19:59 UTC (rev 4131) @@ -13,7 +13,7 @@ clean_files=' -ReadMe.txt pkits.ldif +ReadMe.txt pkits.ldif pkits.schema gpgsm.conf gpg-agent.conf trustlist.txt policies.txt pubring.kbx msg msg.sig msg.unsig ' From cvs at cvs.gnupg.org Fri May 5 03:21:50 2006 From: cvs at cvs.gnupg.org (svn author marcus) Date: Fri May 5 02:50:23 2006 Subject: [svn] gpg-error - r165 - in trunk: . lang lang/cl Message-ID: Author: marcus Date: 2006-05-05 03:21:49 +0200 (Fri, 05 May 2006) New Revision: 165 Added: trunk/lang/ trunk/lang/Makefile.am trunk/lang/README trunk/lang/cl/ trunk/lang/cl/Makefile.am trunk/lang/cl/README trunk/lang/cl/gpg-error-package.lisp trunk/lang/cl/gpg-error.asd trunk/lang/cl/gpg-error.lisp trunk/lang/cl/mkerrcodes.awk Modified: trunk/ChangeLog trunk/Makefile.am trunk/NEWS trunk/configure.ac Log: 2006-05-05 Marcus Brinkmann * configure.ac (AC_CONFIG_FILES): Add lang/Makefile and lang/cl/Makefile. * Makefile.am (SUBDIRS): Add lang. * lang: New directory. * lang/README, lang/Makefile.am: New files. * lang/cl: New directory. * lang/cl/Makefile.am, lang/cl/README, lang/cl/gpg-error.asd, lang/cl/gpg-error-package.lisp, lang/cl/gpg-error.lisp, lang/cl/mkerrcodes.awk: New files. Modified: trunk/ChangeLog =================================================================== --- trunk/ChangeLog 2006-03-14 13:29:14 UTC (rev 164) +++ trunk/ChangeLog 2006-05-05 01:21:49 UTC (rev 165) @@ -1,3 +1,15 @@ +2006-05-05 Marcus Brinkmann + + * configure.ac (AC_CONFIG_FILES): Add lang/Makefile and + lang/cl/Makefile. + * Makefile.am (SUBDIRS): Add lang. + * lang: New directory. + * lang/README, lang/Makefile.am: New files. + * lang/cl: New directory. + * lang/cl/Makefile.am, lang/cl/README, lang/cl/gpg-error.asd, + lang/cl/gpg-error-package.lisp, lang/cl/gpg-error.lisp, + lang/cl/mkerrcodes.awk: New files. + 2006-03-14 Marcus Brinkmann Released 1.3. Modified: trunk/Makefile.am =================================================================== --- trunk/Makefile.am 2006-03-14 13:29:14 UTC (rev 164) +++ trunk/Makefile.am 2006-05-05 01:21:49 UTC (rev 165) @@ -1,5 +1,5 @@ # Makefile.am for libgpg-error. -# Copyright (C) 2003 g10 Code GmbH +# Copyright (C) 2003, 2006 g10 Code GmbH # # This file is part of libgpg-error. # @@ -17,7 +17,7 @@ # License along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA -SUBDIRS = intl m4 src tests po +SUBDIRS = intl m4 src tests po lang ACLOCAL_AMFLAGS = -I m4 AUTOMAKE_OPTIONS = dist-bzip2 Modified: trunk/NEWS =================================================================== --- trunk/NEWS 2006-03-14 13:29:14 UTC (rev 164) +++ trunk/NEWS 2006-05-05 01:21:49 UTC (rev 165) @@ -1,3 +1,9 @@ +Noteworthy changes in version 1.4 (unreleased) +---------------------------------------------- + + * Support for Common Lisp is included. + + Noteworthy changes in version 1.3 (2006-03-14) ---------------------------------------------- Modified: trunk/configure.ac =================================================================== --- trunk/configure.ac 2006-03-14 13:29:14 UTC (rev 164) +++ trunk/configure.ac 2006-05-05 01:21:49 UTC (rev 165) @@ -1,5 +1,5 @@ # configure.ac for libgpg-error -# Copyright (C) 2003, 2004 g10 Code GmbH +# Copyright (C) 2003, 2004, 2006 g10 Code GmbH # # This file is part of libgpg-error. # @@ -23,7 +23,7 @@ min_automake_version="1.9.6" # The gettext version is set below using AM_GNU_GETTEXT_VERSION # Version number: Remember to change it immediately *after* a release. -AC_INIT([libgpg-error],[1.3],[bug-gnupg@gnupg.org]) +AC_INIT([libgpg-error],[1.4-cvs],[bug-gnupg@gnupg.org]) # LT Version numbers, remember to change them just *before* a release. # (Code changed: REVISION++) # (Interfaces added/removed/changed: CURRENT++, REVISION=0) @@ -143,6 +143,7 @@ AC_CONFIG_FILES([intl/Makefile]) AC_CONFIG_FILES([po/Makefile.in m4/Makefile]) AC_CONFIG_FILES([src/Makefile tests/Makefile]) +AC_CONFIG_FILES([lang/Makefile lang/cl/Makefile]) AC_CONFIG_FILES([src/versioninfo.rc]) AC_OUTPUT Added: trunk/lang/Makefile.am =================================================================== --- trunk/lang/Makefile.am 2006-03-14 13:29:14 UTC (rev 164) +++ trunk/lang/Makefile.am 2006-05-05 01:21:49 UTC (rev 165) @@ -0,0 +1,22 @@ +# Makefile.am for libgpg-error. +# Copyright (C) 2003, 2006 g10 Code GmbH +# +# This file is part of libgpg-error. +# +# libgpg-error is free software; you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as +# published by the Free Software Foundation; either version 2.1 of the +# License, or (at your option) any later version. +# +# libgpg-error is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + +SUBDIRS = cl + +EXTRA_DIST = README Added: trunk/lang/README =================================================================== --- trunk/lang/README 2006-03-14 13:29:14 UTC (rev 164) +++ trunk/lang/README 2006-05-05 01:21:49 UTC (rev 165) @@ -0,0 +1,8 @@ +Language Support for libgpg-error +--------------------------------- + +This directory contains support for other languages than C. + +Directory Language + +cl Common Lisp Added: trunk/lang/cl/Makefile.am =================================================================== --- trunk/lang/cl/Makefile.am 2006-03-14 13:29:14 UTC (rev 164) +++ trunk/lang/cl/Makefile.am 2006-05-05 01:21:49 UTC (rev 165) @@ -0,0 +1,41 @@ +# Makefile.am for libgpg-error. +# Copyright (C) 2003, 2006 g10 Code GmbH +# +# This file is part of libgpg-error. +# +# libgpg-error is free software; you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as +# published by the Free Software Foundation; either version 2.1 of the +# License, or (at your option) any later version. +# +# libgpg-error is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + +distributed_clfiles = gpg-error.asd \ + gpg-error-package.lisp \ + gpg-error.lisp + +generated_clfiles = gpg-error-codes.lisp + +clfiles = $(distributed_clfiles) $(generated_clfiles) + +# FIXME: Should be configurable. +clfilesdir = $(prefix)/common-lisp/source/libgpg-error +dist_clfiles_DATA = $(distributed_clfiles) +nodist_clfiles_DATA = $(generated_clfiles) + +EXTRA_DIST = README mkerrcodes.awk +CLEANFILES = gpg-error-codes.lisp + +codes_file := $(top_srcdir)/src/err-codes.h.in +errno_file := $(top_srcdir)/src/errnos.in + +gpg-error-codes.lisp: Makefile mkerrcodes.awk $(codes_file) $(errno_file) + echo '@errnos@' | cat $(codes_file) - $(errno_file) \ + | $(AWK) -f $(srcdir)/mkerrcodes.awk >$@ Added: trunk/lang/cl/README =================================================================== --- trunk/lang/cl/README 2006-03-14 13:29:14 UTC (rev 164) +++ trunk/lang/cl/README 2006-05-05 01:21:49 UTC (rev 165) @@ -0,0 +1,8 @@ +Common Lisp Support for libgpg-error +------------------------------------ + +Requirements: + +ASDF Packaging Support +CFFI Foreign Function Interface + Added: trunk/lang/cl/gpg-error-package.lisp =================================================================== --- trunk/lang/cl/gpg-error-package.lisp 2006-03-14 13:29:14 UTC (rev 164) +++ trunk/lang/cl/gpg-error-package.lisp 2006-05-05 01:21:49 UTC (rev 165) @@ -0,0 +1,65 @@ +;;;; libgpg-error-package.lisp + +;;; Copyright (C) 2006 g10 Code GmbH +;;; +;;; This file is part of libgpg-error. +;;; +;;; libgpg-error is free software; you can redistribute it and/or +;;; modify it under the terms of the GNU Lesser General Public License +;;; as published by the Free Software Foundation; either version 2.1 of +;;; the License, or (at your option) any later version. +;;; +;;; libgpg-error is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +;;; Lesser General Public License for more details. +;;; +;;; You should have received a copy of the GNU Lesser General Public +;;; License along with libgpg-error; if not, write to the Free +;;; Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +;;; 02111-1307, USA. + +;;; Conventions +;;; +;;; Error sources and codes are represented as keywords like +;;; :gpg-err-source-gpg and :gpg-err-unknown-packet. +;;; +;;; Errors are represented as lists '(SOURCE CODE). Other +;;; representations are also accepted in some places. +;;; +;;; TODO: Lispy convenience functions as need arises, for example for +;;; output. +;;; +;;; The following functions are defined which are not defined in the C API: +;;; gpg-err-source-as-key, gpg-err-source-as-value +;;; gpg-err-code-as-key, gpg-err-code-as-value +;;; gpg-err-canonicalize, gpg-err-as-value +;;; Conversion between keywords and values for error sources and codes. +;;; +;;; The following functions from the C API are omitted: +;;; gpg-strerror-r +;;; +;;; The following features work slightly differently: +;;; *gpg-err-source-default* is a dynamic variable that can be set to +;;; change the default for gpg-error. + +(defpackage #:org.gnupg.libgpg-error + (:use #:common-lisp #:cffi) + + (:export :gpg-err-code-as-key + :gpg-err-code-as-value + :gpg-err-source-as-key + :gpg-err-source-as-value + :gpg-err-canonicalize + :gpg-err-as-value + :gpg-err-make + :*gpg-err-source-default* + :gpg-error + :gpg-err-code + :gpg-err-source + :gpg-strerror + :gpg-strsource + :gpg-err-code-from-errno + :gpg-err-code-to-errno + :gpg-err-make-from-errno + :gpg-error-from-errno)) Added: trunk/lang/cl/gpg-error.asd =================================================================== --- trunk/lang/cl/gpg-error.asd 2006-03-14 13:29:14 UTC (rev 164) +++ trunk/lang/cl/gpg-error.asd 2006-05-05 01:21:49 UTC (rev 165) @@ -0,0 +1,31 @@ +;;; -*- Mode: lisp -*- + +;;; Copyright (C) 2006 g10 Code GmbH +;;; +;;; This file is part of libgpg-error. +;;; +;;; libgpg-error is free software; you can redistribute it and/or +;;; modify it under the terms of the GNU Lesser General Public License +;;; as published by the Free Software Foundation; either version 2.1 of +;;; the License, or (at your option) any later version. +;;; +;;; libgpg-error is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +;;; Lesser General Public License for more details. +;;; +;;; You should have received a copy of the GNU Lesser General Public +;;; License along with libgpg-error; if not, write to the Free +;;; Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +;;; 02111-1307, USA. + +(defpackage #:org.gnupg.libgpg-error.system + (:use #:common-lisp #:asdf)) + +(in-package #:org.gnupg.libgpg-error.system) + +(defsystem org.gnupg.libgpg-error + :components ((:file "libgpg-error-package") + (:file "libgpg-error-codes" + :depends-on ("libgpg-error-package")) + (:file "libgpg-error" :depends-on ("error-codes")))) Added: trunk/lang/cl/gpg-error.lisp =================================================================== --- trunk/lang/cl/gpg-error.lisp 2006-03-14 13:29:14 UTC (rev 164) +++ trunk/lang/cl/gpg-error.lisp 2006-05-05 01:21:49 UTC (rev 165) @@ -0,0 +1,220 @@ +;;;; libgpg-error.lisp + +;;; Copyright (C) 2006 g10 Code GmbH +;;; +;;; This file is part of libgpg-error. +;;; +;;; libgpg-error is free software; you can redistribute it and/or +;;; modify it under the terms of the GNU Lesser General Public License +;;; as published by the Free Software Foundation; either version 2.1 of +;;; the License, or (at your option) any later version. +;;; +;;; libgpg-error is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +;;; Lesser General Public License for more details. +;;; +;;; You should have received a copy of the GNU Lesser General Public +;;; License along with libgpg-error; if not, write to the Free +;;; Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +;;; 02111-1307, USA. + +;;; Set up the library. + +(in-package :org.gnupg.libgpg-error) + +(define-foreign-library libgpg-error + (:unix "libgpg-error.so") + (t (:default "libgpg-error"))) + +(use-foreign-library libgpg-error) + +;;; System dependencies. + +(defctype size-t :unsigned-int + :documentation "The system size_t type.") + +;;; Error sources. + +(defcenum gpg-err-source-t + "The GPG error source type." + (:gpg-err-source-unknown 0) + (:gpg-err-source-gcrypt 1) + (:gpg-err-source-gpg 2) + (:gpg-err-source-gpgsm 3) + (:gpg-err-source-gpgagent 4) + (:gpg-err-source-pinentry 5) + (:gpg-err-source-scd 6) + (:gpg-err-source-gpgme 7) + (:gpg-err-source-keybox 8) + (:gpg-err-source-ksba 9) + (:gpg-err-source-dirmngr 10) + (:gpg-err-source-gsti 11) + (:gpg-err-source-user-1 32) + (:gpg-err-source-user-2 33) + (:gpg-err-source-user-3 34) + (:gpg-err-source-user-4 35)) + +(defconstant +gpg-err-source-dim+ 256) + +;;; The error code type gpg-err-code-t. + +;;; libgpg-error-codes.lisp is loaded by ASDF. + +(defctype gpg-error-t :unsigned-int + :documentation "The GPG error code type.") + +;;; Bit mask manipulation constants. + +(defconstant +gpg-err-code-mask+ (- +gpg-err-code-dim+ 1)) + +(defconstant +gpg-err-source-mask+ (- +gpg-err-source-dim+ 1)) +(defconstant +gpg-err-source-shift+ 24) + +;;; Constructor and accessor functions. + +;;; If we had in-library versions of our static inlines, we wouldn't +;;; need to replicate them here. Oh well. + +(defun c-gpg-err-make (source code) + "Construct an error value from an error code and source. + Within a subsystem, use gpg-error instead." + (logior + (ash (logand source +gpg-err-source-mask+) + +gpg-err-source-shift+) + (logand code +gpg-err-code-mask+))) + +(defun c-gpg-err-code (err) + "retrieve the error code from an error value." + (logand err +gpg-err-code-mask+)) + +(defun c-gpg-err-source (err) + "retrieve the error source from an error value." + (logand (ash err (- +gpg-err-source-shift+)) + +gpg-err-source-mask+)) + +;;; String functions. + +(defcfun ("gpg_strerror" c-gpg-strerror) :string + (err gpg-error-t)) + +(defcfun ("gpg_strsource" c-gpg-strsource) :string + (err gpg-error-t)) + +;;; Mapping of system errors (errno). + +(defcfun ("gpg_err_code_from_errno" c-gpg-err-code-from-errno) gpg-err-code-t + (err :int)) + +(defcfun ("gpg_err_code_to_errno" c-gpg-err-code-to-errno) :int + (code gpg-err-code-t)) + +;;; Self-documenting convenience functions. + +;;; See below. + +;;; +;;; +;;; Lispy interface. +;;; +;;; + +;;; Low-level support functions. + +(defun gpg-err-code-as-value (code-key) + (foreign-enum-value 'gpg-err-code-t code-key)) + +(defun gpg-err-code-as-key (code) + (foreign-enum-keyword 'gpg-err-code-t code)) + +(defun gpg-err-source-as-value (source-key) + (foreign-enum-value 'gpg-err-source-t source-key)) + +(defun gpg-err-source-as-key (source) + (foreign-enum-keyword 'gpg-err-source-t source)) + +(defun gpg-err-canonicalize (err) + "Canonicalize the error value err." + (gpg-err-make (gpg-err-source err) (gpg-err-code err))) + +(defun gpg-err-as-value (err) + "Get the integer representation of the error value ERR." + (let ((error (gpg-err-canonicalize err))) + (c-gpg-err-make (gpg-err-source-as-value (gpg-err-source error)) + (gpg-err-code-as-value (gpg-err-code error))))) + +;;; Constructor and accessor functions. + +(defun gpg-err-make (source code) + "Construct an error value from an error code and source. + Within a subsystem, use gpg-error instead." + ;; As an exception to the rule, the function gpg-err-make will use + ;; the error source value as is when provided as integer, instead of + ;; parsing it as an error value. + (list (if (integerp source) + (gpg-err-source-as-key source) + (gpg-err-source source)) + (gpg-err-code code))) + +(defvar *gpg-err-source-default* :gpg-err-source-unknown + "define this to specify a default source for gpg-error.") + +(defun gpg-error (code) + "Construct an error value from an error code, using the default source." + (gpg-err-make *gpg-err-source-default* code)) + +(defun gpg-err-code (err) + "Retrieve an error code from the error value ERR." + (cond ((listp err) (second err)) + ((keywordp err) err) ; FIXME + (t (gpg-err-code-as-key (c-gpg-err-code err))))) + +(defun gpg-err-source (err) + "Retrieve an error source from the error value ERR." + (cond ((listp err) (first err)) + ((keywordp err) err) ; FIXME + (t (gpg-err-source-as-key (c-gpg-err-source err))))) + +;;; String functions. + +(defun gpg-strerror (err) + "Return a string containig a description of the error code." + (c-gpg-strerror (gpg-err-as-value err))) + +;;; FIXME: maybe we should use this as the actual implementation for +;;; gpg-strerror. + +;; (defcfun ("gpg_strerror_r" c-gpg-strerror-r) :int +;; (err gpg-error-t) +;; (buf :string) +;; (buflen size-t)) + +;; (defun gpg-strerror-r (err) +;; "Return a string containig a description of the error code." +;; (with-foreign-pointer-as-string (errmsg 256 errmsg-size) +;; (c-gpg-strerror-r (gpg-err-code-as-value (gpg-err-code err)) +;; errmsg errmsg-size))) + +(defun gpg-strsource (err) + "Return a string containig a description of the error source." + (c-gpg-strsource (gpg-err-as-value err))) + +;;; Mapping of system errors (errno). + +(defun gpg-err-code-from-errno (err) + "Retrieve the error code for the system error. If the system error + is not mapped, :gpg-err-unknown-errno is returned." + (gpg-err-code-as-key (c-gpg-err-code-from-errno err))) + +(defun gpg-err-code-to-errno (code) + "Retrieve the system error for the error code. If this is not a + system error, 0 is returned." + (c-gpg-err-code-to-errno (gpg-err-code code))) + +;;; Self-documenting convenience functions. + +(defun gpg-err-make-from-errno (source err) + (gpg-err-make source (gpg-err-code-from-errno err))) + +(defun gpg-error-from-errno (err) + (gpg-error (gpg-err-code-from-errno err))) Added: trunk/lang/cl/mkerrcodes.awk =================================================================== --- trunk/lang/cl/mkerrcodes.awk 2006-03-14 13:29:14 UTC (rev 164) +++ trunk/lang/cl/mkerrcodes.awk 2006-05-05 01:21:49 UTC (rev 165) @@ -0,0 +1,154 @@ +# mkerrcodes.awk +# Copyright (C) 2004, 2005, 2006 g10 Code GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of +# the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +# +# As a special exception, g10 Code GmbH gives unlimited permission to +# copy, distribute and modify the lisp source files that are the output +# of mkerrcodes.awk. You need not follow the terms of the GNU General +# Public License when using or distributing such scripts, even though +# portions of the text of mkerrcodes.awk appear in them. The GNU +# General Public License (GPL) does govern all other use of the material +# that constitutes the mkerrcodes.awk program. +# +# Certain portions of the mkerrcodes.awk source text are designed to be +# copied (in certain cases, depending on the input) into the output of +# mkerrcodes.awk. We call these the "data" portions. The rest of the +# mkerrcodes.awk source text consists of comments plus executable code +# that decides which of the data portions to output in any given case. +# We call these comments and executable code the "non-data" portions. +# mkerrcodes.awk never copies any of the non-data portions into its output. +# +# This special exception to the GPL applies to versions of mkerrcodes.awk +# released by g10 Code GmbH. When you make and distribute a modified version +# of mkerrcodes.awk, you may extend this special exception to the GPL to +# apply to your modified version as well, *unless* your modified version +# has the potential to copy into its output some of the text that was the +# non-data portion of the version that you started with. (In other words, +# unless your change moves or copies text from the non-data portions to the +# data portions.) If your modification has such potential, you must delete +# any notice of this special exception to the GPL from your modified version. + +# The input file is in the following format: +# [CODE SYMBOL...] +# @errnos@ +# [CODE SYMBOL...] +# +# The difference between the sections is how symbol is transformed. +# The second section gets GPG_ERR_ prepended before processing. +# +# Comments (starting with # and ending at the end of the line) are removed, +# as is trailing whitespace. + +BEGIN { + FS="[ \t]+"; + print ";;;; Output of mkerrcodes.awk. DO NOT EDIT."; + print ""; + print ";;; Copyright (C) 2006 g10 Code GmbH"; + print ";;;"; + print ";;; This file is part of libgpg-error."; + print ";;;"; + print ";;; libgpg-error is free software; you can redistribute it and/or"; + print ";;; modify it under the terms of the GNU Lesser General Public License"; + print ";;; as published by the Free Software Foundation; either version 2.1 of"; + print ";;; the License, or (at your option) any later version."; + print ";;;"; + print ";;; libgpg-error is distributed in the hope that it will be useful, but"; + print ";;; WITHOUT ANY WARRANTY; without even the implied warranty of"; + print ";;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU"; + print ";;; Lesser General Public License for more details."; + print ";;;"; + print ";;; You should have received a copy of the GNU Lesser General Public"; + print ";;; License along with libgpg-error; if not, write to the Free"; + print ";;; Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA"; + print ";;; 02111-1307, USA."; + print ""; + + header = 1; + errnos = 0; +} + +/^#/ { next; } + +header { + if (errnos) + { + if ($1 ~ /^[0123456789]+$/) + { + header = 0; + + print ""; + print " ;; The following error codes map system errors."; + } + } + else + { + if ($1 ~ /^[0123456789]+$/) + { + header = 0; + + print "(in-package :org.gnupg.libgpg-error)"; + print ""; + print ";;; The error code type gpg-err-code-t."; + print ""; + print ";;; This is used for system error codes."; + print "(defconstant +gpg-err-system-error+ (ash 1 15))"; + print ""; + print ";;; This is one more than the largest allowed entry."; + print "(defconstant +gpg-err-code-dim+ 65536)"; + print ""; + print ";;; A helper macro to have the keyword values evaluated."; + print "(defmacro defcenum-eval (type doc &rest vals)"; + print " `(defcenum ,type ,doc"; + print " ,@(loop for v in vals"; + print " collect `(,(first v) ,(eval (second v))))))"; + print ""; + print "(defcenum-eval gpg-err-code-t"; + print " \"The GPG error code type.\""; + } + } +} + +!header { + sub (/\#.+/, ""); + sub (/[ ]+$/, ""); # Strip trailing space and tab characters. + + if (/^$/) + next; + + # The following can happen for GPG_ERR_CODE_DIM. + if ($1 == "") + next; + + if (/^@errnos@$/) + { + header = 1; + errnos = 1; + next; + } + + $2 = tolower($2); + gsub ("_", "-", $2); + + if (errnos) + print " (:gpg-err-" $2 " (logior +gpg-err-system-error+ " $1 "))"; + else + print " (:" $2 " " $1 ")"; +} + +END { + # I am very sorry to break lisp coding style here. + print ")"; +} From cvs at cvs.gnupg.org Wed May 10 04:09:27 2006 From: cvs at cvs.gnupg.org (svn author dshaw) Date: Wed May 10 03:37:21 2006 Subject: [svn] GnuPG - r4132 - trunk/m4 Message-ID: Author: dshaw Date: 2006-05-10 04:09:27 +0200 (Wed, 10 May 2006) New Revision: 4132 Modified: trunk/m4/ChangeLog trunk/m4/libcurl.m4 Log: * libcurl.m4: Fix mistaken AC_SUBST when curl is not found. Modified: trunk/m4/ChangeLog =================================================================== --- trunk/m4/ChangeLog 2006-05-02 08:19:59 UTC (rev 4131) +++ trunk/m4/ChangeLog 2006-05-10 02:09:27 UTC (rev 4132) @@ -1,3 +1,7 @@ +2006-05-09 David Shaw + + * libcurl.m4: Fix mistaken AC_SUBST when curl is not found. + 2006-01-17 David Shaw * libcurl.m4: Add IDN, SSPI, NTLM, and TFTP defines. Modified: trunk/m4/libcurl.m4 =================================================================== --- trunk/m4/libcurl.m4 2006-05-02 08:19:59 UTC (rev 4131) +++ trunk/m4/libcurl.m4 2006-05-10 02:09:27 UTC (rev 4132) @@ -1,7 +1,7 @@ # LIBCURL_CHECK_CONFIG ([DEFAULT-ACTION], [MINIMUM-VERSION], # [ACTION-IF-YES], [ACTION-IF-NO]) # ---------------------------------------------------------- -# David Shaw Jan-17-2006 +# David Shaw May-09-2006 # # Checks for libcurl. DEFAULT-ACTION is the string yes or no to # specify whether to default to --with-libcurl or --without-libcurl. @@ -210,6 +210,9 @@ AC_DEFINE_UNQUOTED(AS_TR_CPP(libcurl_protocol_$_libcurl_protocol),[1]) eval AS_TR_SH(libcurl_protocol_$_libcurl_protocol)=yes done + else + unset LIBCURL + unset LIBCURL_CPPFLAGS fi fi From cvs at cvs.gnupg.org Wed May 10 12:01:40 2006 From: cvs at cvs.gnupg.org (svn author wk) Date: Wed May 10 11:29:30 2006 Subject: [svn] ksba - r237 - in trunk: . src Message-ID: Author: wk Date: 2006-05-10 12:01:39 +0200 (Wed, 10 May 2006) New Revision: 237 Modified: trunk/NEWS trunk/THANKS trunk/src/ChangeLog trunk/src/ber-decoder.c trunk/src/ocsp.c Log: * ber-decoder.c (decoder_next): Zero out NODE. * ocsp.c (ksba_ocsp_prepare_request): Move requestExtensions into the TBSRequest. Reported by Daiko Ueno. Modified: trunk/NEWS =================================================================== --- trunk/NEWS 2006-04-23 19:32:38 UTC (rev 236) +++ trunk/NEWS 2006-05-10 10:01:39 UTC (rev 237) @@ -1,7 +1,9 @@ Noteworthy changes in version 0.9.14 ------------------------------------------------- + * Fixed broken OCSP requests. + Noteworthy changes in version 0.9.13 (2005-11-24) ------------------------------------------------- Modified: trunk/THANKS =================================================================== --- trunk/THANKS 2006-04-23 19:32:38 UTC (rev 236) +++ trunk/THANKS 2006-05-10 10:01:39 UTC (rev 237) @@ -2,11 +2,12 @@ Bernhard Herzog bh@intevation.de +Daiki Ueno ueno@unixuser.org Stéphane Corthésy stephane@sente.ch Thomas Koester tkoester@intevation.de - Copyright 2002, 2003 g10 Code GmbH + Copyright 2002, 2003, 2006 g10 Code GmbH This file is free software; as a special exception the author gives unlimited permission to copy and/or distribute it, with or without Modified: trunk/src/ChangeLog =================================================================== --- trunk/src/ChangeLog 2006-04-23 19:32:38 UTC (rev 236) +++ trunk/src/ChangeLog 2006-05-10 10:01:39 UTC (rev 237) @@ -1,3 +1,10 @@ +2006-05-03 Werner Koch + + * ber-decoder.c (decoder_next): Zero out NODE. + + * ocsp.c (ksba_ocsp_prepare_request): Move requestExtensions into + the TBSRequest. Reported by Daiko Ueno. + 2006-04-23 Brad Hards (mb) * ksba.h (ksba_crl_get_update_times): Rename parameter to avoid Modified: trunk/src/ber-decoder.c =================================================================== --- trunk/src/ber-decoder.c 2006-04-23 19:32:38 UTC (rev 236) +++ trunk/src/ber-decoder.c 2006-05-10 10:01:39 UTC (rev 237) @@ -750,7 +750,7 @@ decoder_next (BerDecoder d) { struct tag_info ti; - AsnNode node; + AsnNode node = NULL; gpg_error_t err; DECODER_STATE ds = d->ds; int debug = d->debug; Modified: trunk/src/ocsp.c =================================================================== --- trunk/src/ocsp.c 2006-04-23 19:32:38 UTC (rev 236) +++ trunk/src/ocsp.c 2006-05-10 10:01:39 UTC (rev 237) @@ -626,7 +626,9 @@ if (err) goto leave; - + /* The requestExtensions go here. */ + err = write_request_extensions (ocsp, w4); + /* Write the tbsRequest. */ /* The version is default, thus we don't write it. */ @@ -648,9 +650,6 @@ if (err) goto leave; - /* The requestExtensions go here. */ - err = write_request_extensions (ocsp, w5); - /* Reuse writers; for clarity, use new names. */ w6 = w3; w7 = w4; From cvs at cvs.gnupg.org Thu May 11 13:18:15 2006 From: cvs at cvs.gnupg.org (svn author wk) Date: Thu May 11 12:46:10 2006 Subject: [svn] ksba - r238 - in trunk: . src Message-ID: Author: wk Date: 2006-05-11 13:18:14 +0200 (Thu, 11 May 2006) New Revision: 238 Modified: trunk/ChangeLog trunk/configure.ac trunk/src/ChangeLog trunk/src/ber-decoder.c trunk/src/ber-help.c Log: Hack for Seimns CA certificates (and others with some trailing garbage) Modified: trunk/ChangeLog =================================================================== --- trunk/ChangeLog 2006-05-10 10:01:39 UTC (rev 237) +++ trunk/ChangeLog 2006-05-11 11:18:14 UTC (rev 238) @@ -1,3 +1,7 @@ +2006-05-11 Werner Koch + + * configure.ac: Use -Wno-pointer-sign + 2005-11-24 Werner Koch Released 0.9.13. Modified: trunk/configure.ac =================================================================== --- trunk/configure.ac 2006-05-10 10:01:39 UTC (rev 237) +++ trunk/configure.ac 2006-05-11 11:18:14 UTC (rev 238) @@ -84,6 +84,17 @@ if test "$GCC" = yes; then CFLAGS="$CFLAGS -Wall -Wcast-align -Wshadow -Wstrict-prototypes" + + AC_MSG_CHECKING([if gcc supports -Wno-pointer-sign]) + _gcc_cflags_save=$CFLAGS + CFLAGS="-Wno-pointer-sign" + AC_COMPILE_IFELSE(AC_LANG_PROGRAM([]),_gcc_psign=yes,_gcc_psign=no) + AC_MSG_RESULT($_gcc_psign) + CFLAGS=$_gcc_cflags_save; + if test x"$_gcc_psign" = xyes ; then + CFLAGS="$CFLAGS -Wno-pointer-sign" + fi + fi Modified: trunk/src/ChangeLog =================================================================== --- trunk/src/ChangeLog 2006-05-10 10:01:39 UTC (rev 237) +++ trunk/src/ChangeLog 2006-05-11 11:18:14 UTC (rev 238) @@ -1,3 +1,12 @@ +2006-05-11 Werner Koch + + * ber-decoder.c (decoder_next): Print error description returned + from BER reader in debug mode. + (struct ber_decoder_s): New fields OUTER_SEQUENCE_LENGTH, + IGNORE_GARBAGE and FIRST_TAG_SEEN. + (decoder_next): Implement hack for the Siemens CA to ignore a + trailing byte. + 2006-05-03 Werner Koch * ber-decoder.c (decoder_next): Zero out NODE. Modified: trunk/src/ber-decoder.c =================================================================== --- trunk/src/ber-decoder.c 2006-05-10 10:01:39 UTC (rev 237) +++ trunk/src/ber-decoder.c 2006-05-11 11:18:14 UTC (rev 238) @@ -53,7 +53,9 @@ typedef struct decoder_state_s *DECODER_STATE; -struct ber_decoder_s { +/* Context for a decoder. */ +struct ber_decoder_s +{ AsnNode module; /* the ASN.1 structure */ ksba_reader_t reader; const char *last_errdesc; /* string with the error description */ @@ -61,15 +63,30 @@ AsnNode root; /* of the expanded parse tree */ DECODER_STATE ds; int bypass; + + /* Because some certificates actually come with trailing garbage, we + use a hack to ignore this garbage. This hack is enabled for data + starting with a fixed length sequence and this variable takes the + length of this sequence. If it is 0, the hack is not + acticated. */ + unsigned long outer_sequence_length; + int ignore_garbage; /* Set to indicate that garpage should be + ignored. */ + + int first_tag_seen; /* Indicates whether the first tag of a decoder + run has been read. */ + int honor_module_end; int debug; int use_image; - struct { + struct + { unsigned char *buf; size_t used; size_t length; } image; - struct { + struct + { int primitive; /* current value is a primitive one */ int length; /* length of the primitive one */ int nhdr; /* length of the header */ @@ -758,6 +775,20 @@ err = _ksba_ber_read_tl (d->reader, &ti); if (err) { + if (debug) + fprintf (stderr, "ber_read_tl error: %s (%s)\n", + gpg_strerror (err), ti.err_string? ti.err_string:""); + /* This is our actual hack to cope with some trailing garbage: + Only if we get an premature EOF and we know that we have read + the complete certificate we change the error to EOF. This + won't help with all kinds of garbage but it fixes the case + where just one byte is appended. This is for example the + case with current Siemens certificates. This approach seems + to be the least intrusive one. */ + if (gpg_err_code (err) == GPG_ERR_BAD_BER + && d->ignore_garbage + && ti.err_string && !strcmp (ti.err_string, "premature EOF")) + err = gpg_error (GPG_ERR_EOF); return err; } @@ -768,6 +799,15 @@ fprintf (stderr, ">\n"); } + /* Check whether the trailing garbage hack is required. */ + if (!d->first_tag_seen) + { + d->first_tag_seen = 1; + if (ti.tag == TYPE_SEQUENCE && ti.length && !ti.ndef) + d->outer_sequence_length = ti.length; + } + + /* Store stuff in the image buffer. */ if (d->use_image) { if (!d->image.buf) @@ -856,6 +896,14 @@ ds->idx? ds->stack[ds->idx-1].length:-1, ds->cur.nread, ti.is_constructed? "con":"pri"); + if (d->outer_sequence_length + && ds->idx == 1 + && ds->cur.nread == d->outer_sequence_length) + { + if (debug) + fprintf (stderr, " Need to stop now\n"); + d->ignore_garbage = 1; + } if ( ds->idx && !ds->stack[ds->idx-1].ndef_length Modified: trunk/src/ber-help.c =================================================================== --- trunk/src/ber-help.c 2006-05-10 10:01:39 UTC (rev 237) +++ trunk/src/ber-help.c 2006-05-11 11:18:14 UTC (rev 238) @@ -49,6 +49,7 @@ static int premature_eof (struct tag_info *ti) { + /* Note: We do an strcmp on this string at othyer places. */ ti->err_string = "premature EOF"; return gpg_error (GPG_ERR_BAD_BER); } From cvs at cvs.gnupg.org Mon May 15 22:34:30 2006 From: cvs at cvs.gnupg.org (svn author wk) Date: Mon May 15 22:01:48 2006 Subject: [svn] dirmngr - r221 - in trunk: . src Message-ID: Author: wk Date: 2006-05-15 22:34:28 +0200 (Mon, 15 May 2006) New Revision: 221 Modified: trunk/ChangeLog trunk/NEWS trunk/THANKS trunk/configure.ac trunk/src/ChangeLog trunk/src/crlcache.c trunk/src/crlfetch.c trunk/src/http.c trunk/src/http.h Log: Should close bug #516. * crlfetch.c (crl_fetch): Use no-shutdown flag for HTTP. This seems to be required for "IBM_HTTP_Server/2.0.47.1 Apache/2.0.47 (Unix)". * http.c (parse_tuple): Set flag to to indicate no value. (build_rel_path): Take care of it. * crlcache.c (crl_cache_reload_crl): Also iterate over all names within a DP. Modified: trunk/ChangeLog =================================================================== --- trunk/ChangeLog 2005-11-02 08:05:21 UTC (rev 220) +++ trunk/ChangeLog 2006-05-15 20:34:28 UTC (rev 221) @@ -1,3 +1,7 @@ +2006-05-15 Werner Koch + + * configure.ac: Use -Wno-pointer-sign if available. + 2005-10-26 Werner Koch Released 0.9.3. Modified: trunk/NEWS =================================================================== --- trunk/NEWS 2005-11-02 08:05:21 UTC (rev 220) +++ trunk/NEWS 2006-05-15 20:34:28 UTC (rev 221) @@ -1,8 +1,11 @@ Noteworthy changes in version 0.9.4 ------------------------------------------------ + * Try all names of each crlDP. + * Don't shutdown tthe socket after sending the HTTP request. + Noteworthy changes in version 0.9.3 (2005-10-26) ------------------------------------------------ Modified: trunk/THANKS =================================================================== --- trunk/THANKS 2005-11-02 08:05:21 UTC (rev 220) +++ trunk/THANKS 2006-05-15 20:34:28 UTC (rev 221) @@ -2,5 +2,7 @@ Marcus Brinkmann marcus@g10code.de Michael Nottebrock michaelnottebrock@gmx.net Neil Dunbar neil.dunbar@hp.com +Peter Eisentraut peter_e@gmx.net + The whole ?gypten project team. Modified: trunk/configure.ac =================================================================== --- trunk/configure.ac 2005-11-02 08:05:21 UTC (rev 220) +++ trunk/configure.ac 2006-05-15 20:34:28 UTC (rev 221) @@ -101,6 +101,16 @@ else CFLAGS="$CFLAGS -Wall" fi + + AC_MSG_CHECKING([if gcc supports -Wno-pointer-sign]) + _gcc_cflags_save=$CFLAGS + CFLAGS="-Wno-pointer-sign" + AC_COMPILE_IFELSE(AC_LANG_PROGRAM([]),_gcc_psign=yes,_gcc_psign=no) + AC_MSG_RESULT($_gcc_psign) + CFLAGS=$_gcc_cflags_save; + if test x"$_gcc_psign" = xyes ; then + CFLAGS="$CFLAGS -Wno-pointer-sign" + fi fi Modified: trunk/src/ChangeLog =================================================================== --- trunk/src/ChangeLog 2005-11-02 08:05:21 UTC (rev 220) +++ trunk/src/ChangeLog 2006-05-15 20:34:28 UTC (rev 221) @@ -1,3 +1,15 @@ +2006-05-15 Werner Koch + + * crlfetch.c (crl_fetch): Use no-shutdown flag for HTTP. This + seems to be required for "IBM_HTTP_Server/2.0.47.1 Apache/2.0.47 + (Unix)". + + * http.c (parse_tuple): Set flag to to indicate no value. + (build_rel_path): Take care of it. + + * crlcache.c (crl_cache_reload_crl): Also iterate over all names + within a DP. + 2005-09-28 Marcus Brinkmann * Makefile.am (dirmngr_LDADD): Add @LIBINTL@ and @LIBICONV@. Modified: trunk/src/crlcache.c =================================================================== --- trunk/src/crlcache.c 2005-11-02 08:05:21 UTC (rev 220) +++ trunk/src/crlcache.c 2006-05-15 20:34:28 UTC (rev 221) @@ -2269,6 +2269,9 @@ &distpoint, &issuername, NULL ))) { + int name_seq; + gpg_error_t last_err = 0; + if (!distpoint && !issuername) { if (DBG_X509) @@ -2278,52 +2281,71 @@ suitable CRL. */ } - /* Get the URIs. */ - xfree (distpoint_uri); distpoint_uri = NULL; xfree (issuername_uri); issuername_uri = NULL; - distpoint_uri = ksba_name_get_uri (distpoint, 0); - issuername_uri = ksba_name_get_uri (issuername, 0); - ksba_name_release (distpoint); distpoint = NULL; - ksba_name_release (issuername); issuername = NULL; - if (!distpoint_uri) - continue; - - if (!strncmp (distpoint_uri, "ldap:", 5) - || !strncmp (distpoint_uri, "ldaps:", 6)) + /* Get the URIs. We do this in a loop to iterate over all names + in the crlDP. */ + for (name_seq=0; ksba_name_enum (distpoint, name_seq); name_seq++) { - if (opt.ignore_ldap_dp) + xfree (distpoint_uri); distpoint_uri = NULL; + distpoint_uri = ksba_name_get_uri (distpoint, name_seq); + if (!distpoint_uri) continue; + + if (!strncmp (distpoint_uri, "ldap:", 5) + || !strncmp (distpoint_uri, "ldaps:", 6)) + { + if (opt.ignore_ldap_dp) + continue; + } + else if (!strncmp (distpoint_uri, "http:", 5) + || !strncmp (distpoint_uri, "https:", 6)) + { + if (opt.ignore_http_dp) + continue; + } + else + continue; /* Skip unknown schemes. */ + + any_dist_point = 1; + + if (DBG_X509) + log_debug ("fetching CRL from `%s'\n", distpoint_uri); + err = crl_fetch (ctrl, distpoint_uri, &reader); + if (err) + { + log_error (_("crl_fetch via DP failed: %s\n"), + gpg_strerror (err)); + last_err = err; + continue; /* with the next name. */ + } + + if (DBG_X509) + log_debug ("inserting CRL\n"); + err = crl_cache_insert (ctrl, distpoint_uri, reader); + if (err) + { + log_error (_("crl_cache_insert via DP failed: %s\n"), + gpg_strerror (err)); + last_err = err; + continue; /* with the next name. */ + } + last_err = 0; + break; /* Ready. */ } - else if (!strncmp (distpoint_uri, "http:", 5) - || !strncmp (distpoint_uri, "https:", 6)) + if (last_err) { - if (opt.ignore_http_dp) - continue; - } - else - continue; /* Skip unknown schemes. */ - - any_dist_point = 1; - - if (DBG_X509) - log_debug ("fetching CRL from `%s'\n", distpoint_uri); - err = crl_fetch (ctrl, distpoint_uri, &reader); - if (err) - { - log_error (_("crl_fetch via DP failed: %s\n"), gpg_strerror (err)); + err = last_err; goto leave; } - if (DBG_X509) - log_debug ("inserting CRL\n"); - err = crl_cache_insert (ctrl, distpoint_uri, reader); - if (err) - { - log_error (_("crl_cache_insert via DP failed: %s\n"), - gpg_strerror (err)); - goto leave; - } + ksba_name_release (distpoint); distpoint = NULL; + + /* We don't do anything with issuername_uri yet but we keep the + code for documentation. */ + issuername_uri = ksba_name_get_uri (issuername, 0); + ksba_name_release (issuername); issuername = NULL; + } if (gpg_err_code (err) == GPG_ERR_EOF) err = 0; Modified: trunk/src/crlfetch.c =================================================================== --- trunk/src/crlfetch.c 2005-11-02 08:05:21 UTC (rev 220) +++ trunk/src/crlfetch.c 2006-05-15 20:34:28 UTC (rev 221) @@ -75,7 +75,8 @@ } else err = http_open_document (&hd, url, - opt.honor_http_proxy? HTTP_FLAG_TRY_PROXY:0, + (opt.honor_http_proxy? HTTP_FLAG_TRY_PROXY:0) + |HTTP_FLAG_NO_SHUTDOWN, opt.http_proxy); if (err) Modified: trunk/src/http.c =================================================================== --- trunk/src/http.c 2005-11-02 08:05:21 UTC (rev 220) +++ trunk/src/http.c 2006-05-15 20:34:28 UTC (rev 221) @@ -132,7 +132,7 @@ http_start_data (hd); /* Make sure that we are in the data. */ - /* We dup the socket, to cope with thenfact that fclose closes the + /* We dup the socket, to cope with the fact that fclose closes the underlying socket. */ hd->sock = dup (hd->sock); if (hd->sock == -1) @@ -428,6 +428,7 @@ { tuple->value = p + strlen (p); tuple->valuelen = 0; + tuple->no_value = 1; /* Explicitly mark that we have seen no '='. */ } else /* name and value */ { @@ -547,8 +548,11 @@ { n++; /* '?'/'&' */ n += insert_escapes (NULL, r->name, "%;?&="); - n++; /* '=' */ - n += insert_escapes (NULL, r->value, "%;?&="); + if (!r->no_value) + { + n++; /* '=' */ + n += insert_escapes (NULL, r->value, "%;?&="); + } } n++; @@ -564,10 +568,13 @@ *p++ = r == uri->query ? '?' : '&'; n = insert_escapes (p, r->name, "%;?&="); p += n; - *p++ = '='; - /* TODO: Use valuelen. */ - n = insert_escapes (p, r->value, "%;?&="); - p += n; + if (!r->no_value) + { + *p++ = '='; + /* TODO: Use valuelen. */ + n = insert_escapes (p, r->value, "%;?&="); + p += n; + } } *p = 0; return rel_path; @@ -974,22 +981,30 @@ printf ("Path : %s\n", uri->path); for (r = uri->params; r; r = r->next) { - printf ("Params: %s=%s", r->name, r->value); - if (strlen (r->value) != r->valuelen) - printf (" [real length=%d]", (int) r->valuelen); + printf ("Params: %s", r->name); + if (!r->no_value) + { + printf ("=%s", r->value); + if (strlen (r->value) != r->valuelen) + printf (" [real length=%d]", (int) r->valuelen); + } putchar ('\n'); } for (r = uri->query; r; r = r->next) { - printf ("Query : %s=%s", r->name, r->value); - if (strlen (r->value) != r->valuelen) - printf (" [real length=%d]", (int) r->valuelen); + printf ("Query : %s", r->name); + if (!r->no_value) + { + printf ("=%s", r->value); + if (strlen (r->value) != r->valuelen) + printf (" [real length=%d]", (int) r->valuelen); + } putchar ('\n'); } http_release_parsed_uri (uri); uri = NULL; - rc = http_open_document (&hd, *argv, 0); + rc = http_open_document (&hd, *argv, HTTP_FLAG_NO_SHUTDOWN, NULL); if (rc) { log_error ("can't get `%s': %s\n", *argv, gpg_strerror (rc)); Modified: trunk/src/http.h =================================================================== --- trunk/src/http.h 2005-11-02 08:05:21 UTC (rev 220) +++ trunk/src/http.h 2006-05-15 20:34:28 UTC (rev 221) @@ -26,6 +26,7 @@ char *value; /* A pointer to value (a Nul is always appended). */ size_t valuelen; /* The real length of the value; we need it because the value may contain embedded Nuls */ + int no_value; /* True if no value has been given inthe URL */ }; typedef struct uri_tuple_s *uri_tuple_t; From cvs at cvs.gnupg.org Tue May 16 11:54:42 2006 From: cvs at cvs.gnupg.org (svn author wk) Date: Tue May 16 11:21:56 2006 Subject: [svn] GnuPG - r4133 - branches/GNUPG-1-9-BRANCH/tests/extrasamples Message-ID: Author: wk Date: 2006-05-16 11:54:41 +0200 (Tue, 16 May 2006) New Revision: 4133 Added: branches/GNUPG-1-9-BRANCH/tests/extrasamples/siemens-ZZZZZ000.crt branches/GNUPG-1-9-BRANCH/tests/extrasamples/siemens-ZZZZZ0EE.crt Modified: branches/GNUPG-1-9-BRANCH/tests/extrasamples/README Log: Added sample certificates. Modified: branches/GNUPG-1-9-BRANCH/tests/extrasamples/README =================================================================== --- branches/GNUPG-1-9-BRANCH/tests/extrasamples/README 2006-05-10 02:09:27 UTC (rev 4132) +++ branches/GNUPG-1-9-BRANCH/tests/extrasamples/README 2006-05-16 09:54:41 UTC (rev 4133) @@ -1,5 +1,11 @@ -Extra test data where it is not clear whether we may distribute them. This +Extra test data where it is not clear whether we may distribute them. Thus we only keep them in the CVS. dod-test9.p12 A file from the DoD X.509 tests suite, September 2001. Passphrase is "password". + +siemens-ZZZZZ000.crt +siemens-ZZZZZ0EE.crt + Two certificates from the Siemens CA featuring a trailing + garbage byte and crlDPs with several names. + Added: branches/GNUPG-1-9-BRANCH/tests/extrasamples/siemens-ZZZZZ000.crt =================================================================== (Binary files differ) Property changes on: branches/GNUPG-1-9-BRANCH/tests/extrasamples/siemens-ZZZZZ000.crt ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: branches/GNUPG-1-9-BRANCH/tests/extrasamples/siemens-ZZZZZ0EE.crt =================================================================== (Binary files differ) Property changes on: branches/GNUPG-1-9-BRANCH/tests/extrasamples/siemens-ZZZZZ0EE.crt ___________________________________________________________________ Name: svn:mime-type + application/octet-stream From cvs at cvs.gnupg.org Tue May 16 12:20:39 2006 From: cvs at cvs.gnupg.org (svn author wk) Date: Tue May 16 11:48:02 2006 Subject: [svn] ksba - r241 - trunk Message-ID: Author: wk Date: 2006-05-16 12:20:39 +0200 (Tue, 16 May 2006) New Revision: 241 Modified: trunk/NEWS trunk/configure.ac Log: Post release update Modified: trunk/NEWS =================================================================== --- trunk/NEWS 2006-05-16 10:13:41 UTC (rev 240) +++ trunk/NEWS 2006-05-16 10:20:39 UTC (rev 241) @@ -1,6 +1,10 @@ -Noteworthy changes in version 0.9.14 +Noteworthy changes in version 0.9.15 ------------------------------------------------- + +Noteworthy changes in version 0.9.14 (2006-05-16) +------------------------------------------------- + * Fixed broken OCSP requests. * Ignore invalid bytes appended to a certificate. Modified: trunk/configure.ac =================================================================== --- trunk/configure.ac 2006-05-16 10:13:41 UTC (rev 240) +++ trunk/configure.ac 2006-05-16 10:20:39 UTC (rev 241) @@ -23,7 +23,7 @@ # Version number: Remember to change immediately *after* a release. # Append a "-cvs" for non-released versions. -AC_INIT(libksba, 0.9.14, gpa-dev@gnupg.org) +AC_INIT(libksba, 0.9.15-cvs, gpa-dev@gnupg.org) # LT Version numbers: Remember to change them just *before* a release. # (Interfaces removed: CURRENT++, AGE=0, REVISION=0) # (Interfaces added: CURRENT++, AGE++, REVISION=0) From cvs at cvs.gnupg.org Tue May 16 12:26:20 2006 From: cvs at cvs.gnupg.org (svn author wk) Date: Tue May 16 11:53:37 2006 Subject: [svn] dirmngr - r222 - trunk Message-ID: Author: wk Date: 2006-05-16 12:26:19 +0200 (Tue, 16 May 2006) New Revision: 222 Modified: trunk/ChangeLog trunk/NEWS trunk/config.guess trunk/config.sub trunk/configure.ac Log: About to release 0.9.4 Modified: trunk/ChangeLog =================================================================== --- trunk/ChangeLog 2006-05-15 20:34:28 UTC (rev 221) +++ trunk/ChangeLog 2006-05-16 10:26:19 UTC (rev 222) @@ -1,3 +1,9 @@ +2006-05-16 Werner Koch + + Released 0.9.4. + + * config.sub, config.guess: Updated. + 2006-05-15 Werner Koch * configure.ac: Use -Wno-pointer-sign if available. Modified: trunk/NEWS =================================================================== --- trunk/NEWS 2006-05-15 20:34:28 UTC (rev 221) +++ trunk/NEWS 2006-05-16 10:26:19 UTC (rev 222) @@ -1,9 +1,9 @@ -Noteworthy changes in version 0.9.4 +Noteworthy changes in version 0.9.4 (2006-05-16) ------------------------------------------------ * Try all names of each crlDP. - * Don't shutdown tthe socket after sending the HTTP request. + * Don't shutdown the socket after sending the HTTP request. Noteworthy changes in version 0.9.3 (2005-10-26) Modified: trunk/config.guess =================================================================== --- trunk/config.guess 2006-05-15 20:34:28 UTC (rev 221) +++ trunk/config.guess 2006-05-16 10:26:19 UTC (rev 222) @@ -1,9 +1,9 @@ #! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -# 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. +# 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. -timestamp='2004-08-13' +timestamp='2006-02-23' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by @@ -17,13 +17,15 @@ # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +# 02110-1301, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. + # Originally written by Per Bothner . # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. @@ -53,7 +55,7 @@ GNU config.guess ($timestamp) Originally written by Per Bothner. -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO @@ -66,11 +68,11 @@ while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) - echo "$timestamp" ; exit 0 ;; + echo "$timestamp" ; exit ;; --version | -v ) - echo "$version" ; exit 0 ;; + echo "$version" ; exit ;; --help | --h* | -h ) - echo "$usage"; exit 0 ;; + echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. @@ -104,7 +106,7 @@ trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; - { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; @@ -123,7 +125,7 @@ ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; -esac ;' +esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) @@ -196,55 +198,23 @@ # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" - exit 0 ;; - amd64:OpenBSD:*:*) - echo x86_64-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - amiga:OpenBSD:*:*) - echo m68k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - cats:OpenBSD:*:*) - echo arm-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - hp300:OpenBSD:*:*) - echo m68k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - luna88k:OpenBSD:*:*) - echo m88k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - mac68k:OpenBSD:*:*) - echo m68k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - macppc:OpenBSD:*:*) - echo powerpc-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - mvme68k:OpenBSD:*:*) - echo m68k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - mvme88k:OpenBSD:*:*) - echo m88k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - mvmeppc:OpenBSD:*:*) - echo powerpc-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - sgi:OpenBSD:*:*) - echo mips64-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - sun3:OpenBSD:*:*) - echo m68k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; + exit ;; *:OpenBSD:*:*) - echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; + UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} + exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} - exit 0 ;; + exit ;; + *:SolidBSD:*:*) + echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} + exit ;; macppc:MirBSD:*:*) echo powerppc-unknown-mirbsd${UNAME_RELEASE} - exit 0 ;; + exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} - exit 0 ;; + exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) @@ -297,37 +267,43 @@ # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - exit 0 ;; + exit ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix - exit 0 ;; + exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 - exit 0 ;; + exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 - exit 0;; + exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos - exit 0 ;; + exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos - exit 0 ;; + exit ;; *:OS/390:*:*) echo i370-ibm-openedition - exit 0 ;; + exit ;; + *:z/VM:*:*) + echo s390-ibm-zvmoe + exit ;; *:OS400:*:*) echo powerpc-ibm-os400 - exit 0 ;; + exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} - exit 0;; + exit ;; + arm:riscos:*:*|arm:RISCOS:*:*) + echo arm-unknown-riscos + exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp - exit 0;; + exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then @@ -335,32 +311,32 @@ else echo pyramid-pyramid-bsd fi - exit 0 ;; + exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 - exit 0 ;; + exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 - exit 0 ;; - DRS?6000:UNIX_SV:4.2*:7*) + exit ;; + DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in - sparc) echo sparc-icl-nx7 && exit 0 ;; + sparc) echo sparc-icl-nx7; exit ;; esac ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit 0 ;; + exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit 0 ;; + exit ;; i86pc:SunOS:5.*:*) echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit 0 ;; + exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit 0 ;; + exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) @@ -369,10 +345,10 @@ esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` - exit 0 ;; + exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} - exit 0 ;; + exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 @@ -384,10 +360,10 @@ echo sparc-sun-sunos${UNAME_RELEASE} ;; esac - exit 0 ;; + exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} - exit 0 ;; + exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor @@ -398,40 +374,40 @@ # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} - exit 0 ;; + exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} - exit 0 ;; + exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} - exit 0 ;; + exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} - exit 0 ;; + exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} - exit 0 ;; + exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} - exit 0 ;; + exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} - exit 0 ;; + exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} - exit 0 ;; + exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 - exit 0 ;; + exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} - exit 0 ;; + exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} - exit 0 ;; + exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} - exit 0 ;; + exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c @@ -455,32 +431,33 @@ exit (-1); } EOF - $CC_FOR_BUILD -o $dummy $dummy.c \ - && $dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \ - && exit 0 + $CC_FOR_BUILD -o $dummy $dummy.c && + dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && + SYSTEM_NAME=`$dummy $dummyarg` && + { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} - exit 0 ;; + exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax - exit 0 ;; + exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax - exit 0 ;; + exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax - exit 0 ;; + exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix - exit 0 ;; + exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 - exit 0 ;; + exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 - exit 0 ;; + exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 - exit 0 ;; + exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` @@ -496,29 +473,29 @@ else echo i586-dg-dgux${UNAME_RELEASE} fi - exit 0 ;; + exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 - exit 0 ;; + exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 - exit 0 ;; + exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 - exit 0 ;; + exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd - exit 0 ;; + exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` - exit 0 ;; + exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. - echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id - exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix - exit 0 ;; + exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` @@ -526,7 +503,7 @@ IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} - exit 0 ;; + exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build @@ -541,14 +518,18 @@ exit(0); } EOF - $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0 - echo rs6000-ibm-aix3.2.5 + if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` + then + echo "$SYSTEM_NAME" + else + echo rs6000-ibm-aix3.2.5 + fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi - exit 0 ;; + exit ;; *:AIX:*:[45]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then @@ -562,28 +543,28 @@ IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} - exit 0 ;; + exit ;; *:AIX:*:*) echo rs6000-ibm-aix - exit 0 ;; + exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 - exit 0 ;; + exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to - exit 0 ;; # report: romp-ibm BSD 4.3 + exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx - exit 0 ;; + exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 - exit 0 ;; + exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd - exit 0 ;; + exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 - exit 0 ;; + exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in @@ -645,9 +626,19 @@ esac if [ ${HP_ARCH} = "hppa2.0w" ] then - # avoid double evaluation of $set_cc_for_build - test -n "$CC_FOR_BUILD" || eval $set_cc_for_build - if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E -) | grep __LP64__ >/dev/null + eval $set_cc_for_build + + # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating + # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler + # generating 64-bit code. GNU and HP use different nomenclature: + # + # $ CC_FOR_BUILD=cc ./config.guess + # => hppa2.0w-hp-hpux11.23 + # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess + # => hppa64-hp-hpux11.23 + + if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | + grep __LP64__ >/dev/null then HP_ARCH="hppa2.0w" else @@ -655,11 +646,11 @@ fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} - exit 0 ;; + exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} - exit 0 ;; + exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c @@ -687,152 +678,177 @@ exit (0); } EOF - $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0 + $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 - exit 0 ;; + exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd - exit 0 ;; + exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd - exit 0 ;; + exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix - exit 0 ;; + exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf - exit 0 ;; + exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf - exit 0 ;; + exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi - exit 0 ;; + exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites - exit 0 ;; + exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd - exit 0 ;; + exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi - exit 0 ;; + exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd - exit 0 ;; + exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd - exit 0 ;; + exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd - exit 0 ;; + exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit 0 ;; + exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' - exit 0 ;; + exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit 0 ;; + exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit 0 ;; + exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit 0 ;; + exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit 0 ;; + exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit 0 ;; + exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit 0 ;; + exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} - exit 0 ;; + exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} - exit 0 ;; + exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} - exit 0 ;; + exit ;; *:FreeBSD:*:*) - echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` - exit 0 ;; + case ${UNAME_MACHINE} in + pc98) + echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + *) + echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + esac + exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin - exit 0 ;; + exit ;; i*:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 - exit 0 ;; + exit ;; + i*:MSYS_NT-*:*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit ;; + i*:windows32*:*) + # uname -m includes "-pc" on this system. + echo ${UNAME_MACHINE}-mingw32 + exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 - exit 0 ;; - x86:Interix*:[34]*) - echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//' - exit 0 ;; + exit ;; + x86:Interix*:[345]*) + echo i586-pc-interix${UNAME_RELEASE} + exit ;; + EM64T:Interix*:[345]*) + echo x86_64-unknown-interix${UNAME_RELEASE} + exit ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks - exit 0 ;; + exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix - exit 0 ;; + exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin - exit 0 ;; + exit ;; + amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) + echo x86_64-unknown-cygwin + exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin - exit 0 ;; + exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit 0 ;; + exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` - exit 0 ;; + exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu - exit 0 ;; + exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix - exit 0 ;; + exit ;; arm*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu - exit 0 ;; + exit ;; cris:Linux:*:*) echo cris-axis-linux-gnu - exit 0 ;; + exit ;; + crisv32:Linux:*:*) + echo crisv32-axis-linux-gnu + exit ;; + frv:Linux:*:*) + echo frv-unknown-linux-gnu + exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu - exit 0 ;; + exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu - exit 0 ;; + exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu - exit 0 ;; + exit ;; mips:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c @@ -849,8 +865,12 @@ #endif #endif EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` - test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0 + eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' + /^CPU/{ + s: ::g + p + }'`" + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; mips64:Linux:*:*) eval $set_cc_for_build @@ -868,15 +888,22 @@ #endif #endif EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` - test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0 + eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' + /^CPU/{ + s: ::g + p + }'`" + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; + or32:Linux:*:*) + echo or32-unknown-linux-gnu + exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-gnu - exit 0 ;; + exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-gnu - exit 0 ;; + exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; @@ -890,7 +917,7 @@ objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} - exit 0 ;; + exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in @@ -898,25 +925,28 @@ PA8*) echo hppa2.0-unknown-linux-gnu ;; *) echo hppa-unknown-linux-gnu ;; esac - exit 0 ;; + exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-gnu - exit 0 ;; + exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux - exit 0 ;; + exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu - exit 0 ;; + exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu - exit 0 ;; + exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu - exit 0 ;; + exit ;; + vax:Linux:*:*) + echo ${UNAME_MACHINE}-dec-linux-gnu + exit ;; x86_64:Linux:*:*) echo x86_64-unknown-linux-gnu - exit 0 ;; + exit ;; i*86:Linux:*:*) # The BFD linker knows what the default object file format is, so # first see if it will tell us. cd to the root directory to prevent @@ -934,15 +964,15 @@ ;; a.out-i386-linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" - exit 0 ;; + exit ;; coff-i386) echo "${UNAME_MACHINE}-pc-linux-gnucoff" - exit 0 ;; + exit ;; "") # Either a pre-BFD a.out linker (linux-gnuoldld) or # one that does not give us useful --help. echo "${UNAME_MACHINE}-pc-linux-gnuoldld" - exit 0 ;; + exit ;; esac # Determine whether the default compiler is a.out or elf eval $set_cc_for_build @@ -959,7 +989,7 @@ LIBC=gnulibc1 # endif #else - #ifdef __INTEL_COMPILER + #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__sun) LIBC=gnu #else LIBC=gnuaout @@ -969,16 +999,23 @@ LIBC=dietlibc #endif EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=` - test x"${LIBC}" != x && echo "${UNAME_MACHINE}-pc-linux-${LIBC}" && exit 0 - test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0 + eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' + /^LIBC/{ + s: ::g + p + }'`" + test x"${LIBC}" != x && { + echo "${UNAME_MACHINE}-pc-linux-${LIBC}" + exit + } + test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; } ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 - exit 0 ;; + exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... @@ -986,27 +1023,27 @@ # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} - exit 0 ;; + exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx - exit 0 ;; + exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop - exit 0 ;; + exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos - exit 0 ;; - i*86:syllable:*:*) + exit ;; + i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable - exit 0 ;; + exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) echo i386-unknown-lynxos${UNAME_RELEASE} - exit 0 ;; + exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp - exit 0 ;; + exit ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then @@ -1014,15 +1051,16 @@ else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi - exit 0 ;; - i*86:*:5:[78]*) + exit ;; + i*86:*:5:[678]*) + # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} - exit 0 ;; + exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi - exit 0 ;; + exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv - exit 0 ;; + exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv - exit 0 ;; + exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix - exit 0 ;; + exit ;; M68*:*:R3V[5678]*:*) - test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;; + test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && echo i486-ncr-sysv4.3${OS_REL} && exit 0 + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ - && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;; + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && echo i486-ncr-sysv4 && exit 0 ;; + && { echo i486-ncr-sysv4; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} - exit 0 ;; + exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 - exit 0 ;; + exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} - exit 0 ;; + exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} - exit 0 ;; + exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} - exit 0 ;; + exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} - exit 0 ;; + exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 - exit 0 ;; + exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 - exit 0 ;; + exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` @@ -1114,69 +1152,72 @@ else echo ns32k-sni-sysv fi - exit 0 ;; + exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 - exit 0 ;; + exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 - exit 0 ;; + exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 - exit 0 ;; + exit ;; + i*86:VOS:*:*) + # From Paul.Green@stratus.com. + echo ${UNAME_MACHINE}-stratus-vos + exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos - exit 0 ;; + exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} - exit 0 ;; + exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 - exit 0 ;; + exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi - exit 0 ;; + exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos - exit 0 ;; + exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos - exit 0 ;; + exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos - exit 0 ;; + exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} - exit 0 ;; + exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} - exit 0 ;; + exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} - exit 0 ;; + exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} - exit 0 ;; + exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} - exit 0 ;; + exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown case $UNAME_PROCESSOR in - *86) UNAME_PROCESSOR=i686 ;; unknown) UNAME_PROCESSOR=powerpc ;; esac echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} - exit 0 ;; + exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then @@ -1184,22 +1225,25 @@ UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} - exit 0 ;; + exit ;; *:QNX:*:4*) echo i386-pc-qnx - exit 0 ;; + exit ;; + NSE-?:NONSTOP_KERNEL:*:*) + echo nse-tandem-nsk${UNAME_RELEASE} + exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} - exit 0 ;; + exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux - exit 0 ;; + exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv - exit 0 ;; + exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} - exit 0 ;; + exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 @@ -1210,38 +1254,47 @@ UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 - exit 0 ;; + exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 - exit 0 ;; + exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex - exit 0 ;; + exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 - exit 0 ;; + exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 - exit 0 ;; + exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 - exit 0 ;; + exit ;; *:ITS:*:*) echo pdp10-unknown-its - exit 0 ;; + exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} - exit 0 ;; + exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` - exit 0 ;; + exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in - A*) echo alpha-dec-vms && exit 0 ;; - I*) echo ia64-dec-vms && exit 0 ;; - V*) echo vax-dec-vms && exit 0 ;; - esac + A*) echo alpha-dec-vms ; exit ;; + I*) echo ia64-dec-vms ; exit ;; + V*) echo vax-dec-vms ; exit ;; + esac ;; + *:XENIX:*:SysV) + echo i386-pc-xenix + exit ;; + i*86:skyos:*:*) + echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' + exit ;; + i*86:rdos:*:*) + echo ${UNAME_MACHINE}-pc-rdos + exit ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 @@ -1273,7 +1326,7 @@ #endif #if defined (__arm) && defined (__acorn) && defined (__unix) - printf ("arm-acorn-riscix"); exit (0); + printf ("arm-acorn-riscix\n"); exit (0); #endif #if defined (hp300) && !defined (hpux) @@ -1362,11 +1415,12 @@ } EOF -$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && $dummy && exit 0 +$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. -test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; } +test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } # Convex versions that predate uname can use getsysinfo(1) @@ -1375,22 +1429,22 @@ case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd - exit 0 ;; + exit ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi - exit 0 ;; + exit ;; c34*) echo c34-convex-bsd - exit 0 ;; + exit ;; c38*) echo c38-convex-bsd - exit 0 ;; + exit ;; c4*) echo c4-convex-bsd - exit 0 ;; + exit ;; esac fi @@ -1401,7 +1455,9 @@ the operating system you are using. It is advised that you download the most up to date version of the config scripts from - ftp://ftp.gnu.org/pub/gnu/config/ + http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.guess +and + http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.sub If the version you run ($0) is already up to date, please send the following data and any information you think might be Modified: trunk/config.sub =================================================================== --- trunk/config.sub 2006-05-15 20:34:28 UTC (rev 221) +++ trunk/config.sub 2006-05-16 10:26:19 UTC (rev 222) @@ -1,9 +1,9 @@ #! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -# 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. +# 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. -timestamp='2004-06-24' +timestamp='2006-02-23' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software @@ -21,14 +21,15 @@ # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, -# Boston, MA 02111-1307, USA. - +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +# 02110-1301, USA. +# # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. + # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # @@ -70,7 +71,7 @@ version="\ GNU config.sub ($timestamp) -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO @@ -83,11 +84,11 @@ while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) - echo "$timestamp" ; exit 0 ;; + echo "$timestamp" ; exit ;; --version | -v ) - echo "$version" ; exit 0 ;; + echo "$version" ; exit ;; --help | --h* | -h ) - echo "$usage"; exit 0 ;; + echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. @@ -99,7 +100,7 @@ *local*) # First pass through any local machine types. echo $1 - exit 0;; + exit ;; * ) break ;; @@ -118,8 +119,9 @@ # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in - nto-qnx* | linux-gnu* | linux-dietlibc | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | \ - kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*) + nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \ + uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ + storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; @@ -170,6 +172,10 @@ -hiux*) os=-hiuxwe2 ;; + -sco6) + os=-sco5v6 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` @@ -186,6 +192,10 @@ # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; + -sco5v6*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` @@ -231,13 +241,14 @@ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \ + | bfin \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ - | m32r | m32rle | m68000 | m68k | m88k | mcore \ + | m32r | m32rle | m68000 | m68k | m88k | maxq | mb | microblaze | mcore \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ @@ -246,6 +257,7 @@ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ + | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ @@ -254,23 +266,29 @@ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ + | mt \ | msp430 \ + | nios | nios2 \ | ns16k | ns32k \ - | openrisc | or32 \ + | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ | pyramid \ - | sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \ + | sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ - | sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv8 | sparcv9 | sparcv9b \ + | sparc | sparc64 | sparc64b | sparc86x | sparclet | sparclite \ + | sparcv8 | sparcv9 | sparcv9b \ | strongarm \ | tahoe | thumb | tic4x | tic80 | tron \ | v850 | v850e \ | we32k \ - | x86 | xscale | xstormy16 | xtensa \ + | x86 | xscale | xscalee[bl] | xstormy16 | xtensa \ | z8k) basic_machine=$basic_machine-unknown ;; + m32c) + basic_machine=$basic_machine-unknown + ;; m6811 | m68hc11 | m6812 | m68hc12) # Motorola 68HC11/12. basic_machine=$basic_machine-unknown @@ -278,6 +296,9 @@ ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; + ms1) + basic_machine=mt-unknown + ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and @@ -298,7 +319,7 @@ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* \ - | bs2000-* \ + | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ @@ -310,7 +331,7 @@ | ip2k-* | iq2000-* \ | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ - | m88110-* | m88k-* | mcore-* \ + | m88110-* | m88k-* | maxq-* | mcore-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ @@ -319,6 +340,7 @@ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ + | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ @@ -327,27 +349,32 @@ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ + | mt-* \ | msp430-* \ + | nios-* | nios2-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ | pyramid-* \ | romp-* | rs6000-* \ - | sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \ + | sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ - | sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \ + | sparc-* | sparc64-* | sparc64b-* | sparc86x-* | sparclet-* \ + | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \ | tahoe-* | thumb-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tron-* \ | v850-* | v850e-* | vax-* \ | we32k-* \ - | x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \ - | xtensa-* \ + | x86-* | x86_64-* | xps100-* | xscale-* | xscalee[bl]-* \ + | xstormy16-* | xtensa-* \ | ymp-* \ | z8k-*) ;; + m32c-*) + ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) @@ -457,6 +484,9 @@ crds | unos) basic_machine=m68k-crds ;; + crisv32 | crisv32-* | etraxfs*) + basic_machine=crisv32-axis + ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; @@ -486,6 +516,10 @@ basic_machine=m88k-motorola os=-sysv3 ;; + djgpp) + basic_machine=i586-pc + os=-msdosdjgpp + ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx @@ -676,6 +710,9 @@ basic_machine=i386-pc os=-msdos ;; + ms1-*) + basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` + ;; mvs) basic_machine=i370-ibm os=-mvs @@ -751,9 +788,8 @@ basic_machine=hppa1.1-oki os=-proelf ;; - or32 | or32-*) + openrisc | openrisc-*) basic_machine=or32-unknown - os=-coff ;; os400) basic_machine=powerpc-ibm @@ -784,6 +820,12 @@ pc532 | pc532-*) basic_machine=ns32k-pc532 ;; + pc98) + basic_machine=i386-pc + ;; + pc98-*) + basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; @@ -840,6 +882,10 @@ basic_machine=i586-unknown os=-pw32 ;; + rdos) + basic_machine=i386-pc + os=-rdos + ;; rom68k) basic_machine=m68k-rom68k os=-coff @@ -1026,6 +1072,10 @@ basic_machine=hppa1.1-winbond os=-proelf ;; + xbox) + basic_machine=i686-pc + os=-mingw32 + ;; xps | xps100) basic_machine=xps100-honeywell ;; @@ -1075,12 +1125,9 @@ we32k) basic_machine=we32k-att ;; - sh3 | sh4 | sh[34]eb | sh[1234]le | sh[23]ele) + sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; - sh64) - basic_machine=sh64-unknown - ;; sparc | sparcv8 | sparcv9 | sparcv9b) basic_machine=sparc-sun ;; @@ -1154,20 +1201,23 @@ | -aos* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ - | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* | -openbsd* \ + | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ + | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* \ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ - | -mingw32* | -linux-gnu* | -linux-uclibc* | -uxpv* | -beos* | -mpeix* | -udk* \ + | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \ + | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ - | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly*) + | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ + | -skyos* | -haiku* | -rdos*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) @@ -1185,7 +1235,7 @@ os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ - | -windows* | -osx | -abug | -netware* | -os9* | -beos* \ + | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) @@ -1294,6 +1344,9 @@ -kaos*) os=-kaos ;; + -zvmoe) + os=-zvmoe + ;; -none) ;; *) @@ -1371,6 +1424,9 @@ *-be) os=-beos ;; + *-haiku) + os=-haiku + ;; *-ibm) os=-aix ;; @@ -1542,7 +1598,7 @@ esac echo $basic_machine$os -exit 0 +exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) Modified: trunk/configure.ac =================================================================== --- trunk/configure.ac 2006-05-15 20:34:28 UTC (rev 221) +++ trunk/configure.ac 2006-05-16 10:26:19 UTC (rev 222) @@ -1,6 +1,6 @@ # configure.ac - for DirMngr # Copyright (C) 2002 Klar?lvdalens Datakonsult AB -# Copyright (C) 2003, 2004, 2005 g10 Code GmbH +# Copyright (C) 2003, 2004, 2005, 2006 g10 Code GmbH # # This file is part of DirMngr. # @@ -22,7 +22,7 @@ AC_PREREQ(2.59) min_automake_version="1.9.3" -AC_INIT(dirmngr, 0.9.4-cvs, gpa-dev@gnupg.org) +AC_INIT(dirmngr, 0.9.4, gpa-dev@gnupg.org) NEED_GPG_ERROR_VERSION=0.7 From cvs at cvs.gnupg.org Tue May 16 12:35:01 2006 From: cvs at cvs.gnupg.org (svn author wk) Date: Tue May 16 12:02:15 2006 Subject: [svn] dirmngr - r223 - tags Message-ID: Author: wk Date: 2006-05-16 12:35:00 +0200 (Tue, 16 May 2006) New Revision: 223 Added: tags/dirmngr-0.9.4/ Log: Tagged release Copied: tags/dirmngr-0.9.4 (from rev 222, trunk) From cvs at cvs.gnupg.org Tue May 16 12:38:37 2006 From: cvs at cvs.gnupg.org (svn author wk) Date: Tue May 16 12:05:51 2006 Subject: [svn] dirmngr - r224 - in trunk: . po Message-ID: Author: wk Date: 2006-05-16 12:38:37 +0200 (Tue, 16 May 2006) New Revision: 224 Modified: trunk/NEWS trunk/configure.ac trunk/po/de.po trunk/po/dirmngr.pot Log: post release updates Modified: trunk/NEWS =================================================================== --- trunk/NEWS 2006-05-16 10:35:00 UTC (rev 223) +++ trunk/NEWS 2006-05-16 10:38:37 UTC (rev 224) @@ -1,3 +1,9 @@ +Noteworthy changes in version 0.9.5 (unreleased) +------------------------------------------------ + + + + Noteworthy changes in version 0.9.4 (2006-05-16) ------------------------------------------------ Modified: trunk/configure.ac =================================================================== --- trunk/configure.ac 2006-05-16 10:35:00 UTC (rev 223) +++ trunk/configure.ac 2006-05-16 10:38:37 UTC (rev 224) @@ -22,7 +22,7 @@ AC_PREREQ(2.59) min_automake_version="1.9.3" -AC_INIT(dirmngr, 0.9.4, gpa-dev@gnupg.org) +AC_INIT(dirmngr, 0.9.5-cvs, gpa-dev@gnupg.org) NEED_GPG_ERROR_VERSION=0.7 Modified: trunk/po/de.po =================================================================== --- trunk/po/de.po 2006-05-16 10:35:00 UTC (rev 223) +++ trunk/po/de.po 2006-05-16 10:38:37 UTC (rev 224) @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: dirmngr 0.9.2\n" "Report-Msgid-Bugs-To: gpa-dev@gnupg.org\n" -"POT-Creation-Date: 2005-09-12 19:45+0200\n" +"POT-Creation-Date: 2006-05-16 11:53+0200\n" "PO-Revision-Date: 2005-11-02 08:26+0100\n" "Last-Translator: Werner Koch \n" "Language-Team: de\n" @@ -23,17 +23,21 @@ #: src/certcache.c:88 #, c-format msgid "can't acquire read lock on the certificate cache: %s\n" -msgstr "Lesesperre f?r den Zertifikatzwischenspeicher kann nicht gesetzt werden: %s\n" +msgstr "" +"Lesesperre f?r den Zertifikatzwischenspeicher kann nicht gesetzt werden: %s\n" #: src/certcache.c:96 #, c-format msgid "can't acquire write lock on the certificate cache: %s\n" -msgstr "Schreibsperre f?r den Zertifikatzwischenspeicher kann nicht gesetzt werden: %s\n" +msgstr "" +"Schreibsperre f?r den Zertifikatzwischenspeicher kann nicht gesetzt werden: %" +"s\n" #: src/certcache.c:104 #, c-format msgid "can't release lock on the certificate cache: %s\n" -msgstr "Sperre f?r den Zertifikatzwischenspeicher kann nicht freigegeben werden: %s\n" +msgstr "" +"Sperre f?r den Zertifikatzwischenspeicher kann nicht freigegeben werden: %s\n" #: src/certcache.c:231 #, c-format @@ -165,22 +169,26 @@ #: src/crlcache.c:378 src/crlcache.c:702 #, c-format msgid "failed to open cache dir file `%s': %s\n" -msgstr "Die Zwischenspeicherverzeichnisdatei `%s' konnte nicht ge?ffnet werden: %s\n" +msgstr "" +"Die Zwischenspeicherverzeichnisdatei `%s' konnte nicht ge?ffnet werden: %s\n" #: src/crlcache.c:388 #, c-format msgid "error creating new cache dir file `%s': %s\n" -msgstr "Fehler beim Erzeugen der neuen Zwischenspeicherverzeichnisdatei `%s': %s\n" +msgstr "" +"Fehler beim Erzeugen der neuen Zwischenspeicherverzeichnisdatei `%s': %s\n" #: src/crlcache.c:395 #, c-format msgid "error writing new cache dir file `%s': %s\n" -msgstr "Fehler beim Schreiben der neuen Zwischenspeicherverzeichnisdatei `%s': %s\n" +msgstr "" +"Fehler beim Schreiben der neuen Zwischenspeicherverzeichnisdatei `%s': %s\n" #: src/crlcache.c:402 #, c-format msgid "error closing new cache dir file `%s': %s\n" -msgstr "Fehler beim Schlie?en der neuen Zwischenspeicherverzeichnisdatei `%s': %s\n" +msgstr "" +"Fehler beim Schlie?en der neuen Zwischenspeicherverzeichnisdatei `%s': %s\n" #: src/crlcache.c:407 #, c-format @@ -190,7 +198,8 @@ #: src/crlcache.c:412 #, c-format msgid "failed to re-open cache dir file `%s': %s\n" -msgstr "Fehler beim Wieder?ffnen der Zwischenspeicherverzeichnisdatei `%s': %s\n" +msgstr "" +"Fehler beim Wieder?ffnen der Zwischenspeicherverzeichnisdatei `%s': %s\n" #: src/crlcache.c:439 #, c-format @@ -252,7 +261,9 @@ #: src/crlcache.c:735 #, c-format msgid "failed to create temporary cache dir file `%s': %s\n" -msgstr "Die tempor?re Zwischenspeicherverzeichnisdatei `%s' konnte nicht erzeugt werden: %s\n" +msgstr "" +"Die tempor?re Zwischenspeicherverzeichnisdatei `%s' konnte nicht erzeugt " +"werden: %s\n" #: src/crlcache.c:808 #, c-format @@ -291,7 +302,9 @@ #: src/crlcache.c:977 msgid "too many open cache files; can't open anymore\n" -msgstr "Zu viele ge?ffnete Zwischenspeicherdateien; weitere kann nicht ge?ffnet werden\n" +msgstr "" +"Zu viele ge?ffnete Zwischenspeicherdateien; weitere kann nicht ge?ffnet " +"werden\n" #: src/crlcache.c:994 #, c-format @@ -306,7 +319,8 @@ #: src/crlcache.c:1022 #, c-format msgid "error initializing cache file `%s' for reading: %s\n" -msgstr "Fehler beim Initialisieren der Zwischenspeicherdatei `%s' zum Lesen: %s\n" +msgstr "" +"Fehler beim Initialisieren der Zwischenspeicherdatei `%s' zum Lesen: %s\n" #: src/crlcache.c:1044 msgid "calling unlock_db_file on a closed file\n" @@ -443,7 +457,8 @@ #: src/crlcache.c:1659 #, c-format msgid "error inserting item into temporary cache file: %s\n" -msgstr "Fehler beim Einf?gen eines Items in die tempor?re Zwischenspeicherdatei: %s\n" +msgstr "" +"Fehler beim Einf?gen eines Items in die tempor?re Zwischenspeicherdatei: %s\n" #: src/crlcache.c:1686 #, c-format @@ -483,7 +498,8 @@ #: src/crlcache.c:1911 #, c-format msgid "problem removing stale temporary cache file `%s': %s\n" -msgstr "Problem beim L?schen der alten tempor?ren Zwischenspeicherdatei `%s': %s\n" +msgstr "" +"Problem beim L?schen der alten tempor?ren Zwischenspeicherdatei `%s': %s\n" #: src/crlcache.c:1921 #, c-format @@ -498,7 +514,8 @@ #: src/crlcache.c:1940 #, c-format msgid "error finishing temporary cache file `%s': %s\n" -msgstr "Fehler beim Fertigstellen der tempor?ren Zwischenspeicherdatei `%s': %s\n" +msgstr "" +"Fehler beim Fertigstellen der tempor?ren Zwischenspeicherdatei `%s': %s\n" #: src/crlcache.c:1947 #, c-format @@ -541,7 +558,9 @@ msgid "" "updating the DIR file failed - cache entry will get lost with the next " "program start\n" -msgstr "Update der Zwischenspeicherverzeichnisdatei fehlgeschlagen - Zwischenspeichereintrag wird mit dem n?chste Programmstart verloren gehen\n" +msgstr "" +"Update der Zwischenspeicherverzeichnisdatei fehlgeschlagen - " +"Zwischenspeichereintrag wird mit dem n?chste Programmstart verloren gehen\n" #: src/crlcache.c:2090 #, c-format @@ -600,27 +619,27 @@ msgid "End CRL dump\n" msgstr "Ende CRL Ausgabe\n" -#: src/crlcache.c:2236 src/crlfetch.c:97 src/ldap.c:699 +#: src/crlcache.c:2236 src/crlfetch.c:98 src/ldap.c:699 #, c-format msgid "error initializing reader object: %s\n" msgstr "Fehler beim Initialisieren des \"reader\" Objekts: %s\n" -#: src/crlcache.c:2314 +#: src/crlcache.c:2317 #, c-format msgid "crl_fetch via DP failed: %s\n" msgstr "crl_fetch ?ber den DP fehlgeschlagen: %s\n" -#: src/crlcache.c:2323 +#: src/crlcache.c:2328 #, c-format msgid "crl_cache_insert via DP failed: %s\n" msgstr "crl_cache_insert ?ber den DP fehlgeschlagen: %s\n" -#: src/crlcache.c:2356 +#: src/crlcache.c:2378 #, c-format msgid "crl_fetch via issuer failed: %s\n" msgstr "crl_fetch ?ber den Issuer fehlgeschlagen: %s\n" -#: src/crlcache.c:2366 +#: src/crlcache.c:2388 #, c-format msgid "crl_cache_insert via issuer failed: %s\n" msgstr "crl_cache_insert ?ber den Issuer fehlgeschlagen: %s\n" @@ -629,22 +648,22 @@ msgid "using \"http\" instead of \"https\"\n" msgstr "Es wird \"HTTP\" anstatt \"HTTPS\" verwendet\n" -#: src/crlfetch.c:72 src/crlfetch.c:116 src/crlfetch.c:136 src/crlfetch.c:154 +#: src/crlfetch.c:72 src/crlfetch.c:117 src/crlfetch.c:137 src/crlfetch.c:155 #, c-format msgid "CRL access not possible due to disabled %s\n" msgstr "CRL Zugriff nicht m?glich da %s abgeschaltet ist\n" -#: src/crlfetch.c:82 +#: src/crlfetch.c:83 #, c-format msgid "error retrieving `%s': %s\n" msgstr "Fehler beim Holen von `%s': %s\n" -#: src/crlfetch.c:85 +#: src/crlfetch.c:86 #, c-format msgid "error retrieving `%s': http status %u\n" msgstr "Fehler beim Holen von `%s': HTTP Status %u\n" -#: src/crlfetch.c:168 +#: src/crlfetch.c:169 #, c-format msgid "certificate search not possible due to disabled %s\n" msgstr "Zertifikatsuche ist nicht m?glich da %s abgeschaltet ist\n" @@ -953,7 +972,9 @@ #: src/dirmngr.c:1310 msgid "SIGHUP received - re-reading configuration and flushing caches\n" -msgstr "SIGHUP empfangen - lese die Konfiguration erneut und l?sche die Zwischenspeicher\n" +msgstr "" +"SIGHUP empfangen - lese die Konfiguration erneut und l?sche die " +"Zwischenspeicher\n" #: src/dirmngr.c:1324 msgid "SIGUSR2 received - no action defined\n" @@ -1001,22 +1022,22 @@ msgid "error spawning connection handler: %s\n" msgstr "Fehler beim Starten des Verbindungshandler: %s\n" -#: src/http.c:475 +#: src/http.c:476 #, c-format msgid "invalid HTTP proxy (%s): %s\n" msgstr "Ung?ltiger HTTP Proxy (%s): %s\n" -#: src/http.c:827 src/http.c:863 +#: src/http.c:834 src/http.c:870 #, c-format msgid "error resolving `%s': host not found\n" msgstr "Fehler beim Aufl?sen von `%s': Host nicht gefunden\n" -#: src/http.c:840 src/http.c:871 +#: src/http.c:847 src/http.c:878 #, c-format msgid "error creating socket: %s\n" msgstr "Fehler beim Erzeugen des Sockets: %s\n" -#: src/http.c:926 +#: src/http.c:933 #, c-format msgid "network write failed: %s\n" msgstr "Schreiben auf dem Netzwerk fehlgeschlagen: %s\n" Modified: trunk/po/dirmngr.pot =================================================================== --- trunk/po/dirmngr.pot 2006-05-16 10:35:00 UTC (rev 223) +++ trunk/po/dirmngr.pot 2006-05-16 10:38:37 UTC (rev 224) @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: gpa-dev@gnupg.org\n" -"POT-Creation-Date: 2005-09-12 19:45+0200\n" +"POT-Creation-Date: 2006-05-16 11:53+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -583,27 +583,27 @@ msgid "End CRL dump\n" msgstr "" -#: src/crlcache.c:2236 src/crlfetch.c:97 src/ldap.c:699 +#: src/crlcache.c:2236 src/crlfetch.c:98 src/ldap.c:699 #, c-format msgid "error initializing reader object: %s\n" msgstr "" -#: src/crlcache.c:2314 +#: src/crlcache.c:2317 #, c-format msgid "crl_fetch via DP failed: %s\n" msgstr "" -#: src/crlcache.c:2323 +#: src/crlcache.c:2328 #, c-format msgid "crl_cache_insert via DP failed: %s\n" msgstr "" -#: src/crlcache.c:2356 +#: src/crlcache.c:2378 #, c-format msgid "crl_fetch via issuer failed: %s\n" msgstr "" -#: src/crlcache.c:2366 +#: src/crlcache.c:2388 #, c-format msgid "crl_cache_insert via issuer failed: %s\n" msgstr "" @@ -612,22 +612,22 @@ msgid "using \"http\" instead of \"https\"\n" msgstr "" -#: src/crlfetch.c:72 src/crlfetch.c:116 src/crlfetch.c:136 src/crlfetch.c:154 +#: src/crlfetch.c:72 src/crlfetch.c:117 src/crlfetch.c:137 src/crlfetch.c:155 #, c-format msgid "CRL access not possible due to disabled %s\n" msgstr "" -#: src/crlfetch.c:82 +#: src/crlfetch.c:83 #, c-format msgid "error retrieving `%s': %s\n" msgstr "" -#: src/crlfetch.c:85 +#: src/crlfetch.c:86 #, c-format msgid "error retrieving `%s': http status %u\n" msgstr "" -#: src/crlfetch.c:168 +#: src/crlfetch.c:169 #, c-format msgid "certificate search not possible due to disabled %s\n" msgstr "" @@ -974,22 +974,22 @@ msgid "error spawning connection handler: %s\n" msgstr "" -#: src/http.c:475 +#: src/http.c:476 #, c-format msgid "invalid HTTP proxy (%s): %s\n" msgstr "" -#: src/http.c:827 src/http.c:863 +#: src/http.c:834 src/http.c:870 #, c-format msgid "error resolving `%s': host not found\n" msgstr "" -#: src/http.c:840 src/http.c:871 +#: src/http.c:847 src/http.c:878 #, c-format msgid "error creating socket: %s\n" msgstr "" -#: src/http.c:926 +#: src/http.c:933 #, c-format msgid "network write failed: %s\n" msgstr "" From cvs at cvs.gnupg.org Tue May 16 12:13:41 2006 From: cvs at cvs.gnupg.org (svn author wk) Date: Tue May 16 12:09:05 2006 Subject: [svn] ksba - r240 - tags Message-ID: Author: wk Date: 2006-05-16 12:13:41 +0200 (Tue, 16 May 2006) New Revision: 240 Added: tags/libksba-0.9.14/ Log: Tagged release Copied: tags/libksba-0.9.14 (from rev 239, trunk) From cvs at cvs.gnupg.org Tue May 16 13:06:28 2006 From: cvs at cvs.gnupg.org (svn author wk) Date: Tue May 16 12:33:43 2006 Subject: [svn] GnuPG - r4134 - trunk Message-ID: Author: wk Date: 2006-05-16 13:06:28 +0200 (Tue, 16 May 2006) New Revision: 4134 Modified: trunk/ChangeLog trunk/README Log: Fixed OSF5 warning suppression. Modified: trunk/ChangeLog =================================================================== --- trunk/ChangeLog 2006-05-16 09:54:41 UTC (rev 4133) +++ trunk/ChangeLog 2006-05-16 11:06:28 UTC (rev 4134) @@ -1,3 +1,10 @@ +2006-05-16 Werner Koch + + * README: Removed note for OSF5 as this is the default now. + Reported by Joerg Honegger. + + * configure.ac [osf5]: Fixed warning name to ptrmismatch1. + 2006-04-27 David Shaw * NEWS: Note SHA-224 and DSA2. Modified: trunk/README =================================================================== --- trunk/README 2006-05-16 09:54:41 UTC (rev 4133) +++ trunk/README 2006-05-16 11:06:28 UTC (rev 4134) @@ -685,11 +685,6 @@ ./configure --with-libiconv-prefix=/sw - * Compaq C V6.2 for alpha: - - You may want to use the option "-msg-disable ptrmismatch1" - to get rid of the sign/unsigned char mismatch warnings. - * IBM RS/6000 running AIX: Due to a change in gcc (since version 2.8) the MPI stuff may From cvs at cvs.gnupg.org Tue May 16 13:08:48 2006 From: cvs at cvs.gnupg.org (svn author wk) Date: Tue May 16 12:36:01 2006 Subject: [svn] GnuPG - r4135 - trunk Message-ID: Author: wk Date: 2006-05-16 13:08:47 +0200 (Tue, 16 May 2006) New Revision: 4135 Modified: trunk/configure.ac Log: Forgot to save the actual fix Modified: trunk/configure.ac =================================================================== --- trunk/configure.ac 2006-05-16 11:06:28 UTC (rev 4134) +++ trunk/configure.ac 2006-05-16 11:08:47 UTC (rev 4135) @@ -530,11 +530,11 @@ ;; *-dec-osf5*) if test -z "$GCC" ; then - # Use the newer compiler `-msg_disable ptrmismatch' to + # Use the newer compiler `-msg_disable ptrmismatch1' to # get rid of the unsigned/signed char mismatch warnings. # Using this may hide other pointer mismatch warnings, but # it at least lets other warning classes through - CFLAGS="$CFLAGS -msg_disable ptrmismatch" + CFLAGS="$CFLAGS -msg_disable ptrmismatch1" fi ;; m68k-atari-mint) From cvs at cvs.gnupg.org Mon May 22 16:35:18 2006 From: cvs at cvs.gnupg.org (svn author marcus) Date: Mon May 22 16:01:56 2006 Subject: [svn] GnuPG - r4137 - branches/GNUPG-1-9-BRANCH/sm Message-ID: Author: marcus Date: 2006-05-22 16:35:04 +0200 (Mon, 22 May 2006) New Revision: 4137 Modified: branches/GNUPG-1-9-BRANCH/sm/ChangeLog branches/GNUPG-1-9-BRANCH/sm/delete.c branches/GNUPG-1-9-BRANCH/sm/keydb.c branches/GNUPG-1-9-BRANCH/sm/keydb.h Log: 2006-05-19 Marcus Brinkmann * keydb.c (keydb_insert_cert): Do not lock here, but only check if it is locked. (keydb_store_cert): Lock here. * keydb.h (keydb_delete): Accept new argument UNLOCK. * keydb.c (keydb_delete): Likewise. Only unlock if this is set. * delete.c (delete_one): Add new argument to invocation of keydb_delete. Modified: branches/GNUPG-1-9-BRANCH/sm/ChangeLog =================================================================== --- branches/GNUPG-1-9-BRANCH/sm/ChangeLog 2006-05-17 08:42:12 UTC (rev 4136) +++ branches/GNUPG-1-9-BRANCH/sm/ChangeLog 2006-05-22 14:35:04 UTC (rev 4137) @@ -1,3 +1,14 @@ +2006-05-19 Marcus Brinkmann + + * keydb.c (keydb_insert_cert): Do not lock here, but only check if + it is locked. + (keydb_store_cert): Lock here. + + * keydb.h (keydb_delete): Accept new argument UNLOCK. + * keydb.c (keydb_delete): Likewise. Only unlock if this is set. + * delete.c (delete_one): Add new argument to invocation of + keydb_delete. + 2006-03-21 Werner Koch * certchain.c (get_regtp_ca_info): New. Modified: branches/GNUPG-1-9-BRANCH/sm/delete.c =================================================================== --- branches/GNUPG-1-9-BRANCH/sm/delete.c 2006-05-17 08:42:12 UTC (rev 4136) +++ branches/GNUPG-1-9-BRANCH/sm/delete.c 2006-05-22 14:35:04 UTC (rev 4137) @@ -124,7 +124,7 @@ goto leave; } - rc = keydb_delete (kh); + rc = keydb_delete (kh, duplicates ? 0 : 1); if (rc) goto leave; if (opt.verbose) Modified: branches/GNUPG-1-9-BRANCH/sm/keydb.c =================================================================== --- branches/GNUPG-1-9-BRANCH/sm/keydb.c 2006-05-17 08:42:12 UTC (rev 4136) +++ branches/GNUPG-1-9-BRANCH/sm/keydb.c 2006-05-22 14:35:04 UTC (rev 4137) @@ -696,9 +696,8 @@ else return gpg_error (GPG_ERR_GENERAL); - rc = lock_all (hd); - if (rc) - return rc; + if (!hd->locked) + return gpg_error (GPG_ERR_NOT_LOCKED); gpgsm_get_fingerprint (cert, GCRY_MD_SHA1, digest, NULL); /* kludge*/ @@ -759,7 +758,7 @@ * The current keyblock or cert will be deleted. */ int -keydb_delete (KEYDB_HANDLE hd) +keydb_delete (KEYDB_HANDLE hd, int unlock) { int rc = -1; @@ -785,7 +784,8 @@ break; } - unlock_all (hd); + if (unlock) + unlock_all (hd); return rc; } @@ -1337,6 +1337,10 @@ if (ephemeral) keydb_set_ephemeral (kh, 1); + rc = lock_all (kh); + if (rc) + return rc; + rc = keydb_search_fpr (kh, fpr); if (rc != -1) { Modified: branches/GNUPG-1-9-BRANCH/sm/keydb.h =================================================================== --- branches/GNUPG-1-9-BRANCH/sm/keydb.h 2006-05-17 08:42:12 UTC (rev 4136) +++ branches/GNUPG-1-9-BRANCH/sm/keydb.h 2006-05-22 14:35:04 UTC (rev 4137) @@ -53,7 +53,7 @@ int keydb_insert_cert (KEYDB_HANDLE hd, ksba_cert_t cert); int keydb_update_cert (KEYDB_HANDLE hd, ksba_cert_t cert); -int keydb_delete (KEYDB_HANDLE hd); +int keydb_delete (KEYDB_HANDLE hd, int unlock); int keydb_locate_writable (KEYDB_HANDLE hd, const char *reserved); void keydb_rebuild_caches (void); From cvs at cvs.gnupg.org Mon May 22 18:53:13 2006 From: cvs at cvs.gnupg.org (svn author dshaw) Date: Mon May 22 18:19:55 2006 Subject: [svn] GnuPG - r4138 - trunk/g10 Message-ID: Author: dshaw Date: 2006-05-22 18:53:09 +0200 (Mon, 22 May 2006) New Revision: 4138 Modified: trunk/g10/ChangeLog trunk/g10/getkey.c trunk/g10/import.c Log: * getkey.c (get_pubkey_byname), import.c (import_one): Fix key selection problem when auto-key-locate returns a list of keys, not all of which are usable (revoked, expired, etc). Noted by Simon Josefsson. Modified: trunk/g10/ChangeLog =================================================================== --- trunk/g10/ChangeLog 2006-05-22 14:35:04 UTC (rev 4137) +++ trunk/g10/ChangeLog 2006-05-22 16:53:09 UTC (rev 4138) @@ -1,3 +1,10 @@ +2006-05-22 David Shaw + + * getkey.c (get_pubkey_byname), import.c (import_one): Fix key + selection problem when auto-key-locate returns a list of keys, not + all of which are usable (revoked, expired, etc). Noted by Simon + Josefsson. + 2006-04-26 David Shaw * keyserver.c (direct_uri_map): New. Modified: trunk/g10/getkey.c =================================================================== --- trunk/g10/getkey.c 2006-05-22 14:35:04 UTC (rev 4137) +++ trunk/g10/getkey.c 2006-05-22 16:53:09 UTC (rev 4138) @@ -934,7 +934,7 @@ for(akl=opt.auto_key_locate;akl;akl=akl->next) { - unsigned char *fpr; + unsigned char *fpr=NULL; size_t fpr_len; switch(akl->type) Modified: trunk/g10/import.c =================================================================== --- trunk/g10/import.c 2006-05-22 14:35:04 UTC (rev 4137) +++ trunk/g10/import.c 2006-05-22 16:53:09 UTC (rev 4138) @@ -696,9 +696,6 @@ pk = node->pkt->pkt.public_key; - if(fpr) - *fpr=fingerprint_from_pk(pk,NULL,fpr_len); - keyid_from_pk( pk, keyid ); uidnode = find_next_kbnode( keyblock, PKT_USER_ID ); @@ -981,6 +978,17 @@ } else if(new_key) { + if(fpr && stats->imported==1) + { + xfree(*fpr); + *fpr=fingerprint_from_pk(pk,NULL,fpr_len); + } + else + { + xfree(*fpr); + *fpr=NULL; + } + revocation_present(keyblock); if(seckey_available(keyid)==0) check_prefs(keyblock); From cvs at cvs.gnupg.org Mon May 22 19:19:23 2006 From: cvs at cvs.gnupg.org (svn author marcus) Date: Mon May 22 18:45:59 2006 Subject: [svn] GnuPG - r4139 - in trunk: . m4 Message-ID: Author: marcus Date: 2006-05-22 19:19:22 +0200 (Mon, 22 May 2006) New Revision: 4139 Added: trunk/m4/noexecstack.m4 Modified: trunk/ChangeLog trunk/configure.ac trunk/m4/ChangeLog Log: 2006-05-22 Marcus Brinkmann * configure.ac: Remove check for noexecstack and invoke CL_AS_NOEXECSTACK instead. m4/ 2006-05-22 Marcus Brinkmann * noexecstack.m4: New file. Modified: trunk/ChangeLog =================================================================== --- trunk/ChangeLog 2006-05-22 16:53:09 UTC (rev 4138) +++ trunk/ChangeLog 2006-05-22 17:19:22 UTC (rev 4139) @@ -1,3 +1,8 @@ +2006-05-22 Marcus Brinkmann + + * configure.ac: Remove check for noexecstack and invoke + CL_AS_NOEXECSTACK instead. + 2006-05-16 Werner Koch * README: Removed note for OSF5 as this is the default now. Modified: trunk/configure.ac =================================================================== --- trunk/configure.ac 2006-05-22 16:53:09 UTC (rev 4138) +++ trunk/configure.ac 2006-05-22 17:19:22 UTC (rev 4139) @@ -109,16 +109,6 @@ dnl AC_DEFINE(M_GUARD,1,[Define to use the (obsolete) malloc guarding feature]) dnl fi -# We don't have a test to check whether as(1) knows about the -# non executable stack option. Thus we provide an option to enable -# it. -AC_MSG_CHECKING([whether non excutable stack support is requested]) -AC_ARG_ENABLE(noexecstack, - AC_HELP_STRING([--enable-noexecstack], - [enable non executable stack support (gcc only)]), - noexecstack_support=$enableval, noexecstack_support=no) -AC_MSG_RESULT($noexecstack_support) - # SELinux support includes tracking of sensitive files to avoid # leaking their contents through processing these files by gpg itself AC_MSG_CHECKING([whether SELinux support is requested]) @@ -1287,16 +1277,9 @@ if test x"$_gcc_psign" = xyes ; then CFLAGS="$CFLAGS -Wno-pointer-sign" fi - - # Non exec stack hack. Fixme: Write a test to check whether as - # can cope with it and use the enable-noexecstack option only to - # disable it in case it is required on sime platforms. - if test "$noexecstack_support" = yes; then - NOEXECSTACK_FLAGS="-Wa,--noexecstack" - fi fi -AC_SUBST(NOEXECSTACK_FLAGS) +CL_AS_NOEXECSTACK if test "$print_egd_warning" = yes; then AC_MSG_WARN([[ Modified: trunk/m4/ChangeLog =================================================================== --- trunk/m4/ChangeLog 2006-05-22 16:53:09 UTC (rev 4138) +++ trunk/m4/ChangeLog 2006-05-22 17:19:22 UTC (rev 4139) @@ -1,3 +1,7 @@ +2006-05-22 Marcus Brinkmann + + * noexecstack.m4: New file. + 2006-05-09 David Shaw * libcurl.m4: Fix mistaken AC_SUBST when curl is not found. Added: trunk/m4/noexecstack.m4 =================================================================== --- trunk/m4/noexecstack.m4 2006-05-22 16:53:09 UTC (rev 4138) +++ trunk/m4/noexecstack.m4 2006-05-22 17:19:22 UTC (rev 4139) @@ -0,0 +1,55 @@ +# noexecstack.m4 +dnl Copyright (C) 1995-2006 Free Software Foundation, Inc. +dnl +dnl This library is free software; you can redistribute it and/or +dnl modify it under the terms of the GNU Lesser General Public +dnl License as published by the Free Software Foundation; either +dnl version 2.1 of the License, or (at your option) any later version. +dnl +dnl This library is distributed in the hope that it will be useful, +dnl but WITHOUT ANY WARRANTY; without even the implied warranty of +dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +dnl Lesser General Public License for more details. +dnl +dnl You should have received a copy of the GNU Lesser General Public +dnl License along with this library; if not, write to the Free Software +dnl Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +dnl Checks whether the stack can be marked nonexecutable by passing an +dnl option to the C-compiler when acting on .s files. Returns that +dnl option in NOEXECSTACK_FLAGS. +dnl This macro is adapted from one found in GLIBC-2.3.5. +AC_DEFUN([CL_AS_NOEXECSTACK],[ +AC_REQUIRE([AC_PROG_CC]) +AC_REQUIRE([AM_PROG_AS]) + +AC_MSG_CHECKING([whether non excutable stack support is requested]) +AC_ARG_ENABLE(noexecstack, + AC_HELP_STRING([--enable-noexecstack], + [enable non executable stack support (gcc only)]), + noexecstack_support=$enableval, noexecstack_support=no) +AC_MSG_RESULT($noexecstack_support) + +AC_CACHE_CHECK([whether assembler supports --noexecstack option], +cl_cv_as_noexecstack, [dnl + cat > conftest.c </dev/null]) \ + && grep -q .note.GNU-stack conftest.s \ + && AC_TRY_COMMAND([${CCAS} $CCASFLAGS $CPPFLAGS -Wa,--noexecstack + -c -o conftest.o conftest.s >/dev/null]) + then + cl_cv_as_noexecstack=yes + else + cl_cv_as_noexecstack=no + fi + rm -f conftest*]) + if test "$noexecstack_support" = yes -a "$cl_cv_as_noexecstack" = yes; then + NOEXECSTACK_FLAGS="-Wa,--noexecstack" + else + NOEXECSTACK_FLAGS= + fi + AC_SUBST(NOEXECSTACK_FLAGS) +]) From cvs at cvs.gnupg.org Mon May 22 19:47:58 2006 From: cvs at cvs.gnupg.org (svn author twoaday) Date: Mon May 22 19:14:36 2006 Subject: [svn] GPGol - r153 - trunk/src Message-ID: Author: twoaday Date: 2006-05-22 19:47:58 +0200 (Mon, 22 May 2006) New Revision: 153 Modified: trunk/src/ChangeLog trunk/src/verify-dialog.c Log: Modified: trunk/src/ChangeLog =================================================================== --- trunk/src/ChangeLog 2006-04-25 16:19:18 UTC (rev 152) +++ trunk/src/ChangeLog 2006-05-22 17:47:58 UTC (rev 153) @@ -1,3 +1,8 @@ +2006-05-22 Timo Schulz + + * verify-dialog.c (load_sigbox): A sigsum of 0 also indicates + a valid (good) signature. + 2006-04-25 Werner Koch * xmalloc.h: New. Moved prototypes from util.h Modified: trunk/src/verify-dialog.c =================================================================== --- trunk/src/verify-dialog.c 2006-04-25 16:19:18 UTC (rev 152) +++ trunk/src/verify-dialog.c 2006-05-22 17:47:58 UTC (rev 153) @@ -121,10 +121,10 @@ } stat = ctx->signatures->summary; - if (stat & GPGME_SIGSUM_GREEN) + if (stat & GPGME_SIGSUM_RED) + s = _("BAD signature!"); + else if (!stat || (stat & GPGME_SIGSUM_GREEN)) s = _("Good signature"); - else if (stat & GPGME_SIGSUM_RED) - s = _("BAD signature!"); else if (stat & GPGME_SIGSUM_KEY_REVOKED) s = _("Good signature from revoked key"); else if (stat & GPGME_SIGSUM_KEY_EXPIRED) From cvs at cvs.gnupg.org Mon May 22 23:38:15 2006 From: cvs at cvs.gnupg.org (svn author dshaw) Date: Mon May 22 23:04:54 2006 Subject: [svn] GnuPG - r4140 - trunk/g10 Message-ID: Author: dshaw Date: 2006-05-22 23:38:13 +0200 (Mon, 22 May 2006) New Revision: 4140 Modified: trunk/g10/ChangeLog trunk/g10/import.c Log: * import.c (import_one): Fix bug when importing a new key from a file. Modified: trunk/g10/ChangeLog =================================================================== --- trunk/g10/ChangeLog 2006-05-22 17:19:22 UTC (rev 4139) +++ trunk/g10/ChangeLog 2006-05-22 21:38:13 UTC (rev 4140) @@ -1,5 +1,8 @@ 2006-05-22 David Shaw + * import.c (import_one): Fix bug when importing a new key from a + file. + * getkey.c (get_pubkey_byname), import.c (import_one): Fix key selection problem when auto-key-locate returns a list of keys, not all of which are usable (revoked, expired, etc). Noted by Simon Modified: trunk/g10/import.c =================================================================== --- trunk/g10/import.c 2006-05-22 17:19:22 UTC (rev 4139) +++ trunk/g10/import.c 2006-05-22 21:38:13 UTC (rev 4140) @@ -978,16 +978,14 @@ } else if(new_key) { - if(fpr && stats->imported==1) + if(fpr) { xfree(*fpr); - *fpr=fingerprint_from_pk(pk,NULL,fpr_len); + if(stats->imported==1) + *fpr=fingerprint_from_pk(pk,NULL,fpr_len); + else + *fpr=NULL; } - else - { - xfree(*fpr); - *fpr=NULL; - } revocation_present(keyblock); if(seckey_available(keyid)==0) From cvs at cvs.gnupg.org Tue May 23 05:58:55 2006 From: cvs at cvs.gnupg.org (svn author dshaw) Date: Tue May 23 05:25:33 2006 Subject: [svn] GnuPG - r4141 - trunk/g10 Message-ID: Author: dshaw Date: 2006-05-23 05:58:53 +0200 (Tue, 23 May 2006) New Revision: 4141 Modified: trunk/g10/ChangeLog trunk/g10/build-packet.c trunk/g10/getkey.c trunk/g10/keygen.c trunk/g10/parse-packet.c trunk/g10/sign.c Log: * parse-packet.c (dump_sig_subpkt, parse_signature), build-packet.c (build_sig_subpkt_from_sig), getkey.c (fixup_uidnode, merge_selfsigs_main, merge_selfsigs_subkey), keygen.c (keygen_add_key_expire): Fix meaning of key expiration and sig expiration subpackets - zero means "never expire" according to 2440, not "expire instantly". Modified: trunk/g10/ChangeLog =================================================================== --- trunk/g10/ChangeLog 2006-05-22 21:38:13 UTC (rev 4140) +++ trunk/g10/ChangeLog 2006-05-23 03:58:53 UTC (rev 4141) @@ -1,7 +1,11 @@ 2006-05-22 David Shaw - * import.c (import_one): Fix bug when importing a new key from a - file. + * parse-packet.c (dump_sig_subpkt, parse_signature), + build-packet.c (build_sig_subpkt_from_sig), getkey.c + (fixup_uidnode, merge_selfsigs_main, merge_selfsigs_subkey), + keygen.c (keygen_add_key_expire): Fix meaning of key expiration + and sig expiration subpackets - zero means "never expire" + according to 2440, not "expire instantly". * getkey.c (get_pubkey_byname), import.c (import_one): Fix key selection problem when auto-key-locate returns a list of keys, not Modified: trunk/g10/build-packet.c =================================================================== --- trunk/g10/build-packet.c 2006-05-22 21:38:13 UTC (rev 4140) +++ trunk/g10/build-packet.c 2006-05-23 03:58:53 UTC (rev 4141) @@ -824,7 +824,8 @@ if(sig->expiredate>sig->timestamp) u=sig->expiredate-sig->timestamp; else - u=0; + u=1; /* A 1-second expiration time is the shortest one + OpenPGP has */ buf[0] = (u >> 24) & 0xff; buf[1] = (u >> 16) & 0xff; Modified: trunk/g10/getkey.c =================================================================== --- trunk/g10/getkey.c 2006-05-22 21:38:13 UTC (rev 4140) +++ trunk/g10/getkey.c 2006-05-23 03:58:53 UTC (rev 4141) @@ -1506,12 +1506,12 @@ /* store the key flags in the helper variable for later processing */ uid->help_key_usage=parse_key_usage(sig); - /* ditto or the key expiration */ - uid->help_key_expire = 0; + /* ditto for the key expiration */ p = parse_sig_subpkt (sig->hashed, SIGSUBPKT_KEY_EXPIRE, NULL); - if ( p ) { - uid->help_key_expire = keycreated + buffer_to_u32(p); - } + if( p && buffer_to_u32(p) ) + uid->help_key_expire = keycreated + buffer_to_u32(p); + else + uid->help_key_expire = 0; /* Set the primary user ID flag - we will later wipe out some * of them to only have one in our keyblock */ @@ -1723,7 +1723,7 @@ key_usage=parse_key_usage(sig); p = parse_sig_subpkt (sig->hashed, SIGSUBPKT_KEY_EXPIRE, NULL); - if ( p ) + if( p && buffer_to_u32(p) ) { key_expire = keytimestamp + buffer_to_u32(p); key_expire_seen = 1; @@ -2127,7 +2127,7 @@ subpk->pubkey_usage = key_usage; p = parse_sig_subpkt (sig->hashed, SIGSUBPKT_KEY_EXPIRE, NULL); - if ( p ) + if ( p && buffer_to_u32(p) ) key_expire = keytimestamp + buffer_to_u32(p); else key_expire = 0; Modified: trunk/g10/keygen.c =================================================================== --- trunk/g10/keygen.c 2006-05-22 21:38:13 UTC (rev 4140) +++ trunk/g10/keygen.c 2006-05-23 03:58:53 UTC (rev 4141) @@ -221,7 +221,7 @@ if(pk->expiredate > pk->timestamp) u= pk->expiredate - pk->timestamp; else - u= 0; + u= 1; buf[0] = (u >> 24) & 0xff; buf[1] = (u >> 16) & 0xff; Modified: trunk/g10/parse-packet.c =================================================================== --- trunk/g10/parse-packet.c 2006-05-22 21:38:13 UTC (rev 4140) +++ trunk/g10/parse-packet.c 2006-05-23 03:58:53 UTC (rev 4141) @@ -1,6 +1,6 @@ /* parse-packet.c - read packets - * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, - * 2005 Free Software Foundation, Inc. + * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, + * 2006 Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -822,8 +822,13 @@ break; case SIGSUBPKT_SIG_EXPIRE: if( length >= 4 ) - fprintf (listfp, "sig expires after %s", - strtimevalue( buffer_to_u32(buffer) ) ); + { + if(buffer_to_u32(buffer)) + fprintf (listfp, "sig expires after %s", + strtimevalue( buffer_to_u32(buffer) ) ); + else + fprintf (listfp, "sig does not expire"); + } break; case SIGSUBPKT_EXPORTABLE: if( length ) @@ -847,8 +852,13 @@ break; case SIGSUBPKT_KEY_EXPIRE: if( length >= 4 ) - fprintf (listfp, "key expires after %s", - strtimevalue( buffer_to_u32(buffer) ) ); + { + if(buffer_to_u32(buffer)) + fprintf (listfp, "key expires after %s", + strtimevalue( buffer_to_u32(buffer) ) ); + else + fprintf (listfp, "key does not expire"); + } break; case SIGSUBPKT_PREF_SYM: fputs("pref-sym-algos:", listfp ); @@ -1353,7 +1363,7 @@ log_info ("signature packet without keyid\n"); p=parse_sig_subpkt(sig->hashed,SIGSUBPKT_SIG_EXPIRE,NULL); - if(p) + if(p && buffer_to_u32(p)) sig->expiredate=sig->timestamp+buffer_to_u32(p); if(sig->expiredate && sig->expiredate<=make_timestamp()) sig->flags.expired=1; Modified: trunk/g10/sign.c =================================================================== --- trunk/g10/sign.c 2006-05-22 21:38:13 UTC (rev 4140) +++ trunk/g10/sign.c 2006-05-23 03:58:53 UTC (rev 4141) @@ -1544,7 +1544,7 @@ } /* Note that already expired sigs will remain expired (with a - duration of 0) since build-packet.c:build_sig_subpkt_from_sig + duration of 1) since build-packet.c:build_sig_subpkt_from_sig detects this case. */ if( sig->version >= 4 ) From cvs at cvs.gnupg.org Tue May 23 17:32:58 2006 From: cvs at cvs.gnupg.org (svn author dshaw) Date: Tue May 23 16:59:29 2006 Subject: [svn] GnuPG - r4142 - trunk Message-ID: Author: dshaw Date: 2006-05-23 17:32:57 +0200 (Tue, 23 May 2006) New Revision: 4142 Modified: trunk/ChangeLog trunk/configure.ac Log: * configure.ac: Add --disable-optimization. This is handy for debugging so the compiler doesn't rearrange things and eliminate variables. Modified: trunk/ChangeLog =================================================================== --- trunk/ChangeLog 2006-05-23 03:58:53 UTC (rev 4141) +++ trunk/ChangeLog 2006-05-23 15:32:57 UTC (rev 4142) @@ -1,3 +1,9 @@ +2006-05-23 David Shaw + + * configure.ac: Add --disable-optimization. This is handy for + debugging so the compiler doesn't rearrange things and eliminate + variables. + 2006-05-22 Marcus Brinkmann * configure.ac: Remove check for noexecstack and invoke Modified: trunk/configure.ac =================================================================== --- trunk/configure.ac 2006-05-23 03:58:53 UTC (rev 4141) +++ trunk/configure.ac 2006-05-23 15:32:57 UTC (rev 4142) @@ -1264,6 +1264,15 @@ CFLAGS="$CFLAGS -Wall" fi + # This is handy for debugging so the compiler doesn't rearrange + # things and eliminate variables. + AC_ARG_ENABLE(optimization, + AC_HELP_STRING([--disable-optimization], + [disable compiler optimization]), + [if test $enableval = no ; then + CFLAGS=`echo $CFLAGS | sed 's/-O[[0-9]]//'` + fi]) + AC_MSG_CHECKING([if gcc supports -Wno-pointer-sign]) _gcc_cflags_save=$CFLAGS From cvs at cvs.gnupg.org Tue May 23 18:19:48 2006 From: cvs at cvs.gnupg.org (svn author wk) Date: Tue May 23 17:46:25 2006 Subject: [svn] GnuPG - r4143 - in branches/GNUPG-1-9-BRANCH: . common g10 jnlib scd sm tools Message-ID: Author: wk Date: 2006-05-23 18:19:43 +0200 (Tue, 23 May 2006) New Revision: 4143 Added: branches/GNUPG-1-9-BRANCH/common/pka.c branches/GNUPG-1-9-BRANCH/common/pka.h Modified: branches/GNUPG-1-9-BRANCH/ChangeLog branches/GNUPG-1-9-BRANCH/TODO branches/GNUPG-1-9-BRANCH/common/ChangeLog branches/GNUPG-1-9-BRANCH/common/Makefile.am branches/GNUPG-1-9-BRANCH/common/gettime.c branches/GNUPG-1-9-BRANCH/common/iobuf.h branches/GNUPG-1-9-BRANCH/common/miscellaneous.c branches/GNUPG-1-9-BRANCH/common/ttyio.c branches/GNUPG-1-9-BRANCH/common/ttyio.h branches/GNUPG-1-9-BRANCH/common/util.h branches/GNUPG-1-9-BRANCH/common/yesno.c branches/GNUPG-1-9-BRANCH/configure.ac branches/GNUPG-1-9-BRANCH/g10/ChangeLog branches/GNUPG-1-9-BRANCH/g10/Makefile.am branches/GNUPG-1-9-BRANCH/g10/armor.c branches/GNUPG-1-9-BRANCH/g10/call-agent.c branches/GNUPG-1-9-BRANCH/g10/call-agent.h branches/GNUPG-1-9-BRANCH/g10/card-util.c branches/GNUPG-1-9-BRANCH/g10/gpg.c branches/GNUPG-1-9-BRANCH/g10/gpgv.c branches/GNUPG-1-9-BRANCH/g10/import.c branches/GNUPG-1-9-BRANCH/g10/keydb.h branches/GNUPG-1-9-BRANCH/g10/keygen.c branches/GNUPG-1-9-BRANCH/g10/keyserver.c branches/GNUPG-1-9-BRANCH/g10/main.h branches/GNUPG-1-9-BRANCH/g10/mainproc.c branches/GNUPG-1-9-BRANCH/g10/misc.c branches/GNUPG-1-9-BRANCH/g10/options.h branches/GNUPG-1-9-BRANCH/g10/passphrase.c branches/GNUPG-1-9-BRANCH/g10/pkclist.c branches/GNUPG-1-9-BRANCH/g10/plaintext.c branches/GNUPG-1-9-BRANCH/g10/pubkey-enc.c branches/GNUPG-1-9-BRANCH/g10/sign.c branches/GNUPG-1-9-BRANCH/g10/skclist.c branches/GNUPG-1-9-BRANCH/jnlib/ChangeLog branches/GNUPG-1-9-BRANCH/jnlib/dotlock.c branches/GNUPG-1-9-BRANCH/jnlib/dotlock.h branches/GNUPG-1-9-BRANCH/jnlib/libjnlib-config.h branches/GNUPG-1-9-BRANCH/jnlib/stringhelp.c branches/GNUPG-1-9-BRANCH/jnlib/stringhelp.h branches/GNUPG-1-9-BRANCH/jnlib/strlist.c branches/GNUPG-1-9-BRANCH/jnlib/strlist.h branches/GNUPG-1-9-BRANCH/scd/app-p15.c branches/GNUPG-1-9-BRANCH/sm/ChangeLog branches/GNUPG-1-9-BRANCH/sm/Makefile.am branches/GNUPG-1-9-BRANCH/sm/keydb.c branches/GNUPG-1-9-BRANCH/sm/keylist.c branches/GNUPG-1-9-BRANCH/tools/ChangeLog branches/GNUPG-1-9-BRANCH/tools/gpgconf-comp.c branches/GNUPG-1-9-BRANCH/tools/gpgparsemail.c Log: g10/ does build again. Modified: branches/GNUPG-1-9-BRANCH/ChangeLog =================================================================== --- branches/GNUPG-1-9-BRANCH/ChangeLog 2006-05-23 15:32:57 UTC (rev 4142) +++ branches/GNUPG-1-9-BRANCH/ChangeLog 2006-05-23 16:19:43 UTC (rev 4143) @@ -1,3 +1,12 @@ +2006-05-23 Werner Koch + + * configure.ac (ZLIBS): New for zlib link commands. Add bzip2 + support. + +2006-05-22 Werner Koch + + * configure.ac (EXEEXT): New. + 2006-04-18 Werner Koch * configure.ac (PK_UID_CACHE_SIZE): New. Modified: branches/GNUPG-1-9-BRANCH/TODO =================================================================== --- branches/GNUPG-1-9-BRANCH/TODO 2006-05-23 15:32:57 UTC (rev 4142) +++ branches/GNUPG-1-9-BRANCH/TODO 2006-05-23 16:19:43 UTC (rev 4143) @@ -110,4 +110,11 @@ We can't do that right now because it is only defined by newer versions of libgcrypt. Changes this if we require libgcrypt 1.3 anyway. +** skclist.c:random_is_faked + Remove the whole stuff? +* common/ +** ttyio + Add completion support. +** yesno + Update to gpg 1.4.3 version \ No newline at end of file Modified: branches/GNUPG-1-9-BRANCH/common/ChangeLog =================================================================== --- branches/GNUPG-1-9-BRANCH/common/ChangeLog 2006-05-23 15:32:57 UTC (rev 4142) +++ branches/GNUPG-1-9-BRANCH/common/ChangeLog 2006-05-23 16:19:43 UTC (rev 4143) @@ -1,3 +1,30 @@ +2006-05-23 Werner Koch + + * gettime.c (isotimestamp): New. + + * ttyio.c (tty_get_ttyname): Posixly correct usage of ctermid. + + * dns-cert.c: New. Taken from 1.4.3's util/cert.c. + * dns-cert.h: New. + +2006-05-22 Werner Koch + + * pka.c: New. Taked from 1.4.3. + * pka.h: New. + * Makefile.am: Added pka. + +2006-05-19 Werner Koch + + * yesno.c (answer_is_yes_no_default, answer_is_yes_no_quit): + Updated from 1.4.3. + (answer_is_okay_cancel): new. From 1.4.3. + + * miscellaneous.c (match_multistr): New. Taken from 1.4.3. + + * ttyio.c (tty_enable_completion, tty_disable_completion): New + dummy functions. + * ttyio.h: Add prototypes and stubs. + 2006-04-19 Werner Koch * iobuf.c (iobuf_get_fd): New. Taken from 1.4.3. Modified: branches/GNUPG-1-9-BRANCH/common/Makefile.am =================================================================== --- branches/GNUPG-1-9-BRANCH/common/Makefile.am 2006-05-23 15:32:57 UTC (rev 4142) +++ branches/GNUPG-1-9-BRANCH/common/Makefile.am 2006-05-23 16:19:43 UTC (rev 4143) @@ -49,7 +49,9 @@ w32reg.c \ signal.c \ dynload.h \ - estream.c estream.h + estream.c estream.h \ + dns-cert.c dns-cert.h \ + pka.c pka.h libsimple_pwquery_a_SOURCES = \ Modified: branches/GNUPG-1-9-BRANCH/common/gettime.c =================================================================== --- branches/GNUPG-1-9-BRANCH/common/gettime.c 2006-05-23 15:32:57 UTC (rev 4142) +++ branches/GNUPG-1-9-BRANCH/common/gettime.c 2006-05-23 16:19:43 UTC (rev 4143) @@ -201,7 +201,7 @@ } -/**************** +/* * Note: this function returns GMT */ const char * @@ -222,6 +222,32 @@ return buffer; } + +/* + * Note: this function returns GMT + */ +const char * +isotimestamp (u32 stamp) +{ + static char buffer[25+5]; + struct tm *tp; + time_t atime = stamp; + + if (atime < 0) + { + strcpy (buffer, "????" "-??" "-??" " " "??" ":" "??" ":" "??"); + } + else + { + tp = gmtime ( &atime ); + sprintf (buffer,"%04d-%02d-%02d %02d:%02d:%02d", + 1900+tp->tm_year, tp->tm_mon+1, tp->tm_mday, + tp->tm_hour, tp->tm_min, tp->tm_sec); + } + return buffer; +} + + /**************** * Note: this function returns local time */ Modified: branches/GNUPG-1-9-BRANCH/common/iobuf.h =================================================================== --- branches/GNUPG-1-9-BRANCH/common/iobuf.h 2006-05-23 15:32:57 UTC (rev 4142) +++ branches/GNUPG-1-9-BRANCH/common/iobuf.h 2006-05-23 16:19:43 UTC (rev 4143) @@ -145,7 +145,9 @@ int iobuf_translate_file_handle (int fd, int for_write); +void iobuf_skip_rest (iobuf_t a, unsigned long n, int partial); + /* get a byte form the iobuf; must check for eof prior to this function * this function returns values in the range 0 .. 255 or -1 to indicate EOF * iobuf_get_noeof() does not return -1 to indicate EOF, but masks the Modified: branches/GNUPG-1-9-BRANCH/common/miscellaneous.c =================================================================== --- branches/GNUPG-1-9-BRANCH/common/miscellaneous.c 2006-05-23 15:32:57 UTC (rev 4142) +++ branches/GNUPG-1-9-BRANCH/common/miscellaneous.c 2006-05-23 16:19:43 UTC (rev 4143) @@ -1,5 +1,5 @@ /* miscellaneous.c - Stuff not fitting elsewhere - * Copyright (C) 2003 Free Software Foundation, Inc. + * Copyright (C) 2003, 2006 Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -47,6 +47,7 @@ return s; } +/* fixme: Globally replace it by print_sanitized_buffer. */ void print_string( FILE *fp, const byte *p, size_t n, int delim ) { @@ -125,4 +126,25 @@ } +/* Try match against each substring of multistr, delimited by | */ +int +match_multistr (const char *multistr,const char *match) +{ + do + { + size_t seglen = strcspn (multistr,"|"); + if (!seglen) + break; + /* Using the localized strncasecmp! */ + if (strncasecmp(multistr,match,seglen)==0) + return 1; + multistr += seglen; + if (*multistr == '|') + multistr++; + } + while (*multistr); + return 0; +} + + Added: branches/GNUPG-1-9-BRANCH/common/pka.c =================================================================== --- branches/GNUPG-1-9-BRANCH/common/pka.c 2006-05-23 15:32:57 UTC (rev 4142) +++ branches/GNUPG-1-9-BRANCH/common/pka.c 2006-05-23 16:19:43 UTC (rev 4143) @@ -0,0 +1,252 @@ +/* pka.c - DNS Public Key Association RR access + * Copyright (C) 2005 Free Software Foundation, Inc. + * + * This file is part of GnuPG. + * + * GnuPG is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * GnuPG is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, + * USA. + */ + +#include + +#include +#include +#include + +#ifdef USE_DNS_PKA +#include +#ifdef _WIN32 +#include +#else +#include +#include +#include +#endif +#endif /* USE_DNS_PKA */ + +#include "util.h" +#include "pka.h" + +#ifdef USE_DNS_PKA +/* Parse the TXT resource record. Format is: + + v=pka1;fpr=a4d94e92b0986ab5ee9dcd755de249965b0358a2;uri=string + + For simplicity white spaces are not allowed. Because we expect to + use a new RRTYPE for this in the future we define the TXT really + strict for simplicity: No white spaces, case sensitivity of the + names, order must be as given above. Only URI is optional. + + This function modifies BUFFER. On success 0 is returned, the 20 + byte fingerprint stored at FPR and BUFFER contains the URI or an + empty string. +*/ +static int +parse_txt_record (char *buffer, unsigned char *fpr) +{ + char *p, *pend; + int i; + + p = buffer; + pend = strchr (p, ';'); + if (!pend) + return -1; + *pend++ = 0; + if (strcmp (p, "v=pka1")) + return -1; /* Wrong or missing version. */ + + p = pend; + pend = strchr (p, ';'); + if (pend) + *pend++ = 0; + if (strncmp (p, "fpr=", 4)) + return -1; /* Missing fingerprint part. */ + p += 4; + for (i=0; i < 20 && hexdigitp (p) && hexdigitp (p+1); i++, p += 2) + fpr[i] = xtoi_2 (p); + if (i != 20) + return -1; /* Fingerprint consists not of exactly 40 hexbytes. */ + + p = pend; + if (!p || !*p) + { + *buffer = 0; + return 0; /* Success (no URI given). */ + } + if (strncmp (p, "uri=", 4)) + return -1; /* Unknown part. */ + p += 4; + /* There is an URI, copy it to the start of the buffer. */ + while (*p) + *buffer++ = *p++; + *buffer = 0; + return 0; +} + + +/* For the given email ADDRESS lookup the PKA information in the DNS. + + On success the 20 byte SHA-1 fingerprint is stored at FPR and the + URI will be returned in an allocated buffer. Note that the URI + might be an zero length string as this information is optiobnal. + Caller must xfree the returned string. + + On error NULL is returned and the 20 bytes at FPR are not + defined. */ +char * +get_pka_info (const char *address, unsigned char *fpr) +{ + unsigned char answer[PACKETSZ]; + int anslen; + int qdcount, ancount, nscount, arcount; + int rc; + unsigned char *p, *pend; + const char *domain; + char *name; + + + domain = strrchr (address, '@'); + if (!domain || domain == address || !domain[1]) + return NULL; /* invalid mail address given. */ + + name = malloc (strlen (address) + 5 + 1); + memcpy (name, address, domain - address); + strcpy (stpcpy (name + (domain-address), "._pka."), domain+1); + + anslen = res_query (name, C_IN, T_TXT, answer, PACKETSZ); + xfree (name); + if (anslen < sizeof(HEADER)) + return NULL; /* DNS resolver returned a too short answer. */ + if ( (rc=((HEADER*)answer)->rcode) != NOERROR ) + return NULL; /* DNS resolver returned an error. */ + + /* We assume that PACKETSZ is large enough and don't do dynmically + expansion of the buffer. */ + if (anslen > PACKETSZ) + return NULL; /* DNS resolver returned a too long answer */ + + qdcount = ntohs (((HEADER*)answer)->qdcount); + ancount = ntohs (((HEADER*)answer)->ancount); + nscount = ntohs (((HEADER*)answer)->nscount); + arcount = ntohs (((HEADER*)answer)->arcount); + + if (!ancount) + return NULL; /* Got no answer. */ + + p = answer + sizeof (HEADER); + pend = answer + anslen; /* Actually points directly behind the buffer. */ + + while (qdcount-- && p < pend) + { + rc = dn_skipname (p, pend); + if (rc == -1) + return NULL; + p += rc + QFIXEDSZ; + } + + if (ancount > 1) + return NULL; /* more than one possible gpg trustdns record - none used. */ + + while (ancount-- && p <= pend) + { + unsigned int type, class, txtlen, n; + char *buffer, *bufp; + + rc = dn_skipname (p, pend); + if (rc == -1) + return NULL; + p += rc; + if (p >= pend - 10) + return NULL; /* RR too short. */ + + type = *p++ << 8; + type |= *p++; + class = *p++ << 8; + class |= *p++; + p += 4; + txtlen = *p++ << 8; + txtlen |= *p++; + if (type != T_TXT || class != C_IN) + return NULL; /* Answer does not match the query. */ + + buffer = bufp = xmalloc (txtlen + 1); + while (txtlen && p < pend) + { + for (n = *p++, txtlen--; txtlen && n && p < pend; txtlen--, n--) + *bufp++ = *p++; + } + *bufp = 0; + if (parse_txt_record (buffer, fpr)) + { + xfree (buffer); + return NULL; /* Not a valid gpg trustdns RR. */ + } + return buffer; + } + + return NULL; +} +#else /* !USE_DNS_PKA */ + +/* Dummy version of the function if we can't use the resolver + functions. */ +char * +get_pka_info (const char *address, unsigned char *fpr) +{ + return NULL; +} +#endif /* !USE_DNS_PKA */ + + +#ifdef TEST +int +main(int argc,char *argv[]) +{ + unsigned char fpr[20]; + char *uri; + int i; + + if (argc < 2) + { + fprintf (stderr, "usage: pka mail-addresses\n"); + return 1; + } + argc--; + argv++; + + for (; argc; argc--, argv++) + { + uri = get_pka_info ( *argv, fpr ); + printf ("%s", *argv); + if (uri) + { + putchar (' '); + for (i=0; i < 20; i++) + printf ("%02X", fpr[i]); + if (*uri) + printf (" %s", uri); + xfree (uri); + } + putchar ('\n'); + } + return 0; +} +#endif /* TEST */ + +/* +Local Variables: +compile-command: "cc -DUSE_DNS_PKA -DTEST -I.. -I../include -Wall -g -o pka pka.c -lresolv libutil.a" +End: +*/ Added: branches/GNUPG-1-9-BRANCH/common/pka.h =================================================================== --- branches/GNUPG-1-9-BRANCH/common/pka.h 2006-05-23 15:32:57 UTC (rev 4142) +++ branches/GNUPG-1-9-BRANCH/common/pka.h 2006-05-23 16:19:43 UTC (rev 4143) @@ -0,0 +1,27 @@ +/* pka.h - DNS Public Key Association RR access definitions + * Copyright (C) 2006 Free Software Foundation, Inc. + * + * This file is part of GnuPG. + * + * GnuPG is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * GnuPG is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, + * USA. + */ +#ifndef GNUPG_COMMON_PKA_H +#define GNUPG_COMMON_PKA_H + +char *get_pka_info (const char *address, unsigned char *fpr); + + +#endif /*GNUPG_COMMON_PKA_H*/ Modified: branches/GNUPG-1-9-BRANCH/common/ttyio.c =================================================================== --- branches/GNUPG-1-9-BRANCH/common/ttyio.c 2006-05-23 15:32:57 UTC (rev 4142) +++ branches/GNUPG-1-9-BRANCH/common/ttyio.c 2006-05-23 16:19:43 UTC (rev 4143) @@ -1,5 +1,6 @@ /* ttyio.c - tty i/O functions - * Copyright (C) 1998,1999,2000,2001,2002,2003 Free Software Foundation, Inc. + * Copyright (C) 1998,1999,2000,2001,2002,2003, + * 2004, 2006 Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -45,6 +46,12 @@ #endif #include #include +#ifdef HAVE_LIBREADLINE +#include +#include +#endif + + #include "util.h" #include "memory.h" #include "ttyio.h" @@ -93,13 +100,21 @@ if (!got_name) { const char *s; + /* Note that despite our checks for these macros the function is + not necessarily thread save. We mainly do this for + portability reasons, in case L_ctermid is not defined. */ +# if defined(_POSIX_THREAD_SAFE_FUNCTIONS) || defined(_POSIX_TRHEADS) + char buffer[L_ctermid]; + s = ctermid (buffer); +# else s = ctermid (NULL); +# endif if (s) name = strdup (s); got_name = 1; } -#endif - /* Assume the staandrd tty on memory error or when tehre is no +#endif /*HAVE_CTERMID*/ + /* Assume the standard tty on memory error or when tehre is no certmid. */ return name? name : "/dev/tty"; } @@ -165,6 +180,34 @@ } +#ifdef HAVE_LIBREADLINE +void +tty_enable_completion(rl_completion_func_t *completer) +{ +/* if( no_terminal ) */ +/* return; */ + +/* if( !initialized ) */ +/* init_ttyfp(); */ + +/* rl_attempted_completion_function=completer; */ +/* rl_inhibit_completion=0; */ +} + +void +tty_disable_completion(void) +{ +/* if( no_terminal ) */ +/* return; */ + +/* if( !initialized ) */ +/* init_ttyfp(); */ + +/* rl_inhibit_completion=1; */ +} +#endif /*HAVE_LIBREADLINE*/ + + int tty_batchmode( int onoff ) { Modified: branches/GNUPG-1-9-BRANCH/common/ttyio.h =================================================================== --- branches/GNUPG-1-9-BRANCH/common/ttyio.h 2006-05-23 15:32:57 UTC (rev 4142) +++ branches/GNUPG-1-9-BRANCH/common/ttyio.h 2006-05-23 16:19:43 UTC (rev 4143) @@ -20,6 +20,11 @@ #ifndef GNUPG_COMMON_TTYIO_H #define GNUPG_COMMON_TTYIO_H +#ifdef HAVE_LIBREADLINE +#include +#include +#endif + const char *tty_get_ttyname (void); int tty_batchmode (int onoff); #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 5 ) @@ -40,5 +45,16 @@ int tty_get_answer_is_yes (const char *prompt); int tty_no_terminal (int onoff); +#ifdef HAVE_LIBREADLINE +void tty_enable_completion(rl_completion_func_t *completer); +void tty_disable_completion(void); +#else +/* Use a macro to stub out these functions since a macro has no need + to typedef a "rl_completion_func_t" which would be undefined + without readline. */ +#define tty_enable_completion(x) +#define tty_disable_completion() +#endif + #endif /*GNUPG_COMMON_TTYIO_H*/ Modified: branches/GNUPG-1-9-BRANCH/common/util.h =================================================================== --- branches/GNUPG-1-9-BRANCH/common/util.h 2006-05-23 15:32:57 UTC (rev 4142) +++ branches/GNUPG-1-9-BRANCH/common/util.h 2006-05-23 16:19:43 UTC (rev 4143) @@ -84,6 +84,7 @@ u32 add_days_to_timestamp (u32 stamp, u16 days); const char *strtimevalue (u32 stamp); const char *strtimestamp (u32 stamp); /* GMT */ +const char *isotimestamp (u32 stamp); /* GMT */ const char *asctimestamp (u32 stamp); /* localized */ @@ -108,6 +109,7 @@ int answer_is_yes (const char *s); int answer_is_yes_no_default (const char *s, int def_answer); int answer_is_yes_no_quit (const char *s); +int answer_is_okay_cancel (const char *s, int def_answer); /*-- xreadline.c --*/ ssize_t read_line (FILE *fp, @@ -161,6 +163,7 @@ int is_file_compressed (const char *s, int *ret_rc); +int match_multistr (const char *multistr,const char *match); /*-- Simple replacement functions. */ Modified: branches/GNUPG-1-9-BRANCH/common/yesno.c =================================================================== --- branches/GNUPG-1-9-BRANCH/common/yesno.c 2006-05-23 15:32:57 UTC (rev 4142) +++ branches/GNUPG-1-9-BRANCH/common/yesno.c 2006-05-23 16:19:43 UTC (rev 4143) @@ -28,31 +28,33 @@ int answer_is_yes_no_default( const char *s, int def_answer ) { - const char *long_yes = _("yes"); - const char *short_yes = _("yY"); - const char *long_no = _("no"); - const char *short_no = _("nN"); + /* TRANSLATORS: See doc/TRANSLATE about this string. */ + const char *long_yes = _("yes"); + const char *short_yes = _("yY"); + /* TRANSLATORS: See doc/TRANSLATE about this string. */ + const char *long_no = _("no"); + const char *short_no = _("nN"); - /* Note: we have to use the local dependent strcasecmp here */ - if( !strcasecmp(s, long_yes ) ) - return 1; - if( *s && strchr( short_yes, *s ) && !s[1] ) - return 1; - /* test for no strings to catch ambiguities for the next test */ - if( !strcasecmp(s, long_no ) ) - return 0; - if( *s && strchr( short_no, *s ) && !s[1] ) - return 0; - /* test for the english version (for those who are used to type yes) */ - if( !ascii_strcasecmp(s, "yes" ) ) - return 1; - if( *s && strchr( "yY", *s ) && !s[1] ) - return 1; - return def_answer; + /* Note: we have to use the local dependent compare here. */ + if ( match_multistr(long_yes,s) ) + return 1; + if ( *s && strchr( short_yes, *s ) && !s[1] ) + return 1; + /* Test for "no" strings to catch ambiguities for the next test. */ + if ( match_multistr(long_no,s) ) + return 0; + if ( *s && strchr( short_no, *s ) && !s[1] ) + return 0; + /* Test for the english version (for those who are used to type yes). */ + if ( !ascii_strcasecmp(s, "yes" ) ) + return 1; + if ( *s && strchr( "yY", *s ) && !s[1] ) + return 1; + return def_answer; } int -answer_is_yes( const char *s ) +answer_is_yes ( const char *s ) { return answer_is_yes_no_default(s,0); } @@ -61,36 +63,76 @@ * Return 1 for yes, -1 for quit, or 0 for no */ int -answer_is_yes_no_quit( const char *s ) +answer_is_yes_no_quit ( const char *s ) { - const char *long_yes = _("yes"); - const char *long_no = _("no"); - const char *long_quit = _("quit"); - const char *short_yes = _("yY"); - const char *short_no = _("nN"); - const char *short_quit = _("qQ"); + /* TRANSLATORS: See doc/TRANSLATE about this string. */ + const char *long_yes = _("yes"); + /* TRANSLATORS: See doc/TRANSLATE about this string. */ + const char *long_no = _("no"); + /* TRANSLATORS: See doc/TRANSLATE about this string. */ + const char *long_quit = _("quit"); + const char *short_yes = _("yY"); + const char *short_no = _("nN"); + const char *short_quit = _("qQ"); - /* Note: We have to use the locale dependent strcasecmp */ - if( !strcasecmp(s, long_no ) ) - return 0; - if( !strcasecmp(s, long_yes ) ) - return 1; - if( !strcasecmp(s, long_quit ) ) - return -1; - if( *s && strchr( short_no, *s ) && !s[1] ) - return 0; - if( *s && strchr( short_yes, *s ) && !s[1] ) - return 1; - if( *s && strchr( short_quit, *s ) && !s[1] ) - return -1; - /* but not here */ - if( !ascii_strcasecmp(s, "yes" ) ) - return 1; - if( !ascii_strcasecmp(s, "quit" ) ) - return -1; - if( *s && strchr( "yY", *s ) && !s[1] ) - return 1; - if( *s && strchr( "qQ", *s ) && !s[1] ) - return -1; + /* Note: we have to use a local dependent compare here. */ + if ( match_multistr(long_no,s) ) return 0; + if ( match_multistr(long_yes,s) ) + return 1; + if ( match_multistr(long_quit,s) ) + return -1; + if ( *s && strchr( short_no, *s ) && !s[1] ) + return 0; + if ( *s && strchr( short_yes, *s ) && !s[1] ) + return 1; + if ( *s && strchr( short_quit, *s ) && !s[1] ) + return -1; + /* but not here. */ + if ( !ascii_strcasecmp(s, "yes" ) ) + return 1; + if ( !ascii_strcasecmp(s, "quit" ) ) + return -1; + if ( *s && strchr( "yY", *s ) && !s[1] ) + return 1; + if ( *s && strchr( "qQ", *s ) && !s[1] ) + return -1; + return 0; } + +/* + Return 1 for okay, 0 for for cancel or DEF_ANSWER for default. + */ +int +answer_is_okay_cancel (const char *s, int def_answer) +{ + /* TRANSLATORS: See doc/TRANSLATE about this string. */ + const char *long_okay = _("okay|okay"); + /* TRANSLATORS: See doc/TRANSLATE about this string. */ + const char *long_cancel = _("cancel|cancel"); + const char *short_okay = _("oO"); + const char *short_cancel = _("cC"); + + /* Note: We have to use the locale dependent compare. */ + if ( match_multistr(long_okay,s) ) + return 1; + if ( match_multistr(long_cancel,s) ) + return 0; + if ( *s && strchr( short_okay, *s ) && !s[1] ) + return 1; + if ( *s && strchr( short_cancel, *s ) && !s[1] ) + return 0; + /* Always test for the English values (not locale here). */ + if ( !ascii_strcasecmp(s, "okay" ) ) + return 1; + if ( !ascii_strcasecmp(s, "ok" ) ) + return 1; + if ( !ascii_strcasecmp(s, "cancel" ) ) + return 0; + if ( *s && strchr( "oO", *s ) && !s[1] ) + return 1; + if ( *s && strchr( "cC", *s ) && !s[1] ) + return 0; + return def_answer; +} + Modified: branches/GNUPG-1-9-BRANCH/configure.ac =================================================================== --- branches/GNUPG-1-9-BRANCH/configure.ac 2006-05-23 15:32:57 UTC (rev 4142) +++ branches/GNUPG-1-9-BRANCH/configure.ac 2006-05-23 16:19:43 UTC (rev 4143) @@ -147,6 +147,16 @@ build_agent_only=$enableval) +# Allow disabling of bzib2 support. +# It is defined only after we confirm the library is available later +use_bzip2=yes +AC_MSG_CHECKING([whether to enable the BZIP2 compression algorithm]) +AC_ARG_ENABLE(bzip2, + AC_HELP_STRING([--disable-bzip2],[disable the BZIP2 compression algorithm]), + use_bzip2=$enableval) +AC_MSG_RESULT($use_bzip2) + + # Configure option to allow or disallow execution of external # programs, like a photo viewer. AC_MSG_CHECKING([whether to enable external program execution]) @@ -462,6 +472,8 @@ fi AM_CONDITIONAL(HAVE_W32_SYSTEM, test "$have_w32_system" = yes) +# These need to go after AC_PROG_CC so that $EXEEXT is defined +AC_DEFINE_UNQUOTED(EXEEXT,"$EXEEXT",[The executable file extension, if any]) # @@ -969,11 +981,13 @@ AC_DEFINE(DISABLE_REGEX,1,[ Define to disable regular expression support ]) fi -dnl Do we have zlib? Must do it here because Solaris failed -dnl when compiling a conftest (due to the "-lz" from LIBS). +# +# Do we have zlib? Must do it here because Solaris failed +# when compiling a conftest (due to the "-lz" from LIBS). +# Note that we combine zlib and bzlib2 in ZLIBS. +# _cppflags="${CPPFLAGS}" _ldflags="${LDFLAGS}" - AC_ARG_WITH(zlib, [ --with-zlib=DIR use libz in DIR],[ if test -d "$withval"; then @@ -984,12 +998,45 @@ AC_CHECK_HEADER(zlib.h, AC_CHECK_LIB(z, deflateInit2_, - LIBS="$LIBS -lz", + ZLIBS="-lz", CPPFLAGS=${_cppflags} LDFLAGS=${_ldflags}), CPPFLAGS=${_cppflags} LDFLAGS=${_ldflags}) - +# +# Check whether we can support bzip2 +# +if test "$use_bzip2" = yes ; then + _cppflags="${CPPFLAGS}" + _ldflags="${LDFLAGS}" + AC_ARG_WITH(bzip2, + AC_HELP_STRING([--with-bzip2=DIR],[look for bzip2 in DIR]), + [ + if test -d "$withval" ; then + CPPFLAGS="${CPPFLAGS} -I$withval/include" + LDFLAGS="${LDFLAGS} -L$withval/lib" + fi + ],withval="") + # Checking alongside stdio.h as an early version of bzip2 (1.0) + # required stdio.h to be included before bzlib.h, and Solaris 9 is + # woefully out of date. + if test "$withval" != no ; then + AC_CHECK_HEADER(bzlib.h, + AC_CHECK_LIB(bz2,BZ2_bzCompressInit, + [ + have_bz2=yes + ZLIBS="$ZLIBS -lbz2" + AC_DEFINE(HAVE_BZIP2,1, + [Defined if the bz2 compression library is available]) + ], + CPPFLAGS=${_cppflags} LDFLAGS=${_ldflags}), + CPPFLAGS=${_cppflags} LDFLAGS=${_ldflags},[#include ]) + fi +fi +AM_CONDITIONAL(ENABLE_BZIP2_SUPPORT,test x"$have_bz2" = "xyes") +AC_SUBST(ZLIBS) + + # See wether we want to run the long test suite. AC_ARG_WITH(pkits-tests, AC_HELP_STRING([--with-pkits-tests],[run the PKITS based tests]), Modified: branches/GNUPG-1-9-BRANCH/g10/ChangeLog =================================================================== --- branches/GNUPG-1-9-BRANCH/g10/ChangeLog 2006-05-23 15:32:57 UTC (rev 4142) +++ branches/GNUPG-1-9-BRANCH/g10/ChangeLog 2006-05-23 16:19:43 UTC (rev 4143) @@ -1,3 +1,43 @@ +2006-05-23 Werner Koch + + * card-util.c (generate_card_keys): Removed temporary kludge for + generate_keypair. + + * call-agent.c (agent_scd_setattr): Add arg SERIALNO. + (agent_scd_genkey): Ditto. + (agent_scd_change_pin): Ditto. + + * call-agent.h (struct agent_card_info_s): Updated to match the + one of 1.4.3. + + * Makefile.am (LDADD): Include ZLIBS. + + * gpgv.c: Removed stubs not anymore useful due to libgcrypt. + +2006-05-22 Werner Koch + + * keyserver.c (keyidlist): Replaced mpi_get_keyid by v3_keyid. + * keydb.h (v3_keyid): Added. + + * import.c (import): Better initialize KEYBLOCK as to quiet + compiler warning. + + * skclist.c (random_is_faked): New. + + * mainproc.c: Include pka.h. + +2006-05-19 Werner Koch + + * misc.c (openpgp_pk_test_algo2): Need to use gcry_pk_algo_info + directly. + (string_count_chr): New. + + * armor.c (parse_header_line): Use renamed function + length_sans_trailing_ws. + + * options.h, gpg.c: Option --strict is not used thus removed code + but kept option. + 2006-04-28 David Shaw (wk) * keyserver.c (direct_uri_map): New. Modified: branches/GNUPG-1-9-BRANCH/g10/Makefile.am =================================================================== --- branches/GNUPG-1-9-BRANCH/g10/Makefile.am 2006-05-23 15:32:57 UTC (rev 4142) +++ branches/GNUPG-1-9-BRANCH/g10/Makefile.am 2006-05-23 16:19:43 UTC (rev 4143) @@ -107,7 +107,7 @@ # ks-db.h \ # $(common_source) -LDADD = $(needed_libs) @LIBINTL@ @CAPLIBS@ @W32LIBS@ +LDADD = $(needed_libs) $(ZLIBS) @LIBINTL@ @CAPLIBS@ @W32LIBS@ gpg2_LDADD = $(LIBGCRYPT_LIBS) $(LDADD) -lassuan -lgpg-error gpgv2_LDADD = $(LIBGCRYPT_LIBS) $(LDADD) -lassuan -lgpg-error Modified: branches/GNUPG-1-9-BRANCH/g10/armor.c =================================================================== --- branches/GNUPG-1-9-BRANCH/g10/armor.c 2006-05-23 15:32:57 UTC (rev 4142) +++ branches/GNUPG-1-9-BRANCH/g10/armor.c 2006-05-23 16:19:43 UTC (rev 4143) @@ -336,7 +336,7 @@ int hashes=0; unsigned int len2; - len2 = check_trailing_ws( line, len ); + len2 = length_sans_trailing_ws ( line, len ); if( !len2 ) { afx->buffer_pos = len2; /* (it is not the fine way to do it here) */ return 0; /* WS only: same as empty line */ Modified: branches/GNUPG-1-9-BRANCH/g10/call-agent.c =================================================================== --- branches/GNUPG-1-9-BRANCH/g10/call-agent.c 2006-05-23 15:32:57 UTC (rev 4142) +++ branches/GNUPG-1-9-BRANCH/g10/call-agent.c 2006-05-23 16:19:43 UTC (rev 4143) @@ -626,10 +626,13 @@ } -/* Send an setattr command to the SCdaemon. */ +/* Send an setattr command to the SCdaemon. SERIALNO is not actually + used here but required by gpg 1.4's implementation of this code in + cardglue.c. */ int agent_scd_setattr (const char *name, - const unsigned char *value, size_t valuelen) + const unsigned char *value, size_t valuelen, + const char *serialno) { int rc; char line[ASSUAN_LINELENGTH]; @@ -719,9 +722,11 @@ return 0; } -/* Send a GENKEY command to the SCdaemon. */ +/* Send a GENKEY command to the SCdaemon. SERIALNO is not used in + this implementation. */ int -agent_scd_genkey (struct agent_card_genkey_s *info, int keyno, int force) +agent_scd_genkey (struct agent_card_genkey_s *info, int keyno, int force, + const char *serialno) { int rc; char line[ASSUAN_LINELENGTH]; @@ -865,9 +870,10 @@ 3: Change the admin PIN 101: Set a new PIN and reset the retry counter 102: Same as 101 + SERIALNO is not used. */ int -agent_scd_change_pin (int chvno) +agent_scd_change_pin (int chvno, const char *serialno) { int rc; char line[ASSUAN_LINELENGTH]; @@ -890,7 +896,7 @@ /* Perform a CHECKPIN operation. SERIALNO should be the serial - number of the card - optioanlly followed by the fingerprint; + number of the card - optionally followed by the fingerprint; however the fingerprint is ignored here. */ int agent_scd_checkpin (const char *serialno) @@ -910,3 +916,9 @@ } +/* Dummy function, only used by the gpg 1.4 implementation. */ +void +agent_clear_pin_cache (const char *sn) +{ + +} Modified: branches/GNUPG-1-9-BRANCH/g10/call-agent.h =================================================================== --- branches/GNUPG-1-9-BRANCH/g10/call-agent.h 2006-05-23 15:32:57 UTC (rev 4142) +++ branches/GNUPG-1-9-BRANCH/g10/call-agent.h 2006-05-23 16:19:43 UTC (rev 4143) @@ -21,7 +21,8 @@ #define GNUPG_G10_CALL_AGENT_H -struct agent_card_info_s { +struct agent_card_info_s +{ int error; /* private. */ char *serialno; /* malloced hex string. */ char *disp_name; /* malloced. */ @@ -29,6 +30,7 @@ int disp_sex; /* 0 = unspecified, 1 = male, 2 = female */ char *pubkey_url; /* malloced. */ char *login_data; /* malloced. */ + char *private_do[4]; /* malloced. */ char cafpr1valid; char cafpr2valid; char cafpr3valid; @@ -41,6 +43,9 @@ char fpr1[20]; char fpr2[20]; char fpr3[20]; + u32 fpr1time; + u32 fpr2time; + u32 fpr3time; unsigned long sig_counter; int chv1_cached; /* True if a PIN is not required for each signing. Note that the gpg-agent might cache @@ -73,10 +78,12 @@ /* Send a SETATTR command to the SCdaemon. */ int agent_scd_setattr (const char *name, - const unsigned char *value, size_t valuelen); + const unsigned char *value, size_t valuelen, + const char *serialno); /* Send a GENKEY command to the SCdaemon. */ -int agent_scd_genkey (struct agent_card_genkey_s *info, int keyno, int force); +int agent_scd_genkey (struct agent_card_genkey_s *info, int keyno, int force, + const char *serialno); /* Send a PKSIGN command to the SCdaemon. */ int agent_scd_pksign (const char *keyid, int hashalgo, @@ -89,11 +96,13 @@ char **r_buf, size_t *r_buflen); /* Change the PIN of an OpenPGP card or reset the retry counter. */ -int agent_scd_change_pin (int chvno); +int agent_scd_change_pin (int chvno, const char *serialno); /* Send the CHECKPIN command to the SCdaemon. */ int agent_scd_checkpin (const char *serialno); +/* Dummy function, only implemented by gpg 1.4. */ +void agent_clear_pin_cache (const char *sn); #endif /*GNUPG_G10_CALL_AGENT_H*/ Modified: branches/GNUPG-1-9-BRANCH/g10/card-util.c =================================================================== --- branches/GNUPG-1-9-BRANCH/g10/card-util.c 2006-05-23 15:32:57 UTC (rev 4142) +++ branches/GNUPG-1-9-BRANCH/g10/card-util.c 2006-05-23 16:19:43 UTC (rev 4143) @@ -27,7 +27,7 @@ #include #if GNUPG_MAJOR_VERSION != 1 -#include "gpg.h" +# include "gpg.h" #endif /*GNUPG_MAJOR_VERSION != 1*/ #include "util.h" #include "i18n.h" @@ -37,13 +37,13 @@ #include "main.h" #include "keyserver-internal.h" #if GNUPG_MAJOR_VERSION == 1 -#ifdef HAVE_LIBREADLINE -#include -#include -#endif /*HAVE_LIBREADLINE*/ -#include "cardglue.h" +# ifdef HAVE_LIBREADLINE +# include +# include +# endif /*HAVE_LIBREADLINE*/ +# include "cardglue.h" #else /*GNUPG_MAJOR_VERSION!=1*/ -#include "call-agent.h" +# include "call-agent.h" #endif /*GNUPG_MAJOR_VERSION!=1*/ #define CONTROL_D ('D' - 'A' + 1) @@ -1091,12 +1091,8 @@ if (check_pin_for_key_operation (&info, &forced_chv1)) goto leave; -#if GNUPG_MAJOR_VERSION == 1 generate_keypair (NULL, info.serialno, want_backup? opt.homedir:NULL); -#else - generate_keypair (NULL, info.serialno); -#endif leave: agent_release_card_info (&info); Modified: branches/GNUPG-1-9-BRANCH/g10/gpg.c =================================================================== --- branches/GNUPG-1-9-BRANCH/g10/gpg.c 2006-05-23 15:32:57 UTC (rev 4142) +++ branches/GNUPG-1-9-BRANCH/g10/gpg.c 2006-05-23 16:19:43 UTC (rev 4143) @@ -1376,7 +1376,7 @@ for(sl=iter->values;sl;sl=sl->next) { - print_string2(stdout,sl->d,strlen(sl->d),':',';'); + print_sanitized_string2 (stdout, sl->d, ':',';'); if(sl->next) printf(";"); } @@ -1782,13 +1782,11 @@ opt.no_perm_warn=1; else if (pargs.r_opt == oStrict ) { - opt.strict=1; - log_set_strict(1); + /* Not used */ } else if (pargs.r_opt == oNoStrict ) { - opt.strict=0; - log_set_strict(0); + /* Not used */ } } @@ -2360,8 +2358,14 @@ compress_algo_string = xstrdup(pargs.r.ret_str); } break; - case oCertDigestAlgo: cert_digest_string = xstrdup(pargs.r.ret_str); break; - case oNoSecmemWarn: secmem_set_flags( secmem_get_flags() | 1 ); break; + case oCertDigestAlgo: + cert_digest_string = xstrdup(pargs.r.ret_str); + break; + + case oNoSecmemWarn: + gcry_control (GCRYCTL_DISABLE_SECMEM_WARN); + break; + case oRequireSecmem: require_secmem=1; break; case oNoRequireSecmem: require_secmem=0; break; case oNoPermissionWarn: opt.no_perm_warn=1; break; @@ -2604,8 +2608,12 @@ xfree(iter); } break; - case oStrict: opt.strict=1; log_set_strict(1); break; - case oNoStrict: opt.strict=0; log_set_strict(0); break; + + case oStrict: + case oNoStrict: + /* Not used */ + break; + case oMangleDosFilenames: opt.mangle_dos_filenames = 1; break; case oNoMangleDosFilenames: opt.mangle_dos_filenames = 0; break; case oEnableProgressFilter: opt.enable_progress_filter = 1; break; @@ -3035,7 +3043,6 @@ /* Set the random seed file. */ if( use_random_seed ) { char *p = make_filename(opt.homedir, "random_seed", NULL ); - set_random_seed_file(p); gcry_control (GCRYCTL_SET_RANDOM_SEED_FILE, p); if (!access (p, F_OK)) register_secured_file (p); Modified: branches/GNUPG-1-9-BRANCH/g10/gpgv.c =================================================================== --- branches/GNUPG-1-9-BRANCH/g10/gpgv.c 2006-05-23 15:32:57 UTC (rev 4142) +++ branches/GNUPG-1-9-BRANCH/g10/gpgv.c 2006-05-23 16:19:43 UTC (rev 4143) @@ -387,27 +387,7 @@ byte *inbuf, unsigned nbytes ) {} void cipher_sync( gcry_cipher_hd_t c ) {} -/* Stubs to avoid linking to ../cipher/random.c */ -void random_dump_stats(void) {} -int quick_random_gen( int onoff ) { return -1;} -void randomize_buffer( byte *buffer, size_t length, int level ) {} -int random_is_faked() { return -1;} -byte *get_random_bits( size_t nbits, int level, int secure ) { return NULL;} -void set_random_seed_file( const char *name ) {} -void update_random_seed_file() {} -void fast_random_poll() {} -/* Stubs to avoid linking of ../cipher/primegen.c */ -void register_primegen_progress ( void (*cb)( void *, int), void *cb_data ) {} -MPI generate_secret_prime( unsigned nbits ) { return NULL;} -MPI generate_public_prime( unsigned nbits ) { return NULL;} -MPI generate_elg_prime( int mode, unsigned pbits, unsigned qbits, - gcry_mpi_t g, gcry_mpi_t **ret_factors ) { return NULL;} - -/* Do not link to ../cipher/rndlinux.c */ -void rndlinux_constructor(void) {} - - /* Stubs to avoid linking to ../util/ttyio.c */ int tty_batchmode( int onoff ) { return 0; } void tty_printf( const char *fmt, ... ) { } Modified: branches/GNUPG-1-9-BRANCH/g10/import.c =================================================================== --- branches/GNUPG-1-9-BRANCH/g10/import.c 2006-05-23 15:32:57 UTC (rev 4142) +++ branches/GNUPG-1-9-BRANCH/g10/import.c 2006-05-23 16:19:43 UTC (rev 4143) @@ -243,7 +243,9 @@ unsigned char **fpr,size_t *fpr_len,unsigned int options ) { PACKET *pending_pkt = NULL; - KBNODE keyblock; + KBNODE keyblock = NULL; /* Need to initialize because gcc can't + grasp the return semantics of + read_block. */ int rc = 0; getkey_disable_caches(); @@ -596,7 +598,7 @@ if(prefs->type==PREFTYPE_SYM) { - if (openpgp_cipher_algo_test (prefs->value)) + if (openpgp_cipher_test_algo (prefs->value)) { const char *algo = gcry_cipher_algo_name (prefs->value); if(!problem) Modified: branches/GNUPG-1-9-BRANCH/g10/keydb.h =================================================================== --- branches/GNUPG-1-9-BRANCH/g10/keydb.h 2006-05-23 15:32:57 UTC (rev 4142) +++ branches/GNUPG-1-9-BRANCH/g10/keydb.h 2006-05-23 16:19:43 UTC (rev 4143) @@ -254,6 +254,7 @@ /*-- keyid.c --*/ int pubkey_letter( int algo ); +u32 v3_keyid (gcry_mpi_t a, u32 *ki); void hash_public_key( gcry_md_hd_t md, PKT_public_key *pk ); size_t keystrlen(void); const char *keystr(u32 *keyid); Modified: branches/GNUPG-1-9-BRANCH/g10/keygen.c =================================================================== --- branches/GNUPG-1-9-BRANCH/g10/keygen.c 2006-05-23 15:32:57 UTC (rev 4142) +++ branches/GNUPG-1-9-BRANCH/g10/keygen.c 2006-05-23 16:19:43 UTC (rev 4143) @@ -1911,8 +1911,9 @@ /* append a warning if we do not have dev/random * or it is switched into quick testmode */ - if( quick_random_gen(-1) ) - strcpy(p, " (INSECURE!)" ); + /* FIXME: see skclist.c:random_is_faked */ + /* if( quick_random_gen(-1) ) */ + /* strcpy(p, " (INSECURE!)" ); */ /* print a note in case that UTF8 mapping has to be done */ for(p=uid; *p; p++ ) { @@ -2648,7 +2649,7 @@ /* * Generate a keypair (fname is only used in batch mode) If - * CARD_SERIALNO is not NULL the fucntion will create the keys on an + * CARD_SERIALNO is not NULL the function will create the keys on an * OpenPGP Card. If BACKUP_ENCRYPTION_DIR has been set and * CARD_SERIALNO is NOT NULL, the encryption key for the card gets * generate in software, imported to the card and a backup file Modified: branches/GNUPG-1-9-BRANCH/g10/keyserver.c =================================================================== --- branches/GNUPG-1-9-BRANCH/g10/keyserver.c 2006-05-23 15:32:57 UTC (rev 4142) +++ branches/GNUPG-1-9-BRANCH/g10/keyserver.c 2006-05-23 16:19:43 UTC (rev 4143) @@ -42,7 +42,10 @@ #include "trustdb.h" #include "keyserver-internal.h" #include "util.h" +#include "dns-cert.h" +#include "pka.h" + struct keyrec { KEYDB_SEARCH_DESC desc; @@ -1730,8 +1733,8 @@ node->pkt->pkt.public_key->version>=4) { (*klist)[*count].mode=KEYDB_SEARCH_MODE_LONG_KID; - mpi_get_keyid(node->pkt->pkt.public_key->pkey[0], - (*klist)[*count].u.kid); + v3_keyid (node->pkt->pkt.public_key->pkey[0], + (*klist)[*count].u.kid); (*count)++; if(*count==num) @@ -1982,7 +1985,7 @@ if(domain) *domain='.'; - type=get_cert(look,max_cert_size,&key,fpr,fpr_len,&url); + type=get_dns_cert(look,max_cert_size,&key,fpr,fpr_len,&url); if(type==1) { int armor_status=opt.no_armor; Modified: branches/GNUPG-1-9-BRANCH/g10/main.h =================================================================== --- branches/GNUPG-1-9-BRANCH/g10/main.h 2006-05-23 15:32:57 UTC (rev 4142) +++ branches/GNUPG-1-9-BRANCH/g10/main.h 2006-05-23 16:19:43 UTC (rev 4143) @@ -84,6 +84,7 @@ const byte *get_session_marker( size_t *rlen ); int openpgp_cipher_test_algo( int algo ); int openpgp_pk_test_algo( int algo ); +int openpgp_pk_test_algo2 ( int algo, unsigned int use ); int openpgp_pk_algo_usage ( int algo ); int openpgp_md_test_algo( int algo ); Modified: branches/GNUPG-1-9-BRANCH/g10/mainproc.c =================================================================== --- branches/GNUPG-1-9-BRANCH/g10/mainproc.c 2006-05-23 15:32:57 UTC (rev 4142) +++ branches/GNUPG-1-9-BRANCH/g10/mainproc.c 2006-05-23 16:19:43 UTC (rev 4143) @@ -41,6 +41,7 @@ #include "trustdb.h" #include "keyserver-internal.h" #include "photoid.h" +#include "pka.h" struct kidlist_item { Modified: branches/GNUPG-1-9-BRANCH/g10/misc.c =================================================================== --- branches/GNUPG-1-9-BRANCH/g10/misc.c 2006-05-23 15:32:57 UTC (rev 4142) +++ branches/GNUPG-1-9-BRANCH/g10/misc.c 2006-05-23 16:19:43 UTC (rev 4143) @@ -67,7 +67,19 @@ #include "i18n.h" +static int +string_count_chr (const char *string, int c) +{ + int count; + for (count=0; *string; string++ ) + if ( *string == c ) + count++; + return count; +} + + + #ifdef ENABLE_SELINUX_HACKS /* A object and a global variable to keep track of files marked as secured. */ @@ -416,12 +428,17 @@ int openpgp_pk_test_algo2( int algo, unsigned int use ) { + int use_buf = use; + size_t sizeof_use_buf = sizeof (use_buf); + if (algo == GCRY_PK_ELG_E) algo = GCRY_PK_ELG; if (algo < 0 || algo > 110) return gpg_error (GPG_ERR_PUBKEY_ALGO); - return gcry_pk_test_algo2 (algo, use); + + return gcry_pk_algo_info (algo, GCRYCTL_TEST_ALGO, + &use_buf, &sizeof_use_buf); } int Modified: branches/GNUPG-1-9-BRANCH/g10/options.h =================================================================== --- branches/GNUPG-1-9-BRANCH/g10/options.h 2006-05-23 15:32:57 UTC (rev 4142) +++ branches/GNUPG-1-9-BRANCH/g10/options.h 2006-05-23 16:19:43 UTC (rev 4143) @@ -193,7 +193,6 @@ int preserve_permissions; int no_homedir_creation; struct groupitem *grouplist; - int strict; int mangle_dos_filenames; int enable_progress_filter; unsigned int screen_columns; Modified: branches/GNUPG-1-9-BRANCH/g10/passphrase.c =================================================================== --- branches/GNUPG-1-9-BRANCH/g10/passphrase.c 2006-05-23 15:32:57 UTC (rev 4142) +++ branches/GNUPG-1-9-BRANCH/g10/passphrase.c 2006-05-23 16:19:43 UTC (rev 4143) @@ -1017,7 +1017,7 @@ int pwlen = strlen(pw); assert( s2k->hash_algo ); - dek->keylen = gcry_cipher_algo_get_keylen (dek->algo ); + dek->keylen = gcry_cipher_get_algo_keylen (dek->algo); if( !(dek->keylen > 0 && dek->keylen <= DIM(dek->key)) ) BUG(); @@ -1065,7 +1065,7 @@ i = gcry_md_get_algo_dlen ( s2k->hash_algo ); if( i > dek->keylen - used ) i = dek->keylen - used; - memcpy( dek->key+used, md_read(md, s2k->hash_algo), i ); + memcpy (dek->key+used, gcry_md_read (md, s2k->hash_algo), i); used += i; } gcry_md_close(md); Modified: branches/GNUPG-1-9-BRANCH/g10/pkclist.c =================================================================== --- branches/GNUPG-1-9-BRANCH/g10/pkclist.c 2006-05-23 15:32:57 UTC (rev 4142) +++ branches/GNUPG-1-9-BRANCH/g10/pkclist.c 2006-05-23 16:19:43 UTC (rev 4143) @@ -363,7 +363,7 @@ int edit_ownertrust (PKT_public_key *pk, int mode ) { - unsigned int trust; + unsigned int trust = 0; int no_help = 0; for(;;) @@ -897,7 +897,7 @@ else if (backlog) { /* This is part of our trick to expand and display groups. */ - answer = pop_strlist (&backlog); + answer = strlist_pop (&backlog); } else { @@ -1032,7 +1032,7 @@ rc = get_pubkey_byname (pk, def_rec, NULL, NULL, 1); if (rc) log_error(_("unknown default recipient \"%s\"\n"), def_rec ); - else if ( !(rc=check_pubkey_algo2(pk->pubkey_algo, use)) ) + else if ( !(rc=openpgp_pk_test_algo2(pk->pubkey_algo, use)) ) { /* Mark any_recipients here since the default recipient would have been used if it wasn't already there. It @@ -1079,7 +1079,7 @@ -1); goto fail; } - else if ( !(rc=check_pubkey_algo2(pk->pubkey_algo, use )) ) + else if ( !(rc=openpgp_pk_test_algo2(pk->pubkey_algo, use )) ) { /* Key found and usable. Check validity. */ int trustlevel; Modified: branches/GNUPG-1-9-BRANCH/g10/plaintext.c =================================================================== --- branches/GNUPG-1-9-BRANCH/g10/plaintext.c 2006-05-23 15:32:57 UTC (rev 4142) +++ branches/GNUPG-1-9-BRANCH/g10/plaintext.c 2006-05-23 16:19:43 UTC (rev 4143) @@ -282,7 +282,7 @@ rc = gpg_error_from_errno (errno); else rc = gpg_error (GPG_ERR_EOF); - log_error("Error writing to `%s': %s\n", + log_error("error writing to `%s': %s\n", fname, strerror(errno) ); goto leave; } @@ -310,7 +310,7 @@ { if(opt.max_output && (count+=len)>opt.max_output) { - log_error("Error writing to `%s': %s\n", + log_error("error writing to `%s': %s\n", fname,"exceeded --max-output limit\n"); rc = gpg_error (GPG_ERR_TOO_LARGE); xfree( buffer ); @@ -319,7 +319,7 @@ else if( fwrite( buffer, 1, len, fp ) != len ) { rc = (errno? gpg_error_from_errno (errno) : gpg_error (GPG_ERR_INTERNAL)); - log_error("Error writing to `%s': %s\n", + log_error ("error writing to `%s': %s\n", fname, strerror(errno) ); xfree( buffer ); goto leave; @@ -338,16 +338,17 @@ { if(opt.max_output && (++count)>opt.max_output) { - log_error("Error writing to `%s': %s\n", + log_error ("error writing to `%s': %s\n", fname,"exceeded --max-output limit\n"); rc = gpg_error (GPG_ERR_TOO_LARGE); goto leave; } else if( putc( c, fp ) == EOF ) { - log_error("Error writing to `%s': %s\n", + rc = (errno? gpg_error_from_errno (errno) + : gpg_error (GPG_ERR_INTERNAL)); + log_error ("error writing to `%s': %s\n", fname, strerror(errno) ); - rc = G10ERR_WRITE_FILE; goto leave; } } @@ -384,9 +385,10 @@ } if( fp && fp != stdout && fclose(fp) ) { - log_error("Error closing `%s': %s\n", fname, strerror(errno) ); + rc = (errno? gpg_error_from_errno (errno) + : gpg_error (GPG_ERR_INTERNAL)); + log_error ("error closing `%s': %s\n", fname, strerror(errno) ); fp = NULL; - rc = G10ERR_WRITE_FILE; goto leave; } fp = NULL; Modified: branches/GNUPG-1-9-BRANCH/g10/pubkey-enc.c =================================================================== --- branches/GNUPG-1-9-BRANCH/g10/pubkey-enc.c 2006-05-23 15:32:57 UTC (rev 4142) +++ branches/GNUPG-1-9-BRANCH/g10/pubkey-enc.c 2006-05-23 16:19:43 UTC (rev 4143) @@ -214,8 +214,8 @@ * DEK is the encryption key (session key) with length k * CSUM */ - if( DBG_CIPHER ) - log_hexdump("DEK frame:", frame, nframe ); + if (DBG_CIPHER) + log_printhex ("DEK frame:", frame, nframe ); n=0; if (!card) { @@ -267,7 +267,7 @@ goto leave; } if( DBG_CIPHER ) - log_hexdump("DEK is:", dek->key, dek->keylen ); + log_printhex ("DEK is:", dek->key, dek->keylen ); /* check that the algo is in the preferences and whether it has expired */ { PKT_public_key *pk = NULL; Modified: branches/GNUPG-1-9-BRANCH/g10/sign.c =================================================================== --- branches/GNUPG-1-9-BRANCH/g10/sign.c 2006-05-23 15:32:57 UTC (rev 4142) +++ branches/GNUPG-1-9-BRANCH/g10/sign.c 2006-05-23 16:19:43 UTC (rev 4143) @@ -458,7 +458,7 @@ else { for (prefs=opt.personal_digest_prefs; prefs->type; prefs++) - if (gcry_md-get_algo_dlen (prefs->value) == qbytes) + if (gcry_md_get_algo_dlen (prefs->value) == qbytes) return prefs->value; } } Modified: branches/GNUPG-1-9-BRANCH/g10/skclist.c =================================================================== --- branches/GNUPG-1-9-BRANCH/g10/skclist.c 2006-05-23 15:32:57 UTC (rev 4142) +++ branches/GNUPG-1-9-BRANCH/g10/skclist.c 2006-05-23 16:19:43 UTC (rev 4143) @@ -36,6 +36,19 @@ #include "cipher.h" +/* There is currently no way to get the status of the quick random + generator flag from libgcrypt and it is not clear whether this + faked RNG is really a good idea. Thus for now we use this stub + function but we should consider to entirely remove this fake RNG + stuff. */ +static int +random_is_faked (void) +{ + return 0; +} + + + void release_sk_list( SK_LIST sk_list ) { Modified: branches/GNUPG-1-9-BRANCH/jnlib/ChangeLog =================================================================== --- branches/GNUPG-1-9-BRANCH/jnlib/ChangeLog 2006-05-23 15:32:57 UTC (rev 4142) +++ branches/GNUPG-1-9-BRANCH/jnlib/ChangeLog 2006-05-23 16:19:43 UTC (rev 4143) @@ -1,3 +1,22 @@ +2006-05-23 Werner Koch + + * libjnlib-config.h (JNLIB_NEED_UTF8CONV): Fixed typo in name. + + * dotlock.c (release_dotlock): Don't act if we don't have any + locks at all. + (destroy_dotlock): New. From 1.4.3. + (dotlock_remove_lockfiles): Make use of destroy function. + +2006-05-19 Werner Koch + + * strlist.c (append_to_strlist2): Enabled. + + * stringhelp.c (print_sanitized_buffer2): New. Changed the rules + to match the behaviour of print_string2 from gnupg 1.4.3. + (print_sanitized_buffer): Use the new function. + (print_sanitized_string2): New. + (hextobyte): New. Taken from gpg 1.4.3. + 2006-04-28 Werner Koch * stringhelp.c (print_sanitized_buffer): Fix bug where the count Modified: branches/GNUPG-1-9-BRANCH/jnlib/dotlock.c =================================================================== --- branches/GNUPG-1-9-BRANCH/jnlib/dotlock.c 2006-05-23 15:32:57 UTC (rev 4142) +++ branches/GNUPG-1-9-BRANCH/jnlib/dotlock.c 2006-05-23 16:19:43 UTC (rev 4143) @@ -1,5 +1,6 @@ /* dotlock.c - dotfile locking - * Copyright (C) 1998,2000,2001,2003 Free Software Foundation, Inc. + * Copyright (C) 1998, 2000, 2001, 2003, 2004, + * 2005 Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -149,9 +150,9 @@ dirpart = file_to_lock; } - #ifdef _REENTRANT +#ifdef _REENTRANT /* fixme: aquire mutex on all_lockfiles */ - #endif +#endif h->next = all_lockfiles; all_lockfiles = h; @@ -202,15 +203,54 @@ return NULL; } - #ifdef _REENTRANT +# ifdef _REENTRANT /* release mutex */ - #endif +# endif #endif /* !HAVE_DOSISH_SYSTEM */ h->lockname = jnlib_xmalloc( strlen(file_to_lock) + 6 ); strcpy(stpcpy(h->lockname, file_to_lock), EXTSEP_S "lock"); return h; } + +void +destroy_dotlock ( DOTLOCK h ) +{ +#if !defined (HAVE_DOSISH_SYSTEM) + if ( h ) + { + DOTLOCK hprev, htmp; + + /* First remove the handle from our global list of all locks. */ + for (hprev=NULL, htmp=all_lockfiles; htmp; hprev=htmp, htmp=htmp->next) + if (htmp == h) + { + if (hprev) + hprev->next = htmp->next; + else + all_lockfiles = htmp->next; + h->next = NULL; + break; + } + + /* Second destroy the lock. */ + if (!h->disable) + { + if (h->locked && h->lockname) + unlink (h->lockname); + if (h->tname) + unlink (h->tname); + jnlib_free (h->tname); + jnlib_free (h->lockname); + } + jnlib_free(h); + + } +#endif +} + + + static int maybe_deadlock( DOTLOCK h ) { @@ -331,6 +371,13 @@ #else int pid; + /* To avoid atexit race conditions we first check whether there + are any locks left. It might happen that another atexit + handler tries to release the lock while the atexit handler of + this module already ran and thus H is undefined. */ + if(!all_lockfiles) + return 0; + if( h->disable ) { return 0; } @@ -414,22 +461,16 @@ dotlock_remove_lockfiles() { #ifndef HAVE_DOSISH_SYSTEM - DOTLOCK h, h2; - - h = all_lockfiles; - all_lockfiles = NULL; - - while( h ) { - h2 = h->next; - if (!h->disable ) { - if( h->locked ) - unlink( h->lockname ); - unlink(h->tname); - jnlib_free(h->tname); - jnlib_free(h->lockname); - } - jnlib_free(h); - h = h2; + DOTLOCK h, h2; + + h = all_lockfiles; + all_lockfiles = NULL; + + while ( h ) + { + h2 = h->next; + destroy_dotlock (h); + h = h2; } #endif } Modified: branches/GNUPG-1-9-BRANCH/jnlib/dotlock.h =================================================================== --- branches/GNUPG-1-9-BRANCH/jnlib/dotlock.h 2006-05-23 15:32:57 UTC (rev 4142) +++ branches/GNUPG-1-9-BRANCH/jnlib/dotlock.h 2006-05-23 16:19:43 UTC (rev 4143) @@ -26,6 +26,7 @@ void disable_dotlock (void); DOTLOCK create_dotlock(const char *file_to_lock); +void destroy_dotlock ( DOTLOCK h ); int make_dotlock (DOTLOCK h, long timeout); int release_dotlock (DOTLOCK h); void dotlock_remove_lockfiles (void); Modified: branches/GNUPG-1-9-BRANCH/jnlib/libjnlib-config.h =================================================================== --- branches/GNUPG-1-9-BRANCH/jnlib/libjnlib-config.h 2006-05-23 15:32:57 UTC (rev 4142) +++ branches/GNUPG-1-9-BRANCH/jnlib/libjnlib-config.h 2006-05-23 16:19:43 UTC (rev 4143) @@ -30,31 +30,31 @@ #include "logging.h" /* We require support for utf-8 conversion. */ -#define JNLIB_NEED_UTF8CONF 1 +#define JNLIB_NEED_UTF8CONV 1 #ifdef USE_SIMPLE_GETTEXT int set_gettext_file( const char *filename ); const char *gettext( const char *msgid ); - #define _(a) gettext (a) - #define N_(a) (a) +# define _(a) gettext (a) +# define N_(a) (a) #else #ifdef HAVE_LOCALE_H - #include +# include #endif #ifdef ENABLE_NLS - #include - #define _(a) gettext (a) - #ifdef gettext_noop - #define N_(a) gettext_noop (a) - #else - #define N_(a) (a) - #endif +# include +# define _(a) gettext (a) +# ifdef gettext_noop +# define N_(a) gettext_noop (a) +# else +# define N_(a) (a) +# endif #else - #define _(a) (a) - #define N_(a) (a) +# define _(a) (a) +# define N_(a) (a) #endif #endif /* !USE_SIMPLE_GETTEXT */ Modified: branches/GNUPG-1-9-BRANCH/jnlib/stringhelp.c =================================================================== --- branches/GNUPG-1-9-BRANCH/jnlib/stringhelp.c 2006-05-23 15:32:57 UTC (rev 4142) +++ branches/GNUPG-1-9-BRANCH/jnlib/stringhelp.c 2006-05-23 16:19:43 UTC (rev 4143) @@ -218,8 +218,8 @@ return len; } -/**************** - * remove trailing white spaces and return the length of the buffer +/* + * Return the length of line ignoring trailing white-space. */ size_t length_sans_trailing_ws (const unsigned char *line, size_t len) @@ -336,34 +336,86 @@ #endif } + +/* Convert 2 hex characters at S to a byte value. Return this value + or -1 if there is an error. */ +int +hextobyte (const char *s) +{ + int c; + + if ( *s >= '0' && *s <= '9' ) + c = 16 * (*s - '0'); + else if ( *s >= 'A' && *s <= 'F' ) + c = 16 * (10 + *s - 'A'); + else if ( *s >= 'a' && *s <= 'f' ) + c = 16 * (10 + *s - 'a'); + else + return -1; + s++; + if ( *s >= '0' && *s <= '9' ) + c += *s - '0'; + else if ( *s >= 'A' && *s <= 'F' ) + c += 10 + *s - 'A'; + else if ( *s >= 'a' && *s <= 'f' ) + c += 10 + *s - 'a'; + else + return -1; + return c; +} + + /* Print a BUFFER to stream FP while replacing all control characters - and the character DELIM with standard C escape sequences. Returns - the number of characters printed. */ + and the characters DELIM and DELIM2 with standard C escape + sequences. Returns the number of characters printed. */ size_t -print_sanitized_buffer (FILE *fp, const void *buffer, size_t length, - int delim) +print_sanitized_buffer2 (FILE *fp, const void *buffer, size_t length, + int delim, int delim2) { const unsigned char *p = buffer; size_t count = 0; for (; length; length--, p++, count++) { - if (*p < 0x20 || *p == 0x7f || *p == delim) + /* Fixme: Check whether *p < 0xa0 is correct for utf8 encoding. */ + if (*p < 0x20 + || (*p >= 0x7f && *p < 0xa0) + || *p == delim + || *p == delim2 + || ((delim || delim2) && *p=='\\')) { putc ('\\', fp); count++; if (*p == '\n') - putc ('n', fp); + { + putc ('n', fp); + count++; + } else if (*p == '\r') - putc ('r', fp); + { + putc ('r', fp); + count++; + } else if (*p == '\f') - putc ('f', fp); + { + putc ('f', fp); + count++; + } else if (*p == '\v') - putc ('v', fp); + { + putc ('v', fp); + count++; + } else if (*p == '\b') - putc ('b', fp); + { + putc ('b', fp); + count++; + } else if (!*p) - putc('0', fp); + { + putc('0', fp); + count++; + } else { fprintf (fp, "x%02x", *p); @@ -371,13 +423,25 @@ } } else - putc (*p, fp); + { + putc (*p, fp); + count++; + } } return count; } +/* Same as print_sanitized_buffer2 but with just one delimiter. */ size_t +print_sanitized_buffer (FILE *fp, const void *buffer, size_t length, + int delim) +{ + return print_sanitized_buffer2 (fp, buffer, length, delim, 0); +} + + +size_t print_sanitized_utf8_buffer (FILE *fp, const void *buffer, size_t length, int delim) { @@ -405,6 +469,13 @@ size_t +print_sanitized_string2 (FILE *fp, const char *string, int delim, int delim2) +{ + return string? print_sanitized_buffer2 (fp, string, strlen (string), + delim, delim2):0; +} + +size_t print_sanitized_string (FILE *fp, const char *string, int delim) { return string? print_sanitized_buffer (fp, string, strlen (string), delim):0; Modified: branches/GNUPG-1-9-BRANCH/jnlib/stringhelp.h =================================================================== --- branches/GNUPG-1-9-BRANCH/jnlib/stringhelp.h 2006-05-23 15:32:57 UTC (rev 4142) +++ branches/GNUPG-1-9-BRANCH/jnlib/stringhelp.h 2006-05-23 16:19:43 UTC (rev 4143) @@ -40,11 +40,17 @@ char *make_filename( const char *first_part, ... ); int compare_filenames( const char *a, const char *b ); +int hextobyte (const char *s); + size_t print_sanitized_buffer (FILE *fp, const void *buffer, size_t length, int delim); +size_t print_sanitized_buffer2 (FILE *fp, const void *buffer, size_t length, + int delim, int delim2); size_t print_sanitized_utf8_buffer (FILE *fp, const void *buffer, size_t length, int delim); size_t print_sanitized_string (FILE *fp, const char *string, int delim); +size_t print_sanitized_string2 (FILE *fp, const char *string, + int delim, int delim2); size_t print_sanitized_utf8_string (FILE *fp, const char *string, int delim); char *sanitize_buffer (const void *p, size_t n, int delim); Modified: branches/GNUPG-1-9-BRANCH/jnlib/strlist.c =================================================================== --- branches/GNUPG-1-9-BRANCH/jnlib/strlist.c 2006-05-23 15:32:57 UTC (rev 4142) +++ branches/GNUPG-1-9-BRANCH/jnlib/strlist.c 2006-05-23 16:19:43 UTC (rev 4143) @@ -95,22 +95,24 @@ return sl; } -#if 0 + +#ifdef JNLIB_NEED_UTF8CONV strlist_t append_to_strlist2( strlist_t *list, const char *string, int is_utf8 ) { - strlist_t sl; - - if( is_utf8 ) - sl = append_to_strlist( list, string ); - else { - char *p = native_to_utf8( string ); - sl = append_to_strlist( list, p ); - m_free( p ); + strlist_t sl; + + if( is_utf8 ) + sl = append_to_strlist( list, string ); + else + { + char *p = native_to_utf8 (string); + sl = append_to_strlist( list, p ); + jnlib_free( p ); } - return sl; + return sl; } -#endif +#endif /* JNLIB_NEED_UTF8CONV */ /* Return a copy of LIST. */ Modified: branches/GNUPG-1-9-BRANCH/jnlib/strlist.h =================================================================== --- branches/GNUPG-1-9-BRANCH/jnlib/strlist.h 2006-05-23 15:32:57 UTC (rev 4142) +++ branches/GNUPG-1-9-BRANCH/jnlib/strlist.h 2006-05-23 16:19:43 UTC (rev 4143) @@ -35,11 +35,11 @@ strlist_t add_to_strlist2( strlist_t *list, const char *string, int is_utf8); strlist_t append_to_strlist (strlist_t *list, const char *string); +strlist_t append_to_strlist2 (strlist_t *list, const char *string, + int is_utf8); strlist_t strlist_copy (strlist_t list); -/*strlist_t append_to_strlist2( strlist_t *list, const char *string, - int is_utf8);*/ strlist_t strlist_prev (strlist_t head, strlist_t node); strlist_t strlist_last (strlist_t node); char * strlist_pop (strlist_t *list); Modified: branches/GNUPG-1-9-BRANCH/scd/app-p15.c =================================================================== --- branches/GNUPG-1-9-BRANCH/scd/app-p15.c 2006-05-23 15:32:57 UTC (rev 4142) +++ branches/GNUPG-1-9-BRANCH/scd/app-p15.c 2006-05-23 16:19:43 UTC (rev 4143) @@ -18,6 +18,16 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ +/* Information pertaining to the BELPIC developer card samples: + + Unblock PUK: "222222111111" + Reset PIN: "333333111111") + + e.g. the APDUs 00:20:00:02:08:2C:33:33:33:11:11:11:FF + and 00:24:01:01:08:24:12:34:FF:FF:FF:FF:FF + should change the PIN into 1234. +*/ + #include #include #include Modified: branches/GNUPG-1-9-BRANCH/sm/ChangeLog =================================================================== --- branches/GNUPG-1-9-BRANCH/sm/ChangeLog 2006-05-23 15:32:57 UTC (rev 4142) +++ branches/GNUPG-1-9-BRANCH/sm/ChangeLog 2006-05-23 16:19:43 UTC (rev 4143) @@ -1,3 +1,9 @@ +2006-05-23 Werner Koch + + * keydb.c (hextobyte): Deleted as it is now defined in jnlib. + + * Makefile.am (gpgsm_LDADD): Include ZLIBS. + 2006-05-19 Marcus Brinkmann * keydb.c (keydb_insert_cert): Do not lock here, but only check if @@ -9,6 +15,10 @@ * delete.c (delete_one): Add new argument to invocation of keydb_delete. +2006-05-15 Werner Koch + + * keylist.c (print_names_raw): Sanitize URI. + 2006-03-21 Werner Koch * certchain.c (get_regtp_ca_info): New. Modified: branches/GNUPG-1-9-BRANCH/sm/Makefile.am =================================================================== --- branches/GNUPG-1-9-BRANCH/sm/Makefile.am 2006-05-23 15:32:57 UTC (rev 4142) +++ branches/GNUPG-1-9-BRANCH/sm/Makefile.am 2006-05-23 16:19:43 UTC (rev 4143) @@ -56,6 +56,6 @@ gpgsm_LDADD = ../jnlib/libjnlib.a ../kbx/libkeybox.a \ ../common/libcommon.a ../gl/libgnu.a \ $(LIBGCRYPT_LIBS) $(KSBA_LIBS) $(LIBASSUAN_LIBS) -lgpg-error \ - $(LIBINTL) $(PTH_LIBS) + $(LIBINTL) $(PTH_LIBS) $(ZLIBS) Modified: branches/GNUPG-1-9-BRANCH/sm/keydb.c =================================================================== --- branches/GNUPG-1-9-BRANCH/sm/keydb.c 2006-05-23 15:32:57 UTC (rev 4142) +++ branches/GNUPG-1-9-BRANCH/sm/keydb.c 2006-05-23 16:19:43 UTC (rev 4143) @@ -1010,33 +1010,6 @@ static int -hextobyte (const char *string) -{ - const unsigned char *s = (const unsigned char *)string; - int c; - - if( *s >= '0' && *s <= '9' ) - c = 16 * (*s - '0'); - else if ( *s >= 'A' && *s <= 'F' ) - c = 16 * (10 + *s - 'A'); - else if ( *s >= 'a' && *s <= 'f' ) - c = 16 * (10 + *s - 'a'); - else - return -1; - s++; - if ( *s >= '0' && *s <= '9' ) - c += *s - '0'; - else if ( *s >= 'A' && *s <= 'F' ) - c += 10 + *s - 'A'; - else if ( *s >= 'a' && *s <= 'f' ) - c += 10 + *s - 'a'; - else - return -1; - return c; -} - - -static int classify_user_id (const char *name, KEYDB_SEARCH_DESC *desc, int *force_exact ) Modified: branches/GNUPG-1-9-BRANCH/sm/keylist.c =================================================================== --- branches/GNUPG-1-9-BRANCH/sm/keylist.c 2006-05-23 15:32:57 UTC (rev 4142) +++ branches/GNUPG-1-9-BRANCH/sm/keylist.c 2006-05-23 16:19:43 UTC (rev 4143) @@ -529,7 +529,9 @@ for (idx=0; (s = ksba_name_enum (name, idx)); idx++) { char *p = ksba_name_get_uri (name, idx); - printf ("%*s%s\n", idx||indent_all?indent:0, "", p?p:s); + printf ("%*s", idx||indent_all?indent:0, ""); + print_sanitized_string (fp, p?p:s, 0); + putc ('\n', fp); xfree (p); } } Modified: branches/GNUPG-1-9-BRANCH/tools/ChangeLog =================================================================== --- branches/GNUPG-1-9-BRANCH/tools/ChangeLog 2006-05-23 15:32:57 UTC (rev 4142) +++ branches/GNUPG-1-9-BRANCH/tools/ChangeLog 2006-05-23 16:19:43 UTC (rev 4143) @@ -1,3 +1,11 @@ +2006-05-23 Werner Koch + + * gpgparsemail.c: Include config.h if available + (stpcpy): Conditional include it. + + * gpgconf-comp.c (hextobyte): Removed as it is now availble in + jnlib. + 2005-12-20 Werner Koch * gpgconf-comp.c (gc_options_gpg): Add allow-pka-lookup. Modified: branches/GNUPG-1-9-BRANCH/tools/gpgconf-comp.c =================================================================== --- branches/GNUPG-1-9-BRANCH/tools/gpgconf-comp.c 2006-05-23 15:32:57 UTC (rev 4142) +++ branches/GNUPG-1-9-BRANCH/tools/gpgconf-comp.c 2006-05-23 16:19:43 UTC (rev 4143) @@ -998,35 +998,7 @@ } -/* Convert two hexadecimal digits from STR to the value they - represent. Returns -1 if one of the characters is not a - hexadecimal digit. */ -static int -hextobyte (const char *str) -{ - int val = 0; - int i; -#define NROFHEXDIGITS 2 - for (i = 0; i < NROFHEXDIGITS; i++) - { - if (*str >= '0' && *str <= '9') - val += *str - '0'; - else if (*str >= 'A' && *str <= 'F') - val += 10 + *str - 'A'; - else if (*str >= 'a' && *str <= 'f') - val += 10 + *str - 'a'; - else - return -1; - if (i < NROFHEXDIGITS - 1) - val *= 16; - str++; - } - return val; -} - - - /* Percent-Deescape special characters. The string is valid until the next invocation of the function. */ static char * Modified: branches/GNUPG-1-9-BRANCH/tools/gpgparsemail.c =================================================================== --- branches/GNUPG-1-9-BRANCH/tools/gpgparsemail.c 2006-05-23 15:32:57 UTC (rev 4142) +++ branches/GNUPG-1-9-BRANCH/tools/gpgparsemail.c 2006-05-23 16:19:43 UTC (rev 4143) @@ -24,6 +24,9 @@ for the content of the line. Several options are available to scrutinize the message. S/MIME and OpenPGP support is included. */ +#ifdef HAVE_CONFIG_H +#include +#endif #include #include @@ -145,6 +148,7 @@ return p; } +#ifndef HAVE_STPCPY static char * stpcpy (char *a,const char *b) { @@ -154,8 +158,8 @@ return (char*)a; } +#endif - static int run_gnupg (int smime, int sig_fd, int data_fd, int *close_list) { From cvs at cvs.gnupg.org Wed May 24 00:04:11 2006 From: cvs at cvs.gnupg.org (svn author dshaw) Date: Tue May 23 23:30:47 2006 Subject: [svn] GnuPG - r4144 - trunk/g10 Message-ID: Author: dshaw Date: 2006-05-24 00:04:09 +0200 (Wed, 24 May 2006) New Revision: 4144 Modified: trunk/g10/ChangeLog trunk/g10/gpg.c Log: * gpg.c (reopen_std): New function to reopen fd 0, 1, or 2 if we are called with them closed. This is to protect our keyring/trustdb files from corruption if they get attached to one of the standard fds. Print a warning if possible that this has happened, and fail completely if we cannot reopen (should never happen). (main): Call it here. Modified: trunk/g10/ChangeLog =================================================================== --- trunk/g10/ChangeLog 2006-05-23 16:19:43 UTC (rev 4143) +++ trunk/g10/ChangeLog 2006-05-23 22:04:09 UTC (rev 4144) @@ -1,3 +1,13 @@ +2006-05-23 David Shaw + + * gpg.c (reopen_std): New function to reopen fd 0, 1, or 2 if we + are called with them closed. This is to protect our + keyring/trustdb files from corruption if they get attached to one + of the standard fds. Print a warning if possible that this has + happened, and fail completely if we cannot reopen (should never + happen). + (main): Call it here. + 2006-05-22 David Shaw * parse-packet.c (dump_sig_subpkt, parse_signature), Modified: trunk/g10/gpg.c =================================================================== --- trunk/g10/gpg.c 2006-05-23 16:19:43 UTC (rev 4143) +++ trunk/g10/gpg.c 2006-05-23 22:04:09 UTC (rev 4144) @@ -1625,6 +1625,67 @@ log_error("unknown trust model `%s'\n",model); } +/* Must be called before we open any files. */ +static void +reopen_std(void) +{ +#ifdef HAVE_STAT + struct stat statbuf; + int did_stdin=0,did_stdout=0,did_stderr=0; + FILE *complain; + + if(fstat(STDIN_FILENO,&statbuf)==-1 && errno==EBADF) + { + if(open("/dev/null",O_RDONLY)==STDIN_FILENO) + did_stdin=1; + else + did_stdin=2; + } + + if(fstat(STDOUT_FILENO,&statbuf)==-1 && errno==EBADF) + { + if(open("/dev/null",O_WRONLY)==STDOUT_FILENO) + did_stdout=1; + else + did_stdout=2; + } + + if(fstat(STDERR_FILENO,&statbuf)==-1 && errno==EBADF) + { + if(open("/dev/null",O_WRONLY)==STDERR_FILENO) + did_stderr=1; + else + did_stderr=2; + } + + /* It's hard to log this sort of thing since the filehandle we would + complain to may be closed... */ + if(did_stderr==0) + complain=stderr; + else if(did_stdout==0) + complain=stdout; + else + complain=NULL; + + if(complain) + { + if(did_stdin==1) + fprintf(complain,"gpg: WARNING: standard input reopened\n"); + if(did_stdout==1) + fprintf(complain,"gpg: WARNING: standard output reopened\n"); + if(did_stderr==1) + fprintf(complain,"gpg: WARNING: standard error reopened\n"); + + if(did_stdin==2 || did_stdout==2 || did_stderr==2) + fprintf(complain,"gpg: fatal: unable to reopen standard input," + " output, or error\n"); + } + + if(did_stdin==2 || did_stdout==2 || did_stderr==2) + exit(3); +#endif +} + int main (int argc, char **argv ) { @@ -1675,6 +1736,7 @@ opt.lock_once = 1; #endif /* __riscos__ */ + reopen_std(); trap_unaligned(); secmem_set_flags( secmem_get_flags() | 2 ); /* suspend warnings */ /* Please note that we may running SUID(ROOT), so be very CAREFUL From cvs at cvs.gnupg.org Wed May 24 00:48:22 2006 From: cvs at cvs.gnupg.org (svn author dshaw) Date: Wed May 24 00:14:52 2006 Subject: [svn] GnuPG - r4145 - trunk/doc Message-ID: Author: dshaw Date: 2006-05-24 00:48:21 +0200 (Wed, 24 May 2006) New Revision: 4145 Modified: trunk/doc/ChangeLog trunk/doc/mksamplekeys Log: * mksamplekeys: Incorporate new package signature key and minimize keys when generating samplekeys.asc. Modified: trunk/doc/ChangeLog =================================================================== --- trunk/doc/ChangeLog 2006-05-23 22:04:09 UTC (rev 4144) +++ trunk/doc/ChangeLog 2006-05-23 22:48:21 UTC (rev 4145) @@ -1,3 +1,8 @@ +2006-05-23 David Shaw + + * mksamplekeys: Incorporate new package signature key and minimize + keys when generating samplekeys.asc. + 2006-05-17 Werner Koch * samplekeys.asc: Added new package signature key and cleaned all Modified: trunk/doc/mksamplekeys =================================================================== --- trunk/doc/mksamplekeys 2006-05-23 22:04:09 UTC (rev 4144) +++ trunk/doc/mksamplekeys 2006-05-23 22:48:21 UTC (rev 4145) @@ -1,12 +1,12 @@ #/bin/sh # Generate a samplekeys.asc -keys="5B0358A2 57548DCD 99242560 CA57AD7C B2D7795E 37D92FFB" +keys="5B0358A2 57548DCD 99242560 CA57AD7C B2D7795E 1CE0C630" for i in $keys; do gpg --list-keys $i | awk ' { print " " $0 }' done echo -gpg --export -a $keys +gpg --export-options export-minimal --export -a $keys From cvs at cvs.gnupg.org Wed May 24 13:12:29 2006 From: cvs at cvs.gnupg.org (svn author wk) Date: Wed May 24 12:39:01 2006 Subject: [svn] GnuPG - r4146 - in branches/GNUPG-1-9-BRANCH: . g10 Message-ID: Author: wk Date: 2006-05-24 13:12:28 +0200 (Wed, 24 May 2006) New Revision: 4146 Modified: branches/GNUPG-1-9-BRANCH/ChangeLog branches/GNUPG-1-9-BRANCH/configure.ac branches/GNUPG-1-9-BRANCH/g10/ChangeLog branches/GNUPG-1-9-BRANCH/g10/gpg.c branches/GNUPG-1-9-BRANCH/g10/gpgv.c branches/GNUPG-1-9-BRANCH/g10/keygen.c branches/GNUPG-1-9-BRANCH/g10/keyid.c branches/GNUPG-1-9-BRANCH/g10/main.h branches/GNUPG-1-9-BRANCH/g10/misc.c Log: Still making gpg2 work. At least the keyids are now correctly computed again. Modified: branches/GNUPG-1-9-BRANCH/ChangeLog =================================================================== --- branches/GNUPG-1-9-BRANCH/ChangeLog 2006-05-23 22:48:21 UTC (rev 4145) +++ branches/GNUPG-1-9-BRANCH/ChangeLog 2006-05-24 11:12:28 UTC (rev 4146) @@ -1,3 +1,7 @@ +2006-05-24 Werner Koch + + * configure.ac: New option --disable-optimization taked from 1.4.3. + 2006-05-23 Werner Koch * configure.ac (ZLIBS): New for zlib link commands. Add bzip2 Modified: branches/GNUPG-1-9-BRANCH/configure.ac =================================================================== --- branches/GNUPG-1-9-BRANCH/configure.ac 2006-05-23 22:48:21 UTC (rev 4145) +++ branches/GNUPG-1-9-BRANCH/configure.ac 2006-05-24 11:12:28 UTC (rev 4146) @@ -1080,6 +1080,20 @@ fi fi +# +# This is handy for debugging so the compiler doesn't rearrange +# things and eliminate variables. +# +AC_ARG_ENABLE(optimization, + AC_HELP_STRING([--disable-optimization], + [disable compiler optimization]), + [if test $enableval = no ; then + CFLAGS=`echo $CFLAGS | sed 's/-O[[0-9]]//'` + fi]) + + + + AC_SUBST(NETLIBS) AC_SUBST(W32LIBS) Modified: branches/GNUPG-1-9-BRANCH/g10/ChangeLog =================================================================== --- branches/GNUPG-1-9-BRANCH/g10/ChangeLog 2006-05-23 22:48:21 UTC (rev 4145) +++ branches/GNUPG-1-9-BRANCH/g10/ChangeLog 2006-05-24 11:12:28 UTC (rev 4146) @@ -1,3 +1,14 @@ +2006-05-24 Werner Koch + + * keyid.c (hash_public_key): Do not double hash the length bytes, + they are already included by mpi_print. + + * misc.c (openpgp_pk_test_algo2): Get test call right. + + * misc.c (string_to_cipher_algo, string_to_digest_algo): New. + * keygen.c (keygen_set_std_prefs): use them here. + * gpg.c (main): and here. + 2006-05-23 Werner Koch * card-util.c (generate_card_keys): Removed temporary kludge for Modified: branches/GNUPG-1-9-BRANCH/g10/gpg.c =================================================================== --- branches/GNUPG-1-9-BRANCH/g10/gpg.c 2006-05-23 22:48:21 UTC (rev 4145) +++ branches/GNUPG-1-9-BRANCH/g10/gpg.c 2006-05-24 11:12:28 UTC (rev 4146) @@ -2515,7 +2515,7 @@ case oNoUtf8Strings: utf8_strings = 0; break; case oDisableCipherAlgo: { - int algo = gcry_cipher_map_name (pargs.r.ret_str); + int algo = string_to_cipher_algo (pargs.r.ret_str); gcry_cipher_ctl (NULL, GCRYCTL_DISABLE_ALGO, &algo, sizeof algo); } break; @@ -2859,7 +2859,7 @@ if( def_cipher_string ) { - opt.def_cipher_algo = gcry_cipher_map_name (def_cipher_string); + opt.def_cipher_algo = string_to_cipher_algo (def_cipher_string); if(opt.def_cipher_algo==0 && (ascii_strcasecmp(def_cipher_string,"idea")==0 || ascii_strcasecmp(def_cipher_string,"s1")==0)) @@ -2869,7 +2869,7 @@ log_error(_("selected cipher algorithm is invalid\n")); } if( def_digest_string ) { - opt.def_digest_algo = gcry_md_map_name (def_digest_string); + opt.def_digest_algo = string_to_digest_algo (def_digest_string); xfree(def_digest_string); def_digest_string = NULL; if ( openpgp_md_test_algo (opt.def_digest_algo) ) log_error(_("selected digest algorithm is invalid\n")); @@ -2881,19 +2881,19 @@ log_error(_("selected compression algorithm is invalid\n")); } if( cert_digest_string ) { - opt.cert_digest_algo = gcry_md_map_name (cert_digest_string); + opt.cert_digest_algo = string_to_digest_algo (cert_digest_string); xfree(cert_digest_string); cert_digest_string = NULL; if (openpgp_md_test_algo(opt.cert_digest_algo)) log_error(_("selected certification digest algorithm is invalid\n")); } if( s2k_cipher_string ) { - opt.s2k_cipher_algo = gcry_cipher_map_name (s2k_cipher_string); + opt.s2k_cipher_algo = string_to_cipher_algo (s2k_cipher_string); xfree(s2k_cipher_string); s2k_cipher_string = NULL; if (openpgp_cipher_test_algo (opt.s2k_cipher_algo)) log_error(_("selected cipher algorithm is invalid\n")); } if( s2k_digest_string ) { - opt.s2k_digest_algo = gcry_md_map_name (s2k_digest_string); + opt.s2k_digest_algo = string_to_digest_algo (s2k_digest_string); xfree(s2k_digest_string); s2k_digest_string = NULL; if (openpgp_md_test_algo(opt.s2k_digest_algo)) log_error(_("selected digest algorithm is invalid\n")); Modified: branches/GNUPG-1-9-BRANCH/g10/gpgv.c =================================================================== --- branches/GNUPG-1-9-BRANCH/g10/gpgv.c 2006-05-23 22:48:21 UTC (rev 4145) +++ branches/GNUPG-1-9-BRANCH/g10/gpgv.c 2006-05-24 11:12:28 UTC (rev 4146) @@ -371,7 +371,6 @@ #endif /* ENABLE_CARD_SUPPORT */ /* Stubs to void linking to ../cipher/cipher.c */ -int string_to_cipher_algo( const char *string ) { return 0; } const char *cipher_algo_to_string( int algo ) { return "?";} void disable_cipher_algo( int algo ) {} int check_cipher_algo( int algo ) { return -1;} Modified: branches/GNUPG-1-9-BRANCH/g10/keygen.c =================================================================== --- branches/GNUPG-1-9-BRANCH/g10/keygen.c 2006-05-23 22:48:21 UTC (rev 4145) +++ branches/GNUPG-1-9-BRANCH/g10/keygen.c 2006-05-24 11:12:28 UTC (rev 4146) @@ -370,12 +370,12 @@ while((tok=strsep(&prefstring," ,"))) { - if((val=gcry_cipher_map_name (tok))) + if((val=string_to_cipher_algo (tok))) { if(set_one_pref(val,1,tok,sym,&nsym)) rc=-1; } - else if((val=gcry_md_map_name (tok))) + else if((val=string_to_digest_algo (tok))) { if(set_one_pref(val,2,tok,hash,&nhash)) rc=-1; Modified: branches/GNUPG-1-9-BRANCH/g10/keyid.c =================================================================== --- branches/GNUPG-1-9-BRANCH/g10/keyid.c 2006-05-23 22:48:21 UTC (rev 4145) +++ branches/GNUPG-1-9-BRANCH/g10/keyid.c 2006-05-24 11:12:28 UTC (rev 4146) @@ -56,7 +56,6 @@ hash_public_key( gcry_md_hd_t md, PKT_public_key *pk ) { unsigned int n = 6; - unsigned int nb[PUBKEY_MAX_NPKEY]; unsigned int nn[PUBKEY_MAX_NPKEY]; byte *pp[PUBKEY_MAX_NPKEY]; int i; @@ -77,7 +76,6 @@ else for(i=0; i < npkey; i++ ) { - nb[i] = gcry_mpi_get_nbits (pk->pkey[i]); if (gcry_mpi_print (GCRYMPI_FMT_PGP, NULL, 0, &nbytes, pk->pkey[i])) BUG (); pp[i] = xmalloc (nbytes); @@ -85,7 +83,7 @@ &nbytes, pk->pkey[i])) BUG (); nn[i] = nbytes; - n += 2 + nn[i]; + n += nn[i]; } gcry_md_putc ( md, 0x99 ); /* ctb */ @@ -119,8 +117,6 @@ else for(i=0; i < npkey; i++ ) { - gcry_md_putc ( md, nb[i]>>8); - gcry_md_putc ( md, nb[i] ); gcry_md_write ( md, pp[i], nn[i] ); xfree(pp[i]); } Modified: branches/GNUPG-1-9-BRANCH/g10/main.h =================================================================== --- branches/GNUPG-1-9-BRANCH/g10/main.h 2006-05-23 22:48:21 UTC (rev 4145) +++ branches/GNUPG-1-9-BRANCH/g10/main.h 2006-05-24 11:12:28 UTC (rev 4146) @@ -106,6 +106,9 @@ const char *option,const char *repl1,const char *repl2); void deprecated_command (const char *name); +int string_to_cipher_algo (const char *string); +int string_to_digest_algo (const char *string); + const char *compress_algo_to_string(int algo); int string_to_compress_algo(const char *string); int check_compress_algo(int algo); Modified: branches/GNUPG-1-9-BRANCH/g10/misc.c =================================================================== --- branches/GNUPG-1-9-BRANCH/g10/misc.c 2006-05-23 22:48:21 UTC (rev 4145) +++ branches/GNUPG-1-9-BRANCH/g10/misc.c 2006-05-24 11:12:28 UTC (rev 4146) @@ -429,7 +429,6 @@ openpgp_pk_test_algo2( int algo, unsigned int use ) { int use_buf = use; - size_t sizeof_use_buf = sizeof (use_buf); if (algo == GCRY_PK_ELG_E) algo = GCRY_PK_ELG; @@ -437,8 +436,7 @@ if (algo < 0 || algo > 110) return gpg_error (GPG_ERR_PUBKEY_ALGO); - return gcry_pk_algo_info (algo, GCRYCTL_TEST_ALGO, - &use_buf, &sizeof_use_buf); + return gcry_pk_algo_info (algo, GCRYCTL_TEST_ALGO, NULL, &use_buf); } int @@ -739,6 +737,54 @@ } +/* + * Wrapper around gcry_cipher_map_name to provide a fallback using the + * "Sn" syntax as used by the preference strings. + */ +int +string_to_cipher_algo (const char *string) +{ + int val; + + val = gcry_cipher_map_name (string); + if (!val && string && (string[0]=='S' || string[0]=='s')) + { + char *endptr; + + string++; + val = strtol (string, &endptr, 10); + if (!*string || *endptr || openpgp_cipher_test_algo (val)) + val = 0; + } + + return val; +} + +/* + * Wrapper around gcry_md_map_name to provide a fallback using the + * "Hn" syntax as used by the preference strings. + */ +int +string_to_digest_algo (const char *string) +{ + int val; + + val = gcry_md_map_name (string); + if (!val && string && (string[0]=='H' || string[0]=='h')) + { + char *endptr; + + string++; + val = strtol (string, &endptr, 10); + if (!*string || *endptr || openpgp_md_test_algo (val)) + val = 0; + } + + return val; +} + + + const char * compress_algo_to_string(int algo) { @@ -771,7 +817,7 @@ int string_to_compress_algo(const char *string) { - /* NOTE TO TRANSLATOR: See doc/TRANSLATE about this string. */ + /* TRANSLATORS: See doc/TRANSLATE about this string. */ if(match_multistr(_("uncompressed|none"),string)) return 0; else if(ascii_strcasecmp(string,"uncompressed")==0) From cvs at cvs.gnupg.org Thu May 25 00:45:01 2006 From: cvs at cvs.gnupg.org (svn author marcus) Date: Thu May 25 00:11:25 2006 Subject: [svn] gpg-error - r166 - in trunk: . lang/cl Message-ID: Author: marcus Date: 2006-05-25 00:45:01 +0200 (Thu, 25 May 2006) New Revision: 166 Modified: trunk/ChangeLog trunk/lang/cl/Makefile.am Log: 2006-05-25 Marcus Brinkmann * lang/cl/Makefile.am (clfilesdir): Use datadir, not prefix. Modified: trunk/ChangeLog =================================================================== --- trunk/ChangeLog 2006-05-05 01:21:49 UTC (rev 165) +++ trunk/ChangeLog 2006-05-24 22:45:01 UTC (rev 166) @@ -1,3 +1,7 @@ +2006-05-25 Marcus Brinkmann + + * lang/cl/Makefile.am (clfilesdir): Use datadir, not prefix. + 2006-05-05 Marcus Brinkmann * configure.ac (AC_CONFIG_FILES): Add lang/Makefile and Modified: trunk/lang/cl/Makefile.am =================================================================== --- trunk/lang/cl/Makefile.am 2006-05-05 01:21:49 UTC (rev 165) +++ trunk/lang/cl/Makefile.am 2006-05-24 22:45:01 UTC (rev 166) @@ -26,7 +26,7 @@ clfiles = $(distributed_clfiles) $(generated_clfiles) # FIXME: Should be configurable. -clfilesdir = $(prefix)/common-lisp/source/libgpg-error +clfilesdir = $(datadir)/common-lisp/source/libgpg-error dist_clfiles_DATA = $(distributed_clfiles) nodist_clfiles_DATA = $(generated_clfiles) From cvs at cvs.gnupg.org Thu May 25 03:02:00 2006 From: cvs at cvs.gnupg.org (svn author marcus) Date: Thu May 25 02:28:23 2006 Subject: [svn] gpg-error - r167 - in trunk: . lang/cl Message-ID: Author: marcus Date: 2006-05-25 03:02:00 +0200 (Thu, 25 May 2006) New Revision: 167 Modified: trunk/ChangeLog trunk/lang/cl/Makefile.am trunk/lang/cl/README trunk/lang/cl/gpg-error-package.lisp trunk/lang/cl/gpg-error.asd trunk/lang/cl/gpg-error.lisp trunk/lang/cl/mkerrcodes.awk Log: 2006-05-25 Marcus Brinkmann * lang/cl/mkerrcodes.awk, lang/cl/gpg-error-package.lisp, lang/cl/gpg-error.lisp, lang/cl/gpg-error.asd, lang/cl/Makefile.am (clfilesdir): Fix package and file names. Modified: trunk/ChangeLog =================================================================== --- trunk/ChangeLog 2006-05-24 22:45:01 UTC (rev 166) +++ trunk/ChangeLog 2006-05-25 01:02:00 UTC (rev 167) @@ -1,5 +1,9 @@ 2006-05-25 Marcus Brinkmann + * lang/cl/mkerrcodes.awk, lang/cl/gpg-error-package.lisp, + lang/cl/gpg-error.lisp, lang/cl/gpg-error.asd, lang/cl/Makefile.am + (clfilesdir): Fix package and file names. + * lang/cl/Makefile.am (clfilesdir): Use datadir, not prefix. 2006-05-05 Marcus Brinkmann Modified: trunk/lang/cl/Makefile.am =================================================================== --- trunk/lang/cl/Makefile.am 2006-05-24 22:45:01 UTC (rev 166) +++ trunk/lang/cl/Makefile.am 2006-05-25 01:02:00 UTC (rev 167) @@ -26,7 +26,7 @@ clfiles = $(distributed_clfiles) $(generated_clfiles) # FIXME: Should be configurable. -clfilesdir = $(datadir)/common-lisp/source/libgpg-error +clfilesdir = $(datadir)/common-lisp/source/gpg-error dist_clfiles_DATA = $(distributed_clfiles) nodist_clfiles_DATA = $(generated_clfiles) Modified: trunk/lang/cl/README =================================================================== --- trunk/lang/cl/README 2006-05-24 22:45:01 UTC (rev 166) +++ trunk/lang/cl/README 2006-05-25 01:02:00 UTC (rev 167) @@ -6,3 +6,7 @@ ASDF Packaging Support CFFI Foreign Function Interface +Use with: + +> (asdf:operate 'asdf:load-op ':gpg-error) +> (use-package :gpg-error) Modified: trunk/lang/cl/gpg-error-package.lisp =================================================================== --- trunk/lang/cl/gpg-error-package.lisp 2006-05-24 22:45:01 UTC (rev 166) +++ trunk/lang/cl/gpg-error-package.lisp 2006-05-25 01:02:00 UTC (rev 167) @@ -43,7 +43,7 @@ ;;; *gpg-err-source-default* is a dynamic variable that can be set to ;;; change the default for gpg-error. -(defpackage #:org.gnupg.libgpg-error +(defpackage #:gpg-error (:use #:common-lisp #:cffi) (:export :gpg-err-code-as-key Modified: trunk/lang/cl/gpg-error.asd =================================================================== --- trunk/lang/cl/gpg-error.asd 2006-05-24 22:45:01 UTC (rev 166) +++ trunk/lang/cl/gpg-error.asd 2006-05-25 01:02:00 UTC (rev 167) @@ -19,13 +19,13 @@ ;;; Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA ;;; 02111-1307, USA. -(defpackage #:org.gnupg.libgpg-error.system +(defpackage #:gpg-error-system (:use #:common-lisp #:asdf)) -(in-package #:org.gnupg.libgpg-error.system) +(in-package #:gpg-error-system) -(defsystem org.gnupg.libgpg-error - :components ((:file "libgpg-error-package") - (:file "libgpg-error-codes" +(defsystem gpg-error + :components ((:file "gpg-error-package") + (:file "gpg-error-codes" :depends-on ("libgpg-error-package")) - (:file "libgpg-error" :depends-on ("error-codes")))) + (:file "gpg-error" :depends-on ("error-codes")))) Modified: trunk/lang/cl/gpg-error.lisp =================================================================== --- trunk/lang/cl/gpg-error.lisp 2006-05-24 22:45:01 UTC (rev 166) +++ trunk/lang/cl/gpg-error.lisp 2006-05-25 01:02:00 UTC (rev 167) @@ -21,7 +21,7 @@ ;;; Set up the library. -(in-package :org.gnupg.libgpg-error) +(in-package :gpg-error) (define-foreign-library libgpg-error (:unix "libgpg-error.so") Modified: trunk/lang/cl/mkerrcodes.awk =================================================================== --- trunk/lang/cl/mkerrcodes.awk 2006-05-24 22:45:01 UTC (rev 166) +++ trunk/lang/cl/mkerrcodes.awk 2006-05-25 01:02:00 UTC (rev 167) @@ -99,7 +99,7 @@ { header = 0; - print "(in-package :org.gnupg.libgpg-error)"; + print "(in-package :gpg-error)"; print ""; print ";;; The error code type gpg-err-code-t."; print ""; From cvs at cvs.gnupg.org Thu May 25 03:04:48 2006 From: cvs at cvs.gnupg.org (svn author marcus) Date: Thu May 25 02:31:10 2006 Subject: [svn] gpg-error - r168 - trunk/lang/cl Message-ID: Author: marcus Date: 2006-05-25 03:04:48 +0200 (Thu, 25 May 2006) New Revision: 168 Modified: trunk/lang/cl/gpg-error.asd Log: Fix last change. Modified: trunk/lang/cl/gpg-error.asd =================================================================== --- trunk/lang/cl/gpg-error.asd 2006-05-25 01:02:00 UTC (rev 167) +++ trunk/lang/cl/gpg-error.asd 2006-05-25 01:04:48 UTC (rev 168) @@ -25,7 +25,11 @@ (in-package #:gpg-error-system) (defsystem gpg-error + :description "Common error values for all GnuPG components." + :version "1.4" + :author "g10 Code GmbH" + :licence "LGPL" :components ((:file "gpg-error-package") (:file "gpg-error-codes" - :depends-on ("libgpg-error-package")) - (:file "gpg-error" :depends-on ("error-codes")))) + :depends-on ("gpg-error-package")) + (:file "gpg-error" :depends-on ("gpg-error-codes")))) From cvs at cvs.gnupg.org Thu May 25 03:11:09 2006 From: cvs at cvs.gnupg.org (svn author marcus) Date: Thu May 25 02:37:31 2006 Subject: [svn] gpg-error - r169 - in trunk: . lang/cl Message-ID: Author: marcus Date: 2006-05-25 03:11:08 +0200 (Thu, 25 May 2006) New Revision: 169 Added: trunk/lang/cl/gpg-error.asd.in Removed: trunk/lang/cl/gpg-error.asd Modified: trunk/ChangeLog trunk/configure.ac Log: 2006-05-25 Marcus Brinkmann * lang/cl/gpg-error.asd: Renamed to ... * lang/cl/gpg-error.asd.in: ... this. * configure.ac (AC_CONFIG_FILES): Add lang/cl/gpg-error.asd.in. Modified: trunk/ChangeLog =================================================================== --- trunk/ChangeLog 2006-05-25 01:04:48 UTC (rev 168) +++ trunk/ChangeLog 2006-05-25 01:11:08 UTC (rev 169) @@ -1,5 +1,9 @@ 2006-05-25 Marcus Brinkmann + * lang/cl/gpg-error.asd: Renamed to ... + * lang/cl/gpg-error.asd.in: ... this. + * configure.ac (AC_CONFIG_FILES): Add lang/cl/gpg-error.asd.in. + * lang/cl/mkerrcodes.awk, lang/cl/gpg-error-package.lisp, lang/cl/gpg-error.lisp, lang/cl/gpg-error.asd, lang/cl/Makefile.am (clfilesdir): Fix package and file names. Modified: trunk/configure.ac =================================================================== --- trunk/configure.ac 2006-05-25 01:04:48 UTC (rev 168) +++ trunk/configure.ac 2006-05-25 01:11:08 UTC (rev 169) @@ -143,7 +143,7 @@ AC_CONFIG_FILES([intl/Makefile]) AC_CONFIG_FILES([po/Makefile.in m4/Makefile]) AC_CONFIG_FILES([src/Makefile tests/Makefile]) -AC_CONFIG_FILES([lang/Makefile lang/cl/Makefile]) +AC_CONFIG_FILES([lang/Makefile lang/cl/Makefile lang/cl/gpg-error.asd]) AC_CONFIG_FILES([src/versioninfo.rc]) AC_OUTPUT Deleted: trunk/lang/cl/gpg-error.asd Copied: trunk/lang/cl/gpg-error.asd.in (from rev 168, trunk/lang/cl/gpg-error.asd) =================================================================== --- trunk/lang/cl/gpg-error.asd 2006-05-25 01:04:48 UTC (rev 168) +++ trunk/lang/cl/gpg-error.asd.in 2006-05-25 01:11:08 UTC (rev 169) @@ -0,0 +1,35 @@ +;;; -*- Mode: lisp -*- + +;;; Copyright (C) 2006 g10 Code GmbH +;;; +;;; This file is part of libgpg-error. +;;; +;;; libgpg-error is free software; you can redistribute it and/or +;;; modify it under the terms of the GNU Lesser General Public License +;;; as published by the Free Software Foundation; either version 2.1 of +;;; the License, or (at your option) any later version. +;;; +;;; libgpg-error is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +;;; Lesser General Public License for more details. +;;; +;;; You should have received a copy of the GNU Lesser General Public +;;; License along with libgpg-error; if not, write to the Free +;;; Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +;;; 02111-1307, USA. + +(defpackage #:gpg-error-system + (:use #:common-lisp #:asdf)) + +(in-package #:gpg-error-system) + +(defsystem gpg-error + :description "Common error values for all GnuPG components." + :author "g10 Code GmbH" + :version "@VERSION@" + :licence "LGPL" + :components ((:file "gpg-error-package") + (:file "gpg-error-codes" + :depends-on ("gpg-error-package")) + (:file "gpg-error" :depends-on ("gpg-error-codes")))) From cvs at cvs.gnupg.org Thu May 25 03:57:59 2006 From: cvs at cvs.gnupg.org (svn author marcus) Date: Thu May 25 03:24:21 2006 Subject: [svn] gpg-error - r170 - in trunk: . lang/cl Message-ID: Author: marcus Date: 2006-05-25 03:57:59 +0200 (Thu, 25 May 2006) New Revision: 170 Modified: trunk/ChangeLog trunk/lang/cl/Makefile.am Log: 2006-05-25 Marcus Brinkmann * lang/cl/Makefile.am (distributed_clfiles): Move gpg-error.asd to ... (generated_clfiles): ... here. (EXTRA_DIST): Add gpg-error.asd.in. Modified: trunk/ChangeLog =================================================================== --- trunk/ChangeLog 2006-05-25 01:11:08 UTC (rev 169) +++ trunk/ChangeLog 2006-05-25 01:57:59 UTC (rev 170) @@ -1,5 +1,9 @@ 2006-05-25 Marcus Brinkmann + * lang/cl/Makefile.am (distributed_clfiles): Move gpg-error.asd to ... + (generated_clfiles): ... here. + (EXTRA_DIST): Add gpg-error.asd.in. + * lang/cl/gpg-error.asd: Renamed to ... * lang/cl/gpg-error.asd.in: ... this. * configure.ac (AC_CONFIG_FILES): Add lang/cl/gpg-error.asd.in. Modified: trunk/lang/cl/Makefile.am =================================================================== --- trunk/lang/cl/Makefile.am 2006-05-25 01:11:08 UTC (rev 169) +++ trunk/lang/cl/Makefile.am 2006-05-25 01:57:59 UTC (rev 170) @@ -17,11 +17,10 @@ # License along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA -distributed_clfiles = gpg-error.asd \ - gpg-error-package.lisp \ +distributed_clfiles = gpg-error-package.lisp \ gpg-error.lisp -generated_clfiles = gpg-error-codes.lisp +generated_clfiles = gpg-error.asd gpg-error-codes.lisp clfiles = $(distributed_clfiles) $(generated_clfiles) @@ -30,7 +29,7 @@ dist_clfiles_DATA = $(distributed_clfiles) nodist_clfiles_DATA = $(generated_clfiles) -EXTRA_DIST = README mkerrcodes.awk +EXTRA_DIST = README gpg-error.asd.in mkerrcodes.awk CLEANFILES = gpg-error-codes.lisp codes_file := $(top_srcdir)/src/err-codes.h.in From cvs at cvs.gnupg.org Thu May 25 04:01:09 2006 From: cvs at cvs.gnupg.org (svn author marcus) Date: Thu May 25 03:27:31 2006 Subject: [svn] gpg-error - r171 - in trunk: . lang/cl Message-ID: Author: marcus Date: 2006-05-25 04:01:08 +0200 (Thu, 25 May 2006) New Revision: 171 Modified: trunk/ChangeLog trunk/lang/cl/Makefile.am Log: Revert last change. Automake already takes care of everything. Modified: trunk/ChangeLog =================================================================== --- trunk/ChangeLog 2006-05-25 01:57:59 UTC (rev 170) +++ trunk/ChangeLog 2006-05-25 02:01:08 UTC (rev 171) @@ -1,9 +1,5 @@ 2006-05-25 Marcus Brinkmann - * lang/cl/Makefile.am (distributed_clfiles): Move gpg-error.asd to ... - (generated_clfiles): ... here. - (EXTRA_DIST): Add gpg-error.asd.in. - * lang/cl/gpg-error.asd: Renamed to ... * lang/cl/gpg-error.asd.in: ... this. * configure.ac (AC_CONFIG_FILES): Add lang/cl/gpg-error.asd.in. Modified: trunk/lang/cl/Makefile.am =================================================================== --- trunk/lang/cl/Makefile.am 2006-05-25 01:57:59 UTC (rev 170) +++ trunk/lang/cl/Makefile.am 2006-05-25 02:01:08 UTC (rev 171) @@ -17,10 +17,10 @@ # License along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA -distributed_clfiles = gpg-error-package.lisp \ - gpg-error.lisp +distributed_clfiles = gpg-error.asd \ + gpg-error-package.lisp gpg-error.lisp -generated_clfiles = gpg-error.asd gpg-error-codes.lisp +generated_clfiles = gpg-error-codes.lisp clfiles = $(distributed_clfiles) $(generated_clfiles) @@ -29,7 +29,7 @@ dist_clfiles_DATA = $(distributed_clfiles) nodist_clfiles_DATA = $(generated_clfiles) -EXTRA_DIST = README gpg-error.asd.in mkerrcodes.awk +EXTRA_DIST = README mkerrcodes.awk CLEANFILES = gpg-error-codes.lisp codes_file := $(top_srcdir)/src/err-codes.h.in From cvs at cvs.gnupg.org Thu May 25 05:02:54 2006 From: cvs at cvs.gnupg.org (svn author dshaw) Date: Thu May 25 04:29:17 2006 Subject: [svn] GnuPG - r4147 - trunk/g10 Message-ID: Author: dshaw Date: 2006-05-25 05:02:51 +0200 (Thu, 25 May 2006) New Revision: 4147 Modified: trunk/g10/ChangeLog trunk/g10/exec.c Log: * exec.c (make_tempdir): Fix bug with a temporary directory on Win32 that is over 256 bytes long. Noted by Israel G. Lugo. Modified: trunk/g10/ChangeLog =================================================================== --- trunk/g10/ChangeLog 2006-05-24 11:12:28 UTC (rev 4146) +++ trunk/g10/ChangeLog 2006-05-25 03:02:51 UTC (rev 4147) @@ -1,3 +1,8 @@ +2006-05-24 David Shaw + + * exec.c (make_tempdir): Fix bug with a temporary directory on + Win32 that is over 256 bytes long. Noted by Israel G. Lugo. + 2006-05-23 David Shaw * gpg.c (reopen_std): New function to reopen fd 0, 1, or 2 if we Modified: trunk/g10/exec.c =================================================================== --- trunk/g10/exec.c 2006-05-24 11:12:28 UTC (rev 4146) +++ trunk/g10/exec.c 2006-05-25 03:02:51 UTC (rev 4147) @@ -129,8 +129,11 @@ if(tmp==NULL) { #if defined (_WIN32) - tmp=xmalloc(256); - if(GetTempPath(256,tmp)==0) + int err; + + tmp=xmalloc(MAX_PATH+1); + err=GetTempPath(MAX_PATH+1,tmp); + if(err==0 || err>MAX_PATH+1) strcpy(tmp,"c:\\windows\\temp"); else { From cvs at cvs.gnupg.org Thu May 25 15:55:35 2006 From: cvs at cvs.gnupg.org (svn author wk) Date: Thu May 25 15:22:03 2006 Subject: [svn] GnuPG - r4148 - trunk/doc Message-ID: Author: wk Date: 2006-05-25 15:55:34 +0200 (Thu, 25 May 2006) New Revision: 4148 Modified: trunk/doc/samplekeys.asc Log: Added backsig to my key Modified: trunk/doc/samplekeys.asc =================================================================== --- trunk/doc/samplekeys.asc 2006-05-25 03:02:51 UTC (rev 4147) +++ trunk/doc/samplekeys.asc 2006-05-25 13:55:34 UTC (rev 4148) @@ -1,12 +1,3 @@ - - pub 1024R/1CE0C630 2006-01-01 [expires: 2008-12-31] - uid Werner Koch (dist sig) - - pub 4096R/99242560 2002-01-28 - uid David M. Shaw - sub 2048g/1643B926 2002-01-28 [expires: 2012-01-26] - sub 1024D/49E1CBC9 2002-01-28 [expires: 2012-01-26] - pub 1024D/5B0358A2 1999-03-15 [expires: 2009-07-11] uid Werner Koch uid Werner Koch @@ -18,6 +9,15 @@ pub 1024D/57548DCD 1998-07-07 [expired: 2005-12-31] uid Werner Koch (gnupg sig) + pub 4096R/99242560 2002-01-28 + uid David M. Shaw + sub 2048g/1643B926 2002-01-28 [expires: 2012-01-26] + sub 1024D/49E1CBC9 2002-01-28 [expires: 2012-01-26] + + pub 2048R/CA57AD7C 2004-12-06 + uid PGP Global Directory Verification Key + uid [jpeg image of size 3400] + pub 1024D/B2D7795E 2001-01-04 uid Philip R. Zimmermann uid Philip R. Zimmermann @@ -26,431 +26,436 @@ uid Philip R. Zimmermann sub 3072g/A8E92834 2001-01-04 - pub 2048R/CA57AD7C 2004-12-06 - uid PGP Global Directory Verification Key - uid [jpeg image of size 3400] + pub 1024R/1CE0C630 2006-01-01 [expires: 2008-12-31] + uid Werner Koch (dist sig) -----BEGIN PGP PUBLIC KEY BLOCK----- -Version: GnuPG v1.4.3 (GNU/Linux) +Version: GnuPG v1.4.4-svn4128 (GNU/Linux) -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 -AAoJEMdGNjmy13leV7gAoKHV2q0XEP8GJkyp0/V5lgbwBmBMAJ9TtVfw2khoaZ3L -NV2tINSjj0Alp7QiUGhpbGlwIFIuIFppbW1lcm1hbm4gPHByekBtaXQuZWR1Pohd -BBARAgAVBQI6VOgnBQsJCAcDAhkBBRsDAAAAABIJEMdGNjmy13leB2VHUEcAAQFW -UQCfWWfTDHzSezrDawgN2Z4Qb7dHKooAoJyVnm61utdRsdLr2e6QnV5Z0yjjtCJQ -aGlsaXAgUi4gWmltbWVybWFubiA8cHJ6QGFjbS5vcmc+iE4EEBECAAYFAjpU6LcA -EgkQx0Y2ObLXeV4HZUdQRwABARPJAKDmKL2Aeo6OWwcZKyqSWLD4drQxfgCguJ7k -7XEuQr+tL0ndoin0RSQTkCHRzH//AAANOgEQAAEBAAAAAAAAAAAAAAAA/9j/4AAQ -SkZJRgABAQAAAQABAAD/2wBDAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8l -JCIfIiEmKzcvJik0KSEiMEExNDk7Pj4+JS5ESUM8SDc9Pjv/2wBDAQoLCw4NDhwQ -EBw7KCIoOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 -Ozs7Ozs7Ozv/wAARCACQAHgDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAA -AAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1Fh -ByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdI -SUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWm -p6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3 -+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQD -BAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYk -NOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3 -eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK -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 -anVG8sbjyKfgA09edwouFiJ+GH4il2ZUjvQ/b609SN2KYC4AGexopkzHyyB1ooSB -s//ZiE4EEBECAAYFAjpWjyIAEgkQx0Y2ObLXeV4HZUdQRwABAQfRAKCSnx3toHhF -sCAaIsCRkmFdI4Hn9gCbBDKIqvBEjybcnaBW+iZufcjAzsfRzNf/AAANkgEQAAEB -AAAAAAAAAAAAAAAA/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAoHBwgHBgoICAgL -CgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4+JS5ESUM8 -SDc9Pjv/2wBDAQoLCw4NDhwQEBw7KCIoOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 -Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozv/wAARCACPAHUDASIAAhEBAxEB/8QA -HwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA -AAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRol -JicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWG -h4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ -2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQF -BgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEI -FEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RV -VldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmq -srO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oA -DAMBAAIRAxEAPwD2aiiigAooooAKyNb8S6boUZN1Lulx8sS/eP8Ah+NZXjbxcdCt -/sdjh7+UdcjES+p968fvLyW6leaa4mmlY5kkL4AP1qXLsaQhfVnc6l8TdSncrYRR -W6Zx03t/L+lYsvjjXnA8zUZY8nI2kr/QVzlu0b8+S2R/HvJNWFgAYuwDFuvJ/lzm -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 -Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozv/ -wAARCACQAHgDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcI -CQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEI -I0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZ -WmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2 -t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEA -AwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3 -AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRom -JygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaH -iImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna -4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD2aiq1/fQabZyXdy+2KMZJ -rhr74s2UZK2Vm8pHRm4FaQpTqfCiZTjHc9CoryC4+KesTNiGGKFfzqez8V+Jr9fM -SUlQc5Xj+tb/AFSoleVkR7aL2PWKK8w/4THWrf78oLDqCKng+Jd1EQLm1SQdyvBp -PCVVsrh7WJ6RRXOaF4107XJxbIrxTkZ2t/jXRA5rnlFxdpI0TT1QtFFFSMKKKKAC -iiigAooooA5j4huV8I3WD1wD+teHV9A+JdPh1TSjZ3BcRytyUIBGATxkH0rgn8Aa -Qp4mvfxlT/4ivQwuIhSg1I56tOUndHni/eFel+DdR00aasc8yxOg5z34qtB4F0B3 -ZJLu+Rh0+df/AIirLeB9GhOFv70Y/wBpD/7JV1q9GrGzbJhTnB3MfXri3nv5Xtce -Vk4I6Hmufmfk12snhTTEG3+0LzHXqn/xFM/4QrS5FDfar0g9/MT/AOIq4YqlFJJi -dKbdzn/CM/leIoXLBQOpJx6V69Hr+kJHiTVLQMOo85cj9a88uPB2mWlu08b3Mjqy -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 -NbhlZ5NeILcxHqGTHji+5wMEDBjfNT/C6m0= -=D0ET +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 +ZUdQRwABARPJAKDmKL2Aeo6OWwcZKyqSWLD4drQxfgCguJ7k7XEuQr+tL0ndoin0 +RSQTkCHRzH//AAANOgEQAAEBAAAAAAAAAAAAAAAA/9j/4AAQSkZJRgABAQAAAQAB +AAD/2wBDAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0 +KSEiMEExNDk7Pj4+JS5ESUM8SDc9Pjv/2wBDAQoLCw4NDhwQEBw7KCIoOzs7Ozs7 +Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozv/wAAR +CACQAHgDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL +/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0Kx +wRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNk +ZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5 +usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEB +AQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAEC +AxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygp +KjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImK +kpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk +5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDqKXFKDSEgDJOBXSeeHaoJrqKI +fMwqleanyUi/Osi4udqNLM+EUZJNNIlvsakuqjnYazbzxKlopLOHYfwqa5S/8QvO +xjtyY1z17msqWZpGAzuz1wP61LmuhrGk3udHceO9RL4gSNB6EbjVU+Ndd3YEir9U +Fc+nLYC49jWhbt5UW0RIGbpyKzuzbliuhuWfjnUw377ypQv3vk2/rXVaV4o07VFC +iUQzd43P8j3rzVpnLESIgHoopZJIYIxPDg89Vb7tNSZLppnsIIYAggj1FKa4XQ/G +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 +Cw4NDhwQEBw7KCIoOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 +Ozs7Ozs7Ozs7Ozs7Ozv/wAARCACPAHUDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEA +AAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIh +MUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6 +Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZ +mqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx +8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREA +AgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAV +YnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hp +anN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPE +xcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD2 +aiiigAooooAKyNb8S6boUZN1Lulx8sS/eP8Ah+NZXjbxcdCt/sdjh7+UdcjES+p9 +68fvLyW6leaa4mmlY5kkL4AP1qXLsaQhfVnc6l8TdSncrYRRW6Zx03t/L+lYsvjj +XnA8zUZY8nI2kr/QVzlu0b8+S2R/HvJNWFgAYuwDFuvJ/lzms2/M2UbdDrLPxlrE +TK51CRxn7sm1gfzrs9F8b2d8ix3v+jyn+Ij5T/hXkQj8gZX5hnlCMZq9YShm8vzD +t7HuDQm0KUUz3ZHWRQ6MGU9CDkGnV5VZ6xf6FJ5qTlY8/Mh5Vh9K77QNfi1uEkJs +kUZI7EeorRSuYyjY16KKKogKKKKACiiigArO17VU0XR575sFkXCKf4mPQVo1wHxX +vfJ0yztw+N8hdh3IHA/nSew4q7PNdT1Ga9vpLi4kaaaRyWY8KDRYWCXkuG5Qc+gz +We8mWAUYz19TW9pbGJAScZ6msJuyO2nG7NOPTrcxhAMdOmOKp3eg36OWsw0qY4x2 +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 +xAC1EAACAQMDAgQDBQUEBAAAAX0BAgMABBEFEiExQQYTUWEHInEUMoGRoQgjQrHB +FVLR8CQzYnKCCQoWFxgZGiUmJygpKjQ1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2Rl +ZmdoaWpzdHV2d3h5eoOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6 +wsPExcbHyMnK0tPU1dbX2Nna4eLj5OXm5+jp6vHy8/T19vf4+fr/xAAfAQADAQEB +AQEBAQEBAAAAAAAAAQIDBAUGBwgJCgv/xAC1EQACAQIEBAMEBwUEBAABAncAAQID +EQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkq +NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqS +k5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4+Tl +5ufo6ery8/T19vf4+fr/2gAMAwEAAhEDEQA/APZqKrX99BptnJd3L7YoxkmuGvvi +zZRkrZWbykdGbgVpClOp8KJlOMdz0KivILj4p6xM2IYYoV/Op7PxX4mv18xJSVBz +leP61v8AVKiV5WRHtovY9YorzD/hMdat/vygsOoIqeD4l3URAubVJB3K8Gk8JVWy +uHtYnpFFc5oXjXTtcnFsivFORna3+NdEDmueUXF2kjRNPVC0UUVIwooooAKKKKAC +iiigDmPiG5XwjdYPXAP614dX0D4l0+HVNKNncFxHK3JQgEYBPGQfSuCfwBpCnia9 +/GVP/iK9DC4iFKDUjnq05Sd0eeL94V6X4N1HTRpqxzzLE6DnPfiq0HgXQHdkku75 +GHT51/8AiKst4H0aE4W/vRj/AGkP/slXWr0asbNsmFOcHcx9euLee/le1x5WTgjo +ea5+Z+TXayeFNMQbf7QvMdeqf/EUz/hCtLkUN9qvSD38xP8A4irhiqUUkmJ0pt3O +f8Iz+V4ihcsFA6knHpXr0ev6QkeJNUtAw6jzlyP1rzy48HaZaW7TxvcyOrKNsrKV +OWA6BR61u6TpkVqRIqlcrj5Rx+NcWJqRqT5om1OLirM6mPX9GmbbHqtmzennrn+d +X1ZXUMjBlPQg5BrnjAjqcbWHtzWFqGmySTma1le1dchXtXMZx9R1/Guexpc9Aorh +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 +K86tEx0ucCiY15h8 +=yJFz -----END PGP PUBLIC KEY BLOCK----- From cvs at cvs.gnupg.org Thu May 25 21:39:06 2006 From: cvs at cvs.gnupg.org (svn author dshaw) Date: Thu May 25 21:05:24 2006 Subject: [svn] GnuPG - r4149 - trunk/g10 Message-ID: Author: dshaw Date: 2006-05-25 21:39:03 +0200 (Thu, 25 May 2006) New Revision: 4149 Modified: trunk/g10/ChangeLog trunk/g10/import.c trunk/g10/keygen.c Log: * keygen.c (gen_dsa): Allow generating DSA2 keys (allow specifying sizes > 1024 when --enable-dsa2 is set). The size of q is set automatically based on the key size. (ask_keysize, generate_keypair): Ask for DSA size when --enable-dsa2 is set. Modified: trunk/g10/ChangeLog =================================================================== --- trunk/g10/ChangeLog 2006-05-25 13:55:34 UTC (rev 4148) +++ trunk/g10/ChangeLog 2006-05-25 19:39:03 UTC (rev 4149) @@ -1,3 +1,11 @@ +2006-05-25 David Shaw + + * keygen.c (gen_dsa): Allow generating DSA2 keys + (allow specifying sizes > 1024 when --enable-dsa2 is set). The + size of q is set automatically based on the key size. + (ask_keysize, generate_keypair): Ask for DSA size when + --enable-dsa2 is set. + 2006-05-24 David Shaw * exec.c (make_tempdir): Fix bug with a temporary directory on Modified: trunk/g10/import.c =================================================================== --- trunk/g10/import.c 2006-05-25 13:55:34 UTC (rev 4148) +++ trunk/g10/import.c 2006-05-25 19:39:03 UTC (rev 4149) @@ -978,6 +978,15 @@ } else if(new_key) { + /* A little explanation for this: we fill in the fingerprint + when importing keys as it can be useful to know the + fingerprint in certain keyserver-related cases (a keyserver + asked for a particular name, but the key doesn't have that + name). However, in cases where we're importing more than + one key at a time, we cannot know which key to fingerprint. + In these cases, rather than guessing, we do not fingerpring + at all, and we must hope the user ID on the keys are + useful. */ if(fpr) { xfree(*fpr); Modified: trunk/g10/keygen.c =================================================================== --- trunk/g10/keygen.c 2006-05-25 13:55:34 UTC (rev 4148) +++ trunk/g10/keygen.c 2006-05-25 19:39:03 UTC (rev 4149) @@ -1089,30 +1089,65 @@ PKT_public_key *pk; MPI skey[5]; MPI *factors; + unsigned int qbits; - if( nbits > 1024 || nbits < 512 ) { + if( nbits < 512 || (!opt.flags.dsa2 && nbits > 1024)) + { nbits = 1024; log_info(_("keysize invalid; using %u bits\n"), nbits ); - } + } + else if(nbits>3072) + { + nbits = 3072; + log_info(_("keysize invalid; using %u bits\n"), nbits ); + } - if( (nbits % 64) ) { + if(nbits % 64) + { nbits = ((nbits + 63) / 64) * 64; log_info(_("keysize rounded up to %u bits\n"), nbits ); - } + } - rc = pubkey_generate( PUBKEY_ALGO_DSA, nbits, skey, &factors ); - if( rc ) { - log_error("pubkey_generate failed: %s\n", g10_errstr(rc) ); + /* + Figure out a q size based on the key size. FIPS 180-3 says: + + L = 1024, N = 160 + L = 2048, N = 224 + L = 2048, N = 256 + L = 3072, N = 256 + + 2048/256 is an odd pair since there is also a 2048/224 and + 3072/256. Matching sizes is not a very exact science. + + We'll do 256 qbits for nbits over 2048, 224 for nbits over 1024 + but less than 2048, and 160 for 1024 (DSA1). + */ + + if(nbits>2048) + qbits=256; + else if(nbits>1024) + qbits=224; + else + qbits=160; + + if(qbits!=160) + log_info("WARNING: some OpenPGP programs can't" + " handle a DSA key with this digest size\n"); + + rc = dsa2_generate( PUBKEY_ALGO_DSA, nbits, qbits, skey, &factors ); + if( rc ) + { + log_error("dsa2_generate failed: %s\n", g10_errstr(rc) ); return rc; - } + } sk = xmalloc_clear( sizeof *sk ); pk = xmalloc_clear( sizeof *pk ); sk->timestamp = pk->timestamp = make_timestamp(); sk->version = pk->version = 4; - if( expireval ) { - sk->expiredate = pk->expiredate = sk->timestamp + expireval; - } + if( expireval ) + sk->expiredate = pk->expiredate = sk->timestamp + expireval; + sk->pubkey_algo = pk->pubkey_algo = PUBKEY_ALGO_DSA; pk->pkey[0] = mpi_copy( skey[0] ); pk->pkey[1] = mpi_copy( skey[1] ); @@ -1462,10 +1497,10 @@ switch(algo) { case PUBKEY_ALGO_DSA: - if(opt.expert) + if(opt.flags.dsa2) { def=1024; - max=1024; + max=3072; } else { @@ -2574,13 +2609,13 @@ sprintf( r->u.value, "%d", PUBKEY_ALGO_DSA ); r->next = para; para = r; - tty_printf(_("DSA keypair will have %u bits.\n"),1024); + nbits = ask_keysize( PUBKEY_ALGO_DSA ); + r = xmalloc_clear( sizeof *r + 20 ); + r->key = pKEYLENGTH; + sprintf( r->u.value, "%u", nbits); + r->next = para; + para = r; r = xmalloc_clear( sizeof *r + 20 ); - r->key = pKEYLENGTH; - strcpy( r->u.value, "1024" ); - r->next = para; - para = r; - r = xmalloc_clear( sizeof *r + 20 ); r->key = pKEYUSAGE; strcpy( r->u.value, "sign" ); r->next = para; @@ -2619,7 +2654,7 @@ } } - + nbits = ask_keysize( algo ); r = xmalloc_clear( sizeof *r + 20 ); r->key = both? pSUBKEYLENGTH : pKEYLENGTH; @@ -3169,7 +3204,7 @@ } rc = do_create( algo, nbits, pub_keyblock, sec_keyblock, - dek, s2k, &sub_sk, expire, 1 ); + dek, s2k, &sub_sk, expire, 1 ); if( !rc ) rc = write_keybinding(pub_keyblock, pub_keyblock, pri_sk, sub_sk, use); if( !rc ) From cvs at cvs.gnupg.org Sat May 27 03:38:55 2006 From: cvs at cvs.gnupg.org (svn author dshaw) Date: Sat May 27 03:05:13 2006 Subject: [svn] GnuPG - r4150 - trunk/g10 Message-ID: Author: dshaw Date: 2006-05-27 03:38:54 +0200 (Sat, 27 May 2006) New Revision: 4150 Modified: trunk/g10/ChangeLog trunk/g10/exec.c Log: * exec.c (make_tempdir) [_WIN32]: Modified to properly handle arbitrarily long temporary directory paths. Modified: trunk/g10/ChangeLog =================================================================== --- trunk/g10/ChangeLog 2006-05-25 19:39:03 UTC (rev 4149) +++ trunk/g10/ChangeLog 2006-05-27 01:38:54 UTC (rev 4150) @@ -1,3 +1,8 @@ +2006-05-25 Israel G. Lugo (dshaw) + + * exec.c (make_tempdir) [_WIN32]: Modified to properly handle + arbitrarily long temporary directory paths. + 2006-05-25 David Shaw * keygen.c (gen_dsa): Allow generating DSA2 keys Modified: trunk/g10/exec.c =================================================================== --- trunk/g10/exec.c 2006-05-25 19:39:03 UTC (rev 4149) +++ trunk/g10/exec.c 2006-05-27 01:38:54 UTC (rev 4150) @@ -129,16 +129,21 @@ if(tmp==NULL) { #if defined (_WIN32) - int err; + int tmp_siz; + int len=0; - tmp=xmalloc(MAX_PATH+1); - err=GetTempPath(MAX_PATH+1,tmp); - if(err==0 || err>MAX_PATH+1) - strcpy(tmp,"c:\\windows\\temp"); + /* Poll temp path length */ + tmp_siz=GetTempPath(0,NULL); + if(tmp_siz) + { + tmp=xmalloc(tmp_siz); + len=GetTempPath(tmp_siz,tmp); + } + + if(len==0) + tmp=xstrdup("c:\\windows\\temp"); else { - int len=strlen(tmp); - /* GetTempPath may return with \ on the end */ while(len>0 && tmp[len-1]=='\\') { From cvs at cvs.gnupg.org Sat May 27 04:07:06 2006 From: cvs at cvs.gnupg.org (svn author dshaw) Date: Sat May 27 03:33:17 2006 Subject: [svn] GnuPG - r4151 - trunk/g10 Message-ID: Author: dshaw Date: 2006-05-27 04:07:05 +0200 (Sat, 27 May 2006) New Revision: 4151 Modified: trunk/g10/ChangeLog trunk/g10/exec.c Log: Revert last. It is still wrong. Modified: trunk/g10/ChangeLog =================================================================== --- trunk/g10/ChangeLog 2006-05-27 01:38:54 UTC (rev 4150) +++ trunk/g10/ChangeLog 2006-05-27 02:07:05 UTC (rev 4151) @@ -1,8 +1,3 @@ -2006-05-25 Israel G. Lugo (dshaw) - - * exec.c (make_tempdir) [_WIN32]: Modified to properly handle - arbitrarily long temporary directory paths. - 2006-05-25 David Shaw * keygen.c (gen_dsa): Allow generating DSA2 keys Modified: trunk/g10/exec.c =================================================================== --- trunk/g10/exec.c 2006-05-27 01:38:54 UTC (rev 4150) +++ trunk/g10/exec.c 2006-05-27 02:07:05 UTC (rev 4151) @@ -129,21 +129,16 @@ if(tmp==NULL) { #if defined (_WIN32) - int tmp_siz; - int len=0; + int err; - /* Poll temp path length */ - tmp_siz=GetTempPath(0,NULL); - if(tmp_siz) - { - tmp=xmalloc(tmp_siz); - len=GetTempPath(tmp_siz,tmp); - } - - if(len==0) - tmp=xstrdup("c:\\windows\\temp"); + tmp=xmalloc(MAX_PATH); + err=GetTempPath(MAX_PATH,tmp); + if(err==0 || err>MAX_PATH) + strcpy(tmp,"c:\\windows\\temp"); else { + int len=strlen(tmp); + /* GetTempPath may return with \ on the end */ while(len>0 && tmp[len-1]=='\\') { From cvs at cvs.gnupg.org Mon May 29 16:32:48 2006 From: cvs at cvs.gnupg.org (svn author marcus) Date: Mon May 29 15:58:43 2006 Subject: [svn] gpg-error - r172 - in trunk: . src Message-ID: Author: marcus Date: 2006-05-29 16:32:47 +0200 (Mon, 29 May 2006) New Revision: 172 Modified: trunk/ChangeLog trunk/src/gpg-error.c trunk/src/init.c Log: 2006-05-29 Marcus Brinkmann * src/init.c (gpg_err_init) [!ENABLE_NLS]: Do not initialize the locale. * src/gpg-error.c (i18n_init) [!ENABLE_NLS]: Likewise. Patch submitted by Nils Durner . Modified: trunk/ChangeLog =================================================================== --- trunk/ChangeLog 2006-05-25 02:01:08 UTC (rev 171) +++ trunk/ChangeLog 2006-05-29 14:32:47 UTC (rev 172) @@ -1,3 +1,10 @@ +2006-05-29 Marcus Brinkmann + + * src/init.c (gpg_err_init) [!ENABLE_NLS]: Do not initialize the + locale. + * src/gpg-error.c (i18n_init) [!ENABLE_NLS]: Likewise. + Patch submitted by Nils Durner . + 2006-05-25 Marcus Brinkmann * lang/cl/gpg-error.asd: Renamed to ... Modified: trunk/src/gpg-error.c =================================================================== --- trunk/src/gpg-error.c 2006-05-25 02:01:08 UTC (rev 171) +++ trunk/src/gpg-error.c 2006-05-29 14:32:47 UTC (rev 172) @@ -64,16 +64,15 @@ static void i18n_init (void) { +#ifdef ENABLE_NLS char *locale_dir; -#ifdef ENABLE_NLS # ifdef HAVE_LC_MESSAGES setlocale (LC_TIME, ""); setlocale (LC_MESSAGES, ""); # else setlocale (LC_ALL, "" ); # endif -#endif locale_dir = get_locale_dir (); if (locale_dir) @@ -82,6 +81,7 @@ drop_locale_dir (locale_dir); } textdomain (PACKAGE); +#endif } Modified: trunk/src/init.c =================================================================== --- trunk/src/init.c 2006-05-25 02:01:08 UTC (rev 171) +++ trunk/src/init.c 2006-05-29 14:32:47 UTC (rev 172) @@ -48,6 +48,7 @@ gpg_error_t gpg_err_init (void) { +#ifdef ENABLE_NLS char *locale_dir; /* We only have to bind our locale directory to our text domain. */ @@ -58,6 +59,7 @@ bindtextdomain (PACKAGE, locale_dir); drop_locale_dir (locale_dir); } +#endif return 0; } From cvs at cvs.gnupg.org Tue May 30 18:07:59 2006 From: cvs at cvs.gnupg.org (svn author marcus) Date: Tue May 30 17:33:52 2006 Subject: [svn] gpg-error - r173 - in trunk: . lang/cl Message-ID: Author: marcus Date: 2006-05-30 18:07:59 +0200 (Tue, 30 May 2006) New Revision: 173 Modified: trunk/ChangeLog trunk/lang/cl/gpg-error.asd.in Log: 2006-05-30 Marcus Brinkmann * lang/cl/gpg-error.asd.in (gpg-error): Add "depends-on" on cffi. Modified: trunk/ChangeLog =================================================================== --- trunk/ChangeLog 2006-05-29 14:32:47 UTC (rev 172) +++ trunk/ChangeLog 2006-05-30 16:07:59 UTC (rev 173) @@ -1,3 +1,7 @@ +2006-05-30 Marcus Brinkmann + + * lang/cl/gpg-error.asd.in (gpg-error): Add "depends-on" on cffi. + 2006-05-29 Marcus Brinkmann * src/init.c (gpg_err_init) [!ENABLE_NLS]: Do not initialize the Modified: trunk/lang/cl/gpg-error.asd.in =================================================================== --- trunk/lang/cl/gpg-error.asd.in 2006-05-29 14:32:47 UTC (rev 172) +++ trunk/lang/cl/gpg-error.asd.in 2006-05-30 16:07:59 UTC (rev 173) @@ -29,6 +29,7 @@ :author "g10 Code GmbH" :version "@VERSION@" :licence "LGPL" + :depends-on ("cffi") :components ((:file "gpg-error-package") (:file "gpg-error-codes" :depends-on ("gpg-error-package"))