[svn] GnuPG - r4143 - in branches/GNUPG-1-9-BRANCH: . common g10
jnlib scd sm tools
svn author wk
cvs at cvs.gnupg.org
Tue May 23 18:19:48 CEST 2006
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 <wk at g10code.com>
+
+ * configure.ac (ZLIBS): New for zlib link commands. Add bzip2
+ support.
+
+2006-05-22 Werner Koch <wk at g10code.com>
+
+ * configure.ac (EXEEXT): New.
+
2006-04-18 Werner Koch <wk at g10code.com>
* 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 <wk at g10code.com>
+
+ * 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 <wk at g10code.com>
+
+ * pka.c: New. Taked from 1.4.3.
+ * pka.h: New.
+ * Makefile.am: Added pka.
+
+2006-05-19 Werner Koch <wk at g10code.com>
+
+ * 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 <wk at g10code.com>
* 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 <config.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#ifdef USE_DNS_PKA
+#include <sys/types.h>
+#ifdef _WIN32
+#include <windows.h>
+#else
+#include <netinet/in.h>
+#include <arpa/nameser.h>
+#include <resolv.h>
+#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 <errno.h>
#include <ctype.h>
+#ifdef HAVE_LIBREADLINE
+#include <readline/readline.h>
+#include <readline/history.h>
+#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 <stdio.h>
+#include <readline/readline.h>
+#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 <stdio.h>])
+ 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 <wk at g10code.com>
+
+ * 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 <wk at g10code.com>
+
+ * 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 <wk at g10code.com>
+
+ * 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 <dshaw at jabberwocky.com> (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 <assert.h>
#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 <stdio.h>
-#include <readline/readline.h>
-#endif /*HAVE_LIBREADLINE*/
-#include "cardglue.h"
+# ifdef HAVE_LIBREADLINE
+# include <stdio.h>
+# include <readline/readline.h>
+# 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 <wk at g10code.com>
+
+ * 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 <wk at g10code.com>
+
+ * 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 <wk at g10code.com>
* 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 <locale.h>
+# include <locale.h>
#endif
#ifdef ENABLE_NLS
- #include <libintl.h>
- #define _(a) gettext (a)
- #ifdef gettext_noop
- #define N_(a) gettext_noop (a)
- #else
- #define N_(a) (a)
- #endif
+# include <libintl.h>
+# 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 <config.h>
#include <errno.h>
#include <stdio.h>
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 <wk at g10code.com>
+
+ * keydb.c (hextobyte): Deleted as it is now defined in jnlib.
+
+ * Makefile.am (gpgsm_LDADD): Include ZLIBS.
+
2006-05-19 Marcus Brinkmann <marcus at g10code.de>
* 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 <wk at g10code.com>
+
+ * keylist.c (print_names_raw): Sanitize URI.
+
2006-03-21 Werner Koch <wk at g10code.com>
* 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 <wk at g10code.com>
+
+ * 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 <wk at g10code.com>
* 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 <config.h>
+#endif
#include <stdio.h>
#include <stdlib.h>
@@ -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)
{
More information about the Gnupg-commits
mailing list