2 |
#include <string.h> |
#include <string.h> |
3 |
#include <ctype.h> |
#include <ctype.h> |
4 |
#include <limits.h> |
#include <limits.h> |
|
#include <sys/types.h> |
|
5 |
#include <sys/stat.h> |
#include <sys/stat.h> |
|
#include <fcntl.h> |
|
6 |
|
|
7 |
#include "config.h" |
#include "config.h" |
8 |
#include "imapfilter.h" |
#include "imapfilter.h" |
9 |
#include "pathnames.h" |
#include "pathnames.h" |
10 |
|
|
11 |
#ifdef SSL_TLS |
#ifdef SSL_TLS |
|
#include <openssl/ssl.h> |
|
12 |
#include <openssl/x509.h> |
#include <openssl/x509.h> |
13 |
|
#include <openssl/ssl.h> |
14 |
#include <openssl/pem.h> |
#include <openssl/pem.h> |
15 |
|
#include <openssl/evp.h> |
16 |
|
|
17 |
|
|
18 |
|
extern char *home; |
19 |
extern unsigned int options; |
extern unsigned int options; |
20 |
extern unsigned int flags; |
extern unsigned int flags; |
21 |
|
|
80 |
{ |
{ |
81 |
int r; |
int r; |
82 |
FILE *fd; |
FILE *fd; |
83 |
|
char certf[PATH_MAX]; |
84 |
X509 *cert; |
X509 *cert; |
85 |
unsigned char md[EVP_MAX_MD_SIZE]; |
unsigned char md[EVP_MAX_MD_SIZE]; |
86 |
unsigned int mdlen; |
unsigned int mdlen; |
88 |
r = SSL_CERT_NONEXISTENT; |
r = SSL_CERT_NONEXISTENT; |
89 |
cert = NULL; |
cert = NULL; |
90 |
|
|
91 |
if (!exists_file(PATHNAME_CERT_FILE)) |
snprintf(certf, PATH_MAX, "%s/%s", home, PATHNAME_CERT_FILE); |
92 |
|
if (!exists_file(certf)) |
93 |
return SSL_CERT_NONEXISTENT; |
return SSL_CERT_NONEXISTENT; |
94 |
|
|
95 |
fd = fopen(PATHNAME_CERT_FILE, "r"); |
fd = fopen(certf, "r"); |
96 |
if (fd == NULL) |
if (fd == NULL) |
97 |
return ERROR_FILE_OPEN; |
return ERROR_FILE_OPEN; |
98 |
|
|
151 |
{ |
{ |
152 |
FILE *fd; |
FILE *fd; |
153 |
char c, buf[LINE_MAX]; |
char c, buf[LINE_MAX]; |
154 |
|
char certf[PATH_MAX]; |
155 |
|
|
156 |
do { |
do { |
157 |
printf("(R)eject, accept (t)emporarily or " |
printf("(R)eject, accept (t)emporarily or " |
165 |
else if (c == 't') |
else if (c == 't') |
166 |
return SSL_CERT_ACTION_ACCEPT; |
return SSL_CERT_ACTION_ACCEPT; |
167 |
|
|
168 |
create_file(PATHNAME_CERT_FILE, S_IRUSR | S_IWUSR); |
snprintf(certf, PATH_MAX, "%s/%s", home, PATHNAME_CERT_FILE); |
169 |
|
create_file(certf, S_IRUSR | S_IWUSR); |
170 |
|
|
171 |
fd = fopen(PATHNAME_CERT_FILE, "a"); |
fd = fopen(certf, "a"); |
172 |
if (fd == NULL) |
if (fd == NULL) |
173 |
return SSL_CERT_ACTION_REJECT; |
return SSL_CERT_ACTION_REJECT; |
174 |
|
|