summaryrefslogtreecommitdiff
path: root/imap
diff options
context:
space:
mode:
Diffstat (limited to 'imap')
-rw-r--r--imap/src/c-client/mail.c5
-rw-r--r--imap/src/c-client/mail.h2
-rw-r--r--imap/src/osdep/nt/env_nt.c9
-rw-r--r--imap/src/osdep/nt/env_nt.h1
-rw-r--r--imap/src/osdep/unix/env_unix.c23
-rw-r--r--imap/src/osdep/unix/env_unix.h1
-rw-r--r--imap/src/osdep/unix/ssl_unix.c4
7 files changed, 43 insertions, 2 deletions
diff --git a/imap/src/c-client/mail.c b/imap/src/c-client/mail.c
index f989e5d9..02519e5a 100644
--- a/imap/src/c-client/mail.c
+++ b/imap/src/c-client/mail.c
@@ -6402,3 +6402,8 @@ char *net_localhost (NETSTREAM *stream)
{
return (*stream->dtb->localhost) (stream->stream);
}
+
+void free_c_client_module_globals(void)
+{
+ env_end();
+}
diff --git a/imap/src/c-client/mail.h b/imap/src/c-client/mail.h
index f8d44033..11ebdbc9 100644
--- a/imap/src/c-client/mail.h
+++ b/imap/src/c-client/mail.h
@@ -1883,7 +1883,7 @@ char *sm_read (char *sbname,void **sdb);
void ssl_onceonlyinit (void);
char *ssl_start_tls (char *s);
void ssl_server_init (char *server);
-
+void free_c_client_module_globals(void);
/* Server I/O functions */
diff --git a/imap/src/osdep/nt/env_nt.c b/imap/src/osdep/nt/env_nt.c
index d28d30a3..50063ad6 100644
--- a/imap/src/osdep/nt/env_nt.c
+++ b/imap/src/osdep/nt/env_nt.c
@@ -769,3 +769,12 @@ void *mm_blocknotify (int reason,void *data)
}
return ret;
}
+
+void env_end(void)
+{
+ if(myUserName) fs_give((void **) &myUserName);
+ if(myLocalHost) fs_give((void **) &myLocalHost);
+ if(myHomeDir) fs_give((void **) &myHomeDir);
+ if(myNewsrc) fs_give((void **) &myNewsrc);
+ if(sysInbox) fs_give((void **) &sysInbox);
+}
diff --git a/imap/src/osdep/nt/env_nt.h b/imap/src/osdep/nt/env_nt.h
index dd52f7bc..32b54474 100644
--- a/imap/src/osdep/nt/env_nt.h
+++ b/imap/src/osdep/nt/env_nt.h
@@ -66,6 +66,7 @@ void unlockfd (int fd,char *lock);
long safe_write (int fd,char *buf,long nbytes);
void *mm_blocknotify (int reason,void *data);
long random (void);
+void env_end(void);
#if _MSC_VER < 700
#define getpid random
#endif
diff --git a/imap/src/osdep/unix/env_unix.c b/imap/src/osdep/unix/env_unix.c
index 89e50921..44aed22f 100644
--- a/imap/src/osdep/unix/env_unix.c
+++ b/imap/src/osdep/unix/env_unix.c
@@ -1854,3 +1854,26 @@ void *mm_blocknotify (int reason,void *data)
}
return ret;
}
+
+void env_end(void)
+{
+ if(myUserName) fs_give((void **)&myUserName);
+ if(myHomeDir) fs_give((void **)&myHomeDir);
+ if(ftpHome) fs_give((void **)&ftpHome);
+ if(myServerName) fs_give((void **)&myServerName);
+ if(myLocalHost) fs_give((void **)&myLocalHost);
+ if(myNewsrc) fs_give((void **)&myNewsrc);
+ if(mailsubdir) fs_give((void **)&mailsubdir);
+ if(sysInbox) fs_give((void **)&sysInbox);
+ if(newsActive) fs_give((void **)&newsActive);
+ if(newsSpool) fs_give((void **)&newsSpool);
+ if(blackBoxDir) fs_give((void **)&blackBoxDir);
+ if(blackBoxDefaultHome)
+ fs_give((void **)&blackBoxDefaultHome);
+ if(sslCApath) fs_give((void **)&sslCApath);
+ if(userFlags){
+ int i;
+ for(i = 0; i < NUSERFLAGS; i++)
+ if(userFlags[i]) fs_give((void **)&userFlags[i]);
+ }
+}
diff --git a/imap/src/osdep/unix/env_unix.h b/imap/src/osdep/unix/env_unix.h
index 087430ab..c45cb32d 100644
--- a/imap/src/osdep/unix/env_unix.h
+++ b/imap/src/osdep/unix/env_unix.h
@@ -90,3 +90,4 @@ long loginpw (struct passwd *pw,int argc,char *argv[]);
long pw_login (struct passwd *pw,char *auser,char *user,char *home,int argc,
char *argv[]);
void *mm_blocknotify (int reason,void *data);
+void env_end(void);
diff --git a/imap/src/osdep/unix/ssl_unix.c b/imap/src/osdep/unix/ssl_unix.c
index 4c4d6ef8..ea2df896 100644
--- a/imap/src/osdep/unix/ssl_unix.c
+++ b/imap/src/osdep/unix/ssl_unix.c
@@ -404,12 +404,14 @@ static char *ssl_validate_cert (X509 *cert,char *host)
"Server name does not match certificate";
/* if mismatch, see if in extensions */
if (ret && (ext = X509_get_ext_d2i (cert,NID_subject_alt_name,NIL,NIL)) &&
- (n = sk_GENERAL_NAME_num (ext)))
+ (n = sk_GENERAL_NAME_num (ext))){
/* older versions of OpenSSL use "ia5" instead of dNSName */
for (i = 0; ret && (i < n); i++)
if ((name = sk_GENERAL_NAME_value (ext,i)) &&
(name->type = GEN_DNS) && (s = name->d.ia5->data) &&
ssl_compare_hostnames (host,s)) ret = NIL;
+ sk_GENERAL_NAME_pop_free(ext, GENERAL_NAME_free);
+ }
}
else ret = "Unable to locate common name in certificate";
return ret;