Hello all,
i have worked on PKA support for Mutt. Seems to work so far, would be
great if it could be integrated into CVS. It probably needs some more
work (review, testing, etc.), though.
I have attached two patches:
mutt-pka.diff: this contains the PKA support implementation.
mutt-gpgme.diff: this contains gpgme/build-relevant fixes for Makefile
and configure.in (e.g., defining HAVE_GPGME_PKA_TRUST).
Thanks!
Moritz
ChangeLog:
2006-11-01 Moritz Schulte <moritz@xxxxxxxxxxx>
* Makefile.am: Use $(GPGME_CFLAGS) instead of
$(LIBGPGME_CFLAGS).
* configure.in: Replaced self-hacked GPGME checking code with
"standard code", also take care of defining
HAVE_GPGME_PKA_TRUST.
* init.h: Add new use_pka option.
* crypt.c (mutt_protect): Call
crypt_smime_set_sender/crypt_pgp_set_sender when necessary.
* crypt-gpgme.c (PKA_NOTATION_NAME): New symbol definition.
(is_pka_notation): New macro.
(show_sig_summary): New parameter:
gpgme_signature_t sig (for printing the pka address), adjust
caller (show_one_sig_status).
(verify_one): Adjust notation printing code so that PKA
notations
are skipped.
(encrypt_gpgme_object): Change type of ERR from int to
gpgme_error_t.
(set_pka_sig_notation): New function.
(encrypt_gpgme_object): In case signing is desired and PKA is
enabled, call set_pka_sig_notation on gpgme context before
encrypting/signing.
(sign_message): Call set_pka_sig_notation on gpgme context in
case
PKA is enabled.
(show_sig_summary): Evaluate PKA related data in signature
object
and write out according information with state_attach_puts.
* crypt-gpgme.h (gpgme_set_sender): Declare function.
* mutt_crypt.h: Insert function declarations for
crypt_pgp_set_sender and crypt_smime_set_sender.
* cryptglue.c (crypt_pgp_set_sender, crypt_smime_set_sender):
New
functions, calling the set_sender module function.
* crypt-mod-smime-gpgme.c (crypt_mod_smime_gpgme): Fill new
set_sender member with NULL.
* crypt-mod-smime-classic.c (crypt_mod_smime_classic): Fill new
set_sender member with NULL.
* crypt-mod-pgp-gpgme.c (crypt_mod_pgp_set_sender): New
function,
call gpgme_set_sender.
(crypt_mod_pgp_gpgme): Fill new set_sender member with
crypt_mod_pgp_set_sender.
* crypt-mod-pgp-classic.c (crypt_mod_pgp_classic): Fill new
set_sender member with NULL.
* crypt-mod.h (crypt_func_set_sender_t): New function type.
(crypt_module_functions): New member: set_sender.
* mutt.h: New option: OPTCRYPTUSEPKA.
2006-11-01 Moritz Schulte <moritz@xxxxxxxxxxx>
* crypt.c (mutt_protect): Call
crypt_smime_set_sender/crypt_pgp_set_sender when necessary.
* crypt-gpgme.c (PKA_NOTATION_NAME): New symbol definition.
(is_pka_notation): New macro.
(show_sig_summary): New parameter:
gpgme_signature_t sig (for printing the pka address), adjust
caller (show_one_sig_status).
(verify_one): Adjust notation printing code so that PKA notations
are skipped.
(encrypt_gpgme_object): Change type of ERR from int to
gpgme_error_t.
(set_pka_sig_notation): New function.
(encrypt_gpgme_object): In case signing is desired and PKA is
enabled, call set_pka_sig_notation on gpgme context before
encrypting/signing.
(sign_message): Call set_pka_sig_notation on gpgme context in case
PKA is enabled.
(show_sig_summary): Evaluate PKA related data in signature object
and write out according information with state_attach_puts.
* crypt-gpgme.h (gpgme_set_sender): Declare function.
* mutt_crypt.h: Insert function declarations for
crypt_pgp_set_sender and crypt_smime_set_sender.
* cryptglue.c (crypt_pgp_set_sender, crypt_smime_set_sender): New
functions, calling the set_sender module function.
* crypt-mod-smime-gpgme.c (crypt_mod_smime_gpgme): Fill new
set_sender member with NULL.
* crypt-mod-smime-classic.c (crypt_mod_smime_classic): Fill new
set_sender member with NULL.
* crypt-mod-pgp-gpgme.c (crypt_mod_pgp_set_sender): New function,
call gpgme_set_sender.
(crypt_mod_pgp_gpgme): Fill new set_sender member with
crypt_mod_pgp_set_sender.
* crypt-mod-pgp-classic.c (crypt_mod_pgp_classic): Fill new
set_sender member with NULL.
* crypt-mod.h (crypt_func_set_sender_t): New function type.
(crypt_module_functions): New member: set_sender.
* mutt.h: New option: OPTCRYPTUSEPKA.
Index: crypt-gpgme.c
===================================================================
RCS file: /home/roessler/cvs/mutt/crypt-gpgme.c,v
retrieving revision 3.10
diff -u -p -r3.10 crypt-gpgme.c
--- crypt-gpgme.c 21 Oct 2005 04:35:37 -0000 3.10
+++ crypt-gpgme.c 1 Nov 2006 18:24:58 -0000
@@ -71,6 +71,10 @@
*(p) <= 'F'? (*(p)-'A'+10):(*(p)-'a'+10))
#define xtoi_2(p) ((xtoi_1(p) * 16) + xtoi_1((p)+1))
+#define PKA_NOTATION_NAME "pka-address@xxxxxxxxx"
+#define is_pka_notation(notation) (! strcmp ((notation)->name, \
+ PKA_NOTATION_NAME))
+
/* Values used for comparing addresses. */
#define CRYPT_KV_VALID 1
#define CRYPT_KV_ADDR 2
@@ -115,6 +119,8 @@ typedef struct crypt_entry
static struct crypt_cache *id_defaults = NULL;
static gpgme_key_t signature_key = NULL;
+static char *current_sender = NULL;
+
/*
* General helper functions.
@@ -661,6 +667,23 @@ static int set_signer (gpgme_ctx_t ctx,
return 0;
}
+static gpgme_error_t
+set_pka_sig_notation (gpgme_ctx_t ctx)
+{
+ gpgme_error_t err;
+
+ err = gpgme_sig_notation_add (ctx,
+ PKA_NOTATION_NAME, current_sender, 0);
+
+ if (err)
+ {
+ mutt_error (_("error setting PKA signature notation: %s\n"),
+ gpgme_strerror (err));
+ mutt_sleep (2);
+ }
+
+ return err;
+}
/* Encrypt the gpgme data object PLAINTEXT to the recipients in RSET
and return an allocated filename to a temporary file containing the
@@ -670,7 +693,7 @@ static int set_signer (gpgme_ctx_t ctx,
static char *encrypt_gpgme_object (gpgme_data_t plaintext, gpgme_key_t *rset,
int use_smime, int combined_signed)
{
- int err;
+ gpgme_error_t err;
gpgme_ctx_t ctx;
gpgme_data_t ciphertext;
char *outfile;
@@ -689,6 +712,18 @@ static char *encrypt_gpgme_object (gpgme
gpgme_release (ctx);
return NULL;
}
+
+ if (option (OPTCRYPTUSEPKA))
+ {
+ err = set_pka_sig_notation (ctx);
+ if (err)
+ {
+ gpgme_data_release (ciphertext);
+ gpgme_release (ctx);
+ return NULL;
+ }
+ }
+
err = gpgme_op_encrypt_sign (ctx, rset, GPGME_ENCRYPT_ALWAYS_TRUST,
plaintext, ciphertext);
}
@@ -788,6 +823,18 @@ static BODY *sign_message (BODY *a, int
return NULL;
}
+ if (option (OPTCRYPTUSEPKA))
+ {
+ err = set_pka_sig_notation (ctx);
+ if (err)
+ {
+ gpgme_data_release (signature);
+ gpgme_data_release (message);
+ gpgme_release (ctx);
+ return NULL;
+ }
+ }
+
err = gpgme_op_sign (ctx, message, signature, GPGME_SIG_MODE_DETACH );
mutt_need_hard_redraw ();
gpgme_data_release (message);
@@ -984,7 +1031,7 @@ BODY *smime_gpgme_build_smime_entity (BO
*/
static int show_sig_summary (unsigned long sum,
gpgme_ctx_t ctx, gpgme_key_t key, int idx,
- STATE *s)
+ STATE *s, gpgme_signature_t sig)
{
int severe = 0;
@@ -1080,6 +1127,27 @@ static int show_sig_summary (unsigned lo
state_attach_puts ("\n", s);
}
+#ifdef HAVE_GPGME_PKA_TRUST
+
+ if (option (OPTCRYPTUSEPKA))
+ {
+ if (sig->pka_trust == 1 && sig->pka_address)
+ {
+ state_attach_puts (_("WARNING: PKA entry does not match "
+ "signer's address: "), s);
+ state_attach_puts (sig->pka_address, s);
+ state_attach_puts ("\n", s);
+ }
+ else if (sig->pka_trust == 2 && sig->pka_address)
+ {
+ state_attach_puts (_("PKA verified signer's address is: "), s);
+ state_attach_puts (sig->pka_address, s);
+ state_attach_puts ("\n", s);
+ }
+ }
+
+#endif
+
return severe;
}
@@ -1259,7 +1327,7 @@ static int show_one_sig_status (gpgme_ct
state_attach_puts (_(" created: "), s);
print_time (created, s);
state_attach_puts ("\n", s);
- if (show_sig_summary (sum, ctx, key, idx, s))
+ if (show_sig_summary (sum, ctx, key, idx, s, sig))
anywarn = 1;
show_one_sig_validity (ctx, idx, s);
}
@@ -1268,7 +1336,7 @@ static int show_one_sig_status (gpgme_ct
state_attach_puts (_("*BAD* signature claimed to be from: "), s);
state_attach_puts (uid, s);
state_attach_puts ("\n", s);
- show_sig_summary (sum, ctx, key, idx, s);
+ show_sig_summary (sum, ctx, key, idx, s, sig);
}
else if (!anybad && key && (key->protocol == GPGME_PROTOCOL_OpenPGP))
{ /* We can't decide (yellow) but this is a PGP key with a good
@@ -1283,14 +1351,14 @@ static int show_one_sig_status (gpgme_ct
state_attach_puts ("\n", s);
show_one_sig_validity (ctx, idx, s);
show_fingerprint (key,s);
- if (show_sig_summary (sum, ctx, key, idx, s))
+ if (show_sig_summary (sum, ctx, key, idx, s, sig))
anywarn = 1;
}
else /* can't decide (yellow) */
{
state_attach_puts (_("Error checking signature"), s);
state_attach_puts ("\n", s);
- show_sig_summary (sum, ctx, key, idx, s);
+ show_sig_summary (sum, ctx, key, idx, s, sig);
}
if (key != signature_key)
@@ -1372,6 +1440,7 @@ static int verify_one (BODY *sigbdy, STA
gpgme_verify_result_t result;
gpgme_sig_notation_t notation;
gpgme_signature_t signature;
+ int non_pka_notations;
result = gpgme_op_verify_result (ctx);
if (result)
@@ -1379,7 +1448,13 @@ static int verify_one (BODY *sigbdy, STA
for (signature = result->signatures; signature;
signature = signature->next)
{
- if (signature->notations)
+ non_pka_notations = 0;
+ for (notation = signature->notations; notation;
+ notation = notation->next)
+ if (! is_pka_notation (notation))
+ non_pka_notations++;
+
+ if (non_pka_notations)
{
char buf[SHORT_STRING];
snprintf (buf, sizeof (buf),
@@ -1389,6 +1464,9 @@ static int verify_one (BODY *sigbdy, STA
for (notation = signature->notations; notation;
notation = notation->next)
{
+ if (is_pka_notation (notation))
+ continue;
+
if (notation->name)
{
state_attach_puts (notation->name, s);
@@ -4266,4 +4344,12 @@ int smime_gpgme_verify_sender (HEADER *h
return verify_sender (h, GPGME_PROTOCOL_CMS);
}
+void gpgme_set_sender (const char *sender)
+{
+ mutt_error ("[setting sender] mailbox: %s\n", sender);
+ FREE (¤t_sender);
+ current_sender = safe_strdup (sender);
+}
+
+
#endif
Index: crypt-gpgme.h
===================================================================
RCS file: /home/roessler/cvs/mutt/crypt-gpgme.h,v
retrieving revision 3.4
diff -u -p -r3.4 crypt-gpgme.h
--- crypt-gpgme.h 17 Sep 2005 20:46:10 -0000 3.4
+++ crypt-gpgme.h 1 Nov 2006 18:24:58 -0000
@@ -51,4 +51,7 @@ int pgp_gpgme_send_menu (HEADER *msg, in
int smime_gpgme_send_menu (HEADER *msg, int *redraw);
int smime_gpgme_verify_sender (HEADER *h);
+
+void gpgme_set_sender (const char *sender);
+
#endif
Index: crypt-mod-pgp-classic.c
===================================================================
RCS file: /home/roessler/cvs/mutt/crypt-mod-pgp-classic.c,v
retrieving revision 3.5
diff -u -p -r3.5 crypt-mod-pgp-classic.c
--- crypt-mod-pgp-classic.c 17 Sep 2005 20:46:10 -0000 3.5
+++ crypt-mod-pgp-classic.c 1 Nov 2006 18:24:58 -0000
@@ -119,6 +119,7 @@ struct crypt_module_specs crypt_mod_pgp_
crypt_mod_pgp_sign_message,
crypt_mod_pgp_verify_one,
crypt_mod_pgp_send_menu,
+ NULL,
crypt_mod_pgp_encrypt_message,
crypt_mod_pgp_make_key_attachment,
Index: crypt-mod-pgp-gpgme.c
===================================================================
RCS file: /home/roessler/cvs/mutt/crypt-mod-pgp-gpgme.c,v
retrieving revision 3.5
diff -u -p -r3.5 crypt-mod-pgp-gpgme.c
--- crypt-mod-pgp-gpgme.c 17 Sep 2005 20:46:10 -0000 3.5
+++ crypt-mod-pgp-gpgme.c 1 Nov 2006 18:24:58 -0000
@@ -90,6 +90,11 @@ static BODY *crypt_mod_pgp_encrypt_messa
return pgp_gpgme_encrypt_message (a, keylist, sign);
}
+static void crypt_mod_pgp_set_sender (const char *sender)
+{
+ gpgme_set_sender (sender);
+}
+
struct crypt_module_specs crypt_mod_pgp_gpgme =
{ APPLICATION_PGP,
{
@@ -104,6 +109,7 @@ struct crypt_module_specs crypt_mod_pgp_
crypt_mod_pgp_sign_message,
crypt_mod_pgp_verify_one,
crypt_mod_pgp_send_menu,
+ crypt_mod_pgp_set_sender,
/* PGP specific. */
crypt_mod_pgp_encrypt_message,
Index: crypt-mod-smime-classic.c
===================================================================
RCS file: /home/roessler/cvs/mutt/crypt-mod-smime-classic.c,v
retrieving revision 3.5
diff -u -p -r3.5 crypt-mod-smime-classic.c
--- crypt-mod-smime-classic.c 17 Sep 2005 20:46:10 -0000 3.5
+++ crypt-mod-smime-classic.c 1 Nov 2006 18:24:58 -0000
@@ -100,6 +100,7 @@ struct crypt_module_specs crypt_mod_smim
crypt_mod_smime_sign_message,
crypt_mod_smime_verify_one,
crypt_mod_smime_send_menu,
+ NULL,
NULL, /* pgp_encrypt_message */
NULL, /* pgp_make_key_attachment */
Index: crypt-mod-smime-gpgme.c
===================================================================
RCS file: /home/roessler/cvs/mutt/crypt-mod-smime-gpgme.c,v
retrieving revision 3.5
diff -u -p -r3.5 crypt-mod-smime-gpgme.c
--- crypt-mod-smime-gpgme.c 17 Sep 2005 20:46:10 -0000 3.5
+++ crypt-mod-smime-gpgme.c 1 Nov 2006 18:24:58 -0000
@@ -98,6 +98,7 @@ struct crypt_module_specs crypt_mod_smim
crypt_mod_smime_sign_message,
crypt_mod_smime_verify_one,
crypt_mod_smime_send_menu,
+ NULL,
NULL, /* pgp_encrypt_message */
NULL, /* pgp_make_key_attachment */
Index: crypt-mod.h
===================================================================
RCS file: /home/roessler/cvs/mutt/crypt-mod.h,v
retrieving revision 3.4
diff -u -p -r3.4 crypt-mod.h
--- crypt-mod.h 17 Sep 2005 20:46:10 -0000 3.4
+++ crypt-mod.h 1 Nov 2006 18:24:58 -0000
@@ -67,6 +67,7 @@ typedef void (*crypt_func_smime_invoke_i
typedef void (*crypt_func_init_t) (void);
+typedef void (*crypt_func_set_sender_t) (const char *sender);
/*
A structure to keep all crypto module fucntions together.
@@ -84,6 +85,7 @@ typedef struct crypt_module_functions
crypt_func_sign_message_t sign_message;
crypt_func_verify_one_t verify_one;
crypt_func_send_menu_t send_menu;
+ crypt_func_set_sender_t set_sender;
/* PGP specific functions. */
crypt_func_pgp_encrypt_message_t pgp_encrypt_message;
Index: crypt.c
===================================================================
RCS file: /home/roessler/cvs/mutt/crypt.c,v
retrieving revision 3.34
diff -u -p -r3.34 crypt.c
--- crypt.c 8 Jun 2006 11:38:08 -0000 3.34
+++ crypt.c 1 Nov 2006 18:25:00 -0000
@@ -169,6 +169,18 @@ int mutt_protect (HEADER *msg, char *key
if ((WithCrypto & APPLICATION_PGP))
tmp_pgp_pbody = msg->content;
+ if (option (OPTCRYPTUSEPKA) && (msg->security & SIGN))
+ {
+ /* Set sender (necessary for e.g. PKA). */
+
+ if ((WithCrypto & APPLICATION_SMIME)
+ && (msg->security & APPLICATION_SMIME))
+ crypt_smime_set_sender (msg->env->from->mailbox);
+ else if ((WithCrypto & APPLICATION_PGP)
+ && (msg->security & APPLICATION_PGP))
+ crypt_pgp_set_sender (msg->env->from->mailbox);
+ }
+
if (msg->security & SIGN)
{
if ((WithCrypto & APPLICATION_SMIME)
Index: cryptglue.c
===================================================================
RCS file: /home/roessler/cvs/mutt/cryptglue.c,v
retrieving revision 3.10
diff -u -p -r3.10 cryptglue.c
--- cryptglue.c 13 Jun 2006 07:52:52 -0000 3.10
+++ cryptglue.c 1 Nov 2006 18:25:00 -0000
@@ -260,8 +260,15 @@ void crypt_pgp_extract_keys_from_attachm
(CRYPT_MOD_CALL (PGP, pgp_extract_keys_from_attachment_list)) (fp, tag,
top);
}
+void crypt_pgp_set_sender (const char *sender)
+{
+ if (CRYPT_MOD_CALL_CHECK (PGP, set_sender))
+ (CRYPT_MOD_CALL (PGP, set_sender)) (sender);
+}
+
+
/*
S/MIME
@@ -376,3 +383,9 @@ int crypt_smime_send_menu (HEADER *msg,
return 0;
}
+
+void crypt_smime_set_sender (const char *sender)
+{
+ if (CRYPT_MOD_CALL_CHECK (SMIME, set_sender))
+ (CRYPT_MOD_CALL (SMIME, set_sender)) (sender);
+}
Index: init.h
===================================================================
RCS file: /home/roessler/cvs/mutt/init.h,v
retrieving revision 3.103
diff -u -p -r3.103 init.h
--- init.h 11 Aug 2006 09:08:20 -0000 3.103
+++ init.h 1 Nov 2006 18:25:03 -0000
@@ -2939,6 +2939,12 @@ struct option_t MuttVars[] = {
** Controls whether mutt writes out the Bcc header when preparing
** messages to be sent. Exim users may wish to unset this.
*/
+ /*
+ ** .pp Controls wether Mutt uses PKA
+ ** (http://www.g10code.de/docs/pka-intro.de.pdf) during signature
+ ** verification (only supported by the GPGME backend).
+ */
+ { "use_pka", DT_BOOL, R_NONE, OPTCRYPTUSEPKA, 0 },
/*--*/
{ NULL }
};
Index: mutt.h
===================================================================
RCS file: /home/roessler/cvs/mutt/mutt.h,v
retrieving revision 3.68
diff -u -p -r3.68 mutt.h
--- mutt.h 15 Aug 2006 17:08:32 -0000 3.68
+++ mutt.h 1 Nov 2006 18:25:03 -0000
@@ -451,6 +451,7 @@ enum
OPTXMAILER,
OPTCRYPTUSEGPGME,
+ OPTCRYPTUSEPKA,
/* PGP options */
Index: mutt_crypt.h
===================================================================
RCS file: /home/roessler/cvs/mutt/mutt_crypt.h,v
retrieving revision 3.12
diff -u -p -r3.12 mutt_crypt.h
--- mutt_crypt.h 20 Apr 2006 16:46:49 -0000 3.12
+++ mutt_crypt.h 1 Nov 2006 18:25:03 -0000
@@ -220,7 +220,7 @@ char *crypt_pgp_keyid (pgp_key_t k);
/* fixme: needs documentation */
void crypt_pgp_extract_keys_from_attachment_list (FILE *fp, int tag,BODY *top);
-
+void crypt_pgp_set_sender (const char *sender);
@@ -259,6 +259,8 @@ void crypt_smime_invoke_import (char *in
int crypt_smime_send_menu (HEADER *msg, int *redraw);
+void crypt_smime_set_sender (const char *sender);
+
/* fixme: needs documentation */
int crypt_smime_verify_one (BODY *sigbdy, STATE *s, const char *tempf);
2006-11-01 Moritz Schulte <moritz@xxxxxxxxxxx>
* Makefile.am: Use $(GPGME_CFLAGS) instead of $(LIBGPGME_CFLAGS).
* configure.in: Replaced self-hacked GPGME checking code with
"standard code", also take care of defining HAVE_GPGME_PKA_TRUST.
Index: Makefile.am
===================================================================
RCS file: /home/roessler/cvs/mutt/Makefile.am,v
retrieving revision 3.50
diff -u -p -r3.50 Makefile.am
--- Makefile.am 8 Sep 2006 15:45:57 -0000 3.50
+++ Makefile.am 1 Nov 2006 18:24:56 -0000
@@ -32,7 +32,7 @@ mutt_SOURCES = $(BUILT_SOURCES) \
url.c ascii.c mutt_idna.c crypt-mod.c crypt-mod.h
mutt_LDADD = @MUTT_LIB_OBJECTS@ @LIBOBJS@ $(LIBIMAP) $(MUTTLIBS) \
- $(INTLLIBS) $(LIBICONV) $(LIBGPGME_LIBS)
+ $(INTLLIBS) $(LIBICONV) $(GPGME_LIBS)
mutt_DEPENDENCIES = @MUTT_LIB_OBJECTS@ @LIBOBJS@ $(LIBIMAPDEPS) \
$(INTLDEPS)
@@ -52,7 +52,7 @@ DEFS=-DPKGDATADIR=\"$(pkgdatadir)\" -DSY
-DBINDIR=\"$(bindir)\" -DMUTTLOCALEDIR=\"$(datadir)/locale\" \
-DHAVE_CONFIG_H=1
-AM_CPPFLAGS=-I. -I$(top_srcdir) $(IMAP_INCLUDES) $(LIBGPGME_CFLAGS) -Iintl
+AM_CPPFLAGS=-I. -I$(top_srcdir) $(IMAP_INCLUDES) $(GPGME_CFLAGS) -Iintl
CPPFLAGS=@CPPFLAGS@ -I$(includedir)
Index: configure.in
===================================================================
RCS file: /home/roessler/cvs/mutt/configure.in,v
retrieving revision 3.56
diff -u -p -r3.56 configure.in
--- configure.in 1 Sep 2006 19:26:39 -0000 3.56
+++ configure.in 1 Nov 2006 18:24:56 -0000
@@ -107,31 +107,31 @@ AC_DEFINE_UNQUOTED(SENDMAIL,"$ac_cv_path
OPS='$(srcdir)/OPS'
+AC_MSG_CHECKING([whether to build with GPGME support])
AC_ARG_ENABLE(gpgme, AC_HELP_STRING([--enable-gpgme], [Enable GPGME support]),
[ if test x$enableval = xyes; then
- have_gpgme=yes
+ enable_gpgme=yes
fi
])
-AC_ARG_WITH(gpgme-prefix, AC_HELP_STRING([--with-gpgme-prefix=PFX], [prefix
where GPGME is installed (optional)]),
-gpgme_config_prefix="$withval", gpgme_config_prefix="")
-if test x$have_gpgme = xyes; then
- if test x$gpgme_config_prefix != x; then
- GPGME_CONFIG="$gpgme_config_prefix/bin/gpgme-config"
- else
- AC_PATH_PROG(GPGME_CONFIG, gpgme-config, no)
- fi
- if test "x$GPGME_CONFIG" = "xno"; then
- AC_MSG_ERROR([GPGME not found])
- else
- LIBGPGME_CFLAGS=`$GPGME_CONFIG --cflags`
- LIBGPGME_LIBS=`$GPGME_CONFIG --libs`
- MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS crypt-gpgme.o
crypt-mod-pgp-gpgme.o crypt-mod-smime-gpgme.o"
- AC_DEFINE(CRYPT_BACKEND_GPGME, 1, [Defined, if GPGME support is
enabled])
- fi
+if test x"$enable_gpgme" = xyes; then
+ AC_MSG_RESULT(yes)
+ AM_PATH_GPGME(1.0.0, AC_DEFINE(CRYPT_BACKEND_GPGME, 1,
+ [Defined, if GPGME support is enabled]),
+ [gpgme_found=no])
+ if test x"$gpgme_found" = xno; then
+ AC_MSG_ERROR([*** GPGME not found ***])
+ else
+ AM_PATH_GPGME(1.1.1, AC_DEFINE(HAVE_GPGME_PKA_TRUST, 1,
+ [Define if GPGME supports PKA]))
+ #needed to get GPGME_LIBS and al correctly
+ AM_PATH_GPGME(1.0.0, AC_DEFINE(CRYPT_BACKEND_GPGME, 1,
+ [Define if you use GPGME to support OpenPGP]))
+ MUTT_LIB_OBJECTS="$MUTT_LIB_OBJECTS crypt-gpgme.o crypt-mod-pgp-gpgme.o
crypt-mod-smime-gpgme.o"
+ fi
+else
+ AC_MSG_RESULT([no])
fi
-AC_SUBST(LIBGPGME_CFLAGS)
-AC_SUBST(LIBGPGME_LIBS)
AC_ARG_ENABLE(pgp, AC_HELP_STRING([--disable-pgp], [Disable PGP support]),
[ if test x$enableval = xno ; then
Attachment:
signature.asc
Description: This is a digitally signed message part