static void single_run(void) { char *prerule, *rule; struct db_salt *salt; int min, saved_min; int have_words; saved_min = rec_rule; while ((prerule = rpp_next(rule_ctx))) { if (!(rule = rules_reject(prerule, 0, NULL, single_db))) { log_event("- Rule #%d: '%.100s' rejected", ++rule_number, prerule); continue; } if (strcmp(prerule, rule)) log_event("- Rule #%d: '%.100s' accepted as '%s'", rule_number + 1, prerule, rule); else log_event("- Rule #%d: '%.100s' accepted", rule_number + 1, prerule); if (saved_min != rec_rule) { log_event("- Oldest still in use is now rule #%d", rec_rule + 1); saved_min = rec_rule; } have_words = 0; min = rule_number; salt = single_db->salts; do { if (!salt->list) continue; if (single_process_salt(salt, rule)) return; if (!salt->keys->have_words) continue; have_words = 1; if (salt->keys->rule < min) min = salt->keys->rule; } while ((salt = salt->next)); rec_rule = min; rule_number++; if (have_words) continue; log_event("- No information to base%s candidate passwords on", rule_number > 1 ? " further" : ""); return; } }
static void single_run(void) { char *prerule, *rule; struct db_salt *salt; int min, saved_min; int have_words; saved_min = rec_rule; while ((prerule = rpp_next(rule_ctx))) { if (options.node_count) { int for_node = rule_number % options.node_count + 1; if (for_node < options.node_min || for_node > options.node_max) { rule_number++; continue; } } if (!(rule = rules_reject(prerule, 0, NULL, single_db))) { if (options.verbosity > 2) log_event("- Rule #%d: '%.100s' rejected", ++rule_number, prerule); continue; } if (strcmp(prerule, rule)) { if (options.verbosity > 2) log_event("- Rule #%d: '%.100s' accepted as '%.100s'", rule_number + 1, prerule, rule); } else { if (options.verbosity > 2) log_event("- Rule #%d: '%.100s' accepted", rule_number + 1, prerule); } if (saved_min != rec_rule) { if (options.verbosity > 2) log_event("- Oldest still in use is now rule #%d", rec_rule + 1); saved_min = rec_rule; } have_words = 0; min = rule_number; /* pot reload might have removed the salt */ if (!(salt = single_db->salts)) return; do { if (!salt->list) continue; if (single_process_salt(salt, rule)) return; if (!salt->keys->have_words) continue; have_words = 1; if (salt->keys->rule < min) min = salt->keys->rule; } while ((salt = salt->next)); if (event_reload && single_db->salts) crk_reload_pot(); rec_rule = min; rule_number++; if (have_words) continue; log_event("- No information to base%s candidate passwords on", rule_number > 1 ? " further" : ""); return; } }