summaryrefslogtreecommitdiffstats
path: root/ldap/servers/plugins/acctpolicy/acct_config.c
diff options
context:
space:
mode:
Diffstat (limited to 'ldap/servers/plugins/acctpolicy/acct_config.c')
-rw-r--r--ldap/servers/plugins/acctpolicy/acct_config.c32
1 files changed, 26 insertions, 6 deletions
diff --git a/ldap/servers/plugins/acctpolicy/acct_config.c b/ldap/servers/plugins/acctpolicy/acct_config.c
index 11473208..5d462a37 100644
--- a/ldap/servers/plugins/acctpolicy/acct_config.c
+++ b/ldap/servers/plugins/acctpolicy/acct_config.c
@@ -68,7 +68,8 @@ acct_policy_load_config_startup( Slapi_PBlock* pb, void* plugin_id ) {
*/
static int
acct_policy_entry2config( Slapi_Entry *e, acctPluginCfg *newcfg ) {
- const char *config_val;
+ char *config_val;
+ int rc = 0;
if( newcfg == NULL ) {
slapi_log_error( SLAPI_LOG_FATAL, PLUGIN_NAME,
@@ -99,17 +100,36 @@ acct_policy_entry2config( Slapi_Entry *e, acctPluginCfg *newcfg ) {
}
config_val = get_attr_string_val( e, CFG_RECORD_LOGIN );
- if( strcasecmp( config_val, "true" ) == 0 ||
- strcasecmp( config_val, "yes" ) == 0 ||
- strcasecmp( config_val, "on" ) == 0 ||
- strcasecmp( config_val, "1" ) == 0 ) {
+ if( config_val &&
+ ( strcasecmp( config_val, "true" ) == 0 ||
+ strcasecmp( config_val, "yes" ) == 0 ||
+ strcasecmp( config_val, "on" ) == 0 ||
+ strcasecmp( config_val, "1" ) == 0 ) ) {
newcfg->always_record_login = 1;
} else {
newcfg->always_record_login = 0;
}
slapi_ch_free_string(&config_val);
- return( 0 );
+ /* the default limit if not set in the acctPolicySubentry */
+ config_val = get_attr_string_val( e, newcfg->limit_attr_name );
+ if( config_val ) {
+ char *endptr = NULL;
+ newcfg->inactivitylimit = strtoul(config_val, &endptr, 10);
+ if (endptr && (*endptr != '\0')) {
+ slapi_log_error( SLAPI_LOG_FATAL, PLUGIN_NAME,
+ "Failed to parse [%s] from the config entry: [%s] is not a valid unsigned long value\n",
+ newcfg->limit_attr_name, config_val );
+
+ rc = -1;
+ newcfg->inactivitylimit = ULONG_MAX;
+ }
+ } else {
+ newcfg->inactivitylimit = ULONG_MAX;
+ }
+ slapi_ch_free_string(&config_val);
+
+ return( rc );
}
/*