diff options
author | Nalin Dahyabhai <nalin@dahyabhai.net> | 2012-01-06 15:42:33 -0500 |
---|---|---|
committer | Nalin Dahyabhai <nalin@dahyabhai.net> | 2012-01-06 15:42:33 -0500 |
commit | 80c8021ef1dcf911c170dc7917b1de9087b0b8e0 (patch) | |
tree | 70a037e20a2093c5fc54d4c5335511954e16f126 /src/back-sch.c | |
parent | d361fe8707d3558a9bad59c61b1f124d2de17772 (diff) | |
download | slapi-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.c | 17 |
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 | |