evolution-data-server r9230 - in trunk: camel servers/exchange servers/exchange/lib servers/exchange/storage
- From: mcrha svn gnome org
- To: svn-commits-list gnome org
- Subject: evolution-data-server r9230 - in trunk: camel servers/exchange servers/exchange/lib servers/exchange/storage
- Date: Wed, 30 Jul 2008 10:33:24 +0000 (UTC)
Author: mcrha
Date: Wed Jul 30 10:33:24 2008
New Revision: 9230
URL: http://svn.gnome.org/viewvc/evolution-data-server?rev=9230&view=rev
Log:
2008-07-30 Milan Crha <mcrha redhat com>
** Part of fix for bug #500389
* camel/camel-provider.h: (enum CamelProviderConfType): New type 'OPTIONS'.
* servers/exchange/lib/actest.c: (test_main):
* servers/exchange/lib/test-utils.c: (test_get_gc):
* servers/exchange/lib/e2k-validate.h: (enum E2kAutoconfigGalAuthPref),
(struct ExchangeParams): New enum to setup GAL authentication method.
* servers/exchange/storage/exchange-account.c: (struct _ExchangeAccountPrivate),
(exchange_account_connect), (exchange_account_new):
* servers/exchange/lib/e2k-autoconfig.c: (e2k_autoconfig_new),
(e2k_autoconfig_set_owa_uri), (e2k_autoconfig_set_gc_server),
(e2k_autoconfig_get_global_catalog), (set_account_uri_string):
* servers/exchange/lib/e2k-autoconfig.h: (struct E2kAutoconfig),
(e2k_autoconfig_set_gc_server):
* servers/exchange/lib/e2k-global-catalog.h: (e2k_global_catalog_new):
* servers/exchange/lib/e2k-global-catalog.c: (struct _E2kGlobalCatalogPrivate),
(connect_ldap), (e2k_global_catalog_new):
New ability to set different authentication type to GAL and OWA.
* servers/exchange/lib/e2k-context.c: (e2k_soup_message_new_full):
Do not crash on invalid uri.
Modified:
trunk/camel/ChangeLog
trunk/camel/camel-provider.h
trunk/servers/exchange/ChangeLog
trunk/servers/exchange/lib/actest.c
trunk/servers/exchange/lib/e2k-autoconfig.c
trunk/servers/exchange/lib/e2k-autoconfig.h
trunk/servers/exchange/lib/e2k-context.c
trunk/servers/exchange/lib/e2k-global-catalog.c
trunk/servers/exchange/lib/e2k-global-catalog.h
trunk/servers/exchange/lib/e2k-validate.h
trunk/servers/exchange/lib/test-utils.c
trunk/servers/exchange/storage/exchange-account.c
Modified: trunk/camel/camel-provider.h
==============================================================================
--- trunk/camel/camel-provider.h (original)
+++ trunk/camel/camel-provider.h Wed Jul 30 10:33:24 2008
@@ -129,7 +129,8 @@
CAMEL_PROVIDER_CONF_CHECKSPIN,
CAMEL_PROVIDER_CONF_ENTRY,
CAMEL_PROVIDER_CONF_LABEL,
- CAMEL_PROVIDER_CONF_HIDDEN
+ CAMEL_PROVIDER_CONF_HIDDEN,
+ CAMEL_PROVIDER_CONF_OPTIONS
} CamelProviderConfType;
typedef struct {
Modified: trunk/servers/exchange/lib/actest.c
==============================================================================
--- trunk/servers/exchange/lib/actest.c (original)
+++ trunk/servers/exchange/lib/actest.c Wed Jul 30 10:33:24 2008
@@ -94,7 +94,7 @@
printf ("\n");
if (gc_server)
- e2k_autoconfig_set_gc_server (ac, gc_server, -1);
+ e2k_autoconfig_set_gc_server (ac, gc_server, -1, E2K_AUTOCONFIG_USE_GAL_DEFAULT);
result = e2k_autoconfig_check_exchange (ac, &op);
if (result != E2K_AUTOCONFIG_OK) {
Modified: trunk/servers/exchange/lib/e2k-autoconfig.c
==============================================================================
--- trunk/servers/exchange/lib/e2k-autoconfig.c (original)
+++ trunk/servers/exchange/lib/e2k-autoconfig.c Wed Jul 30 10:33:24 2008
@@ -106,7 +106,10 @@
ac->auth_pref = auth_pref;
e2k_autoconfig_set_owa_uri (ac, owa_uri);
- e2k_autoconfig_set_gc_server (ac, NULL, -1);
+ /* use same auth for gal as for the server */
+ e2k_autoconfig_set_gc_server (ac, NULL, -1, ac->auth_pref == E2K_AUTOCONFIG_USE_BASIC ? E2K_AUTOCONFIG_USE_GAL_BASIC :
+ ac->auth_pref == E2K_AUTOCONFIG_USE_NTLM ? E2K_AUTOCONFIG_USE_GAL_NTLM :
+ E2K_AUTOCONFIG_USE_GAL_DEFAULT);
e2k_autoconfig_set_username (ac, username);
e2k_autoconfig_set_password (ac, password);
@@ -209,7 +212,7 @@
{
reset_owa_derived (ac);
if (ac->gc_server_autodetected)
- e2k_autoconfig_set_gc_server (ac, NULL, -1);
+ e2k_autoconfig_set_gc_server (ac, NULL, -1, ac->gal_auth);
g_free (ac->owa_uri);
if (owa_uri) {
@@ -226,6 +229,7 @@
* @ac: an autoconfig context
* @gc_server: the new GC server, or %NULL
* @gal_limit: GAL search size limit, or -1 for no limit
+ * @gal_auth: Preferred authentication method for gal
*
* Sets @ac's #gc_server field to @gc_server (or the default if
* @gc_server is %NULL) and the #gal_limit field to @gal_limit, and
@@ -234,7 +238,7 @@
**/
void
e2k_autoconfig_set_gc_server (E2kAutoconfig *ac, const char *gc_server,
- int gal_limit)
+ int gal_limit, E2kAutoconfigGalAuthPref gal_auth)
{
const char *default_gal_limit;
@@ -253,6 +257,7 @@
gal_limit = atoi (default_gal_limit);
}
ac->gal_limit = gal_limit;
+ ac->gal_auth = gal_auth;
}
/**
@@ -899,7 +904,7 @@
return e2k_global_catalog_new (ac->gc_server, ac->gal_limit,
ac->username, ac->nt_domain,
- ac->password);
+ ac->password, ac->gal_auth);
}
/*
@@ -1000,6 +1005,18 @@
e2k_uri_append_encoded (uri, ac->gc_server, FALSE, ";?");
if (ac->gal_limit != -1)
g_string_append_printf (uri, ";ad_limit=%d", ac->gal_limit);
+ if (ac->gal_auth != E2K_AUTOCONFIG_USE_GAL_DEFAULT) {
+ const char *value = NULL;
+
+ switch (ac->gal_auth) {
+ case E2K_AUTOCONFIG_USE_GAL_BASIC: value = "basic"; break;
+ case E2K_AUTOCONFIG_USE_GAL_NTLM: value = "ntlm"; break;
+ case E2K_AUTOCONFIG_USE_GAL_DEFAULT: /* should not get here */ break;
+ }
+
+ if (value)
+ g_string_append_printf (uri, ";ad_auth=%s", value);
+ }
path = g_strdup (home_uri->path + 1);
mailbox = strrchr (path, '/');
Modified: trunk/servers/exchange/lib/e2k-autoconfig.h
==============================================================================
--- trunk/servers/exchange/lib/e2k-autoconfig.h (original)
+++ trunk/servers/exchange/lib/e2k-autoconfig.h Wed Jul 30 10:33:24 2008
@@ -32,6 +32,7 @@
char *owa_uri, *gc_server;
char *username, *password;
int gal_limit;
+ E2kAutoconfigGalAuthPref gal_auth;
/* Output data */
E2kExchangeVersion version;
@@ -59,7 +60,8 @@
const char *owa_uri);
void e2k_autoconfig_set_gc_server (E2kAutoconfig *ac,
const char *gc_server,
- int gal_limit);
+ int gal_limit,
+ E2kAutoconfigGalAuthPref gal_auth);
void e2k_autoconfig_set_username (E2kAutoconfig *ac,
const char *username);
void e2k_autoconfig_set_password (E2kAutoconfig *ac,
Modified: trunk/servers/exchange/lib/e2k-context.c
==============================================================================
--- trunk/servers/exchange/lib/e2k-context.c (original)
+++ trunk/servers/exchange/lib/e2k-context.c Wed Jul 30 10:33:24 2008
@@ -830,6 +830,7 @@
SoupMessage *msg;
msg = e2k_soup_message_new (ctx, uri, method);
+ g_return_val_if_fail (msg != NULL, NULL);
soup_message_set_request (msg, content_type, use, body, length);
return msg;
Modified: trunk/servers/exchange/lib/e2k-global-catalog.c
==============================================================================
--- trunk/servers/exchange/lib/e2k-global-catalog.c (original)
+++ trunk/servers/exchange/lib/e2k-global-catalog.c Wed Jul 30 10:33:24 2008
@@ -49,6 +49,7 @@
GHashTable *entry_cache, *server_cache;
char *server, *user, *nt_domain, *password;
+ E2kAutoconfigGalAuthPref auth;
};
#define PARENT_TYPE G_TYPE_OBJECT
@@ -314,12 +315,25 @@
/* authenticate */
#ifdef HAVE_LDAP_NTLM_BIND
- if (ntlm_bind (gc, op, ldap) == LDAP_SUCCESS) {
- E2K_GC_DEBUG_MSG(("GC: connected via NTLM\n\n"));
- return LDAP_SUCCESS;
+ printf ("can NTLM bind\n");
+ if ((gc->priv->auth == E2K_AUTOCONFIG_USE_GAL_DEFAULT || gc->priv->auth == E2K_AUTOCONFIG_USE_GAL_NTLM)) {
+ ldap_error = ntlm_bind (gc, op, ldap);
+ if (ldap_error == LDAP_SUCCESS) {
+ E2K_GC_DEBUG_MSG(("GC: connected via NTLM\n\n"));
+ return LDAP_SUCCESS;
+ } else if (gc->priv->auth == E2K_AUTOCONFIG_USE_GAL_NTLM) {
+ E2K_GC_DEBUG_MSG(("GC: user setup NTLM, but it failed 0x%02x\n", ldap_error));
+ return ldap_error;
+ }
}
#endif
+ if (gc->priv->auth == E2K_AUTOCONFIG_USE_GAL_NTLM) {
+ E2K_GC_DEBUG_MSG(("GC: user setup NTLM, but we do not have it\n"));
+ /* a little hack */
+ return LDAP_AUTH_METHOD_NOT_SUPPORTED;
+ }
+
nt_name = gc->priv->nt_domain ?
g_strdup_printf ("%s\\%s", gc->priv->nt_domain, gc->priv->user) :
g_strdup (gc->priv->user);
@@ -335,7 +349,7 @@
auth.Password = g_utf8_to_utf16 (gc->priv->password, -1, NULL, NULL, NULL);
auth.PasswordLength = wcslen (auth.Password);
auth.Flags = SEC_WINNT_AUTH_IDENTITY_UNICODE;
- ldap_error = ldap_bind_s (ldap, nt_name, &auth, LDAP_AUTH_NTLM);
+ ldap_error = ldap_bind_s (ldap, nt_name, &auth, gc->priv->auth == E2K_AUTOCONFIG_USE_GAL_BASIC ? LDAP_AUTH_SIMPLE : LDAP_AUTH_NTLM);
g_free (auth.Password);
g_free (auth.Domain);
g_free (auth.User);
@@ -439,12 +453,13 @@
E2kGlobalCatalog *
e2k_global_catalog_new (const char *server, int response_limit,
const char *user, const char *domain,
- const char *password)
+ const char *password, E2kAutoconfigGalAuthPref use_auth)
{
E2kGlobalCatalog *gc;
gc = g_object_new (E2K_TYPE_GLOBAL_CATALOG, NULL);
gc->priv->server = g_strdup (server);
+ gc->priv->auth = use_auth;
gc->priv->user = g_strdup (user);
gc->priv->nt_domain = g_strdup (domain);
gc->priv->password = g_strdup (password);
Modified: trunk/servers/exchange/lib/e2k-global-catalog.h
==============================================================================
--- trunk/servers/exchange/lib/e2k-global-catalog.h (original)
+++ trunk/servers/exchange/lib/e2k-global-catalog.h Wed Jul 30 10:33:24 2008
@@ -7,6 +7,7 @@
#include <glib-object.h>
#include "e2k-types.h"
#include "e2k-operation.h"
+#include "e2k-validate.h"
#ifdef __cplusplus
extern "C" {
@@ -38,7 +39,8 @@
int response_limit,
const char *user,
const char *domain,
- const char *password);
+ const char *password,
+ E2kAutoconfigGalAuthPref use_auth);
typedef enum {
Modified: trunk/servers/exchange/lib/e2k-validate.h
==============================================================================
--- trunk/servers/exchange/lib/e2k-validate.h (original)
+++ trunk/servers/exchange/lib/e2k-validate.h Wed Jul 30 10:33:24 2008
@@ -11,9 +11,18 @@
#pragma }
#endif /* __cplusplus */
+typedef enum {
+ E2K_AUTOCONFIG_USE_GAL_DEFAULT, /* try ntlm if available and then basic if not or failed */
+
+ E2K_AUTOCONFIG_USE_GAL_BASIC,
+ /*E2K_AUTOCONFIG_USE_GAL_SASL,*/
+ E2K_AUTOCONFIG_USE_GAL_NTLM
+} E2kAutoconfigGalAuthPref;
+
typedef struct {
char *host;
char *ad_server;
+ E2kAutoconfigGalAuthPref ad_auth;
char *mailbox;
char *owa_path;
gboolean is_ntlm;
Modified: trunk/servers/exchange/lib/test-utils.c
==============================================================================
--- trunk/servers/exchange/lib/test-utils.c (original)
+++ trunk/servers/exchange/lib/test-utils.c Wed Jul 30 10:33:24 2008
@@ -181,7 +181,7 @@
user = g_strdup (g_get_user_name ());
password = test_get_password (user, server);
- gc = e2k_global_catalog_new (server, -1, user, NULL, password);
+ gc = e2k_global_catalog_new (server, -1, user, NULL, password, E2K_AUTOCONFIG_USE_GAL_DEFAULT);
if (!gc) {
fprintf (stderr, "Could not create GC\n");
exit (1);
Modified: trunk/servers/exchange/storage/exchange-account.c
==============================================================================
--- trunk/servers/exchange/storage/exchange-account.c (original)
+++ trunk/servers/exchange/storage/exchange-account.c Wed Jul 30 10:33:24 2008
@@ -79,6 +79,7 @@
char *owa_url;
E2kAutoconfigAuthPref auth_pref;
int ad_limit, passwd_exp_warn_period, quota_limit;
+ E2kAutoconfigGalAuthPref ad_auth;
EAccountList *account_list;
EAccount *account;
@@ -1446,7 +1447,7 @@
g_free (user_name);
e2k_autoconfig_set_gc_server (ac, account->priv->ad_server,
- account->priv->ad_limit);
+ account->priv->ad_limit, account->priv->ad_auth);
if (!pword) {
account->priv->connecting = FALSE;
@@ -2282,6 +2283,15 @@
param = e2k_uri_get_param (uri, "ad_limit");
if (param)
account->priv->ad_limit = atoi (param);
+ param = e2k_uri_get_param (uri, "ad_auth");
+ if (!param || g_ascii_strcasecmp (param, "default") == 0)
+ account->priv->ad_auth = E2K_AUTOCONFIG_USE_GAL_DEFAULT;
+ else if (g_ascii_strcasecmp (param, "basic") == 0)
+ account->priv->ad_auth = E2K_AUTOCONFIG_USE_GAL_BASIC;
+ else if (g_ascii_strcasecmp (param, "ntlm") == 0)
+ account->priv->ad_auth = E2K_AUTOCONFIG_USE_GAL_NTLM;
+ else
+ account->priv->ad_auth = E2K_AUTOCONFIG_USE_GAL_DEFAULT;
}
passwd_exp_warn_period = e2k_uri_get_param (uri, "passwd_exp_warn_period");
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]