Branch '389-ds-base-1.2.10' - 7 commits - ldap/servers ldap/systools VERSION.sh
by Richard Allen Megginson
VERSION.sh | 2 +-
ldap/servers/plugins/cos/cos_cache.c | 24 ++++++++++--------------
ldap/servers/plugins/dna/dna.c | 8 +++++---
ldap/servers/plugins/mep/mep.c | 3 ++-
ldap/servers/slapd/plugin_syntax.c | 2 +-
ldap/servers/slapd/util.c | 7 ++-----
ldap/systools/idsktune.c | 33 +++++++++++++++++++++------------
7 files changed, 42 insertions(+), 37 deletions(-)
New commits:
commit 000d6b708f8059ab25c4282384f0e47ffc3c6e79
Author: Rich Megginson <rmeggins(a)redhat.com>
Date: Mon Mar 5 12:10:11 2012 -0700
bump version to 1.2.10.3
diff --git a/VERSION.sh b/VERSION.sh
index 45f8369..6c519eb 100644
--- a/VERSION.sh
+++ b/VERSION.sh
@@ -10,7 +10,7 @@ vendor="389 Project"
# PACKAGE_VERSION is constructed from these
VERSION_MAJOR=1
VERSION_MINOR=2
-VERSION_MAINT=10.2
+VERSION_MAINT=10.3
# if this is a PRERELEASE, set VERSION_PREREL
# otherwise, comment it out
# be sure to include the dot prefix in the prerel
commit b05139ba374e947fad681d6c97af5dc3800c4bda
Author: Rich Megginson <rmeggins(a)redhat.com>
Date: Thu Mar 1 18:50:05 2012 -0700
memleak in normalize_mods2bvals
do not re malloc the berval again - only need to do it once
Reviewed by: nhosoi (Thanks!)
(cherry picked from commit f6e4d3d0d4313ef9b4396ab8433a1c260989274b)
diff --git a/ldap/servers/slapd/util.c b/ldap/servers/slapd/util.c
index 9cd3656..649b3a9 100644
--- a/ldap/servers/slapd/util.c
+++ b/ldap/servers/slapd/util.c
@@ -464,16 +464,13 @@ normalize_mods2bvals(const LDAPMod **mods)
normmbvp = normalized_mods[w]->mod_bvalues;
mvp && *mvp; mvp++, normmbvp++)
{
- *normmbvp =
- (struct berval *)slapi_ch_malloc(sizeof(struct berval));
-
vlen = strlen(*mvp);
+ *normmbvp =
+ (struct berval *)slapi_ch_malloc(sizeof(struct berval));
if (is_dn_syntax) {
Slapi_DN *sdn = slapi_sdn_new_dn_byref(*mvp);
if (slapi_sdn_get_dn(sdn)) {
- *normmbvp =
- (struct berval *)slapi_ch_malloc(sizeof(struct berval));
(*normmbvp)->bv_val =
slapi_ch_strdup(slapi_sdn_get_dn(sdn));
(*normmbvp)->bv_len = slapi_sdn_get_ndn_len(sdn);
commit c0eea24cb59f234903839604dd1be521897c3c58
Author: Rich Megginson <rmeggins(a)redhat.com>
Date: Thu Mar 1 18:47:34 2012 -0700
memleak in mep_parse_config_entry
pass in value to slapi_sdn_new_dn_passin() so that entry->template_sdn
will own the memory
Reviewed by: nhosoi (Thanks!)
(cherry picked from commit 54fbe0b3b3669a0379a4b0a50769b4855539c225)
diff --git a/ldap/servers/plugins/mep/mep.c b/ldap/servers/plugins/mep/mep.c
index 303d9b3..e5b41cb 100644
--- a/ldap/servers/plugins/mep/mep.c
+++ b/ldap/servers/plugins/mep/mep.c
@@ -631,7 +631,8 @@ mep_parse_config_entry(Slapi_Entry * e, int apply, Slapi_PBlock *pb)
if (value) {
Slapi_Entry *test_entry = NULL;
- entry->template_sdn = slapi_sdn_new_dn_byval(value);
+ entry->template_sdn = slapi_sdn_new_dn_passin(value);
+ value = NULL; /* entry->template_sdn owns value now */
/* Fetch the managed entry template */
slapi_search_internal_get_entry_ext(entry->template_sdn, 0,
commit 90bc9eb924e373f38ad1a8ccd25aecd74a2799e0
Author: Rich Megginson <rmeggins(a)redhat.com>
Date: Wed Feb 29 17:27:32 2012 -0700
handle null smods
Under certain error conditions, smods will be NULL at the end of the function.
Do not call passout if smods is NULL.
Reviewed by: nhosoi (Thanks!)
(cherry picked from commit afd6b1fd63c48642dd050e0e821b3d7c69fc4991)
diff --git a/ldap/servers/plugins/dna/dna.c b/ldap/servers/plugins/dna/dna.c
index a422055..a6d63a9 100644
--- a/ldap/servers/plugins/dna/dna.c
+++ b/ldap/servers/plugins/dna/dna.c
@@ -3179,9 +3179,11 @@ static int dna_pre_op(Slapi_PBlock * pb, int modtype)
bailmod:
if (LDAP_CHANGETYPE_MODIFY == modtype) {
/* Put the updated mods back into place. */
- mods = slapi_mods_get_ldapmods_passout(smods);
- slapi_pblock_set(pb, SLAPI_MODIFY_MODS, mods);
- slapi_mods_free(&smods);
+ if (smods) { /* smods == NULL if we bailed before initializing it */
+ mods = slapi_mods_get_ldapmods_passout(smods);
+ slapi_pblock_set(pb, SLAPI_MODIFY_MODS, mods);
+ slapi_mods_free(&smods);
+ }
}
bail:
commit b9ab70a3594830daed65035031520f6d310b2540
Author: Mark Reynolds <mareynol(a)redhat.com>
Date: Fri Mar 2 11:51:58 2012 -0500
Ticket #305 - Certain CMP operations hang or cause ns-slapd to crash
Bug Description: There is a potential double free in cos_cache_query_attr(). If you
run concurrent search or compares its very easy to crash the
server in this code
Fix Description: Moved the DN normalization into the cache rebuilding code.
https://fedorahosted.org/389/ticket/305
(cherry picked from commit 142c8f0fe93d77990df8ce991a8020918276ddd8)
diff --git a/ldap/servers/plugins/cos/cos_cache.c b/ldap/servers/plugins/cos/cos_cache.c
index b2237ee..a93d0b5 100644
--- a/ldap/servers/plugins/cos/cos_cache.c
+++ b/ldap/servers/plugins/cos/cos_cache.c
@@ -786,6 +786,7 @@ static int cos_dn_defs_cb (Slapi_Entry* e, void *callback_data)
int valIndex = 0;
Slapi_Attr *dnAttr;
char *attrType = 0;
+ char *norm_dn = NULL;
info=(struct dn_defs_info *)callback_data;
@@ -807,9 +808,16 @@ static int cos_dn_defs_cb (Slapi_Entry* e, void *callback_data)
pSneakyVal = 0;
if(!slapi_utf8casecmp((unsigned char*)attrType, (unsigned char*)"objectclass"))
pSneakyVal = &pObjectclass;
- else if(!slapi_utf8casecmp((unsigned char*)attrType, (unsigned char*)"cosTargetTree"))
+ else if(!slapi_utf8casecmp((unsigned char*)attrType, (unsigned char*)"cosTargetTree")){
+ if(pCosTargetTree){
+ norm_dn = slapi_create_dn_string("%s", pCosTargetTree->val);
+ if(norm_dn){
+ slapi_ch_free_string(&pCosTargetTree->val);
+ pCosTargetTree->val = norm_dn;
+ }
+ }
pSneakyVal = &pCosTargetTree;
- else if(!slapi_utf8casecmp((unsigned char*)attrType, (unsigned char*)"cosTemplateDn"))
+ } else if(!slapi_utf8casecmp((unsigned char*)attrType, (unsigned char*)"cosTemplateDn"))
pSneakyVal = &pCosTemplateDn;
else if(!slapi_utf8casecmp((unsigned char*)attrType, (unsigned char*)"cosSpecifier"))
pSneakyVal = &pCosSpecifier;
@@ -2387,18 +2395,6 @@ static int cos_cache_query_attr(cos_cache *ptheCache, vattr_context *context, Sl
* hits. We only check if this entry is a child of the target tree(s). */
while((hit == 0 || merge_mode) && pTargetTree)
{
- {
- char *normed = slapi_create_dn_string("%s", pTargetTree->val);
- if (normed) {
- slapi_ch_free_string(&pTargetTree->val);
- pTargetTree->val = normed;
- } else {
- LDAPDebug(LDAP_DEBUG_ANY,
- "cos_cache_query_attr: failed to normalize dn %s. "
- "Processing the pre normalized dn.\n",
- pTargetTree->val, 0, 0);
- }
- }
if( pTargetTree->val == 0 ||
slapi_dn_issuffix(pDn, pTargetTree->val) != 0 ||
(views_api && views_entry_exists(views_api, pTargetTree->val, e)) /* might be in a view */
commit d640d75e0894f922765e1738224d8f3c1b303685
Author: Mark Reynolds <mareynol(a)redhat.com>
Date: Wed Feb 29 10:33:32 2012 -0500
Ticket #306 - void function cannot return value
Bug Description: slapi_attr_value_normalize() was trying to return
slapi_attr_value_normalize_ext().
Fix Description: Instead of returning the function, we just call it.
Currently this function is not being used by the DS,
but it should be fixed.
https://fedorahosted.org/389/ticket/306
(cherry picked from commit 3d623c07a380d497e0566d0dd6496667016922a7)
diff --git a/ldap/servers/slapd/plugin_syntax.c b/ldap/servers/slapd/plugin_syntax.c
index 0438ceb..840fa7a 100644
--- a/ldap/servers/slapd/plugin_syntax.c
+++ b/ldap/servers/slapd/plugin_syntax.c
@@ -991,5 +991,5 @@ slapi_attr_value_normalize(
char **retval
)
{
- return slapi_attr_value_normalize_ext(pb, sattr, type, val, trim_spaces, retval, 0);
+ slapi_attr_value_normalize_ext(pb, sattr, type, val, trim_spaces, retval, 0);
}
commit 46536621359142d1ffa1a83eb57c78575c22839f
Author: Nathan Kinder <nkinder(a)redhat.com>
Date: Thu Feb 23 13:51:31 2012 -0800
ticket 304 - Fix kernel version checking in dsktune
The kernel version cehcking in dsktune is incorrect. It takes each
version element and checks it separately, without factoring in the
check for the previous version element. This causes checks like
3.2.5 > 2.4.7 to be evaluated as false.
This fix factors in the previous version element comparison, which
ensures that the version is evaluated correctly as a whole.
(cherry picked from commit e2a1090098fd2bcdd37dc1e9870cad46d975761c)
diff --git a/ldap/systools/idsktune.c b/ldap/systools/idsktune.c
index a16c27c..e0f485c 100644
--- a/ldap/systools/idsktune.c
+++ b/ldap/systools/idsktune.c
@@ -44,7 +44,7 @@
/* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
* Don't forget to update build_date when the patch sets are updated.
* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */
-static char *build_date = "10-AUGUST-2007";
+static char *build_date = "23-FEBRUARY-2012";
#if defined(__FreeBSD__) || defined(__bsdi)
#define IDDS_BSD_INCLUDE 1
@@ -1112,6 +1112,9 @@ linux_check_release(void)
FILE *fp;
char osl[128];
char *cmd = strdup("/bin/uname -r");
+ int major = 0;
+ int minor = 0;
+ int revision = 0;
if (cmd == NULL) {
printf("ERROR: Unable to allocate memory\n");
@@ -1139,20 +1142,26 @@ linux_check_release(void)
printf("DEBUG : %s\n",osl);
}
- if (atoi(strtok(osl, ".")) < 2) {
- printf("ERROR: We support kernel version 2.4.7 and higher.\n\n");
- flag_os_bad = 1;
- goto done;
- }
- if (atoi(strtok(NULL, ".")) < 4) {
- printf("ERROR: We support kernel version 2.4.7 and higher.\n\n");
- flag_os_bad = 1;
- goto done;
- }
- if (atoi(strtok(NULL, "-")) < 7) {
+ major = atoi(strtok(osl, "."));
+ minor = atoi(strtok(NULL, "."));
+ revision = atoi(strtok(NULL, "-"));
+
+ if (major < 2) {
printf("ERROR: We support kernel version 2.4.7 and higher.\n\n");
flag_os_bad = 1;
goto done;
+ } else if (major == 2) {
+ if (minor < 4) {
+ printf("ERROR: We support kernel version 2.4.7 and higher.\n\n");
+ flag_os_bad = 1;
+ goto done;
+ } else if (minor == 4) {
+ if (revision < 7) {
+ printf("ERROR: We support kernel version 2.4.7 and higher.\n\n");
+ flag_os_bad = 1;
+ goto done;
+ }
+ }
}
done:
if (cmd) free(cmd);
12 years
4 commits - ldap/servers
by Richard Allen Megginson
ldap/servers/plugins/dna/dna.c | 8 +++++---
ldap/servers/plugins/mep/mep.c | 3 ++-
ldap/servers/slapd/back-ldbm/ldbm_instance_config.c | 8 ++++----
ldap/servers/slapd/util.c | 7 ++-----
4 files changed, 13 insertions(+), 13 deletions(-)
New commits:
commit 93adf5f97832e5ec1539953feb11c060d30554eb
Author: Rich Megginson <rmeggins(a)redhat.com>
Date: Thu Mar 1 19:27:09 2012 -0700
destroy the entry cache and dn cache in the dse post op delete callback
don't destroy the entry and dn cache in the ldbm instance pre op delete
callback because other preop callback may attempt to access the
caches - wait and destroy it in the dse post op delete callback
Reviewed by: nhosoi (Thanks!)
diff --git a/ldap/servers/slapd/back-ldbm/ldbm_instance_config.c b/ldap/servers/slapd/back-ldbm/ldbm_instance_config.c
index 88b20d0..f41bd88 100644
--- a/ldap/servers/slapd/back-ldbm/ldbm_instance_config.c
+++ b/ldap/servers/slapd/back-ldbm/ldbm_instance_config.c
@@ -1091,6 +1091,10 @@ ldbm_instance_post_delete_instance_entry_callback(Slapi_PBlock *pb, Slapi_Entry*
LDAPDebug(LDAP_DEBUG_ANY, "ldbm: removing '%s'.\n", instance_name, 0, 0);
+ cache_destroy_please(&inst->inst_cache, CACHE_TYPE_ENTRY);
+ if (entryrdn_get_switch()) { /* subtree-rename: on */
+ cache_destroy_please(&inst->inst_dncache, CACHE_TYPE_DN);
+ }
{
struct ldbminfo *li = (struct ldbminfo *) inst->inst_be->be_database->plg_private;
dblayer_private *priv = (dblayer_private*) li->li_dblayer_private;
@@ -1211,10 +1215,6 @@ ldbm_instance_delete_instance_entry_callback(Slapi_PBlock *pb, Slapi_Entry* entr
instance_name, 0, 0);
slapi_mtn_be_stopping(inst->inst_be);
dblayer_instance_close(inst->inst_be);
- cache_destroy_please(&inst->inst_cache, CACHE_TYPE_ENTRY);
- if (entryrdn_get_switch()) { /* subtree-rename: on */
- cache_destroy_please(&inst->inst_dncache, CACHE_TYPE_DN);
- }
slapi_ch_free((void **)&instance_name);
return SLAPI_DSE_CALLBACK_OK;
commit f6e4d3d0d4313ef9b4396ab8433a1c260989274b
Author: Rich Megginson <rmeggins(a)redhat.com>
Date: Thu Mar 1 18:50:05 2012 -0700
memleak in normalize_mods2bvals
do not re malloc the berval again - only need to do it once
Reviewed by: nhosoi (Thanks!)
diff --git a/ldap/servers/slapd/util.c b/ldap/servers/slapd/util.c
index 9cd3656..649b3a9 100644
--- a/ldap/servers/slapd/util.c
+++ b/ldap/servers/slapd/util.c
@@ -464,16 +464,13 @@ normalize_mods2bvals(const LDAPMod **mods)
normmbvp = normalized_mods[w]->mod_bvalues;
mvp && *mvp; mvp++, normmbvp++)
{
- *normmbvp =
- (struct berval *)slapi_ch_malloc(sizeof(struct berval));
-
vlen = strlen(*mvp);
+ *normmbvp =
+ (struct berval *)slapi_ch_malloc(sizeof(struct berval));
if (is_dn_syntax) {
Slapi_DN *sdn = slapi_sdn_new_dn_byref(*mvp);
if (slapi_sdn_get_dn(sdn)) {
- *normmbvp =
- (struct berval *)slapi_ch_malloc(sizeof(struct berval));
(*normmbvp)->bv_val =
slapi_ch_strdup(slapi_sdn_get_dn(sdn));
(*normmbvp)->bv_len = slapi_sdn_get_ndn_len(sdn);
commit 54fbe0b3b3669a0379a4b0a50769b4855539c225
Author: Rich Megginson <rmeggins(a)redhat.com>
Date: Thu Mar 1 18:47:34 2012 -0700
memleak in mep_parse_config_entry
pass in value to slapi_sdn_new_dn_passin() so that entry->template_sdn
will own the memory
Reviewed by: nhosoi (Thanks!)
diff --git a/ldap/servers/plugins/mep/mep.c b/ldap/servers/plugins/mep/mep.c
index b51c241..f8e3c2b 100644
--- a/ldap/servers/plugins/mep/mep.c
+++ b/ldap/servers/plugins/mep/mep.c
@@ -626,7 +626,8 @@ mep_parse_config_entry(Slapi_Entry * e, int apply)
if (value) {
Slapi_Entry *test_entry = NULL;
- entry->template_sdn = slapi_sdn_new_dn_byval(value);
+ entry->template_sdn = slapi_sdn_new_dn_passin(value);
+ value = NULL; /* entry->template_sdn owns value now */
/* Fetch the managed entry template */
slapi_search_internal_get_entry(entry->template_sdn, 0,
commit afd6b1fd63c48642dd050e0e821b3d7c69fc4991
Author: Rich Megginson <rmeggins(a)redhat.com>
Date: Wed Feb 29 17:27:32 2012 -0700
handle null smods
Under certain error conditions, smods will be NULL at the end of the function.
Do not call passout if smods is NULL.
Reviewed by: nhosoi (Thanks!)
diff --git a/ldap/servers/plugins/dna/dna.c b/ldap/servers/plugins/dna/dna.c
index d1aa74c..7ace2b1 100644
--- a/ldap/servers/plugins/dna/dna.c
+++ b/ldap/servers/plugins/dna/dna.c
@@ -3493,9 +3493,11 @@ bail:
if (LDAP_CHANGETYPE_MODIFY == modtype) {
/* Put the updated mods back into place. */
- mods = slapi_mods_get_ldapmods_passout(smods);
- slapi_pblock_set(pb, SLAPI_MODIFY_MODS, mods);
- slapi_mods_free(&smods);
+ if (smods) { /* smods == NULL if we bailed before initializing it */
+ mods = slapi_mods_get_ldapmods_passout(smods);
+ slapi_pblock_set(pb, SLAPI_MODIFY_MODS, mods);
+ slapi_mods_free(&smods);
+ }
}
slapi_ch_array_free(generated_types);
12 years
ldap/servers
by Richard Allen Megginson
ldap/servers/slapd/back-ldbm/dblayer.c | 4 +++-
ldap/servers/slapd/back-ldbm/ldif2ldbm.c | 4 ++--
2 files changed, 5 insertions(+), 3 deletions(-)
New commits:
commit e2532d8f58510525496c2810c31ab3189cd6ee0a
Author: Rich Megginson <rmeggins(a)redhat.com>
Date: Fri Mar 2 09:38:10 2012 -0700
init txn thread private data for all database modes
Even though the indexing code explicitly disables the database opening in
transaction mode, it still uses transactions. So we have to init the
thread private data for transactions in all cases. This doesn't hurt
anything, just creates a thread private key. Also, in the indexing code,
move the dblayer_txn_init until after dblayer_start has been called.
Reviewed by: nkinder (Thanks!)
diff --git a/ldap/servers/slapd/back-ldbm/dblayer.c b/ldap/servers/slapd/back-ldbm/dblayer.c
index c6f3863..c1a123c 100644
--- a/ldap/servers/slapd/back-ldbm/dblayer.c
+++ b/ldap/servers/slapd/back-ldbm/dblayer.c
@@ -1567,7 +1567,6 @@ dblayer_start(struct ldbminfo *li, int dbmode)
if (!(dbmode & DBLAYER_NO_DBTHREADS_MODE))
dbmode = DBLAYER_NORMAL_MODE; /* to restart helper threads */
}
- dblayer_init_pvt_txn();
}
if (priv->dblayer_private_mem) {
@@ -1710,6 +1709,9 @@ dblayer_start(struct ldbminfo *li, int dbmode)
open_flags |= DB_TXN_NOSYNC;
#endif
}
+ /* ldbm2index uses transactions but sets the transaction flag to off - we
+ need to dblayer_init_pvt_txn in that case */
+ dblayer_init_pvt_txn();
if (!((DBLAYER_IMPORT_MODE|DBLAYER_INDEX_MODE) & dbmode))
{
pEnv->dblayer_openflags = open_flags;
diff --git a/ldap/servers/slapd/back-ldbm/ldif2ldbm.c b/ldap/servers/slapd/back-ldbm/ldif2ldbm.c
index 77f7cc9..c802ff2 100644
--- a/ldap/servers/slapd/back-ldbm/ldif2ldbm.c
+++ b/ldap/servers/slapd/back-ldbm/ldif2ldbm.c
@@ -1693,8 +1693,6 @@ ldbm_back_ldbm2index(Slapi_PBlock *pb)
run_from_cmdline = (task_flags & SLAPI_TASK_RUNNING_FROM_COMMANDLINE);
slapi_pblock_get(pb, SLAPI_BACKEND_TASK, &task);
- dblayer_txn_init(li, &txn);
-
if (run_from_cmdline) {
/* No ldbm backend exists until we process the config info. */
li->li_flags |= SLAPI_TASK_RUNNING_FROM_COMMANDLINE;
@@ -1945,6 +1943,8 @@ ldbm_back_ldbm2index(Slapi_PBlock *pb)
dbc->c_close(dbc);
}
+ dblayer_txn_init(li, &txn);
+
while (1) {
if ( g_get_shutdown() || c_get_shutdown() ) {
goto err_out;
12 years
ldap/servers
by Mark Reynolds
ldap/servers/plugins/cos/cos_cache.c | 24 ++++++++++--------------
1 file changed, 10 insertions(+), 14 deletions(-)
New commits:
commit 142c8f0fe93d77990df8ce991a8020918276ddd8
Author: Mark Reynolds <mareynol(a)redhat.com>
Date: Fri Mar 2 11:51:58 2012 -0500
Ticket #305 - Certain CMP operations hang or cause ns-slapd to crash
Bug Description: There is a potential double free in cos_cache_query_attr(). If you
run concurrent search or compares its very easy to crash the
server in this code
Fix Description: Moved the DN normalization into the cache rebuilding code.
https://fedorahosted.org/389/ticket/305
diff --git a/ldap/servers/plugins/cos/cos_cache.c b/ldap/servers/plugins/cos/cos_cache.c
index b2237ee..a93d0b5 100644
--- a/ldap/servers/plugins/cos/cos_cache.c
+++ b/ldap/servers/plugins/cos/cos_cache.c
@@ -786,6 +786,7 @@ static int cos_dn_defs_cb (Slapi_Entry* e, void *callback_data)
int valIndex = 0;
Slapi_Attr *dnAttr;
char *attrType = 0;
+ char *norm_dn = NULL;
info=(struct dn_defs_info *)callback_data;
@@ -807,9 +808,16 @@ static int cos_dn_defs_cb (Slapi_Entry* e, void *callback_data)
pSneakyVal = 0;
if(!slapi_utf8casecmp((unsigned char*)attrType, (unsigned char*)"objectclass"))
pSneakyVal = &pObjectclass;
- else if(!slapi_utf8casecmp((unsigned char*)attrType, (unsigned char*)"cosTargetTree"))
+ else if(!slapi_utf8casecmp((unsigned char*)attrType, (unsigned char*)"cosTargetTree")){
+ if(pCosTargetTree){
+ norm_dn = slapi_create_dn_string("%s", pCosTargetTree->val);
+ if(norm_dn){
+ slapi_ch_free_string(&pCosTargetTree->val);
+ pCosTargetTree->val = norm_dn;
+ }
+ }
pSneakyVal = &pCosTargetTree;
- else if(!slapi_utf8casecmp((unsigned char*)attrType, (unsigned char*)"cosTemplateDn"))
+ } else if(!slapi_utf8casecmp((unsigned char*)attrType, (unsigned char*)"cosTemplateDn"))
pSneakyVal = &pCosTemplateDn;
else if(!slapi_utf8casecmp((unsigned char*)attrType, (unsigned char*)"cosSpecifier"))
pSneakyVal = &pCosSpecifier;
@@ -2387,18 +2395,6 @@ static int cos_cache_query_attr(cos_cache *ptheCache, vattr_context *context, Sl
* hits. We only check if this entry is a child of the target tree(s). */
while((hit == 0 || merge_mode) && pTargetTree)
{
- {
- char *normed = slapi_create_dn_string("%s", pTargetTree->val);
- if (normed) {
- slapi_ch_free_string(&pTargetTree->val);
- pTargetTree->val = normed;
- } else {
- LDAPDebug(LDAP_DEBUG_ANY,
- "cos_cache_query_attr: failed to normalize dn %s. "
- "Processing the pre normalized dn.\n",
- pTargetTree->val, 0, 0);
- }
- }
if( pTargetTree->val == 0 ||
slapi_dn_issuffix(pDn, pTargetTree->val) != 0 ||
(views_api && views_entry_exists(views_api, pTargetTree->val, e)) /* might be in a view */
12 years
ldap/servers
by Mark Reynolds
ldap/servers/slapd/regex.c | 28 +++++++++++++++++++++-------
ldap/servers/slapd/sasl_map.c | 4 ++--
ldap/servers/slapd/slapi-plugin.h | 2 ++
3 files changed, 25 insertions(+), 9 deletions(-)
New commits:
commit 6fd5d7007e56d20e9eb2ac3157fc276795fa635c
Author: Mark Reynolds <mareynol(a)redhat.com>
Date: Wed Feb 29 14:51:15 2012 -0500
Ticket #291 - cannot use & in a sasl map search filter
Bug Description: The '&' was getting replaced in slapi_re_subs() when processing
search filter mappings.
Fix Description: Created extension of slapi_re_subs() to pass in filter flag.
It checks to see if the '&' is a separator of filter components
or not, by looking for "(&(".
https://fedorahosted.org/389/ticket/291
diff --git a/ldap/servers/slapd/regex.c b/ldap/servers/slapd/regex.c
index b7445fe..3697fde 100644
--- a/ldap/servers/slapd/regex.c
+++ b/ldap/servers/slapd/regex.c
@@ -147,13 +147,21 @@ slapi_re_exec( Slapi_Regex *re_handle, const char *subject, time_t time_up )
*/
int
slapi_re_subs( Slapi_Regex *re_handle, const char *subject,
- const char *src, char **dst, unsigned long dstlen )
+ const char *src, char **dst, unsigned long dstlen)
+{
+ return slapi_re_subs_ext(re_handle, subject, src, dst, dstlen, 0 /* not a filter */);
+}
+
+int
+slapi_re_subs_ext( Slapi_Regex *re_handle, const char *subject,
+ const char *src, char **dst, unsigned long dstlen, int filter )
{
int thislen = 0;
int len = 0;
int pin;
int *ovector;
char *mydst;
+ const char *prev, *next;
const char *substring_start;
const char *p;
@@ -166,16 +174,21 @@ slapi_re_subs( Slapi_Regex *re_handle, const char *subject,
ovector = re_handle->re_ovector;
mydst = *dst;
+ prev = src;
for (p = src; *p != '\0'; p++) {
if ('&' == *p) {
- if (re_handle->re_oveccount <= 1) {
- memset(*dst, '\0', dstlen);
- return -1;
+ /* Don't replace '&' if it's a filter AND: "(&(cn=a)(sn=b))" */
+ next = p;
+ if(!filter || (*prev != '(' && *next++ != '(')){
+ if (re_handle->re_oveccount <= 1) {
+ memset(*dst, '\0', dstlen);
+ return -1;
+ }
+ substring_start = subject + ovector[0];
+ thislen = ovector[1] - ovector[0];
+ len += thislen;
}
- substring_start = subject + ovector[0];
- thislen = ovector[1] - ovector[0];
- len += thislen;
} else if (('\\' == *p) && ('0' <= *(p+1) && *(p+1) <= '9')) {
pin = *(++p) - '0';
if (re_handle->re_oveccount <= 2*pin+1) {
@@ -198,6 +211,7 @@ slapi_re_subs( Slapi_Regex *re_handle, const char *subject,
}
memcpy(mydst, substring_start, thislen);
mydst += thislen;
+ prev = p;
}
*mydst = '\0';
return 0;
diff --git a/ldap/servers/slapd/sasl_map.c b/ldap/servers/slapd/sasl_map.c
index 1bdaa20..792504d 100644
--- a/ldap/servers/slapd/sasl_map.c
+++ b/ldap/servers/slapd/sasl_map.c
@@ -562,9 +562,9 @@ sasl_map_check(sasl_map_data *dp, char *sasl_user_and_realm, char **ldap_search_
slapi_ch_free_string(ldap_search_filter);
} else {
/* Substitutes '&' and/or "\#" in template_search_filter */
- rc = slapi_re_subs(re, sasl_user_and_realm,
+ rc = slapi_re_subs_ext(re, sasl_user_and_realm,
dp->template_search_filter, ldap_search_filter,
- ldap_search_filter_len);
+ ldap_search_filter_len, 1);
if (0 != rc) {
LDAPDebug( LDAP_DEBUG_ANY,
"sasl_map_check: slapi_re_subs failed: "
diff --git a/ldap/servers/slapd/slapi-plugin.h b/ldap/servers/slapd/slapi-plugin.h
index 67d7ac9..e4703bd 100644
--- a/ldap/servers/slapd/slapi-plugin.h
+++ b/ldap/servers/slapd/slapi-plugin.h
@@ -6722,6 +6722,8 @@ int slapi_re_exec( Slapi_Regex *re_handle, const char *subject, time_t time_up )
* \warning The regex handler should be released by slapi_re_free().
*/
int slapi_re_subs( Slapi_Regex *re_handle, const char *subject, const char *src, char **dst, unsigned long dstlen );
+/* extension to handle search filters properly */
+int slapi_re_subs_ext( Slapi_Regex *re_handle, const char *subject, const char *src, char **dst, unsigned long dstlen, int filter );
/**
* Releases the regex handler which was returned from slapi_re_comp.
*
12 years, 1 month
ldap/servers
by Mark Reynolds
ldap/servers/plugins/schema_reload/schema_reload.c | 8 ++++++++
1 file changed, 8 insertions(+)
New commits:
commit 6bf6e7920175f6b51e5aa5e191709746a1eb2764
Author: Mark Reynolds <mareynol(a)redhat.com>
Date: Thu Mar 1 10:15:25 2012 -0500
Schema Reload crash fix
In reference to ticket 302. Forget to allocate the task_data.
diff --git a/ldap/servers/plugins/schema_reload/schema_reload.c b/ldap/servers/plugins/schema_reload/schema_reload.c
index 338aaf4..82d8e2e 100644
--- a/ldap/servers/plugins/schema_reload/schema_reload.c
+++ b/ldap/servers/plugins/schema_reload/schema_reload.c
@@ -257,6 +257,14 @@ schemareload_add(Slapi_PBlock *pb, Slapi_Entry *e,
goto out;
}
+ mytaskdata = (task_data*)slapi_ch_malloc(sizeof(task_data));
+ if (mytaskdata == NULL)
+ {
+ *returncode = LDAP_OPERATIONS_ERROR;
+ rv = SLAPI_DSE_CALLBACK_ERROR;
+ goto out;
+ }
+
mytaskdata->schemadir = slapi_ch_strdup(schemadir);
mytaskdata->bind_dn = slapi_ch_strdup(bind_dn);
12 years, 1 month
ldap/servers
by Noriko Hosoi
ldap/servers/slapd/pagedresults.c | 4 ++--
ldap/servers/slapd/proto-slap.h | 1 +
2 files changed, 3 insertions(+), 2 deletions(-)
New commits:
commit 60b2d126a4220b1ecd02fe8be6442c6198223728
Author: Noriko Hosoi <nhosoi(a)dhcp-32-235.sjc.redhat.com>
Date: Wed Feb 29 17:02:29 2012 -0800
Fixing compiler warnings
They were introduced by the commit add880accaa28de8304da1c2c2f58fe8af002ebb.
diff --git a/ldap/servers/slapd/pagedresults.c b/ldap/servers/slapd/pagedresults.c
index 1690e88..ea64b5c 100644
--- a/ldap/servers/slapd/pagedresults.c
+++ b/ldap/servers/slapd/pagedresults.c
@@ -267,8 +267,8 @@ pagedresults_free_one_msgid( Connection *conn, ber_int_t msgid )
int i;
LDAPDebug1Arg(LDAP_DEBUG_TRACE,
- "--> pagedresults_free_one: idx=%d\n", index);
- if (conn && (index > -1)) {
+ "--> pagedresults_free_one: msgid=%d\n", msgid);
+ if (conn && (msgid > -1)) {
PR_Lock(conn->c_mutex);
if (conn->c_pagedresults.prl_count <= 0) {
LDAPDebug2Args(LDAP_DEBUG_TRACE, "pagedresults_free_one_msgid: "
diff --git a/ldap/servers/slapd/proto-slap.h b/ldap/servers/slapd/proto-slap.h
index ad66595..a624187 100644
--- a/ldap/servers/slapd/proto-slap.h
+++ b/ldap/servers/slapd/proto-slap.h
@@ -1408,6 +1408,7 @@ int pagedresults_is_timedout(Connection *conn);
int pagedresults_reset_timedout(Connection *conn);
int pagedresults_in_use(Connection *conn);
int pagedresults_free_one(Connection *conn, int index);
+int pagedresults_free_one_msgid( Connection *conn, ber_int_t msgid );
int op_is_pagedresults(Operation *op);
int pagedresults_cleanup_all(Connection *conn, int needlock);
void op_set_pagedresults(Operation *op);
12 years, 1 month