Пример #1
0
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;
	}
}
Пример #2
0
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;
    }
}