* please see the file GPL in the top level source directory.
*/
-#if HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <lib-lib/mem.h>
-#include <lib-lib/str.h>
-#include <lib-lib/ascii.h>
-#include <lib-lib/macros.h>
-#include <lib-lib/file.h>
+#include <lib-lib/lib-lib.h>
#include <lib-mime/mime.h>
+#include <lib-sys/unix.h>
#include <lib-ui/curses.h>
+#include <lib-ui/enter.h>
+#include <lib-ui/menu.h>
-#include "mutt.h"
-#include "enter.h"
#include "recvattach.h"
-#include "mutt_menu.h"
#include "pgp.h"
#include "pager.h"
#include "sort.h"
-#include "lib/debug.h"
-
-#include <string.h>
-#include <ctype.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <sys/stat.h>
-#include <sys/wait.h>
-
-#include <locale.h>
-
struct pgp_cache {
char *what;
char *dflt;
*/
typedef struct pgp_entry {
- size_t num;
+ ssize_t num;
pgp_uid_t *uid;
} pgp_entry_t;
-static const char *pgp_entry_fmt (char *dest,
- size_t destlen,
- char op,
- const char *src,
- const char *prefix,
- const char *ifstring,
- const char *elsestring,
- unsigned long data, format_flag flags)
+static const char *
+pgp_entry_fmt (char *dest, ssize_t destlen, char op,
+ const char *src, const char *prefix,
+ const char *ifstr, const char *elstr,
+ anytype data, format_flag flags)
{
char fmt[16];
pgp_entry_t *entry;
int kflags = 0;
int optional = (flags & M_FORMAT_OPTIONAL);
- entry = (pgp_entry_t *) data;
+ entry = data.ptr;
uid = entry->uid;
key = uid->parent;
pkey = pgp_principal_key (key);
{
const char *cp;
- char buf2[SHORT_STRING], *p;
+ char buf2[STRING], *p;
int do_locales;
struct tm *tm;
- size_t len;
+ ssize_t len;
p = dest;
*dest = '\0';
}
- if (optional)
- mutt_FormatString (dest, destlen, ifstring, mutt_attach_fmt, data, 0);
- else if (flags & M_FORMAT_OPTIONAL)
- mutt_FormatString (dest, destlen, elsestring, mutt_attach_fmt, data, 0);
- return (src);
+ if (flags & M_FORMAT_OPTIONAL)
+ m_strformat(dest, destlen, 0, optional ? ifstr : elstr,
+ mutt_attach_fmt, data, 0);
+ return src;
}
-static void pgp_entry (char *s, size_t l, MUTTMENU * menu, int num)
+static void pgp_entry (char *s, ssize_t l, MUTTMENU * menu, int num)
{
pgp_uid_t **KeyTable = (pgp_uid_t **) menu->data;
pgp_entry_t entry;
entry.uid = KeyTable[num];
entry.num = num + 1;
- mutt_FormatString (s, l, NONULL (PgpEntryFormat), pgp_entry_fmt,
- (unsigned long) &entry, M_FORMAT_ARROWCURSOR);
+ m_strformat(s, l, COLS - SW, PgpEntryFormat, pgp_entry_fmt, &entry,
+ option(OPTARROWCURSOR) ? M_FORMAT_ARROWCURSOR : 0);
}
static int _pgp_compare_address (const void *a, const void *b)
pgp_uid_t **KeyTable;
MUTTMENU *menu;
int i, done = 0;
- char helpstr[SHORT_STRING], buf[LONG_STRING], tmpbuf[STRING];
+ char helpstr[STRING], buf[LONG_STRING], tmpbuf[STRING];
char cmd[LONG_STRING], tempfile[_POSIX_PATH_MAX];
FILE *fp, *devnull;
pid_t thepid;
helpstr[0] = 0;
mutt_make_help (buf, sizeof (buf), _("Exit "), MENU_PGP, OP_EXIT);
- strcat (helpstr, buf); /* __STRCAT_CHECKED__ */
+ m_strcat(helpstr, sizeof(helpstr), buf);
mutt_make_help (buf, sizeof (buf), _("Select "), MENU_PGP,
OP_GENERIC_SELECT_ENTRY);
- strcat (helpstr, buf); /* __STRCAT_CHECKED__ */
+ m_strcat(helpstr, sizeof(helpstr), buf);
mutt_make_help (buf, sizeof (buf), _("Check key "), MENU_PGP,
OP_VERIFY_KEY);
- strcat (helpstr, buf); /* __STRCAT_CHECKED__ */
+ m_strcat(helpstr, sizeof(helpstr), buf);
mutt_make_help (buf, sizeof (buf), _("Help"), MENU_PGP, OP_HELP);
- strcat (helpstr, buf); /* __STRCAT_CHECKED__ */
+ m_strcat(helpstr, sizeof(helpstr), buf);
menu = mutt_new_menu ();
menu->max = i;
case OP_VERIFY_KEY:
- mutt_mktemp (tempfile);
- if ((devnull = fopen ("/dev/null", "w")) == NULL) { /* __FOPEN_CHECKED__ */
+ if ((devnull = fopen("/dev/null", "w")) == NULL) {
mutt_perror (_("Can't open /dev/null"));
break;
}
- if ((fp = safe_fopen (tempfile, "w")) == NULL) {
- fclose (devnull);
+
+ fp = m_tempfile (tempfile, sizeof(tempfile), NONULL(MCore.tmpdir), NULL);
+ if (!fp) {
+ m_fclose(&devnull);
mutt_perror (_("Can't create temporary file"));
break;
mutt_perror (_("Can't create filter"));
unlink (tempfile);
- fclose (fp);
- fclose (devnull);
+ m_fclose(&fp);
+ m_fclose(&devnull);
}
mutt_wait_filter (thepid);
- fclose (fp);
- fclose (devnull);
+ m_fclose(&fp);
+ m_fclose(&devnull);
mutt_clear_error ();
snprintf (cmd, sizeof (cmd), _("Key ID: 0x%s"),
pgp_keyid (pgp_principal_key
if (option (OPTPGPCHECKTRUST) &&
(!pgp_id_is_valid (KeyTable[menu->current])
|| !pgp_id_is_strong (KeyTable[menu->current]))) {
- const char *s = "";
+ const char *q = "";
char buff[LONG_STRING];
if (KeyTable[menu->current]->flags & KEYFLAG_CANTUSE)
- s = N_("ID is expired/disabled/revoked.");
+ q = N_("ID is expired/disabled/revoked.");
else
switch (KeyTable[menu->current]->trust & 0x03) {
case 0:
- s = N_("ID has undefined validity.");
+ q = N_("ID has undefined validity.");
break;
case 1:
- s = N_("ID is not valid.");
+ q = N_("ID is not valid.");
break;
case 2:
- s = N_("ID is only marginally valid.");
+ q = N_("ID is only marginally valid.");
break;
}
snprintf (buff, sizeof (buff),
- _("%s Do you really want to use the key?"), _(s));
+ _("%s Do you really want to use the key?"), _(q));
if (mutt_yesorno (buff, M_NO) != M_YES) {
mutt_clear_error ();
short abilities, pgp_ring_t keyring)
{
pgp_key_t key;
- char resp[SHORT_STRING];
+ char resp[STRING];
struct pgp_cache *l = NULL;
mutt_clear_error ();
pgp_free_key (&key);
if (!tempf) {
- mutt_mktemp (tempfb);
+ tempfp = m_tempfile (tempfb, sizeof(tempfb), NONULL(MCore.tmpdir), NULL);
tempf = tempfb;
+ } else {
+ tempfp = safe_fopen(tempf, "a");
}
- if ((tempfp = safe_fopen (tempf, tempf == tempfb ? "w" : "a")) == NULL) {
+ if (!tempfp) {
mutt_perror (_("Can't create temporary file"));
-
return NULL;
}
- if ((devnull = fopen ("/dev/null", "w")) == NULL) { /* __FOPEN_CHECKED__ */
+ if ((devnull = fopen("/dev/null", "w")) == NULL) {
mutt_perror (_("Can't open /dev/null"));
- fclose (tempfp);
+ m_fclose(&tempfp);
if (tempf == tempfb)
unlink (tempf);
return NULL;
mutt_perror (_("Can't create filter"));
unlink (tempf);
- fclose (tempfp);
- fclose (devnull);
+ m_fclose(&tempfp);
+ m_fclose(&devnull);
return NULL;
}
mutt_wait_filter (thepid);
- fclose (tempfp);
- fclose (devnull);
+ m_fclose(&tempfp);
+ m_fclose(&devnull);
- att = mutt_new_body ();
+ att = body_new();
att->filename = m_strdup(tempf);
att->unlink = 1;
att->use_disp = 0;
return att;
}
-static LIST *pgp_add_string_to_hints (LIST * hints, const char *str)
+static string_list_t *pgp_add_string_to_hints (string_list_t * hints, const char *str)
{
char *scratch;
char *t;
pgp_key_t pgp_getkeybyaddr (address_t * a, short abilities, pgp_ring_t keyring)
{
address_t *r, *p;
- LIST *hints = NULL;
+ string_list_t *hints = NULL;
int weak = 0;
int invalid = 0;
mutt_message (_("Looking for keys matching \"%s\"..."), a->mailbox);
keys = pgp_get_candidates (keyring, hints);
- mutt_free_list (&hints);
+ string_list_wipe(&hints);
if (!keys)
return NULL;
- debug_print (5, ("looking for %s <%s>\n", a->personal, a->mailbox));
-
for (k = keys; k; k = kn) {
kn = k->next;
- debug_print (5, (" looking at key: %s\n", pgp_keyid (k)));
-
if (abilities && !(k->flags & abilities)) {
- debug_print (5, (" insufficient abilities: Has %x, want %x\n",
- k->flags, abilities));
continue;
}
this_key_has_weak = 1;
}
- address_delete (&r);
+ address_list_wipe(&r);
}
if (match && !this_key_has_strong && this_key_has_invalid)
return NULL;
}
-pgp_key_t pgp_getkeybystr (char *p, short abilities, pgp_ring_t keyring)
+pgp_key_t pgp_getkeybystr (const char *p, short abilities, pgp_ring_t keyring)
{
- LIST *hints = NULL;
+ string_list_t *hints = NULL;
pgp_key_t keys;
pgp_key_t matches = NULL;
pgp_key_t *last = &matches;
hints = pgp_add_string_to_hints (hints, p);
keys = pgp_get_candidates (keyring, hints);
- mutt_free_list (&hints);
+ string_list_wipe(&hints);
if (!keys)
return NULL;
match = 0;
for (a = k->address; a; a = a->next) {
- debug_print (5, ("matching \"%s\" against key %s, \"%s\":\n", p, pgp_keyid (k), a->addr));
if (!*p || m_strcasecmp(p, pgp_keyid (k)) == 0
|| (!m_strncasecmp(p, "0x", 2)
&& !m_strcasecmp(p + 2, pgp_keyid (k)))
|| (option (OPTPGPLONGIDS) && !m_strncasecmp(p, "0x", 2)
&& !m_strcasecmp(p + 2, k->keyid + 8))
|| m_stristr(a->addr, p)) {
- debug_print (5, ("match.\n"));
match = 1;
break;
}