Diff
checker
テキスト
テキスト
画像
ドキュメント
Excel
フォルダ
Legal
Enterprise
デスクトップ
料金
ログイン
Diffchecker デスクトップのダウンロード
テキスト比較
2 つのテキスト ファイルの違いを見つける
ツール
履歴
ライブエディター
未変更行を折りたたむ
折り返しなし
レイアウト
分割
統合
比較精度
スマート
単語
文字
シンタックスハイライト
構文を選択
無視
テキスト変換
最初の差分へ移動
入力を編集
Diffchecker Desktop
Diffcheckerを実行する最も安全な方法。Diffchecker Desktopアプリを入手:あなたの差分はコンピューターから出ることはありません!
Desktopを入手
Untitled diff
作成日
11 年前
差分は期限切れになりません
クリア
エクスポート
共有
説明
10 削除
行
合計
削除
文字
合計
削除
この機能を引き続き使用するには、アップグレードしてください
Diff
checker
Pro
価格を見る
372 行
すべてコピー
17 追加
行
合計
追加
文字
合計
追加
この機能を引き続き使用するには、アップグレードしてください
Diff
checker
Pro
価格を見る
379 行
すべてコピー
/*
/*
* This file is part of John the Ripper password cracker,
* This file is part of John the Ripper password cracker,
* Copyright (c) 1996-2003,2006,2010,2013 by Solar Designer
* Copyright (c) 1996-2003,2006,2010,2013 by Solar Designer
*
*
* Redistribution and use in source and binary forms, with or without
* Redistribution and use in source and binary forms, with or without
* modification, are permitted.
* modification, are permitted.
*
*
* There's ABSOLUTELY NO WARRANTY, express or implied.
* There's ABSOLUTELY NO WARRANTY, express or implied.
*/
*/
#define _XOPEN_SOURCE 500 /* for setitimer(2) and siginterrupt(3) */
#define _XOPEN_SOURCE 500 /* for setitimer(2) and siginterrupt(3) */
#ifdef __ultrix__
#ifdef __ultrix__
#define __POSIX
#define __POSIX
#define _POSIX_SOURCE
#define _POSIX_SOURCE
#endif
#endif
#define NEED_OS_TIMER
#define NEED_OS_TIMER
#define NEED_OS_FORK
#define NEED_OS_FORK
#include "os.h"
#include "os.h"
#ifdef _SCO_C_DIALECT
#ifdef _SCO_C_DIALECT
#include <limits.h>
#include <limits.h>
#endif
#endif
#include <stdio.h>
#include <stdio.h>
#include <unistd.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdlib.h>
#include <string.h>
#include <string.h>
#include <signal.h>
#include <signal.h>
#include <sys/time.h>
#include <sys/time.h>
#include <errno.h>
#include <errno.h>
#ifdef __DJGPP__
#ifdef __DJGPP__
#include <dos.h>
#include <dos.h>
#endif
#endif
#ifdef __CYGWIN32__
#ifdef __CYGWIN32__
#include <windows.h>
#include <windows.h>
#endif
#endif
#include "arch.h"
#include "arch.h"
#include "misc.h"
#include "misc.h"
#include "params.h"
#include "params.h"
#include "tty.h"
#include "tty.h"
#include "options.h"
#include "options.h"
#include "config.h"
#include "config.h"
#include "bench.h"
#include "bench.h"
#include "john.h"
#include "john.h"
volatile int event_pending = 0;
volatile int event_pending = 0;
volatile int event_abort = 0, event_save = 0, event_status = 0;
volatile int event_abort = 0, event_save = 0, event_status = 0;
volatile int event_ticksafety = 0;
volatile int event_ticksafety = 0;
static int timer_save_interval, timer_save_value;
static int timer_save_interval, timer_save_value;
static clock_t timer_ticksafety_interval, timer_ticksafety_value;
static clock_t timer_ticksafety_interval, timer_ticksafety_value;
#if !OS_TIMER
#if !OS_TIMER
#include <time.h>
#include <time.h>
#include <sys/times.h>
#include <sys/times.h>
static clock_t timer_emu_interval = 0;
static clock_t timer_emu_interval = 0;
static unsigned int timer_emu_count = 0, timer_emu_max = 0;
static unsigned int timer_emu_count = 0, timer_emu_max = 0;
void sig_timer_emu_init(clock_t interval)
void sig_timer_emu_init(clock_t interval)
{
{
timer_emu_interval = interval;
timer_emu_interval = interval;
timer_emu_count = 0; timer_emu_max = 0;
timer_emu_count = 0; timer_emu_max = 0;
}
}
void sig_timer_emu_tick(void)
void sig_timer_emu_tick(void)
{
{
static clock_t last = 0;
static clock_t last = 0;
clock_t current;
clock_t current;
struct tms buf;
struct tms buf;
if (++timer_emu_count < timer_emu_max) return;
if (++timer_emu_count < timer_emu_max) return;
current = times(&buf);
current = times(&buf);
if (!last) {
if (!last) {
last = current;
last = current;
return;
return;
}
}
if (current - last < timer_emu_interval && current >= last) {
if (current - last < timer_emu_interval && current >= last) {
timer_emu_max += timer_emu_max + 1;
timer_emu_max += timer_emu_max + 1;
return;
return;
}
}
last = current;
last = current;
timer_emu_count = 0;
timer_emu_count = 0;
timer_emu_max >>= 1;
timer_emu_max >>= 1;
raise(SIGALRM);
raise(SIGALRM);
}
}
#endif
#endif
static void sig_install_update(void);
static void sig_install_update(void);
コピー
コピー済み
コピー
コピー済み
Text moved from lines 208-216
#if OS_FORK
static void signal_children(int signum)
{
int i;
for (i = 0; i < john_child_count; i++)
if (john_child_pids[i])
kill(john_child_pids[i], signum);
}
#endif
static void sig_handle_update(int signum)
static void sig_handle_update(int signum)
{
{
event_save = event_pending = 1;
event_save = event_pending = 1;
#ifndef SA_RESTART
#ifndef SA_RESTART
sig_install_update();
sig_install_update();
#endif
#endif
}
}
static void sig_install_update(void)
static void sig_install_update(void)
{
{
#ifdef SA_RESTART
#ifdef SA_RESTART
struct sigaction sa;
struct sigaction sa;
memset(&sa, 0, sizeof(sa));
memset(&sa, 0, sizeof(sa));
sa.sa_handler = sig_handle_update;
sa.sa_handler = sig_handle_update;
sa.sa_flags = SA_RESTART;
sa.sa_flags = SA_RESTART;
sigaction(SIGHUP, &sa, NULL);
sigaction(SIGHUP, &sa, NULL);
#else
#else
signal(SIGHUP, sig_handle_update);
signal(SIGHUP, sig_handle_update);
#endif
#endif
}
}
static void sig_remove_update(void)
static void sig_remove_update(void)
{
{
signal(SIGHUP, SIG_IGN);
signal(SIGHUP, SIG_IGN);
}
}
void check_abort(int be_async_signal_safe)
void check_abort(int be_async_signal_safe)
{
{
if (!event_abort) return;
if (!event_abort) return;
tty_done();
tty_done();
if (be_async_signal_safe) {
if (be_async_signal_safe) {
if (john_main_process)
if (john_main_process)
write_loop(2, "Session aborted\n", 16);
write_loop(2, "Session aborted\n", 16);
_exit(1);
_exit(1);
}
}
if (john_main_process)
if (john_main_process)
fprintf(stderr, "Session aborted\n");
fprintf(stderr, "Session aborted\n");
error();
error();
}
}
static void sig_install_abort(void);
static void sig_install_abort(void);
static void sig_handle_abort(int signum)
static void sig_handle_abort(int signum)
{
{
int saved_errno = errno;
int saved_errno = errno;
check_abort(1);
check_abort(1);
コピー
コピー済み
コピー
コピー済み
#if OS_FORK
// Forward SIGINT,SIGTERM to children
if(john_main_process)
{
signal_children(signum);
}
#endif
event_abort = event_pending = 1;
event_abort = event_pending = 1;
write_loop(2, "Wait...\r", 8);
write_loop(2, "Wait...\r", 8);
sig_install_abort();
sig_install_abort();
errno = saved_errno;
errno = saved_errno;
}
}
#ifdef __CYGWIN32__
#ifdef __CYGWIN32__
static CALLBACK BOOL sig_handle_abort_ctrl(DWORD ctrltype)
static CALLBACK BOOL sig_handle_abort_ctrl(DWORD ctrltype)
{
{
sig_handle_abort(SIGINT);
sig_handle_abort(SIGINT);
return TRUE;
return TRUE;
}
}
#endif
#endif
static void sig_install_abort(void)
static void sig_install_abort(void)
{
{
#ifdef __DJGPP__
#ifdef __DJGPP__
setcbrk(1);
setcbrk(1);
#endif
#endif
#ifdef __CYGWIN32__
#ifdef __CYGWIN32__
SetConsoleCtrlHandler(sig_handle_abort_ctrl, TRUE);
SetConsoleCtrlHandler(sig_handle_abort_ctrl, TRUE);
#endif
#endif
signal(SIGINT, sig_handle_abort);
signal(SIGINT, sig_handle_abort);
signal(SIGTERM, sig_handle_abort);
signal(SIGTERM, sig_handle_abort);
#ifdef SIGXCPU
#ifdef SIGXCPU
signal(SIGXCPU, sig_handle_abort);
signal(SIGXCPU, sig_handle_abort);
#endif
#endif
#ifdef SIGXFSZ
#ifdef SIGXFSZ
signal(SIGXFSZ, sig_handle_abort);
signal(SIGXFSZ, sig_handle_abort);
#endif
#endif
}
}
static void sig_remove_abort(void)
static void sig_remove_abort(void)
{
{
#ifdef __CYGWIN32__
#ifdef __CYGWIN32__
SetConsoleCtrlHandler(sig_handle_abort_ctrl, FALSE);
SetConsoleCtrlHandler(sig_handle_abort_ctrl, FALSE);
#endif
#endif
signal(SIGINT, SIG_DFL);
signal(SIGINT, SIG_DFL);
signal(SIGTERM, SIG_DFL);
signal(SIGTERM, SIG_DFL);
#ifdef SIGXCPU
#ifdef SIGXCPU
signal(SIGXCPU, SIG_DFL);
signal(SIGXCPU, SIG_DFL);
#endif
#endif
#ifdef SIGXFSZ
#ifdef SIGXFSZ
signal(SIGXFSZ, SIG_DFL);
signal(SIGXFSZ, SIG_DFL);
#endif
#endif
}
}
コピー
コピー済み
コピー
コピー済み
Text moved to lines 101-109
#if OS_FORK
static void signal_children(int signum)
{
int i;
for (i = 0; i < john_child_count; i++)
if (john_child_pids[i])
kill(john_child_pids[i], signum);
}
#endif
static void sig_install_timer(void);
static void sig_install_timer(void);
static void sig_handle_timer(int signum)
static void sig_handle_timer(int signum)
{
{
int saved_errno = errno;
int saved_errno = errno;
if (!--timer_save_value) {
if (!--timer_save_value) {
timer_save_value = timer_save_interval;
timer_save_value = timer_save_interval;
event_save = event_pending = 1;
event_save = event_pending = 1;
}
}
if (!--timer_ticksafety_value) {
if (!--timer_ticksafety_value) {
timer_ticksafety_value = timer_ticksafety_interval;
timer_ticksafety_value = timer_ticksafety_interval;
event_ticksafety = event_pending = 1;
event_ticksafety = event_pending = 1;
}
}
if (john_main_process) {
if (john_main_process) {
int c;
int c;
#if OS_FORK
#if OS_FORK
int new_abort = 0, new_status = 0;
int new_abort = 0, new_status = 0;
#endif
#endif
while ((c = tty_getchar()) >= 0) {
while ((c = tty_getchar()) >= 0) {
if (c == 3 || c == 'q') {
if (c == 3 || c == 'q') {
#if OS_FORK
#if OS_FORK
new_abort = 1;
new_abort = 1;
#endif
#endif
sig_handle_abort(0);
sig_handle_abort(0);
} else {
} else {
#if OS_FORK
#if OS_FORK
new_status = 1;
new_status = 1;
#endif
#endif
event_status = event_pending = 1;
event_status = event_pending = 1;
}
}
}
}
#if OS_FORK
#if OS_FORK
if (new_abort || new_status)
if (new_abort || new_status)
signal_children(new_abort ? SIGTERM : SIGUSR2);
signal_children(new_abort ? SIGTERM : SIGUSR2);
#endif
#endif
}
}
#if !OS_TIMER
#if !OS_TIMER
signal(SIGALRM, sig_handle_timer);
signal(SIGALRM, sig_handle_timer);
#elif !defined(SA_RESTART) && !defined(__DJGPP__)
#elif !defined(SA_RESTART) && !defined(__DJGPP__)
sig_install_timer();
sig_install_timer();
#endif
#endif
errno = saved_errno;
errno = saved_errno;
}
}
#if OS_TIMER
#if OS_TIMER
static void sig_init_timer(void)
static void sig_init_timer(void)
{
{
struct itimerval it;
struct itimerval it;
it.it_value.tv_sec = TIMER_INTERVAL;
it.it_value.tv_sec = TIMER_INTERVAL;
it.it_value.tv_usec = 0;
it.it_value.tv_usec = 0;
#if defined(SA_RESTART) || defined(__DJGPP__)
#if defined(SA_RESTART) || defined(__DJGPP__)
it.it_interval = it.it_value;
it.it_interval = it.it_value;
#else
#else
memset(&it.it_interval, 0, sizeof(it.it_interval));
memset(&it.it_interval, 0, sizeof(it.it_interval));
#endif
#endif
if (setitimer(ITIMER_REAL, &it, NULL))
if (setitimer(ITIMER_REAL, &it, NULL))
pexit("setitimer");
pexit("setitimer");
}
}
#endif
#endif
static void sig_install_timer(void)
static void sig_install_timer(void)
{
{
#if !OS_TIMER
#if !OS_TIMER
signal(SIGALRM, sig_handle_timer);
signal(SIGALRM, sig_handle_timer);
sig_timer_emu_init(TIMER_INTERVAL * clk_tck);
sig_timer_emu_init(TIMER_INTERVAL * clk_tck);
#else
#else
struct sigaction sa;
struct sigaction sa;
memset(&sa, 0, sizeof(sa));
memset(&sa, 0, sizeof(sa));
sa.sa_handler = sig_handle_timer;
sa.sa_handler = sig_handle_timer;
#ifdef SA_RESTART
#ifdef SA_RESTART
sa.sa_flags = SA_RESTART;
sa.sa_flags = SA_RESTART;
#endif
#endif
sigaction(SIGALRM, &sa, NULL);
sigaction(SIGALRM, &sa, NULL);
#if !defined(SA_RESTART) && !defined(__DJGPP__)
#if !defined(SA_RESTART) && !defined(__DJGPP__)
siginterrupt(SIGALRM, 0);
siginterrupt(SIGALRM, 0);
#endif
#endif
sig_init_timer();
sig_init_timer();
#endif
#endif
}
}
static void sig_remove_timer(void)
static void sig_remove_timer(void)
{
{
#if OS_TIMER
#if OS_TIMER
struct itimerval it;
struct itimerval it;
memset(&it, 0, sizeof(it));
memset(&it, 0, sizeof(it));
if (setitimer(ITIMER_REAL, &it, NULL)) perror("setitimer");
if (setitimer(ITIMER_REAL, &it, NULL)) perror("setitimer");
#endif
#endif
signal(SIGALRM, SIG_DFL);
signal(SIGALRM, SIG_DFL);
}
}
#if OS_FORK
#if OS_FORK
static void sig_handle_status(int signum)
static void sig_handle_status(int signum)
{
{
event_status = event_pending = 1;
event_status = event_pending = 1;
signal(SIGUSR2, sig_handle_status);
signal(SIGUSR2, sig_handle_status);
}
}
#endif
#endif
static void sig_done(void);
static void sig_done(void);
void sig_init(void)
void sig_init(void)
{
{
clk_tck_init();
clk_tck_init();
timer_save_interval = cfg_get_int(SECTION_OPTIONS, NULL, "Save");
timer_save_interval = cfg_get_int(SECTION_OPTIONS, NULL, "Save");
if (timer_save_interval < 0)
if (timer_save_interval < 0)
timer_save_interval = TIMER_SAVE_DELAY;
timer_save_interval = TIMER_SAVE_DELAY;
else
else
if ((timer_save_interval /= TIMER_INTERVAL) <= 0)
if ((timer_save_interval /= TIMER_INTERVAL) <= 0)
timer_save_interval = 1;
timer_save_interval = 1;
timer_save_value = timer_save_interval;
timer_save_value = timer_save_interval;
timer_ticksafety_interval = (clock_t)1 << (sizeof(clock_t) * 8 - 4);
timer_ticksafety_interval = (clock_t)1 << (sizeof(clock_t) * 8 - 4);
timer_ticksafety_interval /= clk_tck;
timer_ticksafety_interval /= clk_tck;
if ((timer_ticksafety_interval /= TIMER_INTERVAL) <= 0)
if ((timer_ticksafety_interval /= TIMER_INTERVAL) <= 0)
timer_ticksafety_interval = 1;
timer_ticksafety_interval = 1;
timer_ticksafety_value = timer_ticksafety_interval;
timer_ticksafety_value = timer_ticksafety_interval;
atexit(sig_done);
atexit(sig_done);
sig_install_update();
sig_install_update();
sig_install_abort();
sig_install_abort();
sig_install_timer();
sig_install_timer();
#if OS_FORK
#if OS_FORK
signal(SIGUSR2, sig_handle_status);
signal(SIGUSR2, sig_handle_status);
#endif
#endif
}
}
void sig_init_child(void)
void sig_init_child(void)
{
{
#if OS_TIMER
#if OS_TIMER
sig_init_timer();
sig_init_timer();
#endif
#endif
}
}
static void sig_done(void)
static void sig_done(void)
{
{
sig_remove_update();
sig_remove_update();
sig_remove_abort();
sig_remove_abort();
sig_remove_timer();
sig_remove_timer();
}
}
保存された差分
原文
ファイルを開く
/* * This file is part of John the Ripper password cracker, * Copyright (c) 1996-2003,2006,2010,2013 by Solar Designer * * Redistribution and use in source and binary forms, with or without * modification, are permitted. * * There's ABSOLUTELY NO WARRANTY, express or implied. */ #define _XOPEN_SOURCE 500 /* for setitimer(2) and siginterrupt(3) */ #ifdef __ultrix__ #define __POSIX #define _POSIX_SOURCE #endif #define NEED_OS_TIMER #define NEED_OS_FORK #include "os.h" #ifdef _SCO_C_DIALECT #include <limits.h> #endif #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <string.h> #include <signal.h> #include <sys/time.h> #include <errno.h> #ifdef __DJGPP__ #include <dos.h> #endif #ifdef __CYGWIN32__ #include <windows.h> #endif #include "arch.h" #include "misc.h" #include "params.h" #include "tty.h" #include "options.h" #include "config.h" #include "bench.h" #include "john.h" volatile int event_pending = 0; volatile int event_abort = 0, event_save = 0, event_status = 0; volatile int event_ticksafety = 0; static int timer_save_interval, timer_save_value; static clock_t timer_ticksafety_interval, timer_ticksafety_value; #if !OS_TIMER #include <time.h> #include <sys/times.h> static clock_t timer_emu_interval = 0; static unsigned int timer_emu_count = 0, timer_emu_max = 0; void sig_timer_emu_init(clock_t interval) { timer_emu_interval = interval; timer_emu_count = 0; timer_emu_max = 0; } void sig_timer_emu_tick(void) { static clock_t last = 0; clock_t current; struct tms buf; if (++timer_emu_count < timer_emu_max) return; current = times(&buf); if (!last) { last = current; return; } if (current - last < timer_emu_interval && current >= last) { timer_emu_max += timer_emu_max + 1; return; } last = current; timer_emu_count = 0; timer_emu_max >>= 1; raise(SIGALRM); } #endif static void sig_install_update(void); static void sig_handle_update(int signum) { event_save = event_pending = 1; #ifndef SA_RESTART sig_install_update(); #endif } static void sig_install_update(void) { #ifdef SA_RESTART struct sigaction sa; memset(&sa, 0, sizeof(sa)); sa.sa_handler = sig_handle_update; sa.sa_flags = SA_RESTART; sigaction(SIGHUP, &sa, NULL); #else signal(SIGHUP, sig_handle_update); #endif } static void sig_remove_update(void) { signal(SIGHUP, SIG_IGN); } void check_abort(int be_async_signal_safe) { if (!event_abort) return; tty_done(); if (be_async_signal_safe) { if (john_main_process) write_loop(2, "Session aborted\n", 16); _exit(1); } if (john_main_process) fprintf(stderr, "Session aborted\n"); error(); } static void sig_install_abort(void); static void sig_handle_abort(int signum) { int saved_errno = errno; check_abort(1); event_abort = event_pending = 1; write_loop(2, "Wait...\r", 8); sig_install_abort(); errno = saved_errno; } #ifdef __CYGWIN32__ static CALLBACK BOOL sig_handle_abort_ctrl(DWORD ctrltype) { sig_handle_abort(SIGINT); return TRUE; } #endif static void sig_install_abort(void) { #ifdef __DJGPP__ setcbrk(1); #endif #ifdef __CYGWIN32__ SetConsoleCtrlHandler(sig_handle_abort_ctrl, TRUE); #endif signal(SIGINT, sig_handle_abort); signal(SIGTERM, sig_handle_abort); #ifdef SIGXCPU signal(SIGXCPU, sig_handle_abort); #endif #ifdef SIGXFSZ signal(SIGXFSZ, sig_handle_abort); #endif } static void sig_remove_abort(void) { #ifdef __CYGWIN32__ SetConsoleCtrlHandler(sig_handle_abort_ctrl, FALSE); #endif signal(SIGINT, SIG_DFL); signal(SIGTERM, SIG_DFL); #ifdef SIGXCPU signal(SIGXCPU, SIG_DFL); #endif #ifdef SIGXFSZ signal(SIGXFSZ, SIG_DFL); #endif } #if OS_FORK static void signal_children(int signum) { int i; for (i = 0; i < john_child_count; i++) if (john_child_pids[i]) kill(john_child_pids[i], signum); } #endif static void sig_install_timer(void); static void sig_handle_timer(int signum) { int saved_errno = errno; if (!--timer_save_value) { timer_save_value = timer_save_interval; event_save = event_pending = 1; } if (!--timer_ticksafety_value) { timer_ticksafety_value = timer_ticksafety_interval; event_ticksafety = event_pending = 1; } if (john_main_process) { int c; #if OS_FORK int new_abort = 0, new_status = 0; #endif while ((c = tty_getchar()) >= 0) { if (c == 3 || c == 'q') { #if OS_FORK new_abort = 1; #endif sig_handle_abort(0); } else { #if OS_FORK new_status = 1; #endif event_status = event_pending = 1; } } #if OS_FORK if (new_abort || new_status) signal_children(new_abort ? SIGTERM : SIGUSR2); #endif } #if !OS_TIMER signal(SIGALRM, sig_handle_timer); #elif !defined(SA_RESTART) && !defined(__DJGPP__) sig_install_timer(); #endif errno = saved_errno; } #if OS_TIMER static void sig_init_timer(void) { struct itimerval it; it.it_value.tv_sec = TIMER_INTERVAL; it.it_value.tv_usec = 0; #if defined(SA_RESTART) || defined(__DJGPP__) it.it_interval = it.it_value; #else memset(&it.it_interval, 0, sizeof(it.it_interval)); #endif if (setitimer(ITIMER_REAL, &it, NULL)) pexit("setitimer"); } #endif static void sig_install_timer(void) { #if !OS_TIMER signal(SIGALRM, sig_handle_timer); sig_timer_emu_init(TIMER_INTERVAL * clk_tck); #else struct sigaction sa; memset(&sa, 0, sizeof(sa)); sa.sa_handler = sig_handle_timer; #ifdef SA_RESTART sa.sa_flags = SA_RESTART; #endif sigaction(SIGALRM, &sa, NULL); #if !defined(SA_RESTART) && !defined(__DJGPP__) siginterrupt(SIGALRM, 0); #endif sig_init_timer(); #endif } static void sig_remove_timer(void) { #if OS_TIMER struct itimerval it; memset(&it, 0, sizeof(it)); if (setitimer(ITIMER_REAL, &it, NULL)) perror("setitimer"); #endif signal(SIGALRM, SIG_DFL); } #if OS_FORK static void sig_handle_status(int signum) { event_status = event_pending = 1; signal(SIGUSR2, sig_handle_status); } #endif static void sig_done(void); void sig_init(void) { clk_tck_init(); timer_save_interval = cfg_get_int(SECTION_OPTIONS, NULL, "Save"); if (timer_save_interval < 0) timer_save_interval = TIMER_SAVE_DELAY; else if ((timer_save_interval /= TIMER_INTERVAL) <= 0) timer_save_interval = 1; timer_save_value = timer_save_interval; timer_ticksafety_interval = (clock_t)1 << (sizeof(clock_t) * 8 - 4); timer_ticksafety_interval /= clk_tck; if ((timer_ticksafety_interval /= TIMER_INTERVAL) <= 0) timer_ticksafety_interval = 1; timer_ticksafety_value = timer_ticksafety_interval; atexit(sig_done); sig_install_update(); sig_install_abort(); sig_install_timer(); #if OS_FORK signal(SIGUSR2, sig_handle_status); #endif } void sig_init_child(void) { #if OS_TIMER sig_init_timer(); #endif } static void sig_done(void) { sig_remove_update(); sig_remove_abort(); sig_remove_timer(); }
変更されたテキスト
ファイルを開く
/* * This file is part of John the Ripper password cracker, * Copyright (c) 1996-2003,2006,2010,2013 by Solar Designer * * Redistribution and use in source and binary forms, with or without * modification, are permitted. * * There's ABSOLUTELY NO WARRANTY, express or implied. */ #define _XOPEN_SOURCE 500 /* for setitimer(2) and siginterrupt(3) */ #ifdef __ultrix__ #define __POSIX #define _POSIX_SOURCE #endif #define NEED_OS_TIMER #define NEED_OS_FORK #include "os.h" #ifdef _SCO_C_DIALECT #include <limits.h> #endif #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <string.h> #include <signal.h> #include <sys/time.h> #include <errno.h> #ifdef __DJGPP__ #include <dos.h> #endif #ifdef __CYGWIN32__ #include <windows.h> #endif #include "arch.h" #include "misc.h" #include "params.h" #include "tty.h" #include "options.h" #include "config.h" #include "bench.h" #include "john.h" volatile int event_pending = 0; volatile int event_abort = 0, event_save = 0, event_status = 0; volatile int event_ticksafety = 0; static int timer_save_interval, timer_save_value; static clock_t timer_ticksafety_interval, timer_ticksafety_value; #if !OS_TIMER #include <time.h> #include <sys/times.h> static clock_t timer_emu_interval = 0; static unsigned int timer_emu_count = 0, timer_emu_max = 0; void sig_timer_emu_init(clock_t interval) { timer_emu_interval = interval; timer_emu_count = 0; timer_emu_max = 0; } void sig_timer_emu_tick(void) { static clock_t last = 0; clock_t current; struct tms buf; if (++timer_emu_count < timer_emu_max) return; current = times(&buf); if (!last) { last = current; return; } if (current - last < timer_emu_interval && current >= last) { timer_emu_max += timer_emu_max + 1; return; } last = current; timer_emu_count = 0; timer_emu_max >>= 1; raise(SIGALRM); } #endif static void sig_install_update(void); #if OS_FORK static void signal_children(int signum) { int i; for (i = 0; i < john_child_count; i++) if (john_child_pids[i]) kill(john_child_pids[i], signum); } #endif static void sig_handle_update(int signum) { event_save = event_pending = 1; #ifndef SA_RESTART sig_install_update(); #endif } static void sig_install_update(void) { #ifdef SA_RESTART struct sigaction sa; memset(&sa, 0, sizeof(sa)); sa.sa_handler = sig_handle_update; sa.sa_flags = SA_RESTART; sigaction(SIGHUP, &sa, NULL); #else signal(SIGHUP, sig_handle_update); #endif } static void sig_remove_update(void) { signal(SIGHUP, SIG_IGN); } void check_abort(int be_async_signal_safe) { if (!event_abort) return; tty_done(); if (be_async_signal_safe) { if (john_main_process) write_loop(2, "Session aborted\n", 16); _exit(1); } if (john_main_process) fprintf(stderr, "Session aborted\n"); error(); } static void sig_install_abort(void); static void sig_handle_abort(int signum) { int saved_errno = errno; check_abort(1); #if OS_FORK // Forward SIGINT,SIGTERM to children if(john_main_process) { signal_children(signum); } #endif event_abort = event_pending = 1; write_loop(2, "Wait...\r", 8); sig_install_abort(); errno = saved_errno; } #ifdef __CYGWIN32__ static CALLBACK BOOL sig_handle_abort_ctrl(DWORD ctrltype) { sig_handle_abort(SIGINT); return TRUE; } #endif static void sig_install_abort(void) { #ifdef __DJGPP__ setcbrk(1); #endif #ifdef __CYGWIN32__ SetConsoleCtrlHandler(sig_handle_abort_ctrl, TRUE); #endif signal(SIGINT, sig_handle_abort); signal(SIGTERM, sig_handle_abort); #ifdef SIGXCPU signal(SIGXCPU, sig_handle_abort); #endif #ifdef SIGXFSZ signal(SIGXFSZ, sig_handle_abort); #endif } static void sig_remove_abort(void) { #ifdef __CYGWIN32__ SetConsoleCtrlHandler(sig_handle_abort_ctrl, FALSE); #endif signal(SIGINT, SIG_DFL); signal(SIGTERM, SIG_DFL); #ifdef SIGXCPU signal(SIGXCPU, SIG_DFL); #endif #ifdef SIGXFSZ signal(SIGXFSZ, SIG_DFL); #endif } static void sig_install_timer(void); static void sig_handle_timer(int signum) { int saved_errno = errno; if (!--timer_save_value) { timer_save_value = timer_save_interval; event_save = event_pending = 1; } if (!--timer_ticksafety_value) { timer_ticksafety_value = timer_ticksafety_interval; event_ticksafety = event_pending = 1; } if (john_main_process) { int c; #if OS_FORK int new_abort = 0, new_status = 0; #endif while ((c = tty_getchar()) >= 0) { if (c == 3 || c == 'q') { #if OS_FORK new_abort = 1; #endif sig_handle_abort(0); } else { #if OS_FORK new_status = 1; #endif event_status = event_pending = 1; } } #if OS_FORK if (new_abort || new_status) signal_children(new_abort ? SIGTERM : SIGUSR2); #endif } #if !OS_TIMER signal(SIGALRM, sig_handle_timer); #elif !defined(SA_RESTART) && !defined(__DJGPP__) sig_install_timer(); #endif errno = saved_errno; } #if OS_TIMER static void sig_init_timer(void) { struct itimerval it; it.it_value.tv_sec = TIMER_INTERVAL; it.it_value.tv_usec = 0; #if defined(SA_RESTART) || defined(__DJGPP__) it.it_interval = it.it_value; #else memset(&it.it_interval, 0, sizeof(it.it_interval)); #endif if (setitimer(ITIMER_REAL, &it, NULL)) pexit("setitimer"); } #endif static void sig_install_timer(void) { #if !OS_TIMER signal(SIGALRM, sig_handle_timer); sig_timer_emu_init(TIMER_INTERVAL * clk_tck); #else struct sigaction sa; memset(&sa, 0, sizeof(sa)); sa.sa_handler = sig_handle_timer; #ifdef SA_RESTART sa.sa_flags = SA_RESTART; #endif sigaction(SIGALRM, &sa, NULL); #if !defined(SA_RESTART) && !defined(__DJGPP__) siginterrupt(SIGALRM, 0); #endif sig_init_timer(); #endif } static void sig_remove_timer(void) { #if OS_TIMER struct itimerval it; memset(&it, 0, sizeof(it)); if (setitimer(ITIMER_REAL, &it, NULL)) perror("setitimer"); #endif signal(SIGALRM, SIG_DFL); } #if OS_FORK static void sig_handle_status(int signum) { event_status = event_pending = 1; signal(SIGUSR2, sig_handle_status); } #endif static void sig_done(void); void sig_init(void) { clk_tck_init(); timer_save_interval = cfg_get_int(SECTION_OPTIONS, NULL, "Save"); if (timer_save_interval < 0) timer_save_interval = TIMER_SAVE_DELAY; else if ((timer_save_interval /= TIMER_INTERVAL) <= 0) timer_save_interval = 1; timer_save_value = timer_save_interval; timer_ticksafety_interval = (clock_t)1 << (sizeof(clock_t) * 8 - 4); timer_ticksafety_interval /= clk_tck; if ((timer_ticksafety_interval /= TIMER_INTERVAL) <= 0) timer_ticksafety_interval = 1; timer_ticksafety_value = timer_ticksafety_interval; atexit(sig_done); sig_install_update(); sig_install_abort(); sig_install_timer(); #if OS_FORK signal(SIGUSR2, sig_handle_status); #endif } void sig_init_child(void) { #if OS_TIMER sig_init_timer(); #endif } static void sig_done(void) { sig_remove_update(); sig_remove_abort(); sig_remove_timer(); }
違いを見つける