⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 prefs_kb.c

📁 大国补丁后的nessus2.2.8的源代码
💻 C
字号:
/* Nessus * Copyright (C) 2000 Renaud Deraison * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 * as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * * In addition, as a special exception, Renaud Deraison * gives permission to link the code of this program with any * version of the OpenSSL library which is distributed under a * license identical to that listed in the included COPYING.OpenSSL * file, and distribute linked combinations including the two. * You must obey the GNU General Public License in all respects * for all of the code used other than OpenSSL.  If you modify * this file, you may extend this exception to your version of the * file, but you are not obligated to do so.  If you do not wish to * do so, delete this exception statement from your version. */#include <includes.h>#ifdef ENABLE_SAVE_KB#ifdef USE_GTK#include <gtk/gtk.h>#include "context.h"#include "prefs_help.h"#define ENABLE_KB_SAVING _("Enable KB saving")#define TEST_ALL _("Test all hosts")#define TEST_TESTED _("Only test hosts that have been tested in the past")#define TEST_UNTESTED _("Only test hosts that have never been tested in the past")#define RESTORE_KB _("Reuse the knowledge bases about the hosts for the test")#define NO_SCANNER _("Do not execute scanners that have already been executed")#define NO_INFO _("Do not execute info gathering plugins that have already been executed")#define NO_ATTACK _("Do not execute attack plugins that have already been executed")#define NO_DENIAL _("Do not execute DoS plugins that have already been executed")static void set_state(c, name, value) struct arglist * c; char * name; int value;{  gtk_widget_set_sensitive(arg_get_value(c, name), value);}static void kb_enable_cb(a, ctrls) GtkWidget * a; struct arglist * ctrls;{ /*  * De-sensitivise everything  */ GtkWidget * w; int value = GTK_TOGGLE_BUTTON(a) -> active;  set_state(ctrls, "TEST_ALL", value); set_state(ctrls, "TEST_TESTED", value); set_state(ctrls, "TEST_UNTESTED", value);  w = arg_get_value(ctrls, "RESTORE_KB"); if(!(GTK_TOGGLE_BUTTON(w) -> active)) {  set_state(ctrls, "NO_SCANNER", FALSE);  set_state(ctrls, "NO_INFO", FALSE);  set_state(ctrls, "NO_ATTACK", FALSE);  set_state(ctrls, "NO_DENIAL", FALSE); } else {  set_state(ctrls, "NO_SCANNER", value);  set_state(ctrls, "NO_INFO", value);  set_state(ctrls, "NO_ATTACK", value);  set_state(ctrls, "NO_DENIAL", value); } set_state(ctrls, "RESTORE_KB", value); set_state(ctrls, "MAX_AGE", value);}static voidkb_restore_cb(a, ctrls) GtkWidget * a; struct arglist * ctrls;{ int value = GTK_TOGGLE_BUTTON(a)->active; set_state(ctrls, "NO_SCANNER", value); set_state(ctrls, "NO_INFO", value); set_state(ctrls, "NO_ATTACK", value); set_state(ctrls, "NO_DENIAL", value);}static void arg_addset_value(arglist, name, value) struct arglist * arglist; char * name; char * value;{ if(arg_get_type(arglist, name) < 0)  arg_add_value(arglist, name, ARG_STRING, strlen(value), strdup(value)); else  {  arg_set_type(arglist, name, ARG_STRING);  arg_set_value(arglist, name, strlen(value), strdup(value));  }}static intpref_set(arglist, name) struct arglist * arglist; char * name;{ int type = arg_get_type(arglist, name); if(type < 0)   return 0; /* no set */ if(type == ARG_INT)  return (int)arg_get_value(arglist, name); else  { 	char * value = arg_get_value(arglist, name);	if(!value)		return 0;	return !strcmp(value, "yes");	}}void prefs_dialog_kb_set_prefs(ctrls, gprefs) struct arglist * ctrls; struct arglist * gprefs;{ GtkWidget * w; struct arglist * prefs = arg_get_value(gprefs, "SERVER_PREFS");  w = arg_get_value(ctrls, "ENABLE_SAVE_KB"); gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(w),  			pref_set(prefs, "save_knowledge_base")); w = arg_get_value(ctrls, "TEST_ALL"); gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(w), 			!pref_set(prefs, "only_test_hosts_whose_kb_we_dont_have")		    &&  !pref_set(prefs, "only_test_hosts_whose_kb_we_have"));		    		     w = arg_get_value(ctrls, "TEST_TESTED"); gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(w), 			!pref_set(prefs, "only_test_hosts_whose_kb_we_dont_have")		    &&  pref_set(prefs, "only_test_hosts_whose_kb_we_have"));  w = arg_get_value(ctrls, "TEST_UNTESTED"); gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(w), 			pref_set(prefs, "only_test_hosts_whose_kb_we_dont_have")		    &&  !pref_set(prefs, "only_test_hosts_whose_kb_we_have")); 		     w = arg_get_value(ctrls, "RESTORE_KB"); gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(w),  			pref_set(prefs, "kb_restore"));   w = arg_get_value(ctrls, "NO_SCANNER"); gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(w),  			pref_set(prefs, "kb_dont_replay_scanners"));  			 w = arg_get_value(ctrls, "NO_INFO"); gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(w),  			pref_set(prefs, "kb_dont_replay_info_gathering"));  						 w = arg_get_value(ctrls, "NO_ATTACK"); gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(w),  			pref_set(prefs, "kb_dont_replay_attacks"));  						 w = arg_get_value(ctrls, "NO_DENIAL"); gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(w),  			pref_set(prefs, "kb_dont_replay_denials"));  													 w = arg_get_value(ctrls, "MAX_AGE"); if(arg_get_value(prefs, "kb_max_age"))  gtk_entry_set_text(GTK_ENTRY(w), arg_get_value(prefs, "kb_max_age")); 			 kb_enable_cb(arg_get_value(ctrls, "ENABLE_SAVE_KB"), ctrls); kb_restore_cb(arg_get_value(ctrls, "RESTORE_KB"), ctrls);}void prefs_dialog_kb_get_prefs(context, ctrls)  struct context *context;  struct arglist *ctrls;{ GtkWidget * bt; struct arglist *prefs = arg_get_value(context->prefs, "SERVER_PREFS"); bt = arg_get_value(ctrls, "ENABLE_SAVE_KB"); if(GTK_TOGGLE_BUTTON(bt) -> active)  arg_addset_value(prefs, "save_knowledge_base", "yes"); else  arg_addset_value(prefs, "save_knowledge_base", "no");   bt = arg_get_value(ctrls, "TEST_ALL"); if(GTK_TOGGLE_BUTTON(bt) -> active)  {  arg_addset_value(prefs, "only_test_hosts_whose_kb_we_dont_have", "no");  arg_addset_value(prefs, "only_test_hosts_whose_kb_we_have", "no");  }   bt = arg_get_value(ctrls, "TEST_TESTED"); if(GTK_TOGGLE_BUTTON(bt) -> active)  {  arg_addset_value(prefs, "only_test_hosts_whose_kb_we_dont_have", "no");  arg_addset_value(prefs, "only_test_hosts_whose_kb_we_have", "yes");  } bt = arg_get_value(ctrls, "TEST_UNTESTED");  if(GTK_TOGGLE_BUTTON(bt) -> active)  {  arg_addset_value(prefs, "only_test_hosts_whose_kb_we_dont_have", "yes");  arg_addset_value(prefs, "only_test_hosts_whose_kb_we_have", "no");  }   bt = arg_get_value(ctrls, "RESTORE_KB"); if(GTK_TOGGLE_BUTTON(bt) -> active)  arg_addset_value(prefs, "kb_restore", "yes"); else  arg_addset_value(prefs, "kb_restore", "no");     bt = arg_get_value(ctrls, "NO_SCANNER"); if(GTK_TOGGLE_BUTTON(bt) -> active)  arg_addset_value(prefs, "kb_dont_replay_scanners", "yes"); else  arg_addset_value(prefs, "kb_dont_replay_scanners", "no");  bt = arg_get_value(ctrls, "NO_INFO"); if(GTK_TOGGLE_BUTTON(bt) -> active)  arg_addset_value(prefs, "kb_dont_replay_info_gathering", "yes"); else  arg_addset_value(prefs, "kb_dont_replay_info_gathering", "no");     bt = arg_get_value(ctrls, "NO_ATTACK"); if(GTK_TOGGLE_BUTTON(bt) -> active)  arg_addset_value(prefs, "kb_dont_replay_attacks", "yes"); else  arg_addset_value(prefs, "kb_dont_replay_attacks", "no");      bt = arg_get_value(ctrls, "NO_DENIAL"); if(GTK_TOGGLE_BUTTON(bt) -> active)  arg_addset_value(prefs, "kb_dont_replay_denials", "yes"); else  arg_addset_value(prefs, "kb_dont_replay_denials", "no");        bt = arg_get_value(ctrls, "MAX_AGE"); arg_addset_value(prefs, "kb_max_age", gtk_entry_get_text(GTK_ENTRY(bt))); }struct arglist * prefs_dialog_kb(){ GtkWidget * frame; struct arglist * ctrls = emalloc(sizeof(struct arglist)); GtkWidget * button, *label; GtkWidget * box, * sbox, * entry; GtkTooltips * tooltips;  tooltips = gtk_tooltips_new();  frame = gtk_frame_new(_("Nessus Knowledge Base")); gtk_container_border_width(GTK_CONTAINER(frame), 10); arg_add_value(ctrls, "FRAME", ARG_PTR, -1, frame);     box = gtk_vbox_new(FALSE, FALSE);  gtk_container_add(GTK_CONTAINER(frame), box); button = gtk_check_button_new_with_label(ENABLE_KB_SAVING); gtk_tooltips_set_tip(tooltips, button, HLP_ENABLE_KB_SAVING, ""); gtk_signal_connect(GTK_OBJECT(button),		     "clicked",		     GTK_SIGNAL_FUNC(kb_enable_cb),		     ctrls); gtk_box_pack_start(GTK_BOX(box), button, FALSE, FALSE, 5); /* XXX must disable all the panel if deactivated */  arg_add_value(ctrls, "ENABLE_SAVE_KB", ARG_PTR, -1, button);  gtk_widget_show(button);  button = gtk_radio_button_new_with_label(NULL, TEST_ALL); gtk_tooltips_set_tip(tooltips, button, HLP_KB_TEST_ALL, ""); gtk_box_pack_start(GTK_BOX(box), button, FALSE, FALSE, 5); arg_add_value(ctrls, "TEST_ALL", ARG_PTR, -1, button); gtk_widget_show(button);  /*list = gtk_radio_button_group(GTK_RADIO_BUTTON(button));*/ button = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(button), TEST_TESTED); gtk_tooltips_set_tip(tooltips, button, HLP_KB_TEST_TESTED, ""); gtk_box_pack_start(GTK_BOX(box), button, FALSE, FALSE, 5); arg_add_value(ctrls, "TEST_TESTED", ARG_PTR, -1, button); gtk_widget_show(button);  button = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(button), TEST_UNTESTED); gtk_tooltips_set_tip(tooltips, button, HLP_KB_TEST_UNTESTED, ""); gtk_box_pack_start(GTK_BOX(box), button, FALSE, FALSE, 5); arg_add_value(ctrls, "TEST_UNTESTED", ARG_PTR, -1, button); gtk_widget_show(button);   button = gtk_check_button_new_with_label(RESTORE_KB); gtk_tooltips_set_tip(tooltips, button, HLP_RESTORE_KB, ""); gtk_box_pack_start(GTK_BOX(box), button, FALSE, FALSE, 5); arg_add_value(ctrls, "RESTORE_KB", ARG_PTR, -1, button); gtk_signal_connect(GTK_OBJECT(button),		     "clicked",		     GTK_SIGNAL_FUNC(kb_restore_cb),		     ctrls); gtk_widget_show(button);  sbox = gtk_vbox_new(FALSE, FALSE); gtk_box_pack_start(GTK_BOX(box), sbox, FALSE, FALSE, 5); gtk_widget_show(sbox);  button = gtk_check_button_new_with_label(NO_SCANNER); gtk_tooltips_set_tip(tooltips, button, HLP_KB_NO_SCANNER, ""); gtk_container_border_width(GTK_CONTAINER(sbox), 10); gtk_box_pack_start(GTK_BOX(sbox), button, TRUE, TRUE, 0); arg_add_value(ctrls, "NO_SCANNER", ARG_PTR, -1, button); gtk_widget_show(button);  button = gtk_check_button_new_with_label(NO_INFO); gtk_tooltips_set_tip(tooltips, button, HLP_KB_NO_INFO, ""); gtk_box_pack_start(GTK_BOX(sbox), button, TRUE, TRUE, 5); gtk_widget_show(button); arg_add_value(ctrls, "NO_INFO", ARG_PTR, -1, button);      button = gtk_check_button_new_with_label(NO_ATTACK); gtk_tooltips_set_tip(tooltips, button, HLP_KB_NO_ATTACK, ""); gtk_box_pack_start(GTK_BOX(sbox), button, TRUE, TRUE, 5); gtk_widget_show(button); arg_add_value(ctrls, "NO_ATTACK", ARG_PTR, -1, button);   button = gtk_check_button_new_with_label(NO_DENIAL); gtk_tooltips_set_tip(tooltips, button, HLP_KB_NO_DENIAL, ""); gtk_box_pack_start(GTK_BOX(sbox), button, TRUE, TRUE, 5); gtk_widget_show(button); arg_add_value(ctrls, "NO_DENIAL", ARG_PTR, -1, button);    sbox = gtk_hbox_new(TRUE, TRUE); gtk_box_pack_start(GTK_BOX(box), sbox, TRUE, TRUE, 5); gtk_widget_show(sbox);  label = gtk_label_new(_("Max age of a saved KB (in secs) : ")); gtk_box_pack_start(GTK_BOX(sbox), label, TRUE, TRUE, 5); gtk_widget_show(label);  entry = gtk_entry_new(); gtk_tooltips_set_tip(tooltips, entry, HLP_KB_MAX_AGE, ""); gtk_box_pack_start(GTK_BOX(sbox), entry, TRUE, TRUE, 5); gtk_entry_set_text(GTK_ENTRY(entry), "864000"); gtk_widget_show(entry); arg_add_value(ctrls, "MAX_AGE", ARG_PTR, -1, entry);   gtk_widget_show(box); kb_enable_cb(arg_get_value(ctrls, "ENABLE_SAVE_KB"), ctrls); kb_restore_cb(arg_get_value(ctrls, "RESTORE_KB"), ctrls); gtk_tooltips_enable(tooltips);  return ctrls;}#endif#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -