📄 prefs_dialog.c
字号:
/* Nessus * Copyright (C) 1998 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>#include "nessus_i18n.h"#include "nessus_plugin.h"#ifdef USE_GTK#include "comm.h"#include <gtk/gtk.h>#include "xstuff.h"#include "context.h"#include "preferences.h"#include "sighand.h"#include "prefs_dialog_auth.h"#include "prefs_dialog_prefs.h"#include "prefs_help.h"#include "prefs_dialog.h"#include "prefs_context.h"#include "prefs_scope_tree.h"#include "prefs_about.h"#include "prefs_comment.h"#include "prefs_options.h"#include "prefs_report.h"#include "prefs_scan_assistant.h"#include "prefs_comment.h"#ifdef ENABLE_SAVE_KB# include "prefs_kb.h"#endif#include "error_dialog.h"#include "monitor_dialog.h"#include "report.h"#include "report_save.h"#include "read_target_file.h"#include "globals.h"#include "../xpm/connect_16.xpm"#include "../xpm/connect_24.xpm"#include "../xpm/disconnect_16.xpm"#include "../xpm/disconnect_24.xpm"#include "../xpm/general_prefs.xpm"#include "../xpm/credentials.xpm"#include "../xpm/plugins.xpm"#include "../xpm/knowledgebase.xpm"#include "../xpm/access_rules.xpm"#include "../xpm/properties.xpm"#include "../xpm/target_selection.xpm"static void prefs_dialog_set_tooltips(struct arglist *);/* * launch the users manual pdf document with the configure * pdf viewer. */voidshow_users_manual(menuitem, ctrls) GtkWidget *menuitem; gpointer ctrls;{#ifdef NESSUS_DOCDIR char * dir = NESSUS_DOCDIR;#else char * dir = "";#endif /* the pdf file is covered by gettext to allow * speficication of translation in the respective po * files rather than in the source code. */ char * fname = _("users-manual.pdf"); char * path = g_build_filename(dir, fname, NULL); show_pdf(path); g_free(path);}/* * Save the current global settings to ~/.nessusrc */voidsave_global_settings(menuitem, ctrls) GtkWidget *menuitem; gpointer ctrls;{ prefs_dialog_apply(Global, ctrls); prefs_dialog_apply_plugin_prefs(Global->plugins); prefs_dialog_apply_plugin_prefs(Global->scanners); context_sync_plugin_prefs(Global); preferences_save(Global); show_info(_("The global settings have been saved."));}/* * Toggle Toolbar on/off */voidtoggle_toolbar(menuitem, ctrls) GtkWidget *menuitem; struct arglist *ctrls;{ GtkWidget *toolbar = arg_get_value(ctrls, "TOOLBAR"); if(gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menuitem))) { prefs_set_int(Global, "hide_toolbar", 0); gtk_widget_show(toolbar); } else { prefs_set_int(Global, "hide_toolbar", 1); gtk_widget_hide(toolbar); }}/* * Toggle Message-Log on/off */voidtoggle_msglog(menuitem, ctrls) GtkWidget *menuitem; struct arglist *ctrls;{ GtkWidget *msglogframe = arg_get_value(ctrls, "MSGLOGFRAME"); if(gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menuitem))) { prefs_set_int(Global, "hide_msglog", 0); gtk_widget_show(msglogframe); } else { prefs_set_int(Global, "hide_msglog", 1); gtk_widget_hide(msglogframe); }}/* * Menu items */voidmenuitem_TODO(menuitem, ctrls) GtkWidget *menuitem; struct arglist *ctrls;{ show_error(_("Not yet implemented."));}voidmenuitem_add(menuitem, menu, name, stockicon, func) GtkWidget *menuitem; GtkWidget *menu; const gchar *name; const gchar *stockicon; GtkSignalFunc func;{ GtkWidget *icon; gtk_widget_show(menuitem); gtk_container_add(GTK_CONTAINER(menu), menuitem); if(name) arg_add_value(MainDialog, name, ARG_PTR, -1, menuitem); if(stockicon) { icon = gtk_image_new_from_stock(stockicon, GTK_ICON_SIZE_MENU); gtk_widget_show(icon); gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menuitem), icon); } if(func) gtk_signal_connect(GTK_OBJECT(menuitem), "activate", func, MainDialog);}voidmenuitem_separator(menu) GtkWidget *menu;{ GtkWidget *menuitem; menuitem = gtk_menu_item_new(); menuitem_add(menuitem, menu, NULL, NULL, NULL); gtk_widget_set_sensitive(menuitem, FALSE);}/* Add a pair of new "stock" icons to the factory. * * The parameters small and large are the arrays of char* that make up * an xpm. The icons are added to the factory as an icon set for the * given stock id. The small icon is used as the default icon for the * size GTK_ICON_SIZE_MENU and the large one is the default icon for the * whole set and the default icon for the size * GTK_ICON_SIZE_LARGE_TOOLBAR. * * The parameter small may be NULL to indicate that no special small * variant exists. */static voidadd_nessus_icon_set(factory, stock_id, large, small) GtkIconFactory *factory; const char *stock_id; const char **large; const char **small;{ GtkIconSet *iconset; GtkIconSource *source; GdkPixbuf *pixbuf; /* The "large" icon is used as the default icon and the icon for the * GTK_ICON_SIZE_LARGE_TOOLBAR size */ pixbuf = gdk_pixbuf_new_from_xpm_data(large); iconset = gtk_icon_set_new_from_pixbuf(pixbuf); source = gtk_icon_source_new(); gtk_icon_source_set_pixbuf(source, pixbuf); gtk_icon_source_set_size_wildcarded(source, FALSE); gtk_icon_source_set_size(source, GTK_ICON_SIZE_LARGE_TOOLBAR); gtk_icon_set_add_source(iconset, source); gtk_icon_source_free(source); g_object_unref(G_OBJECT(pixbuf)); /* The "small" icon is used for the GTK_ICON_SIZE_MENU size */ if (small != NULL) { pixbuf = gdk_pixbuf_new_from_xpm_data(small); source = gtk_icon_source_new(); gtk_icon_source_set_pixbuf(source, pixbuf); gtk_icon_source_set_size_wildcarded(source, FALSE); gtk_icon_source_set_size(source, GTK_ICON_SIZE_MENU); gtk_icon_set_add_source(iconset, source); gtk_icon_source_free(source); g_object_unref(G_OBJECT(pixbuf)); } gtk_icon_factory_add(factory, stock_id, iconset);} /* Create some nessus specific stock icons. * * This function adds two stock icon sets, "nessus-connect" and * "nessus-disconnect" so that they can be used for menu items or * buttons. */static voidcreate_nessus_icon_factory(){ GtkIconFactory* factory = gtk_icon_factory_new(); add_nessus_icon_set(factory, "nessus-connect", connect_24, connect_16); add_nessus_icon_set(factory, "nessus-disconnect", disconnect_24, disconnect_16); add_nessus_icon_set(factory, "nessus-general-prefs", general_prefs_xpm, NULL); add_nessus_icon_set(factory, "nessus-plugins", plugins_xpm, NULL); add_nessus_icon_set(factory, "nessus-credentials", credentials_xpm, NULL); add_nessus_icon_set(factory, "nessus-target-selection", target_selection_xpm, NULL); add_nessus_icon_set(factory, "nessus-access-rules", access_rules_xpm, NULL); add_nessus_icon_set(factory, "nessus-prefs", properties_xpm, NULL); add_nessus_icon_set(factory, "nessus-knowledge-base", knowledgebase_xpm, NULL); gtk_icon_factory_add_default(factory); g_object_unref(G_OBJECT(factory));}/* * prefs_dialog_setup * * This function draws the preferences dialog of the Nessus * client * */voidprefs_dialog_setup(context) struct context *context;{ GtkWidget *window; GtkWidget *mainmenu; GtkWidget *menuitem; GtkWidget *submenu; GtkWidget *subsubmenu; GtkWidget *notebook; GtkWidget *label; GtkWidget *frame; GtkWidget *box; GtkWidget *hbox; GtkWidget *vbox; GtkWidget *msglogframe; GtkWidget *icon; GtkWidget *toolbar_button; GtkWidget *toolbar; GtkWidget *scrolledwindow; GtkWidget *textview; GtkWidget *hpaned; GtkWidget *statusbar; GtkAccelGroup *accel_group; struct arglist *prefs_scope_tree; struct arglist *prefs_comment; struct arglist *prefs_options; struct arglist *prefs_report; struct arglist *ctrls = emalloc(sizeof(struct arglist)); MainDialog = ctrls; create_nessus_icon_factory();/* * We draw the window .... */ window = gtk_window_new(GTK_WINDOW_TOPLEVEL); g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(gtk_main_quit), NULL); g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(gtk_widget_hide_on_delete), NULL); gtk_window_set_title(GTK_WINDOW(window), _("Nessus Client")); arg_add_value(ctrls, "WINDOW", ARG_PTR, -1, window); arg_add_value(ctrls, "CONTEXT", ARG_PTR, -1, window); /* * We put a vbox in it... */ box = gtk_vbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(window), box); gtk_widget_show(box);/* * Main menu */ accel_group = gtk_accel_group_new(); gtk_window_add_accel_group(GTK_WINDOW(window), accel_group); mainmenu = gtk_menu_bar_new(); gtk_widget_show(mainmenu); gtk_box_pack_start(GTK_BOX(box), mainmenu, FALSE, FALSE, 0); /* File menu */ menuitem = gtk_menu_item_new_with_mnemonic(_("_File")); menuitem_add(menuitem, mainmenu, NULL, NULL, NULL); submenu = gtk_menu_new(); gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), submenu); menuitem = gtk_image_menu_item_new_with_mnemonic(_("_Connect")); menuitem_add(menuitem, submenu, "CONNECT_MENUITEM", "nessus-connect", GTK_SIGNAL_FUNC(prefs_dialog_auth_connect)); menuitem = gtk_image_menu_item_new_with_mnemonic(_("_Disconnect")); menuitem_add(menuitem, submenu, "DISCONNECT_MENUITEM", "nessus-disconnect", GTK_SIGNAL_FUNC(prefs_dialog_auth_disconnect)); gtk_widget_set_sensitive(menuitem, FALSE); menuitem_separator(submenu); menuitem = gtk_image_menu_item_new_with_mnemonic(_("_Scan Assistant")); menuitem_add(menuitem, submenu, NULL, "gtk-help", GTK_SIGNAL_FUNC(prefs_scan_assistant)); menuitem = gtk_image_menu_item_new_from_stock("gtk-preferences", accel_group); menuitem_add(menuitem, submenu, "PREFERENCES_MENUITEM", NULL, GTK_SIGNAL_FUNC(prefs_dialog_prefs)); menuitem = gtk_image_menu_item_new_with_mnemonic(_("Save _Global Settings")); menuitem_add(menuitem, submenu, NULL, "gtk-save", GTK_SIGNAL_FUNC(save_global_settings)); menuitem_separator(submenu); menuitem = gtk_image_menu_item_new_from_stock("gtk-quit", accel_group); menuitem_add(menuitem, submenu, NULL, NULL, GTK_SIGNAL_FUNC(gtk_main_quit)); /* View menu */ menuitem = gtk_menu_item_new_with_mnemonic(_("_View")); menuitem_add(menuitem, mainmenu, NULL, NULL, NULL); submenu = gtk_menu_new(); gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), submenu); menuitem = gtk_check_menu_item_new_with_mnemonic(_("_Toolbar")); menuitem_add(menuitem, submenu, "TOGGLETOOLBAR_MENUITEM", NULL, GTK_SIGNAL_FUNC(toggle_toolbar)); menuitem = gtk_check_menu_item_new_with_mnemonic(_("_Message log")); menuitem_add(menuitem, submenu, "TOGGLEMSGLOG_MENUITEM", NULL, GTK_SIGNAL_FUNC(toggle_msglog)); /* Task menu */ menuitem = gtk_menu_item_new_with_mnemonic(_("_Task")); menuitem_add(menuitem, mainmenu, NULL, NULL, NULL); submenu = gtk_menu_new(); gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), submenu); menuitem = gtk_image_menu_item_new_with_mnemonic(_("_New")); menuitem_add(menuitem, submenu, NULL, "gtk-new", GTK_SIGNAL_FUNC(task_menu_new)); menuitem = gtk_menu_item_new_with_mnemonic(_("_Rename")); menuitem_add(menuitem, submenu, "RENAMETASK_MENUITEM", NULL, GTK_SIGNAL_FUNC(task_menu_rename)); menuitem = gtk_image_menu_item_new_from_stock("gtk-delete", accel_group); menuitem_add(menuitem, submenu, "DELETETASK_MENUITEM", NULL, GTK_SIGNAL_FUNC(task_menu_delete)); /* Scope menu */ menuitem = gtk_menu_item_new_with_mnemonic(_("_Scope")); menuitem_add(menuitem, mainmenu, NULL, NULL, NULL); submenu = gtk_menu_new(); gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), submenu); menuitem = gtk_image_menu_item_new_from_stock("gtk-execute", accel_group); menuitem_add(menuitem, submenu, "EXECSCOPE_MENUITEM", NULL, GTK_SIGNAL_FUNC(prefs_dialog_execute));#if 0 menuitem = gtk_image_menu_item_new_from_stock("gtk-stop", accel_group); menuitem_add(menuitem, submenu, "STOPSCOPE_MENUITEM", NULL, GTK_SIGNAL_FUNC(menuitem_TODO)); gtk_widget_set_sensitive(menuitem, FALSE);#endif menuitem_separator(submenu); menuitem = gtk_image_menu_item_new_with_mnemonic(_("_New")); menuitem_add(menuitem, submenu, "NEWSCOPE_MENUITEM", "gtk-new", GTK_SIGNAL_FUNC(scope_menu_new)); menuitem = gtk_menu_item_new_with_mnemonic(_("_Rename")); menuitem_add(menuitem, submenu, "RENAMESCOPE_MENUITEM", NULL, GTK_SIGNAL_FUNC(scope_menu_rename)); menuitem = gtk_image_menu_item_new_from_stock("gtk-delete", accel_group); menuitem_add(menuitem, submenu, "DELETESCOPE_MENUITEM", NULL, GTK_SIGNAL_FUNC(scope_menu_delete)); /* Scope -> Move to task */ menuitem = gtk_menu_item_new_with_mnemonic(_("_Move to task")); menuitem_add(menuitem, submenu, "MOVESCOPE_MENUITEM", NULL, NULL); subsubmenu = gtk_menu_new(); gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), subsubmenu); arg_add_value(ctrls, "MOVESCOPE_SUBMENU", ARG_PTR, -1, subsubmenu); menuitem_separator(submenu); menuitem = gtk_image_menu_item_new_from_stock("gtk-open", NULL); menuitem_add(menuitem, submenu, "OPENSCOPE_MENUITEM", NULL, GTK_SIGNAL_FUNC(scope_menu_open)); menuitem = gtk_image_menu_item_new_from_stock("gtk-save-as", NULL); menuitem_add(menuitem, submenu, "SAVESCOPE_MENUITEM", NULL, GTK_SIGNAL_FUNC(scope_menu_save)); /* Report menu */ menuitem = gtk_menu_item_new_with_mnemonic(_("_Report")); menuitem_add(menuitem, mainmenu, NULL, NULL, NULL); submenu = gtk_menu_new(); gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), submenu); menuitem = gtk_menu_item_new_with_mnemonic(_("_Rename")); menuitem_add(menuitem, submenu, "RENAMEREPORT_MENUITEM", NULL, GTK_SIGNAL_FUNC(report_menu_rename)); menuitem = gtk_image_menu_item_new_from_stock("gtk-delete", accel_group); menuitem_add(menuitem, submenu, "DELETEREPORT_MENUITEM", NULL, GTK_SIGNAL_FUNC(report_menu_delete)); menuitem_separator(submenu); menuitem = gtk_menu_item_new_with_mnemonic(_("_Import")); menuitem_add(menuitem, submenu, "IMPORTREPORT_MENUITEM", NULL, GTK_SIGNAL_FUNC(open_report_selectfile)); menuitem = gtk_menu_item_new_with_mnemonic(_("E_xport")); menuitem_add(menuitem, submenu, "EXPORTREPORT_MENUITEM", NULL, GTK_SIGNAL_FUNC(report_save_cb)); menuitem = gtk_image_menu_item_new_from_stock("gtk-print", accel_group); menuitem_add(menuitem, submenu, "PRINTREPORT_MENUITEM", NULL, GTK_SIGNAL_FUNC(report_open_pdf)); /* Help menu */ menuitem = gtk_menu_item_new_with_mnemonic(_("_Help")); menuitem_add(menuitem, mainmenu, NULL, NULL, NULL); submenu = gtk_menu_new(); gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), submenu);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -