summaryrefslogtreecommitdiffstats
path: root/src/back-sch.c
diff options
context:
space:
mode:
authorNalin Dahyabhai <nalin@dahyabhai.net>2012-01-06 15:42:33 -0500
committerNalin Dahyabhai <nalin@dahyabhai.net>2012-01-06 15:42:33 -0500
commit80c8021ef1dcf911c170dc7917b1de9087b0b8e0 (patch)
tree70a037e20a2093c5fc54d4c5335511954e16f126 /src/back-sch.c
parentd361fe8707d3558a9bad59c61b1f124d2de17772 (diff)
downloadslapi-nis-80c8021ef1dcf911c170dc7917b1de9087b0b8e0.tar.gz
slapi-nis-80c8021ef1dcf911c170dc7917b1de9087b0b8e0.tar.xz
slapi-nis-80c8021ef1dcf911c170dc7917b1de9087b0b8e0.zip
- Make a note of which attributes we read from any entry when evaluating data, and when we're later called for a modify request which doesn't modify any of those attributes, skip recalculating the entry contents (should make a dent in #771493).
Diffstat (limited to 'src/back-sch.c')
-rw-r--r--src/back-sch.c17
1 files changed, 14 insertions, 3 deletions
diff --git a/src/back-sch.c b/src/back-sch.c
index c17a353..d166581 100644
--- a/src/back-sch.c
+++ b/src/back-sch.c
@@ -1,5 +1,5 @@
/*
- * Copyright 2008,2009,2010,2011 Red Hat, Inc.
+ * Copyright 2008,2009,2010,2011,2012 Red Hat, Inc.
*
* This Program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -90,6 +90,8 @@ backend_set_config_free_config_contents(void *data)
free(set_data->common.group);
free(set_data->common.set);
free(set_data->common.bases);
+ format_free_attr_list(set_data->common.rel_attrs);
+ free(set_data->common.rel_attr_list);
format_free_attr_list(set_data->common.ref_attrs);
format_free_inref_attrs(set_data->common.inref_attrs);
format_free_ref_attr_list(set_data->common.ref_attr_list);
@@ -119,6 +121,11 @@ backend_copy_set_config(const struct backend_set_data *data)
ret->common.group = slapi_dn_normalize(strdup(data->common.group));
ret->common.set = slapi_dn_normalize(strdup(data->common.set));
ret->common.bases = backend_shr_dup_strlist(data->common.bases);
+ ret->common.rel_attrs = data->common.rel_attrs ?
+ format_dup_attr_list(data->common.rel_attrs) :
+ NULL;
+ ret->common.rel_attr_list = NULL;
+ ret->common.rel_attrs_list = NULL;
ret->common.ref_attrs = data->common.ref_attrs ?
format_dup_attr_list(data->common.ref_attrs) :
NULL;
@@ -178,6 +185,9 @@ backend_set_config_read_config(struct plugin_state *state, Slapi_Entry *e,
strdup(container);
ret.common.bases = bases;
ret.common.entry_filter = entry_filter;
+ ret.common.rel_attrs = NULL;
+ ret.common.rel_attr_list = NULL;
+ ret.common.rel_attrs_list = NULL;
ret.common.ref_attrs = NULL;
ret.common.inref_attrs = NULL;
ret.common.ref_attr_list = NULL;
@@ -288,6 +298,7 @@ backend_set_entry(Slapi_Entry *e, struct backend_set_data *data)
rdn = format_get_data(data->common.state, e,
data->common.group, data->common.set,
data->rdn_format, NULL,
+ &data->common.rel_attrs,
&data->common.ref_attrs,
&data->common.inref_attrs,
&data->common.ref_attr_list,
@@ -321,6 +332,7 @@ backend_set_entry(Slapi_Entry *e, struct backend_set_data *data)
data->common.set,
data->attribute_format[i],
NULL,
+ &data->common.rel_attrs,
&data->common.ref_attrs,
&data->common.inref_attrs,
&data->common.ref_attr_list,
@@ -396,9 +408,8 @@ backend_set_entry(Slapi_Entry *e, struct backend_set_data *data)
slapi_entry_add_string(entry,
"objectClass", "extensibleObject");
}
- /* Clean up some LDIF. */
+ /* Clean up the entry by doing a round trip through the LDIF parser. */
ldif = slapi_entry2str(entry, &len);
- /* Recreate the entry. */
slapi_entry_free(entry);
entry = slapi_str2entry(ldif,
SLAPI_STR2ENTRY_REMOVEDUPVALS |