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@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@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@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);