1722{
1723 struct Body *b_enc = NULL;
1724 char body_charset[256] = { 0 };
1725 const char *from_charset = NULL;
1726 const char *send_charset = NULL;
1727 bool empty = false;
1728 bool err;
1729 char buf[256] = { 0 };
1730 pid_t pid;
1733
1735 goto cleanup;
1737 goto cleanup;
1738
1740 if (!fp_body)
1741 {
1743 goto cleanup;
1744 }
1745
1748 if (!fp_pgp_in)
1749 {
1752 goto cleanup;
1753 }
1754
1755
1756
1757
1758
1759
1762 from_charset = body_charset;
1763 else
1765
1767 {
1768 send_charset = "us-ascii";
1770 }
1771 else
1772 {
1773 int c;
1775
1777 send_charset = "us-ascii";
1778 else
1779 send_charset = "utf-8";
1780
1781
1784 fputc(c, fp_pgp_in);
1785
1787 }
1790
1794 if (!fp_pgp_out || !fp_pgp_err)
1795 {
1798 if (fp_pgp_out)
1799 {
1802 }
1804 goto cleanup;
1805 }
1806
1808 fileno(fp_pgp_err),
buf_string(pgpinfile), keylist, flags);
1809 if (pid == -1)
1810 {
1816 goto cleanup;
1817 }
1818
1822 fprintf(fp_pgp_in,
"%s\n",
PgpPass);
1824
1827 empty = true;
1828
1830
1831 fflush(fp_pgp_out);
1832 fflush(fp_pgp_err);
1833
1834 rewind(fp_pgp_out);
1835 rewind(fp_pgp_err);
1836
1837 if (!empty)
1838 empty = (fgetc(fp_pgp_out) == EOF);
1840
1841 err = false;
1842
1843 while (fgets(buf, sizeof(buf), fp_pgp_err))
1844 {
1845 err = true;
1846 fputs(buf, stdout);
1847 }
1848
1850
1851 if (err)
1853
1854 if (empty)
1855 {
1859 goto cleanup;
1860 }
1861
1863
1865
1868
1870 (flags &
SEC_ENCRYPT) ?
"pgp-encrypted" :
"pgp-signed");
1872
1874
1877
1880
1883
1884cleanup:
1887 return b_enc;
1888}
char * buf_strdup(const struct Buffer *buf)
Copy a Buffer's string.
static const char * buf_string(const struct Buffer *buf)
Convert a buffer to a const char * "string".
bool cs_subset_bool(const struct ConfigSubset *sub, const char *name)
Get a boolean config item by name.
const char * cc_charset(void)
Get the cached value of $charset.
int mutt_any_key_to_continue(const char *s)
Prompt the user to 'press any key' and wait.
struct Body * mutt_body_new(void)
Create a new Body.
char * mutt_body_get_charset(struct Body *b, char *buf, size_t buflen)
Get a body's character set.
int mutt_file_copy_stream(FILE *fp_in, FILE *fp_out)
Copy the contents of one file into another.
void mutt_file_unlink(const char *s)
Delete a file, carefully.
#define mutt_file_fclose(FP)
#define mutt_file_fopen(PATH, MODE)
void pgp_class_void_passphrase(void)
Forget the cached passphrase - Implements CryptModuleSpecs::void_passphrase() -.
@ TYPE_TEXT
Type: 'text/*'.
@ DISP_NONE
No preferred disposition.
int mutt_ch_fgetconv(struct FgetConv *fc)
Convert a file's character set.
struct FgetConv * mutt_ch_fgetconv_open(FILE *fp, const char *from, const char *to, uint8_t flags)
Prepare a file for charset conversion.
void mutt_ch_fgetconv_close(struct FgetConv **ptr)
Close an fgetconv handle.
#define mutt_ch_is_us_ascii(str)
#define MUTT_ICONV_NO_FLAGS
No flags are set.
int filter_wait(pid_t pid)
Wait for the exit of a process and return its status.
bool mutt_istr_equal(const char *a, const char *b)
Compare two strings, ignoring case.
char * mutt_str_dup(const char *str)
Copy a string, safely.
#define SEC_ENCRYPT
Email is encrypted.
#define SEC_SIGN
Email is signed.
void mutt_param_set(struct ParameterList *pl, const char *attribute, const char *value)
Set a Parameter.
static char PgpPass[1024]
Cached PGP Passphrase.
bool pgp_use_gpg_agent(void)
Does the user want to use the gpg agent?
pid_t pgp_invoke_traditional(FILE **fp_pgp_in, FILE **fp_pgp_out, FILE **fp_pgp_err, int fd_pgp_in, int fd_pgp_out, int fd_pgp_err, const char *fname, const char *uids, SecurityFlags flags)
Use PGP to create in inline-signed message.
struct Buffer * buf_pool_get(void)
Get a Buffer from the pool.
void buf_pool_release(struct Buffer **ptr)
Return a Buffer to the pool.
bool noconv
Don't do character set conversion.
bool unlink
If true, filename should be unlink()ed before free()ing this structure.
struct ParameterList parameter
Parameters of the content-type.
bool use_disp
Content-Disposition uses filename= ?
unsigned int disposition
content-disposition, ContentDisposition
char * subtype
content-type subtype
unsigned int encoding
content-transfer-encoding, ContentEncoding
unsigned int type
content-type primary type, ContentType
char * filename
When sending a message, this is the file to which this structure refers.
String manipulation buffer.
Cursor for converting a file's encoding.
Container for Accounts, Notifications.
struct ConfigSubset * sub
Inherited config items.
#define mutt_file_mkstemp()