#include "autofaces.h"
#include "spell_entry.h"
#include "headers.h"
+#ifdef USE_LDAP
+#include "password.h"
+#include "ldapserver.h"
+#endif
enum
{
/* ask user for confirmation if the file is large */
if (prefs_common.warn_large_insert_size < 0 ||
- size > (prefs_common.warn_large_insert_size * 1024)) {
+ size > ((goffset) prefs_common.warn_large_insert_size * 1024)) {
AlertValue aval;
gchar *msg;
AttachInfo *ainfo;
GtkTreeView *tree_view = GTK_TREE_VIEW(compose->attach_clist);
MimeInfo *mimepart;
+#ifdef G_OS_WIN32
+ GFile *f;
+ GFileInfo *fi;
+ GError *error = NULL;
+#else
GStatBuf statbuf;
+#endif
+ goffset size;
gchar *type, *subtype;
GtkTreeModel *model;
GtkTreeIter iter;
}
continue;
}
+#ifdef G_OS_WIN32
+ f = g_file_new_for_path(ainfo->file);
+ fi = g_file_query_info(f, "standard::size",
+ G_FILE_QUERY_INFO_NONE, NULL, &error);
+ if (error != NULL) {
+ g_warning(error->message);
+ g_error_free(error);
+ g_object_unref(f);
+ return -1;
+ }
+ size = g_file_info_get_size(fi);
+ g_object_unref(fi);
+ g_object_unref(f);
+#else
if (g_stat(ainfo->file, &statbuf) < 0)
return -1;
+ size = statbuf.st_size;
+#endif
mimepart = procmime_mimeinfo_new();
mimepart->content = MIMECONTENT_FILE;
mimepart->data.filename = g_strdup(ainfo->file);
mimepart->tmp = FALSE; /* or we destroy our attachment */
mimepart->offset = 0;
- mimepart->length = statbuf.st_size;
+ mimepart->length = size;
type = g_strdup(ainfo->content_type);
g_slist_foreach(extra_headers, (GFunc)compose_add_extra_header, (gpointer)model);
}
+#ifdef USE_LDAP
+static void _ldap_srv_func(gpointer data, gpointer user_data)
+{
+ LdapServer *server = (LdapServer *)data;
+ gboolean *enable = (gboolean *)user_data;
+
+ debug_print("%s server '%s'\n", (*enable == TRUE ? "enabling" : "disabling"), server->control->hostName);
+ server->searchFlag = *enable;
+}
+#endif
+
static void compose_create_header_entry(Compose *compose)
{
gchar *headers[] = {"To:", "Cc:", "Bcc:", "Newsgroups:", "Reply-To:", "Followup-To:", NULL};
g_signal_connect(G_OBJECT(entry), "populate-popup",
G_CALLBACK(compose_entry_popup_extend),
NULL);
-
+
+#ifdef USE_LDAP
+#ifndef PASSWORD_CRYPTO_OLD
+ GSList *pwd_servers = addrindex_get_password_protected_ldap_servers();
+ if (pwd_servers != NULL && master_passphrase() == NULL) {
+ gboolean enable = FALSE;
+ debug_print("Master passphrase not available, disabling password-protected LDAP servers for this compose window.\n");
+ /* Temporarily disable password-protected LDAP servers,
+ * because user did not provide a master passphrase.
+ * We can safely enable searchFlag on all servers in this list
+ * later, since addrindex_get_password_protected_ldap_servers()
+ * includes servers which have it enabled initially. */
+ g_slist_foreach(pwd_servers, _ldap_srv_func, &enable);
+ compose->passworded_ldap_servers = pwd_servers;
+ }
+#endif /* PASSWORD_CRYPTO_OLD */
+#endif /* USE_LDAP */
+
address_completion_register_entry(GTK_ENTRY(entry), TRUE);
headerentry->compose = compose;
compose_list = g_list_remove(compose_list, compose);
+#ifdef USE_LDAP
+ gboolean enable = TRUE;
+ g_slist_foreach(compose->passworded_ldap_servers,
+ _ldap_srv_func, &enable);
+ g_slist_free(compose->passworded_ldap_servers);
+#endif
+
if (compose->updating) {
debug_print("danger, not destroying anything now\n");
compose->deferred_destroy = TRUE;
compose_close(compose);
return TRUE;
} else {
+#ifdef G_OS_WIN32
+ GFile *f;
+ GFileInfo *fi;
+ GTimeVal tv;
+ GError *error;
+#else
GStatBuf s;
+#endif
gchar *path;
+ goffset size, mtime;
path = folder_item_fetch_msg(draft, msgnum);
if (path == NULL) {
debug_print("can't fetch %s:%d\n", draft->path, msgnum);
goto unlock;
}
+#ifdef G_OS_WIN32
+ f = g_file_new_for_path(path);
+ fi = g_file_query_info(f, "standard::size,time::modified",
+ G_FILE_QUERY_INFO_NONE, NULL, &error);
+ if (error != NULL) {
+ debug_print("couldn't query file info for '%s': %s\n",
+ path, error->message);
+ g_error_free(error);
+ g_free(path);
+ g_object_unref(f);
+ goto unlock;
+ }
+ size = g_file_info_get_size(fi);
+ g_file_info_get_modification_time(fi, &tv);
+ mtime = tv.tv_sec;
+ g_object_unref(fi);
+ g_object_unref(f);
+ g_free(path);
+#else
if (g_stat(path, &s) < 0) {
FILE_OP_ERROR(path, "stat");
g_free(path);
goto unlock;
}
+ size = s.st_size;
+ mtime = s.st_mtime;
+#endif
g_free(path);
procmsg_msginfo_free(&(compose->targetinfo));
compose->targetinfo = procmsg_msginfo_new();
compose->targetinfo->msgnum = msgnum;
- compose->targetinfo->size = (goffset)s.st_size;
- compose->targetinfo->mtime = s.st_mtime;
+ compose->targetinfo->size = size;
+ compose->targetinfo->mtime = mtime;
compose->targetinfo->folder = draft;
if (target_locked)
procmsg_msginfo_set_flags(compose->targetinfo, MSG_LOCKED, 0);