1184{
1185 char *certfile = NULL;
1186 struct Buffer *buf = NULL;
1187
1189 if (!fp_err)
1190 {
1192 goto done;
1193 }
1194
1196 if (!fp_out)
1197 {
1199 goto done;
1200 }
1201
1204 if (c_smime_ask_cert_label)
1205 {
1207 false, NULL, NULL, NULL) != 0) ||
1209 {
1210 goto done;
1211 }
1212 }
1213
1216 if (certfile)
1217 {
1219
1221 FILE *fp_smime_in = NULL;
1222 pid_t pid =
smime_invoke(&fp_smime_in, NULL, NULL, -1, fileno(fp_out),
1223 fileno(fp_err), certfile, NULL, NULL, NULL, NULL,
1224 NULL, NULL, c_smime_import_cert_command);
1225 if (pid == -1)
1226 {
1227 mutt_message(
_(
"Error: unable to create OpenSSL subprocess"));
1228 goto done;
1229 }
1231 fputc('\n', fp_smime_in);
1233
1235
1238 }
1239
1240 fflush(fp_out);
1241 rewind(fp_out);
1242 fflush(fp_err);
1243 rewind(fp_err);
1244
1247
1248done:
1252}
bool buf_is_empty(const struct Buffer *buf)
Is the Buffer empty?
static const char * buf_string(const struct Buffer *buf)
Convert a buffer to a const char * "string".
const char * cs_subset_string(const struct ConfigSubset *sub, const char *name)
Get a string config item by name.
bool cs_subset_bool(const struct ConfigSubset *sub, const char *name)
Get a boolean config item by name.
void mutt_endwin(void)
Shutdown curses.
int buf_get_field(const char *field, struct Buffer *buf, CompletionFlags complete, bool multiple, struct Mailbox *m, char ***files, int *numfiles)
Ask the user for a string.
int mutt_file_copy_stream(FILE *fp_in, FILE *fp_out)
Copy the contents of one file into another.
int mutt_file_fclose(FILE **fp)
Close a FILE handle (and NULL the pointer)
void mutt_file_unlink(const char *s)
Delete a file, carefully.
int filter_wait(pid_t pid)
Wait for the exit of a process and return its status.
#define mutt_message(...)
#define MUTT_COMP_NO_FLAGS
No flags are set.
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.
static char * smime_extract_certificate(const char *infile)
Extract an SMIME certificate from a file.
static pid_t smime_invoke(FILE **fp_smime_in, FILE **fp_smime_out, FILE **fp_smime_err, int fp_smime_infd, int fp_smime_outfd, int fp_smime_errfd, const char *fname, const char *sig_fname, const char *cryptalg, const char *digestalg, const char *key, const char *certificates, const char *intermediates, const char *format)
Run an SMIME command.
String manipulation buffer.
Container for Accounts, Notifications.
struct ConfigSubset * sub
Inherited config items.
#define mutt_file_mkstemp()