}
/* write to temporary file */
- g_snprintf(tmp, sizeof(tmp), "%s%ctmpmsg%d",
- get_rc_dir(), G_DIR_SEPARATOR, (gint)compose);
+ g_snprintf(tmp, sizeof(tmp), "%s%ctmpmsg.%08x",
+ get_tmp_dir(), G_DIR_SEPARATOR, (gint)compose);
if (prefs_common.linewrap_at_send)
compose_wrap_line_all(compose);
gchar *cc_hdr;
gchar *to_hdr;
- debug_print(_("Writing redirect header\n"));
+ debug_print("Writing redirect header\n");
cc_hdr = prefs_common.trans_hdr ? _("Cc:") : "Cc:";
to_hdr = prefs_common.trans_hdr ? _("To:") : "To:";
*pkey_list = key_list;
return 0;
}
+
+/* clearsign message body text */
+static gint compose_clearsign_text(Compose *compose, gchar **text)
+{
+ GSList *key_list;
+ gchar *tmp_file;
+
+ tmp_file = get_tmp_file();
+ if (str_write_to_file(*text, tmp_file) < 0) {
+ g_free(tmp_file);
+ return -1;
+ }
+
+ if (canonicalize_file_replace(tmp_file) < 0 ||
+ compose_create_signers_list(compose, &key_list) < 0 ||
+ rfc2015_clearsign(tmp_file, key_list) < 0) {
+ unlink(tmp_file);
+ g_free(tmp_file);
+ return -1;
+ }
+
+ g_free(*text);
+ *text = file_read_to_str(tmp_file);
+ unlink(tmp_file);
+ g_free(tmp_file);
+ if (*text == NULL)
+ return -1;
+
+ return 0;
+}
#endif /* USE_GPGME */
static gint compose_write_to_file(Compose *compose, const gchar *file,
}
g_free(chars);
+#if USE_GPGME
+ if (!is_draft && compose->use_signing && compose->account->clearsign) {
+ if (compose_clearsign_text(compose, &buf) < 0) {
+ g_warning("clearsign failed\n");
+ fclose(fp);
+ unlink(file);
+ g_free(buf);
+ return -1;
+ }
+ }
+#endif
+
/* write headers */
if (compose_write_headers
(compose, fp, out_codeset, encoding, is_draft) < 0) {
if (is_draft)
return 0;
- if (compose->use_signing || compose->use_encryption) {
+ if ((compose->use_signing && !compose->account->clearsign) ||
+ compose->use_encryption) {
if (canonicalize_file_replace(file) < 0) {
unlink(file);
return -1;
}
}
- if (compose->use_signing) {
+ if (compose->use_signing && !compose->account->clearsign) {
GSList *key_list;
if (compose_create_signers_list(compose, &key_list) < 0 ||
static gboolean lock = FALSE;
PrefsAccount *mailac = NULL, *newsac = NULL;
- debug_print(_("queueing message...\n"));
+ debug_print("queueing message...\n");
g_return_val_if_fail(compose->account != NULL, -1);
g_return_val_if_fail(compose->orig_account != NULL, -1);
#define QUOTE_IF_REQUIRED(out, str) \
{ \
- if (*str != '"' && strchr(str, ',')) { \
+ if (*str != '"' && (strchr(str, ',') \
+ || strchr(str, '.'))) { \
gchar *__tmp; \
gint len; \
\
return 0;
}
- debug_print(_("Writing %s-header\n"), header);
+ debug_print("Writing %s-header\n", header);
header_w_colon = g_strconcat(header, ":", NULL);
trans_hdr = (prefs_common.trans_hdr ? gettext(header_w_colon) : header_w_colon);
case PRIORITY_LOWEST: fprintf(fp, "Importance: low\n"
"X-Priority: 5 (Lowest)\n");
break;
- default: debug_print(_("compose: priority unknown : %d\n"),
+ default: debug_print("compose: priority unknown : %d\n",
compose->priority);
}
lt->tm_min, lt->tm_sec,
(guint)random(), addr);
- debug_print(_("generated Message-ID: %s\n"), buf);
+ debug_print("generated Message-ID: %s\n", buf);
g_free(addr);
}
g_return_val_if_fail(account != NULL, NULL);
- debug_print(_("Creating compose window...\n"));
+ debug_print("Creating compose window...\n");
compose = g_new0(Compose, 1);
titles[COL_MIMETYPE] = _("MIME type");
GtkWidget *menuitem;
if (!gtkpspell_set_sug_mode(gtkpspell, prefs_common.pspell_sugmode)) {
- debug_print(_("Pspell: could not set suggestion mode %s\n"),
+ debug_print("Pspell: could not set suggestion mode %s\n",
gtkpspellcheckers->error_message);
gtkpspell_checkers_reset_error();
}
static void compose_exec_ext_editor(Compose *compose)
{
- gchar tmp[64];
+ gchar *tmp;
pid_t pid;
gint pipe_fds[2];
- g_snprintf(tmp, sizeof(tmp), "%s%ctmpmsg.%08x",
- g_get_tmp_dir(), G_DIR_SEPARATOR, (gint)compose);
+ tmp = g_strdup_printf("%s%ctmpmsg.%08x", get_tmp_dir(),
+ G_DIR_SEPARATOR, (gint)compose);
if (pipe(pipe_fds) < 0) {
perror("pipe");
+ g_free(tmp);
return;
}
if ((pid = fork()) < 0) {
perror("fork");
+ g_free(tmp);
return;
}
close(pipe_fds[1]);
_exit(0);
}
+
+ g_free(tmp);
}
static gint compose_exec_ext_editor_real(const gchar *file)
Compose *compose = (Compose *)data;
gint i = 0;
- debug_print(_("Compose: input from monitoring process\n"));
+ debug_print("Compose: input from monitoring process\n");
gdk_input_remove(compose->exteditor_tag);
lock = TRUE;
- tmp = g_strdup_printf("%s%cdraft.%d", g_get_tmp_dir(),
+ tmp = g_strdup_printf("%s%cdraft.%08x", get_tmp_dir(),
G_DIR_SEPARATOR, (gint)compose);
if (compose_write_to_file(compose, tmp, TRUE) < 0) {