ldap/servers
by Mark Reynolds
ldap/servers/plugins/retrocl/retrocl.c | 2
ldap/servers/plugins/retrocl/retrocl.h | 4
ldap/servers/plugins/retrocl/retrocl_cn.c | 128 +++++++++++++++++-------------
3 files changed, 74 insertions(+), 60 deletions(-)
New commits:
commit 2971ca1c3671b4685d347ecdcb20c950f4d03d4c
Author: Mark Reynolds <mreynolds(a)redhat.com>
Date: Wed Nov 20 11:14:32 2013 -0500
Revert "Ticket 47599 - Reduce lock scope in retro changelog plug-in"
Wrong branch was pushed.
This reverts commit d708fb290cf5d9be5efe6fd1096f63014ed265d3.
diff --git a/ldap/servers/plugins/retrocl/retrocl.c b/ldap/servers/plugins/retrocl/retrocl.c
index b0d0dfd..141cfd2 100644
--- a/ldap/servers/plugins/retrocl/retrocl.c
+++ b/ldap/servers/plugins/retrocl/retrocl.c
@@ -482,8 +482,6 @@ retrocl_plugin_init(Slapi_PBlock *pb)
rc= slapi_register_plugin_ext("internalpostoperation", 1 /* Enabled */, "retrocl_internalpostop_init", retrocl_internalpostop_init, "Retrocl internal postoperation plugin", NULL, identity, precedence);
}
- retrocl_internal_cn = slapi_counter_new();
- retrocl_first_cn = slapi_counter_new();
retrocl_internal_lock = PR_NewLock();
if (retrocl_internal_lock == NULL) return -1;
}
diff --git a/ldap/servers/plugins/retrocl/retrocl.h b/ldap/servers/plugins/retrocl/retrocl.h
index e93a454..214f3af 100644
--- a/ldap/servers/plugins/retrocl/retrocl.h
+++ b/ldap/servers/plugins/retrocl/retrocl.h
@@ -57,7 +57,7 @@
/* max len of a long (2^64), represented as a string, including null byte */
#define CNUMSTR_LEN 21
-typedef PRUint64 changeNumber;
+typedef unsigned long changeNumber;
typedef struct _cnum_result_t {
int crt_nentries; /* number of entries returned from search */
@@ -131,8 +131,6 @@ extern const char *attr_nsuniqueid;
extern const char *attr_isreplicated;
extern PRLock *retrocl_internal_lock;
-extern Slapi_Counter *retrocl_internal_cn;
-extern Slapi_Counter *retrocl_first_cn;
/* Functions */
diff --git a/ldap/servers/plugins/retrocl/retrocl_cn.c b/ldap/servers/plugins/retrocl/retrocl_cn.c
index 6923856..d2b15a4 100644
--- a/ldap/servers/plugins/retrocl/retrocl_cn.c
+++ b/ldap/servers/plugins/retrocl/retrocl_cn.c
@@ -43,8 +43,8 @@
#include "retrocl.h"
-Slapi_Counter *retrocl_internal_cn;
-Slapi_Counter *retrocl_first_cn;
+static changeNumber retrocl_internal_cn = 0;
+static changeNumber retrocl_first_cn = 0;
/*
* Function: a2changeNumber
@@ -86,31 +86,36 @@ handle_cnum_entry( Slapi_Entry *e, void *callback_data )
cr->cr_time = NULL;
if ( NULL != e ) {
- Slapi_Attr *chattr = NULL;
- sval = NULL;
- value = NULL;
- if ( slapi_entry_attr_find( e, attr_changenumber, &chattr ) == 0 ) {
- slapi_attr_first_value( chattr,&sval );
- if ( NULL != sval ) {
- value = slapi_value_get_berval ( sval );
- if( NULL != value && NULL != value->bv_val && '\0' != value->bv_val[0]) {
- cr->cr_cnum = a2changeNumber( value->bv_val );
- }
- }
- }
- chattr = NULL;
- sval = NULL;
- value = NULL;
-
- if ( slapi_entry_attr_find( e, attr_changetime, &chattr ) == 0 ) {
- slapi_attr_first_value( chattr,&sval );
- if ( NULL != sval) {
- value = slapi_value_get_berval ( sval );
- if (NULL != value && NULL != value->bv_val && '\0' != value->bv_val[0]) {
- cr->cr_time = slapi_ch_strdup( value->bv_val );
- }
- }
- }
+ Slapi_Attr *chattr = NULL;
+ sval = NULL;
+ value = NULL;
+ if ( slapi_entry_attr_find( e, attr_changenumber, &chattr ) == 0 ) {
+ slapi_attr_first_value( chattr,&sval );
+ if ( NULL != sval ) {
+ value = slapi_value_get_berval ( sval );
+ if( NULL != value && NULL != value->bv_val &&
+ '\0' != value->bv_val[0]) {
+ cr->cr_cnum = a2changeNumber( value->bv_val );
+ }
+ }
+ }
+ chattr = NULL;
+ sval = NULL;
+ value = NULL;
+
+ chattr = NULL;
+ sval = NULL;
+ value = NULL;
+ if ( slapi_entry_attr_find( e, attr_changetime, &chattr ) == 0 ) {
+ slapi_attr_first_value( chattr,&sval );
+ if ( NULL != sval) {
+ value = slapi_value_get_berval ( sval );
+ if (NULL != value && NULL != value->bv_val &&
+ '\0' != value->bv_val[0]) {
+ cr->cr_time = slapi_ch_strdup( value->bv_val );
+ }
+ }
+ }
}
return 0;
}
@@ -158,7 +163,7 @@ int retrocl_get_changenumbers(void)
NULL,NULL,0,&cr,NULL,handle_cnum_result,
handle_cnum_entry, NULL);
- slapi_counter_set_value(retrocl_first_cn, cr.cr_cnum);
+ retrocl_first_cn = cr.cr_cnum;
slapi_ch_free(( void **) &cr.cr_time );
@@ -167,11 +172,11 @@ int retrocl_get_changenumbers(void)
NULL,NULL,0,&cr,NULL,handle_cnum_result,
handle_cnum_entry, NULL);
- slapi_counter_set_value(retrocl_internal_cn,cr.cr_cnum);
+ retrocl_internal_cn = cr.cr_cnum;
slapi_log_error(SLAPI_LOG_PLUGIN,"retrocl","Got changenumbers %lu and %lu\n",
- slapi_counter_get_value(retrocl_first_cn),
- slapi_counter_get_value(retrocl_internal_cn));
+ retrocl_first_cn,
+ retrocl_internal_cn);
slapi_ch_free(( void **) &cr.cr_time );
@@ -195,10 +200,10 @@ time_t retrocl_getchangetime( int type, int *err )
time_t ret;
if ( type != SLAPI_SEQ_FIRST && type != SLAPI_SEQ_LAST ) {
- if ( err != NULL ) {
- *err = -1;
- }
- return NO_TIME;
+ if ( err != NULL ) {
+ *err = -1;
+ }
+ return NO_TIME;
}
memset( &cr, '\0', sizeof( cnumRet ));
slapi_seq_callback( RETROCL_CHANGELOG_DN, type,
@@ -208,13 +213,13 @@ time_t retrocl_getchangetime( int type, int *err )
handle_cnum_result, handle_cnum_entry, NULL );
if ( err != NULL ) {
- *err = cr.cr_lderr;
+ *err = cr.cr_lderr;
}
if ( NULL == cr.cr_time ) {
- ret = NO_TIME;
+ ret = NO_TIME;
} else {
- ret = parse_localTime( cr.cr_time );
+ ret = parse_localTime( cr.cr_time );
}
slapi_ch_free(( void **) &cr.cr_time );
return ret;
@@ -233,8 +238,10 @@ time_t retrocl_getchangetime( int type, int *err )
void retrocl_forget_changenumbers(void)
{
- slapi_counter_set_value(retrocl_first_cn, 0);
- slapi_counter_set_value(retrocl_internal_cn, 0);
+ PR_Lock(retrocl_internal_lock);
+ retrocl_first_cn = 0;
+ retrocl_internal_cn = 0;
+ PR_Unlock(retrocl_internal_lock);
}
/*
@@ -250,7 +257,11 @@ void retrocl_forget_changenumbers(void)
changeNumber retrocl_get_first_changenumber(void)
{
- return (changeNumber)slapi_counter_get_value(retrocl_first_cn);
+ changeNumber cn;
+ PR_Lock(retrocl_internal_lock);
+ cn = retrocl_first_cn;
+ PR_Unlock(retrocl_internal_lock);
+ return cn;
}
/*
@@ -266,7 +277,9 @@ changeNumber retrocl_get_first_changenumber(void)
void retrocl_set_first_changenumber(changeNumber cn)
{
- slapi_counter_set_value(retrocl_first_cn, cn);
+ PR_Lock(retrocl_internal_lock);
+ retrocl_first_cn = cn;
+ PR_Unlock(retrocl_internal_lock);
}
@@ -282,8 +295,12 @@ void retrocl_set_first_changenumber(changeNumber cn)
*/
changeNumber retrocl_get_last_changenumber(void)
-{
- return (changeNumber)slapi_counter_get_value(retrocl_internal_cn);
+{
+ changeNumber cn;
+ PR_Lock(retrocl_internal_lock);
+ cn = retrocl_internal_cn;
+ PR_Unlock(retrocl_internal_lock);
+ return cn;
}
/*
@@ -291,7 +308,7 @@ changeNumber retrocl_get_last_changenumber(void)
*
* Returns: none
*
- * Arguments: none
+ * Arguments: none, lock must be held
*
* Description: NOTE! MUST BE PRECEEDED BY retrocl_assign_changenumber
*
@@ -299,8 +316,8 @@ changeNumber retrocl_get_last_changenumber(void)
void retrocl_commit_changenumber(void)
{
- if ( slapi_counter_get_value(retrocl_first_cn) == 0) {
- slapi_counter_set_value(retrocl_first_cn, slapi_counter_get_value(retrocl_internal_cn));
+ if ( retrocl_first_cn == 0) {
+ retrocl_first_cn = retrocl_internal_cn;
}
}
@@ -309,7 +326,7 @@ void retrocl_commit_changenumber(void)
*
* Returns: none
*
- * Arguments: none
+ * Arguments: none, lock must be held
*
* Description: NOTE! MUST BE PRECEEDED BY retrocl_assign_changenumber
*
@@ -317,7 +334,7 @@ void retrocl_commit_changenumber(void)
void retrocl_release_changenumber(void)
{
- slapi_counter_decrement(retrocl_internal_cn);
+ retrocl_internal_cn--;
}
/*
@@ -345,8 +362,10 @@ int retrocl_update_lastchangenumber(void)
NULL,NULL,0,&cr,NULL,handle_cnum_result,
handle_cnum_entry, NULL);
- slapi_counter_set_value(retrocl_internal_cn, cr.cr_cnum);
- slapi_log_error(SLAPI_LOG_PLUGIN,"retrocl","Refetched last changenumber = %lu \n", cr.cr_cnum);
+
+ retrocl_internal_cn = cr.cr_cnum;
+ slapi_log_error(SLAPI_LOG_PLUGIN,"retrocl","Refetched last changenumber = %lu \n",
+ retrocl_internal_cn);
slapi_ch_free(( void **) &cr.cr_time );
@@ -375,7 +394,7 @@ changeNumber retrocl_assign_changenumber(void)
* validity of the internal assignment of retrocl_internal_cn
* we had from the startup */
- if(slapi_counter_get_value(retrocl_internal_cn) <= slapi_counter_get_value(retrocl_first_cn)){
+ if(retrocl_internal_cn <= retrocl_first_cn){
/* the numbers have become out of sync - retrocl_get_changenumbers
* gets called only once during startup and it may have had a problem
* getting the last changenumber.
@@ -386,8 +405,7 @@ changeNumber retrocl_assign_changenumber(void)
retrocl_update_lastchangenumber();
}
- slapi_counter_increment(retrocl_internal_cn);
- cn = slapi_counter_get_value(retrocl_internal_cn);
-
+ retrocl_internal_cn++;
+ cn = retrocl_internal_cn;
return cn;
}
10 years, 5 months
Branch '389-ds-base-1.3.2' - ldap/servers
by Mark Reynolds
ldap/servers/plugins/retrocl/retrocl.c | 2
ldap/servers/plugins/retrocl/retrocl.h | 4
ldap/servers/plugins/retrocl/retrocl_cn.c | 128 +++++++++++++++++-------------
3 files changed, 74 insertions(+), 60 deletions(-)
New commits:
commit d197ecab2216560d1ca6a0e245b5f3f1dd5d53fb
Author: Mark Reynolds <mreynolds(a)redhat.com>
Date: Wed Nov 20 11:15:18 2013 -0500
Revert "Ticket 47599 - Reduce lock scope in retro changelog plug-in"
Wrong branch was pushed.
This reverts commit 66811be66f1ead1432bdbc0c540676cf8bd66985.
diff --git a/ldap/servers/plugins/retrocl/retrocl.c b/ldap/servers/plugins/retrocl/retrocl.c
index b0d0dfd..141cfd2 100644
--- a/ldap/servers/plugins/retrocl/retrocl.c
+++ b/ldap/servers/plugins/retrocl/retrocl.c
@@ -482,8 +482,6 @@ retrocl_plugin_init(Slapi_PBlock *pb)
rc= slapi_register_plugin_ext("internalpostoperation", 1 /* Enabled */, "retrocl_internalpostop_init", retrocl_internalpostop_init, "Retrocl internal postoperation plugin", NULL, identity, precedence);
}
- retrocl_internal_cn = slapi_counter_new();
- retrocl_first_cn = slapi_counter_new();
retrocl_internal_lock = PR_NewLock();
if (retrocl_internal_lock == NULL) return -1;
}
diff --git a/ldap/servers/plugins/retrocl/retrocl.h b/ldap/servers/plugins/retrocl/retrocl.h
index e93a454..214f3af 100644
--- a/ldap/servers/plugins/retrocl/retrocl.h
+++ b/ldap/servers/plugins/retrocl/retrocl.h
@@ -57,7 +57,7 @@
/* max len of a long (2^64), represented as a string, including null byte */
#define CNUMSTR_LEN 21
-typedef PRUint64 changeNumber;
+typedef unsigned long changeNumber;
typedef struct _cnum_result_t {
int crt_nentries; /* number of entries returned from search */
@@ -131,8 +131,6 @@ extern const char *attr_nsuniqueid;
extern const char *attr_isreplicated;
extern PRLock *retrocl_internal_lock;
-extern Slapi_Counter *retrocl_internal_cn;
-extern Slapi_Counter *retrocl_first_cn;
/* Functions */
diff --git a/ldap/servers/plugins/retrocl/retrocl_cn.c b/ldap/servers/plugins/retrocl/retrocl_cn.c
index 6923856..d2b15a4 100644
--- a/ldap/servers/plugins/retrocl/retrocl_cn.c
+++ b/ldap/servers/plugins/retrocl/retrocl_cn.c
@@ -43,8 +43,8 @@
#include "retrocl.h"
-Slapi_Counter *retrocl_internal_cn;
-Slapi_Counter *retrocl_first_cn;
+static changeNumber retrocl_internal_cn = 0;
+static changeNumber retrocl_first_cn = 0;
/*
* Function: a2changeNumber
@@ -86,31 +86,36 @@ handle_cnum_entry( Slapi_Entry *e, void *callback_data )
cr->cr_time = NULL;
if ( NULL != e ) {
- Slapi_Attr *chattr = NULL;
- sval = NULL;
- value = NULL;
- if ( slapi_entry_attr_find( e, attr_changenumber, &chattr ) == 0 ) {
- slapi_attr_first_value( chattr,&sval );
- if ( NULL != sval ) {
- value = slapi_value_get_berval ( sval );
- if( NULL != value && NULL != value->bv_val && '\0' != value->bv_val[0]) {
- cr->cr_cnum = a2changeNumber( value->bv_val );
- }
- }
- }
- chattr = NULL;
- sval = NULL;
- value = NULL;
-
- if ( slapi_entry_attr_find( e, attr_changetime, &chattr ) == 0 ) {
- slapi_attr_first_value( chattr,&sval );
- if ( NULL != sval) {
- value = slapi_value_get_berval ( sval );
- if (NULL != value && NULL != value->bv_val && '\0' != value->bv_val[0]) {
- cr->cr_time = slapi_ch_strdup( value->bv_val );
- }
- }
- }
+ Slapi_Attr *chattr = NULL;
+ sval = NULL;
+ value = NULL;
+ if ( slapi_entry_attr_find( e, attr_changenumber, &chattr ) == 0 ) {
+ slapi_attr_first_value( chattr,&sval );
+ if ( NULL != sval ) {
+ value = slapi_value_get_berval ( sval );
+ if( NULL != value && NULL != value->bv_val &&
+ '\0' != value->bv_val[0]) {
+ cr->cr_cnum = a2changeNumber( value->bv_val );
+ }
+ }
+ }
+ chattr = NULL;
+ sval = NULL;
+ value = NULL;
+
+ chattr = NULL;
+ sval = NULL;
+ value = NULL;
+ if ( slapi_entry_attr_find( e, attr_changetime, &chattr ) == 0 ) {
+ slapi_attr_first_value( chattr,&sval );
+ if ( NULL != sval) {
+ value = slapi_value_get_berval ( sval );
+ if (NULL != value && NULL != value->bv_val &&
+ '\0' != value->bv_val[0]) {
+ cr->cr_time = slapi_ch_strdup( value->bv_val );
+ }
+ }
+ }
}
return 0;
}
@@ -158,7 +163,7 @@ int retrocl_get_changenumbers(void)
NULL,NULL,0,&cr,NULL,handle_cnum_result,
handle_cnum_entry, NULL);
- slapi_counter_set_value(retrocl_first_cn, cr.cr_cnum);
+ retrocl_first_cn = cr.cr_cnum;
slapi_ch_free(( void **) &cr.cr_time );
@@ -167,11 +172,11 @@ int retrocl_get_changenumbers(void)
NULL,NULL,0,&cr,NULL,handle_cnum_result,
handle_cnum_entry, NULL);
- slapi_counter_set_value(retrocl_internal_cn,cr.cr_cnum);
+ retrocl_internal_cn = cr.cr_cnum;
slapi_log_error(SLAPI_LOG_PLUGIN,"retrocl","Got changenumbers %lu and %lu\n",
- slapi_counter_get_value(retrocl_first_cn),
- slapi_counter_get_value(retrocl_internal_cn));
+ retrocl_first_cn,
+ retrocl_internal_cn);
slapi_ch_free(( void **) &cr.cr_time );
@@ -195,10 +200,10 @@ time_t retrocl_getchangetime( int type, int *err )
time_t ret;
if ( type != SLAPI_SEQ_FIRST && type != SLAPI_SEQ_LAST ) {
- if ( err != NULL ) {
- *err = -1;
- }
- return NO_TIME;
+ if ( err != NULL ) {
+ *err = -1;
+ }
+ return NO_TIME;
}
memset( &cr, '\0', sizeof( cnumRet ));
slapi_seq_callback( RETROCL_CHANGELOG_DN, type,
@@ -208,13 +213,13 @@ time_t retrocl_getchangetime( int type, int *err )
handle_cnum_result, handle_cnum_entry, NULL );
if ( err != NULL ) {
- *err = cr.cr_lderr;
+ *err = cr.cr_lderr;
}
if ( NULL == cr.cr_time ) {
- ret = NO_TIME;
+ ret = NO_TIME;
} else {
- ret = parse_localTime( cr.cr_time );
+ ret = parse_localTime( cr.cr_time );
}
slapi_ch_free(( void **) &cr.cr_time );
return ret;
@@ -233,8 +238,10 @@ time_t retrocl_getchangetime( int type, int *err )
void retrocl_forget_changenumbers(void)
{
- slapi_counter_set_value(retrocl_first_cn, 0);
- slapi_counter_set_value(retrocl_internal_cn, 0);
+ PR_Lock(retrocl_internal_lock);
+ retrocl_first_cn = 0;
+ retrocl_internal_cn = 0;
+ PR_Unlock(retrocl_internal_lock);
}
/*
@@ -250,7 +257,11 @@ void retrocl_forget_changenumbers(void)
changeNumber retrocl_get_first_changenumber(void)
{
- return (changeNumber)slapi_counter_get_value(retrocl_first_cn);
+ changeNumber cn;
+ PR_Lock(retrocl_internal_lock);
+ cn = retrocl_first_cn;
+ PR_Unlock(retrocl_internal_lock);
+ return cn;
}
/*
@@ -266,7 +277,9 @@ changeNumber retrocl_get_first_changenumber(void)
void retrocl_set_first_changenumber(changeNumber cn)
{
- slapi_counter_set_value(retrocl_first_cn, cn);
+ PR_Lock(retrocl_internal_lock);
+ retrocl_first_cn = cn;
+ PR_Unlock(retrocl_internal_lock);
}
@@ -282,8 +295,12 @@ void retrocl_set_first_changenumber(changeNumber cn)
*/
changeNumber retrocl_get_last_changenumber(void)
-{
- return (changeNumber)slapi_counter_get_value(retrocl_internal_cn);
+{
+ changeNumber cn;
+ PR_Lock(retrocl_internal_lock);
+ cn = retrocl_internal_cn;
+ PR_Unlock(retrocl_internal_lock);
+ return cn;
}
/*
@@ -291,7 +308,7 @@ changeNumber retrocl_get_last_changenumber(void)
*
* Returns: none
*
- * Arguments: none
+ * Arguments: none, lock must be held
*
* Description: NOTE! MUST BE PRECEEDED BY retrocl_assign_changenumber
*
@@ -299,8 +316,8 @@ changeNumber retrocl_get_last_changenumber(void)
void retrocl_commit_changenumber(void)
{
- if ( slapi_counter_get_value(retrocl_first_cn) == 0) {
- slapi_counter_set_value(retrocl_first_cn, slapi_counter_get_value(retrocl_internal_cn));
+ if ( retrocl_first_cn == 0) {
+ retrocl_first_cn = retrocl_internal_cn;
}
}
@@ -309,7 +326,7 @@ void retrocl_commit_changenumber(void)
*
* Returns: none
*
- * Arguments: none
+ * Arguments: none, lock must be held
*
* Description: NOTE! MUST BE PRECEEDED BY retrocl_assign_changenumber
*
@@ -317,7 +334,7 @@ void retrocl_commit_changenumber(void)
void retrocl_release_changenumber(void)
{
- slapi_counter_decrement(retrocl_internal_cn);
+ retrocl_internal_cn--;
}
/*
@@ -345,8 +362,10 @@ int retrocl_update_lastchangenumber(void)
NULL,NULL,0,&cr,NULL,handle_cnum_result,
handle_cnum_entry, NULL);
- slapi_counter_set_value(retrocl_internal_cn, cr.cr_cnum);
- slapi_log_error(SLAPI_LOG_PLUGIN,"retrocl","Refetched last changenumber = %lu \n", cr.cr_cnum);
+
+ retrocl_internal_cn = cr.cr_cnum;
+ slapi_log_error(SLAPI_LOG_PLUGIN,"retrocl","Refetched last changenumber = %lu \n",
+ retrocl_internal_cn);
slapi_ch_free(( void **) &cr.cr_time );
@@ -375,7 +394,7 @@ changeNumber retrocl_assign_changenumber(void)
* validity of the internal assignment of retrocl_internal_cn
* we had from the startup */
- if(slapi_counter_get_value(retrocl_internal_cn) <= slapi_counter_get_value(retrocl_first_cn)){
+ if(retrocl_internal_cn <= retrocl_first_cn){
/* the numbers have become out of sync - retrocl_get_changenumbers
* gets called only once during startup and it may have had a problem
* getting the last changenumber.
@@ -386,8 +405,7 @@ changeNumber retrocl_assign_changenumber(void)
retrocl_update_lastchangenumber();
}
- slapi_counter_increment(retrocl_internal_cn);
- cn = slapi_counter_get_value(retrocl_internal_cn);
-
+ retrocl_internal_cn++;
+ cn = retrocl_internal_cn;
return cn;
}
10 years, 5 months
Branch '389-ds-base-1.3.1' - ldap/servers
by Mark Reynolds
ldap/servers/plugins/retrocl/retrocl.c | 2
ldap/servers/plugins/retrocl/retrocl.h | 4
ldap/servers/plugins/retrocl/retrocl_cn.c | 128 +++++++++++++++++-------------
3 files changed, 74 insertions(+), 60 deletions(-)
New commits:
commit bb658b8f5edb9d927ad50d61ddeb87b410389467
Author: Mark Reynolds <mreynolds(a)redhat.com>
Date: Wed Nov 20 11:15:44 2013 -0500
Revert "Ticket 47599 - Reduce lock scope in retro changelog plug-in"
Wrong branch was pushed.
This reverts commit ded326633caca3de7092d678a521bf48d568e6f9.
diff --git a/ldap/servers/plugins/retrocl/retrocl.c b/ldap/servers/plugins/retrocl/retrocl.c
index c27b003..90c3455 100644
--- a/ldap/servers/plugins/retrocl/retrocl.c
+++ b/ldap/servers/plugins/retrocl/retrocl.c
@@ -466,8 +466,6 @@ retrocl_plugin_init(Slapi_PBlock *pb)
rc= slapi_register_plugin_ext("internalpostoperation", 1 /* Enabled */, "retrocl_internalpostop_init", retrocl_internalpostop_init, "Retrocl internal postoperation plugin", NULL, identity, precedence);
}
- retrocl_internal_cn = slapi_counter_new();
- retrocl_first_cn = slapi_counter_new();
retrocl_internal_lock = PR_NewLock();
if (retrocl_internal_lock == NULL) return -1;
}
diff --git a/ldap/servers/plugins/retrocl/retrocl.h b/ldap/servers/plugins/retrocl/retrocl.h
index 8b7f14d..276912b 100644
--- a/ldap/servers/plugins/retrocl/retrocl.h
+++ b/ldap/servers/plugins/retrocl/retrocl.h
@@ -57,7 +57,7 @@
/* max len of a long (2^64), represented as a string, including null byte */
#define CNUMSTR_LEN 21
-typedef PRUint64 changeNumber;
+typedef unsigned long changeNumber;
typedef struct _cnum_result_t {
int crt_nentries; /* number of entries returned from search */
@@ -130,8 +130,6 @@ extern const char *attr_nsuniqueid;
extern const char *attr_isreplicated;
extern PRLock *retrocl_internal_lock;
-extern Slapi_Counter *retrocl_internal_cn;
-extern Slapi_Counter *retrocl_first_cn;
/* Functions */
diff --git a/ldap/servers/plugins/retrocl/retrocl_cn.c b/ldap/servers/plugins/retrocl/retrocl_cn.c
index 6923856..d2b15a4 100644
--- a/ldap/servers/plugins/retrocl/retrocl_cn.c
+++ b/ldap/servers/plugins/retrocl/retrocl_cn.c
@@ -43,8 +43,8 @@
#include "retrocl.h"
-Slapi_Counter *retrocl_internal_cn;
-Slapi_Counter *retrocl_first_cn;
+static changeNumber retrocl_internal_cn = 0;
+static changeNumber retrocl_first_cn = 0;
/*
* Function: a2changeNumber
@@ -86,31 +86,36 @@ handle_cnum_entry( Slapi_Entry *e, void *callback_data )
cr->cr_time = NULL;
if ( NULL != e ) {
- Slapi_Attr *chattr = NULL;
- sval = NULL;
- value = NULL;
- if ( slapi_entry_attr_find( e, attr_changenumber, &chattr ) == 0 ) {
- slapi_attr_first_value( chattr,&sval );
- if ( NULL != sval ) {
- value = slapi_value_get_berval ( sval );
- if( NULL != value && NULL != value->bv_val && '\0' != value->bv_val[0]) {
- cr->cr_cnum = a2changeNumber( value->bv_val );
- }
- }
- }
- chattr = NULL;
- sval = NULL;
- value = NULL;
-
- if ( slapi_entry_attr_find( e, attr_changetime, &chattr ) == 0 ) {
- slapi_attr_first_value( chattr,&sval );
- if ( NULL != sval) {
- value = slapi_value_get_berval ( sval );
- if (NULL != value && NULL != value->bv_val && '\0' != value->bv_val[0]) {
- cr->cr_time = slapi_ch_strdup( value->bv_val );
- }
- }
- }
+ Slapi_Attr *chattr = NULL;
+ sval = NULL;
+ value = NULL;
+ if ( slapi_entry_attr_find( e, attr_changenumber, &chattr ) == 0 ) {
+ slapi_attr_first_value( chattr,&sval );
+ if ( NULL != sval ) {
+ value = slapi_value_get_berval ( sval );
+ if( NULL != value && NULL != value->bv_val &&
+ '\0' != value->bv_val[0]) {
+ cr->cr_cnum = a2changeNumber( value->bv_val );
+ }
+ }
+ }
+ chattr = NULL;
+ sval = NULL;
+ value = NULL;
+
+ chattr = NULL;
+ sval = NULL;
+ value = NULL;
+ if ( slapi_entry_attr_find( e, attr_changetime, &chattr ) == 0 ) {
+ slapi_attr_first_value( chattr,&sval );
+ if ( NULL != sval) {
+ value = slapi_value_get_berval ( sval );
+ if (NULL != value && NULL != value->bv_val &&
+ '\0' != value->bv_val[0]) {
+ cr->cr_time = slapi_ch_strdup( value->bv_val );
+ }
+ }
+ }
}
return 0;
}
@@ -158,7 +163,7 @@ int retrocl_get_changenumbers(void)
NULL,NULL,0,&cr,NULL,handle_cnum_result,
handle_cnum_entry, NULL);
- slapi_counter_set_value(retrocl_first_cn, cr.cr_cnum);
+ retrocl_first_cn = cr.cr_cnum;
slapi_ch_free(( void **) &cr.cr_time );
@@ -167,11 +172,11 @@ int retrocl_get_changenumbers(void)
NULL,NULL,0,&cr,NULL,handle_cnum_result,
handle_cnum_entry, NULL);
- slapi_counter_set_value(retrocl_internal_cn,cr.cr_cnum);
+ retrocl_internal_cn = cr.cr_cnum;
slapi_log_error(SLAPI_LOG_PLUGIN,"retrocl","Got changenumbers %lu and %lu\n",
- slapi_counter_get_value(retrocl_first_cn),
- slapi_counter_get_value(retrocl_internal_cn));
+ retrocl_first_cn,
+ retrocl_internal_cn);
slapi_ch_free(( void **) &cr.cr_time );
@@ -195,10 +200,10 @@ time_t retrocl_getchangetime( int type, int *err )
time_t ret;
if ( type != SLAPI_SEQ_FIRST && type != SLAPI_SEQ_LAST ) {
- if ( err != NULL ) {
- *err = -1;
- }
- return NO_TIME;
+ if ( err != NULL ) {
+ *err = -1;
+ }
+ return NO_TIME;
}
memset( &cr, '\0', sizeof( cnumRet ));
slapi_seq_callback( RETROCL_CHANGELOG_DN, type,
@@ -208,13 +213,13 @@ time_t retrocl_getchangetime( int type, int *err )
handle_cnum_result, handle_cnum_entry, NULL );
if ( err != NULL ) {
- *err = cr.cr_lderr;
+ *err = cr.cr_lderr;
}
if ( NULL == cr.cr_time ) {
- ret = NO_TIME;
+ ret = NO_TIME;
} else {
- ret = parse_localTime( cr.cr_time );
+ ret = parse_localTime( cr.cr_time );
}
slapi_ch_free(( void **) &cr.cr_time );
return ret;
@@ -233,8 +238,10 @@ time_t retrocl_getchangetime( int type, int *err )
void retrocl_forget_changenumbers(void)
{
- slapi_counter_set_value(retrocl_first_cn, 0);
- slapi_counter_set_value(retrocl_internal_cn, 0);
+ PR_Lock(retrocl_internal_lock);
+ retrocl_first_cn = 0;
+ retrocl_internal_cn = 0;
+ PR_Unlock(retrocl_internal_lock);
}
/*
@@ -250,7 +257,11 @@ void retrocl_forget_changenumbers(void)
changeNumber retrocl_get_first_changenumber(void)
{
- return (changeNumber)slapi_counter_get_value(retrocl_first_cn);
+ changeNumber cn;
+ PR_Lock(retrocl_internal_lock);
+ cn = retrocl_first_cn;
+ PR_Unlock(retrocl_internal_lock);
+ return cn;
}
/*
@@ -266,7 +277,9 @@ changeNumber retrocl_get_first_changenumber(void)
void retrocl_set_first_changenumber(changeNumber cn)
{
- slapi_counter_set_value(retrocl_first_cn, cn);
+ PR_Lock(retrocl_internal_lock);
+ retrocl_first_cn = cn;
+ PR_Unlock(retrocl_internal_lock);
}
@@ -282,8 +295,12 @@ void retrocl_set_first_changenumber(changeNumber cn)
*/
changeNumber retrocl_get_last_changenumber(void)
-{
- return (changeNumber)slapi_counter_get_value(retrocl_internal_cn);
+{
+ changeNumber cn;
+ PR_Lock(retrocl_internal_lock);
+ cn = retrocl_internal_cn;
+ PR_Unlock(retrocl_internal_lock);
+ return cn;
}
/*
@@ -291,7 +308,7 @@ changeNumber retrocl_get_last_changenumber(void)
*
* Returns: none
*
- * Arguments: none
+ * Arguments: none, lock must be held
*
* Description: NOTE! MUST BE PRECEEDED BY retrocl_assign_changenumber
*
@@ -299,8 +316,8 @@ changeNumber retrocl_get_last_changenumber(void)
void retrocl_commit_changenumber(void)
{
- if ( slapi_counter_get_value(retrocl_first_cn) == 0) {
- slapi_counter_set_value(retrocl_first_cn, slapi_counter_get_value(retrocl_internal_cn));
+ if ( retrocl_first_cn == 0) {
+ retrocl_first_cn = retrocl_internal_cn;
}
}
@@ -309,7 +326,7 @@ void retrocl_commit_changenumber(void)
*
* Returns: none
*
- * Arguments: none
+ * Arguments: none, lock must be held
*
* Description: NOTE! MUST BE PRECEEDED BY retrocl_assign_changenumber
*
@@ -317,7 +334,7 @@ void retrocl_commit_changenumber(void)
void retrocl_release_changenumber(void)
{
- slapi_counter_decrement(retrocl_internal_cn);
+ retrocl_internal_cn--;
}
/*
@@ -345,8 +362,10 @@ int retrocl_update_lastchangenumber(void)
NULL,NULL,0,&cr,NULL,handle_cnum_result,
handle_cnum_entry, NULL);
- slapi_counter_set_value(retrocl_internal_cn, cr.cr_cnum);
- slapi_log_error(SLAPI_LOG_PLUGIN,"retrocl","Refetched last changenumber = %lu \n", cr.cr_cnum);
+
+ retrocl_internal_cn = cr.cr_cnum;
+ slapi_log_error(SLAPI_LOG_PLUGIN,"retrocl","Refetched last changenumber = %lu \n",
+ retrocl_internal_cn);
slapi_ch_free(( void **) &cr.cr_time );
@@ -375,7 +394,7 @@ changeNumber retrocl_assign_changenumber(void)
* validity of the internal assignment of retrocl_internal_cn
* we had from the startup */
- if(slapi_counter_get_value(retrocl_internal_cn) <= slapi_counter_get_value(retrocl_first_cn)){
+ if(retrocl_internal_cn <= retrocl_first_cn){
/* the numbers have become out of sync - retrocl_get_changenumbers
* gets called only once during startup and it may have had a problem
* getting the last changenumber.
@@ -386,8 +405,7 @@ changeNumber retrocl_assign_changenumber(void)
retrocl_update_lastchangenumber();
}
- slapi_counter_increment(retrocl_internal_cn);
- cn = slapi_counter_get_value(retrocl_internal_cn);
-
+ retrocl_internal_cn++;
+ cn = retrocl_internal_cn;
return cn;
}
10 years, 5 months
Branch '389-ds-base-1.3.1' - ldap/servers
by Mark Reynolds
ldap/servers/plugins/retrocl/retrocl.c | 2
ldap/servers/plugins/retrocl/retrocl.h | 4
ldap/servers/plugins/retrocl/retrocl_cn.c | 128 ++++++++++++------------------
3 files changed, 60 insertions(+), 74 deletions(-)
New commits:
commit ded326633caca3de7092d678a521bf48d568e6f9
Author: Mark Reynolds <mreynolds(a)redhat.com>
Date: Tue Nov 19 15:31:27 2013 -0500
Ticket 47599 - Reduce lock scope in retro changelog plug-in
Description: Change the "changenumber" type to PRUint64. All changes to the static
changenumbers are now atomic by use of slapi_counters.
We still need to do the locking in retrocl_po.c as we need to
serialize the actual updates.
https://fedorahosted.org/389/ticket/47599
Reviewed by: richm(Thanks!!)
(cherry picked from commit d708fb290cf5d9be5efe6fd1096f63014ed265d3)
diff --git a/ldap/servers/plugins/retrocl/retrocl.c b/ldap/servers/plugins/retrocl/retrocl.c
index 90c3455..c27b003 100644
--- a/ldap/servers/plugins/retrocl/retrocl.c
+++ b/ldap/servers/plugins/retrocl/retrocl.c
@@ -466,6 +466,8 @@ retrocl_plugin_init(Slapi_PBlock *pb)
rc= slapi_register_plugin_ext("internalpostoperation", 1 /* Enabled */, "retrocl_internalpostop_init", retrocl_internalpostop_init, "Retrocl internal postoperation plugin", NULL, identity, precedence);
}
+ retrocl_internal_cn = slapi_counter_new();
+ retrocl_first_cn = slapi_counter_new();
retrocl_internal_lock = PR_NewLock();
if (retrocl_internal_lock == NULL) return -1;
}
diff --git a/ldap/servers/plugins/retrocl/retrocl.h b/ldap/servers/plugins/retrocl/retrocl.h
index 276912b..8b7f14d 100644
--- a/ldap/servers/plugins/retrocl/retrocl.h
+++ b/ldap/servers/plugins/retrocl/retrocl.h
@@ -57,7 +57,7 @@
/* max len of a long (2^64), represented as a string, including null byte */
#define CNUMSTR_LEN 21
-typedef unsigned long changeNumber;
+typedef PRUint64 changeNumber;
typedef struct _cnum_result_t {
int crt_nentries; /* number of entries returned from search */
@@ -130,6 +130,8 @@ extern const char *attr_nsuniqueid;
extern const char *attr_isreplicated;
extern PRLock *retrocl_internal_lock;
+extern Slapi_Counter *retrocl_internal_cn;
+extern Slapi_Counter *retrocl_first_cn;
/* Functions */
diff --git a/ldap/servers/plugins/retrocl/retrocl_cn.c b/ldap/servers/plugins/retrocl/retrocl_cn.c
index d2b15a4..6923856 100644
--- a/ldap/servers/plugins/retrocl/retrocl_cn.c
+++ b/ldap/servers/plugins/retrocl/retrocl_cn.c
@@ -43,8 +43,8 @@
#include "retrocl.h"
-static changeNumber retrocl_internal_cn = 0;
-static changeNumber retrocl_first_cn = 0;
+Slapi_Counter *retrocl_internal_cn;
+Slapi_Counter *retrocl_first_cn;
/*
* Function: a2changeNumber
@@ -86,36 +86,31 @@ handle_cnum_entry( Slapi_Entry *e, void *callback_data )
cr->cr_time = NULL;
if ( NULL != e ) {
- Slapi_Attr *chattr = NULL;
- sval = NULL;
- value = NULL;
- if ( slapi_entry_attr_find( e, attr_changenumber, &chattr ) == 0 ) {
- slapi_attr_first_value( chattr,&sval );
- if ( NULL != sval ) {
- value = slapi_value_get_berval ( sval );
- if( NULL != value && NULL != value->bv_val &&
- '\0' != value->bv_val[0]) {
- cr->cr_cnum = a2changeNumber( value->bv_val );
- }
- }
- }
- chattr = NULL;
- sval = NULL;
- value = NULL;
-
- chattr = NULL;
- sval = NULL;
- value = NULL;
- if ( slapi_entry_attr_find( e, attr_changetime, &chattr ) == 0 ) {
- slapi_attr_first_value( chattr,&sval );
- if ( NULL != sval) {
- value = slapi_value_get_berval ( sval );
- if (NULL != value && NULL != value->bv_val &&
- '\0' != value->bv_val[0]) {
- cr->cr_time = slapi_ch_strdup( value->bv_val );
- }
- }
- }
+ Slapi_Attr *chattr = NULL;
+ sval = NULL;
+ value = NULL;
+ if ( slapi_entry_attr_find( e, attr_changenumber, &chattr ) == 0 ) {
+ slapi_attr_first_value( chattr,&sval );
+ if ( NULL != sval ) {
+ value = slapi_value_get_berval ( sval );
+ if( NULL != value && NULL != value->bv_val && '\0' != value->bv_val[0]) {
+ cr->cr_cnum = a2changeNumber( value->bv_val );
+ }
+ }
+ }
+ chattr = NULL;
+ sval = NULL;
+ value = NULL;
+
+ if ( slapi_entry_attr_find( e, attr_changetime, &chattr ) == 0 ) {
+ slapi_attr_first_value( chattr,&sval );
+ if ( NULL != sval) {
+ value = slapi_value_get_berval ( sval );
+ if (NULL != value && NULL != value->bv_val && '\0' != value->bv_val[0]) {
+ cr->cr_time = slapi_ch_strdup( value->bv_val );
+ }
+ }
+ }
}
return 0;
}
@@ -163,7 +158,7 @@ int retrocl_get_changenumbers(void)
NULL,NULL,0,&cr,NULL,handle_cnum_result,
handle_cnum_entry, NULL);
- retrocl_first_cn = cr.cr_cnum;
+ slapi_counter_set_value(retrocl_first_cn, cr.cr_cnum);
slapi_ch_free(( void **) &cr.cr_time );
@@ -172,11 +167,11 @@ int retrocl_get_changenumbers(void)
NULL,NULL,0,&cr,NULL,handle_cnum_result,
handle_cnum_entry, NULL);
- retrocl_internal_cn = cr.cr_cnum;
+ slapi_counter_set_value(retrocl_internal_cn,cr.cr_cnum);
slapi_log_error(SLAPI_LOG_PLUGIN,"retrocl","Got changenumbers %lu and %lu\n",
- retrocl_first_cn,
- retrocl_internal_cn);
+ slapi_counter_get_value(retrocl_first_cn),
+ slapi_counter_get_value(retrocl_internal_cn));
slapi_ch_free(( void **) &cr.cr_time );
@@ -200,10 +195,10 @@ time_t retrocl_getchangetime( int type, int *err )
time_t ret;
if ( type != SLAPI_SEQ_FIRST && type != SLAPI_SEQ_LAST ) {
- if ( err != NULL ) {
- *err = -1;
- }
- return NO_TIME;
+ if ( err != NULL ) {
+ *err = -1;
+ }
+ return NO_TIME;
}
memset( &cr, '\0', sizeof( cnumRet ));
slapi_seq_callback( RETROCL_CHANGELOG_DN, type,
@@ -213,13 +208,13 @@ time_t retrocl_getchangetime( int type, int *err )
handle_cnum_result, handle_cnum_entry, NULL );
if ( err != NULL ) {
- *err = cr.cr_lderr;
+ *err = cr.cr_lderr;
}
if ( NULL == cr.cr_time ) {
- ret = NO_TIME;
+ ret = NO_TIME;
} else {
- ret = parse_localTime( cr.cr_time );
+ ret = parse_localTime( cr.cr_time );
}
slapi_ch_free(( void **) &cr.cr_time );
return ret;
@@ -238,10 +233,8 @@ time_t retrocl_getchangetime( int type, int *err )
void retrocl_forget_changenumbers(void)
{
- PR_Lock(retrocl_internal_lock);
- retrocl_first_cn = 0;
- retrocl_internal_cn = 0;
- PR_Unlock(retrocl_internal_lock);
+ slapi_counter_set_value(retrocl_first_cn, 0);
+ slapi_counter_set_value(retrocl_internal_cn, 0);
}
/*
@@ -257,11 +250,7 @@ void retrocl_forget_changenumbers(void)
changeNumber retrocl_get_first_changenumber(void)
{
- changeNumber cn;
- PR_Lock(retrocl_internal_lock);
- cn = retrocl_first_cn;
- PR_Unlock(retrocl_internal_lock);
- return cn;
+ return (changeNumber)slapi_counter_get_value(retrocl_first_cn);
}
/*
@@ -277,9 +266,7 @@ changeNumber retrocl_get_first_changenumber(void)
void retrocl_set_first_changenumber(changeNumber cn)
{
- PR_Lock(retrocl_internal_lock);
- retrocl_first_cn = cn;
- PR_Unlock(retrocl_internal_lock);
+ slapi_counter_set_value(retrocl_first_cn, cn);
}
@@ -295,12 +282,8 @@ void retrocl_set_first_changenumber(changeNumber cn)
*/
changeNumber retrocl_get_last_changenumber(void)
-{
- changeNumber cn;
- PR_Lock(retrocl_internal_lock);
- cn = retrocl_internal_cn;
- PR_Unlock(retrocl_internal_lock);
- return cn;
+{
+ return (changeNumber)slapi_counter_get_value(retrocl_internal_cn);
}
/*
@@ -308,7 +291,7 @@ changeNumber retrocl_get_last_changenumber(void)
*
* Returns: none
*
- * Arguments: none, lock must be held
+ * Arguments: none
*
* Description: NOTE! MUST BE PRECEEDED BY retrocl_assign_changenumber
*
@@ -316,8 +299,8 @@ changeNumber retrocl_get_last_changenumber(void)
void retrocl_commit_changenumber(void)
{
- if ( retrocl_first_cn == 0) {
- retrocl_first_cn = retrocl_internal_cn;
+ if ( slapi_counter_get_value(retrocl_first_cn) == 0) {
+ slapi_counter_set_value(retrocl_first_cn, slapi_counter_get_value(retrocl_internal_cn));
}
}
@@ -326,7 +309,7 @@ void retrocl_commit_changenumber(void)
*
* Returns: none
*
- * Arguments: none, lock must be held
+ * Arguments: none
*
* Description: NOTE! MUST BE PRECEEDED BY retrocl_assign_changenumber
*
@@ -334,7 +317,7 @@ void retrocl_commit_changenumber(void)
void retrocl_release_changenumber(void)
{
- retrocl_internal_cn--;
+ slapi_counter_decrement(retrocl_internal_cn);
}
/*
@@ -362,10 +345,8 @@ int retrocl_update_lastchangenumber(void)
NULL,NULL,0,&cr,NULL,handle_cnum_result,
handle_cnum_entry, NULL);
-
- retrocl_internal_cn = cr.cr_cnum;
- slapi_log_error(SLAPI_LOG_PLUGIN,"retrocl","Refetched last changenumber = %lu \n",
- retrocl_internal_cn);
+ slapi_counter_set_value(retrocl_internal_cn, cr.cr_cnum);
+ slapi_log_error(SLAPI_LOG_PLUGIN,"retrocl","Refetched last changenumber = %lu \n", cr.cr_cnum);
slapi_ch_free(( void **) &cr.cr_time );
@@ -394,7 +375,7 @@ changeNumber retrocl_assign_changenumber(void)
* validity of the internal assignment of retrocl_internal_cn
* we had from the startup */
- if(retrocl_internal_cn <= retrocl_first_cn){
+ if(slapi_counter_get_value(retrocl_internal_cn) <= slapi_counter_get_value(retrocl_first_cn)){
/* the numbers have become out of sync - retrocl_get_changenumbers
* gets called only once during startup and it may have had a problem
* getting the last changenumber.
@@ -405,7 +386,8 @@ changeNumber retrocl_assign_changenumber(void)
retrocl_update_lastchangenumber();
}
- retrocl_internal_cn++;
- cn = retrocl_internal_cn;
+ slapi_counter_increment(retrocl_internal_cn);
+ cn = slapi_counter_get_value(retrocl_internal_cn);
+
return cn;
}
10 years, 5 months
Branch '389-ds-base-1.3.2' - ldap/servers
by Mark Reynolds
ldap/servers/plugins/retrocl/retrocl.c | 2
ldap/servers/plugins/retrocl/retrocl.h | 4
ldap/servers/plugins/retrocl/retrocl_cn.c | 128 ++++++++++++------------------
3 files changed, 60 insertions(+), 74 deletions(-)
New commits:
commit 66811be66f1ead1432bdbc0c540676cf8bd66985
Author: Mark Reynolds <mreynolds(a)redhat.com>
Date: Tue Nov 19 15:31:27 2013 -0500
Ticket 47599 - Reduce lock scope in retro changelog plug-in
Description: Change the "changenumber" type to PRUint64. All changes to the static
changenumbers are now atomic by use of slapi_counters.
We still need to do the locking in retrocl_po.c as we need to
serialize the actual updates.
https://fedorahosted.org/389/ticket/47599
Reviewed by: richm(Thanks!!)
(cherry picked from commit d708fb290cf5d9be5efe6fd1096f63014ed265d3)
diff --git a/ldap/servers/plugins/retrocl/retrocl.c b/ldap/servers/plugins/retrocl/retrocl.c
index 141cfd2..b0d0dfd 100644
--- a/ldap/servers/plugins/retrocl/retrocl.c
+++ b/ldap/servers/plugins/retrocl/retrocl.c
@@ -482,6 +482,8 @@ retrocl_plugin_init(Slapi_PBlock *pb)
rc= slapi_register_plugin_ext("internalpostoperation", 1 /* Enabled */, "retrocl_internalpostop_init", retrocl_internalpostop_init, "Retrocl internal postoperation plugin", NULL, identity, precedence);
}
+ retrocl_internal_cn = slapi_counter_new();
+ retrocl_first_cn = slapi_counter_new();
retrocl_internal_lock = PR_NewLock();
if (retrocl_internal_lock == NULL) return -1;
}
diff --git a/ldap/servers/plugins/retrocl/retrocl.h b/ldap/servers/plugins/retrocl/retrocl.h
index 214f3af..e93a454 100644
--- a/ldap/servers/plugins/retrocl/retrocl.h
+++ b/ldap/servers/plugins/retrocl/retrocl.h
@@ -57,7 +57,7 @@
/* max len of a long (2^64), represented as a string, including null byte */
#define CNUMSTR_LEN 21
-typedef unsigned long changeNumber;
+typedef PRUint64 changeNumber;
typedef struct _cnum_result_t {
int crt_nentries; /* number of entries returned from search */
@@ -131,6 +131,8 @@ extern const char *attr_nsuniqueid;
extern const char *attr_isreplicated;
extern PRLock *retrocl_internal_lock;
+extern Slapi_Counter *retrocl_internal_cn;
+extern Slapi_Counter *retrocl_first_cn;
/* Functions */
diff --git a/ldap/servers/plugins/retrocl/retrocl_cn.c b/ldap/servers/plugins/retrocl/retrocl_cn.c
index d2b15a4..6923856 100644
--- a/ldap/servers/plugins/retrocl/retrocl_cn.c
+++ b/ldap/servers/plugins/retrocl/retrocl_cn.c
@@ -43,8 +43,8 @@
#include "retrocl.h"
-static changeNumber retrocl_internal_cn = 0;
-static changeNumber retrocl_first_cn = 0;
+Slapi_Counter *retrocl_internal_cn;
+Slapi_Counter *retrocl_first_cn;
/*
* Function: a2changeNumber
@@ -86,36 +86,31 @@ handle_cnum_entry( Slapi_Entry *e, void *callback_data )
cr->cr_time = NULL;
if ( NULL != e ) {
- Slapi_Attr *chattr = NULL;
- sval = NULL;
- value = NULL;
- if ( slapi_entry_attr_find( e, attr_changenumber, &chattr ) == 0 ) {
- slapi_attr_first_value( chattr,&sval );
- if ( NULL != sval ) {
- value = slapi_value_get_berval ( sval );
- if( NULL != value && NULL != value->bv_val &&
- '\0' != value->bv_val[0]) {
- cr->cr_cnum = a2changeNumber( value->bv_val );
- }
- }
- }
- chattr = NULL;
- sval = NULL;
- value = NULL;
-
- chattr = NULL;
- sval = NULL;
- value = NULL;
- if ( slapi_entry_attr_find( e, attr_changetime, &chattr ) == 0 ) {
- slapi_attr_first_value( chattr,&sval );
- if ( NULL != sval) {
- value = slapi_value_get_berval ( sval );
- if (NULL != value && NULL != value->bv_val &&
- '\0' != value->bv_val[0]) {
- cr->cr_time = slapi_ch_strdup( value->bv_val );
- }
- }
- }
+ Slapi_Attr *chattr = NULL;
+ sval = NULL;
+ value = NULL;
+ if ( slapi_entry_attr_find( e, attr_changenumber, &chattr ) == 0 ) {
+ slapi_attr_first_value( chattr,&sval );
+ if ( NULL != sval ) {
+ value = slapi_value_get_berval ( sval );
+ if( NULL != value && NULL != value->bv_val && '\0' != value->bv_val[0]) {
+ cr->cr_cnum = a2changeNumber( value->bv_val );
+ }
+ }
+ }
+ chattr = NULL;
+ sval = NULL;
+ value = NULL;
+
+ if ( slapi_entry_attr_find( e, attr_changetime, &chattr ) == 0 ) {
+ slapi_attr_first_value( chattr,&sval );
+ if ( NULL != sval) {
+ value = slapi_value_get_berval ( sval );
+ if (NULL != value && NULL != value->bv_val && '\0' != value->bv_val[0]) {
+ cr->cr_time = slapi_ch_strdup( value->bv_val );
+ }
+ }
+ }
}
return 0;
}
@@ -163,7 +158,7 @@ int retrocl_get_changenumbers(void)
NULL,NULL,0,&cr,NULL,handle_cnum_result,
handle_cnum_entry, NULL);
- retrocl_first_cn = cr.cr_cnum;
+ slapi_counter_set_value(retrocl_first_cn, cr.cr_cnum);
slapi_ch_free(( void **) &cr.cr_time );
@@ -172,11 +167,11 @@ int retrocl_get_changenumbers(void)
NULL,NULL,0,&cr,NULL,handle_cnum_result,
handle_cnum_entry, NULL);
- retrocl_internal_cn = cr.cr_cnum;
+ slapi_counter_set_value(retrocl_internal_cn,cr.cr_cnum);
slapi_log_error(SLAPI_LOG_PLUGIN,"retrocl","Got changenumbers %lu and %lu\n",
- retrocl_first_cn,
- retrocl_internal_cn);
+ slapi_counter_get_value(retrocl_first_cn),
+ slapi_counter_get_value(retrocl_internal_cn));
slapi_ch_free(( void **) &cr.cr_time );
@@ -200,10 +195,10 @@ time_t retrocl_getchangetime( int type, int *err )
time_t ret;
if ( type != SLAPI_SEQ_FIRST && type != SLAPI_SEQ_LAST ) {
- if ( err != NULL ) {
- *err = -1;
- }
- return NO_TIME;
+ if ( err != NULL ) {
+ *err = -1;
+ }
+ return NO_TIME;
}
memset( &cr, '\0', sizeof( cnumRet ));
slapi_seq_callback( RETROCL_CHANGELOG_DN, type,
@@ -213,13 +208,13 @@ time_t retrocl_getchangetime( int type, int *err )
handle_cnum_result, handle_cnum_entry, NULL );
if ( err != NULL ) {
- *err = cr.cr_lderr;
+ *err = cr.cr_lderr;
}
if ( NULL == cr.cr_time ) {
- ret = NO_TIME;
+ ret = NO_TIME;
} else {
- ret = parse_localTime( cr.cr_time );
+ ret = parse_localTime( cr.cr_time );
}
slapi_ch_free(( void **) &cr.cr_time );
return ret;
@@ -238,10 +233,8 @@ time_t retrocl_getchangetime( int type, int *err )
void retrocl_forget_changenumbers(void)
{
- PR_Lock(retrocl_internal_lock);
- retrocl_first_cn = 0;
- retrocl_internal_cn = 0;
- PR_Unlock(retrocl_internal_lock);
+ slapi_counter_set_value(retrocl_first_cn, 0);
+ slapi_counter_set_value(retrocl_internal_cn, 0);
}
/*
@@ -257,11 +250,7 @@ void retrocl_forget_changenumbers(void)
changeNumber retrocl_get_first_changenumber(void)
{
- changeNumber cn;
- PR_Lock(retrocl_internal_lock);
- cn = retrocl_first_cn;
- PR_Unlock(retrocl_internal_lock);
- return cn;
+ return (changeNumber)slapi_counter_get_value(retrocl_first_cn);
}
/*
@@ -277,9 +266,7 @@ changeNumber retrocl_get_first_changenumber(void)
void retrocl_set_first_changenumber(changeNumber cn)
{
- PR_Lock(retrocl_internal_lock);
- retrocl_first_cn = cn;
- PR_Unlock(retrocl_internal_lock);
+ slapi_counter_set_value(retrocl_first_cn, cn);
}
@@ -295,12 +282,8 @@ void retrocl_set_first_changenumber(changeNumber cn)
*/
changeNumber retrocl_get_last_changenumber(void)
-{
- changeNumber cn;
- PR_Lock(retrocl_internal_lock);
- cn = retrocl_internal_cn;
- PR_Unlock(retrocl_internal_lock);
- return cn;
+{
+ return (changeNumber)slapi_counter_get_value(retrocl_internal_cn);
}
/*
@@ -308,7 +291,7 @@ changeNumber retrocl_get_last_changenumber(void)
*
* Returns: none
*
- * Arguments: none, lock must be held
+ * Arguments: none
*
* Description: NOTE! MUST BE PRECEEDED BY retrocl_assign_changenumber
*
@@ -316,8 +299,8 @@ changeNumber retrocl_get_last_changenumber(void)
void retrocl_commit_changenumber(void)
{
- if ( retrocl_first_cn == 0) {
- retrocl_first_cn = retrocl_internal_cn;
+ if ( slapi_counter_get_value(retrocl_first_cn) == 0) {
+ slapi_counter_set_value(retrocl_first_cn, slapi_counter_get_value(retrocl_internal_cn));
}
}
@@ -326,7 +309,7 @@ void retrocl_commit_changenumber(void)
*
* Returns: none
*
- * Arguments: none, lock must be held
+ * Arguments: none
*
* Description: NOTE! MUST BE PRECEEDED BY retrocl_assign_changenumber
*
@@ -334,7 +317,7 @@ void retrocl_commit_changenumber(void)
void retrocl_release_changenumber(void)
{
- retrocl_internal_cn--;
+ slapi_counter_decrement(retrocl_internal_cn);
}
/*
@@ -362,10 +345,8 @@ int retrocl_update_lastchangenumber(void)
NULL,NULL,0,&cr,NULL,handle_cnum_result,
handle_cnum_entry, NULL);
-
- retrocl_internal_cn = cr.cr_cnum;
- slapi_log_error(SLAPI_LOG_PLUGIN,"retrocl","Refetched last changenumber = %lu \n",
- retrocl_internal_cn);
+ slapi_counter_set_value(retrocl_internal_cn, cr.cr_cnum);
+ slapi_log_error(SLAPI_LOG_PLUGIN,"retrocl","Refetched last changenumber = %lu \n", cr.cr_cnum);
slapi_ch_free(( void **) &cr.cr_time );
@@ -394,7 +375,7 @@ changeNumber retrocl_assign_changenumber(void)
* validity of the internal assignment of retrocl_internal_cn
* we had from the startup */
- if(retrocl_internal_cn <= retrocl_first_cn){
+ if(slapi_counter_get_value(retrocl_internal_cn) <= slapi_counter_get_value(retrocl_first_cn)){
/* the numbers have become out of sync - retrocl_get_changenumbers
* gets called only once during startup and it may have had a problem
* getting the last changenumber.
@@ -405,7 +386,8 @@ changeNumber retrocl_assign_changenumber(void)
retrocl_update_lastchangenumber();
}
- retrocl_internal_cn++;
- cn = retrocl_internal_cn;
+ slapi_counter_increment(retrocl_internal_cn);
+ cn = slapi_counter_get_value(retrocl_internal_cn);
+
return cn;
}
10 years, 5 months
ldap/servers
by Mark Reynolds
ldap/servers/plugins/retrocl/retrocl.c | 2
ldap/servers/plugins/retrocl/retrocl.h | 4
ldap/servers/plugins/retrocl/retrocl_cn.c | 128 ++++++++++++------------------
3 files changed, 60 insertions(+), 74 deletions(-)
New commits:
commit d708fb290cf5d9be5efe6fd1096f63014ed265d3
Author: Mark Reynolds <mreynolds(a)redhat.com>
Date: Tue Nov 19 15:31:27 2013 -0500
Ticket 47599 - Reduce lock scope in retro changelog plug-in
Description: Change the "changenumber" type to PRUint64. All changes to the static
changenumbers are now atomic by use of slapi_counters.
We still need to do the locking in retrocl_po.c as we need to
serialize the actual updates.
https://fedorahosted.org/389/ticket/47599
Reviewed by: richm(Thanks!!)
diff --git a/ldap/servers/plugins/retrocl/retrocl.c b/ldap/servers/plugins/retrocl/retrocl.c
index 141cfd2..b0d0dfd 100644
--- a/ldap/servers/plugins/retrocl/retrocl.c
+++ b/ldap/servers/plugins/retrocl/retrocl.c
@@ -482,6 +482,8 @@ retrocl_plugin_init(Slapi_PBlock *pb)
rc= slapi_register_plugin_ext("internalpostoperation", 1 /* Enabled */, "retrocl_internalpostop_init", retrocl_internalpostop_init, "Retrocl internal postoperation plugin", NULL, identity, precedence);
}
+ retrocl_internal_cn = slapi_counter_new();
+ retrocl_first_cn = slapi_counter_new();
retrocl_internal_lock = PR_NewLock();
if (retrocl_internal_lock == NULL) return -1;
}
diff --git a/ldap/servers/plugins/retrocl/retrocl.h b/ldap/servers/plugins/retrocl/retrocl.h
index 214f3af..e93a454 100644
--- a/ldap/servers/plugins/retrocl/retrocl.h
+++ b/ldap/servers/plugins/retrocl/retrocl.h
@@ -57,7 +57,7 @@
/* max len of a long (2^64), represented as a string, including null byte */
#define CNUMSTR_LEN 21
-typedef unsigned long changeNumber;
+typedef PRUint64 changeNumber;
typedef struct _cnum_result_t {
int crt_nentries; /* number of entries returned from search */
@@ -131,6 +131,8 @@ extern const char *attr_nsuniqueid;
extern const char *attr_isreplicated;
extern PRLock *retrocl_internal_lock;
+extern Slapi_Counter *retrocl_internal_cn;
+extern Slapi_Counter *retrocl_first_cn;
/* Functions */
diff --git a/ldap/servers/plugins/retrocl/retrocl_cn.c b/ldap/servers/plugins/retrocl/retrocl_cn.c
index d2b15a4..6923856 100644
--- a/ldap/servers/plugins/retrocl/retrocl_cn.c
+++ b/ldap/servers/plugins/retrocl/retrocl_cn.c
@@ -43,8 +43,8 @@
#include "retrocl.h"
-static changeNumber retrocl_internal_cn = 0;
-static changeNumber retrocl_first_cn = 0;
+Slapi_Counter *retrocl_internal_cn;
+Slapi_Counter *retrocl_first_cn;
/*
* Function: a2changeNumber
@@ -86,36 +86,31 @@ handle_cnum_entry( Slapi_Entry *e, void *callback_data )
cr->cr_time = NULL;
if ( NULL != e ) {
- Slapi_Attr *chattr = NULL;
- sval = NULL;
- value = NULL;
- if ( slapi_entry_attr_find( e, attr_changenumber, &chattr ) == 0 ) {
- slapi_attr_first_value( chattr,&sval );
- if ( NULL != sval ) {
- value = slapi_value_get_berval ( sval );
- if( NULL != value && NULL != value->bv_val &&
- '\0' != value->bv_val[0]) {
- cr->cr_cnum = a2changeNumber( value->bv_val );
- }
- }
- }
- chattr = NULL;
- sval = NULL;
- value = NULL;
-
- chattr = NULL;
- sval = NULL;
- value = NULL;
- if ( slapi_entry_attr_find( e, attr_changetime, &chattr ) == 0 ) {
- slapi_attr_first_value( chattr,&sval );
- if ( NULL != sval) {
- value = slapi_value_get_berval ( sval );
- if (NULL != value && NULL != value->bv_val &&
- '\0' != value->bv_val[0]) {
- cr->cr_time = slapi_ch_strdup( value->bv_val );
- }
- }
- }
+ Slapi_Attr *chattr = NULL;
+ sval = NULL;
+ value = NULL;
+ if ( slapi_entry_attr_find( e, attr_changenumber, &chattr ) == 0 ) {
+ slapi_attr_first_value( chattr,&sval );
+ if ( NULL != sval ) {
+ value = slapi_value_get_berval ( sval );
+ if( NULL != value && NULL != value->bv_val && '\0' != value->bv_val[0]) {
+ cr->cr_cnum = a2changeNumber( value->bv_val );
+ }
+ }
+ }
+ chattr = NULL;
+ sval = NULL;
+ value = NULL;
+
+ if ( slapi_entry_attr_find( e, attr_changetime, &chattr ) == 0 ) {
+ slapi_attr_first_value( chattr,&sval );
+ if ( NULL != sval) {
+ value = slapi_value_get_berval ( sval );
+ if (NULL != value && NULL != value->bv_val && '\0' != value->bv_val[0]) {
+ cr->cr_time = slapi_ch_strdup( value->bv_val );
+ }
+ }
+ }
}
return 0;
}
@@ -163,7 +158,7 @@ int retrocl_get_changenumbers(void)
NULL,NULL,0,&cr,NULL,handle_cnum_result,
handle_cnum_entry, NULL);
- retrocl_first_cn = cr.cr_cnum;
+ slapi_counter_set_value(retrocl_first_cn, cr.cr_cnum);
slapi_ch_free(( void **) &cr.cr_time );
@@ -172,11 +167,11 @@ int retrocl_get_changenumbers(void)
NULL,NULL,0,&cr,NULL,handle_cnum_result,
handle_cnum_entry, NULL);
- retrocl_internal_cn = cr.cr_cnum;
+ slapi_counter_set_value(retrocl_internal_cn,cr.cr_cnum);
slapi_log_error(SLAPI_LOG_PLUGIN,"retrocl","Got changenumbers %lu and %lu\n",
- retrocl_first_cn,
- retrocl_internal_cn);
+ slapi_counter_get_value(retrocl_first_cn),
+ slapi_counter_get_value(retrocl_internal_cn));
slapi_ch_free(( void **) &cr.cr_time );
@@ -200,10 +195,10 @@ time_t retrocl_getchangetime( int type, int *err )
time_t ret;
if ( type != SLAPI_SEQ_FIRST && type != SLAPI_SEQ_LAST ) {
- if ( err != NULL ) {
- *err = -1;
- }
- return NO_TIME;
+ if ( err != NULL ) {
+ *err = -1;
+ }
+ return NO_TIME;
}
memset( &cr, '\0', sizeof( cnumRet ));
slapi_seq_callback( RETROCL_CHANGELOG_DN, type,
@@ -213,13 +208,13 @@ time_t retrocl_getchangetime( int type, int *err )
handle_cnum_result, handle_cnum_entry, NULL );
if ( err != NULL ) {
- *err = cr.cr_lderr;
+ *err = cr.cr_lderr;
}
if ( NULL == cr.cr_time ) {
- ret = NO_TIME;
+ ret = NO_TIME;
} else {
- ret = parse_localTime( cr.cr_time );
+ ret = parse_localTime( cr.cr_time );
}
slapi_ch_free(( void **) &cr.cr_time );
return ret;
@@ -238,10 +233,8 @@ time_t retrocl_getchangetime( int type, int *err )
void retrocl_forget_changenumbers(void)
{
- PR_Lock(retrocl_internal_lock);
- retrocl_first_cn = 0;
- retrocl_internal_cn = 0;
- PR_Unlock(retrocl_internal_lock);
+ slapi_counter_set_value(retrocl_first_cn, 0);
+ slapi_counter_set_value(retrocl_internal_cn, 0);
}
/*
@@ -257,11 +250,7 @@ void retrocl_forget_changenumbers(void)
changeNumber retrocl_get_first_changenumber(void)
{
- changeNumber cn;
- PR_Lock(retrocl_internal_lock);
- cn = retrocl_first_cn;
- PR_Unlock(retrocl_internal_lock);
- return cn;
+ return (changeNumber)slapi_counter_get_value(retrocl_first_cn);
}
/*
@@ -277,9 +266,7 @@ changeNumber retrocl_get_first_changenumber(void)
void retrocl_set_first_changenumber(changeNumber cn)
{
- PR_Lock(retrocl_internal_lock);
- retrocl_first_cn = cn;
- PR_Unlock(retrocl_internal_lock);
+ slapi_counter_set_value(retrocl_first_cn, cn);
}
@@ -295,12 +282,8 @@ void retrocl_set_first_changenumber(changeNumber cn)
*/
changeNumber retrocl_get_last_changenumber(void)
-{
- changeNumber cn;
- PR_Lock(retrocl_internal_lock);
- cn = retrocl_internal_cn;
- PR_Unlock(retrocl_internal_lock);
- return cn;
+{
+ return (changeNumber)slapi_counter_get_value(retrocl_internal_cn);
}
/*
@@ -308,7 +291,7 @@ changeNumber retrocl_get_last_changenumber(void)
*
* Returns: none
*
- * Arguments: none, lock must be held
+ * Arguments: none
*
* Description: NOTE! MUST BE PRECEEDED BY retrocl_assign_changenumber
*
@@ -316,8 +299,8 @@ changeNumber retrocl_get_last_changenumber(void)
void retrocl_commit_changenumber(void)
{
- if ( retrocl_first_cn == 0) {
- retrocl_first_cn = retrocl_internal_cn;
+ if ( slapi_counter_get_value(retrocl_first_cn) == 0) {
+ slapi_counter_set_value(retrocl_first_cn, slapi_counter_get_value(retrocl_internal_cn));
}
}
@@ -326,7 +309,7 @@ void retrocl_commit_changenumber(void)
*
* Returns: none
*
- * Arguments: none, lock must be held
+ * Arguments: none
*
* Description: NOTE! MUST BE PRECEEDED BY retrocl_assign_changenumber
*
@@ -334,7 +317,7 @@ void retrocl_commit_changenumber(void)
void retrocl_release_changenumber(void)
{
- retrocl_internal_cn--;
+ slapi_counter_decrement(retrocl_internal_cn);
}
/*
@@ -362,10 +345,8 @@ int retrocl_update_lastchangenumber(void)
NULL,NULL,0,&cr,NULL,handle_cnum_result,
handle_cnum_entry, NULL);
-
- retrocl_internal_cn = cr.cr_cnum;
- slapi_log_error(SLAPI_LOG_PLUGIN,"retrocl","Refetched last changenumber = %lu \n",
- retrocl_internal_cn);
+ slapi_counter_set_value(retrocl_internal_cn, cr.cr_cnum);
+ slapi_log_error(SLAPI_LOG_PLUGIN,"retrocl","Refetched last changenumber = %lu \n", cr.cr_cnum);
slapi_ch_free(( void **) &cr.cr_time );
@@ -394,7 +375,7 @@ changeNumber retrocl_assign_changenumber(void)
* validity of the internal assignment of retrocl_internal_cn
* we had from the startup */
- if(retrocl_internal_cn <= retrocl_first_cn){
+ if(slapi_counter_get_value(retrocl_internal_cn) <= slapi_counter_get_value(retrocl_first_cn)){
/* the numbers have become out of sync - retrocl_get_changenumbers
* gets called only once during startup and it may have had a problem
* getting the last changenumber.
@@ -405,7 +386,8 @@ changeNumber retrocl_assign_changenumber(void)
retrocl_update_lastchangenumber();
}
- retrocl_internal_cn++;
- cn = retrocl_internal_cn;
+ slapi_counter_increment(retrocl_internal_cn);
+ cn = slapi_counter_get_value(retrocl_internal_cn);
+
return cn;
}
10 years, 5 months
ldap/servers
by Mark Reynolds
ldap/servers/plugins/automember/automember.c | 54 +++++++++++++++++++++++----
1 file changed, 47 insertions(+), 7 deletions(-)
New commits:
commit 87115fa0bd6bac4f3479142bca26b49af43aa6cd
Author: Mark Reynolds <mreynolds(a)redhat.com>
Date: Tue Nov 19 20:51:08 2013 -0500
Ticket 47529 - Automember plug-in should treat MODRDN operations as ADD operations
Description: After making the basic config checks, see if the entry applies to the
automember configurations, and update appropriately.
https://fedorahosted.org/389/ticket/47529
Reviewed by: richm(Thanks!)
diff --git a/ldap/servers/plugins/automember/automember.c b/ldap/servers/plugins/automember/automember.c
index d63fbfe..e662e58 100644
--- a/ldap/servers/plugins/automember/automember.c
+++ b/ldap/servers/plugins/automember/automember.c
@@ -2663,20 +2663,24 @@ out:
static int
automember_modrdn_post_op(Slapi_PBlock *pb)
{
+ Slapi_Entry *post_e = NULL;
Slapi_DN *old_sdn = NULL;
Slapi_DN *new_sdn = NULL;
- Slapi_Entry *post_e = NULL;
+ struct configEntry *config = NULL;
+ PRCList *list = NULL;
slapi_log_error(SLAPI_LOG_TRACE, AUTOMEMBER_PLUGIN_SUBSYSTEM,
"--> automember_modrdn_post_op\n");
/* Just bail if we aren't ready to service requests yet. */
if (!g_plugin_started || !automember_oktodo(pb))
- return 0;
+ return SLAPI_PLUGIN_SUCCESS;
- /* Reload config if an existing config entry was renamed,
+ /*
+ * Reload config if an existing config entry was renamed,
* or if the new dn brings an entry into the scope of the
- * config entries. */
+ * config entries.
+ */
slapi_pblock_get(pb, SLAPI_ENTRY_POST_OP, &post_e);
if (post_e) {
new_sdn = slapi_entry_get_sdn(post_e);
@@ -2684,21 +2688,57 @@ automember_modrdn_post_op(Slapi_PBlock *pb)
slapi_log_error(SLAPI_LOG_PLUGIN, AUTOMEMBER_PLUGIN_SUBSYSTEM,
"automember_modrdn_post_op: Error "
"retrieving post-op entry\n");
- return 0;
+ return SLAPI_PLUGIN_SUCCESS;
}
if ((old_sdn = automember_get_sdn(pb))) {
- if (automember_dn_is_config(old_sdn) || automember_dn_is_config(new_sdn))
+ if (automember_dn_is_config(old_sdn) || automember_dn_is_config(new_sdn)){
automember_load_config();
+ }
} else {
slapi_log_error(SLAPI_LOG_PLUGIN, AUTOMEMBER_PLUGIN_SUBSYSTEM,
"automember_modrdn_post_op: Error "
"retrieving dn\n");
+ return SLAPI_PLUGIN_SUCCESS;
+ }
+
+ /* If replication, just bail. */
+ if (automember_isrepl(pb)) {
+ return SLAPI_PLUGIN_SUCCESS;
+ }
+
+ /*
+ * Check if a config entry applies to the entry(post modrdn)
+ */
+ automember_config_read_lock();
+
+ /* Bail out if the plug-in close function was just called. */
+ if (!g_plugin_started) {
+ automember_config_unlock();
+ return SLAPI_PLUGIN_SUCCESS;
}
+ if (!PR_CLIST_IS_EMPTY(g_automember_config)) {
+ list = PR_LIST_HEAD(g_automember_config);
+ while (list != g_automember_config) {
+ config = (struct configEntry *)list;
+
+ /* Does the entry meet scope and filter requirements? */
+ if (slapi_dn_issuffix(slapi_sdn_get_dn(new_sdn), config->scope) &&
+ (slapi_filter_test_simple(post_e, config->filter) == 0)) {
+ /* Find out what membership changes are needed and make them. */
+ automember_update_membership(config, post_e, NULL);
+ }
+
+ list = PR_NEXT_LINK(list);
+ }
+ }
+
+ automember_config_unlock();
+
slapi_log_error(SLAPI_LOG_TRACE, AUTOMEMBER_PLUGIN_SUBSYSTEM,
"<-- automember_modrdn_post_op\n");
- return 0;
+ return SLAPI_PLUGIN_SUCCESS;
}
10 years, 5 months
Branch '389-ds-base-1.3.1' - ldap/servers
by Richard Allen Megginson
ldap/servers/slapd/back-ldbm/ldbm_attrcrypt.c | 2
ldap/servers/slapd/proto-slap.h | 1
ldap/servers/slapd/ssl.c | 58 ++++++++++++++++++++++++++
3 files changed, 60 insertions(+), 1 deletion(-)
New commits:
commit 92b46296c0b4ab9aa436ae09bca95832e2276c6e
Author: Rich Megginson <rmeggins(a)redhat.com>
Date: Fri Nov 15 10:24:26 2013 -0700
Ticket #47596 attrcrypt fails to find unlocked key
https://fedorahosted.org/389/ticket/47596
Reviewed by: nkinder (Thanks!)
Branch: 389-ds-base-1.3.1
Fix Description: There should always be a pre-authenticated slot/token that
has the servers cert and key. Just loop through all of the slots that the
server's cert is found on, and use the first one that is authenticated.
Platforms tested: RHEL6 x86_64
Flag Day: no
Doc impact: no
(cherry picked from commit b1fad4e35c0f963bf4678a2ed9a068dbe4fb159c)
(cherry picked from commit cf091de4ae70ad8d683ff33c57e75e58ff900502)
diff --git a/ldap/servers/slapd/back-ldbm/ldbm_attrcrypt.c b/ldap/servers/slapd/back-ldbm/ldbm_attrcrypt.c
index 09cce9b..f4a5d1a 100644
--- a/ldap/servers/slapd/back-ldbm/ldbm_attrcrypt.c
+++ b/ldap/servers/slapd/back-ldbm/ldbm_attrcrypt.c
@@ -425,7 +425,7 @@ attrcrypt_fetch_private_key(SECKEYPrivateKey **private_key)
LDAPDebug(LDAP_DEBUG_ANY,"Can't find certificate %s in attrcrypt_fetch_private_key: %d - %s\n", cert_name, errorCode, slapd_pr_strerror(errorCode));
}
if( cert != NULL ) {
- key = slapd_pk11_findKeyByAnyCert(cert, NULL);
+ key = slapd_get_unlocked_key_for_cert(cert, NULL);
}
if (key == NULL) {
errorCode = PR_GetError();
diff --git a/ldap/servers/slapd/proto-slap.h b/ldap/servers/slapd/proto-slap.h
index 4c1dab9..39c1f54 100644
--- a/ldap/servers/slapd/proto-slap.h
+++ b/ldap/servers/slapd/proto-slap.h
@@ -1012,6 +1012,7 @@ int slapd_ssl_init2(PRFileDesc **fd, int startTLS);
int slapd_security_library_is_initialized();
int slapd_ssl_listener_is_initialized();
int slapd_SSL_client_auth (LDAP* ld);
+SECKEYPrivateKey *slapd_get_unlocked_key_for_cert(CERTCertificate *cert, void *pin_arg);
/*
* security_wrappers.c
diff --git a/ldap/servers/slapd/ssl.c b/ldap/servers/slapd/ssl.c
index f515b8e..8b80acb 100644
--- a/ldap/servers/slapd/ssl.c
+++ b/ldap/servers/slapd/ssl.c
@@ -1577,3 +1577,61 @@ char* slapd_get_tmp_dir()
#endif
return ( tmpdir );
}
+
+SECKEYPrivateKey *
+slapd_get_unlocked_key_for_cert(CERTCertificate *cert, void *pin_arg)
+{
+ SECKEYPrivateKey *key = NULL;
+ PK11SlotListElement *sle;
+ PK11SlotList *slotlist = PK11_GetAllSlotsForCert(cert, NULL);
+ const char *certsubject = cert->subjectName ? cert->subjectName : "unknown cert";
+
+ if (!slotlist) {
+ PRErrorCode errcode = PR_GetError();
+ slapi_log_error(SLAPI_LOG_FATAL, "slapd_get_unlocked_key_for_cert",
+ "Error: cannot get slot list for certificate [%s] (%d: %s)\n",
+ certsubject, errcode, slapd_pr_strerror(errcode));
+ return key;
+ }
+
+ for (sle = slotlist->head; sle; sle = sle->next) {
+ PK11SlotInfo *slot = sle->slot;
+ const char *slotname = (slot && PK11_GetSlotName(slot)) ? PK11_GetSlotName(slot) : "unknown slot";
+ const char *tokenname = (slot && PK11_GetTokenName(slot)) ? PK11_GetTokenName(slot) : "unknown token";
+ if (!slot) {
+ slapi_log_error(SLAPI_LOG_TRACE, "slapd_get_unlocked_key_for_cert",
+ "Missing slot for slot list element for certificate [%s]\n",
+ certsubject);
+ } else if (PK11_IsLoggedIn(slot, pin_arg)) {
+ key = PK11_FindKeyByDERCert(slot, cert, pin_arg);
+ slapi_log_error(SLAPI_LOG_TRACE, "slapd_get_unlocked_key_for_cert",
+ "Found unlocked slot [%s] token [%s] for certificate [%s]\n",
+ slotname, tokenname, certsubject);
+ break;
+ } else {
+ slapi_log_error(SLAPI_LOG_TRACE, "slapd_get_unlocked_key_for_cert",
+ "Skipping locked slot [%s] token [%s] for certificate [%s]\n",
+ slotname, tokenname, certsubject);
+ }
+ }
+
+ if (!key) {
+ slapi_log_error(SLAPI_LOG_FATAL, "slapd_get_unlocked_key_for_cert",
+ "Error: could not find any unlocked slots for certificate [%s]. "
+ "Please review your TLS/SSL configuration. The following slots were found:\n",
+ certsubject);
+ for (sle = slotlist->head; sle; sle = sle->next) {
+ PK11SlotInfo *slot = sle->slot;
+ const char *slotname = (slot && PK11_GetSlotName(slot)) ? PK11_GetSlotName(slot) : "unknown slot";
+ const char *tokenname = (slot && PK11_GetTokenName(slot)) ? PK11_GetTokenName(slot) : "unknown token";
+ slapi_log_error(SLAPI_LOG_FATAL, "slapd_get_unlocked_key_for_cert",
+ "Slot [%s] token [%s] was locked.\n",
+ slotname, tokenname);
+ }
+
+ }
+
+ PK11_FreeSlotList(slotlist);
+ return key;
+}
+
10 years, 5 months
ldap/servers
by Richard Allen Megginson
ldap/servers/slapd/back-ldbm/ldbm_attrcrypt.c | 2
ldap/servers/slapd/proto-slap.h | 1
ldap/servers/slapd/ssl.c | 58 ++++++++++++++++++++++++++
3 files changed, 60 insertions(+), 1 deletion(-)
New commits:
commit b1fad4e35c0f963bf4678a2ed9a068dbe4fb159c
Author: Rich Megginson <rmeggins(a)redhat.com>
Date: Fri Nov 15 10:24:26 2013 -0700
Ticket #47596 attrcrypt fails to find unlocked key
https://fedorahosted.org/389/ticket/47596
Reviewed by: nkinder (Thanks!)
Branch: master
Fix Description: There should always be a pre-authenticated slot/token that
has the servers cert and key. Just loop through all of the slots that the
server's cert is found on, and use the first one that is authenticated.
Platforms tested: RHEL6 x86_64
Flag Day: no
Doc impact: no
diff --git a/ldap/servers/slapd/back-ldbm/ldbm_attrcrypt.c b/ldap/servers/slapd/back-ldbm/ldbm_attrcrypt.c
index 09cce9b..f4a5d1a 100644
--- a/ldap/servers/slapd/back-ldbm/ldbm_attrcrypt.c
+++ b/ldap/servers/slapd/back-ldbm/ldbm_attrcrypt.c
@@ -425,7 +425,7 @@ attrcrypt_fetch_private_key(SECKEYPrivateKey **private_key)
LDAPDebug(LDAP_DEBUG_ANY,"Can't find certificate %s in attrcrypt_fetch_private_key: %d - %s\n", cert_name, errorCode, slapd_pr_strerror(errorCode));
}
if( cert != NULL ) {
- key = slapd_pk11_findKeyByAnyCert(cert, NULL);
+ key = slapd_get_unlocked_key_for_cert(cert, NULL);
}
if (key == NULL) {
errorCode = PR_GetError();
diff --git a/ldap/servers/slapd/proto-slap.h b/ldap/servers/slapd/proto-slap.h
index 0c4702b..358e103 100644
--- a/ldap/servers/slapd/proto-slap.h
+++ b/ldap/servers/slapd/proto-slap.h
@@ -1029,6 +1029,7 @@ int slapd_ssl_init2(PRFileDesc **fd, int startTLS);
int slapd_security_library_is_initialized();
int slapd_ssl_listener_is_initialized();
int slapd_SSL_client_auth (LDAP* ld);
+SECKEYPrivateKey *slapd_get_unlocked_key_for_cert(CERTCertificate *cert, void *pin_arg);
/*
* security_wrappers.c
diff --git a/ldap/servers/slapd/ssl.c b/ldap/servers/slapd/ssl.c
index f515b8e..8b80acb 100644
--- a/ldap/servers/slapd/ssl.c
+++ b/ldap/servers/slapd/ssl.c
@@ -1577,3 +1577,61 @@ char* slapd_get_tmp_dir()
#endif
return ( tmpdir );
}
+
+SECKEYPrivateKey *
+slapd_get_unlocked_key_for_cert(CERTCertificate *cert, void *pin_arg)
+{
+ SECKEYPrivateKey *key = NULL;
+ PK11SlotListElement *sle;
+ PK11SlotList *slotlist = PK11_GetAllSlotsForCert(cert, NULL);
+ const char *certsubject = cert->subjectName ? cert->subjectName : "unknown cert";
+
+ if (!slotlist) {
+ PRErrorCode errcode = PR_GetError();
+ slapi_log_error(SLAPI_LOG_FATAL, "slapd_get_unlocked_key_for_cert",
+ "Error: cannot get slot list for certificate [%s] (%d: %s)\n",
+ certsubject, errcode, slapd_pr_strerror(errcode));
+ return key;
+ }
+
+ for (sle = slotlist->head; sle; sle = sle->next) {
+ PK11SlotInfo *slot = sle->slot;
+ const char *slotname = (slot && PK11_GetSlotName(slot)) ? PK11_GetSlotName(slot) : "unknown slot";
+ const char *tokenname = (slot && PK11_GetTokenName(slot)) ? PK11_GetTokenName(slot) : "unknown token";
+ if (!slot) {
+ slapi_log_error(SLAPI_LOG_TRACE, "slapd_get_unlocked_key_for_cert",
+ "Missing slot for slot list element for certificate [%s]\n",
+ certsubject);
+ } else if (PK11_IsLoggedIn(slot, pin_arg)) {
+ key = PK11_FindKeyByDERCert(slot, cert, pin_arg);
+ slapi_log_error(SLAPI_LOG_TRACE, "slapd_get_unlocked_key_for_cert",
+ "Found unlocked slot [%s] token [%s] for certificate [%s]\n",
+ slotname, tokenname, certsubject);
+ break;
+ } else {
+ slapi_log_error(SLAPI_LOG_TRACE, "slapd_get_unlocked_key_for_cert",
+ "Skipping locked slot [%s] token [%s] for certificate [%s]\n",
+ slotname, tokenname, certsubject);
+ }
+ }
+
+ if (!key) {
+ slapi_log_error(SLAPI_LOG_FATAL, "slapd_get_unlocked_key_for_cert",
+ "Error: could not find any unlocked slots for certificate [%s]. "
+ "Please review your TLS/SSL configuration. The following slots were found:\n",
+ certsubject);
+ for (sle = slotlist->head; sle; sle = sle->next) {
+ PK11SlotInfo *slot = sle->slot;
+ const char *slotname = (slot && PK11_GetSlotName(slot)) ? PK11_GetSlotName(slot) : "unknown slot";
+ const char *tokenname = (slot && PK11_GetTokenName(slot)) ? PK11_GetTokenName(slot) : "unknown token";
+ slapi_log_error(SLAPI_LOG_FATAL, "slapd_get_unlocked_key_for_cert",
+ "Slot [%s] token [%s] was locked.\n",
+ slotname, tokenname);
+ }
+
+ }
+
+ PK11_FreeSlotList(slotlist);
+ return key;
+}
+
10 years, 5 months
Branch '389-ds-base-1.2.11' - ldap/servers
by Richard Allen Megginson
ldap/servers/slapd/back-ldbm/ldbm_attrcrypt.c | 2
ldap/servers/slapd/proto-slap.h | 1
ldap/servers/slapd/ssl.c | 58 ++++++++++++++++++++++++++
3 files changed, 60 insertions(+), 1 deletion(-)
New commits:
commit 1b746540b19fa1ff442ad316f2460d279bcec1a0
Author: Rich Megginson <rmeggins(a)redhat.com>
Date: Fri Nov 15 10:24:26 2013 -0700
Ticket #47596 attrcrypt fails to find unlocked key
https://fedorahosted.org/389/ticket/47596
Reviewed by: nkinder (Thanks!)
Branch: 389-ds-base-1.2.11
Fix Description: There should always be a pre-authenticated slot/token that
has the servers cert and key. Just loop through all of the slots that the
server's cert is found on, and use the first one that is authenticated.
Platforms tested: RHEL6 x86_64
Flag Day: no
Doc impact: no
(cherry picked from commit b1fad4e35c0f963bf4678a2ed9a068dbe4fb159c)
(cherry picked from commit cf091de4ae70ad8d683ff33c57e75e58ff900502)
(cherry picked from commit 92b46296c0b4ab9aa436ae09bca95832e2276c6e)
(cherry picked from commit e2d11075405898c84e50e2a98788ac4614efd2c1)
diff --git a/ldap/servers/slapd/back-ldbm/ldbm_attrcrypt.c b/ldap/servers/slapd/back-ldbm/ldbm_attrcrypt.c
index f0ef692..e74e951 100644
--- a/ldap/servers/slapd/back-ldbm/ldbm_attrcrypt.c
+++ b/ldap/servers/slapd/back-ldbm/ldbm_attrcrypt.c
@@ -425,7 +425,7 @@ attrcrypt_fetch_private_key(SECKEYPrivateKey **private_key)
LDAPDebug(LDAP_DEBUG_ANY,"Can't find certificate %s in attrcrypt_fetch_private_key: %d - %s\n", cert_name, errorCode, slapd_pr_strerror(errorCode));
}
if( cert != NULL ) {
- key = slapd_pk11_findKeyByAnyCert(cert, NULL);
+ key = slapd_get_unlocked_key_for_cert(cert, NULL);
}
if (key == NULL) {
errorCode = PR_GetError();
diff --git a/ldap/servers/slapd/proto-slap.h b/ldap/servers/slapd/proto-slap.h
index 809d4d7..4b23aad 100644
--- a/ldap/servers/slapd/proto-slap.h
+++ b/ldap/servers/slapd/proto-slap.h
@@ -993,6 +993,7 @@ int slapd_ssl_init2(PRFileDesc **fd, int startTLS);
int slapd_security_library_is_initialized();
int slapd_ssl_listener_is_initialized();
int slapd_SSL_client_auth (LDAP* ld);
+SECKEYPrivateKey *slapd_get_unlocked_key_for_cert(CERTCertificate *cert, void *pin_arg);
/*
* security_wrappers.c
diff --git a/ldap/servers/slapd/ssl.c b/ldap/servers/slapd/ssl.c
index f515b8e..8b80acb 100644
--- a/ldap/servers/slapd/ssl.c
+++ b/ldap/servers/slapd/ssl.c
@@ -1577,3 +1577,61 @@ char* slapd_get_tmp_dir()
#endif
return ( tmpdir );
}
+
+SECKEYPrivateKey *
+slapd_get_unlocked_key_for_cert(CERTCertificate *cert, void *pin_arg)
+{
+ SECKEYPrivateKey *key = NULL;
+ PK11SlotListElement *sle;
+ PK11SlotList *slotlist = PK11_GetAllSlotsForCert(cert, NULL);
+ const char *certsubject = cert->subjectName ? cert->subjectName : "unknown cert";
+
+ if (!slotlist) {
+ PRErrorCode errcode = PR_GetError();
+ slapi_log_error(SLAPI_LOG_FATAL, "slapd_get_unlocked_key_for_cert",
+ "Error: cannot get slot list for certificate [%s] (%d: %s)\n",
+ certsubject, errcode, slapd_pr_strerror(errcode));
+ return key;
+ }
+
+ for (sle = slotlist->head; sle; sle = sle->next) {
+ PK11SlotInfo *slot = sle->slot;
+ const char *slotname = (slot && PK11_GetSlotName(slot)) ? PK11_GetSlotName(slot) : "unknown slot";
+ const char *tokenname = (slot && PK11_GetTokenName(slot)) ? PK11_GetTokenName(slot) : "unknown token";
+ if (!slot) {
+ slapi_log_error(SLAPI_LOG_TRACE, "slapd_get_unlocked_key_for_cert",
+ "Missing slot for slot list element for certificate [%s]\n",
+ certsubject);
+ } else if (PK11_IsLoggedIn(slot, pin_arg)) {
+ key = PK11_FindKeyByDERCert(slot, cert, pin_arg);
+ slapi_log_error(SLAPI_LOG_TRACE, "slapd_get_unlocked_key_for_cert",
+ "Found unlocked slot [%s] token [%s] for certificate [%s]\n",
+ slotname, tokenname, certsubject);
+ break;
+ } else {
+ slapi_log_error(SLAPI_LOG_TRACE, "slapd_get_unlocked_key_for_cert",
+ "Skipping locked slot [%s] token [%s] for certificate [%s]\n",
+ slotname, tokenname, certsubject);
+ }
+ }
+
+ if (!key) {
+ slapi_log_error(SLAPI_LOG_FATAL, "slapd_get_unlocked_key_for_cert",
+ "Error: could not find any unlocked slots for certificate [%s]. "
+ "Please review your TLS/SSL configuration. The following slots were found:\n",
+ certsubject);
+ for (sle = slotlist->head; sle; sle = sle->next) {
+ PK11SlotInfo *slot = sle->slot;
+ const char *slotname = (slot && PK11_GetSlotName(slot)) ? PK11_GetSlotName(slot) : "unknown slot";
+ const char *tokenname = (slot && PK11_GetTokenName(slot)) ? PK11_GetTokenName(slot) : "unknown token";
+ slapi_log_error(SLAPI_LOG_FATAL, "slapd_get_unlocked_key_for_cert",
+ "Slot [%s] token [%s] was locked.\n",
+ slotname, tokenname);
+ }
+
+ }
+
+ PK11_FreeSlotList(slotlist);
+ return key;
+}
+
10 years, 5 months