void auto_purge() { char s[80]; unsigned int days = 0; int skipsl = 0; IniFile iniFile(FilePath(GetApplication()->GetHomeDir(), WWIV_INI), INI_TAG); if (iniFile.IsOpen()) { days = iniFile.GetNumericValue("AUTO_USER_PURGE"); skipsl = iniFile.GetNumericValue("NO_PURGE_SL"); } iniFile.Close(); if (days < 60) { if (days > 0) { sysoplog("!!! WARNING: Auto-Purge canceled [AUTO_USER_PURGE < 60]", false); sysoplog("!!! WARNING: Edit WWIV.INI and Fix this", false); } return; } time_t tTime = time(NULL); int nUserNumber = 1; sysoplogfi(false, "Auto-Purged Inactive Users (over %d days, SL less than %d)", days, skipsl); do { WUser user; GetApplication()->GetUserManager()->ReadUser(&user, nUserNumber); if (!user.IsExemptAutoDelete()) { unsigned int d = static_cast<unsigned int>((tTime - user.GetLastOnDateNumber()) / SECONDS_PER_DAY_FLOAT); // if user is not already deleted && SL<NO_PURGE_SL && last_logon // greater than AUTO_USER_PURGE days ago if (!user.IsUserDeleted() && user.GetSl() < skipsl && d > days) { sprintf(s, "*** AUTOPURGE: Deleted User: #%3.3d %s", nUserNumber, user.GetName()); sysoplog(s, false); deluser(nUserNumber); } } ++nUserNumber; } while (nUserNumber <= GetApplication()->GetStatusManager()->GetUserCount()); }