ldap/servers/slapd/dn.c | 10 +++++++---
ldap/servers/slapd/entry.c | 31 ++++++++-----------------------
ldap/servers/slapd/libglobs.c | 12 ++++++------
ldap/servers/slapd/valueset.c | 11 +++++------
4 files changed, 26 insertions(+), 38 deletions(-)
New commits:
commit 346d36664fb84f16207dd900849931f9eab3622d
Author: Noriko Hosoi <nhosoi(a)redhat.com>
Date: Mon Feb 10 17:58:20 2014 -0800
Ticket #47677 - Size returned by slapi_entry_size is not accurate
Description: slapi_entry_size calculating the entry size had issues.
. To calculate the Slapi_DN size, local function slapi_dn_size was used.
Local slapi_dn_size missed to count the raw dn length. This patch
replaces slapi_dn_size with (slapi_sdn_get_size - sizeof(Slapi_DN)).
. slapi_entry_size counted Slapi_RDN twice.
. slapi_entry_size did not count the size of e_virtual_lock, e_aux_attrs
and e_extension.
https://fedorahosted.org/389/ticket/47677
Reviewed by rmeggins(a)redhat.com (Thank you, Rich!!)
(cherry picked from commit b1e4cdf5131a1730c9d3674b19d0e2a0670286e7)
(cherry picked from commit 7b0842923c54333bc14539d72e999cbe30814386)
(cherry picked from commit baa3df4e846526f520d3d3533e2611045c243771)
diff --git a/ldap/servers/slapd/dn.c b/ldap/servers/slapd/dn.c
index 0f20d16..804d56e 100644
--- a/ldap/servers/slapd/dn.c
+++ b/ldap/servers/slapd/dn.c
@@ -2603,18 +2603,22 @@ sdn_dump( const Slapi_DN *sdn, const char *text)
size_t
slapi_sdn_get_size(const Slapi_DN *sdn)
{
- size_t sz = sizeof(Slapi_DN);
+ size_t sz = 0;
/* slapi_sdn_get_ndn_len returns the normalized dn length
* if dn or ndn exists. If both does not exist, it
* normalizes udn and set it to dn and returns the length.
*/
- sz += slapi_sdn_get_ndn_len(sdn);
+ if (NULL == sdn) {
+ return sz;
+ }
+ sz += slapi_sdn_get_ndn_len(sdn) + 1 /* '\0' */;
if (sdn->dn && sdn->ndn) {
- sz += slapi_sdn_get_ndn_len(sdn);
+ sz *= 2;
}
if (sdn->udn) {
sz += strlen(sdn->udn) + 1;
}
+ sz += sizeof(Slapi_DN);
return sz;
}
diff --git a/ldap/servers/slapd/entry.c b/ldap/servers/slapd/entry.c
index d47e0f6..29fe075 100644
--- a/ldap/servers/slapd/entry.c
+++ b/ldap/servers/slapd/entry.c
@@ -2040,40 +2040,25 @@ static size_t slapi_attrlist_size(Slapi_Attr *attrs)
return size;
}
-static size_t slapi_dn_size(Slapi_DN *sdn)
-{
- size_t size = 0;
-
- if (sdn == NULL) return 0;
-
- if (slapi_sdn_get_dn(sdn)) {
- size += slapi_sdn_get_ndn_len(sdn) + 1;
- }
- if (slapi_sdn_get_ndn(sdn)) {
- size += slapi_sdn_get_ndn_len(sdn) + 1;
- }
-
- return size;
-}
-
/* return the approximate size of an entry --
* useful for checking cache sizes, etc
*/
size_t
slapi_entry_size(Slapi_Entry *e)
{
- u_long size = 0;
-
- /* doesn't include memory used by e_extension */
+ size_t size = 0;
if (e->e_uniqueid) size += strlen(e->e_uniqueid) + 1;
if (e->e_dncsnset) size += csnset_size(e->e_dncsnset);
if (e->e_maxcsn) size += sizeof( CSN );
- size += slapi_dn_size(&e->e_sdn);
- size += slapi_rdn_get_size(&e->e_srdn);
+ if (e->e_virtual_lock) size += sizeof(Slapi_RWLock);
+ /* Slapi_DN and RDN are included in Slapi_Entry */
+ size += (slapi_sdn_get_size(&e->e_sdn) - sizeof(Slapi_DN));
+ size += (slapi_rdn_get_size(&e->e_srdn) - sizeof(Slapi_RDN));
size += slapi_attrlist_size(e->e_attrs);
- if (e->e_deleted_attrs) size += slapi_attrlist_size(e->e_deleted_attrs);
- if (e->e_virtual_attrs) size += slapi_attrlist_size(e->e_virtual_attrs);
+ size += slapi_attrlist_size(e->e_deleted_attrs);
+ size += slapi_attrlist_size(e->e_virtual_attrs);
+ size += slapi_attrlist_size(e->e_aux_attrs);
size += sizeof(Slapi_Entry);
return size;
diff --git a/ldap/servers/slapd/valueset.c b/ldap/servers/slapd/valueset.c
index f04acc3..de6914f 100644
--- a/ldap/servers/slapd/valueset.c
+++ b/ldap/servers/slapd/valueset.c
@@ -479,11 +479,11 @@ valuearray_size(Slapi_Value **va)
if(va!=NULL && va[0]!=NULL)
{
int i;
- for (i = 0; va[i]; i++)
+ for (i = 0; va[i]; i++)
{
s += value_size(va[i]);
}
- s += (i + 1) * sizeof(Slapi_Value*);
+ s += (i + 1) * sizeof(Slapi_Value*);
}
return s;
}
@@ -973,10 +973,9 @@ valueset_get_valuearray(const Slapi_ValueSet *vs)
size_t
valueset_size(const Slapi_ValueSet *vs)
{
- size_t s= 0;
- if(!valuearray_isempty(vs->va))
- {
- s= valuearray_size(vs->va);
+ size_t s = 0;
+ if (vs && !valuearray_isempty(vs->va)) {
+ s = valuearray_size(vs->va);
}
return s;
}
commit 98986b513ed0cf243fe43ce0e745828da680208f
Author: Noriko Hosoi <nhosoi(a)redhat.com>
Date: Mon Feb 10 17:53:45 2014 -0800
Ticket #47693 - Environment variables are not passed when DS is started via service
Description:
The previous commit 57199b34c9cbe4a703e537633fbe6beab9a94e81
contained a cherry-pick error.
Replaced CFG_ONOFF_LOCK_WRITE with CFG_LOCK_WRITE, and
CFG_ONOFF_UNLOCK_WRITE with CFG_UNLOCK_WRITE
diff --git a/ldap/servers/slapd/libglobs.c b/ldap/servers/slapd/libglobs.c
index 903d38b..8103133 100644
--- a/ldap/servers/slapd/libglobs.c
+++ b/ldap/servers/slapd/libglobs.c
@@ -6676,9 +6676,9 @@ config_set_malloc_mxfast(const char *attrname, char *value, char
*errorbuf, int
value, CONFIG_MALLOC_MXFAST, max);
return LDAP_OPERATIONS_ERROR;
}
- CFG_ONOFF_LOCK_WRITE(slapdFrontendConfig);
+ CFG_LOCK_WRITE(slapdFrontendConfig);
slapdFrontendConfig->malloc_mxfast = mxfast;
- CFG_ONOFF_UNLOCK_WRITE(slapdFrontendConfig);
+ CFG_UNLOCK_WRITE(slapdFrontendConfig);
if ((mxfast >= 0) && (mxfast <= max)) {
mallopt(M_MXFAST, mxfast);
@@ -6719,9 +6719,9 @@ config_set_malloc_trim_threshold(const char *attrname, char *value,
char *errorb
return LDAP_OPERATIONS_ERROR;
}
- CFG_ONOFF_LOCK_WRITE(slapdFrontendConfig);
+ CFG_LOCK_WRITE(slapdFrontendConfig);
slapdFrontendConfig->malloc_trim_threshold = trim_threshold;
- CFG_ONOFF_UNLOCK_WRITE(slapdFrontendConfig);
+ CFG_UNLOCK_WRITE(slapdFrontendConfig);
if (trim_threshold >= -1) {
mallopt(M_TRIM_THRESHOLD, trim_threshold);
@@ -6769,9 +6769,9 @@ config_set_malloc_mmap_threshold(const char *attrname, char *value,
char *errorb
return LDAP_OPERATIONS_ERROR;
}
- CFG_ONOFF_LOCK_WRITE(slapdFrontendConfig);
+ CFG_LOCK_WRITE(slapdFrontendConfig);
slapdFrontendConfig->malloc_mmap_threshold = mmap_threshold;
- CFG_ONOFF_UNLOCK_WRITE(slapdFrontendConfig);
+ CFG_UNLOCK_WRITE(slapdFrontendConfig);
if ((mmap_threshold >= 0) && (mmap_threshold <= max)) {
mallopt(M_MMAP_THRESHOLD, mmap_threshold);