int update_pw_retry ( Slapi_PBlock *pb ) { Slapi_Entry *e; int retry_cnt=0; time_t reset_time; time_t cur_time; char *cur_time_str = NULL; char *retryCountResetTime; int passwordRetryCount; int rc = 0; /* get the entry */ e = get_entry ( pb, NULL ); if ( e == NULL ) { return ( 1 ); } cur_time = current_time(); /* check if the retry count can be reset. */ retryCountResetTime= slapi_entry_attr_get_charptr(e, "retryCountResetTime"); if(retryCountResetTime!=NULL) { reset_time = parse_genTime (retryCountResetTime); slapi_ch_free((void **) &retryCountResetTime ); cur_time_str = format_genTime ( cur_time ); if ( difftime ( parse_genTime( cur_time_str ), reset_time) >= 0 ) { /* set passwordRetryCount to 1 */ /* reset retryCountResetTime */ rc = set_retry_cnt_and_time ( pb, 1, cur_time ); slapi_ch_free((void **) &cur_time_str ); slapi_entry_free( e ); return ( rc ); /* success */ } else { slapi_ch_free((void **) &cur_time_str ); } } else { /* initialize passwordRetryCount and retryCountResetTime */ rc = set_retry_cnt_and_time ( pb, 1, cur_time ); slapi_entry_free( e ); return ( rc ); /* success */ } passwordRetryCount = slapi_entry_attr_get_int(e, "passwordRetryCount"); if (passwordRetryCount >= 0) { retry_cnt = passwordRetryCount + 1; if ( retry_cnt == 1 ) { /* set retryCountResetTime */ rc = set_retry_cnt_and_time ( pb, retry_cnt, cur_time ); } else { /* set passwordRetryCount to retry_cnt */ rc = set_retry_cnt ( pb, retry_cnt ); } } slapi_entry_free( e ); return rc; /* success */ }
time_t parse_localTime (char* from) /* the inverse of format_localTime */ { return (parse_genTime(from)); }