projects
/
apps
/
madmutt.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
make address functions a lot better, and less error prone.
[apps/madmutt.git]
/
smime.c
diff --git
a/smime.c
b/smime.c
index
554f02e
..
1e173f6
100644
(file)
--- a/
smime.c
+++ b/
smime.c
@@
-16,14
+16,15
@@
#include <lib-lib/mem.h>
#include <lib-lib/str.h>
#include <lib-lib/macros.h>
#include <lib-lib/mem.h>
#include <lib-lib/str.h>
#include <lib-lib/macros.h>
+#include <lib-lib/file.h>
+
+#include <lib-mime/mime.h>
#include "mutt.h"
#include "enter.h"
#include "handler.h"
#include "mutt_curses.h"
#include "mutt_menu.h"
#include "mutt.h"
#include "enter.h"
#include "handler.h"
#include "mutt_curses.h"
#include "mutt_menu.h"
-#include "smime.h"
-#include "mime.h"
#include "copy.h"
#include "lib/debug.h"
#include "copy.h"
#include "lib/debug.h"
@@
-82,10
+83,19
@@
static char SmimeIntermediateToUse[_POSIX_PATH_MAX];
/*
/*
- * Queries and passphrase handling.
+ * Create a format string to be used with scanf.
+ * To use it, write, for instance, MUTT_FORMAT(HUGE_STRING).
+ *
+ * See K&R 2nd ed, p. 231 for an explanation.
*/
*/
+#define _MUTT_FORMAT_2(a,b) "%" a b
+#define _MUTT_FORMAT_1(a, b) _MUTT_FORMAT_2(#a, b)
+#define MUTT_FORMAT(a) _MUTT_FORMAT_1(a, "s")
+/*
+ * Queries and passphrase handling.
+ */
/* these are copies from pgp.c */
/* these are copies from pgp.c */
@@
-93,7
+103,7
@@
static char SmimeIntermediateToUse[_POSIX_PATH_MAX];
void smime_void_passphrase (void)
{
void smime_void_passphrase (void)
{
-
memset (SmimePass, 0, sizeof
(SmimePass));
+
p_clear(SmimePass, sizeof
(SmimePass));
SmimeExptime = 0;
}
SmimeExptime = 0;
}
@@
-147,7
+157,7
@@
static const char *_mutt_fmt_smime_command (char *dest,
char buf1[LONG_STRING], buf2[LONG_STRING];
struct stat sb;
char buf1[LONG_STRING], buf2[LONG_STRING];
struct stat sb;
-
strfcpy (path, NONULL (SmimeCALocation), sizeof (path
));
+
m_strcpy(path, sizeof(path), NONULL(SmimeCALocation
));
mutt_expand_path (path, sizeof (path));
mutt_quote_filename (buf1, sizeof (buf1), path);
mutt_expand_path (path, sizeof (path));
mutt_quote_filename (buf1, sizeof (buf1), path);
@@
-266,7
+276,7
@@
static pid_t smime_invoke (FILE ** smimein, FILE ** smimeout,
struct smime_command_context cctx;
char cmd[HUGE_STRING];
struct smime_command_context cctx;
char cmd[HUGE_STRING];
-
memset (&cctx, 0, sizeof (cctx)
);
+
p_clear(&cctx, 1
);
if (!format || !*format)
return (pid_t) - 1;
if (!format || !*format)
return (pid_t) - 1;
@@
-375,7
+385,7
@@
char *smime_ask_for_key (char *prompt, char *mailbox, short public)
}
fclose (index);
}
fclose (index);
-
FOREVER
{
+
for (;;)
{
*qry = 0;
if (mutt_get_field (prompt, qry, sizeof (qry), 0))
return NULL;
*qry = 0;
if (mutt_get_field (prompt, qry, sizeof (qry), 0))
return NULL;
@@
-409,8
+419,8
@@
char *smime_ask_for_key (char *prompt, char *mailbox, short public)
Table[cur].hash = hash;
Table[cur].suffix = hash_suffix;
Table[cur].hash = hash;
Table[cur].suffix = hash_suffix;
-
strncpy (Table[cur].email, fields[0], sizeof (Table[cur].email)
);
-
strncpy (Table[cur].nick, fields[2], sizeof (Table[cur].nick)
);
+
m_strcpy(Table[cur].email, sizeof(Table[cur].email), fields[0]
);
+
m_strcpy(Table[cur].nick, sizeof(Table[cur].nick), fields[2]
);
Table[cur].trust = *fields[4];
Table[cur].public = public;
Table[cur].trust = *fields[4];
Table[cur].public = public;
@@
-512,7
+522,7
@@
char *smime_get_field_from_db (char *mailbox, char *query, short public,
}
while (fgets (buf, sizeof (buf) - 1, fp) != NULL)
}
while (fgets (buf, sizeof (buf) - 1, fp) != NULL)
- if (mailbox && !(
str_ncasecmp
(mailbox, buf, addr_len))) {
+ if (mailbox && !(
m_strncasecmp
(mailbox, buf, addr_len))) {
numFields = sscanf (buf,
MUTT_FORMAT (STRING) " " MUTT_FORMAT (STRING) " "
MUTT_FORMAT (STRING) " " MUTT_FORMAT (STRING) " "
numFields = sscanf (buf,
MUTT_FORMAT (STRING) " " MUTT_FORMAT (STRING) " "
MUTT_FORMAT (STRING) " " MUTT_FORMAT (STRING) " "
@@
-552,7
+562,7
@@
char *smime_get_field_from_db (char *mailbox, char *query, short public,
continue;
}
else if (choice == M_YES) {
continue;
}
else if (choice == M_YES) {
-
strfcpy (key, fields[1], sizeof (key)
);
+
m_strcpy(key, sizeof(key), fields[1]
);
ask = 0;
break;
}
ask = 0;
break;
}
@@
-560,7
+570,7
@@
char *smime_get_field_from_db (char *mailbox, char *query, short public,
else {
if (public)
key_trust_level = *fields[4];
else {
if (public)
key_trust_level = *fields[4];
-
strfcpy (key, fields[1], sizeof (key)
);
+
m_strcpy(key, sizeof(key), fields[1]
);
}
found = 1;
}
}
found = 1;
}
@@
-574,15
+584,15
@@
char *smime_get_field_from_db (char *mailbox, char *query, short public,
/* query = label: return certificate. */
if (numFields >= 3 &&
/* query = label: return certificate. */
if (numFields >= 3 &&
- !(
str_ncasecmp
(query, fields[2], query_len))) {
+ !(
m_strncasecmp
(query, fields[2], query_len))) {
ask = 0;
ask = 0;
-
strfcpy (key, fields[1], sizeof (key)
);
+
m_strcpy(key, sizeof(key), fields[1]
);
}
/* query = certificate: return intermediate certificate. */
else if (numFields >= 4 &&
}
/* query = certificate: return intermediate certificate. */
else if (numFields >= 4 &&
- !(
str_ncasecmp
(query, fields[1], query_len))) {
+ !(
m_strncasecmp
(query, fields[1], query_len))) {
ask = 0;
ask = 0;
-
strfcpy (key, fields[3], sizeof (key)
);
+
m_strcpy(key, sizeof(key), fields[3]
);
}
}
}
}
@@
-649,7
+659,7
@@
void _smime_getkeys (char *mailbox)
if (k) {
/* the key used last time. */
if (*SmimeKeyToUse &&
if (k) {
/* the key used last time. */
if (*SmimeKeyToUse &&
- !
str_casecmp
(k, SmimeKeyToUse + m_strlen(SmimeKeys) + 1)) {
+ !
m_strcasecmp
(k, SmimeKeyToUse + m_strlen(SmimeKeys) + 1)) {
p_delete(&k);
return;
}
p_delete(&k);
return;
}
@@
-662,7
+672,7
@@
void _smime_getkeys (char *mailbox)
snprintf (SmimeCertToUse, sizeof (SmimeCertToUse), "%s/%s",
NONULL (SmimeCertificates), k);
snprintf (SmimeCertToUse, sizeof (SmimeCertToUse), "%s/%s",
NONULL (SmimeCertificates), k);
- if (
str_casecmp
(k, SmimeDefaultKey))
+ if (
m_strcasecmp
(k, SmimeDefaultKey))
smime_void_passphrase ();
p_delete(&k);
smime_void_passphrase ();
p_delete(&k);
@@
-670,7
+680,7
@@
void _smime_getkeys (char *mailbox)
}
if (*SmimeKeyToUse) {
}
if (*SmimeKeyToUse) {
- if (!
str_casecmp
(SmimeDefaultKey,
+ if (!
m_strcasecmp
(SmimeDefaultKey,
SmimeKeyToUse + m_strlen(SmimeKeys) + 1))
return;
SmimeKeyToUse + m_strlen(SmimeKeys) + 1))
return;
@@
-686,7
+696,7
@@
void _smime_getkeys (char *mailbox)
void smime_getkeys (ENVELOPE * env)
{
void smime_getkeys (ENVELOPE * env)
{
-
ADDRESS
*t;
+
address_t
*t;
int found = 0;
if (option (OPTSDEFAULTDECRYPTKEY) && SmimeDefaultKey && *SmimeDefaultKey) {
int found = 0;
if (option (OPTSDEFAULTDECRYPTKEY) && SmimeDefaultKey && *SmimeDefaultKey) {
@@
-711,7
+721,7
@@
void smime_getkeys (ENVELOPE * env)
}
if (!found && (t = mutt_default_from ())) {
_smime_getkeys (t->mailbox);
}
if (!found && (t = mutt_default_from ())) {
_smime_getkeys (t->mailbox);
-
rfc822_free_address
(&t);
+
address_delete
(&t);
}
}
}
}
@@
-719,14
+729,14
@@
void smime_getkeys (ENVELOPE * env)
* It returns NULL if any of the keys can not be found.
*/
* It returns NULL if any of the keys can not be found.
*/
-char *smime_findKeys (
ADDRESS * to, ADDRESS * cc, ADDRESS
* bcc)
+char *smime_findKeys (
address_t * to, address_t * cc, address_t
* bcc)
{
char *keyID, *keylist = NULL;
size_t keylist_size = 0;
size_t keylist_used = 0;
{
char *keyID, *keylist = NULL;
size_t keylist_size = 0;
size_t keylist_used = 0;
-
ADDRESS
*tmp = NULL, *addr = NULL;
-
ADDRESS
**last = &tmp;
-
ADDRESS
*p, *q;
+
address_t
*tmp = NULL, *addr = NULL;
+
address_t
**last = &tmp;
+
address_t
*p, *q;
int i;
const char *fqdn = mutt_fqdn (1);
int i;
const char *fqdn = mutt_fqdn (1);
@@
-746,7
+756,7
@@
char *smime_findKeys (ADDRESS * to, ADDRESS * cc, ADDRESS * bcc)
abort ();
}
abort ();
}
- *last =
rfc822_cpy_adr
(p);
+ *last =
address_list_dup
(p);
while (*last)
last = &((*last)->next);
}
while (*last)
last = &((*last)->next);
}
@@
-768,8
+778,8
@@
char *smime_findKeys (ADDRESS * to, ADDRESS * cc, ADDRESS * bcc)
if (!keyID) {
mutt_message (_("No (valid) certificate found for %s."), q->mailbox);
p_delete(&keylist);
if (!keyID) {
mutt_message (_("No (valid) certificate found for %s."), q->mailbox);
p_delete(&keylist);
-
rfc822_free_address
(&tmp);
-
rfc822_free_address
(&addr);
+
address_delete
(&tmp);
+
address_delete
(&addr);
return NULL;
}
return NULL;
}
@@
-778,10
+788,10
@@
char *smime_findKeys (ADDRESS * to, ADDRESS * cc, ADDRESS * bcc)
sprintf (keylist + keylist_used, "%s\n", keyID); /* __SPRINTF_CHECKED__ */
keylist_used = m_strlen(keylist);
sprintf (keylist + keylist_used, "%s\n", keyID); /* __SPRINTF_CHECKED__ */
keylist_used = m_strlen(keylist);
-
rfc822_free_address
(&addr);
+
address_delete
(&addr);
}
}
-
rfc822_free_address
(&tmp);
+
address_delete
(&tmp);
return (keylist);
}
return (keylist);
}
@@
-834,7
+844,7
@@
static int smime_handle_cert_email (char *certificate, char *mailbox,
while ((fgets (email, sizeof (email), fpout))) {
*(email + m_strlen(email) - 1) = '\0';
while ((fgets (email, sizeof (email), fpout))) {
*(email + m_strlen(email) - 1) = '\0';
- if (
str_ncasecmp
(email, mailbox, m_strlen(mailbox)) == 0)
+ if (
m_strncasecmp
(email, mailbox, m_strlen(mailbox)) == 0)
ret = 1;
ret = ret < 0 ? 0 : ret;
ret = 1;
ret = ret < 0 ? 0 : ret;
@@
-1564,7
+1574,7
@@
int smime_verify_one (BODY * sigbdy, STATE * s, const char *tempfile)
rewind (smimeerr);
line = mutt_read_line (line, &linelen, smimeerr, &lineno);
rewind (smimeerr);
line = mutt_read_line (line, &linelen, smimeerr, &lineno);
- if (linelen && !
str_casecmp
(line, "verification successful"))
+ if (linelen && !
m_strcasecmp
(line, "verification successful"))
badsig = 0;
p_delete(&line);
badsig = 0;
p_delete(&line);
@@
-1778,7
+1788,7
@@
static BODY *smime_handle_entity (BODY * m, STATE * s, FILE * outFile)
rewind (smimeerr);
line = mutt_read_line (line, &linelen, smimeerr, &lineno);
rewind (smimeerr);
line = mutt_read_line (line, &linelen, smimeerr, &lineno);
- if (linelen && !
str_casecmp
(line, "verification successful"))
+ if (linelen && !
m_strcasecmp
(line, "verification successful"))
m->goodsig = 1;
p_delete(&line);
}
m->goodsig = 1;
p_delete(&line);
}
@@
-1813,7
+1823,7
@@
int smime_decrypt_mime (FILE * fpin, FILE ** fpout, BODY * b, BODY ** cur)
if (b->parts)
return -1;
if (b->parts)
return -1;
-
memset (&s, 0, sizeof (s)
);
+
p_clear(&s, 1
);
s.fpin = fpin;
fseeko (s.fpin, b->offset, 0);
s.fpin = fpin;
fseeko (s.fpin, b->offset, 0);