[evolution-data-server] Bug 686105 - LDAP search with categories filter fails
- From: Milan Crha <mcrha src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution-data-server] Bug 686105 - LDAP search with categories filter fails
- Date: Thu, 13 Aug 2015 16:25:08 +0000 (UTC)
commit ef01a8caca54aefea2ea438affe7b635842c2624
Author: Milan Crha <mcrha redhat com>
Date: Thu Aug 13 18:23:52 2015 +0200
Bug 686105 - LDAP search with categories filter fails
addressbook/backends/ldap/e-book-backend-ldap.c | 51 ++++++++++++----------
1 files changed, 28 insertions(+), 23 deletions(-)
---
diff --git a/addressbook/backends/ldap/e-book-backend-ldap.c b/addressbook/backends/ldap/e-book-backend-ldap.c
index cd8d2d9..9bce28f 100644
--- a/addressbook/backends/ldap/e-book-backend-ldap.c
+++ b/addressbook/backends/ldap/e-book-backend-ldap.c
@@ -97,7 +97,7 @@
static gboolean enable_debug = FALSE;
static const gchar *
- query_prop_to_ldap (gchar *query_prop);
+ query_prop_to_ldap (const gchar *query_prop);
static gchar * e_book_backend_ldap_build_query (EBookBackendLDAP *bl,
const gchar *query);
@@ -3390,39 +3390,40 @@ extend_query_value (gchar *str)
static ESExpResult *
func_and (struct _ESExp *f,
- gint argc,
+ gint unused_argc,
struct _ESExpResult **argv,
gpointer data)
{
EBookBackendLDAPSExpData *ldap_data = data;
ESExpResult *r;
gchar ** strings;
+ gint args = g_list_length (ldap_data->list);
- if (argc > 0) {
+ if (args > 1) {
gint i, empty;
- strings = g_new0 (gchar *, argc + 3);
+ strings = g_new0 (gchar *, args + 3);
strings[0] = g_strdup ("(&");
- strings[argc + 3 - 2] = g_strdup (")");
+ strings[args + 3 - 2] = g_strdup (")");
empty = 0;
- for (i = 0; i < argc; i++) {
+ for (i = 0; i < args; i++) {
GList *list_head = ldap_data->list;
if (!list_head)
break;
if (strlen (list_head->data) == 0)
empty++;
- strings[argc - i] = list_head->data;
+ strings[args - i] = list_head->data;
ldap_data->list = g_list_remove_link (list_head, list_head);
g_list_free_1 (list_head);
}
- if (empty == argc)
+ if (empty == args)
ldap_data->list = g_list_prepend (ldap_data->list, g_strdup (" "));
else
ldap_data->list = g_list_prepend (ldap_data->list, g_strjoinv (" ", strings));
- for (i = 0; i < argc + 2; i++)
+ for (i = 0; i < args + 2; i++)
g_free (strings[i]);
g_free (strings);
@@ -3436,39 +3437,40 @@ func_and (struct _ESExp *f,
static ESExpResult *
func_or (struct _ESExp *f,
- gint argc,
+ gint unused_argc,
struct _ESExpResult **argv,
gpointer data)
{
EBookBackendLDAPSExpData *ldap_data = data;
ESExpResult *r;
gchar ** strings;
+ gint args = g_list_length (ldap_data->list);
- if (argc > 0) {
+ if (args > 1) {
gint i, empty;
- strings = g_new0 (gchar *, argc + 3);
+ strings = g_new0 (gchar *, args + 3);
strings[0] = g_strdup ("(|");
- strings[argc + 3 - 2] = g_strdup (")");
+ strings[args + 3 - 2] = g_strdup (")");
empty = 0;
- for (i = 0; i < argc; i++) {
+ for (i = 0; i < args; i++) {
GList *list_head = ldap_data->list;
if (!list_head)
break;
if (strlen (list_head->data) == 0)
empty++;
- strings[argc - i] = list_head->data;
+ strings[args - i] = list_head->data;
ldap_data->list = g_list_remove_link (list_head, list_head);
g_list_free_1 (list_head);
}
- if (empty == argc)
+ if (empty == args)
ldap_data->list = g_list_prepend (ldap_data->list, g_strdup (" "));
else
ldap_data->list = g_list_prepend (ldap_data->list, g_strjoinv (" ", strings));
- for (i = 0; i < argc + 2; i++)
+ for (i = 0; i < args + 2; i++)
g_free (strings[i]);
g_free (strings);
@@ -3601,7 +3603,7 @@ func_is (struct _ESExp *f,
"(%s=%s)",
ldap_attr, str));
else {
- g_warning ("unknown query property\n");
+ g_warning ("LDAP: unknown query property '%s'\n", propname);
/* we want something that'll always be false */
ldap_data->list = g_list_prepend (
ldap_data->list,
@@ -3829,7 +3831,7 @@ e_book_backend_ldap_build_query (EBookBackendLDAP *bl,
if (data.list) {
if (data.list->next) {
- g_warning ("conversion to ldap query string failed");
+ g_warning ("LDAP: conversion of '%s' to ldap query string failed", query);
retval = NULL;
g_list_foreach (data.list, (GFunc) g_free, NULL);
}
@@ -3850,9 +3852,9 @@ e_book_backend_ldap_build_query (EBookBackendLDAP *bl,
retval = g_strdup (data.list->data);
}
}
- }
- else {
- g_warning ("conversion to ldap query string failed");
+ } else {
+ if (g_strcmp0 (query, "(contains \"x-evolution-any-field\" \"\")") != 0)
+ g_warning ("LDAP: conversion of '%s' to ldap query string failed", query);
retval = NULL;
}
@@ -3861,10 +3863,13 @@ e_book_backend_ldap_build_query (EBookBackendLDAP *bl,
}
static const gchar *
-query_prop_to_ldap (gchar *query_prop)
+query_prop_to_ldap (const gchar *query_prop)
{
gint i;
+ if (g_strcmp0 (query_prop, "categories") == 0)
+ query_prop = "category_list";
+
for (i = 0; i < G_N_ELEMENTS (prop_info); i++)
if (!strcmp (query_prop, e_contact_field_name (prop_info[i].field_id)))
return prop_info[i].ldap_attr;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]