+2002-01-07 [christoph] 0.6.6claws43
+
+ * src/mh.c
+ search for free message number, do not only rely
+ on last_num
+ * src/send.c
+ fix smtp auth and use extra account information
+ if available, if not use pop3 data instead
+ (closes bug #500341)
+ * src/ssl.[ch]
+ match coding style
+
2002-01-06 [alfons] 0.6.6claws42
* src/mainwindow.c
MICRO_VERSION=6
INTERFACE_AGE=0
BINARY_AGE=0
-EXTRA_VERSION=claws42
+EXTRA_VERSION=claws43
VERSION=$MAJOR_VERSION.$MINOR_VERSION.$MICRO_VERSION$EXTRA_VERSION
dnl
return file;
}
+gchar *mh_get_newmsg_filename(FolderItem *dest)
+{
+ gchar *destfile;
+ gchar *destpath;
+ gboolean found = FALSE;
+
+ destpath = folder_item_get_path(dest);
+ g_return_val_if_fail(destpath != NULL, NULL);
+ if (!is_dir_exist(destpath))
+ make_dir_hier(destpath);
+
+ do {
+ destfile = g_strdup_printf("%s%c%d", destpath, G_DIR_SEPARATOR,
+ dest->last_num + 1);
+ if(is_file_exist(destfile)) {
+ dest->last_num++;
+ g_free(destfile);
+ } else {
+ found = TRUE;
+ }
+ } while(!found);
+ g_free(destpath);
+
+ return destfile;
+}
+
gint mh_add_msg(Folder *folder, FolderItem *dest, const gchar *file,
gboolean remove_source)
{
- gchar *destpath;
gchar *destfile;
g_return_val_if_fail(dest != NULL, -1);
if (dest->last_num < 0) return -1;
}
- destpath = folder_item_get_path(dest);
- g_return_val_if_fail(destpath != NULL, -1);
- if (!is_dir_exist(destpath))
- make_dir_hier(destpath);
-
- destfile = g_strdup_printf("%s%c%d", destpath, G_DIR_SEPARATOR,
- dest->last_num + 1);
+ destfile = mh_get_newmsg_filename(dest);
+ if(!destfile) return -1;
if (link(file, destfile) < 0) {
if (copy_file(file, destfile) < 0) {
msginfo->folder->path, G_DIR_SEPARATOR,
msginfo->msgnum, dest->path);
srcfile = procmsg_get_message_file_path(msginfo);
- destfile = g_strdup_printf("%s%c%d", destdir, G_DIR_SEPARATOR,
- dest->last_num + 1);
+
+ destfile = mh_get_newmsg_filename(dest);
+ if(!destfile) return -1;
+
g_free(destdir);
if (move_file(srcfile, destfile) < 0) {
msginfo->msgnum, dest->path);
srcfile = procmsg_get_message_file_path(msginfo);
- destfile = g_strdup_printf("%s%c%d", destdir, G_DIR_SEPARATOR,
- dest->last_num + 1);
+ destfile = mh_get_newmsg_filename(dest);
+ if(!destfile) return -1;
if (move_file(srcfile, destfile) < 0) {
g_free(srcfile);
msginfo->folder->path, G_DIR_SEPARATOR,
msginfo->msgnum, dest->path);
srcfile = procmsg_get_message_file_path(msginfo);
- destfile = g_strdup_printf("%s%c%d", destdir, G_DIR_SEPARATOR,
- dest->last_num + 1);
- g_free(destdir);
-
- dest->op_count--;
-
- if (is_file_exist(destfile)) {
- g_warning(_("%s already exists."), destfile);
+ destfile = mh_get_newmsg_filename(dest);
+ if(!destfile) {
g_free(srcfile);
- g_free(destfile);
if (fp) fclose(fp);
return -1;
}
+
+ g_free(destdir);
+
+ dest->op_count--;
if (copy_file(srcfile, destfile) < 0) {
FILE_OP_ERROR(srcfile, "copy");
msginfo->msgnum, dest->path);
srcfile = procmsg_get_message_file_path(msginfo);
- destfile = g_strdup_printf("%s%c%d", destdir, G_DIR_SEPARATOR,
- dest->last_num + 1);
-
- if (is_file_exist(destfile)) {
- g_warning(_("%s already exists."), destfile);
+ destfile = mh_get_newmsg_filename(dest);
+ if(!destfile) {
g_free(srcfile);
- g_free(destfile);
break;
}
gchar buf[BUFFSIZE];
gushort port;
gchar *domain;
+ gchar *user = NULL;
gchar *pass = NULL;
GSList *cur;
gint size;
domain = ac_prefs->set_domain ? ac_prefs->domain : NULL;
if (ac_prefs->use_smtp_auth) {
- if (ac_prefs->passwd)
- pass = ac_prefs->passwd;
- else if (ac_prefs->tmp_pass)
- pass = ac_prefs->tmp_pass;
- else {
- pass = send_query_password(ac_prefs->smtp_server,
- ac_prefs->userid);
- if (!pass) pass = g_strdup("");
- ac_prefs->tmp_pass = pass;
+ if (ac_prefs->smtp_userid) {
+ user = ac_prefs->smtp_userid;
+ if(ac_prefs->smtp_passwd)
+ pass = ac_prefs->smtp_passwd;
+ else if (ac_prefs->tmp_pass)
+ pass = ac_prefs->tmp_pass;
+ else {
+ pass = send_query_password(ac_prefs->smtp_server,
+ ac_prefs->smtp_userid);
+ if (!pass) pass = g_strdup("");
+ ac_prefs->tmp_pass = pass;
+ }
+ } else {
+ user = ac_prefs->userid;
+ if (ac_prefs->passwd) {
+ pass = ac_prefs->passwd;
+ } else if (ac_prefs->tmp_pass)
+ pass = ac_prefs->tmp_pass;
+ else {
+ pass = send_query_password(ac_prefs->smtp_server,
+ ac_prefs->userid);
+ if (!pass) pass = g_strdup("");
+ ac_prefs->tmp_pass = pass;
+ }
}
}
GTK_EVENTS_FLUSH();
SEND_EXIT_IF_NOTOK
- (smtp_from(smtp_sock, ac_prefs->address, ac_prefs->userid,
+ (smtp_from(smtp_sock, ac_prefs->address, user,
pass, ac_prefs->use_smtp_auth),
"sending MAIL FROM");
void ssl_init(void)
{
- SSL_library_init();
- SSL_load_error_strings();
-
- ssl_ctx_SSLv23 = SSL_CTX_new(SSLv23_client_method());
- if (ssl_ctx_SSLv23 == NULL) {
- debug_print(_("SSLv23 not available\n"));
- } else {
- debug_print(_("SSLv23 available\n"));
- }
-
- ssl_ctx_TLSv1 = SSL_CTX_new(TLSv1_client_method());
- if (ssl_ctx_TLSv1 == NULL) {
- debug_print(_("TLSv1 not available\n"));
- } else {
- debug_print(_("TLSv1 available\n"));
- }
+ SSL_library_init();
+ SSL_load_error_strings();
+
+ ssl_ctx_SSLv23 = SSL_CTX_new(SSLv23_client_method());
+ if (ssl_ctx_SSLv23 == NULL) {
+ debug_print(_("SSLv23 not available\n"));
+ } else {
+ debug_print(_("SSLv23 available\n"));
+ }
+
+ ssl_ctx_TLSv1 = SSL_CTX_new(TLSv1_client_method());
+ if (ssl_ctx_TLSv1 == NULL) {
+ debug_print(_("TLSv1 not available\n"));
+ } else {
+ debug_print(_("TLSv1 available\n"));
+ }
}
void ssl_done(void)
{
- if (ssl_ctx_SSLv23) {
- SSL_CTX_free(ssl_ctx_SSLv23);
- }
+ if (ssl_ctx_SSLv23) {
+ SSL_CTX_free(ssl_ctx_SSLv23);
+ }
- if (ssl_ctx_TLSv1) {
- SSL_CTX_free(ssl_ctx_TLSv1);
- }
+ if (ssl_ctx_TLSv1) {
+ SSL_CTX_free(ssl_ctx_TLSv1);
+ }
}
gboolean ssl_init_socket(SockInfo *sockinfo)
{
- return ssl_init_socket_with_method(sockinfo, SSL_METHOD_SSLv23);
+ return ssl_init_socket_with_method(sockinfo, SSL_METHOD_SSLv23);
}
gboolean ssl_init_socket_with_method(SockInfo *sockinfo, SSLMethod method)
{
- X509 *server_cert;
- gint ret;
+ X509 *server_cert;
+ gint ret;
+
+ switch (method) {
+ case SSL_METHOD_SSLv23:
+ if (!ssl_ctx_SSLv23) {
+ log_warning(_("SSL method not available\n"));
+ return FALSE;
+ }
+ sockinfo->ssl = SSL_new(ssl_ctx_SSLv23);
+ break;
+ case SSL_METHOD_TLSv1:
+ if (!ssl_ctx_TLSv1) {
+ log_warning(_("SSL method not available\n"));
+ return FALSE;
+ }
+ sockinfo->ssl = SSL_new(ssl_ctx_TLSv1);
+ break;
+ default:
+ log_warning(_("Unknown SSL method *PROGRAM BUG*\n"));
+ return FALSE;
+ break;
+ }
- switch (method) {
- case SSL_METHOD_SSLv23:
- if (!ssl_ctx_SSLv23) {
- log_warning(_("SSL method not available\n"));
- return FALSE;
- }
- sockinfo->ssl = SSL_new(ssl_ctx_SSLv23);
- break;
- case SSL_METHOD_TLSv1:
- if (!ssl_ctx_TLSv1) {
- log_warning(_("SSL method not available\n"));
+ if (sockinfo->ssl == NULL) {
+ log_warning(_("Error creating ssl context\n"));
return FALSE;
- }
- sockinfo->ssl = SSL_new(ssl_ctx_TLSv1);
- break;
- default:
- log_warning(_("Unknown SSL method *PROGRAM BUG*\n"));
- return FALSE;
- break;
- }
+ }
- if (sockinfo->ssl == NULL) {
- log_warning(_("Error creating ssl context\n"));
- return FALSE;
- }
+ SSL_set_fd(sockinfo->ssl, sockinfo->sock);
+ if ((ret = SSL_connect(sockinfo->ssl)) == -1) {
+ log_warning(_("SSL connect failed (%s)\n"),
+ ERR_error_string(ERR_get_error(), NULL));
+ return FALSE;
+ }
- SSL_set_fd(sockinfo->ssl, sockinfo->sock);
- if ((ret = SSL_connect(sockinfo->ssl)) == -1) {
- log_warning(_("SSL connect failed (%s)\n"),
- ERR_error_string(ERR_get_error(), NULL));
- return FALSE;
- }
+ /* Get the cipher */
+ log_print(_("SSL connection using %s\n"), SSL_get_cipher(sockinfo->ssl));
- /* Get the cipher */
+ /* Get server's certificate (note: beware of dynamic allocation) */
- log_print(_("SSL connection using %s\n"), SSL_get_cipher(sockinfo->ssl));
+ if ((server_cert = SSL_get_peer_certificate(sockinfo->ssl)) != NULL) {
+ gchar *str;
- /* Get server's certificate (note: beware of dynamic allocation) */
+ log_print(_("Server certificate:\n"));
- if ((server_cert = SSL_get_peer_certificate(sockinfo->ssl)) != NULL) {
- gchar *str;
+ if ((str = X509_NAME_oneline(X509_get_subject_name(server_cert), 0, 0)) != NULL) {
+ log_print(_(" Subject: %s\n"), str);
+ free(str);
+ }
- log_print(_("Server certificate:\n"));
+ if ((str = X509_NAME_oneline(X509_get_issuer_name(server_cert), 0, 0)) != NULL) {
+ log_print(_(" Issuer: %s\n"), str);
+ free(str);
+ }
- if ((str = X509_NAME_oneline(X509_get_subject_name(server_cert), 0, 0)) != NULL) {
- log_print(_(" Subject: %s\n"), str);
- free(str);
+ X509_free(server_cert);
}
- if ((str = X509_NAME_oneline(X509_get_issuer_name(server_cert), 0, 0)) != NULL) {
- log_print(_(" Issuer: %s\n"), str);
- free(str);
- }
-
- X509_free(server_cert);
- }
-
- return TRUE;
+ return TRUE;
}
void ssl_done_socket(SockInfo *sockinfo)
{
- if (sockinfo->ssl) {
- SSL_free(sockinfo->ssl);
- }
+ if (sockinfo->ssl) {
+ SSL_free(sockinfo->ssl);
+ }
}
#endif /* USE_SSL */
#include "socket.h"
typedef enum {
- SSL_METHOD_SSLv23,
- SSL_METHOD_TLSv1
+ SSL_METHOD_SSLv23,
+ SSL_METHOD_TLSv1
} SSLMethod;
void ssl_init(void);