/*
- * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
- * Copyright (C) 1999-2006 Hiroyuki Yamamoto & the Sylpheed-Claws team
- * This file (C) 2004 Colin Leroy <colin@colino.net>
+ * Claws Mail -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2007 Colin Leroy <colin@colino.net> and
+ * the Claws Mail team
*
* 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
#include "quoted-printable.h"
#include "base64.h"
#include "codeconv.h"
+#include "plugin.h"
extern struct GPGConfig prefs_gpg;
static PrivacyDataPGP *pgpinline_new_privacydata()
{
PrivacyDataPGP *data;
+ gpgme_error_t err;
data = g_new0(PrivacyDataPGP, 1);
data->data.system = &pgpinline_system;
data->done_sigtest = FALSE;
data->is_signed = FALSE;
data->sigstatus = NULL;
- gpgme_new(&data->ctx);
+ if ((err = gpgme_new(&data->ctx)) != GPG_ERR_NO_ERROR) {
+ debug_print(("Couldn't initialize GPG context, %s"), gpgme_strerror(err));
+ return NULL;
+ }
return data;
}
PrivacyDataPGP *data = NULL;
gchar *textdata = NULL, *tmp = NULL;
gpgme_data_t plain = NULL, cipher = NULL;
- gpgme_ctx_t ctx;
-
+ gpgme_error_t err;
+
g_return_val_if_fail(mimeinfo != NULL, 0);
if (procmime_mimeinfo_parent(mimeinfo) == NULL)
textdata = g_strdup(tmp);
g_free(tmp);
- gpgme_new(&ctx);
- gpgme_set_textmode(ctx, 1);
- gpgme_set_armor(ctx, 1);
+ if ((err = gpgme_new(&data->ctx)) != GPG_ERR_NO_ERROR) {
+ debug_print(("Couldn't initialize GPG context, %s"), gpgme_strerror(err));
+ privacy_set_error(_("Couldn't initialize GPG context, %s"), gpgme_strerror(err));
+ return 0;
+ }
+ gpgme_set_textmode(data->ctx, 1);
+ gpgme_set_armor(data->ctx, 1);
- gpgme_data_new_from_mem(&plain, textdata, strlen(textdata), 1);
+ gpgme_data_new_from_mem(&plain, textdata, (size_t)strlen(textdata), 1);
gpgme_data_new(&cipher);
- data->sigstatus = sgpgme_verify_signature(ctx, plain, NULL, cipher);
+ data->sigstatus = sgpgme_verify_signature(data->ctx, plain, NULL, cipher);
gpgme_data_release(plain);
gpgme_data_release(cipher);
}
debug_print("decrypting '%s'\n", textdata);
- gpgme_data_new_from_mem(&cipher, textdata, strlen(textdata), 1);
+ gpgme_data_new_from_mem(&cipher, textdata, (size_t)strlen(textdata), 1);
plain = sgpgme_decrypt_verify(cipher, &sigstat, ctx);
if (sigstat && !sigstat->signatures)
gchar *sigcontent;
gpgme_ctx_t ctx;
gpgme_data_t gpgtext, gpgsig;
- guint len;
+ size_t len;
gpgme_error_t err;
struct passphrase_cb_info_s info;
gpgme_sign_result_t result = NULL;
fclose(fp);
- gpgme_data_new_from_mem(&gpgtext, textstr, strlen(textstr), 0);
+ gpgme_data_new_from_mem(&gpgtext, textstr, (size_t)strlen(textstr), 0);
gpgme_data_new(&gpgsig);
- gpgme_new(&ctx);
+ if ((err = gpgme_new(&ctx)) != GPG_ERR_NO_ERROR) {
+ debug_print(("Couldn't initialize GPG context, %s"), gpgme_strerror(err));
+ privacy_set_error(_("Couldn't initialize GPG context, %s"), gpgme_strerror(err));
+ return FALSE;
+ }
gpgme_set_textmode(ctx, 1);
gpgme_set_armor(ctx, 1);
sigcontent = gpgme_data_release_and_get_mem(gpgsig, &len);
- gpgme_release(ctx);
-
if (sigcontent == NULL || len <= 0) {
g_warning("gpgme_data_release_and_get_mem failed");
privacy_set_error(_("Data signing failed, no contents."));
gpgme_data_release(gpgtext);
g_free(textstr);
g_free(sigcontent);
+ gpgme_release(ctx);
return FALSE;
}
* chars
*/
procmime_encode_content(msgcontent, ENC_BASE64);
-
+ gpgme_release(ctx);
+
return TRUE;
}
MimeInfo *msgcontent;
FILE *fp;
gchar *enccontent;
- guint len;
+ size_t len;
gchar *textstr, *tmp;
gpgme_data_t gpgtext, gpgenc;
gpgme_ctx_t ctx;
kset = g_malloc(sizeof(gpgme_key_t)*(i+1));
memset(kset, 0, sizeof(gpgme_key_t)*(i+1));
- gpgme_new(&ctx);
+ if ((err = gpgme_new(&ctx)) != GPG_ERR_NO_ERROR) {
+ debug_print(("Couldn't initialize GPG context, %s"), gpgme_strerror(err));
+ privacy_set_error(_("Couldn't initialize GPG context, %s"), gpgme_strerror(err));
+ return FALSE;
+ }
i = 0;
while (fprs[i] && strlen(fprs[i])) {
gpgme_key_t key;
fclose(fp);
/* encrypt data */
- gpgme_data_new_from_mem(&gpgtext, textstr, strlen(textstr), 0);
+ gpgme_data_new_from_mem(&gpgtext, textstr, (size_t)strlen(textstr), 0);
gpgme_data_new(&gpgenc);
- gpgme_new(&ctx);
+ if ((err = gpgme_new(&ctx)) != GPG_ERR_NO_ERROR) {
+ debug_print(("Couldn't initialize GPG context, %s"), gpgme_strerror(err));
+ privacy_set_error(_("Couldn't initialize GPG context, %s"), gpgme_strerror(err));
+ return FALSE;
+ }
gpgme_set_armor(ctx, 1);
err = gpgme_op_encrypt(ctx, kset, GPGME_ENCRYPT_ALWAYS_TRUST, gpgtext, gpgenc);
- gpgme_release(ctx);
enccontent = gpgme_data_release_and_get_mem(gpgenc, &len);
if (enccontent == NULL || len <= 0) {
privacy_set_error(_("Encryption failed, %s"), gpgme_strerror(err));
gpgme_data_release(gpgtext);
g_free(textstr);
+ gpgme_release(ctx);
return FALSE;
}
msgcontent->data.mem = g_strdup(tmp);
msgcontent->content = MIMECONTENT_MEM;
g_free(tmp);
+ gpgme_release(ctx);
return TRUE;
}
privacy_unregister_system(&pgpinline_system);
}
+struct PluginFeature *plugin_provides(void)
+{
+ static struct PluginFeature features[] =
+ { {PLUGIN_PRIVACY, N_("PGP/Inline")},
+ {PLUGIN_NOTHING, NULL}};
+ return features;
+}
#endif /* USE_GPGME */