فهرست منبع

Ticket #508 - part 1 - lock-free access to FrontendConfig structure

https://fedorahosted.org/389/ticket/508
Reviewed by: mreynolds (Thanks!)
Branch: master
Fix Description: Change the thread contested integral values to use
lock free get and set.  This includes the 3 INT types and all of the
ON/OFF types.  These have been changed to use atomic variables used by
the PR_Atomic APIs.
Platforms tested: RHEL6 x86_64
Flag Day: no
Doc impact: no
Rich Megginson 13 سال پیش
والد
کامیت
a0caf595fc
2فایلهای تغییر یافته به همراه308 افزوده شده و 256 حذف شده
  1. 223 197
      ldap/servers/slapd/libglobs.c
  2. 85 59
      ldap/servers/slapd/slap.h

+ 223 - 197
ldap/servers/slapd/libglobs.c

@@ -199,61 +199,61 @@ static int config_set_schemareplace ( const char *attrname, char *value,
 #define SALTED_SHA1_SCHEME_NAME "SSHA"
 
 /* CONFIG_ON_OFF */
-int init_accesslog_rotationsync_enabled;
-int init_errorlog_rotationsync_enabled;
-int init_auditlog_rotationsync_enabled;
-int init_accesslog_logging_enabled;
-int init_accesslogbuffering;
-int init_errorlog_logging_enabled;
-int init_auditlog_logging_enabled;
-int init_auditlog_logging_hide_unhashed_pw;
-int init_csnlogging;
-int init_pw_unlock;
-int init_pw_must_change;
-int init_pwpolicy_local;
-int init_pw_lockout;
-int init_pw_history;
-int init_pw_is_global_policy;
-int init_pw_is_legacy;
-int init_pw_track_update_time;
-int init_pw_change;
-int init_pw_exp;
-int init_pw_syntax;
-int init_schemacheck;
-int init_schemamod;
-int init_ds4_compatible_schema;
-int init_schema_ignore_trailing_spaces;
-int init_enquote_sup_oc;
-int init_rewrite_rfc1274;
-int init_syntaxcheck;
-int init_syntaxlogging;
-int init_dn_validate_strict;
-int init_attrname_exceptions;
-int init_return_exact_case;
-int init_result_tweak;
-int init_plugin_track;
-int init_lastmod;
-int init_readonly;
-int init_accesscontrol;
-int init_nagle;
-int init_security;
-int init_ssl_check_hostname;
-int init_ldapi_switch;
-int init_ldapi_bind_switch;
-int init_ldapi_map_entries;
-int init_allow_unauth_binds;
-int init_require_secure_binds;
-int init_minssf_exclude_rootdse;
-int init_force_sasl_external;
-int init_slapi_counters;
-int init_entryusn_global;
-int init_disk_monitoring;
-int init_disk_logging_critical;
-int init_disk_preserve_logging;
-int init_ndn_cache_enabled;
-int init_sasl_mapping_fallback;
+slapi_onoff_t init_accesslog_rotationsync_enabled;
+slapi_onoff_t init_errorlog_rotationsync_enabled;
+slapi_onoff_t init_auditlog_rotationsync_enabled;
+slapi_onoff_t init_accesslog_logging_enabled;
+slapi_onoff_t init_accesslogbuffering;
+slapi_onoff_t init_errorlog_logging_enabled;
+slapi_onoff_t init_auditlog_logging_enabled;
+slapi_onoff_t init_auditlog_logging_hide_unhashed_pw;
+slapi_onoff_t init_csnlogging;
+slapi_onoff_t init_pw_unlock;
+slapi_onoff_t init_pw_must_change;
+slapi_onoff_t init_pwpolicy_local;
+slapi_onoff_t init_pw_lockout;
+slapi_onoff_t init_pw_history;
+slapi_onoff_t init_pw_is_global_policy;
+slapi_onoff_t init_pw_is_legacy;
+slapi_onoff_t init_pw_track_update_time;
+slapi_onoff_t init_pw_change;
+slapi_onoff_t init_pw_exp;
+slapi_onoff_t init_pw_syntax;
+slapi_onoff_t init_schemacheck;
+slapi_onoff_t init_schemamod;
+slapi_onoff_t init_ds4_compatible_schema;
+slapi_onoff_t init_schema_ignore_trailing_spaces;
+slapi_onoff_t init_enquote_sup_oc;
+slapi_onoff_t init_rewrite_rfc1274;
+slapi_onoff_t init_syntaxcheck;
+slapi_onoff_t init_syntaxlogging;
+slapi_onoff_t init_dn_validate_strict;
+slapi_onoff_t init_attrname_exceptions;
+slapi_onoff_t init_return_exact_case;
+slapi_onoff_t init_result_tweak;
+slapi_onoff_t init_plugin_track;
+slapi_onoff_t init_lastmod;
+slapi_onoff_t init_readonly;
+slapi_onoff_t init_accesscontrol;
+slapi_onoff_t init_nagle;
+slapi_onoff_t init_security;
+slapi_onoff_t init_ssl_check_hostname;
+slapi_onoff_t init_ldapi_switch;
+slapi_onoff_t init_ldapi_bind_switch;
+slapi_onoff_t init_ldapi_map_entries;
+slapi_onoff_t init_allow_unauth_binds;
+slapi_onoff_t init_require_secure_binds;
+slapi_onoff_t init_minssf_exclude_rootdse;
+slapi_onoff_t init_force_sasl_external;
+slapi_onoff_t init_slapi_counters;
+slapi_onoff_t init_entryusn_global;
+slapi_onoff_t init_disk_monitoring;
+slapi_onoff_t init_disk_logging_critical;
+slapi_onoff_t init_disk_preserve_logging;
+slapi_onoff_t init_ndn_cache_enabled;
+slapi_onoff_t init_sasl_mapping_fallback;
 #ifdef MEMPOOL_EXPERIMENTAL
-int init_mempool_switch;
+slapi_onoff_t init_mempool_switch;
 #endif
 
 #define DEFAULT_SSLCLIENTAPTH "off"
@@ -3101,6 +3101,7 @@ config_set_onoff ( const char *attrname, char *value, int *configvalue,
 		char *errorbuf, int apply )
 {
   int retVal = LDAP_SUCCESS;
+  slapi_onoff_t newval = -1;
   slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
   
   if ( config_value_is_null( attrname, value, errorbuf, 0 )) {
@@ -3123,17 +3124,22 @@ config_set_onoff ( const char *attrname, char *value, int *configvalue,
 	return retVal;
   }
 
-  CFG_LOCK_WRITE(slapdFrontendConfig);
+  CFG_ONOFF_LOCK_WRITE(slapdFrontendConfig);
   
   if ( strcasecmp ( value, "on" ) == 0 ) {
-	*configvalue = LDAP_ON;
+	newval = LDAP_ON;
   } else if ( strcasecmp ( value, "off" ) == 0 ) {
-	*configvalue = LDAP_OFF;
-  } else {
-	*configvalue = *(int *)value;
+	newval = LDAP_OFF;
+  } else { /* assume it is an integer */
+	newval = *(slapi_onoff_t *)value;
   }
   
-  CFG_UNLOCK_WRITE(slapdFrontendConfig);
+#ifdef ATOMIC_GETSET_ONOFF
+  PR_AtomicSet(configvalue, newval);
+#else
+  *configvalue = newval;
+#endif
+  CFG_ONOFF_UNLOCK_WRITE(slapdFrontendConfig);
   return retVal;
 }
 			 
@@ -3518,10 +3524,13 @@ config_set_maxthreadsperconn( const char *attrname, char *value, char *errorbuf,
   }
   
   if (apply) {
-	CFG_LOCK_WRITE(slapdFrontendConfig);
-	/*	max_threads_per_conn = maxthreadnum; */
-	slapdFrontendConfig->maxthreadsperconn = maxthreadnum;
-	CFG_UNLOCK_WRITE(slapdFrontendConfig);
+#ifdef ATOMIC_GETSET_MAXTHREADSPERCONN
+    PR_AtomicSet(&slapdFrontendConfig->maxthreadsperconn, (slapi_int_t)maxthreadnum);
+#else
+    CFG_LOCK_WRITE(slapdFrontendConfig);
+    slapdFrontendConfig->maxthreadsperconn = maxthreadnum;
+    CFG_UNLOCK_WRITE(slapdFrontendConfig);
+#endif
   }
   return retVal;
 }
@@ -3704,10 +3713,13 @@ config_set_ioblocktimeout( const char *attrname, char *value, char *errorbuf, in
 #endif /* IRIX */
 
   if ( apply ) {
-	CFG_LOCK_WRITE(slapdFrontendConfig);
-	slapdFrontendConfig->ioblocktimeout = nValue;
-	/*	g_ioblock_timeout= nValue; */
-	CFG_UNLOCK_WRITE(slapdFrontendConfig);	
+#ifdef ATOMIC_GETSET_IOBLOCKTIMEOUT
+    PR_AtomicSet(&slapdFrontendConfig->ioblocktimeout, (PRInt32)nValue);
+#else
+    CFG_LOCK_WRITE(slapdFrontendConfig);
+    slapdFrontendConfig->ioblocktimeout = nValue;
+    CFG_UNLOCK_WRITE(slapdFrontendConfig);
+#endif
   }
   return retVal;
 
@@ -4188,9 +4200,9 @@ config_get_disk_monitoring(){
     slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
     int retVal;
 
-    CFG_LOCK_READ(slapdFrontendConfig);
-    retVal = slapdFrontendConfig->disk_monitoring;
-    CFG_UNLOCK_READ(slapdFrontendConfig);
+    CFG_ONOFF_LOCK_READ(slapdFrontendConfig);
+    retVal = (int)slapdFrontendConfig->disk_monitoring;
+    CFG_ONOFF_UNLOCK_READ(slapdFrontendConfig);
 
     return retVal;
 }
@@ -4200,9 +4212,9 @@ config_get_disk_preserve_logging(){
     slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
     int retVal;
 
-    CFG_LOCK_READ(slapdFrontendConfig);
-    retVal = slapdFrontendConfig->disk_preserve_logging;
-    CFG_UNLOCK_READ(slapdFrontendConfig);
+    CFG_ONOFF_LOCK_READ(slapdFrontendConfig);
+    retVal = (int)slapdFrontendConfig->disk_preserve_logging;
+    CFG_ONOFF_UNLOCK_READ(slapdFrontendConfig);
 
     return retVal;
 }
@@ -4212,9 +4224,9 @@ config_get_disk_logging_critical(){
     slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
     int retVal;
 
-    CFG_LOCK_READ(slapdFrontendConfig);
-    retVal = slapdFrontendConfig->disk_logging_critical;
-    CFG_UNLOCK_READ(slapdFrontendConfig);
+    CFG_ONOFF_LOCK_READ(slapdFrontendConfig);
+    retVal = (int)slapdFrontendConfig->disk_logging_critical;
+    CFG_ONOFF_UNLOCK_READ(slapdFrontendConfig);
 
     return retVal;
 }
@@ -4259,9 +4271,9 @@ config_get_ldapi_filename(){
 int config_get_ldapi_switch(){   
   int retVal;
   slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig(); 
-  CFG_LOCK_READ(slapdFrontendConfig);
-  retVal = slapdFrontendConfig->ldapi_switch;
-  CFG_UNLOCK_READ(slapdFrontendConfig);
+  CFG_ONOFF_LOCK_READ(slapdFrontendConfig);
+  retVal = (int)slapdFrontendConfig->ldapi_switch;
+  CFG_ONOFF_UNLOCK_READ(slapdFrontendConfig);
 
   return retVal;
 }
@@ -4269,9 +4281,9 @@ int config_get_ldapi_switch(){
 int config_get_ldapi_bind_switch(){
   int retVal;
   slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
-  CFG_LOCK_READ(slapdFrontendConfig);
-  retVal = slapdFrontendConfig->ldapi_bind_switch;
-  CFG_UNLOCK_READ(slapdFrontendConfig);
+  CFG_ONOFF_LOCK_READ(slapdFrontendConfig);
+  retVal = (int)slapdFrontendConfig->ldapi_bind_switch;
+  CFG_ONOFF_UNLOCK_READ(slapdFrontendConfig);
 
   return retVal;
 }
@@ -4289,9 +4301,9 @@ char *config_get_ldapi_root_dn(){
 int config_get_ldapi_map_entries(){
   int retVal;
   slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
-  CFG_LOCK_READ(slapdFrontendConfig);
-  retVal = slapdFrontendConfig->ldapi_map_entries;
-  CFG_UNLOCK_READ(slapdFrontendConfig);
+  CFG_ONOFF_LOCK_READ(slapdFrontendConfig);
+  retVal = (int)slapdFrontendConfig->ldapi_map_entries;
+  CFG_ONOFF_UNLOCK_READ(slapdFrontendConfig);
 
   return retVal;
 }
@@ -4353,9 +4365,9 @@ int config_get_slapi_counters()
 {   
   int retVal;
   slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig(); 
-  CFG_LOCK_READ(slapdFrontendConfig);
-  retVal = slapdFrontendConfig->slapi_counters;
-  CFG_UNLOCK_READ(slapdFrontendConfig);
+  CFG_ONOFF_LOCK_READ(slapdFrontendConfig);
+  retVal = (int)slapdFrontendConfig->slapi_counters;
+  CFG_ONOFF_UNLOCK_READ(slapdFrontendConfig);
 
   return retVal;
 }
@@ -4423,7 +4435,7 @@ int
 config_get_ssl_check_hostname()
 {
 	slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
-	return slapdFrontendConfig->ssl_check_hostname;
+	return (int)slapdFrontendConfig->ssl_check_hostname;
 }
 
 
@@ -4518,9 +4530,9 @@ config_get_pw_change() {
   slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
   int retVal;
   
-  CFG_LOCK_READ(slapdFrontendConfig);
-  retVal = slapdFrontendConfig->pw_policy.pw_change;
-  CFG_UNLOCK_READ(slapdFrontendConfig);
+  CFG_ONOFF_LOCK_READ(slapdFrontendConfig);
+  retVal = (int)slapdFrontendConfig->pw_policy.pw_change;
+  CFG_ONOFF_UNLOCK_READ(slapdFrontendConfig);
 
   return retVal; 
 }
@@ -4531,9 +4543,9 @@ config_get_pw_history() {
   slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
   int retVal;
 
-  CFG_LOCK_READ(slapdFrontendConfig);
-  retVal = slapdFrontendConfig->pw_policy.pw_history;
-  CFG_UNLOCK_READ(slapdFrontendConfig);
+  CFG_ONOFF_LOCK_READ(slapdFrontendConfig);
+  retVal = (int)slapdFrontendConfig->pw_policy.pw_history;
+  CFG_ONOFF_UNLOCK_READ(slapdFrontendConfig);
 
   return retVal; 
 }
@@ -4545,9 +4557,9 @@ config_get_pw_must_change() {
   slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
   int retVal;
 
-  CFG_LOCK_READ(slapdFrontendConfig);
-  retVal = slapdFrontendConfig->pw_policy.pw_must_change;
-  CFG_UNLOCK_READ(slapdFrontendConfig);
+  CFG_ONOFF_LOCK_READ(slapdFrontendConfig);
+  retVal = (int)slapdFrontendConfig->pw_policy.pw_must_change;
+  CFG_ONOFF_UNLOCK_READ(slapdFrontendConfig);
 
   return retVal; 
 }
@@ -4558,9 +4570,9 @@ config_get_pw_syntax() {
   slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
   int retVal;
 
-  CFG_LOCK_READ(slapdFrontendConfig);
-  retVal = slapdFrontendConfig->pw_policy.pw_syntax;
-  CFG_UNLOCK_READ(slapdFrontendConfig);
+  CFG_ONOFF_LOCK_READ(slapdFrontendConfig);
+  retVal = (int)slapdFrontendConfig->pw_policy.pw_syntax;
+  CFG_ONOFF_UNLOCK_READ(slapdFrontendConfig);
 
   return retVal; 
 }
@@ -4741,9 +4753,9 @@ config_get_pw_is_global_policy() {
   slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
   int retVal;
 
-  CFG_LOCK_READ(slapdFrontendConfig);
-  retVal = slapdFrontendConfig->pw_is_global_policy;
-  CFG_UNLOCK_READ(slapdFrontendConfig);
+  CFG_ONOFF_LOCK_READ(slapdFrontendConfig);
+  retVal = (int)slapdFrontendConfig->pw_is_global_policy;
+  CFG_ONOFF_UNLOCK_READ(slapdFrontendConfig);
 
   return retVal; 
 }
@@ -4753,9 +4765,9 @@ config_get_pw_is_legacy_policy() {
   slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
   int retVal;
 
-  CFG_LOCK_READ(slapdFrontendConfig);
-  retVal = slapdFrontendConfig->pw_policy.pw_is_legacy;
-  CFG_UNLOCK_READ(slapdFrontendConfig);
+  CFG_ONOFF_LOCK_READ(slapdFrontendConfig);
+  retVal = (int)slapdFrontendConfig->pw_policy.pw_is_legacy;
+  CFG_ONOFF_UNLOCK_READ(slapdFrontendConfig);
 
   return retVal;
 }
@@ -4765,9 +4777,9 @@ config_get_pw_exp() {
   slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
   int retVal;
 
-  CFG_LOCK_READ(slapdFrontendConfig);
-  retVal = slapdFrontendConfig->pw_policy.pw_exp;
-  CFG_UNLOCK_READ(slapdFrontendConfig);
+  CFG_ONOFF_LOCK_READ(slapdFrontendConfig);
+  retVal = (int)slapdFrontendConfig->pw_policy.pw_exp;
+  CFG_ONOFF_UNLOCK_READ(slapdFrontendConfig);
 
   return retVal;
 }
@@ -4778,9 +4790,9 @@ config_get_pw_unlock() {
   slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
   int retVal;
   
-  CFG_LOCK_READ(slapdFrontendConfig);
-  retVal = slapdFrontendConfig->pw_policy.pw_unlock;
-  CFG_UNLOCK_READ(slapdFrontendConfig);
+  CFG_ONOFF_LOCK_READ(slapdFrontendConfig);
+  retVal = (int)slapdFrontendConfig->pw_policy.pw_unlock;
+  CFG_ONOFF_UNLOCK_READ(slapdFrontendConfig);
   
   return retVal; 
 }
@@ -4790,9 +4802,9 @@ config_get_pw_lockout(){
   slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
   int retVal;
   
-  CFG_LOCK_READ(slapdFrontendConfig);
-  retVal = slapdFrontendConfig->pw_policy.pw_lockout;
-  CFG_UNLOCK_READ(slapdFrontendConfig);
+  CFG_ONOFF_LOCK_READ(slapdFrontendConfig);
+  retVal = (int)slapdFrontendConfig->pw_policy.pw_lockout;
+  CFG_ONOFF_UNLOCK_READ(slapdFrontendConfig);
 
   return retVal;
 }
@@ -4815,9 +4827,9 @@ config_get_lastmod(){
   slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
   int retVal;
 
-  CFG_LOCK_READ(slapdFrontendConfig);
-  retVal = slapdFrontendConfig->lastmod;
-  CFG_UNLOCK_READ(slapdFrontendConfig);
+  CFG_ONOFF_LOCK_READ(slapdFrontendConfig);
+  retVal = (int)slapdFrontendConfig->lastmod;
+  CFG_ONOFF_UNLOCK_READ(slapdFrontendConfig);
 
   return retVal; 
 }
@@ -4827,9 +4839,9 @@ config_get_enquote_sup_oc(){
   slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
   int retVal;
 
-  CFG_LOCK_READ(slapdFrontendConfig);
-  retVal = slapdFrontendConfig->enquote_sup_oc;
-  CFG_UNLOCK_READ(slapdFrontendConfig);
+  CFG_ONOFF_LOCK_READ(slapdFrontendConfig);
+  retVal = (int)slapdFrontendConfig->enquote_sup_oc;
+  CFG_ONOFF_UNLOCK_READ(slapdFrontendConfig);
 
   return retVal; 
 }
@@ -4839,9 +4851,9 @@ config_get_nagle() {
   slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
   int retVal;
 
-  CFG_LOCK_READ(slapdFrontendConfig);
-  retVal = slapdFrontendConfig->nagle;
-  CFG_UNLOCK_READ(slapdFrontendConfig);
+  CFG_ONOFF_LOCK_READ(slapdFrontendConfig);
+  retVal = (int)slapdFrontendConfig->nagle;
+  CFG_ONOFF_UNLOCK_READ(slapdFrontendConfig);
   return retVal;
 }
 
@@ -4850,9 +4862,9 @@ config_get_accesscontrol() {
   slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
   int retVal;
   
-  CFG_LOCK_READ(slapdFrontendConfig);
-  retVal = slapdFrontendConfig->accesscontrol;
-  CFG_UNLOCK_READ(slapdFrontendConfig);
+  CFG_ONOFF_LOCK_READ(slapdFrontendConfig);
+  retVal = (int)slapdFrontendConfig->accesscontrol;
+  CFG_ONOFF_UNLOCK_READ(slapdFrontendConfig);
   
   return retVal;
 }
@@ -4862,7 +4874,7 @@ config_get_return_exact_case() {
   slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
   int retVal;
 
-  retVal = slapdFrontendConfig->return_exact_case;
+  retVal = (int)slapdFrontendConfig->return_exact_case;
 
   return retVal; 
 }
@@ -4872,9 +4884,9 @@ config_get_result_tweak() {
   slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
   int retVal;
 
-  CFG_LOCK_READ(slapdFrontendConfig);
-  retVal = slapdFrontendConfig->result_tweak;
-  CFG_UNLOCK_READ(slapdFrontendConfig);
+  CFG_ONOFF_LOCK_READ(slapdFrontendConfig);
+  retVal = (int)slapdFrontendConfig->result_tweak;
+  CFG_ONOFF_UNLOCK_READ(slapdFrontendConfig);
 
   return retVal; 
 }
@@ -4884,9 +4896,9 @@ config_get_security() {
   slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
   int retVal;
   
-  CFG_LOCK_READ(slapdFrontendConfig);
-  retVal = slapdFrontendConfig->security;
-  CFG_UNLOCK_READ(slapdFrontendConfig);
+  CFG_ONOFF_LOCK_READ(slapdFrontendConfig);
+  retVal = (int)slapdFrontendConfig->security;
+  CFG_ONOFF_UNLOCK_READ(slapdFrontendConfig);
 
   return retVal;
 }
@@ -4896,9 +4908,9 @@ slapi_config_get_readonly() {
   slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
   int retVal;
 
-  CFG_LOCK_READ(slapdFrontendConfig);
-  retVal = slapdFrontendConfig->readonly;
-  CFG_UNLOCK_READ(slapdFrontendConfig);
+  CFG_ONOFF_LOCK_READ(slapdFrontendConfig);
+  retVal = (int)slapdFrontendConfig->readonly;
+  CFG_ONOFF_UNLOCK_READ(slapdFrontendConfig);
 
   return retVal;
 }
@@ -4908,9 +4920,9 @@ config_get_schemacheck() {
   slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
   int retVal;
   
-  CFG_LOCK_READ(slapdFrontendConfig);
-  retVal = slapdFrontendConfig->schemacheck;
-  CFG_UNLOCK_READ(slapdFrontendConfig);
+  CFG_ONOFF_LOCK_READ(slapdFrontendConfig);
+  retVal = (int)slapdFrontendConfig->schemacheck;
+  CFG_ONOFF_UNLOCK_READ(slapdFrontendConfig);
   
   return retVal;
 }
@@ -4920,9 +4932,9 @@ config_get_schemamod() {
   slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
   int retVal;
   
-  CFG_LOCK_READ(slapdFrontendConfig);
-  retVal = slapdFrontendConfig->schemamod;
-  CFG_UNLOCK_READ(slapdFrontendConfig);
+  CFG_ONOFF_LOCK_READ(slapdFrontendConfig);
+  retVal = (int)slapdFrontendConfig->schemamod;
+  CFG_ONOFF_UNLOCK_READ(slapdFrontendConfig);
   
   return retVal;
 }
@@ -4932,9 +4944,9 @@ config_get_syntaxcheck() {
   slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
   int retVal;
 
-  CFG_LOCK_READ(slapdFrontendConfig);
-  retVal = slapdFrontendConfig->syntaxcheck;
-  CFG_UNLOCK_READ(slapdFrontendConfig);
+  CFG_ONOFF_LOCK_READ(slapdFrontendConfig);
+  retVal = (int)slapdFrontendConfig->syntaxcheck;
+  CFG_ONOFF_UNLOCK_READ(slapdFrontendConfig);
 
   return retVal;
 }
@@ -4944,9 +4956,9 @@ config_get_syntaxlogging() {
   slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
   int retVal;
 
-  CFG_LOCK_READ(slapdFrontendConfig);
-  retVal = slapdFrontendConfig->syntaxlogging;
-  CFG_UNLOCK_READ(slapdFrontendConfig);
+  CFG_ONOFF_LOCK_READ(slapdFrontendConfig);
+  retVal = (int)slapdFrontendConfig->syntaxlogging;
+  CFG_ONOFF_UNLOCK_READ(slapdFrontendConfig);
 
   return retVal;
 }
@@ -4956,9 +4968,9 @@ config_get_dn_validate_strict() {
   slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
   int retVal;
 
-  CFG_LOCK_READ(slapdFrontendConfig);
-  retVal = slapdFrontendConfig->dn_validate_strict;
-  CFG_UNLOCK_READ(slapdFrontendConfig);
+  CFG_ONOFF_LOCK_READ(slapdFrontendConfig);
+  retVal = (int)slapdFrontendConfig->dn_validate_strict;
+  CFG_ONOFF_UNLOCK_READ(slapdFrontendConfig);
 
   return retVal;
 }
@@ -4968,9 +4980,9 @@ config_get_ds4_compatible_schema() {
   slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
   int retVal;
   
-  CFG_LOCK_READ(slapdFrontendConfig);
-  retVal = slapdFrontendConfig->ds4_compatible_schema;
-  CFG_UNLOCK_READ(slapdFrontendConfig);
+  CFG_ONOFF_LOCK_READ(slapdFrontendConfig);
+  retVal = (int)slapdFrontendConfig->ds4_compatible_schema;
+  CFG_ONOFF_UNLOCK_READ(slapdFrontendConfig);
   
   return retVal;
 }
@@ -4980,9 +4992,9 @@ config_get_schema_ignore_trailing_spaces() {
   slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
   int retVal;
   
-  CFG_LOCK_READ(slapdFrontendConfig);
-  retVal = slapdFrontendConfig->schema_ignore_trailing_spaces;
-  CFG_UNLOCK_READ(slapdFrontendConfig);
+  CFG_ONOFF_LOCK_READ(slapdFrontendConfig);
+  retVal = (int)slapdFrontendConfig->schema_ignore_trailing_spaces;
+  CFG_ONOFF_UNLOCK_READ(slapdFrontendConfig);
   
   return retVal;
 }
@@ -5074,11 +5086,13 @@ int
 config_get_maxthreadsperconn(){
   slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
   int retVal;
-  
+#ifdef ATOMIC_GETSET_MAXTHREADSPERCONN
+  retVal = (int)slapdFrontendConfig->maxthreadsperconn;
+#else
   CFG_LOCK_READ(slapdFrontendConfig);
   retVal = slapdFrontendConfig->maxthreadsperconn;
   CFG_UNLOCK_READ(slapdFrontendConfig);
-
+#endif
   return retVal; 
 }
 
@@ -5113,9 +5127,13 @@ config_get_ioblocktimeout(){
   slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
   int retVal;
   
+#ifndef ATOMIC_GETSET_IOBLOCKTIMEOUT
   CFG_LOCK_READ(slapdFrontendConfig);
-  retVal = slapdFrontendConfig->ioblocktimeout;
+#endif
+  retVal = (int)slapdFrontendConfig->ioblocktimeout;
+#ifndef ATOMIC_GETSET_IOBLOCKTIMEOUT
   CFG_UNLOCK_READ(slapdFrontendConfig);	
+#endif
 
   return retVal;
 }
@@ -5318,7 +5336,7 @@ config_get_auditlog_logging_enabled(){
   slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
   int retVal;
 
-  retVal = slapdFrontendConfig->auditlog_logging_enabled;
+  retVal = (int)slapdFrontendConfig->auditlog_logging_enabled;
 
   return retVal;
 }
@@ -5328,7 +5346,7 @@ config_get_accesslog_logging_enabled(){
     slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
     int retVal;
 
-    retVal = slapdFrontendConfig->accesslog_logging_enabled;
+    retVal = (int)slapdFrontendConfig->accesslog_logging_enabled;
 
     return retVal;
 }
@@ -5383,9 +5401,9 @@ config_get_unauth_binds_switch(void)
 {
 	int retVal;
 	slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
-	CFG_LOCK_READ(slapdFrontendConfig);
-	retVal = slapdFrontendConfig->allow_unauth_binds;
-	CFG_UNLOCK_READ(slapdFrontendConfig);
+	CFG_ONOFF_LOCK_READ(slapdFrontendConfig);
+	retVal = (int)slapdFrontendConfig->allow_unauth_binds;
+	CFG_ONOFF_UNLOCK_READ(slapdFrontendConfig);
 
 	return retVal;
 }
@@ -5395,9 +5413,9 @@ config_get_require_secure_binds(void)
 {
 	int retVal;
 	slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
-	CFG_LOCK_READ(slapdFrontendConfig);
-	retVal = slapdFrontendConfig->require_secure_binds;
-	CFG_UNLOCK_READ(slapdFrontendConfig);
+	CFG_ONOFF_LOCK_READ(slapdFrontendConfig);
+	retVal = (int)slapdFrontendConfig->require_secure_binds;
+	CFG_ONOFF_UNLOCK_READ(slapdFrontendConfig);
 
 	return retVal;
 }
@@ -5407,9 +5425,9 @@ config_get_anon_access_switch(void)
 {
 	int retVal = 0;
 	slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
-	CFG_LOCK_READ(slapdFrontendConfig);
-        retVal = slapdFrontendConfig->allow_anon_access;
-	CFG_UNLOCK_READ(slapdFrontendConfig);
+	CFG_ONOFF_LOCK_READ(slapdFrontendConfig);
+	retVal = (int)slapdFrontendConfig->allow_anon_access;
+	CFG_ONOFF_UNLOCK_READ(slapdFrontendConfig);
 	return retVal;
 }
 
@@ -5639,9 +5657,9 @@ config_get_minssf_exclude_rootdse()
 {
   int retVal;
   slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
-  CFG_LOCK_READ(slapdFrontendConfig);
-  retVal = slapdFrontendConfig->minssf_exclude_rootdse;
-  CFG_UNLOCK_READ(slapdFrontendConfig);
+  CFG_ONOFF_LOCK_READ(slapdFrontendConfig);
+  retVal = (int)slapdFrontendConfig->minssf_exclude_rootdse;
+  CFG_ONOFF_UNLOCK_READ(slapdFrontendConfig);
 
   return retVal;
 }
@@ -5661,9 +5679,13 @@ config_set_max_filter_nest_level( const char *attrname, char *value,
 	return retVal;
   }
 
+#ifdef ATOMIC_GETSET_FILTER_NEST_LEVEL
+  PR_AtomicSet(&slapdFrontendConfig->max_filter_nest_level, atoi(value));
+#else
   CFG_LOCK_WRITE(slapdFrontendConfig);
   slapdFrontendConfig->max_filter_nest_level = atoi(value);
   CFG_UNLOCK_WRITE(slapdFrontendConfig);
+#endif
   return retVal;
 }
 
@@ -5673,9 +5695,13 @@ config_get_max_filter_nest_level()
     slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
 	int	retVal;
 
+#ifndef ATOMIC_GETSET_FILTER_NEST_LEVEL
 	CFG_LOCK_READ(slapdFrontendConfig);
-    retVal = slapdFrontendConfig->max_filter_nest_level;
+#endif
+    retVal = (int)slapdFrontendConfig->max_filter_nest_level;
+#ifndef ATOMIC_GETSET_FILTER_NEST_LEVEL
 	CFG_UNLOCK_READ(slapdFrontendConfig);
+#endif
 	return retVal;
 }
 
@@ -5695,9 +5721,9 @@ config_get_ndn_cache_enabled(){
     slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
     int retVal;
 
-    CFG_LOCK_READ(slapdFrontendConfig);
-    retVal = slapdFrontendConfig->ndn_cache_enabled;
-    CFG_UNLOCK_READ(slapdFrontendConfig);
+    CFG_ONOFF_LOCK_READ(slapdFrontendConfig);
+    retVal = (int)slapdFrontendConfig->ndn_cache_enabled;
+    CFG_ONOFF_UNLOCK_READ(slapdFrontendConfig);
     return retVal;
 }
 
@@ -6148,7 +6174,7 @@ int
 config_get_mempool_switch()
 {
 	slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
-	return slapdFrontendConfig->mempool_switch;
+	return (int)slapdFrontendConfig->mempool_switch;
 }
 
 int
@@ -6221,7 +6247,7 @@ int
 config_get_csnlogging()
 {
 	slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
-	return slapdFrontendConfig->csnlogging;
+	return (int)slapdFrontendConfig->csnlogging;
 }
 
 int
@@ -6243,7 +6269,7 @@ int
 config_get_attrname_exceptions()
 {
 	slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
-	return slapdFrontendConfig->attrname_exceptions;
+	return (int)slapdFrontendConfig->attrname_exceptions;
 }
 
 int
@@ -6295,7 +6321,7 @@ config_get_rewrite_rfc1274()
   slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
   int retVal;
 
-  retVal = slapdFrontendConfig->rewrite_rfc1274;
+  retVal = (int)slapdFrontendConfig->rewrite_rfc1274;
   return retVal; 
 }
 
@@ -6466,9 +6492,9 @@ config_get_force_sasl_external(void)
 {
 	int retVal;
 	slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
-	CFG_LOCK_READ(slapdFrontendConfig);
-	retVal = slapdFrontendConfig->force_sasl_external;
-	CFG_UNLOCK_READ(slapdFrontendConfig);
+	CFG_ONOFF_LOCK_READ(slapdFrontendConfig);
+	retVal = (int)slapdFrontendConfig->force_sasl_external;
+	CFG_ONOFF_UNLOCK_READ(slapdFrontendConfig);
 
 	return retVal;
 }
@@ -6494,9 +6520,9 @@ config_get_entryusn_global(void)
 {
     int retVal;
     slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
-    CFG_LOCK_READ(slapdFrontendConfig);
-    retVal = slapdFrontendConfig->entryusn_global;
-    CFG_UNLOCK_READ(slapdFrontendConfig);
+    CFG_ONOFF_LOCK_READ(slapdFrontendConfig);
+    retVal = (int)slapdFrontendConfig->entryusn_global;
+    CFG_ONOFF_UNLOCK_READ(slapdFrontendConfig);
 
     return retVal;
 }
@@ -7078,14 +7104,14 @@ config_set_accesslog_enabled(int value){
     slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
     char errorbuf[BUFSIZ];
 
-    CFG_LOCK_WRITE(slapdFrontendConfig);
-    slapdFrontendConfig->accesslog_logging_enabled = value;
+    CFG_ONOFF_LOCK_WRITE(slapdFrontendConfig);
+    slapdFrontendConfig->accesslog_logging_enabled = (int)value;
     if(value){
         log_set_logging(CONFIG_ACCESSLOG_LOGGING_ENABLED_ATTRIBUTE, "on", SLAPD_ACCESS_LOG, errorbuf, CONFIG_APPLY);
     } else {
         log_set_logging(CONFIG_ACCESSLOG_LOGGING_ENABLED_ATTRIBUTE, "off", SLAPD_ACCESS_LOG, errorbuf, CONFIG_APPLY);
     }
-    CFG_UNLOCK_WRITE(slapdFrontendConfig);
+    CFG_ONOFF_UNLOCK_WRITE(slapdFrontendConfig);
 }
 
 void
@@ -7093,14 +7119,14 @@ config_set_auditlog_enabled(int value){
     slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
     char errorbuf[BUFSIZ];
 
-    CFG_LOCK_WRITE(slapdFrontendConfig);
-    slapdFrontendConfig->auditlog_logging_enabled = value;
+    CFG_ONOFF_LOCK_WRITE(slapdFrontendConfig);
+    slapdFrontendConfig->auditlog_logging_enabled = (int)value;
     if(value){
         log_set_logging(CONFIG_AUDITLOG_LOGGING_ENABLED_ATTRIBUTE, "on", SLAPD_AUDIT_LOG, errorbuf, CONFIG_APPLY);
     } else {
         log_set_logging(CONFIG_AUDITLOG_LOGGING_ENABLED_ATTRIBUTE, "off", SLAPD_AUDIT_LOG, errorbuf, CONFIG_APPLY);
     }
-    CFG_UNLOCK_WRITE(slapdFrontendConfig);
+    CFG_ONOFF_UNLOCK_WRITE(slapdFrontendConfig);
 }
 
 char *

+ 85 - 59
ldap/servers/slapd/slap.h

@@ -339,6 +339,20 @@ typedef void	(*VFPV)(); /* takes undefined arguments */
 #define SLAPD_VALIDATE_CERT_ON          1
 #define SLAPD_VALIDATE_CERT_WARN        2
 
+/* if the use of atomic get/set for config parameters is enabled, enable the use for the specific parameters defined below */
+#define USE_ATOMIC_GETSET 1
+#ifdef USE_ATOMIC_GETSET
+#define ATOMIC_GETSET_MAXTHREADSPERCONN 1
+#define ATOMIC_GETSET_IOBLOCKTIMEOUT 1
+#define ATOMIC_GETSET_FILTER_NEST_LEVEL 1
+#define ATOMIC_GETSET_ONOFF 1
+typedef PRInt32 slapi_onoff_t;
+typedef PRInt32 slapi_int_t;
+#else
+typedef int slapi_onoff_t;
+typedef int slapi_int_t;
+#endif
+
 struct subfilt {
 	char	*sf_type;
 	char	*sf_initial;
@@ -1520,9 +1534,9 @@ struct slapi_task {
 /* End of interface to support online tasks **********************************/
 
 typedef struct passwordpolicyarray {
-  int pw_change;        /* 1 - indicates that users are allowed to change the pwd */
-  int pw_must_change;   /* 1 - indicates that users must change pwd upon reset */
-  int pw_syntax;
+  slapi_onoff_t pw_change;        /* 1 - indicates that users are allowed to change the pwd */
+  slapi_onoff_t pw_must_change;   /* 1 - indicates that users must change pwd upon reset */
+  slapi_onoff_t pw_syntax;
   int pw_minlength;
   int pw_mindigits;
   int pw_minalphas;
@@ -1533,20 +1547,20 @@ typedef struct passwordpolicyarray {
   int pw_maxrepeats;
   int pw_mincategories;
   int pw_mintokenlength;
-  int pw_exp;
+  slapi_onoff_t pw_exp;
   long pw_maxage;
   long pw_minage;
   long pw_warning;
-  int pw_history;
+  slapi_onoff_t pw_history;
   int pw_inhistory;
-  int pw_lockout;
+  slapi_onoff_t pw_lockout;
   int pw_maxfailure;
-  int pw_unlock;
+  slapi_onoff_t pw_unlock;
   long pw_lockduration;
   long pw_resetfailurecount;
   int pw_gracelimit;
-  int pw_is_legacy;
-  int pw_track_update_time;
+  slapi_onoff_t pw_is_legacy;
+  slapi_onoff_t pw_track_update_time;
   struct pw_scheme *pw_storagescheme;
 } passwdPolicy;
 
@@ -2077,6 +2091,18 @@ typedef struct _slapdEntryPoints {
 #define CFG_UNLOCK_WRITE(cfg) slapi_rwlock_unlock(cfg->cfg_rwlock)
 #endif
 
+#ifdef ATOMIC_GETSET_ONOFF
+#define CFG_ONOFF_LOCK_READ(cfg)
+#define CFG_ONOFF_UNLOCK_READ(cfg)
+#define CFG_ONOFF_LOCK_WRITE(cfg)
+#define CFG_ONOFF_UNLOCK_WRITE(cfg)
+#else
+#define CFG_ONOFF_LOCK_READ(cfg) CFG_LOCK_READ(cfg)
+#define CFG_ONOFF_UNLOCK_READ(cfg) CFG_UNLOCK_READ(cfg)
+#define CFG_ONOFF_LOCK_WRITE(cfg) CFG_LOCK_WRITE(cfg)
+#define CFG_ONOFF_UNLOCK_WRITE(cfg) CFG_UNLOCK_WRITE(cfg)
+#endif
+
 #define REFER_MODE_OFF 0 
 #define REFER_MODE_ON 1
 
@@ -2089,32 +2115,32 @@ typedef struct _slapdFrontendConfig {
   PRLock           *cfg_lock;
 #endif
   struct pw_scheme *rootpwstoragescheme;
-  int accesscontrol;
+  slapi_onoff_t accesscontrol;
   int groupevalnestlevel;
   int idletimeout;
-  int ioblocktimeout;
-  int lastmod;
+  slapi_int_t ioblocktimeout;
+  slapi_onoff_t lastmod;
 #if !defined(_WIN32) && !defined(AIX) 
   int maxdescriptors;
 #endif /* !_WIN32 && !AIX */
   int conntablesize;
-  int maxthreadsperconn;
+  slapi_int_t maxthreadsperconn;
   int outbound_ldap_io_timeout;
-  int nagle;
+  slapi_onoff_t nagle;
   int port;
-  int readonly;
+  slapi_onoff_t readonly;
   int reservedescriptors;
-  int schemacheck;
-  int schemamod;
-  int syntaxcheck;
-  int syntaxlogging;
-  int dn_validate_strict;
-  int ds4_compatible_schema;
-  int schema_ignore_trailing_spaces;
+  slapi_onoff_t schemacheck;
+  slapi_onoff_t schemamod;
+  slapi_onoff_t syntaxcheck;
+  slapi_onoff_t syntaxlogging;
+  slapi_onoff_t dn_validate_strict;
+  slapi_onoff_t ds4_compatible_schema;
+  slapi_onoff_t schema_ignore_trailing_spaces;
   int secureport;
-  int security;
+  slapi_onoff_t security;
   int SSLclientAuth;
-  int ssl_check_hostname;
+  slapi_onoff_t ssl_check_hostname;
   int validate_cert;
   int sizelimit;
   int SNMPenabled;
@@ -2144,19 +2170,19 @@ typedef struct _slapdFrontendConfig {
   char **backendconfig;
   char **include;
   char **plugin;
-  int plugin_track;
+  slapi_onoff_t plugin_track;
   struct pw_scheme *pw_storagescheme;
 
-  int pwpolicy_local;
-  int pw_is_global_policy;
+  slapi_onoff_t pwpolicy_local;
+  slapi_onoff_t pw_is_global_policy;
   passwdPolicy pw_policy;
 
   /* ACCESS LOG */
-  int  accesslog_logging_enabled;
+  slapi_onoff_t accesslog_logging_enabled;
   char *accesslog_mode;
   int  accesslog_maxnumlogs;
   int  accesslog_maxlogsize;
-  int  accesslog_rotationsync_enabled;
+  slapi_onoff_t accesslog_rotationsync_enabled;
   int  accesslog_rotationsynchour;
   int  accesslog_rotationsyncmin;
   int  accesslog_rotationtime;
@@ -2166,15 +2192,15 @@ typedef struct _slapdFrontendConfig {
   int  accesslog_exptime;
   char *accesslog_exptimeunit;
   int	accessloglevel;
-  int  accesslogbuffering;
-  int  csnlogging;
+  slapi_onoff_t accesslogbuffering;
+  slapi_onoff_t csnlogging;
 
    /* ERROR LOG */
-  int errorlog_logging_enabled;
+  slapi_onoff_t errorlog_logging_enabled;
   char *errorlog_mode;
   int  errorlog_maxnumlogs;
   int  errorlog_maxlogsize;
-  int  errorlog_rotationsync_enabled;
+  slapi_onoff_t errorlog_rotationsync_enabled;
   int  errorlog_rotationsynchour;
   int  errorlog_rotationsyncmin;
   int  errorlog_rotationtime;
@@ -2188,11 +2214,11 @@ typedef struct _slapdFrontendConfig {
   /* AUDIT LOG */
   char *auditlog;		/* replication audit file */
   int  auditloglevel;
-  int  auditlog_logging_enabled;
+  slapi_onoff_t auditlog_logging_enabled;
   char *auditlog_mode;
   int  auditlog_maxnumlogs;
   int  auditlog_maxlogsize;
-  int  auditlog_rotationsync_enabled;
+  slapi_onoff_t auditlog_rotationsync_enabled;
   int  auditlog_rotationsynchour;
   int  auditlog_rotationsyncmin;
   int  auditlog_rotationtime;
@@ -2201,20 +2227,20 @@ typedef struct _slapdFrontendConfig {
   int  auditlog_minfreespace;
   int  auditlog_exptime;
   char *auditlog_exptimeunit;
-  int  auditlog_logging_hide_unhashed_pw;
+  slapi_onoff_t auditlog_logging_hide_unhashed_pw;
 
-  int return_exact_case;	/* Return attribute names with the same case 
-				 * as they appear in at.conf */
+  slapi_onoff_t return_exact_case;	/* Return attribute names with the same case
+                                       as they appear in at.conf */
 
-  int result_tweak;
+  slapi_onoff_t result_tweak;
   char *refer_url;		/* for referral mode */
   int refer_mode;       /* for quick test */
   int	slapd_type;		/* Directory type; Full or Lite */
   
   ber_len_t maxbersize; /* Maximum BER element size we'll accept */
-  int max_filter_nest_level;/* deepest nested filter we will accept */
-  int enquote_sup_oc;       /* put single quotes around an oc's 
-                               superior oc in cn=schema */
+  slapi_int_t max_filter_nest_level;/* deepest nested filter we will accept */
+  slapi_onoff_t enquote_sup_oc;       /* put single quotes around an oc's
+                                         superior oc in cn=schema */
 
   char *certmap_basedn;	    /* Default Base DN for certmap */
 
@@ -2229,38 +2255,38 @@ typedef struct _slapdFrontendConfig {
   char *bakdir;     /* full path name of directory containing bakup files */
   char *rundir;     /* where pid, snmp stats, and ldapi files go */
   char *saslpath;   /* full path name of directory containing sasl plugins */
-  int attrname_exceptions;  /* if true, allow questionable attribute names */
-  int rewrite_rfc1274;		/* return attrs for both v2 and v3 names */
+  slapi_onoff_t attrname_exceptions;  /* if true, allow questionable attribute names */
+  slapi_onoff_t rewrite_rfc1274;		/* return attrs for both v2 and v3 names */
   char *schemareplace;		/* see CONFIG_SCHEMAREPLACE_* #defines below */
   char *ldapi_filename;		/* filename for ldapi socket */
-  int ldapi_switch;             /* switch to turn ldapi on/off */
-  int ldapi_bind_switch;        /* switch to turn ldapi auto binding on/off */
+  slapi_onoff_t ldapi_switch;             /* switch to turn ldapi on/off */
+  slapi_onoff_t ldapi_bind_switch;        /* switch to turn ldapi auto binding on/off */
   char *ldapi_root_dn;          /* DN to map root to over LDAPI */
-  int ldapi_map_entries;        /* turns ldapi entry bind mapping on/off */
+  slapi_onoff_t ldapi_map_entries;        /* turns ldapi entry bind mapping on/off */
   char *ldapi_uidnumber_type;   /* type that contains uid number */
   char *ldapi_gidnumber_type;   /* type that contains gid number */
   char *ldapi_search_base_dn;   /* base dn to search for mapped entries */
   char *ldapi_auto_dn_suffix;   /* suffix to be appended to auto gen DNs */
-  int slapi_counters;           /* switch to turn slapi_counters on/off */
-  int allow_unauth_binds;       /* switch to enable/disable unauthenticated binds */
-  int require_secure_binds;	/* switch to require simple binds to use a secure channel */
-  int allow_anon_access;	/* switch to enable/disable anonymous access */
+  slapi_onoff_t slapi_counters;           /* switch to turn slapi_counters on/off */
+  slapi_onoff_t allow_unauth_binds;       /* switch to enable/disable unauthenticated binds */
+  slapi_onoff_t require_secure_binds;	/* switch to require simple binds to use a secure channel */
+  slapi_onoff_t allow_anon_access;	/* switch to enable/disable anonymous access */
   int localssf;			/* the security strength factor to assign to local conns (ldapi) */
   int minssf;			/* minimum security strength factor (for SASL and SSL/TLS) */
-  int minssf_exclude_rootdse; /* ON: minssf is ignored when searching rootdse */
+  slapi_onoff_t minssf_exclude_rootdse; /* ON: minssf is ignored when searching rootdse */
   size_t maxsasliosize;         /* limit incoming SASL IO packet size */
   char *anon_limits_dn;		/* template entry for anonymous resource limits */
 #ifndef _WIN32
   struct passwd *localuserinfo; /* userinfo of localuser */
 #endif /* _WIN32 */
 #ifdef MEMPOOL_EXPERIMENTAL
-  int mempool_switch;           /* switch to turn memory pool on/off */
+  slapi_onoff_t mempool_switch;           /* switch to turn memory pool on/off */
   int mempool_maxfreelist;      /* max free list length per memory pool item */
   long system_page_size;		/* system page size */
   int system_page_bits;			/* bit count to shift the system page size */
 #endif /* MEMPOOL_EXPERIMENTAL */
-  int force_sasl_external;      /* force SIMPLE bind to be SASL/EXTERNAL if client cert credentials were supplied */
-  int entryusn_global;          /* Entry USN: Use global counter */
+  slapi_onoff_t force_sasl_external;      /* force SIMPLE bind to be SASL/EXTERNAL if client cert credentials were supplied */
+  slapi_onoff_t entryusn_global;          /* Entry USN: Use global counter */
   char *allowed_to_delete_attrs;/* list of config attrs allowed to delete */
   char *entryusn_import_init;   /* Entry USN: determine the initital value of import */
   int pagedsizelimit;
@@ -2268,14 +2294,14 @@ typedef struct _slapdFrontendConfig {
   char *allowed_sasl_mechs;     /* comma/space separated list of allowed sasl mechs */
 
   /* disk monitoring */
-  int disk_monitoring;
+  slapi_onoff_t disk_monitoring;
   int disk_threshold;
   int disk_grace_period;
-  int disk_preserve_logging;
-  int disk_logging_critical;
+  slapi_onoff_t disk_preserve_logging;
+  slapi_onoff_t disk_logging_critical;
 
   /* normalized dn cache */
-  int ndn_cache_enabled;
+  slapi_onoff_t ndn_cache_enabled;
   size_t ndn_cache_max_size;
 
   /* atomic settings */