int pgp_decrypt_mime (FILE *fpin, FILE **fpout, BODY *b, BODY **cur)
{
- char tempfile[_POSIX_PATH_MAX];
+ BUFFER *tempfile = NULL;
STATE s;
BODY *p = b;
int need_decode = 0;
LOFF_T saved_offset;
size_t saved_length;
FILE *decoded_fp = NULL;
- int rv = 0;
+ int rv = -1;
if (mutt_is_valid_multipart_pgp_encrypted (b))
{
else
return -1;
+ tempfile = mutt_buffer_pool_get ();
+
memset (&s, 0, sizeof (s));
s.fpin = fpin;
saved_offset = b->offset;
saved_length = b->length;
- mutt_mktemp (tempfile, sizeof (tempfile));
- if ((decoded_fp = safe_fopen (tempfile, "w+")) == NULL)
+ mutt_buffer_mktemp (tempfile);
+ if ((decoded_fp = safe_fopen (mutt_b2s (tempfile), "w+")) == NULL)
{
- mutt_perror (tempfile);
- return (-1);
+ mutt_perror (mutt_b2s (tempfile));
+ goto bail;
}
- unlink (tempfile);
+ unlink (mutt_b2s (tempfile));
fseeko (s.fpin, b->offset, 0);
s.fpout = decoded_fp;
s.fpout = 0;
}
- mutt_mktemp (tempfile, sizeof (tempfile));
- if ((*fpout = safe_fopen (tempfile, "w+")) == NULL)
+ mutt_buffer_mktemp (tempfile);
+ if ((*fpout = safe_fopen (mutt_b2s (tempfile), "w+")) == NULL)
{
- mutt_perror (tempfile);
- rv = -1;
+ mutt_perror (mutt_b2s (tempfile));
goto bail;
}
- unlink (tempfile);
+ unlink (mutt_b2s (tempfile));
- if ((*cur = pgp_decrypt_part (b, &s, *fpout, p)) == NULL)
- rv = -1;
+ if ((*cur = pgp_decrypt_part (b, &s, *fpout, p)) != NULL)
+ rv = 0;
rewind (*fpout);
bail:
safe_fclose (&decoded_fp);
}
+ mutt_buffer_pool_release (&tempfile);
return rv;
}