diff --git a/docs/changes.txt b/docs/changes.txt index 76e561f28..9e5eaf44e 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -56,6 +56,7 @@ - Self Test: Skip self-test for mode 8900 - user-configurable scrypt settings are incompatible with fixed settings in the self-test hash - Terminal: Send clear line code to the same output stream as the message immediately following - Timer: Switch from gettimeofday() to clock_gettime() to work around problems on cygwin +- User Options: According to getopts manpage the last element of the option array has to be filled with zeros * changes v4.0.0 -> v4.0.1: diff --git a/src/user_options.c b/src/user_options.c index c6784123e..373716fae 100644 --- a/src/user_options.c +++ b/src/user_options.c @@ -18,98 +18,98 @@ static const char *short_options = "hVvm:a:r:j:k:g:o:t:d:D:n:u:c:p:s:l:1:2:3:4:i static const struct option long_options[] = { - {"advice-disable", no_argument, 0, IDX_ADVICE_DISABLE}, - {"attack-mode", required_argument, 0, IDX_ATTACK_MODE}, - {"benchmark", no_argument, 0, IDX_BENCHMARK}, - {"benchmark-all", no_argument, 0, IDX_BENCHMARK_ALL}, - {"bitmap-max", required_argument, 0, IDX_BITMAP_MAX}, - {"bitmap-min", required_argument, 0, IDX_BITMAP_MIN}, - {"cpu-affinity", required_argument, 0, IDX_CPU_AFFINITY}, - {"custom-charset1", required_argument, 0, IDX_CUSTOM_CHARSET_1}, - {"custom-charset2", required_argument, 0, IDX_CUSTOM_CHARSET_2}, - {"custom-charset3", required_argument, 0, IDX_CUSTOM_CHARSET_3}, - {"custom-charset4", required_argument, 0, IDX_CUSTOM_CHARSET_4}, - {"debug-file", required_argument, 0, IDX_DEBUG_FILE}, - {"debug-mode", required_argument, 0, IDX_DEBUG_MODE}, - {"encoding-from", required_argument, 0, IDX_ENCODING_FROM}, - {"encoding-to", required_argument, 0, IDX_ENCODING_TO}, - {"example-hashes", no_argument, 0, IDX_EXAMPLE_HASHES}, - {"force", no_argument, 0, IDX_FORCE}, - {"generate-rules-func-max", required_argument, 0, IDX_RP_GEN_FUNC_MAX}, - {"generate-rules-func-min", required_argument, 0, IDX_RP_GEN_FUNC_MIN}, - {"generate-rules", required_argument, 0, IDX_RP_GEN}, - {"generate-rules-seed", required_argument, 0, IDX_RP_GEN_SEED}, - {"gpu-temp-abort", required_argument, 0, IDX_GPU_TEMP_ABORT}, - {"gpu-temp-disable", no_argument, 0, IDX_GPU_TEMP_DISABLE}, - {"hash-type", required_argument, 0, IDX_HASH_MODE}, - {"hccapx-message-pair", required_argument, 0, IDX_HCCAPX_MESSAGE_PAIR}, - {"help", no_argument, 0, IDX_HELP}, - {"hex-charset", no_argument, 0, IDX_HEX_CHARSET}, - {"hex-salt", no_argument, 0, IDX_HEX_SALT}, - {"hex-wordlist", no_argument, 0, IDX_HEX_WORDLIST}, - {"increment-max", required_argument, 0, IDX_INCREMENT_MAX}, - {"increment-min", required_argument, 0, IDX_INCREMENT_MIN}, - {"increment", no_argument, 0, IDX_INCREMENT}, - {"induction-dir", required_argument, 0, IDX_INDUCTION_DIR}, - {"keep-guessing", no_argument, 0, IDX_KEEP_GUESSING}, - {"kernel-accel", required_argument, 0, IDX_KERNEL_ACCEL}, - {"kernel-loops", required_argument, 0, IDX_KERNEL_LOOPS}, - {"keyspace", no_argument, 0, IDX_KEYSPACE}, - {"left", no_argument, 0, IDX_LEFT}, - {"limit", required_argument, 0, IDX_LIMIT}, - {"logfile-disable", no_argument, 0, IDX_LOGFILE_DISABLE}, - {"loopback", no_argument, 0, IDX_LOOPBACK}, - {"machine-readable", no_argument, 0, IDX_MACHINE_READABLE}, - {"markov-classic", no_argument, 0, IDX_MARKOV_CLASSIC}, - {"markov-disable", no_argument, 0, IDX_MARKOV_DISABLE}, - {"markov-hcstat", required_argument, 0, IDX_MARKOV_HCSTAT}, - {"markov-threshold", required_argument, 0, IDX_MARKOV_THRESHOLD}, - {"nonce-error-corrections", required_argument, 0, IDX_NONCE_ERROR_CORRECTIONS}, - {"nvidia-spin-damp", required_argument, 0, IDX_NVIDIA_SPIN_DAMP}, - {"opencl-devices", required_argument, 0, IDX_OPENCL_DEVICES}, - {"opencl-device-types", required_argument, 0, IDX_OPENCL_DEVICE_TYPES}, - {"opencl-info", no_argument, 0, IDX_OPENCL_INFO}, - {"opencl-platforms", required_argument, 0, IDX_OPENCL_PLATFORMS}, - {"opencl-vector-width", required_argument, 0, IDX_OPENCL_VECTOR_WIDTH}, - {"optimized-kernel-enable", no_argument, 0, IDX_OPTIMIZED_KERNEL_ENABLE}, - {"outfile-autohex-disable", no_argument, 0, IDX_OUTFILE_AUTOHEX_DISABLE}, - {"outfile-check-dir", required_argument, 0, IDX_OUTFILE_CHECK_DIR}, - {"outfile-check-timer", required_argument, 0, IDX_OUTFILE_CHECK_TIMER}, - {"outfile-format", required_argument, 0, IDX_OUTFILE_FORMAT}, - {"outfile", required_argument, 0, IDX_OUTFILE}, - {"wordlist-autohex-disable", no_argument, 0, IDX_WORDLIST_AUTOHEX_DISABLE}, - {"potfile-disable", no_argument, 0, IDX_POTFILE_DISABLE}, - {"potfile-path", required_argument, 0, IDX_POTFILE_PATH}, - {"quiet", no_argument, 0, IDX_QUIET}, - {"remove", no_argument, 0, IDX_REMOVE}, - {"remove-timer", required_argument, 0, IDX_REMOVE_TIMER}, - {"restore-disable", no_argument, 0, IDX_RESTORE_DISABLE}, - {"restore-file-path", required_argument, 0, IDX_RESTORE_FILE_PATH}, - {"restore", no_argument, 0, IDX_RESTORE}, - {"rule-left", required_argument, 0, IDX_RULE_BUF_L}, - {"rule-right", required_argument, 0, IDX_RULE_BUF_R}, - {"rules-file", required_argument, 0, IDX_RP_FILE}, - {"runtime", required_argument, 0, IDX_RUNTIME}, - {"scrypt-tmto", required_argument, 0, IDX_SCRYPT_TMTO}, - {"self-test-disable", no_argument, 0, IDX_SELF_TEST_DISABLE}, - {"segment-size", required_argument, 0, IDX_SEGMENT_SIZE}, - {"separator", required_argument, 0, IDX_SEPARATOR}, - {"seperator", required_argument, 0, IDX_SEPARATOR}, - {"session", required_argument, 0, IDX_SESSION}, - {"show", no_argument, 0, IDX_SHOW}, - {"skip", required_argument, 0, IDX_SKIP}, - {"status", no_argument, 0, IDX_STATUS}, - {"status-timer", required_argument, 0, IDX_STATUS_TIMER}, - {"stdout", no_argument, 0, IDX_STDOUT_FLAG}, - {"speed-only", no_argument, 0, IDX_SPEED_ONLY}, - {"progress-only", no_argument, 0, IDX_PROGRESS_ONLY}, - {"truecrypt-keyfiles", required_argument, 0, IDX_TRUECRYPT_KEYFILES}, - {"username", no_argument, 0, IDX_USERNAME}, - {"veracrypt-keyfiles", required_argument, 0, IDX_VERACRYPT_KEYFILES}, - {"veracrypt-pim", required_argument, 0, IDX_VERACRYPT_PIM}, - {"version", no_argument, 0, IDX_VERSION}, - {"workload-profile", required_argument, 0, IDX_WORKLOAD_PROFILE}, - {} + {"advice-disable", no_argument, NULL, IDX_ADVICE_DISABLE}, + {"attack-mode", required_argument, NULL, IDX_ATTACK_MODE}, + {"benchmark", no_argument, NULL, IDX_BENCHMARK}, + {"benchmark-all", no_argument, NULL, IDX_BENCHMARK_ALL}, + {"bitmap-max", required_argument, NULL, IDX_BITMAP_MAX}, + {"bitmap-min", required_argument, NULL, IDX_BITMAP_MIN}, + {"cpu-affinity", required_argument, NULL, IDX_CPU_AFFINITY}, + {"custom-charset1", required_argument, NULL, IDX_CUSTOM_CHARSET_1}, + {"custom-charset2", required_argument, NULL, IDX_CUSTOM_CHARSET_2}, + {"custom-charset3", required_argument, NULL, IDX_CUSTOM_CHARSET_3}, + {"custom-charset4", required_argument, NULL, IDX_CUSTOM_CHARSET_4}, + {"debug-file", required_argument, NULL, IDX_DEBUG_FILE}, + {"debug-mode", required_argument, NULL, IDX_DEBUG_MODE}, + {"encoding-from", required_argument, NULL, IDX_ENCODING_FROM}, + {"encoding-to", required_argument, NULL, IDX_ENCODING_TO}, + {"example-hashes", no_argument, NULL, IDX_EXAMPLE_HASHES}, + {"force", no_argument, NULL, IDX_FORCE}, + {"generate-rules-func-max", required_argument, NULL, IDX_RP_GEN_FUNC_MAX}, + {"generate-rules-func-min", required_argument, NULL, IDX_RP_GEN_FUNC_MIN}, + {"generate-rules", required_argument, NULL, IDX_RP_GEN}, + {"generate-rules-seed", required_argument, NULL, IDX_RP_GEN_SEED}, + {"gpu-temp-abort", required_argument, NULL, IDX_GPU_TEMP_ABORT}, + {"gpu-temp-disable", no_argument, NULL, IDX_GPU_TEMP_DISABLE}, + {"hash-type", required_argument, NULL, IDX_HASH_MODE}, + {"hccapx-message-pair", required_argument, NULL, IDX_HCCAPX_MESSAGE_PAIR}, + {"help", no_argument, NULL, IDX_HELP}, + {"hex-charset", no_argument, NULL, IDX_HEX_CHARSET}, + {"hex-salt", no_argument, NULL, IDX_HEX_SALT}, + {"hex-wordlist", no_argument, NULL, IDX_HEX_WORDLIST}, + {"increment-max", required_argument, NULL, IDX_INCREMENT_MAX}, + {"increment-min", required_argument, NULL, IDX_INCREMENT_MIN}, + {"increment", no_argument, NULL, IDX_INCREMENT}, + {"induction-dir", required_argument, NULL, IDX_INDUCTION_DIR}, + {"keep-guessing", no_argument, NULL, IDX_KEEP_GUESSING}, + {"kernel-accel", required_argument, NULL, IDX_KERNEL_ACCEL}, + {"kernel-loops", required_argument, NULL, IDX_KERNEL_LOOPS}, + {"keyspace", no_argument, NULL, IDX_KEYSPACE}, + {"left", no_argument, NULL, IDX_LEFT}, + {"limit", required_argument, NULL, IDX_LIMIT}, + {"logfile-disable", no_argument, NULL, IDX_LOGFILE_DISABLE}, + {"loopback", no_argument, NULL, IDX_LOOPBACK}, + {"machine-readable", no_argument, NULL, IDX_MACHINE_READABLE}, + {"markov-classic", no_argument, NULL, IDX_MARKOV_CLASSIC}, + {"markov-disable", no_argument, NULL, IDX_MARKOV_DISABLE}, + {"markov-hcstat", required_argument, NULL, IDX_MARKOV_HCSTAT}, + {"markov-threshold", required_argument, NULL, IDX_MARKOV_THRESHOLD}, + {"nonce-error-corrections", required_argument, NULL, IDX_NONCE_ERROR_CORRECTIONS}, + {"nvidia-spin-damp", required_argument, NULL, IDX_NVIDIA_SPIN_DAMP}, + {"opencl-devices", required_argument, NULL, IDX_OPENCL_DEVICES}, + {"opencl-device-types", required_argument, NULL, IDX_OPENCL_DEVICE_TYPES}, + {"opencl-info", no_argument, NULL, IDX_OPENCL_INFO}, + {"opencl-platforms", required_argument, NULL, IDX_OPENCL_PLATFORMS}, + {"opencl-vector-width", required_argument, NULL, IDX_OPENCL_VECTOR_WIDTH}, + {"optimized-kernel-enable", no_argument, NULL, IDX_OPTIMIZED_KERNEL_ENABLE}, + {"outfile-autohex-disable", no_argument, NULL, IDX_OUTFILE_AUTOHEX_DISABLE}, + {"outfile-check-dir", required_argument, NULL, IDX_OUTFILE_CHECK_DIR}, + {"outfile-check-timer", required_argument, NULL, IDX_OUTFILE_CHECK_TIMER}, + {"outfile-format", required_argument, NULL, IDX_OUTFILE_FORMAT}, + {"outfile", required_argument, NULL, IDX_OUTFILE}, + {"wordlist-autohex-disable", no_argument, NULL, IDX_WORDLIST_AUTOHEX_DISABLE}, + {"potfile-disable", no_argument, NULL, IDX_POTFILE_DISABLE}, + {"potfile-path", required_argument, NULL, IDX_POTFILE_PATH}, + {"quiet", no_argument, NULL, IDX_QUIET}, + {"remove", no_argument, NULL, IDX_REMOVE}, + {"remove-timer", required_argument, NULL, IDX_REMOVE_TIMER}, + {"restore-disable", no_argument, NULL, IDX_RESTORE_DISABLE}, + {"restore-file-path", required_argument, NULL, IDX_RESTORE_FILE_PATH}, + {"restore", no_argument, NULL, IDX_RESTORE}, + {"rule-left", required_argument, NULL, IDX_RULE_BUF_L}, + {"rule-right", required_argument, NULL, IDX_RULE_BUF_R}, + {"rules-file", required_argument, NULL, IDX_RP_FILE}, + {"runtime", required_argument, NULL, IDX_RUNTIME}, + {"scrypt-tmto", required_argument, NULL, IDX_SCRYPT_TMTO}, + {"self-test-disable", no_argument, NULL, IDX_SELF_TEST_DISABLE}, + {"segment-size", required_argument, NULL, IDX_SEGMENT_SIZE}, + {"separator", required_argument, NULL, IDX_SEPARATOR}, + {"seperator", required_argument, NULL, IDX_SEPARATOR}, + {"session", required_argument, NULL, IDX_SESSION}, + {"show", no_argument, NULL, IDX_SHOW}, + {"skip", required_argument, NULL, IDX_SKIP}, + {"status", no_argument, NULL, IDX_STATUS}, + {"status-timer", required_argument, NULL, IDX_STATUS_TIMER}, + {"stdout", no_argument, NULL, IDX_STDOUT_FLAG}, + {"speed-only", no_argument, NULL, IDX_SPEED_ONLY}, + {"progress-only", no_argument, NULL, IDX_PROGRESS_ONLY}, + {"truecrypt-keyfiles", required_argument, NULL, IDX_TRUECRYPT_KEYFILES}, + {"username", no_argument, NULL, IDX_USERNAME}, + {"veracrypt-keyfiles", required_argument, NULL, IDX_VERACRYPT_KEYFILES}, + {"veracrypt-pim", required_argument, NULL, IDX_VERACRYPT_PIM}, + {"version", no_argument, NULL, IDX_VERSION}, + {"workload-profile", required_argument, NULL, IDX_WORKLOAD_PROFILE}, + {NULL, 0, NULL, 0 } }; static const char *ENCODING_FROM = "utf-8";