void idle_init(struct fmt_main *format) { #if defined(_POSIX_PRIORITY_SCHEDULING) && defined(SCHED_IDLE) struct sched_param param = {0}; #endif if (!idle_requested(format) || (options.flags & FLG_STDOUT)) return; clk_tck_init(); #if defined(__MINGW32__) || defined (_MSC_VER) SetPriorityClass(GetCurrentProcess(), IDLE_PRIORITY_CLASS); SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_IDLE); #elif defined(__BEOS__) set_thread_priority(getpid(), 1); #else /* * Normally, the range is -20 to 19, but some systems can do 20 as well (at * least some versions of Linux on Alpha), so we try 20. We assume that we're * started with a non-negative nice value (so no need to increment it by more * than 20). */ if (nice(20) == -1) perror("nice"); #endif #if defined(_POSIX_PRIORITY_SCHEDULING) && defined(SCHED_IDLE) use_yield = sched_setscheduler(getpid(), SCHED_IDLE, ¶m) != 0; #elif defined(_POSIX_PRIORITY_SCHEDULING) use_yield = 1; #endif }
static void john_run(void) { if (options.flags & FLG_TEST_CHK) exit_status = benchmark_all() ? 1 : 0; else if (options.flags & FLG_MAKECHR_CHK) do_makechars(&database, options.charset); else if (options.flags & FLG_CRACKING_CHK) { int remaining = database.password_count; if (!(options.flags & FLG_STDOUT)) { status_init(NULL, 1); log_init(LOG_NAME, options.loader.activepot, options.session); john_log_format(); if (idle_requested(database.format)) log_event("- Configured to use otherwise idle " "processor cycles only"); } tty_init(options.flags & FLG_STDIN_CHK); #if defined(HAVE_MPI) && defined(_OPENMP) if (database.format->params.flags & FMT_OMP && omp_get_max_threads() > 1 && mpi_p > 1) { if(cfg_get_bool(SECTION_OPTIONS, NULL, "MPIOMPmutex", 1)) { if(cfg_get_bool(SECTION_OPTIONS, NULL, "MPIOMPverbose", 1) && mpi_id == 0) fprintf(stderr, "MPI in use, disabling OMP (see doc/README.mpi)\n"); omp_set_num_threads(1); } else if(cfg_get_bool(SECTION_OPTIONS, NULL, "MPIOMPverbose", 1) && mpi_id == 0) fprintf(stderr, "Note: Running both MPI and OMP (see doc/README.mpi)\n"); } #endif if (options.flags & FLG_SINGLE_CHK) do_single_crack(&database); else if (options.flags & FLG_WORDLIST_CHK) do_wordlist_crack(&database, options.wordlist, (options.flags & FLG_RULES) != 0); else if (options.flags & FLG_INC_CHK) do_incremental_crack(&database, options.charset); else if (options.flags & FLG_MKV_CHK) do_markov_crack(&database, options.mkv_level, options.mkv_start, options.mkv_end, options.mkv_maxlen, options.mkv_minlevel, options.mkv_minlen); else if (options.flags & FLG_EXTERNAL_CHK) do_external_crack(&database); else if (options.flags & FLG_BATCH_CHK) do_batch_crack(&database); status_print(); tty_done(); if (database.password_count < remaining) { char *might = "Warning: passwords printed above might"; char *partial = " be partial"; char *not_all = " not be all those cracked"; switch (database.options->flags & (DB_SPLIT | DB_NODUP)) { case DB_SPLIT: #ifdef HAVE_MPI if (mpi_id == 0) #endif fprintf(stderr, "%s%s\n", might, partial); break; case DB_NODUP: #ifdef HAVE_MPI if (mpi_id == 0) #endif fprintf(stderr, "%s%s\n", might, not_all); break; case (DB_SPLIT | DB_NODUP): #ifdef HAVE_MPI if (mpi_id == 0) #endif fprintf(stderr, "%s%s and%s\n", might, partial, not_all); } #ifdef HAVE_MPI if (mpi_id == 0) #endif fputs("Use the \"--show\" option to display all of " "the cracked passwords reliably\n", stderr); } } }